aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
authorLen Brown <len.brown@intel.com>2008-01-23 21:19:27 -0500
committerLen Brown <len.brown@intel.com>2008-01-23 21:28:12 -0500
commita1bd4e35e8d9df24db7d7addd74cbfcc87ec9fb3 (patch)
treead5cf9cdf705d75555206b4d7ec76b010a948efd /drivers/acpi
parent98f1db22d70b0660a27cc8818a61181b5d503671 (diff)
ACPI: DMI blacklist to reduce console warnings on OSI(Linux) systems.
This DMI blacklist reduces the console messages on systems which have a BIOS that invokes OSI(Linux). As the DMI blacklist already knows about these systems, the request for DMI info itself is disabled. Further, if OSI(Linux) has already been determined to have no beneift, we disable the console message requesting acpi_osi=Linux test results. Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/blacklist.c343
1 files changed, 343 insertions, 0 deletions
diff --git a/drivers/acpi/blacklist.c b/drivers/acpi/blacklist.c
index e88d4460afda..8809654d6cc9 100644
--- a/drivers/acpi/blacklist.c
+++ b/drivers/acpi/blacklist.c
@@ -178,12 +178,264 @@ static int __init dmi_enable_osi_linux(const struct dmi_system_id *d)
178 acpi_dmi_osi_linux(1, d); /* enable */ 178 acpi_dmi_osi_linux(1, d); /* enable */
179 return 0; 179 return 0;
180} 180}
181static int __init dmi_disable_osi_linux(const struct dmi_system_id *d)
182{
183 acpi_dmi_osi_linux(0, d); /* disable */
184 return 0;
185}
186static int __init dmi_unknown_osi_linux(const struct dmi_system_id *d)
187{
188 acpi_dmi_osi_linux(-1, d); /* unknown */
189 return 0;
190}
191
192/*
193 * Most BIOS that invoke OSI(Linux) do nothing with it.
194 * But some cause Linux to break.
195 * Only a couple use it to make Linux run better.
196 *
197 * Thus, Linux should continue to disable OSI(Linux) by default,
198 * should continue to discourage BIOS writers from using it, and
199 * should whitelist the few existing systems that require it.
200 *
201 * If it appears clear a vendor isn't using OSI(Linux)
202 * for anything constructive, blacklist them by name to disable
203 * unnecessary dmesg warnings on all of their products.
204 */
181 205
182static struct dmi_system_id acpi_osi_dmi_table[] __initdata = { 206static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
183 /* 207 /*
208 * Disable OSI(Linux) warnings on all "Acer, inc."
209 *
210 * _OSI(Linux) disables the latest Windows BIOS code:
211 * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5050"),
212 * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5580"),
213 * DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 3010"),
214 * _OSI(Linux) effect unknown:
215 * DMI_MATCH(DMI_PRODUCT_NAME, "Ferrari 5000"),
216 */
217 {
218 .callback = dmi_disable_osi_linux,
219 .ident = "Acer, inc.",
220 .matches = {
221 DMI_MATCH(DMI_SYS_VENDOR, "Acer, inc."),
222 },
223 },
224 /*
225 * Disable OSI(Linux) warnings on all "Acer"
226 *
227 * _OSI(Linux) effect unknown:
228 * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5100"),
229 * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5610"),
230 * DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 7720Z"),
231 * DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 5520"),
232 * DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 6460"),
233 * DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 7510"),
234 * DMI_MATCH(DMI_PRODUCT_NAME, "Extensa 5220"),
235 */
236 {
237 .callback = dmi_unknown_osi_linux,
238 .ident = "Acer",
239 .matches = {
240 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
241 },
242 },
243 /*
244 * Disable OSI(Linux) warnings on all "Apple Computer, Inc."
245 *
246 * _OSI(Linux) confirmed to be a NOP:
247 * DMI_MATCH(DMI_PRODUCT_NAME, "MacBook1,1"),
248 * DMI_MATCH(DMI_PRODUCT_NAME, "MacBook2,1"),
249 * DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro2,2"),
250 * _OSI(Linux) effect unknown:
251 * DMI_MATCH(DMI_PRODUCT_NAME, "MacPro2,1"),
252 * DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro1,1"),
253 * DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro3,1"),
254 */
255 {
256 .callback = dmi_disable_osi_linux,
257 .ident = "Apple",
258 .matches = {
259 DMI_MATCH(DMI_SYS_VENDOR, "Apple Computer, Inc."),
260 },
261 },
262 /*
263 * Disable OSI(Linux) warnings on all "BenQ"
264 *
265 * _OSI(Linux) confirmed to be a NOP:
266 * DMI_MATCH(DMI_PRODUCT_NAME, "Joybook S31"),
267 */
268 {
269 .callback = dmi_disable_osi_linux,
270 .ident = "BenQ",
271 .matches = {
272 DMI_MATCH(DMI_SYS_VENDOR, "BenQ"),
273 },
274 },
275 /*
276 * Disable OSI(Linux) warnings on all "Clevo Co."
277 *
278 * _OSI(Linux) confirmed to be a NOP:
279 * DMI_MATCH(DMI_PRODUCT_NAME, "M570RU"),
280 */
281 {
282 .callback = dmi_disable_osi_linux,
283 .ident = "Clevo",
284 .matches = {
285 DMI_MATCH(DMI_SYS_VENDOR, "Clevo Co."),
286 },
287 },
288 /*
289 * Disable OSI(Linux) warnings on all "COMPAL"
290 *
291 * _OSI(Linux) confirmed to be a NOP:
292 * DMI_MATCH(DMI_BOARD_NAME, "HEL8X"),
293 * _OSI(Linux) unknown effect:
294 * DMI_MATCH(DMI_BOARD_NAME, "IFL91"),
295 */
296 {
297 .callback = dmi_unknown_osi_linux,
298 .ident = "Compal",
299 .matches = {
300 DMI_MATCH(DMI_BIOS_VENDOR, "COMPAL"),
301 },
302 },
303 { /* OSI(Linux) touches USB, breaks suspend to disk */
304 .callback = dmi_disable_osi_linux,
305 .ident = "Dell Dimension 5150",
306 .matches = {
307 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
308 DMI_MATCH(DMI_PRODUCT_NAME, "Dell DM051"),
309 },
310 },
311 { /* OSI(Linux) is a NOP */
312 .callback = dmi_disable_osi_linux,
313 .ident = "Dell",
314 .matches = {
315 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
316 DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 1501"),
317 },
318 },
319 { /* OSI(Linux) effect unknown */
320 .callback = dmi_unknown_osi_linux,
321 .ident = "Dell",
322 .matches = {
323 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
324 DMI_MATCH(DMI_PRODUCT_NAME, "Latitude D830"),
325 },
326 },
327 { /* OSI(Linux) effect unknown */
328 .callback = dmi_unknown_osi_linux,
329 .ident = "Dell",
330 .matches = {
331 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
332 DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex GX620"),
333 },
334 },
335 { /* OSI(Linux) effect unknown */
336 .callback = dmi_unknown_osi_linux,
337 .ident = "Dell",
338 .matches = {
339 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
340 DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 1900"),
341 },
342 },
343 { /* OSI(Linux) touches USB */
344 .callback = dmi_disable_osi_linux,
345 .ident = "Dell",
346 .matches = {
347 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
348 DMI_MATCH(DMI_PRODUCT_NAME, "Precision WorkStation 390"),
349 },
350 },
351 { /* OSI(Linux) is a NOP */
352 .callback = dmi_disable_osi_linux,
353 .ident = "Dell Vostro 1000",
354 .matches = {
355 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
356 DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1000"),
357 },
358 },
359 { /* OSI(Linux) effect unknown */
360 .callback = dmi_unknown_osi_linux,
361 .ident = "Dell",
362 .matches = {
363 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
364 DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge SC440"),
365 },
366 },
367 { /* OSI(Linux) effect unknown */
368 .callback = dmi_unknown_osi_linux,
369 .ident = "Dialogue Flybook V5",
370 .matches = {
371 DMI_MATCH(DMI_SYS_VENDOR, "Dialogue Technology Corporation"),
372 DMI_MATCH(DMI_PRODUCT_NAME, "Flybook V5"),
373 },
374 },
375 /*
376 * Disable OSI(Linux) warnings on all "FUJITSU SIEMENS"
377 *
378 * _OSI(Linux) disables latest Windows BIOS code:
379 * DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pa 2510"),
380 * _OSI(Linux) confirmed to be a NOP:
381 * DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pi 1536"),
382 * DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pi 1556"),
383 * DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Xi 1546"),
384 * _OSI(Linux) unknown effect:
385 * DMI_MATCH(DMI_PRODUCT_NAME, "Amilo M1425"),
386 * DMI_MATCH(DMI_PRODUCT_NAME, "Amilo Si 1520"),
387 * DMI_MATCH(DMI_PRODUCT_NAME, "ESPRIMO Mobile V5505"),
388 */
389 {
390 .callback = dmi_disable_osi_linux,
391 .ident = "Fujitsu Siemens",
392 .matches = {
393 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
394 },
395 },
396 /*
397 * Disable OSI(Linux) warnings on all "Hewlett-Packard"
398 *
399 * _OSI(Linux) confirmed to be a NOP:
400 * .ident = "HP Pavilion tx 1000"
401 * DMI_MATCH(DMI_BOARD_NAME, "30BF"),
402 * .ident = "HP Pavilion dv2000"
403 * DMI_MATCH(DMI_BOARD_NAME, "30B5"),
404 * .ident = "HP Pavilion dv5000",
405 * DMI_MATCH(DMI_BOARD_NAME, "30A7"),
406 * .ident = "HP Pavilion dv6300 30BC",
407 * DMI_MATCH(DMI_BOARD_NAME, "30BC"),
408 * .ident = "HP Pavilion dv6000",
409 * DMI_MATCH(DMI_BOARD_NAME, "30B7"),
410 * DMI_MATCH(DMI_BOARD_NAME, "30B8"),
411 * .ident = "HP Pavilion dv9000",
412 * DMI_MATCH(DMI_BOARD_NAME, "30B9"),
413 * .ident = "HP Pavilion dv9500",
414 * DMI_MATCH(DMI_BOARD_NAME, "30CB"),
415 * .ident = "HP/Compaq Presario C500",
416 * DMI_MATCH(DMI_BOARD_NAME, "30C6"),
417 * .ident = "HP/Compaq Presario F500",
418 * DMI_MATCH(DMI_BOARD_NAME, "30D3"),
419 * _OSI(Linux) unknown effect:
420 * .ident = "HP Pavilion dv6500",
421 * DMI_MATCH(DMI_BOARD_NAME, "30D0"),
422 */
423 {
424 .callback = dmi_disable_osi_linux,
425 .ident = "Hewlett-Packard",
426 .matches = {
427 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
428 },
429 },
430 /*
431 * Lenovo has a mix of systems OSI(Linux) situations
432 * and thus we can not wildcard the vendor.
433 *
184 * _OSI(Linux) helps sound 434 * _OSI(Linux) helps sound
185 * DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad R61"), 435 * DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad R61"),
186 * DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T61"), 436 * DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T61"),
437 * _OSI(Linux) is a NOP:
438 * DMI_MATCH(DMI_PRODUCT_VERSION, "3000 N100"),
187 */ 439 */
188 { 440 {
189 .callback = dmi_enable_osi_linux, 441 .callback = dmi_enable_osi_linux,
@@ -201,6 +453,97 @@ static struct dmi_system_id acpi_osi_dmi_table[] __initdata = {
201 DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T61"), 453 DMI_MATCH(DMI_PRODUCT_VERSION, "ThinkPad T61"),
202 }, 454 },
203 }, 455 },
456 {
457 .callback = dmi_unknown_osi_linux,
458 .ident = "Lenovo 3000 V100",
459 .matches = {
460 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
461 DMI_MATCH(DMI_PRODUCT_VERSION, "LENOVO3000 V100"),
462 },
463 },
464 {
465 .callback = dmi_disable_osi_linux,
466 .ident = "Lenovo 3000 N100",
467 .matches = {
468 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
469 DMI_MATCH(DMI_PRODUCT_VERSION, "3000 N100"),
470 },
471 },
472 /*
473 * Disable OSI(Linux) warnings on all "LG Electronics"
474 *
475 * _OSI(Linux) confirmed to be a NOP:
476 * DMI_MATCH(DMI_PRODUCT_NAME, "P1-J150B"),
477 */
478 {
479 .callback = dmi_disable_osi_linux,
480 .ident = "LG",
481 .matches = {
482 DMI_MATCH(DMI_SYS_VENDOR, "LG Electronics"),
483 },
484 },
485 /* NEC - OSI(Linux) effect unknown */
486 {
487 .callback = dmi_unknown_osi_linux,
488 .ident = "NEC VERSA M360",
489 .matches = {
490 DMI_MATCH(DMI_SYS_VENDOR, "NEC Computers SAS"),
491 DMI_MATCH(DMI_PRODUCT_NAME, "NEC VERSA M360"),
492 },
493 },
494 /*
495 * Disable OSI(Linux) warnings on all "Samsung Electronics"
496 *
497 * OSI(Linux) disables PNP0C32 and other BIOS code for Windows:
498 * DMI_MATCH(DMI_PRODUCT_NAME, "R40P/R41P"),
499 * DMI_MATCH(DMI_PRODUCT_NAME, "R59P/R60P/R61P"),
500 */
501 {
502 .callback = dmi_disable_osi_linux,
503 .ident = "Samsung",
504 .matches = {
505 DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD."),
506 },
507 },
508 /*
509 * Disable OSI(Linux) warnings on all "Sony Corporation"
510 *
511 * _OSI(Linux) is a NOP:
512 * DMI_MATCH(DMI_PRODUCT_NAME, "VGN-SZ650N"),
513 * DMI_MATCH(DMI_PRODUCT_NAME, "VGN-SZ38GP_C"),
514 * DMI_MATCH(DMI_PRODUCT_NAME, "VGN-TZ21MN_N"),
515 * _OSI(Linux) unknown effect:
516 * DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FZ11M"),
517 */
518 {
519 .callback = dmi_unknown_osi_linux,
520 .ident = "Sony",
521 .matches = {
522 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
523 },
524 },
525 /*
526 * Disable OSI(Linux) warnings on all "TOSHIBA"
527 *
528 * _OSI(Linux) breaks sound (bugzilla 7787):
529 * DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P100"),
530 * DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P105"),
531 * _OSI(Linux) is a NOP:
532 * DMI_MATCH(DMI_PRODUCT_NAME, "Satellite A100"),
533 * DMI_MATCH(DMI_PRODUCT_NAME, "Satellite A210"),
534 * _OSI(Linux) unknown effect:
535 * DMI_MATCH(DMI_PRODUCT_NAME, "Satellite A135"),
536 * DMI_MATCH(DMI_PRODUCT_NAME, "Satellite A200"),
537 * DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P205"),
538 * DMI_MATCH(DMI_PRODUCT_NAME, "Satellite U305"),
539 */
540 {
541 .callback = dmi_disable_osi_linux,
542 .ident = "Toshiba",
543 .matches = {
544 DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
545 },
546 },
204 {} 547 {}
205}; 548};
206 549