static void __INIT__ at91_aic_init(void) { int irq; for(irq = 0; irq < 32; irq++) { at91_aic_writel(AIC_SVR(irq), irq); at91_aic_writel(AIC_SMR(irq), (0 << 5) | 0); irq_assoc_intctl(irq, &at91sam926x_aic_intctrl); irq_set_handler(irq, irq_handle_level, 0); } // at91_aic_writel(AIC_SPU, MAX_IRQ_NUM); // at91_aic_writel(AIC_DCR, 0); // at91_aic_writel(AIC_IDCR, ~0UL); // at91_aic_writel(AIC_ICCR, ~0UL); }
void irq_handle(__u32 irq) { struct int_pin *pin; assert(irq < MAX_IRQ_NUM); // printf("%s(): irq = %d\n", __func__, irq); pin = irq_pin_set + irq; pin->irq_handle(pin, irq); #if defined(CONFIG_AT91SAM9261) || defined(CONFIG_AT91SAM9263) at91_aic_writel(AIC_EOICR, 1); #endif }
static void at91sam926x_aic_ack(__u32 irq) { at91_aic_writel(AIC_ICCR, 1 << irq); }
static void at91sam926x_aic_umask(__u32 irq) { at91_aic_writel(AIC_IECR, 1 << irq); }