Exemple #1
0
void intc0_req1_irqdispatch(struct pt_regs *regs)
{
    int irq = 0, i;
    static unsigned long intc0_req1 = 0;

    intc0_req1 = au_readl(IC0_REQ1INT);

    if (!intc0_req1) return;

    for (i=0; i<32; i++) {
        if ((intc0_req1 & (1<<i))) {
            intc0_req1 &= ~(1<<i);
#ifdef CONFIG_PM
            if (i == AU1000_TOY_MATCH2_INT) {
                mask_and_ack_rise_edge_irq(irq);
                counter0_irq(irq, NULL, regs);
                local_enable_irq(irq);
            }
            else
#endif
            {
                do_IRQ(irq, regs);
            }
            break;
        }
        irq++;
    }
}
void intc0_req1_irqdispatch(struct pt_regs *regs)
{
	int irq = 0;
	static unsigned long intc0_req1 = 0;

	intc0_req1 |= au_readl(IC0_REQ1INT);

	if (!intc0_req1) return;

	irq = au_ffs(intc0_req1) - 1;
	intc0_req1 &= ~(1<<irq);
#ifdef CONFIG_PM
	if (irq == AU1000_TOY_MATCH2_INT) {
		mask_and_ack_rise_edge_irq(irq);
		counter0_irq(irq, NULL, regs);
		local_enable_irq(irq);
	}
	else
#endif
	{
		do_IRQ(irq, regs);
	}
}