]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/acpi/blacklist.c
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi...
[mirror_ubuntu-bionic-kernel.git] / drivers / acpi / blacklist.c
index bb542acc05749cde9c95082144a3f104b8773330..037fd537bbf613a6b1a8108e962f3de0feafe340 100644 (file)
 
 #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();