Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 072971d7 authored by Len Brown's avatar Len Brown
Browse files

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: default avatarLen Brown <len.brown@intel.com>
parent 85f6038f
Loading
Loading
Loading
Loading
+1 −37
Original line number Diff line number Diff line
@@ -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 */