11 #include <linux/types.h>
13 #include <linux/kernel.h>
20 #include <asm/traps.h>
45 { .icr = 0, .index = 0, .ack = 0, },
81 static void intc_irq_mask(
struct irq_data *
d)
88 v = 0x8 << intc_irqmap[irq].
index;
93 static void intc_irq_unmask(
struct irq_data *d)
95 unsigned int irq = d->
irq;
100 v = 0xd << intc_irqmap[irq].
index;
105 static void intc_irq_ack(
struct irq_data *d)
107 unsigned int irq = d->
irq;
112 if (intc_irqmap[irq].
ack) {
115 v &= (0x7 << intc_irqmap[irq].
index);
116 v |= (0x8 << intc_irqmap[irq].
index);
122 static int intc_irq_set_type(
struct irq_data *d,
unsigned int type)
124 unsigned int irq = d->
irq;
128 if (intc_irqmap[irq].
ack) {
132 v &= ~(0x1 << (32 - irq));
134 v |= (0x1 << (32 - irq));
146 static void intc_external_irq(
unsigned int irq,
struct irq_desc *
desc)
148 irq_desc_get_chip(desc)->irq_ack(&desc->
irq_data);
152 static struct irq_chip intc_irq_chip = {
154 .irq_mask = intc_irq_mask,
155 .irq_unmask = intc_irq_unmask,
156 .irq_mask_ack = intc_irq_mask,
157 .irq_ack = intc_irq_ack,
158 .irq_set_type = intc_irq_set_type,
171 for (irq = 0; (irq <
NR_IRQS); irq++) {
178 irq_set_handler(irq, intc_external_irq);