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/jazz | |
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/jazz')
-rw-r--r-- | arch/mips/jazz/irq.c | 27 |
1 files changed, 6 insertions, 21 deletions
diff --git a/arch/mips/jazz/irq.c b/arch/mips/jazz/irq.c index d5bd6b3a0933..4bbb6cb08d6e 100644 --- a/arch/mips/jazz/irq.c +++ b/arch/mips/jazz/irq.c | |||
@@ -28,14 +28,6 @@ static void enable_r4030_irq(unsigned int irq) | |||
28 | spin_unlock_irqrestore(&r4030_lock, flags); | 28 | spin_unlock_irqrestore(&r4030_lock, flags); |
29 | } | 29 | } |
30 | 30 | ||
31 | static unsigned int startup_r4030_irq(unsigned int irq) | ||
32 | { | ||
33 | enable_r4030_irq(irq); | ||
34 | return 0; /* never anything pending */ | ||
35 | } | ||
36 | |||
37 | #define shutdown_r4030_irq disable_r4030_irq | ||
38 | |||
39 | void disable_r4030_irq(unsigned int irq) | 31 | void disable_r4030_irq(unsigned int irq) |
40 | { | 32 | { |
41 | unsigned int mask = ~(1 << (irq - JAZZ_PARALLEL_IRQ)); | 33 | unsigned int mask = ~(1 << (irq - JAZZ_PARALLEL_IRQ)); |
@@ -47,8 +39,6 @@ void disable_r4030_irq(unsigned int irq) | |||
47 | spin_unlock_irqrestore(&r4030_lock, flags); | 39 | spin_unlock_irqrestore(&r4030_lock, flags); |
48 | } | 40 | } |
49 | 41 | ||
50 | #define mask_and_ack_r4030_irq disable_r4030_irq | ||
51 | |||
52 | static void end_r4030_irq(unsigned int irq) | 42 | static void end_r4030_irq(unsigned int irq) |
53 | { | 43 | { |
54 | if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) | 44 | if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) |
@@ -57,11 +47,10 @@ static void end_r4030_irq(unsigned int irq) | |||
57 | 47 | ||
58 | static struct irq_chip r4030_irq_type = { | 48 | static struct irq_chip r4030_irq_type = { |
59 | .typename = "R4030", | 49 | .typename = "R4030", |
60 | .startup = startup_r4030_irq, | 50 | .ack = disable_r4030_irq, |
61 | .shutdown = shutdown_r4030_irq, | 51 | .mask = disable_r4030_irq, |
62 | .enable = enable_r4030_irq, | 52 | .mask_ack = disable_r4030_irq, |
63 | .disable = disable_r4030_irq, | 53 | .unmask = enable_r4030_irq, |
64 | .ack = mask_and_ack_r4030_irq, | ||
65 | .end = end_r4030_irq, | 54 | .end = end_r4030_irq, |
66 | }; | 55 | }; |
67 | 56 | ||
@@ -69,12 +58,8 @@ void __init init_r4030_ints(void) | |||
69 | { | 58 | { |
70 | int i; | 59 | int i; |
71 | 60 | ||
72 | for (i = JAZZ_PARALLEL_IRQ; i <= JAZZ_TIMER_IRQ; i++) { | 61 | for (i = JAZZ_PARALLEL_IRQ; i <= JAZZ_TIMER_IRQ; i++) |
73 | irq_desc[i].status = IRQ_DISABLED; | 62 | set_irq_chip(i, &r4030_irq_type); |
74 | irq_desc[i].action = 0; | ||
75 | irq_desc[i].depth = 1; | ||
76 | irq_desc[i].chip = &r4030_irq_type; | ||
77 | } | ||
78 | 63 | ||
79 | r4030_write_reg16(JAZZ_IO_IRQ_ENABLE, 0); | 64 | r4030_write_reg16(JAZZ_IO_IRQ_ENABLE, 0); |
80 | r4030_read_reg16(JAZZ_IO_IRQ_SOURCE); /* clear pending IRQs */ | 65 | r4030_read_reg16(JAZZ_IO_IRQ_SOURCE); /* clear pending IRQs */ |