[PATCH] dmi: move ACPI boot quirk
authorAndrey Panin <pazke@donpac.ru>
Sat, 25 Jun 2005 21:54:42 +0000 (14:54 -0700)
committerLinus Torvalds <torvalds@ppc970.osdl.org>
Sat, 25 Jun 2005 23:24:27 +0000 (16:24 -0700)
This patch moves ACPI boot quirks out of dmi_scan.c

Signed-off-by: Andrey Panin <pazke@donpac.ru>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/i386/kernel/acpi/boot.c
arch/i386/kernel/dmi_scan.c

index 848bb97af7ca316755f6e47e612ecc75717fb197..0771596c5496adc44838b96909f0873e6289fb89 100644 (file)
@@ -29,6 +29,7 @@
 #include <linux/efi.h>
 #include <linux/irq.h>
 #include <linux/module.h>
+#include <linux/dmi.h>
 
 #include <asm/pgtable.h>
 #include <asm/io_apic.h>
@@ -815,6 +816,218 @@ acpi_process_madt(void)
        return;
 }
 
+extern int acpi_force;
+
+#ifdef __i386__
+
+#ifdef CONFIG_ACPI_PCI
+static int __init disable_acpi_irq(struct dmi_system_id *d)
+{
+       if (!acpi_force) {
+               printk(KERN_NOTICE "%s detected: force use of acpi=noirq\n",
+                      d->ident);
+               acpi_noirq_set();
+       }
+       return 0;
+}
+
+static int __init disable_acpi_pci(struct dmi_system_id *d)
+{
+       if (!acpi_force) {
+               printk(KERN_NOTICE "%s detected: force use of pci=noacpi\n",
+                      d->ident);
+               acpi_disable_pci();
+       }
+       return 0;
+}
+#endif
+
+static int __init dmi_disable_acpi(struct dmi_system_id *d)
+{
+       if (!acpi_force) {
+               printk(KERN_NOTICE "%s detected: acpi off\n",d->ident);
+               disable_acpi();
+       } else {
+               printk(KERN_NOTICE
+                      "Warning: DMI blacklist says broken, but acpi forced\n");
+       }
+       return 0;
+}
+
+/*
+ * Limit ACPI to CPU enumeration for HT
+ */
+static int __init force_acpi_ht(struct dmi_system_id *d)
+{
+       if (!acpi_force) {
+               printk(KERN_NOTICE "%s detected: force use of acpi=ht\n", d->ident);
+               disable_acpi();
+               acpi_ht = 1;
+       } else {
+               printk(KERN_NOTICE
+                      "Warning: acpi=force overrules DMI blacklist: acpi=ht\n");
+       }
+       return 0;
+}
+
+/*
+ * If your system is blacklisted here, but you find that acpi=force
+ * works for you, please contact acpi-devel@sourceforge.net
+ */
+static struct dmi_system_id __initdata acpi_dmi_table[] = {
+       /*
+        * Boxes that need ACPI disabled
+        */
+       {
+               .callback = dmi_disable_acpi,
+               .ident = "IBM Thinkpad",
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
+                       DMI_MATCH(DMI_BOARD_NAME, "2629H1G"),
+               },
+       },
+
+       /*
+        * Boxes that need acpi=ht
+        */
+       {
+               .callback = force_acpi_ht,
+               .ident = "FSC Primergy T850",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "PRIMERGY T850"),
+               },
+       },
+       {
+               .callback = force_acpi_ht,
+               .ident = "DELL GX240",
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_VENDOR, "Dell Computer Corporation"),
+                       DMI_MATCH(DMI_BOARD_NAME, "OptiPlex GX240"),
+               },
+       },
+       {
+               .callback = force_acpi_ht,
+               .ident = "HP VISUALIZE NT Workstation",
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "HP VISUALIZE NT Workstation"),
+               },
+       },
+       {
+               .callback = force_acpi_ht,
+               .ident = "Compaq Workstation W8000",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Compaq"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "Workstation W8000"),
+               },
+       },
+       {
+               .callback = force_acpi_ht,
+               .ident = "ASUS P4B266",
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
+                       DMI_MATCH(DMI_BOARD_NAME, "P4B266"),
+               },
+       },
+       {
+               .callback = force_acpi_ht,
+               .ident = "ASUS P2B-DS",
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
+                       DMI_MATCH(DMI_BOARD_NAME, "P2B-DS"),
+               },
+       },
+       {
+               .callback = force_acpi_ht,
+               .ident = "ASUS CUR-DLS",
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
+                       DMI_MATCH(DMI_BOARD_NAME, "CUR-DLS"),
+               },
+       },
+       {
+               .callback = force_acpi_ht,
+               .ident = "ABIT i440BX-W83977",
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_VENDOR, "ABIT <http://www.abit.com>"),
+                       DMI_MATCH(DMI_BOARD_NAME, "i440BX-W83977 (BP6)"),
+               },
+       },
+       {
+               .callback = force_acpi_ht,
+               .ident = "IBM Bladecenter",
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
+                       DMI_MATCH(DMI_BOARD_NAME, "IBM eServer BladeCenter HS20"),
+               },
+       },
+       {
+               .callback = force_acpi_ht,
+               .ident = "IBM eServer xSeries 360",
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
+                       DMI_MATCH(DMI_BOARD_NAME, "eServer xSeries 360"),
+               },
+       },
+       {
+               .callback = force_acpi_ht,
+               .ident = "IBM eserver xSeries 330",
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
+                       DMI_MATCH(DMI_BOARD_NAME, "eserver xSeries 330"),
+               },
+       },
+       {
+               .callback = force_acpi_ht,
+               .ident = "IBM eserver xSeries 440",
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_VENDOR, "IBM"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "eserver xSeries 440"),
+               },
+       },
+
+#ifdef CONFIG_ACPI_PCI
+       /*
+        * Boxes that need ACPI PCI IRQ routing disabled
+        */
+       {
+               .callback = disable_acpi_irq,
+               .ident = "ASUS A7V",
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC"),
+                       DMI_MATCH(DMI_BOARD_NAME, "<A7V>"),
+                       /* newer BIOS, Revision 1011, does work */
+                       DMI_MATCH(DMI_BIOS_VERSION, "ASUS A7V ACPI BIOS Revision 1007"),
+               },
+       },
+
+       /*
+        * Boxes that need ACPI PCI IRQ routing and PCI scan disabled
+        */
+       {       /* _BBN 0 bug */
+               .callback = disable_acpi_pci,
+               .ident = "ASUS PR-DLS",
+               .matches = {
+                       DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
+                       DMI_MATCH(DMI_BOARD_NAME, "PR-DLS"),
+                       DMI_MATCH(DMI_BIOS_VERSION, "ASUS PR-DLS ACPI BIOS Revision 1010"),
+                       DMI_MATCH(DMI_BIOS_DATE, "03/21/2003")
+               },
+       },
+       {
+               .callback = disable_acpi_pci,
+               .ident = "Acer TravelMate 36x Laptop",
+               .matches = {
+                       DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
+                       DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 360"),
+               },
+       },
+#endif
+};
+
+#endif /* __i386__ */
+
 /*
  * acpi_boot_table_init() and acpi_boot_init()
  *  called from setup_arch(), always.
@@ -843,6 +1056,10 @@ acpi_boot_table_init(void)
 {
        int error;
 
+#ifdef __i386__
+       dmi_check_system(acpi_dmi_table);
+#endif
+
        /*
         * If acpi_disabled, bail out
         * One exception: acpi=ht continues far enough to enumerate LAPICs
@@ -870,8 +1087,6 @@ acpi_boot_table_init(void)
         */
        error = acpi_blacklisted();
        if (error) {
-               extern int acpi_force;
-
                if (acpi_force) {
                        printk(KERN_WARNING PREFIX "acpi=force override\n");
                } else {
index 3facd20212bbc419b8e5f8052057210bac30ce4d..b4bae60f506564ef22e3aebfde384471fb9503f8 100644 (file)
@@ -188,59 +188,6 @@ static __init int reset_videomode_after_s3(struct dmi_blacklist *d)
 #endif
 
 
-#ifdef CONFIG_ACPI_BOOT
-extern int acpi_force;
-
-static __init __attribute__((unused)) int dmi_disable_acpi(struct dmi_blacklist *d) 
-{ 
-       if (!acpi_force) { 
-               printk(KERN_NOTICE "%s detected: acpi off\n",d->ident); 
-               disable_acpi();
-       } else { 
-               printk(KERN_NOTICE 
-                      "Warning: DMI blacklist says broken, but acpi forced\n"); 
-       }
-       return 0;
-} 
-
-/*
- * Limit ACPI to CPU enumeration for HT
- */
-static __init __attribute__((unused)) int force_acpi_ht(struct dmi_blacklist *d) 
-{ 
-       if (!acpi_force) { 
-               printk(KERN_NOTICE "%s detected: force use of acpi=ht\n", d->ident); 
-               disable_acpi();
-               acpi_ht = 1; 
-       } else { 
-               printk(KERN_NOTICE 
-                      "Warning: acpi=force overrules DMI blacklist: acpi=ht\n"); 
-       }
-       return 0;
-} 
-#endif
-
-#ifdef CONFIG_ACPI_PCI
-static __init int disable_acpi_irq(struct dmi_blacklist *d) 
-{
-       if (!acpi_force) {
-               printk(KERN_NOTICE "%s detected: force use of acpi=noirq\n",
-                      d->ident);       
-               acpi_noirq_set();
-       }
-       return 0;
-}
-static __init int disable_acpi_pci(struct dmi_blacklist *d) 
-{
-       if (!acpi_force) {
-               printk(KERN_NOTICE "%s detected: force use of pci=noacpi\n",
-                      d->ident);       
-               acpi_disable_pci();
-       }
-       return 0;
-}  
-#endif
-
 /*
  *     Process the DMI blacklists
  */
@@ -264,116 +211,6 @@ static __initdata struct dmi_blacklist dmi_blacklist[]={
                        } },
 #endif
 
-#ifdef CONFIG_ACPI_BOOT
-       /*
-        * If your system is blacklisted here, but you find that acpi=force
-        * works for you, please contact acpi-devel@sourceforge.net
-        */
-
-       /*
-        *      Boxes that need ACPI disabled
-        */
-
-       { dmi_disable_acpi, "IBM Thinkpad", {
-                       MATCH(DMI_BOARD_VENDOR, "IBM"),
-                       MATCH(DMI_BOARD_NAME, "2629H1G"),
-                       NO_MATCH, NO_MATCH }},
-
-       /*
-        *      Boxes that need acpi=ht 
-        */
-
-       { force_acpi_ht, "FSC Primergy T850", {
-                       MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
-                       MATCH(DMI_PRODUCT_NAME, "PRIMERGY T850"),
-                       NO_MATCH, NO_MATCH }},
-
-       { force_acpi_ht, "DELL GX240", {
-                       MATCH(DMI_BOARD_VENDOR, "Dell Computer Corporation"),
-                       MATCH(DMI_BOARD_NAME, "OptiPlex GX240"),
-                       NO_MATCH, NO_MATCH }},
-
-       { force_acpi_ht, "HP VISUALIZE NT Workstation", {
-                       MATCH(DMI_BOARD_VENDOR, "Hewlett-Packard"),
-                       MATCH(DMI_PRODUCT_NAME, "HP VISUALIZE NT Workstation"),
-                       NO_MATCH, NO_MATCH }},
-
-       { force_acpi_ht, "Compaq Workstation W8000", {
-                       MATCH(DMI_SYS_VENDOR, "Compaq"),
-                       MATCH(DMI_PRODUCT_NAME, "Workstation W8000"),
-                       NO_MATCH, NO_MATCH }},
-
-       { force_acpi_ht, "ASUS P4B266", {
-                       MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
-                       MATCH(DMI_BOARD_NAME, "P4B266"),
-                       NO_MATCH, NO_MATCH }},
-
-       { force_acpi_ht, "ASUS P2B-DS", {
-                       MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
-                       MATCH(DMI_BOARD_NAME, "P2B-DS"),
-                       NO_MATCH, NO_MATCH }},
-
-       { force_acpi_ht, "ASUS CUR-DLS", {
-                       MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
-                       MATCH(DMI_BOARD_NAME, "CUR-DLS"),
-                       NO_MATCH, NO_MATCH }},
-
-       { force_acpi_ht, "ABIT i440BX-W83977", {
-                       MATCH(DMI_BOARD_VENDOR, "ABIT <http://www.abit.com>"),
-                       MATCH(DMI_BOARD_NAME, "i440BX-W83977 (BP6)"),
-                       NO_MATCH, NO_MATCH }},
-
-       { force_acpi_ht, "IBM Bladecenter", {
-                       MATCH(DMI_BOARD_VENDOR, "IBM"),
-                       MATCH(DMI_BOARD_NAME, "IBM eServer BladeCenter HS20"),
-                       NO_MATCH, NO_MATCH }},
-
-       { force_acpi_ht, "IBM eServer xSeries 360", {
-                       MATCH(DMI_BOARD_VENDOR, "IBM"),
-                       MATCH(DMI_BOARD_NAME, "eServer xSeries 360"),
-                       NO_MATCH, NO_MATCH }},
-
-       { force_acpi_ht, "IBM eserver xSeries 330", {
-                       MATCH(DMI_BOARD_VENDOR, "IBM"),
-                       MATCH(DMI_BOARD_NAME, "eserver xSeries 330"),
-                       NO_MATCH, NO_MATCH }},
-
-       { force_acpi_ht, "IBM eserver xSeries 440", {
-                       MATCH(DMI_BOARD_VENDOR, "IBM"),
-                       MATCH(DMI_PRODUCT_NAME, "eserver xSeries 440"),
-                       NO_MATCH, NO_MATCH }},
-
-#endif // CONFIG_ACPI_BOOT
-
-#ifdef CONFIG_ACPI_PCI
-       /*
-        *      Boxes that need ACPI PCI IRQ routing disabled
-        */
-
-       { disable_acpi_irq, "ASUS A7V", {
-                       MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC"),
-                       MATCH(DMI_BOARD_NAME, "<A7V>"),
-                       /* newer BIOS, Revision 1011, does work */
-                       MATCH(DMI_BIOS_VERSION, "ASUS A7V ACPI BIOS Revision 1007"),
-                       NO_MATCH }},
-
-       /*
-        *      Boxes that need ACPI PCI IRQ routing and PCI scan disabled
-        */
-       { disable_acpi_pci, "ASUS PR-DLS", {    /* _BBN 0 bug */
-                       MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
-                       MATCH(DMI_BOARD_NAME, "PR-DLS"),
-                       MATCH(DMI_BIOS_VERSION, "ASUS PR-DLS ACPI BIOS Revision 1010"),
-                       MATCH(DMI_BIOS_DATE, "03/21/2003") }},
-
-       { disable_acpi_pci, "Acer TravelMate 36x Laptop", {
-                       MATCH(DMI_SYS_VENDOR, "Acer"),
-                       MATCH(DMI_PRODUCT_NAME, "TravelMate 360"),
-                       NO_MATCH, NO_MATCH
-                       } },
-
-#endif
-
        { NULL, }
 };