1 #include <linux/interrupt.h>
5 #include <asm/apollohw.h>
7 void dn_process_int(unsigned int irq
, struct pt_regs
*fp
)
9 __m68k_handle_int(irq
, fp
);
11 *(volatile unsigned char *)(pica
)=0x20;
12 *(volatile unsigned char *)(picb
)=0x20;
15 int apollo_irq_startup(unsigned int irq
)
18 *(volatile unsigned char *)(pica
+1) &= ~(1 << irq
);
20 *(volatile unsigned char *)(picb
+1) &= ~(1 << (irq
- 8));
24 void apollo_irq_shutdown(unsigned int irq
)
27 *(volatile unsigned char *)(pica
+1) |= (1 << irq
);
29 *(volatile unsigned char *)(picb
+1) |= (1 << (irq
- 8));
32 static struct irq_controller apollo_irq_controller
= {
34 .lock
= __SPIN_LOCK_UNLOCKED(apollo_irq_controller
.lock
),
35 .startup
= apollo_irq_startup
,
36 .shutdown
= apollo_irq_shutdown
,
40 void __init
dn_init_IRQ(void)
42 m68k_setup_user_interrupt(VEC_USER
+ 96, 16, dn_process_int
);
43 m68k_setup_irq_controller(&apollo_irq_controller
, IRQ_APOLLO
, 16);