1
0
Fork 0

ACPI: disable _OSI(Linux) by default

In Linux-2.6.22 we expanded the boot parameter osi=
so that it can enable and !enable an OSI string.

_OSI(Linux) is a special case because we know that there
are both systems that require it set, and systems
require that it _not_ to be set.  In the long term it can't
be set, for the same reason _OS(Linux) can't be enabled --
it tends to confuse BIOS that are not properly
validated with Linux.  Further, the semantics and version
information of _OSI(Linux) were never actually defined.

The kernel prints out a message if it sees _OSI(Linux)
requested, and there is a DMI workaround to invoke
"osi=Linux" automatically for existing systems that need it.

http://bugzilla.kernel.org/show_bug.cgi?id=7787

Signed-off-by: Len Brown <len.brown@intel.com>
hifive-unleashed-5.1
Len Brown 2007-06-09 01:42:00 -04:00
parent 85f6038f21
commit 072971d7d3
1 changed files with 1 additions and 37 deletions

View File

@ -77,13 +77,7 @@ static struct workqueue_struct *kacpi_notify_wq;
#define OSI_STRING_LENGTH_MAX 64 /* arbitrary */
static char osi_additional_string[OSI_STRING_LENGTH_MAX];
#define OSI_LINUX_ENABLED
#ifdef OSI_LINUX_ENABLED
int osi_linux = 1; /* enable _OSI(Linux) by default */
#else
int osi_linux; /* disable _OSI(Linux) by default */
#endif
#ifdef CONFIG_DMI
static struct __initdata dmi_system_id acpi_osl_dmi_table[];
@ -1183,17 +1177,10 @@ acpi_os_validate_interface (char *interface)
if (!strcmp("Linux", interface)) {
printk(KERN_WARNING PREFIX
"System BIOS is requesting _OSI(Linux)\n");
#ifdef OSI_LINUX_ENABLED
printk(KERN_WARNING PREFIX
"Please test with \"acpi_osi=!Linux\"\n"
"Please send dmidecode "
"to linux-acpi@vger.kernel.org\n");
#else
printk(KERN_WARNING PREFIX
"If \"acpi_osi=Linux\" works better,\n"
"Please send dmidecode "
"to linux-acpi@vger.kernel.org\n");
#endif
if(osi_linux)
return AE_OK;
}
@ -1227,36 +1214,14 @@ acpi_os_validate_address (
}
#ifdef CONFIG_DMI
#ifdef OSI_LINUX_ENABLED
static int dmi_osi_not_linux(struct dmi_system_id *d)
{
printk(KERN_NOTICE "%s detected: requires not _OSI(Linux)\n", d->ident);
enable_osi_linux(0);
return 0;
}
#else
static int dmi_osi_linux(struct dmi_system_id *d)
{
printk(KERN_NOTICE "%s detected: requires _OSI(Linux)\n", d->ident);
printk(KERN_NOTICE "%s detected: enabling _OSI(Linux)\n", d->ident);
enable_osi_linux(1);
return 0;
}
#endif
static struct dmi_system_id acpi_osl_dmi_table[] __initdata = {
#ifdef OSI_LINUX_ENABLED
/*
* Boxes that need NOT _OSI(Linux)
*/
{
.callback = dmi_osi_not_linux,
.ident = "Toshiba Satellite P100",
.matches = {
DMI_MATCH(DMI_BOARD_VENDOR, "TOSHIBA"),
DMI_MATCH(DMI_BOARD_NAME, "Satellite P100"),
},
},
#else
/*
* Boxes that need _OSI(Linux)
*/
@ -1268,7 +1233,6 @@ static struct dmi_system_id acpi_osl_dmi_table[] __initdata = {
DMI_MATCH(DMI_BOARD_NAME, "MPAD-MSAE Customer Reference Boards"),
},
},
#endif
{}
};
#endif /* CONFIG_DMI */