Commit | Line | Data |
---|---|---|
0aa78106 | 1 | #include <linux/interrupt.h> |
1da177e4 | 2 | |
1da177e4 LT |
3 | #include <asm/irq.h> |
4 | #include <asm/traps.h> | |
1da177e4 | 5 | #include <asm/apollohw.h> |
1da177e4 | 6 | |
0aa78106 | 7 | void dn_process_int(unsigned int irq, struct pt_regs *fp) |
1da177e4 | 8 | { |
2850bc27 | 9 | __m68k_handle_int(irq, fp); |
1da177e4 | 10 | |
0aa78106 RZ |
11 | *(volatile unsigned char *)(pica)=0x20; |
12 | *(volatile unsigned char *)(picb)=0x20; | |
1da177e4 LT |
13 | } |
14 | ||
0aa78106 RZ |
15 | int apollo_irq_startup(unsigned int irq) |
16 | { | |
17 | if (irq < 8) | |
18 | *(volatile unsigned char *)(pica+1) &= ~(1 << irq); | |
19 | else | |
20 | *(volatile unsigned char *)(picb+1) &= ~(1 << (irq - 8)); | |
21 | return 0; | |
1da177e4 LT |
22 | } |
23 | ||
0aa78106 RZ |
24 | void apollo_irq_shutdown(unsigned int irq) |
25 | { | |
26 | if (irq < 8) | |
27 | *(volatile unsigned char *)(pica+1) |= (1 << irq); | |
28 | else | |
29 | *(volatile unsigned char *)(picb+1) |= (1 << (irq - 8)); | |
1da177e4 LT |
30 | } |
31 | ||
0aa78106 RZ |
32 | static struct irq_controller apollo_irq_controller = { |
33 | .name = "apollo", | |
241258d1 | 34 | .lock = __SPIN_LOCK_UNLOCKED(apollo_irq_controller.lock), |
0aa78106 RZ |
35 | .startup = apollo_irq_startup, |
36 | .shutdown = apollo_irq_shutdown, | |
37 | }; | |
1da177e4 | 38 | |
1da177e4 | 39 | |
66a3f820 | 40 | void __init dn_init_IRQ(void) |
0aa78106 RZ |
41 | { |
42 | m68k_setup_user_interrupt(VEC_USER + 96, 16, dn_process_int); | |
43 | m68k_setup_irq_controller(&apollo_irq_controller, IRQ_APOLLO, 16); | |
1da177e4 | 44 | } |