static void s3c_irqext_unmask(unsigned int irqno) { unsigned long bit = s3c_irqext_bit(irqno); unsigned long mask; mask = __raw_readl(s3c24xx_eintmask); mask &= ~bit; __raw_writel(mask, s3c24xx_eintmask); if (irqno <= IRQ_EINT3) { s3c_irq_unmask(irqno); } else if (irqno <= IRQ_EINT7) { s3c_irq_unmask(IRQ_EINT4t7); } else { s3c_irq_unmask(IRQ_EINT8t23); } }
static void s3c_irq_unmask(struct irq_data *data) { struct s3c_irq_data *irq_data = irq_data_get_irq_chip_data(data); struct s3c_irq_intc *intc = irq_data->intc; struct s3c_irq_intc *parent_intc = intc->parent; unsigned long mask; unsigned int irqno; mask = __raw_readl(intc->reg_mask); mask &= ~(1UL << irq_data->offset); __raw_writel(mask, intc->reg_mask); if (parent_intc) { irqno = irq_find_mapping(parent_intc->domain, irq_data->parent_irq); s3c_irq_unmask(irq_get_irq_data(irqno)); } }