1 #include <linux/interrupt.h>
5 #include <asm/apollohw.h>
7 unsigned int apollo_irq_startup(struct irq_data
*data
)
9 unsigned int irq
= data
->irq
;
12 *(volatile unsigned char *)(pica
+1) &= ~(1 << irq
);
14 *(volatile unsigned char *)(picb
+1) &= ~(1 << (irq
- 8));
18 void apollo_irq_shutdown(struct irq_data
*data
)
20 unsigned int irq
= data
->irq
;
23 *(volatile unsigned char *)(pica
+1) |= (1 << irq
);
25 *(volatile unsigned char *)(picb
+1) |= (1 << (irq
- 8));
28 void apollo_irq_eoi(struct irq_data
*data
)
30 *(volatile unsigned char *)(pica
) = 0x20;
31 *(volatile unsigned char *)(picb
) = 0x20;
34 static struct irq_chip apollo_irq_chip
= {
36 .irq_startup
= apollo_irq_startup
,
37 .irq_shutdown
= apollo_irq_shutdown
,
38 .irq_eoi
= apollo_irq_eoi
,
42 void __init
dn_init_IRQ(void)
44 m68k_setup_user_interrupt(VEC_USER
+ 96, 16);
45 m68k_setup_irq_controller(&apollo_irq_chip
, handle_fasteoi_irq
,