ACPI: Add facility to remove all _OSI strings

This patch changes the "acpi_osi=" boot parameter implementation so
that:
1. "acpi_osi=!" can be used to disable all _OSI OS vendor strings by
   default.  It is meaningless to specify "acpi_osi=!" multiple
   times as it can only affect the default state of the target _OSI
   strings.
2. "acpi_osi=!*" can be used to remove all _OSI OS vendor strings
   and all _OSI feature group strings.  It is useful to specify
   "acpi_osi=!*" multiple times through kernel command line to
   override the current state of the target _OSI strings.

Signed-off-by: Lv Zheng <lv.zheng@intel.com>
Reviewed-by: Zhang Rui <rui.zhang@intel.com>
Acked-by: Len Brown <len.brown@intel.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
Lv Zheng 2013-07-22 16:08:36 +08:00 committed by Rafael J. Wysocki
parent 5dc17986fd
commit 741d81280a
2 changed files with 34 additions and 1 deletions

View File

@ -237,6 +237,7 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
acpi_osi= [HW,ACPI] Modify list of supported OS interface strings acpi_osi= [HW,ACPI] Modify list of supported OS interface strings
acpi_osi="string1" # add string1 acpi_osi="string1" # add string1
acpi_osi="!string2" # remove string2 acpi_osi="!string2" # remove string2
acpi_osi=!* # remove all strings
acpi_osi=! # disable all built-in OS vendor acpi_osi=! # disable all built-in OS vendor
strings strings
acpi_osi= # disable all strings acpi_osi= # disable all strings
@ -248,7 +249,9 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
it cannot affect the default state of the feature group it cannot affect the default state of the feature group
strings and the current state of the OS vendor strings, strings and the current state of the OS vendor strings,
specifying it multiple times through kernel command line specifying it multiple times through kernel command line
is meaningless. is meaningless. This command is useful when one do not
care about the state of the feature group strings which
should be controlled by the OSPM.
Examples: Examples:
1. 'acpi_osi=! acpi_osi="Windows 2000"' is equivalent 1. 'acpi_osi=! acpi_osi="Windows 2000"' is equivalent
to 'acpi_osi="Windows 2000" acpi_osi=!', they all to 'acpi_osi="Windows 2000" acpi_osi=!', they all
@ -264,6 +267,29 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
1. 'acpi_osi=' can make 'CondRefOf(_OSI, Local1)' 1. 'acpi_osi=' can make 'CondRefOf(_OSI, Local1)'
FALSE. FALSE.
'acpi_osi=!*' can be used in combination with single or
multiple 'acpi_osi="string1"' to support specific
string(s). Note that such command can affect the
current state of both the OS vendor strings and the
feature group strings, thus specifying it multiple times
through kernel command line is meaningful. But it may
still not able to affect the final state of a string if
there are quirks related to this string. This command
is useful when one want to control the state of the
feature group strings to debug BIOS issues related to
the OSPM features.
Examples:
1. 'acpi_osi="Module Device" acpi_osi=!*' can make
'_OSI("Module Device")' FALSE.
2. 'acpi_osi=!* acpi_osi="Module Device"' can make
'_OSI("Module Device")' TRUE.
3. 'acpi_osi=! acpi_osi=!* acpi_osi="Windows 2000"' is
equivalent to
'acpi_osi=!* acpi_osi=! acpi_osi="Windows 2000"'
and
'acpi_osi=!* acpi_osi="Windows 2000" acpi_osi=!',
they all will make '_OSI("Windows 2000")' TRUE.
acpi_pm_good [X86] acpi_pm_good [X86]
Override the pmtimer bug detection: force the kernel Override the pmtimer bug detection: force the kernel
to assume that this machine's pmtimer latches its value to assume that this machine's pmtimer latches its value

View File

@ -1380,6 +1380,13 @@ void __init acpi_osi_setup(char *str)
if (*str == '\0') { if (*str == '\0') {
osi_linux.default_disabling = 1; osi_linux.default_disabling = 1;
return; return;
} else if (*str == '*') {
acpi_update_interfaces(ACPI_DISABLE_ALL_STRINGS);
for (i = 0; i < OSI_STRING_ENTRIES_MAX; i++) {
osi = &osi_setup_entries[i];
osi->enable = false;
}
return;
} }
enable = false; enable = false;
} }