asmlinkage void plat_irq_dispatch(void) { unsigned long pending; pending = read_c0_status() & read_c0_cause() & ST0_IM; if (pending & STATUSF_IP7) do_IRQ(ATH79_CPU_IRQ_TIMER); else if (pending & STATUSF_IP2) { ath79_ddr_wb_flush(ath79_ip2_flush_reg); do_IRQ(ATH79_CPU_IRQ_IP2); } else if (pending & STATUSF_IP4) do_IRQ(ATH79_CPU_IRQ_GE0); else if (pending & STATUSF_IP5) do_IRQ(ATH79_CPU_IRQ_GE1); else if (pending & STATUSF_IP3) { ath79_ddr_wb_flush(ath79_ip3_flush_reg); do_IRQ(ATH79_CPU_IRQ_USB); } else if (pending & STATUSF_IP6) do_IRQ(ATH79_CPU_IRQ_MISC); else spurious_interrupt(); }
static void ar934x_ip2_irq_dispatch(struct irq_desc *desc) { u32 status; status = ath79_reset_rr(AR934X_RESET_REG_PCIE_WMAC_INT_STATUS); if (status & AR934X_PCIE_WMAC_INT_PCIE_ALL) { ath79_ddr_wb_flush(3); generic_handle_irq(ATH79_IP2_IRQ(0)); } else if (status & AR934X_PCIE_WMAC_INT_WMAC_ALL) { ath79_ddr_wb_flush(4); generic_handle_irq(ATH79_IP2_IRQ(1)); } else { spurious_interrupt(); } }
static void ar934x_ip2_irq_dispatch(unsigned int irq, struct irq_desc *desc) { u32 status; disable_irq_nosync(irq); status = ath79_reset_rr(AR934X_RESET_REG_PCIE_WMAC_INT_STATUS); if (status & AR934X_PCIE_WMAC_INT_PCIE_ALL) { ath79_ddr_wb_flush(AR934X_DDR_REG_FLUSH_PCIE); generic_handle_irq(ATH79_IP2_IRQ(0)); } else if (status & AR934X_PCIE_WMAC_INT_WMAC_ALL) { ath79_ddr_wb_flush(AR934X_DDR_REG_FLUSH_WMAC); generic_handle_irq(ATH79_IP2_IRQ(1)); } else { spurious_interrupt(); } enable_irq(irq); }
asmlinkage void plat_irq_dispatch(void) { unsigned long pending; int irq; pending = read_c0_status() & read_c0_cause() & ST0_IM; if (!pending) { spurious_interrupt(); return; } pending >>= CAUSEB_IP; while (pending) { irq = fls(pending) - 1; if (irq < ARRAY_SIZE(irq_wb_chan) && irq_wb_chan[irq] != -1) ath79_ddr_wb_flush(irq_wb_chan[irq]); do_IRQ(MIPS_CPU_IRQ_BASE + irq); pending &= ~BIT(irq); } }
static void ar934x_ip3_handler(void) { ath79_ddr_wb_flush(AR934X_DDR_REG_FLUSH_USB); do_IRQ(ATH79_CPU_IRQ(3)); }
static void ar933x_ip2_handler(void) { ath79_ddr_wb_flush(AR933X_DDR_REG_FLUSH_WMAC); do_IRQ(ATH79_CPU_IRQ(2)); }
static void ar724x_ip2_handler(void) { ath79_ddr_wb_flush(AR724X_DDR_REG_FLUSH_PCIE); do_IRQ(ATH79_CPU_IRQ(2)); }