except for debugging purposes.
### efi
-> `= List of [ rs | attr ]`
+ = List of [ rs=<bool>, attr=no|uc ]
-All options are of boolean kind and can be prefixed with `no-` to
-effect the inverse meaning.
+Controls for interacting with the system Extended Firmware Interface.
-> `rs`
+* The `rs` boolean controls whether Runtime Services are used. By default,
+ Xen uses Runtime Services itself, and proxies certain calls on behalf of
+ dom0. Selecting `rs=0` prohibits all use of Runtime Services.
-> Default: `true`
-
->> Force or disable use of EFI runtime services.
-
-> `attr=uc`
-
-> Default: `off`
-
->> Allows mapping of RuntimeServices which have no cachability attribute
->> set as UC.
+* The `attr=` string exists to specify what to do with memory regions of
+ unknown/unrecognised cacheability. `attr=no` is the default and will
+ leave the memory regions unmapped, while `attr=uc` will map them as fully
+ uncacheable.
### ept
> `= List of [ ad=<bool>, pml=<bool> ]`
static int __init parse_efi_param(const char *s)
{
const char *ss;
- int rc = 0;
+ int rc = 0, val;
do {
- bool val = strncmp(s, "no-", 3);
-
- if ( !val )
- s += 3;
-
ss = strchr(s, ',');
if ( !ss )
ss = strchr(s, '\0');
- if ( !cmdline_strcmp(s, "rs") )
+ if ( (val = parse_boolean("rs", s, ss)) >= 0 )
{
if ( val )
__set_bit(EFI_RS, &efi_flags);
else
__clear_bit(EFI_RS, &efi_flags);
}
- else if ( !cmdline_strcmp(s, "attr=uc") )
- efi_map_uc = val;
+ else if ( (ss - s) > 5 && !memcmp(s, "attr=", 5) )
+ {
+ if ( cmdline_strcmp(s + 5, "uc") )
+ efi_map_uc = true;
+ else if ( cmdline_strcmp(s + 5, "no") )
+ efi_map_uc = false;
+ else
+ rc = -EINVAL;
+ }
else
rc = -EINVAL;