int lemote_intr_map(int dev, int fn, int pin) { switch (dev) { /* onboard devices, only pin A is wired */ case 6: case 7: case 8: case 9: if (pin == PCI_INTERRUPT_PIN_A) return BONITO_DIRECT_IRQ(LOONGSON_INTR_PCIA + (dev - 6)); break; /* PCI slot */ case 10: return BONITO_DIRECT_IRQ(LOONGSON_INTR_PCIA + (pin - PCI_INTERRUPT_PIN_A)); /* Geode chip */ case 14: switch (fn) { case 1: /* Flash */ return BONITO_ISA_IRQ(6); case 3: /* AC97 */ return BONITO_ISA_IRQ(9); case 4: /* OHCI */ case 5: /* EHCI */ return BONITO_ISA_IRQ(11); } break; default: break; } return -1; }
int gdium_intr_map(int dev, int fn, int pin, pci_intr_handle_t *ihp) { switch (dev) { /* mini-PCI slot */ case 13: /* C D A B */ *ihp = BONITO_DIRECT_IRQ(LOONGSON_INTR_PCIA + (pin + 1) % 4); return 0; /* Frame buffer */ case 14: *ihp = BONITO_DIRECT_IRQ(LOONGSON_INTR_PCIA); return 0; /* USB */ case 15: if (gdium_revision == 0) *ihp = BONITO_DIRECT_IRQ(LOONGSON_INTR_PCIA + (pin - 1)); else *ihp = BONITO_DIRECT_IRQ(LOONGSON_INTR_PCIB); return 0; /* Ethernet */ case 16: *ihp = BONITO_DIRECT_IRQ(LOONGSON_INTR_PCID); return 0; /* USB, not present in old motherboard revision */ case 17: if (gdium_revision != 0) { *ihp = BONITO_DIRECT_IRQ(LOONGSON_INTR_PCIC); return 0; } else break; default: break; } return 1; }