diff options
-rw-r--r-- | Documentation/kernel-parameters.txt | 29 | ||||
-rw-r--r-- | drivers/acpi/osl.c | 14 |
2 files changed, 40 insertions, 3 deletions
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 15356aca938c..d0d9cf278ae3 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -235,10 +235,35 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | |||
235 | Format: To spoof as Windows 98: ="Microsoft Windows" | 235 | Format: To spoof as Windows 98: ="Microsoft Windows" |
236 | 236 | ||
237 | acpi_osi= [HW,ACPI] Modify list of supported OS interface strings | 237 | acpi_osi= [HW,ACPI] Modify list of supported OS interface strings |
238 | acpi_osi="string1" # add string1 -- only one string | 238 | acpi_osi="string1" # add string1 |
239 | acpi_osi="!string2" # remove built-in string2 | 239 | acpi_osi="!string2" # remove string2 |
240 | acpi_osi=! # disable all built-in OS vendor | ||
241 | strings | ||
240 | acpi_osi= # disable all strings | 242 | acpi_osi= # disable all strings |
241 | 243 | ||
244 | 'acpi_osi=!' can be used in combination with single or | ||
245 | multiple 'acpi_osi="string1"' to support specific OS | ||
246 | vendor string(s). Note that such command can only | ||
247 | affect the default state of the OS vendor strings, thus | ||
248 | it cannot affect the default state of the feature group | ||
249 | strings and the current state of the OS vendor strings, | ||
250 | specifying it multiple times through kernel command line | ||
251 | is meaningless. | ||
252 | Examples: | ||
253 | 1. 'acpi_osi=! acpi_osi="Windows 2000"' is equivalent | ||
254 | to 'acpi_osi="Windows 2000" acpi_osi=!', they all | ||
255 | can make '_OSI("Windows 2000")' TRUE. | ||
256 | |||
257 | 'acpi_osi=' cannot be used in combination with other | ||
258 | 'acpi_osi=' command lines, the _OSI method will not | ||
259 | exist in the ACPI namespace. NOTE that such command can | ||
260 | only affect the _OSI support state, thus specifying it | ||
261 | multiple times through kernel command line is also | ||
262 | meaningless. | ||
263 | Examples: | ||
264 | 1. 'acpi_osi=' can make 'CondRefOf(_OSI, Local1)' | ||
265 | FALSE. | ||
266 | |||
242 | acpi_pm_good [X86] | 267 | acpi_pm_good [X86] |
243 | Override the pmtimer bug detection: force the kernel | 268 | Override the pmtimer bug detection: force the kernel |
244 | to assume that this machine's pmtimer latches its value | 269 | to assume that this machine's pmtimer latches its value |
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index 6ab2c3505520..e8baa408faef 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c | |||
@@ -140,7 +140,8 @@ static struct osi_linux { | |||
140 | unsigned int enable:1; | 140 | unsigned int enable:1; |
141 | unsigned int dmi:1; | 141 | unsigned int dmi:1; |
142 | unsigned int cmdline:1; | 142 | unsigned int cmdline:1; |
143 | } osi_linux = {0, 0, 0}; | 143 | unsigned int default_disabling:1; |
144 | } osi_linux = {0, 0, 0, 0}; | ||
144 | 145 | ||
145 | static u32 acpi_osi_handler(acpi_string interface, u32 supported) | 146 | static u32 acpi_osi_handler(acpi_string interface, u32 supported) |
146 | { | 147 | { |
@@ -1376,6 +1377,10 @@ void __init acpi_osi_setup(char *str) | |||
1376 | 1377 | ||
1377 | if (*str == '!') { | 1378 | if (*str == '!') { |
1378 | str++; | 1379 | str++; |
1380 | if (*str == '\0') { | ||
1381 | osi_linux.default_disabling = 1; | ||
1382 | return; | ||
1383 | } | ||
1379 | enable = false; | 1384 | enable = false; |
1380 | } | 1385 | } |
1381 | 1386 | ||
@@ -1441,6 +1446,13 @@ static void __init acpi_osi_setup_late(void) | |||
1441 | int i; | 1446 | int i; |
1442 | acpi_status status; | 1447 | acpi_status status; |
1443 | 1448 | ||
1449 | if (osi_linux.default_disabling) { | ||
1450 | status = acpi_update_interfaces(ACPI_DISABLE_ALL_VENDOR_STRINGS); | ||
1451 | |||
1452 | if (ACPI_SUCCESS(status)) | ||
1453 | printk(KERN_INFO PREFIX "Disabled all _OSI OS vendors\n"); | ||
1454 | } | ||
1455 | |||
1444 | for (i = 0; i < OSI_STRING_ENTRIES_MAX; i++) { | 1456 | for (i = 0; i < OSI_STRING_ENTRIES_MAX; i++) { |
1445 | osi = &osi_setup_entries[i]; | 1457 | osi = &osi_setup_entries[i]; |
1446 | str = osi->string; | 1458 | str = osi->string; |