void ddb_local0_irqdispatch(struct pt_regs *regs) { u32 mask; int nile4_irq; mask = nile4_get_irq_stat(0); /* Handle the timer interrupt first */ #if 0 if (mask & (1 << NILE4_INT_GPT)) { do_IRQ(nile4_to_irq(NILE4_INT_GPT), regs); mask &= ~(1 << NILE4_INT_GPT); } #endif for (nile4_irq = 0; mask; nile4_irq++, mask >>= 1) if (mask & 1) { if (nile4_irq == NILE4_INT_INTE) { int i8259_irq; nile4_clear_irq(NILE4_INT_INTE); i8259_irq = nile4_i8259_iack(); do_IRQ(i8259_irq, regs); } else do_IRQ(nile4_to_irq(nile4_irq), regs); } }
static void nile4_irq_setup(void) { int i; /* Map all interrupts to CPU int #0 (IP2) */ nile4_map_irq_all(0); /* PCI INTA#-E# must be level triggered */ nile4_set_pci_irq_level_or_edge(0, 1); nile4_set_pci_irq_level_or_edge(1, 1); nile4_set_pci_irq_level_or_edge(2, 1); nile4_set_pci_irq_level_or_edge(3, 1); /* PCI INTA#, B#, D# must be active low, INTC# must be active high */ nile4_set_pci_irq_polarity(0, 0); nile4_set_pci_irq_polarity(1, 0); nile4_set_pci_irq_polarity(2, 1); nile4_set_pci_irq_polarity(3, 0); for (i = 0; i < 16; i++) nile4_clear_irq(i); /* Enable CPU int #0 */ nile4_enable_irq_output(0); /* memory resource acquire in ddb_setup */ }
static void nile4_irq_setup(void) { int i; /* Map all interrupts to CPU int #0 */ nile4_map_irq_all(0); /* PCI INTA#-E# must be level triggered */ nile4_set_pci_irq_level_or_edge(0, 1); nile4_set_pci_irq_level_or_edge(1, 1); nile4_set_pci_irq_level_or_edge(2, 1); nile4_set_pci_irq_level_or_edge(3, 1); nile4_set_pci_irq_level_or_edge(4, 1); /* PCI INTA#-D# must be active low, INTE# must be active high */ nile4_set_pci_irq_polarity(0, 0); nile4_set_pci_irq_polarity(1, 0); nile4_set_pci_irq_polarity(2, 0); nile4_set_pci_irq_polarity(3, 0); nile4_set_pci_irq_polarity(4, 1); for (i = 0; i < 16; i++) nile4_clear_irq(i); /* Enable CPU int #0 */ nile4_enable_irq_output(0); request_mem_region(NILE4_BASE, NILE4_SIZE, "Nile 4"); }
static void vrc5476_irq_ack(uint irq) { nile4_clear_irq(irq - irq_base); nile4_disable_irq(irq - irq_base); }