ACPI: Add facility to remove all _OSI strings
authorLv Zheng <lv.zheng@intel.com>
Mon, 22 Jul 2013 08:08:36 +0000 (16:08 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Tue, 23 Jul 2013 02:07:04 +0000 (04:07 +0200)
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>
Documentation/kernel-parameters.txt
drivers/acpi/osl.c

index d0d9cf278ae3c5b57118e5f74b9a092e3036a2e6..5ec77aad1773ce5f55894cff118edfe9229830cd 100644 (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="string1"      # add string1
                        acpi_osi="!string2"     # remove string2
+                       acpi_osi=!*             # remove all strings
                        acpi_osi=!              # disable all built-in OS vendor
                                                  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
                        strings and the current state of the OS vendor strings,
                        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:
                          1. 'acpi_osi=! acpi_osi="Windows 2000"' is equivalent
                             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)'
                             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]
                        Override the pmtimer bug detection: force the kernel
                        to assume that this machine's pmtimer latches its value
index e8baa408faef7cb417426444d9d9c4f7c116c25f..cc1ed12d0b89db6c268e9b7da4fd4ea1d53d0bf4 100644 (file)
@@ -1380,6 +1380,13 @@ void __init acpi_osi_setup(char *str)
                if (*str == '\0') {
                        osi_linux.default_disabling = 1;
                        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;
        }
This page took 0.029983 seconds and 5 git commands to generate.