diff options
author | Len Brown <len.brown@intel.com> | 2007-06-09 01:42:00 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2007-06-09 01:42:00 -0400 |
commit | 072971d7d3e70ddac5c5be3436d929470cc2b3fb (patch) | |
tree | 821abde2d5b7c1edbd43431634db9d5811c55941 /drivers/acpi | |
parent | 85f6038f2170e3335dda09c3dfb0f83110e87019 (diff) |
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>
Diffstat (limited to 'drivers/acpi')
-rw-r--r-- | drivers/acpi/osl.c | 38 |
1 files changed, 1 insertions, 37 deletions
diff --git a/drivers/acpi/osl.c b/drivers/acpi/osl.c index 58ceb18ec997..3f244eb99e04 100644 --- a/drivers/acpi/osl.c +++ b/drivers/acpi/osl.c | |||
@@ -77,13 +77,7 @@ static struct workqueue_struct *kacpi_notify_wq; | |||
77 | #define OSI_STRING_LENGTH_MAX 64 /* arbitrary */ | 77 | #define OSI_STRING_LENGTH_MAX 64 /* arbitrary */ |
78 | static char osi_additional_string[OSI_STRING_LENGTH_MAX]; | 78 | static char osi_additional_string[OSI_STRING_LENGTH_MAX]; |
79 | 79 | ||
80 | #define OSI_LINUX_ENABLED | ||
81 | #ifdef OSI_LINUX_ENABLED | ||
82 | int osi_linux = 1; /* enable _OSI(Linux) by default */ | ||
83 | #else | ||
84 | int osi_linux; /* disable _OSI(Linux) by default */ | 80 | int osi_linux; /* disable _OSI(Linux) by default */ |
85 | #endif | ||
86 | |||
87 | 81 | ||
88 | #ifdef CONFIG_DMI | 82 | #ifdef CONFIG_DMI |
89 | static struct __initdata dmi_system_id acpi_osl_dmi_table[]; | 83 | static struct __initdata dmi_system_id acpi_osl_dmi_table[]; |
@@ -1183,17 +1177,10 @@ acpi_os_validate_interface (char *interface) | |||
1183 | if (!strcmp("Linux", interface)) { | 1177 | if (!strcmp("Linux", interface)) { |
1184 | printk(KERN_WARNING PREFIX | 1178 | printk(KERN_WARNING PREFIX |
1185 | "System BIOS is requesting _OSI(Linux)\n"); | 1179 | "System BIOS is requesting _OSI(Linux)\n"); |
1186 | #ifdef OSI_LINUX_ENABLED | ||
1187 | printk(KERN_WARNING PREFIX | ||
1188 | "Please test with \"acpi_osi=!Linux\"\n" | ||
1189 | "Please send dmidecode " | ||
1190 | "to linux-acpi@vger.kernel.org\n"); | ||
1191 | #else | ||
1192 | printk(KERN_WARNING PREFIX | 1180 | printk(KERN_WARNING PREFIX |
1193 | "If \"acpi_osi=Linux\" works better,\n" | 1181 | "If \"acpi_osi=Linux\" works better,\n" |
1194 | "Please send dmidecode " | 1182 | "Please send dmidecode " |
1195 | "to linux-acpi@vger.kernel.org\n"); | 1183 | "to linux-acpi@vger.kernel.org\n"); |
1196 | #endif | ||
1197 | if(osi_linux) | 1184 | if(osi_linux) |
1198 | return AE_OK; | 1185 | return AE_OK; |
1199 | } | 1186 | } |
@@ -1227,36 +1214,14 @@ acpi_os_validate_address ( | |||
1227 | } | 1214 | } |
1228 | 1215 | ||
1229 | #ifdef CONFIG_DMI | 1216 | #ifdef CONFIG_DMI |
1230 | #ifdef OSI_LINUX_ENABLED | ||
1231 | static int dmi_osi_not_linux(struct dmi_system_id *d) | ||
1232 | { | ||
1233 | printk(KERN_NOTICE "%s detected: requires not _OSI(Linux)\n", d->ident); | ||
1234 | enable_osi_linux(0); | ||
1235 | return 0; | ||
1236 | } | ||
1237 | #else | ||
1238 | static int dmi_osi_linux(struct dmi_system_id *d) | 1217 | static int dmi_osi_linux(struct dmi_system_id *d) |
1239 | { | 1218 | { |
1240 | printk(KERN_NOTICE "%s detected: requires _OSI(Linux)\n", d->ident); | 1219 | printk(KERN_NOTICE "%s detected: enabling _OSI(Linux)\n", d->ident); |
1241 | enable_osi_linux(1); | 1220 | enable_osi_linux(1); |
1242 | return 0; | 1221 | return 0; |
1243 | } | 1222 | } |
1244 | #endif | ||
1245 | 1223 | ||
1246 | static struct dmi_system_id acpi_osl_dmi_table[] __initdata = { | 1224 | static struct dmi_system_id acpi_osl_dmi_table[] __initdata = { |
1247 | #ifdef OSI_LINUX_ENABLED | ||
1248 | /* | ||
1249 | * Boxes that need NOT _OSI(Linux) | ||
1250 | */ | ||
1251 | { | ||
1252 | .callback = dmi_osi_not_linux, | ||
1253 | .ident = "Toshiba Satellite P100", | ||
1254 | .matches = { | ||
1255 | DMI_MATCH(DMI_BOARD_VENDOR, "TOSHIBA"), | ||
1256 | DMI_MATCH(DMI_BOARD_NAME, "Satellite P100"), | ||
1257 | }, | ||
1258 | }, | ||
1259 | #else | ||
1260 | /* | 1225 | /* |
1261 | * Boxes that need _OSI(Linux) | 1226 | * Boxes that need _OSI(Linux) |
1262 | */ | 1227 | */ |
@@ -1268,7 +1233,6 @@ static struct dmi_system_id acpi_osl_dmi_table[] __initdata = { | |||
1268 | DMI_MATCH(DMI_BOARD_NAME, "MPAD-MSAE Customer Reference Boards"), | 1233 | DMI_MATCH(DMI_BOARD_NAME, "MPAD-MSAE Customer Reference Boards"), |
1269 | }, | 1234 | }, |
1270 | }, | 1235 | }, |
1271 | #endif | ||
1272 | {} | 1236 | {} |
1273 | }; | 1237 | }; |
1274 | #endif /* CONFIG_DMI */ | 1238 | #endif /* CONFIG_DMI */ |