mptable/pci: Configure interrupts after routing
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Fri, 18 Mar 2011 09:52:52 +0000 (17:52 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Fri, 18 Mar 2011 09:57:37 +0000 (17:57 +0800)
sys/bus/pci/i386/mptable_pci.c
sys/bus/pci/x86_64/mptable_pci.c

index 8f8bde8..1c3cbeb 100644 (file)
@@ -61,7 +61,7 @@ mptable_pci_route_interrupt(device_t pcib, device_t dev, int pin)
 
        line = pci_apic_irq(bus, slot, pin);
        if (line >= 0) {
-               return line;
+               goto done;
        } else {
                int irq = pci_get_irq(dev);
 
@@ -76,12 +76,16 @@ mptable_pci_route_interrupt(device_t pcib, device_t dev, int pin)
                        bus, slot, 'A' + pin - 1, irq);
                line = isa_apic_irq(irq);
                if (line >= 0)
-                       return line;
+                       goto done;
        }
 
        kprintf("MPTable: Unable to route for bus %d slot %d INT%c\n",
                bus, slot, 'A' + pin - 1);
        return PCI_INVALID_IRQ;
+
+done:
+       BUS_CONFIG_INTR(dev, dev, line, INTR_TRIGGER_LEVEL, INTR_POLARITY_LOW);
+       return line;
 }
 
 /* Host to PCI bridge driver. */
index 8f8bde8..1c3cbeb 100644 (file)
@@ -61,7 +61,7 @@ mptable_pci_route_interrupt(device_t pcib, device_t dev, int pin)
 
        line = pci_apic_irq(bus, slot, pin);
        if (line >= 0) {
-               return line;
+               goto done;
        } else {
                int irq = pci_get_irq(dev);
 
@@ -76,12 +76,16 @@ mptable_pci_route_interrupt(device_t pcib, device_t dev, int pin)
                        bus, slot, 'A' + pin - 1, irq);
                line = isa_apic_irq(irq);
                if (line >= 0)
-                       return line;
+                       goto done;
        }
 
        kprintf("MPTable: Unable to route for bus %d slot %d INT%c\n",
                bus, slot, 'A' + pin - 1);
        return PCI_INVALID_IRQ;
+
+done:
+       BUS_CONFIG_INTR(dev, dev, line, INTR_TRIGGER_LEVEL, INTR_POLARITY_LOW);
+       return line;
 }
 
 /* Host to PCI bridge driver. */