|
@@ -30,30 +30,13 @@
|
|
|
|
|
|
#include "internal.h"
|
|
|
|
|
|
-enum acpi_blacklist_predicates {
|
|
|
- all_versions,
|
|
|
- less_than_or_equal,
|
|
|
- equal,
|
|
|
- greater_than_or_equal,
|
|
|
-};
|
|
|
-
|
|
|
-struct acpi_blacklist_item {
|
|
|
- char oem_id[7];
|
|
|
- char oem_table_id[9];
|
|
|
- u32 oem_revision;
|
|
|
- char *table;
|
|
|
- enum acpi_blacklist_predicates oem_revision_predicate;
|
|
|
- char *reason;
|
|
|
- u32 is_critical_error;
|
|
|
-};
|
|
|
-
|
|
|
static struct dmi_system_id acpi_rev_dmi_table[] __initdata;
|
|
|
|
|
|
/*
|
|
|
* POLICY: If *anything* doesn't work, put it on the blacklist.
|
|
|
* If they are critical errors, mark it critical, and abort driver load.
|
|
|
*/
|
|
|
-static struct acpi_blacklist_item acpi_blacklist[] __initdata = {
|
|
|
+static struct acpi_platform_list acpi_blacklist[] __initdata = {
|
|
|
/* Compaq Presario 1700 */
|
|
|
{"PTLTD ", " DSDT ", 0x06040000, ACPI_SIG_DSDT, less_than_or_equal,
|
|
|
"Multiple problems", 1},
|
|
@@ -67,65 +50,27 @@ static struct acpi_blacklist_item acpi_blacklist[] __initdata = {
|
|
|
{"IBM ", "TP600E ", 0x00000105, ACPI_SIG_DSDT, less_than_or_equal,
|
|
|
"Incorrect _ADR", 1},
|
|
|
|
|
|
- {""}
|
|
|
+ { }
|
|
|
};
|
|
|
|
|
|
int __init acpi_blacklisted(void)
|
|
|
{
|
|
|
- int i = 0;
|
|
|
+ int i;
|
|
|
int blacklisted = 0;
|
|
|
- struct acpi_table_header table_header;
|
|
|
-
|
|
|
- while (acpi_blacklist[i].oem_id[0] != '\0') {
|
|
|
- if (acpi_get_table_header(acpi_blacklist[i].table, 0, &table_header)) {
|
|
|
- i++;
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- if (strncmp(acpi_blacklist[i].oem_id, table_header.oem_id, 6)) {
|
|
|
- i++;
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- if (strncmp
|
|
|
- (acpi_blacklist[i].oem_table_id, table_header.oem_table_id,
|
|
|
- 8)) {
|
|
|
- i++;
|
|
|
- continue;
|
|
|
- }
|
|
|
-
|
|
|
- if ((acpi_blacklist[i].oem_revision_predicate == all_versions)
|
|
|
- || (acpi_blacklist[i].oem_revision_predicate ==
|
|
|
- less_than_or_equal
|
|
|
- && table_header.oem_revision <=
|
|
|
- acpi_blacklist[i].oem_revision)
|
|
|
- || (acpi_blacklist[i].oem_revision_predicate ==
|
|
|
- greater_than_or_equal
|
|
|
- && table_header.oem_revision >=
|
|
|
- acpi_blacklist[i].oem_revision)
|
|
|
- || (acpi_blacklist[i].oem_revision_predicate == equal
|
|
|
- && table_header.oem_revision ==
|
|
|
- acpi_blacklist[i].oem_revision)) {
|
|
|
|
|
|
- printk(KERN_ERR PREFIX
|
|
|
- "Vendor \"%6.6s\" System \"%8.8s\" "
|
|
|
- "Revision 0x%x has a known ACPI BIOS problem.\n",
|
|
|
- acpi_blacklist[i].oem_id,
|
|
|
- acpi_blacklist[i].oem_table_id,
|
|
|
- acpi_blacklist[i].oem_revision);
|
|
|
+ i = acpi_match_platform_list(acpi_blacklist);
|
|
|
+ if (i >= 0) {
|
|
|
+ pr_err(PREFIX "Vendor \"%6.6s\" System \"%8.8s\" Revision 0x%x has a known ACPI BIOS problem.\n",
|
|
|
+ acpi_blacklist[i].oem_id,
|
|
|
+ acpi_blacklist[i].oem_table_id,
|
|
|
+ acpi_blacklist[i].oem_revision);
|
|
|
|
|
|
- printk(KERN_ERR PREFIX
|
|
|
- "Reason: %s. This is a %s error\n",
|
|
|
- acpi_blacklist[i].reason,
|
|
|
- (acpi_blacklist[i].
|
|
|
- is_critical_error ? "non-recoverable" :
|
|
|
- "recoverable"));
|
|
|
+ pr_err(PREFIX "Reason: %s. This is a %s error\n",
|
|
|
+ acpi_blacklist[i].reason,
|
|
|
+ (acpi_blacklist[i].data ?
|
|
|
+ "non-recoverable" : "recoverable"));
|
|
|
|
|
|
- blacklisted = acpi_blacklist[i].is_critical_error;
|
|
|
- break;
|
|
|
- } else {
|
|
|
- i++;
|
|
|
- }
|
|
|
+ blacklisted = acpi_blacklist[i].data;
|
|
|
}
|
|
|
|
|
|
(void)early_acpi_osi_init();
|