1 // SPDX-License-Identifier: GPL-2.0
2 #include <linux/interrupt.h>
6 #include <asm/apollohw.h>
8 unsigned int apollo_irq_startup(struct irq_data
*data
)
10 unsigned int irq
= data
->irq
;
13 *(volatile unsigned char *)(pica
+1) &= ~(1 << irq
);
15 *(volatile unsigned char *)(picb
+1) &= ~(1 << (irq
- 8));
19 void apollo_irq_shutdown(struct irq_data
*data
)
21 unsigned int irq
= data
->irq
;
24 *(volatile unsigned char *)(pica
+1) |= (1 << irq
);
26 *(volatile unsigned char *)(picb
+1) |= (1 << (irq
- 8));
29 void apollo_irq_eoi(struct irq_data
*data
)
31 *(volatile unsigned char *)(pica
) = 0x20;
32 *(volatile unsigned char *)(picb
) = 0x20;
35 static struct irq_chip apollo_irq_chip
= {
37 .irq_startup
= apollo_irq_startup
,
38 .irq_shutdown
= apollo_irq_shutdown
,
39 .irq_eoi
= apollo_irq_eoi
,
43 void __init
dn_init_IRQ(void)
45 m68k_setup_user_interrupt(VEC_USER
+ 96, 16);
46 m68k_setup_irq_controller(&apollo_irq_chip
, handle_fasteoi_irq
,