fix extpci irq assignment bug

SVN-Revision: 5159
This commit is contained in:
Felix Fietkau 2006-10-16 14:21:30 +00:00
parent 431576e9cc
commit 11e5e050ae

View file

@ -11243,7 +11243,7 @@ diff -urN linux.old/arch/mips/bcm947xx/Makefile linux.dev/arch/mips/bcm947xx/Mak
diff -urN linux.old/arch/mips/bcm947xx/pci.c linux.dev/arch/mips/bcm947xx/pci.c diff -urN linux.old/arch/mips/bcm947xx/pci.c linux.dev/arch/mips/bcm947xx/pci.c
--- linux.old/arch/mips/bcm947xx/pci.c 1970-01-01 01:00:00.000000000 +0100 --- linux.old/arch/mips/bcm947xx/pci.c 1970-01-01 01:00:00.000000000 +0100
+++ linux.dev/arch/mips/bcm947xx/pci.c 2006-10-15 23:29:14.000000000 +0200 +++ linux.dev/arch/mips/bcm947xx/pci.c 2006-10-15 23:29:14.000000000 +0200
@@ -0,0 +1,215 @@ @@ -0,0 +1,227 @@
+#include <linux/kernel.h> +#include <linux/kernel.h>
+#include <linux/init.h> +#include <linux/init.h>
+#include <linux/pci.h> +#include <linux/pci.h>
@ -11356,11 +11356,23 @@ diff -urN linux.old/arch/mips/bcm947xx/pci.c linux.dev/arch/mips/bcm947xx/pci.c
+ +
+int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin) +int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+{ +{
+ unsigned long flags;
+ u8 irq; + u8 irq;
+ uint idx;
+ +
+ if (dev->bus->number == 1) + /* external: use the irq of the pci core */
+ return 2; + if (dev->bus->number >= 1) {
+ + spin_lock_irqsave(&sbh_lock, flags);
+ idx = sb_coreidx(sbh);
+ sb_setcore(sbh, SB_PCI, 0);
+ irq = sb_irq(sbh);
+ sb_setcoreidx(sbh, idx);
+ spin_unlock_irqrestore(&sbh_lock, flags);
+
+ return irq + 2;
+ }
+
+ /* internal */
+ pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq); + pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq);
+ return irq + 2; + return irq + 2;
+} +}