PCI: use config space encoding in pci_get_interrupt_pin()
authorBjorn Helgaas <bjorn.helgaas@hp.com>
Tue, 9 Dec 2008 23:11:46 +0000 (16:11 -0700)
committerJesse Barnes <jbarnes@virtuousgeek.org>
Wed, 7 Jan 2009 19:12:48 +0000 (11:12 -0800)
This patch makes pci_get_interrupt_pin() return values encoded
the same way as the "Interrupt Pin" value in PCI config space,
i.e., 1=INTA, ..., 4=INTD.

pirq_bios_set() is the only in-tree caller of pci_get_interrupt_pin()
and pci_get_interrupt_pin() is not exported.

Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: hpa@zytor.com
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
arch/x86/pci/irq.c
drivers/pci/pci.c

index 373b9afe6d4445b08efee66dfb4856519b434bd1..399a172f047ddb2823e3df9dc53ef1700636a319 100644 (file)
@@ -533,7 +533,7 @@ static int pirq_bios_set(struct pci_dev *router, struct pci_dev *dev, int pirq,
 {
        struct pci_dev *bridge;
        int pin = pci_get_interrupt_pin(dev, &bridge);
-       return pcibios_set_irq_routing(bridge, pin, irq);
+       return pcibios_set_irq_routing(bridge, pin - 1, irq);
 }
 
 #endif
index 3222f9022707a3b6eed7fe15767a1247371947ae..bd52ca4c28933804dda155941c13e4c01f99095d 100644 (file)
@@ -1374,9 +1374,9 @@ pci_get_interrupt_pin(struct pci_dev *dev, struct pci_dev **bridge)
        pin = dev->pin;
        if (!pin)
                return -1;
-       pin--;
+
        while (dev->bus->self) {
-               pin = (pin + PCI_SLOT(dev->devfn)) % 4;
+               pin = (((pin - 1) + PCI_SLOT(dev->devfn)) % 4) + 1;
                dev = dev->bus->self;
        }
        *bridge = dev;