|
|
|
@ -70,26 +70,28 @@ int pci_sc520_set_irq(int pci_pin, int irq) |
|
|
|
|
|
|
|
|
|
debug("set_irq(): map INT%c to IRQ%d\n", pci_pin + 'A', irq); |
|
|
|
|
|
|
|
|
|
if (irq < 0 || irq > 15) { |
|
|
|
|
if (irq < 0 || irq > 15) |
|
|
|
|
return -1; /* illegal irq */ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (pci_pin < 0 || pci_pin > 15) { |
|
|
|
|
if (pci_pin < 0 || pci_pin > 15) |
|
|
|
|
return -1; /* illegal pci int pin */ |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* first disable any non-pci interrupt source that use
|
|
|
|
|
* this level */ |
|
|
|
|
|
|
|
|
|
/* PCI interrupt mapping (A through D)*/ |
|
|
|
|
for (i=0; i<=3 ;i++) { |
|
|
|
|
if (readb(&sc520_mmcr->pci_int_map[i]) == sc520_irq[irq].priority) |
|
|
|
|
for (i = 0; i <= 3 ; i++) { |
|
|
|
|
tmpb = readb(&sc520_mmcr->pci_int_map[i]); |
|
|
|
|
|
|
|
|
|
if (tmpb == sc520_irq[irq].priority) |
|
|
|
|
writeb(SC520_IRQ_DISABLED, &sc520_mmcr->pci_int_map[i]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* GP IRQ interrupt mapping */ |
|
|
|
|
for (i=0; i<=10 ;i++) { |
|
|
|
|
if (readb(&sc520_mmcr->gp_int_map[i]) == sc520_irq[irq].priority) |
|
|
|
|
for (i = 0; i <= 10 ; i++) { |
|
|
|
|
tmpb = readb(&sc520_mmcr->gp_int_map[i]); |
|
|
|
|
|
|
|
|
|
if (tmpb == sc520_irq[irq].priority) |
|
|
|
|
writeb(SC520_IRQ_DISABLED, &sc520_mmcr->gp_int_map[i]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -102,10 +104,12 @@ int pci_sc520_set_irq(int pci_pin, int irq) |
|
|
|
|
if (pci_pin < 4) { |
|
|
|
|
/* PCI INTA-INTD */ |
|
|
|
|
/* route the interrupt */ |
|
|
|
|
writeb(sc520_irq[irq].priority, &sc520_mmcr->pci_int_map[pci_pin]); |
|
|
|
|
writeb(sc520_irq[irq].priority, |
|
|
|
|
&sc520_mmcr->pci_int_map[pci_pin]); |
|
|
|
|
} else { |
|
|
|
|
/* GPIRQ0-GPIRQ10 used for additional PCI INTS */ |
|
|
|
|
writeb(sc520_irq[irq].priority, &sc520_mmcr->gp_int_map[pci_pin - 4]); |
|
|
|
|
writeb(sc520_irq[irq].priority, |
|
|
|
|
&sc520_mmcr->gp_int_map[pci_pin - 4]); |
|
|
|
|
|
|
|
|
|
/* also set the polarity in this case */ |
|
|
|
|
tmpw = readw(&sc520_mmcr->intpinpol); |
|
|
|
|