]> git.neil.brown.name Git - history.git/commitdiff
[ACPI] introduces acpi_penalize_isa_irq() to to avoid PCI
authorLen Brown <len.brown@intel.com>
Wed, 27 Oct 2004 22:17:14 +0000 (18:17 -0400)
committerLen Brown <lenb@dhcppc3.>
Wed, 27 Oct 2004 22:17:14 +0000 (18:17 -0400)
devices use IRQ of legacy PNP devices.

Signed-off-by: David Shaohua Li <shaohua.li@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
arch/i386/pci/irq.c
drivers/acpi/pci_link.c
drivers/pnp/pnpbios/rsparser.c
include/linux/acpi.h

index 5fc8dc3975542f7c7a092cca989b35d6b3efe488..08166ad4bb0007c9cfcdd5e4afb5579dda3ab3e1 100644 (file)
@@ -17,6 +17,7 @@
 #include <asm/smp.h>
 #include <asm/io_apic.h>
 #include <asm/hw_irq.h>
+#include <linux/acpi.h>
 
 #include "pci.h"
 
@@ -996,13 +997,24 @@ static int __init pcibios_irq_init(void)
 subsys_initcall(pcibios_irq_init);
 
 
-void pcibios_penalize_isa_irq(int irq)
+static void pirq_penalize_isa_irq(int irq)
 {
        /*
         *  If any ISAPnP device reports an IRQ in its list of possible
         *  IRQ's, we try to avoid assigning it to PCI devices.
         */
-       pirq_penalty[irq] += 100;
+       if (irq < 16)
+               pirq_penalty[irq] += 100;
+}
+
+void pcibios_penalize_isa_irq(int irq)
+{
+#ifdef CONFIG_ACPI_PCI
+       if (!acpi_noirq)
+               acpi_penalize_isa_irq(irq);
+       else
+#endif
+               pirq_penalize_isa_irq(irq);
 }
 
 int pirq_enable_irq(struct pci_dev *dev)
index 86e8a0ca0cb84461418745ced3e87d2df7e4c762..528d6f6ca0fb25a5c70d5a9e2ea45e82472ecaed 100644 (file)
@@ -786,6 +786,11 @@ static int __init acpi_irq_penalty_update(char *str, int used)
        return 1;
 }
 
+void acpi_penalize_isa_irq(int irq)
+{
+       acpi_irq_penalty[irq] += PIRQ_PENALTY_ISA_USED;
+}
+
 /*
  * Over-ride default table to reserve additional IRQs for use by ISA
  * e.g. acpi_irq_isa=5
index f990065e19f0fb913f23aae5f72315b5dde1d937..1d719853a7e8885540d50daf995455af77f68998 100644 (file)
@@ -7,6 +7,7 @@
 #include <linux/ctype.h>
 #include <linux/pnp.h>
 #include <linux/pnpbios.h>
+#include <linux/pci.h>
 
 #include "pnpbios.h"
 
@@ -58,6 +59,7 @@ pnpbios_parse_allocated_irqresource(struct pnp_resource_table * res, int irq)
                }
                res->irq_resource[i].start =
                res->irq_resource[i].end = (unsigned long) irq;
+               pcibios_penalize_isa_irq(irq);
        }
 }
 
index 041f660ec0093674f12469e353055f9318fa633a..6be8cf4e79bc9d68448358c34bae56a7c3d7a5ec 100644 (file)
@@ -439,6 +439,7 @@ extern struct acpi_prt_list acpi_prt;
 struct pci_dev;
 
 int acpi_pci_irq_enable (struct pci_dev *dev);
+void acpi_penalize_isa_irq(int irq);
 
 struct acpi_pci_driver {
        struct acpi_pci_driver *next;