static void do_8259A_IRQ(unsigned int irq, struct pt_regs * regs) { struct irqServer * iServer; struct irqDescriptor *desc = &irq_desc[irq]; { unsigned int status; mask_and_ack_8259A(irq); status = desc->id_status & ~(IRQ_REPLAY | IRQ_WAITING); iServer = NULL; if (!(status & (IRQ_DISABLED | IRQ_INPROGRESS))) { iServer = desc->id_server; status |= IRQ_INPROGRESS; } desc->id_status = status; } /* Exit early if we had no action or it was disabled */ if (!iServer) return; handle_IRQ_event(irq, regs, iServer); { unsigned int status = desc->id_status & ~IRQ_INPROGRESS; desc->id_status = status; if (!(status & IRQ_DISABLED)) enable_8259A_irq(irq); } }
static void toshiba_rbtx4927_irq_isa_mask_and_ack(unsigned int irq) { TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_ISA_MASK, "irq=%d\n", irq); if (irq < TOSHIBA_RBTX4927_IRQ_ISA_BEG || irq > TOSHIBA_RBTX4927_IRQ_ISA_END) { TOSHIBA_RBTX4927_IRQ_DPRINTK(TOSHIBA_RBTX4927_IRQ_EROR, "bad irq=%d\n", irq); panic("\n"); } mask_and_ack_8259A(irq); }
static void ack_i8259_irq(unsigned int irq) { mask_and_ack_8259A(irq - I8259_IRQ_BASE); }