2 * include/asm-arm/arch-arc/irq.h
4 * Copyright (C) 1996 Russell King
7 * 24-09-1996 RMK Created
8 * 10-10-1996 RMK Brought up to date with arch-sa110eval
9 * 22-10-1996 RMK Changed interrupt numbers & uses new inb/outb macros
10 * 11-01-1998 RMK Added mask_and_ack_irq
11 * 22-08-1998 RMK Restructured IRQ routines
13 #include <linux/config.h>
16 #ifdef CONFIG_ARCH_ARC
20 #define a_clf() do { } while (0)
21 #define a_stf() do { } while (0)
24 #define fixup_irq(x) (x)
26 static void arc_mask_irq_ack_a(unsigned int irq
)
37 : "r" (1 << (irq
& 7)), "r" (ioaddr(IOC_IRQMASKA
)),
38 "r" (ioaddr(IOC_IRQCLRA
)));
42 static void arc_mask_irq_a(unsigned int irq
)
52 : "r" (1 << (irq
& 7)), "r" (ioaddr(IOC_IRQMASKA
)));
56 static void arc_unmask_irq_a(unsigned int irq
)
66 : "r" (1 << (irq
& 7)), "r" (ioaddr(IOC_IRQMASKA
)));
70 static void arc_mask_irq_b(unsigned int irq
)
79 : "r" (1 << (irq
& 7)), "r" (ioaddr(IOC_IRQMASKB
)));
82 static void arc_unmask_irq_b(unsigned int irq
)
91 : "r" (1 << (irq
& 7)), "r" (ioaddr(IOC_IRQMASKB
)));
94 static void arc_mask_irq_fiq(unsigned int irq
)
103 : "r" (1 << (irq
& 7)), "r" (ioaddr(IOC_FIQMASK
)));
106 static void arc_unmask_irq_fiq(unsigned int irq
)
110 __asm__
__volatile__(
115 : "r" (1 << (irq
& 7)), "r" (ioaddr(IOC_FIQMASK
)));
118 static __inline__
void irq_init_irq(void)
120 extern void ecard_disableirq(unsigned int irq
);
121 extern void ecard_enableirq(unsigned int irq
);
124 outb(0, IOC_IRQMASKA
);
125 outb(0, IOC_IRQMASKB
);
126 outb(0, IOC_FIQMASK
);
128 for (irq
= 0; irq
< NR_IRQS
; irq
++) {
131 irq_desc
[irq
].probe_ok
= 1;
132 irq_desc
[irq
].valid
= 1;
133 irq_desc
[irq
].mask_ack
= arc_mask_irq_ack_a
;
134 irq_desc
[irq
].mask
= arc_mask_irq_a
;
135 irq_desc
[irq
].unmask
= arc_unmask_irq_a
;
139 irq_desc
[irq
].noautoenable
= 1;
140 irq_desc
[irq
].valid
= 1;
141 irq_desc
[irq
].mask_ack
= arc_mask_irq_ack_a
;
142 irq_desc
[irq
].mask
= arc_mask_irq_a
;
143 irq_desc
[irq
].unmask
= arc_unmask_irq_a
;
147 irq_desc
[irq
].probe_ok
= 1;
149 irq_desc
[irq
].valid
= 1;
150 irq_desc
[irq
].mask_ack
= arc_mask_irq_b
;
151 irq_desc
[irq
].mask
= arc_mask_irq_b
;
152 irq_desc
[irq
].unmask
= arc_unmask_irq_b
;
156 irq_desc
[irq
].valid
= 1;
157 irq_desc
[irq
].mask_ack
= ecard_disableirq
;
158 irq_desc
[irq
].mask
= ecard_disableirq
;
159 irq_desc
[irq
].unmask
= ecard_enableirq
;
163 irq_desc
[irq
].valid
= 1;
164 irq_desc
[irq
].mask_ack
= arc_mask_irq_fiq
;
165 irq_desc
[irq
].mask
= arc_mask_irq_fiq
;
166 irq_desc
[irq
].unmask
= arc_unmask_irq_fiq
;
171 irq_mask
[IRQ_KEYBOARDTX
].noautoenable
= 1;