Commit ff53afe66a3ab5614309a4193df72c82ec3bb984
Committed by
Matt Turner
1 parent
35252254cb
Exists in
master
and in
7 other branches
alpha: i8259, alcor, jensen wildfire: Convert irq_chip
Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Matt Turner <mattst88@gmail.com>
Showing 5 changed files with 58 additions and 52 deletions Side-by-side Diff
arch/alpha/kernel/irq_i8259.c
... | ... | @@ -33,10 +33,10 @@ |
33 | 33 | } |
34 | 34 | |
35 | 35 | inline void |
36 | -i8259a_enable_irq(unsigned int irq) | |
36 | +i8259a_enable_irq(struct irq_data *d) | |
37 | 37 | { |
38 | 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 | 40 | spin_unlock(&i8259_irq_lock); |
41 | 41 | } |
42 | 42 | |
43 | 43 | |
44 | 44 | |
45 | 45 | |
... | ... | @@ -47,16 +47,18 @@ |
47 | 47 | } |
48 | 48 | |
49 | 49 | void |
50 | -i8259a_disable_irq(unsigned int irq) | |
50 | +i8259a_disable_irq(struct irq_data *d) | |
51 | 51 | { |
52 | 52 | spin_lock(&i8259_irq_lock); |
53 | - __i8259a_disable_irq(irq); | |
53 | + __i8259a_disable_irq(d->irq); | |
54 | 54 | spin_unlock(&i8259_irq_lock); |
55 | 55 | } |
56 | 56 | |
57 | 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 | 62 | spin_lock(&i8259_irq_lock); |
61 | 63 | __i8259a_disable_irq(irq); |
62 | 64 | |
... | ... | @@ -71,9 +73,9 @@ |
71 | 73 | |
72 | 74 | struct irq_chip i8259a_irq_type = { |
73 | 75 | .name = "XT-PIC", |
74 | - .unmask = i8259a_enable_irq, | |
75 | - .mask = i8259a_disable_irq, | |
76 | - .mask_ack = i8259a_mask_and_ack_irq, | |
76 | + .irq_unmask = i8259a_enable_irq, | |
77 | + .irq_mask = i8259a_disable_irq, | |
78 | + .irq_mask_ack = i8259a_mask_and_ack_irq, | |
77 | 79 | }; |
78 | 80 | |
79 | 81 | void __init |
arch/alpha/kernel/irq_impl.h
... | ... | @@ -31,11 +31,9 @@ |
31 | 31 | |
32 | 32 | extern void common_init_isa_dma(void); |
33 | 33 | |
34 | -extern void i8259a_enable_irq(unsigned int); | |
35 | -extern void i8259a_disable_irq(unsigned int); | |
36 | -extern void i8259a_mask_and_ack_irq(unsigned int); | |
37 | -extern unsigned int i8259a_startup_irq(unsigned int); | |
38 | -extern void i8259a_end_irq(unsigned int); | |
34 | +extern void i8259a_enable_irq(struct irq_data *d); | |
35 | +extern void i8259a_disable_irq(struct irq_data *d); | |
36 | +extern void i8259a_mask_and_ack_irq(struct irq_data *d); | |
39 | 37 | extern struct irq_chip i8259a_irq_type; |
40 | 38 | extern void init_i8259a_irqs(void); |
41 | 39 |
arch/alpha/kernel/sys_alcor.c
... | ... | @@ -44,31 +44,31 @@ |
44 | 44 | } |
45 | 45 | |
46 | 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 | 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 | 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 | 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 | 65 | *(vuip)GRU_INT_CLEAR = 0; mb(); |
66 | 66 | } |
67 | 67 | |
68 | 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 | 73 | /* On ALCOR/XLT, need to dismiss interrupt via GRU. */ |
74 | 74 | *(vuip)GRU_INT_CLEAR = 0x80000000; mb(); |
... | ... | @@ -77,9 +77,9 @@ |
77 | 77 | |
78 | 78 | static struct irq_chip alcor_irq_type = { |
79 | 79 | .name = "ALCOR", |
80 | - .unmask = alcor_enable_irq, | |
81 | - .mask = alcor_disable_irq, | |
82 | - .mask_ack = alcor_mask_and_ack_irq, | |
80 | + .irq_unmask = alcor_enable_irq, | |
81 | + .irq_mask = alcor_disable_irq, | |
82 | + .irq_mask_ack = alcor_mask_and_ack_irq, | |
83 | 83 | }; |
84 | 84 | |
85 | 85 | static void |
86 | 86 | |
... | ... | @@ -126,9 +126,9 @@ |
126 | 126 | if (i >= 16+20 && i <= 16+30) |
127 | 127 | continue; |
128 | 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 | 133 | init_i8259a_irqs(); |
134 | 134 | common_init_isa_dma(); |
arch/alpha/kernel/sys_jensen.c
... | ... | @@ -63,34 +63,34 @@ |
63 | 63 | */ |
64 | 64 | |
65 | 65 | static void |
66 | -jensen_local_enable(unsigned int irq) | |
66 | +jensen_local_enable(struct irq_data *d) | |
67 | 67 | { |
68 | 68 | /* the parport is really hw IRQ 1, silly Jensen. */ |
69 | - if (irq == 7) | |
70 | - i8259a_enable_irq(1); | |
69 | + if (d->irq == 7) | |
70 | + i8259a_enable_irq(d); | |
71 | 71 | } |
72 | 72 | |
73 | 73 | static void |
74 | -jensen_local_disable(unsigned int irq) | |
74 | +jensen_local_disable(struct irq_data *d) | |
75 | 75 | { |
76 | 76 | /* the parport is really hw IRQ 1, silly Jensen. */ |
77 | - if (irq == 7) | |
78 | - i8259a_disable_irq(1); | |
77 | + if (d->irq == 7) | |
78 | + i8259a_disable_irq(d); | |
79 | 79 | } |
80 | 80 | |
81 | 81 | static void |
82 | -jensen_local_mask_ack(unsigned int irq) | |
82 | +jensen_local_mask_ack(struct irq_data *d) | |
83 | 83 | { |
84 | 84 | /* the parport is really hw IRQ 1, silly Jensen. */ |
85 | - if (irq == 7) | |
86 | - i8259a_mask_and_ack_irq(1); | |
85 | + if (d->irq == 7) | |
86 | + i8259a_mask_and_ack_irq(d); | |
87 | 87 | } |
88 | 88 | |
89 | 89 | static struct irq_chip jensen_local_irq_type = { |
90 | 90 | .name = "LOCAL", |
91 | - .unmask = jensen_local_enable, | |
92 | - .mask = jensen_local_disable, | |
93 | - .mask_ack = jensen_local_mask_ack, | |
91 | + .irq_unmask = jensen_local_enable, | |
92 | + .irq_mask = jensen_local_disable, | |
93 | + .irq_mask_ack = jensen_local_mask_ack, | |
94 | 94 | }; |
95 | 95 | |
96 | 96 | static void |
arch/alpha/kernel/sys_wildfire.c
... | ... | @@ -104,10 +104,12 @@ |
104 | 104 | } |
105 | 105 | |
106 | 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 | 111 | if (irq < 16) |
110 | - i8259a_enable_irq(irq); | |
112 | + i8259a_enable_irq(d); | |
111 | 113 | |
112 | 114 | spin_lock(&wildfire_irq_lock); |
113 | 115 | set_bit(irq, &cached_irq_mask); |
114 | 116 | |
115 | 117 | |
... | ... | @@ -116,10 +118,12 @@ |
116 | 118 | } |
117 | 119 | |
118 | 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 | 125 | if (irq < 16) |
122 | - i8259a_disable_irq(irq); | |
126 | + i8259a_disable_irq(d); | |
123 | 127 | |
124 | 128 | spin_lock(&wildfire_irq_lock); |
125 | 129 | clear_bit(irq, &cached_irq_mask); |
126 | 130 | |
127 | 131 | |
... | ... | @@ -128,10 +132,12 @@ |
128 | 132 | } |
129 | 133 | |
130 | 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 | 139 | if (irq < 16) |
134 | - i8259a_mask_and_ack_irq(irq); | |
140 | + i8259a_mask_and_ack_irq(d); | |
135 | 141 | |
136 | 142 | spin_lock(&wildfire_irq_lock); |
137 | 143 | clear_bit(irq, &cached_irq_mask); |
... | ... | @@ -141,9 +147,9 @@ |
141 | 147 | |
142 | 148 | static struct irq_chip wildfire_irq_type = { |
143 | 149 | .name = "WILDFIRE", |
144 | - .unmask = wildfire_enable_irq, | |
145 | - .mask = wildfire_disable_irq, | |
146 | - .mask_ack = wildfire_mask_and_ack_irq, | |
150 | + .irq_unmask = wildfire_enable_irq, | |
151 | + .irq_mask = wildfire_disable_irq, | |
152 | + .irq_mask_ack = wildfire_mask_and_ack_irq, | |
147 | 153 | }; |
148 | 154 | |
149 | 155 | static void __init |
150 | 156 | |
151 | 157 | |
152 | 158 | |
153 | 159 | |
154 | 160 | |
155 | 161 | |
... | ... | @@ -177,21 +183,21 @@ |
177 | 183 | for (i = 0; i < 16; ++i) { |
178 | 184 | if (i == 2) |
179 | 185 | continue; |
180 | - irq_to_desc(i+irq_bias)->status |= IRQ_LEVEL; | |
181 | 186 | set_irq_chip_and_handler(i+irq_bias, &wildfire_irq_type, |
182 | 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 | 191 | set_irq_chip_and_handler(36+irq_bias, &wildfire_irq_type, |
187 | 192 | handle_level_irq); |
193 | + irq_set_status_flags(36 + irq_bias, IRQ_LEVEL); | |
188 | 194 | for (i = 40; i < 64; ++i) { |
189 | - irq_to_desc(i+irq_bias)->status |= IRQ_LEVEL; | |
190 | 195 | set_irq_chip_and_handler(i+irq_bias, &wildfire_irq_type, |
191 | 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 | 203 | static void __init |