diff options
author | Atsushi Nemoto <anemo@mba.ocn.ne.jp> | 2006-11-01 12:08:36 -0500 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2006-11-29 20:14:46 -0500 |
commit | 1603b5aca4f15b34848fb5594d0c7b6333b99144 (patch) | |
tree | 79272aa41d6510b7256df62e287676885c3960cf /arch/mips/sgi-ip27 | |
parent | c87b6ebaea034c0e0ce86127870cf1511a307b64 (diff) |
[MIPS] IRQ cleanups
This is a big irq cleanup patch.
* Use set_irq_chip() to register irq_chip.
* Initialize .mask, .unmask, .mask_ack field. Functions for these
method are already exist in most case.
* Do not initialize .startup, .shutdown, .enable, .disable fields if
default routines provided by irq_chip_set_defaults() were suitable.
* Remove redundant irq_desc initializations.
* Remove unnecessary local_irq_save/local_irq_restore, spin_lock.
With this cleanup, it would be easy to switch to slightly lightwait
irq flow handlers (handle_level_irq(), etc.) instead of __do_IRQ().
Though whole this patch is quite large, changes in each irq_chip are
not quite simple. Please review and test on your platform. Thanks.
Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/sgi-ip27')
-rw-r--r-- | arch/mips/sgi-ip27/ip27-irq.c | 17 | ||||
-rw-r--r-- | arch/mips/sgi-ip27/ip27-timer.c | 27 |
2 files changed, 10 insertions, 34 deletions
diff --git a/arch/mips/sgi-ip27/ip27-irq.c b/arch/mips/sgi-ip27/ip27-irq.c index 270ecd3e6b4a..824320281a3a 100644 --- a/arch/mips/sgi-ip27/ip27-irq.c +++ b/arch/mips/sgi-ip27/ip27-irq.c | |||
@@ -332,11 +332,6 @@ static inline void disable_bridge_irq(unsigned int irq) | |||
332 | intr_disconnect_level(cpu, swlevel); | 332 | intr_disconnect_level(cpu, swlevel); |
333 | } | 333 | } |
334 | 334 | ||
335 | static void mask_and_ack_bridge_irq(unsigned int irq) | ||
336 | { | ||
337 | disable_bridge_irq(irq); | ||
338 | } | ||
339 | |||
340 | static void end_bridge_irq(unsigned int irq) | 335 | static void end_bridge_irq(unsigned int irq) |
341 | { | 336 | { |
342 | if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)) && | 337 | if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)) && |
@@ -348,18 +343,16 @@ static struct irq_chip bridge_irq_type = { | |||
348 | .typename = "bridge", | 343 | .typename = "bridge", |
349 | .startup = startup_bridge_irq, | 344 | .startup = startup_bridge_irq, |
350 | .shutdown = shutdown_bridge_irq, | 345 | .shutdown = shutdown_bridge_irq, |
351 | .enable = enable_bridge_irq, | 346 | .ack = disable_bridge_irq, |
352 | .disable = disable_bridge_irq, | 347 | .mask = disable_bridge_irq, |
353 | .ack = mask_and_ack_bridge_irq, | 348 | .mask_ack = disable_bridge_irq, |
349 | .unmask = enable_bridge_irq, | ||
354 | .end = end_bridge_irq, | 350 | .end = end_bridge_irq, |
355 | }; | 351 | }; |
356 | 352 | ||
357 | void __devinit register_bridge_irq(unsigned int irq) | 353 | void __devinit register_bridge_irq(unsigned int irq) |
358 | { | 354 | { |
359 | irq_desc[irq].status = IRQ_DISABLED; | 355 | set_irq_chip(irq, &bridge_irq_type); |
360 | irq_desc[irq].action = 0; | ||
361 | irq_desc[irq].depth = 1; | ||
362 | irq_desc[irq].chip = &bridge_irq_type; | ||
363 | } | 356 | } |
364 | 357 | ||
365 | int __devinit request_bridge_irq(struct bridge_controller *bc) | 358 | int __devinit request_bridge_irq(struct bridge_controller *bc) |
diff --git a/arch/mips/sgi-ip27/ip27-timer.c b/arch/mips/sgi-ip27/ip27-timer.c index 5e82a268e3c9..86ba7fc10c38 100644 --- a/arch/mips/sgi-ip27/ip27-timer.c +++ b/arch/mips/sgi-ip27/ip27-timer.c | |||
@@ -172,15 +172,6 @@ static __init unsigned long get_m48t35_time(void) | |||
172 | return mktime(year, month, date, hour, min, sec); | 172 | return mktime(year, month, date, hour, min, sec); |
173 | } | 173 | } |
174 | 174 | ||
175 | static unsigned int startup_rt_irq(unsigned int irq) | ||
176 | { | ||
177 | return 0; | ||
178 | } | ||
179 | |||
180 | static void shutdown_rt_irq(unsigned int irq) | ||
181 | { | ||
182 | } | ||
183 | |||
184 | static void enable_rt_irq(unsigned int irq) | 175 | static void enable_rt_irq(unsigned int irq) |
185 | { | 176 | { |
186 | } | 177 | } |
@@ -189,21 +180,16 @@ static void disable_rt_irq(unsigned int irq) | |||
189 | { | 180 | { |
190 | } | 181 | } |
191 | 182 | ||
192 | static void mask_and_ack_rt(unsigned int irq) | ||
193 | { | ||
194 | } | ||
195 | |||
196 | static void end_rt_irq(unsigned int irq) | 183 | static void end_rt_irq(unsigned int irq) |
197 | { | 184 | { |
198 | } | 185 | } |
199 | 186 | ||
200 | static struct irq_chip rt_irq_type = { | 187 | static struct irq_chip rt_irq_type = { |
201 | .typename = "SN HUB RT timer", | 188 | .typename = "SN HUB RT timer", |
202 | .startup = startup_rt_irq, | 189 | .ack = disable_rt_irq, |
203 | .shutdown = shutdown_rt_irq, | 190 | .mask = disable_rt_irq, |
204 | .enable = enable_rt_irq, | 191 | .mask_ack = disable_rt_irq, |
205 | .disable = disable_rt_irq, | 192 | .unmask = enable_rt_irq, |
206 | .ack = mask_and_ack_rt, | ||
207 | .end = end_rt_irq, | 193 | .end = end_rt_irq, |
208 | }; | 194 | }; |
209 | 195 | ||
@@ -221,10 +207,7 @@ void __init plat_timer_setup(struct irqaction *irq) | |||
221 | if (irqno < 0) | 207 | if (irqno < 0) |
222 | panic("Can't allocate interrupt number for timer interrupt"); | 208 | panic("Can't allocate interrupt number for timer interrupt"); |
223 | 209 | ||
224 | irq_desc[irqno].status = IRQ_DISABLED; | 210 | set_irq_chip(irqno, &rt_irq_type); |
225 | irq_desc[irqno].action = NULL; | ||
226 | irq_desc[irqno].depth = 1; | ||
227 | irq_desc[irqno].chip = &rt_irq_type; | ||
228 | 211 | ||
229 | /* over-write the handler, we use our own way */ | 212 | /* over-write the handler, we use our own way */ |
230 | irq->handler = no_action; | 213 | irq->handler = no_action; |