aboutsummaryrefslogtreecommitdiff
path: root/arch/sh/drivers/pci/ops-r7780rp.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sh/drivers/pci/ops-r7780rp.c')
-rw-r--r--arch/sh/drivers/pci/ops-r7780rp.c37
1 files changed, 27 insertions, 10 deletions
diff --git a/arch/sh/drivers/pci/ops-r7780rp.c b/arch/sh/drivers/pci/ops-r7780rp.c
index eeea1577e11..6f4fb38bafa 100644
--- a/arch/sh/drivers/pci/ops-r7780rp.c
+++ b/arch/sh/drivers/pci/ops-r7780rp.c
@@ -17,18 +17,35 @@
#include <asm/io.h>
#include "pci-sh4.h"
+static char r7780rp_irq_tab[] __initdata = {
+ 0, 1, 2, 3,
+};
+
+static char r7780mp_irq_tab[] __initdata = {
+ 65, 66, 67, 68,
+};
+
+static char r7785rp_irq_tab[][4] __initdata = {
+ { 65, 66, 67, 68 }, /* INT ABCD */
+ { 66, 67, 68, 65 }, /* INT BCDA */
+ { 67, 68, 65, 66 }, /* INT CDAB */
+ { 68, 65, 66, 67 }, /* INT DABC */
+ { 64, 64, 64, 64 }, /* PCI Host */
+};
+
int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)
{
- switch (slot) {
- case 0: return IRQ_PCISLOT1; /* PCI Interrupt #1 */
- case 1: return IRQ_PCISLOT2; /* PCI Interrupt #2 */
- case 2: return IRQ_PCISLOT3; /* PCI Interrupt #3 */
- case 3: return IRQ_PCISLOT4; /* PCI Interrupt E4 */
- default:
- printk(KERN_ERR "PCI: Bad IRQ mapping "
- "request for slot %d, func %d\n", slot, pin-1);
- return -1;
- }
+ if (mach_is_r7780rp())
+ return r7780rp_irq_tab[slot];
+ if (mach_is_r7780mp())
+ return r7780mp_irq_tab[slot];
+ if (mach_is_r7785rp())
+ return r7785rp_irq_tab[slot][pin];
+
+ printk(KERN_ERR "PCI: Bad IRQ mapping "
+ "request for slot %d, func %d\n", slot, pin-1);
+
+ return -1;
}
static struct resource sh7780_io_resource = {