Пример #1
0
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);
}
Пример #3
0
static void ack_i8259_irq(unsigned int irq)
{
	mask_and_ack_8259A(irq - I8259_IRQ_BASE);
}