diff options
-rw-r--r-- | drivers/acpi/blacklist.c | 343 |
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 | } |
181 | static 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 | } | ||
186 | static 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 | ||
182 | static struct dmi_system_id acpi_osi_dmi_table[] __initdata = { | 206 | static 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 | ||