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 | ||
