diff options
Diffstat (limited to 'arch/mips/sni/a20r.c')
-rw-r--r-- | arch/mips/sni/a20r.c | 26 |
1 files changed, 8 insertions, 18 deletions
diff --git a/arch/mips/sni/a20r.c b/arch/mips/sni/a20r.c index e6980892834a..c48194c3073b 100644 --- a/arch/mips/sni/a20r.c +++ b/arch/mips/sni/a20r.c | |||
@@ -10,6 +10,7 @@ | |||
10 | 10 | ||
11 | #include <linux/init.h> | 11 | #include <linux/init.h> |
12 | #include <linux/interrupt.h> | 12 | #include <linux/interrupt.h> |
13 | #include <linux/irq.h> | ||
13 | #include <linux/platform_device.h> | 14 | #include <linux/platform_device.h> |
14 | #include <linux/serial_8250.h> | 15 | #include <linux/serial_8250.h> |
15 | 16 | ||
@@ -167,33 +168,22 @@ static u32 a20r_ack_hwint(void) | |||
167 | return status; | 168 | return status; |
168 | } | 169 | } |
169 | 170 | ||
170 | static inline void unmask_a20r_irq(unsigned int irq) | 171 | static inline void unmask_a20r_irq(struct irq_data *d) |
171 | { | 172 | { |
172 | set_c0_status(0x100 << (irq - SNI_A20R_IRQ_BASE)); | 173 | set_c0_status(0x100 << (d->irq - SNI_A20R_IRQ_BASE)); |
173 | irq_enable_hazard(); | 174 | irq_enable_hazard(); |
174 | } | 175 | } |
175 | 176 | ||
176 | static inline void mask_a20r_irq(unsigned int irq) | 177 | static inline void mask_a20r_irq(struct irq_data *d) |
177 | { | 178 | { |
178 | clear_c0_status(0x100 << (irq - SNI_A20R_IRQ_BASE)); | 179 | clear_c0_status(0x100 << (d->irq - SNI_A20R_IRQ_BASE)); |
179 | irq_disable_hazard(); | 180 | irq_disable_hazard(); |
180 | } | 181 | } |
181 | 182 | ||
182 | static void end_a20r_irq(unsigned int irq) | ||
183 | { | ||
184 | if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) { | ||
185 | a20r_ack_hwint(); | ||
186 | unmask_a20r_irq(irq); | ||
187 | } | ||
188 | } | ||
189 | |||
190 | static struct irq_chip a20r_irq_type = { | 183 | static struct irq_chip a20r_irq_type = { |
191 | .name = "A20R", | 184 | .name = "A20R", |
192 | .ack = mask_a20r_irq, | 185 | .irq_mask = mask_a20r_irq, |
193 | .mask = mask_a20r_irq, | 186 | .irq_unmask = unmask_a20r_irq, |
194 | .mask_ack = mask_a20r_irq, | ||
195 | .unmask = unmask_a20r_irq, | ||
196 | .end = end_a20r_irq, | ||
197 | }; | 187 | }; |
198 | 188 | ||
199 | /* | 189 | /* |
@@ -219,7 +209,7 @@ void __init sni_a20r_irq_init(void) | |||
219 | int i; | 209 | int i; |
220 | 210 | ||
221 | for (i = SNI_A20R_IRQ_BASE + 2 ; i < SNI_A20R_IRQ_BASE + 8; i++) | 211 | for (i = SNI_A20R_IRQ_BASE + 2 ; i < SNI_A20R_IRQ_BASE + 8; i++) |
222 | set_irq_chip_and_handler(i, &a20r_irq_type, handle_level_irq); | 212 | irq_set_chip_and_handler(i, &a20r_irq_type, handle_level_irq); |
223 | sni_hwint = a20r_hwint; | 213 | sni_hwint = a20r_hwint; |
224 | change_c0_status(ST0_IM, IE_IRQ0); | 214 | change_c0_status(ST0_IM, IE_IRQ0); |
225 | setup_irq(SNI_A20R_IRQ_BASE + 3, &sni_isa_irq); | 215 | setup_irq(SNI_A20R_IRQ_BASE + 3, &sni_isa_irq); |