summaryrefslogtreecommitdiff
path: root/arch/sh/drivers/pci/fixups-sh03.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sh/drivers/pci/fixups-sh03.c')
-rw-r--r--arch/sh/drivers/pci/fixups-sh03.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/arch/sh/drivers/pci/fixups-sh03.c b/arch/sh/drivers/pci/fixups-sh03.c
new file mode 100644
index 000000000..16207bef9
--- /dev/null
+++ b/arch/sh/drivers/pci/fixups-sh03.c
@@ -0,0 +1,32 @@
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/types.h>
+#include <linux/pci.h>
+#include <linux/sh_intc.h>
+
+int __init pcibios_map_platform_irq(const struct pci_dev *dev, u8 slot, u8 pin)
+{
+ int irq;
+
+ if (dev->bus->number == 0) {
+ switch (slot) {
+ case 4: return evt2irq(0x2a0); /* eth0 */
+ case 8: return evt2irq(0x2a0); /* eth1 */
+ case 6: return evt2irq(0x240); /* PCI bridge */
+ default:
+ printk(KERN_ERR "PCI: Bad IRQ mapping request "
+ "for slot %d\n", slot);
+ return evt2irq(0x240);
+ }
+ } else {
+ switch (pin) {
+ case 0: irq = evt2irq(0x240); break;
+ case 1: irq = evt2irq(0x240); break;
+ case 2: irq = evt2irq(0x240); break;
+ case 3: irq = evt2irq(0x240); break;
+ case 4: irq = evt2irq(0x240); break;
+ default: irq = -1; break;
+ }
+ }
+ return irq;
+}