diff options
author | Atsushi Nemoto <anemo@mba.ocn.ne.jp> | 2007-01-14 09:41:42 -0500 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 2007-02-06 11:53:09 -0500 |
commit | 2fa7937bd8922e1fe4aae6a45e7e787fa45d6043 (patch) | |
tree | 05465b7aa2b1e165320a2b938d0f757c7a893265 /arch/mips/vr41xx | |
parent | 97dcb82de6cc99a5669eb8e342efc24cceb1e77e (diff) |
[MIPS] Make I8259A_IRQ_BASE customizable
Move I8259A_IRQ_BASE from asm/i8259.h to asm/mach-generic/irq.h and
make it really customizable. And remove I8259_IRQ_BASE declared on
some platforms. Currently only NEC_CMBVR4133 is using custom
I8259A_IRQ_BASE value.
Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
Diffstat (limited to 'arch/mips/vr41xx')
-rw-r--r-- | arch/mips/vr41xx/nec-cmbvr4133/irq.c | 53 |
1 files changed, 2 insertions, 51 deletions
diff --git a/arch/mips/vr41xx/nec-cmbvr4133/irq.c b/arch/mips/vr41xx/nec-cmbvr4133/irq.c index 128ed8d6f111..7d2d076b0f54 100644 --- a/arch/mips/vr41xx/nec-cmbvr4133/irq.c +++ b/arch/mips/vr41xx/nec-cmbvr4133/irq.c | |||
@@ -21,60 +21,16 @@ | |||
21 | #include <linux/interrupt.h> | 21 | #include <linux/interrupt.h> |
22 | 22 | ||
23 | #include <asm/io.h> | 23 | #include <asm/io.h> |
24 | #include <asm/i8259.h> | ||
24 | #include <asm/vr41xx/cmbvr4133.h> | 25 | #include <asm/vr41xx/cmbvr4133.h> |
25 | 26 | ||
26 | extern void enable_8259A_irq(unsigned int irq); | ||
27 | extern void disable_8259A_irq(unsigned int irq); | ||
28 | extern void mask_and_ack_8259A(unsigned int irq); | ||
29 | extern void init_8259A(int hoge); | ||
30 | |||
31 | extern int vr4133_rockhopper; | 27 | extern int vr4133_rockhopper; |
32 | 28 | ||
33 | static void enable_i8259_irq(unsigned int irq) | ||
34 | { | ||
35 | enable_8259A_irq(irq - I8259_IRQ_BASE); | ||
36 | } | ||
37 | |||
38 | static void disable_i8259_irq(unsigned int irq) | ||
39 | { | ||
40 | disable_8259A_irq(irq - I8259_IRQ_BASE); | ||
41 | } | ||
42 | |||
43 | static void ack_i8259_irq(unsigned int irq) | ||
44 | { | ||
45 | mask_and_ack_8259A(irq - I8259_IRQ_BASE); | ||
46 | } | ||
47 | |||
48 | static struct irq_chip i8259_irq_type = { | ||
49 | .typename = "XT-PIC", | ||
50 | .ack = ack_i8259_irq, | ||
51 | .mask = disable_i8259_irq, | ||
52 | .mask_ack = ack_i8259_irq, | ||
53 | .unmask = enable_i8259_irq, | ||
54 | }; | ||
55 | |||
56 | static int i8259_get_irq_number(int irq) | 29 | static int i8259_get_irq_number(int irq) |
57 | { | 30 | { |
58 | unsigned long isr; | 31 | return i8259_irq(); |
59 | |||
60 | isr = inb(0x20); | ||
61 | irq = ffz(~isr); | ||
62 | if (irq == 2) { | ||
63 | isr = inb(0xa0); | ||
64 | irq = 8 + ffz(~isr); | ||
65 | } | ||
66 | |||
67 | if (irq < 0 || irq > 15) | ||
68 | return -EINVAL; | ||
69 | |||
70 | return I8259_IRQ_BASE + irq; | ||
71 | } | 32 | } |
72 | 33 | ||
73 | static struct irqaction i8259_slave_cascade = { | ||
74 | .handler = &no_action, | ||
75 | .name = "cascade", | ||
76 | }; | ||
77 | |||
78 | void __init rockhopper_init_irq(void) | 34 | void __init rockhopper_init_irq(void) |
79 | { | 35 | { |
80 | int i; | 36 | int i; |
@@ -84,11 +40,6 @@ void __init rockhopper_init_irq(void) | |||
84 | return; | 40 | return; |
85 | } | 41 | } |
86 | 42 | ||
87 | for (i = I8259_IRQ_BASE; i <= I8259_IRQ_LAST; i++) | ||
88 | set_irq_chip_and_handler(i, &i8259_irq_type, handle_level_irq); | ||
89 | |||
90 | setup_irq(I8259_SLAVE_IRQ, &i8259_slave_cascade); | ||
91 | |||
92 | vr41xx_set_irq_trigger(CMBVR41XX_INTC_PIN, TRIGGER_LEVEL, SIGNAL_THROUGH); | 43 | vr41xx_set_irq_trigger(CMBVR41XX_INTC_PIN, TRIGGER_LEVEL, SIGNAL_THROUGH); |
93 | vr41xx_set_irq_level(CMBVR41XX_INTC_PIN, LEVEL_HIGH); | 44 | vr41xx_set_irq_level(CMBVR41XX_INTC_PIN, LEVEL_HIGH); |
94 | vr41xx_cascade_irq(CMBVR41XX_INTC_IRQ, i8259_get_irq_number); | 45 | vr41xx_cascade_irq(CMBVR41XX_INTC_IRQ, i8259_get_irq_number); |