|
@@ -135,7 +135,7 @@ static struct osi_linux {
|
|
|
unsigned int enable:1;
|
|
|
unsigned int dmi:1;
|
|
|
unsigned int cmdline:1;
|
|
|
- unsigned int default_disabling:1;
|
|
|
+ u8 default_disabling;
|
|
|
} osi_linux = {0, 0, 0, 0};
|
|
|
|
|
|
static u32 acpi_osi_handler(acpi_string interface, u32 supported)
|
|
@@ -1751,10 +1751,13 @@ void __init acpi_osi_setup(char *str)
|
|
|
if (*str == '!') {
|
|
|
str++;
|
|
|
if (*str == '\0') {
|
|
|
- osi_linux.default_disabling = 1;
|
|
|
+ /* Do not override acpi_osi=!* */
|
|
|
+ if (!osi_linux.default_disabling)
|
|
|
+ osi_linux.default_disabling =
|
|
|
+ ACPI_DISABLE_ALL_VENDOR_STRINGS;
|
|
|
return;
|
|
|
} else if (*str == '*') {
|
|
|
- acpi_update_interfaces(ACPI_DISABLE_ALL_STRINGS);
|
|
|
+ osi_linux.default_disabling = ACPI_DISABLE_ALL_STRINGS;
|
|
|
for (i = 0; i < OSI_STRING_ENTRIES_MAX; i++) {
|
|
|
osi = &osi_setup_entries[i];
|
|
|
osi->enable = false;
|
|
@@ -1827,10 +1830,13 @@ static void __init acpi_osi_setup_late(void)
|
|
|
acpi_status status;
|
|
|
|
|
|
if (osi_linux.default_disabling) {
|
|
|
- status = acpi_update_interfaces(ACPI_DISABLE_ALL_VENDOR_STRINGS);
|
|
|
+ status = acpi_update_interfaces(osi_linux.default_disabling);
|
|
|
|
|
|
if (ACPI_SUCCESS(status))
|
|
|
- printk(KERN_INFO PREFIX "Disabled all _OSI OS vendors\n");
|
|
|
+ printk(KERN_INFO PREFIX "Disabled all _OSI OS vendors%s\n",
|
|
|
+ osi_linux.default_disabling ==
|
|
|
+ ACPI_DISABLE_ALL_STRINGS ?
|
|
|
+ " and feature groups" : "");
|
|
|
}
|
|
|
|
|
|
for (i = 0; i < OSI_STRING_ENTRIES_MAX; i++) {
|