acpi_pcib: Remove APIC case, moving into nexus.
authorAlexander Polakov <polachok@gmail.com>
Fri, 16 Oct 2009 17:55:00 +0000 (21:55 +0400)
committerAlexander Polakov <polachok@gmail.com>
Sun, 8 Nov 2009 20:26:22 +0000 (23:26 +0300)
sys/dev/acpica5/acpi_pcib.c
sys/platform/pc32/i386/nexus.c

index b25fdfe..03ffaf9 100644 (file)
@@ -259,28 +259,6 @@ acpi_pcib_route_interrupt(device_t pcib, device_t dev, int pin,
                pci_get_slot(dev), 'A' + pin, prt->SourceIndex);
        if (prt->SourceIndex) {
            interrupt = prt->SourceIndex;
-#if defined(APIC_IO)
-       int line;
-        line = pci_apic_irq(pci_get_bus(dev), pci_get_slot(dev), pin+1, interrupt);
-        if (line >= 0) {
-kprintf("apic: try line %d\n", line);
-                return line;
-        } else {
-                int irq = pci_get_irq(dev);
-
-                /*
-                 * PCI interrupts might be redirected to the
-                 * ISA bus according to some MP tables.  Use the
-                 * same methods as used by the ISA devices
-                 * devices to find the proper IOAPIC int pin.
-                 */
-                kprintf("ACPI: Try routing through ISA bus for "
-                        "bus %d slot %d INT%c irq %d\n",
-                        pci_get_bus(dev), pci_get_slot(dev), 'A' + pin+1, irq);
-                line = isa_apic_irq(irq);
-        }
-       interrupt = line;
-#endif
        pci_write_config(dev, PCIR_INTLINE, interrupt, 1);
        BUS_CONFIG_INTR(device_get_parent(dev), dev, interrupt, INTR_TRIGGER_LEVEL,
                INTR_POLARITY_LOW);
index 32f65aa..95c80f7 100644 (file)
 #include <machine_base/apic/mpapic.h>
 #include <machine_base/isa/intr_machdep.h>
 
+#include <bus/pci/pcivar.h>
+#include <bus/pci/pcireg.h>
+#include <bus/pci/pcibus.h>
+#include <bus/pci/pci_cfgreg.h>
+#include <bus/pci/pcib_private.h>
+
+#include "pcib_if.h"
+
 static MALLOC_DEFINE(M_NEXUSDEV, "nexusdev", "Nexus device");
 struct nexus_device {
        struct resource_list    nx_resources;
@@ -468,8 +476,18 @@ static int
 nexus_config_intr(device_t dev, device_t child, int irq, enum intr_trigger trig,
     enum intr_polarity pol)
 {
-       kprintf("%s(%s): irq: %d, trigger: %d, polarity: %d\n", __FUNCTION__, device_get_nameunit(child), irq, trig, pol);
-       return(0);
+#ifdef APIC_IO
+       int line;
+       kprintf("%s(%s): irq: %d, trigger: %d, polarity: %d\n", __FUNCTION__, device_get_nameunit(dev), irq, trig, pol);
+       line = pci_apic_irq(pci_get_bus(child), pci_get_slot(child), irq);
+       if(line >= 0)
+               return line;
+       line = isa_apic_irq(pci_get_irq(child));
+
+       return(line);
+#else
+       return irq;
+#endif
 }
 
 /*