11da177e4SLinus Torvalds #include <linux/kernel.h> 21da177e4SLinus Torvalds #include <linux/init.h> 31da177e4SLinus Torvalds #include <linux/types.h> 41da177e4SLinus Torvalds #include <linux/pci.h> 51da177e4SLinus Torvalds 61da177e4SLinus Torvalds /* 71da177e4SLinus Torvalds * IRQ functions 81da177e4SLinus Torvalds */ 91da177e4SLinus Torvalds 101da177e4SLinus Torvalds int __init pcibios_map_platform_irq(u8 slot, u8 pin, struct pci_dev *dev) 111da177e4SLinus Torvalds { 121da177e4SLinus Torvalds int irq; 131da177e4SLinus Torvalds 141da177e4SLinus Torvalds if (dev->bus->number == 0) { 151da177e4SLinus Torvalds switch (slot) { 161da177e4SLinus Torvalds case 4: return 5; /* eth0 */ 171da177e4SLinus Torvalds case 8: return 5; /* eth1 */ 181da177e4SLinus Torvalds case 6: return 2; /* PCI bridge */ 191da177e4SLinus Torvalds default: 201da177e4SLinus Torvalds printk("PCI: Bad IRQ mapping request for slot %d\n", slot); 211da177e4SLinus Torvalds return 2; 221da177e4SLinus Torvalds } 231da177e4SLinus Torvalds } else { 241da177e4SLinus Torvalds switch (pin) { 251da177e4SLinus Torvalds case 0: irq = 2; break; 261da177e4SLinus Torvalds case 1: irq = 2; break; 271da177e4SLinus Torvalds case 2: irq = 2; break; 281da177e4SLinus Torvalds case 3: irq = 2; break; 291da177e4SLinus Torvalds case 4: irq = 2; break; 301da177e4SLinus Torvalds default: irq = -1; break; 311da177e4SLinus Torvalds } 321da177e4SLinus Torvalds } 331da177e4SLinus Torvalds return irq; 341da177e4SLinus Torvalds } 351da177e4SLinus Torvalds 361da177e4SLinus Torvalds static u8 __init sh03_no_swizzle(struct pci_dev *dev, u8 *pin) 371da177e4SLinus Torvalds { 381da177e4SLinus Torvalds /* no swizzling */ 391da177e4SLinus Torvalds return PCI_SLOT(dev->devfn); 401da177e4SLinus Torvalds } 411da177e4SLinus Torvalds 421da177e4SLinus Torvalds static int sh03_pci_lookup_irq(struct pci_dev *dev, u8 slot, u8 pin) 431da177e4SLinus Torvalds { 441da177e4SLinus Torvalds int irq = -1; 451da177e4SLinus Torvalds 461da177e4SLinus Torvalds /* now lookup the actual IRQ on a platform specific basis (pci-'platform'.c) */ 471da177e4SLinus Torvalds irq = pcibios_map_platform_irq(slot, pin, dev); 481da177e4SLinus Torvalds if( irq < 0 ) { 491da177e4SLinus Torvalds pr_debug("PCI: Error mapping IRQ on device %s\n", pci_name(dev)); 501da177e4SLinus Torvalds return irq; 511da177e4SLinus Torvalds } 521da177e4SLinus Torvalds 531da177e4SLinus Torvalds pr_debug("Setting IRQ for slot %s to %d\n", pci_name(dev), irq); 541da177e4SLinus Torvalds 551da177e4SLinus Torvalds return irq; 561da177e4SLinus Torvalds } 571da177e4SLinus Torvalds 581da177e4SLinus Torvalds void __init pcibios_fixup_irqs(void) 591da177e4SLinus Torvalds { 601da177e4SLinus Torvalds pci_fixup_irqs(sh03_no_swizzle, sh03_pci_lookup_irq); 611da177e4SLinus Torvalds } 62