[PATCH 2/4] ACPI / osi: Cleanup _OSI("Linux") related code before introducing new support

From: Lv Zheng
Date: Tue Apr 26 2016 - 03:40:25 EST


This patch cleans up OSI code in osl.c in order to make osi_linux not
_OSI("Linux") specific to allow new features to reuse this structure.

Signed-off-by: Lv Zheng <lv.zheng@xxxxxxxxx>
---
drivers/acpi/blacklist.c | 2 +-
drivers/acpi/osl.c | 83 +++++++++++++++++++---------------------------
include/linux/acpi.h | 2 +-
3 files changed, 36 insertions(+), 51 deletions(-)

diff --git a/drivers/acpi/blacklist.c b/drivers/acpi/blacklist.c
index 96809cd..675a941 100644
--- a/drivers/acpi/blacklist.c
+++ b/drivers/acpi/blacklist.c
@@ -135,7 +135,7 @@ int __init acpi_blacklisted(void)
#ifdef CONFIG_DMI
static int __init dmi_enable_osi_linux(const struct dmi_system_id *d)
{
- acpi_dmi_osi_linux(1, d); /* enable */
+ acpi_dmi_osi_linux(true, d); /* enable */
return 0;
}
static int __init dmi_disable_osi_vista(const struct dmi_system_id *d)
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c
index d7d84a8..df1101e 100644
--- a/drivers/acpi/osl.c
+++ b/drivers/acpi/osl.c
@@ -131,24 +131,22 @@ static void __init acpi_osi_setup_late(void);
* or boot with "acpi_osi=Linux"
*/

-static struct osi_linux {
- unsigned int enable:1;
- unsigned int dmi:1;
- unsigned int cmdline:1;
+static struct acpi_osi_config {
u8 default_disabling;
-} osi_linux = {0, 0, 0, 0};
+ unsigned int linux_enable:1;
+ unsigned int linux_dmi:1;
+ unsigned int linux_cmdline:1;
+} osi_config;

static u32 acpi_osi_handler(acpi_string interface, u32 supported)
{
if (!strcmp("Linux", interface)) {
-
- printk_once(KERN_NOTICE FW_BUG PREFIX
+ pr_notice_once(FW_BUG
"BIOS _OSI(Linux) query %s%s\n",
- osi_linux.enable ? "honored" : "ignored",
- osi_linux.cmdline ? " via cmdline" :
- osi_linux.dmi ? " via DMI" : "");
+ osi_config.linux_enable ? "honored" : "ignored",
+ osi_config.linux_cmdline ? " via cmdline" :
+ osi_config.linux_dmi ? " via DMI" : "");
}
-
if (!strcmp("Darwin", interface)) {
/*
* Apple firmware will behave poorly if it receives positive
@@ -264,8 +262,7 @@ acpi_physical_address __init acpi_os_get_root_pointer(void)
else if (efi.acpi != EFI_INVALID_TABLE_ADDR)
return efi.acpi;
else {
- printk(KERN_ERR PREFIX
- "System description tables not found\n");
+ pr_err("System description tables not found\n");
return 0;
}
} else if (IS_ENABLED(CONFIG_ACPI_LEGACY_TABLES_LOOKUP)) {
@@ -1469,7 +1466,7 @@ void __init acpi_osi_setup(char *str)
return;

if (str == NULL || *str == '\0') {
- printk(KERN_INFO PREFIX "_OSI method disabled\n");
+ pr_info("_OSI method disabled\n");
acpi_gbl_create_osi_method = FALSE;
return;
}
@@ -1478,12 +1475,12 @@ void __init acpi_osi_setup(char *str)
str++;
if (*str == '\0') {
/* Do not override acpi_osi=!* */
- if (!osi_linux.default_disabling)
- osi_linux.default_disabling =
+ if (!osi_config.default_disabling)
+ osi_config.default_disabling =
ACPI_DISABLE_ALL_VENDOR_STRINGS;
return;
} else if (*str == '*') {
- osi_linux.default_disabling = ACPI_DISABLE_ALL_STRINGS;
+ osi_config.default_disabling = ACPI_DISABLE_ALL_STRINGS;
for (i = 0; i < OSI_STRING_ENTRIES_MAX; i++) {
osi = &osi_setup_entries[i];
osi->enable = false;
@@ -1506,39 +1503,28 @@ void __init acpi_osi_setup(char *str)
}
}

-static void __init set_osi_linux(unsigned int enable)
+static void __init __acpi_osi_setup_linux(bool enable)
{
- if (osi_linux.enable != enable)
- osi_linux.enable = enable;
-
- if (osi_linux.enable)
+ osi_config.linux_enable = !!enable;
+ if (enable)
acpi_osi_setup("Linux");
else
acpi_osi_setup("!Linux");
-
- return;
}

-static void __init acpi_cmdline_osi_linux(unsigned int enable)
+static void __init acpi_osi_setup_linux(bool enable)
{
- osi_linux.cmdline = 1; /* cmdline set the default and override DMI */
- osi_linux.dmi = 0;
- set_osi_linux(enable);
-
- return;
+ osi_config.linux_cmdline = 1;
+ /* Override acpi_blacklisted() */
+ osi_config.linux_dmi = 0;
+ __acpi_osi_setup_linux(enable);
}

-void __init acpi_dmi_osi_linux(int enable, const struct dmi_system_id *d)
+void __init acpi_dmi_osi_linux(bool enable, const struct dmi_system_id *d)
{
- printk(KERN_NOTICE PREFIX "DMI detected: %s\n", d->ident);
-
- if (enable == -1)
- return;
-
- osi_linux.dmi = 1; /* DMI knows that this box asks OSI(Linux) */
- set_osi_linux(enable);
-
- return;
+ pr_notice("DMI detected to setup _OSI(\"Linux\"): %s\n", d->ident);
+ osi_config.linux_dmi = 1;
+ __acpi_osi_setup_linux(enable);
}

/*
@@ -1555,12 +1541,11 @@ static void __init acpi_osi_setup_late(void)
int i;
acpi_status status;

- if (osi_linux.default_disabling) {
- status = acpi_update_interfaces(osi_linux.default_disabling);
-
+ if (osi_config.default_disabling) {
+ status = acpi_update_interfaces(osi_config.default_disabling);
if (ACPI_SUCCESS(status))
- printk(KERN_INFO PREFIX "Disabled all _OSI OS vendors%s\n",
- osi_linux.default_disabling ==
+ pr_info("Disabled all _OSI OS vendors%s\n",
+ osi_config.default_disabling ==
ACPI_DISABLE_ALL_STRINGS ?
" and feature groups" : "");
}
@@ -1575,12 +1560,12 @@ static void __init acpi_osi_setup_late(void)
status = acpi_install_interface(str);

if (ACPI_SUCCESS(status))
- printk(KERN_INFO PREFIX "Added _OSI(%s)\n", str);
+ pr_info("Added _OSI(%s)\n", str);
} else {
status = acpi_remove_interface(str);

if (ACPI_SUCCESS(status))
- printk(KERN_INFO PREFIX "Deleted _OSI(%s)\n", str);
+ pr_info("Deleted _OSI(%s)\n", str);
}
}
}
@@ -1588,9 +1573,9 @@ static void __init acpi_osi_setup_late(void)
static int __init osi_setup(char *str)
{
if (str && !strcmp("Linux", str))
- acpi_cmdline_osi_linux(1);
+ acpi_osi_setup_linux(true);
else if (str && !strcmp("!Linux", str))
- acpi_cmdline_osi_linux(0);
+ acpi_osi_setup_linux(false);
else
acpi_osi_setup(str);

diff --git a/include/linux/acpi.h b/include/linux/acpi.h
index be5d206..fceea1e 100644
--- a/include/linux/acpi.h
+++ b/include/linux/acpi.h
@@ -353,7 +353,7 @@ extern bool wmi_has_guid(const char *guid);
extern char acpi_video_backlight_string[];
extern long acpi_is_video_device(acpi_handle handle);
extern int acpi_blacklisted(void);
-extern void acpi_dmi_osi_linux(int enable, const struct dmi_system_id *d);
+extern void acpi_dmi_osi_linux(bool enable, const struct dmi_system_id *d);
extern void acpi_osi_setup(char *str);
extern bool acpi_osi_is_win8(void);

--
1.7.10