diff options
| author | Thomas Gleixner <tglx@linutronix.de> | 2011-02-06 09:32:28 -0500 |
|---|---|---|
| committer | Matt Turner <mattst88@gmail.com> | 2011-03-02 14:57:55 -0500 |
| commit | ff53afe66a3ab5614309a4193df72c82ec3bb984 (patch) | |
| tree | 59e65c6069a0bd4277fb2ba118cc146c8d6d8c0b /arch/alpha/kernel | |
| parent | 35252254cbd89191f381bb5454b3bdfb939e9d31 (diff) | |
alpha: i8259, alcor, jensen wildfire: Convert irq_chip
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Matt Turner <mattst88@gmail.com>
Diffstat (limited to 'arch/alpha/kernel')
| -rw-r--r-- | arch/alpha/kernel/irq_i8259.c | 18 | ||||
| -rw-r--r-- | arch/alpha/kernel/irq_impl.h | 8 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_alcor.c | 28 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_jensen.c | 24 | ||||
| -rw-r--r-- | arch/alpha/kernel/sys_wildfire.c | 32 |
5 files changed, 58 insertions, 52 deletions
diff --git a/arch/alpha/kernel/irq_i8259.c b/arch/alpha/kernel/irq_i8259.c index 956ea0ed169..c7cc9813e45 100644 --- a/arch/alpha/kernel/irq_i8259.c +++ b/arch/alpha/kernel/irq_i8259.c | |||
| @@ -33,10 +33,10 @@ i8259_update_irq_hw(unsigned int irq, unsigned long mask) | |||
| 33 | } | 33 | } |
| 34 | 34 | ||
| 35 | inline void | 35 | inline void |
| 36 | i8259a_enable_irq(unsigned int irq) | 36 | i8259a_enable_irq(struct irq_data *d) |
| 37 | { | 37 | { |
| 38 | spin_lock(&i8259_irq_lock); | 38 | spin_lock(&i8259_irq_lock); |
| 39 | i8259_update_irq_hw(irq, cached_irq_mask &= ~(1 << irq)); | 39 | i8259_update_irq_hw(d->irq, cached_irq_mask &= ~(1 << d->irq)); |
| 40 | spin_unlock(&i8259_irq_lock); | 40 | spin_unlock(&i8259_irq_lock); |
| 41 | } | 41 | } |
| 42 | 42 | ||
| @@ -47,16 +47,18 @@ __i8259a_disable_irq(unsigned int irq) | |||
| 47 | } | 47 | } |
| 48 | 48 | ||
| 49 | void | 49 | void |
| 50 | i8259a_disable_irq(unsigned int irq) | 50 | i8259a_disable_irq(struct irq_data *d) |
| 51 | { | 51 | { |
| 52 | spin_lock(&i8259_irq_lock); | 52 | spin_lock(&i8259_irq_lock); |
| 53 | __i8259a_disable_irq(irq); | 53 | __i8259a_disable_irq(d->irq); |
| 54 | spin_unlock(&i8259_irq_lock); | 54 | spin_unlock(&i8259_irq_lock); |
| 55 | } | 55 | } |
| 56 | 56 | ||
| 57 | void | 57 | void |
| 58 | i8259a_mask_and_ack_irq(unsigned int irq) | 58 | i8259a_mask_and_ack_irq(struct irq_data *d) |
| 59 | { | 59 | { |
| 60 | unsigned int irq = d->irq; | ||
| 61 | |||
| 60 | spin_lock(&i8259_irq_lock); | 62 | spin_lock(&i8259_irq_lock); |
| 61 | __i8259a_disable_irq(irq); | 63 | __i8259a_disable_irq(irq); |
| 62 | 64 | ||
| @@ -71,9 +73,9 @@ i8259a_mask_and_ack_irq(unsigned int irq) | |||
| 71 | 73 | ||
| 72 | struct irq_chip i8259a_irq_type = { | 74 | struct irq_chip i8259a_irq_type = { |
| 73 | .name = "XT-PIC", | 75 | .name = "XT-PIC", |
| 74 | .unmask = i8259a_enable_irq, | 76 | .irq_unmask = i8259a_enable_irq, |
| 75 | .mask = i8259a_disable_irq, | 77 | .irq_mask = i8259a_disable_irq, |
| 76 | .mask_ack = i8259a_mask_and_ack_irq, | 78 | .irq_mask_ack = i8259a_mask_and_ack_irq, |
| 77 | }; | 79 | }; |
| 78 | 80 | ||
| 79 | void __init | 81 | void __init |
diff --git a/arch/alpha/kernel/irq_impl.h b/arch/alpha/kernel/irq_impl.h index b63ccd7386f..d507a234b05 100644 --- a/arch/alpha/kernel/irq_impl.h +++ b/arch/alpha/kernel/irq_impl.h | |||
| @@ -31,11 +31,9 @@ extern void init_rtc_irq(void); | |||
| 31 | 31 | ||
| 32 | extern void common_init_isa_dma(void); | 32 | extern void common_init_isa_dma(void); |
| 33 | 33 | ||
| 34 | extern void i8259a_enable_irq(unsigned int); | 34 | extern void i8259a_enable_irq(struct irq_data *d); |
| 35 | extern void i8259a_disable_irq(unsigned int); | 35 | extern void i8259a_disable_irq(struct irq_data *d); |
| 36 | extern void i8259a_mask_and_ack_irq(unsigned int); | 36 | extern void i8259a_mask_and_ack_irq(struct irq_data *d); |
| 37 | extern unsigned int i8259a_startup_irq(unsigned int); | ||
| 38 | extern void i8259a_end_irq(unsigned int); | ||
| 39 | extern struct irq_chip i8259a_irq_type; | 37 | extern struct irq_chip i8259a_irq_type; |
| 40 | extern void init_i8259a_irqs(void); | 38 | extern void init_i8259a_irqs(void); |
| 41 | 39 | ||
diff --git a/arch/alpha/kernel/sys_alcor.c b/arch/alpha/kernel/sys_alcor.c index 7bef6176823..88d95e872f5 100644 --- a/arch/alpha/kernel/sys_alcor.c +++ b/arch/alpha/kernel/sys_alcor.c | |||
| @@ -44,31 +44,31 @@ alcor_update_irq_hw(unsigned long mask) | |||
| 44 | } | 44 | } |
| 45 | 45 | ||
| 46 | static inline void | 46 | static inline void |
| 47 | alcor_enable_irq(unsigned int irq) | 47 | alcor_enable_irq(struct irq_data *d) |
| 48 | { | 48 | { |
| 49 | alcor_update_irq_hw(cached_irq_mask |= 1UL << (irq - 16)); | 49 | alcor_update_irq_hw(cached_irq_mask |= 1UL << (d->irq - 16)); |
| 50 | } | 50 | } |
| 51 | 51 | ||
| 52 | static void | 52 | static void |
| 53 | alcor_disable_irq(unsigned int irq) | 53 | alcor_disable_irq(struct irq_data *d) |
| 54 | { | 54 | { |
| 55 | alcor_update_irq_hw(cached_irq_mask &= ~(1UL << (irq - 16))); | 55 | alcor_update_irq_hw(cached_irq_mask &= ~(1UL << (d->irq - 16))); |
| 56 | } | 56 | } |
| 57 | 57 | ||
| 58 | static void | 58 | static void |
| 59 | alcor_mask_and_ack_irq(unsigned int irq) | 59 | alcor_mask_and_ack_irq(struct irq_data *d) |
| 60 | { | 60 | { |
| 61 | alcor_disable_irq(irq); | 61 | alcor_disable_irq(d); |
| 62 | 62 | ||
| 63 | /* On ALCOR/XLT, need to dismiss interrupt via GRU. */ | 63 | /* On ALCOR/XLT, need to dismiss interrupt via GRU. */ |
| 64 | *(vuip)GRU_INT_CLEAR = 1 << (irq - 16); mb(); | 64 | *(vuip)GRU_INT_CLEAR = 1 << (d->irq - 16); mb(); |
| 65 | *(vuip)GRU_INT_CLEAR = 0; mb(); | 65 | *(vuip)GRU_INT_CLEAR = 0; mb(); |
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | static void | 68 | static void |
| 69 | alcor_isa_mask_and_ack_irq(unsigned int irq) | 69 | alcor_isa_mask_and_ack_irq(struct irq_data *d) |
| 70 | { | 70 | { |
| 71 | i8259a_mask_and_ack_irq(irq); | 71 | i8259a_mask_and_ack_irq(d); |
| 72 | 72 | ||
| 73 | /* On ALCOR/XLT, need to dismiss interrupt via GRU. */ | 73 | /* On ALCOR/XLT, need to dismiss interrupt via GRU. */ |
| 74 | *(vuip)GRU_INT_CLEAR = 0x80000000; mb(); | 74 | *(vuip)GRU_INT_CLEAR = 0x80000000; mb(); |
| @@ -77,9 +77,9 @@ alcor_isa_mask_and_ack_irq(unsigned int irq) | |||
| 77 | 77 | ||
| 78 | static struct irq_chip alcor_irq_type = { | 78 | static struct irq_chip alcor_irq_type = { |
| 79 | .name = "ALCOR", | 79 | .name = "ALCOR", |
| 80 | .unmask = alcor_enable_irq, | 80 | .irq_unmask = alcor_enable_irq, |
| 81 | .mask = alcor_disable_irq, | 81 | .irq_mask = alcor_disable_irq, |
| 82 | .mask_ack = alcor_mask_and_ack_irq, | 82 | .irq_mask_ack = alcor_mask_and_ack_irq, |
| 83 | }; | 83 | }; |
| 84 | 84 | ||
| 85 | static void | 85 | static void |
| @@ -126,9 +126,9 @@ alcor_init_irq(void) | |||
| 126 | if (i >= 16+20 && i <= 16+30) | 126 | if (i >= 16+20 && i <= 16+30) |
| 127 | continue; | 127 | continue; |
| 128 | set_irq_chip_and_handler(i, &alcor_irq_type, handle_level_irq); | 128 | set_irq_chip_and_handler(i, &alcor_irq_type, handle_level_irq); |
| 129 | irq_to_desc(i)->status |= IRQ_LEVEL; | 129 | irq_set_status_flags(i, IRQ_LEVEL); |
| 130 | } | 130 | } |
| 131 | i8259a_irq_type.ack = alcor_isa_mask_and_ack_irq; | 131 | i8259a_irq_type.irq_ack = alcor_isa_mask_and_ack_irq; |
| 132 | 132 | ||
| 133 | init_i8259a_irqs(); | 133 | init_i8259a_irqs(); |
| 134 | common_init_isa_dma(); | 134 | common_init_isa_dma(); |
diff --git a/arch/alpha/kernel/sys_jensen.c b/arch/alpha/kernel/sys_jensen.c index 34f55e03d33..00341b75c8b 100644 --- a/arch/alpha/kernel/sys_jensen.c +++ b/arch/alpha/kernel/sys_jensen.c | |||
| @@ -63,34 +63,34 @@ | |||
| 63 | */ | 63 | */ |
| 64 | 64 | ||
| 65 | static void | 65 | static void |
| 66 | jensen_local_enable(unsigned int irq) | 66 | jensen_local_enable(struct irq_data *d) |
| 67 | { | 67 | { |
| 68 | /* the parport is really hw IRQ 1, silly Jensen. */ | 68 | /* the parport is really hw IRQ 1, silly Jensen. */ |
| 69 | if (irq == 7) | 69 | if (d->irq == 7) |
| 70 | i8259a_enable_irq(1); | 70 | i8259a_enable_irq(d); |
| 71 | } | 71 | } |
| 72 | 72 | ||
| 73 | static void | 73 | static void |
| 74 | jensen_local_disable(unsigned int irq) | 74 | jensen_local_disable(struct irq_data *d) |
| 75 | { | 75 | { |
| 76 | /* the parport is really hw IRQ 1, silly Jensen. */ | 76 | /* the parport is really hw IRQ 1, silly Jensen. */ |
| 77 | if (irq == 7) | 77 | if (d->irq == 7) |
| 78 | i8259a_disable_irq(1); | 78 | i8259a_disable_irq(d); |
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | static void | 81 | static void |
| 82 | jensen_local_mask_ack(unsigned int irq) | 82 | jensen_local_mask_ack(struct irq_data *d) |
| 83 | { | 83 | { |
| 84 | /* the parport is really hw IRQ 1, silly Jensen. */ | 84 | /* the parport is really hw IRQ 1, silly Jensen. */ |
| 85 | if (irq == 7) | 85 | if (d->irq == 7) |
| 86 | i8259a_mask_and_ack_irq(1); | 86 | i8259a_mask_and_ack_irq(d); |
| 87 | } | 87 | } |
| 88 | 88 | ||
| 89 | static struct irq_chip jensen_local_irq_type = { | 89 | static struct irq_chip jensen_local_irq_type = { |
| 90 | .name = "LOCAL", | 90 | .name = "LOCAL", |
| 91 | .unmask = jensen_local_enable, | 91 | .irq_unmask = jensen_local_enable, |
| 92 | .mask = jensen_local_disable, | 92 | .irq_mask = jensen_local_disable, |
| 93 | .mask_ack = jensen_local_mask_ack, | 93 | .irq_mask_ack = jensen_local_mask_ack, |
| 94 | }; | 94 | }; |
| 95 | 95 | ||
| 96 | static void | 96 | static void |
diff --git a/arch/alpha/kernel/sys_wildfire.c b/arch/alpha/kernel/sys_wildfire.c index eec52594d41..ca60a387ef0 100644 --- a/arch/alpha/kernel/sys_wildfire.c +++ b/arch/alpha/kernel/sys_wildfire.c | |||
| @@ -104,10 +104,12 @@ wildfire_init_irq_hw(void) | |||
| 104 | } | 104 | } |
| 105 | 105 | ||
| 106 | static void | 106 | static void |
| 107 | wildfire_enable_irq(unsigned int irq) | 107 | wildfire_enable_irq(struct irq_data *d) |
| 108 | { | 108 | { |
| 109 | unsigned int irq = d->irq; | ||
| 110 | |||
| 109 | if (irq < 16) | 111 | if (irq < 16) |
| 110 | i8259a_enable_irq(irq); | 112 | i8259a_enable_irq(d); |
| 111 | 113 | ||
| 112 | spin_lock(&wildfire_irq_lock); | 114 | spin_lock(&wildfire_irq_lock); |
| 113 | set_bit(irq, &cached_irq_mask); | 115 | set_bit(irq, &cached_irq_mask); |
| @@ -116,10 +118,12 @@ wildfire_enable_irq(unsigned int irq) | |||
| 116 | } | 118 | } |
| 117 | 119 | ||
| 118 | static void | 120 | static void |
| 119 | wildfire_disable_irq(unsigned int irq) | 121 | wildfire_disable_irq(struct irq_data *d) |
| 120 | { | 122 | { |
| 123 | unsigned int irq = d->irq; | ||
| 124 | |||
| 121 | if (irq < 16) | 125 | if (irq < 16) |
| 122 | i8259a_disable_irq(irq); | 126 | i8259a_disable_irq(d); |
| 123 | 127 | ||
| 124 | spin_lock(&wildfire_irq_lock); | 128 | spin_lock(&wildfire_irq_lock); |
| 125 | clear_bit(irq, &cached_irq_mask); | 129 | clear_bit(irq, &cached_irq_mask); |
| @@ -128,10 +132,12 @@ wildfire_disable_irq(unsigned int irq) | |||
| 128 | } | 132 | } |
| 129 | 133 | ||
| 130 | static void | 134 | static void |
| 131 | wildfire_mask_and_ack_irq(unsigned int irq) | 135 | wildfire_mask_and_ack_irq(struct irq_data *d) |
| 132 | { | 136 | { |
| 137 | unsigned int irq = d->irq; | ||
| 138 | |||
| 133 | if (irq < 16) | 139 | if (irq < 16) |
| 134 | i8259a_mask_and_ack_irq(irq); | 140 | i8259a_mask_and_ack_irq(d); |
| 135 | 141 | ||
| 136 | spin_lock(&wildfire_irq_lock); | 142 | spin_lock(&wildfire_irq_lock); |
| 137 | clear_bit(irq, &cached_irq_mask); | 143 | clear_bit(irq, &cached_irq_mask); |
| @@ -141,9 +147,9 @@ wildfire_mask_and_ack_irq(unsigned int irq) | |||
| 141 | 147 | ||
| 142 | static struct irq_chip wildfire_irq_type = { | 148 | static struct irq_chip wildfire_irq_type = { |
| 143 | .name = "WILDFIRE", | 149 | .name = "WILDFIRE", |
| 144 | .unmask = wildfire_enable_irq, | 150 | .irq_unmask = wildfire_enable_irq, |
| 145 | .mask = wildfire_disable_irq, | 151 | .irq_mask = wildfire_disable_irq, |
| 146 | .mask_ack = wildfire_mask_and_ack_irq, | 152 | .irq_mask_ack = wildfire_mask_and_ack_irq, |
| 147 | }; | 153 | }; |
| 148 | 154 | ||
| 149 | static void __init | 155 | static void __init |
| @@ -177,21 +183,21 @@ wildfire_init_irq_per_pca(int qbbno, int pcano) | |||
| 177 | for (i = 0; i < 16; ++i) { | 183 | for (i = 0; i < 16; ++i) { |
| 178 | if (i == 2) | 184 | if (i == 2) |
| 179 | continue; | 185 | continue; |
| 180 | irq_to_desc(i+irq_bias)->status |= IRQ_LEVEL; | ||
| 181 | set_irq_chip_and_handler(i+irq_bias, &wildfire_irq_type, | 186 | set_irq_chip_and_handler(i+irq_bias, &wildfire_irq_type, |
| 182 | handle_level_irq); | 187 | handle_level_irq); |
| 188 | irq_set_status_flags(i + irq_bias, IRQ_LEVEL); | ||
| 183 | } | 189 | } |
| 184 | 190 | ||
| 185 | irq_to_desc(36+irq_bias)->status |= IRQ_LEVEL; | ||
| 186 | set_irq_chip_and_handler(36+irq_bias, &wildfire_irq_type, | 191 | set_irq_chip_and_handler(36+irq_bias, &wildfire_irq_type, |
| 187 | handle_level_irq); | 192 | handle_level_irq); |
| 193 | irq_set_status_flags(36 + irq_bias, IRQ_LEVEL); | ||
| 188 | for (i = 40; i < 64; ++i) { | 194 | for (i = 40; i < 64; ++i) { |
| 189 | irq_to_desc(i+irq_bias)->status |= IRQ_LEVEL; | ||
| 190 | set_irq_chip_and_handler(i+irq_bias, &wildfire_irq_type, | 195 | set_irq_chip_and_handler(i+irq_bias, &wildfire_irq_type, |
| 191 | handle_level_irq); | 196 | handle_level_irq); |
| 197 | irq_set_status_flags(i + irq_bias, IRQ_LEVEL); | ||
| 192 | } | 198 | } |
| 193 | 199 | ||
| 194 | setup_irq(32+irq_bias, &isa_enable); | 200 | setup_irq(32+irq_bias, &isa_enable); |
| 195 | } | 201 | } |
| 196 | 202 | ||
| 197 | static void __init | 203 | static void __init |
