aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/kernel-parameters.txt29
-rw-r--r--drivers/acpi/osl.c14
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
145static u32 acpi_osi_handler(acpi_string interface, u32 supported) 146static 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;