Exemplo n.º 1
0
static void gef_pic_unmask(struct irq_data *d)
{
	unsigned long flags;
	unsigned int hwirq = irqd_to_hwirq(d);
	u32 mask;

	raw_spin_lock_irqsave(&gef_pic_lock, flags);
	mask = in_be32(gef_pic_irq_reg_base + GEF_PIC_INTR_MASK(0));
	mask |= (1 << hwirq);
	out_be32(gef_pic_irq_reg_base + GEF_PIC_INTR_MASK(0), mask);
	raw_spin_unlock_irqrestore(&gef_pic_lock, flags);
}
Exemplo n.º 2
0
static void gef_pic_unmask(unsigned int virq)
{
    unsigned long flags;
    unsigned int hwirq;
    u32 mask;

    hwirq = gef_irq_to_hw(virq);

    spin_lock_irqsave(&gef_pic_lock, flags);
    mask = in_be32(gef_pic_irq_reg_base + GEF_PIC_INTR_MASK(0));
    mask |= (1 << hwirq);
    out_be32(gef_pic_irq_reg_base + GEF_PIC_INTR_MASK(0), mask);
    spin_unlock_irqrestore(&gef_pic_lock, flags);
}
Exemplo n.º 3
0
unsigned int gef_pic_get_irq(void)
{
	u32 cause, mask, active;
	unsigned int virq = NO_IRQ;
	int hwirq;

	cause = in_be32(gef_pic_irq_reg_base + GEF_PIC_INTR_STATUS);

	mask = in_be32(gef_pic_irq_reg_base + GEF_PIC_INTR_MASK(0));

	active = cause & mask;

	if (active) {
		for (hwirq = GEF_PIC_NUM_IRQS - 1; hwirq > -1; hwirq--) {
			if (active & (0x1 << hwirq))
				break;
		}
		virq = irq_linear_revmap(gef_pic_irq_host,
			(irq_hw_number_t)hwirq);
	}

	return virq;
}