diff options
Diffstat (limited to 'arch/alpha/kernel/sys_rawhide.c')
-rw-r--r-- | arch/alpha/kernel/sys_rawhide.c | 37 |
1 files changed, 12 insertions, 25 deletions
diff --git a/arch/alpha/kernel/sys_rawhide.c b/arch/alpha/kernel/sys_rawhide.c index 26c322bf89ee..7f52161f3d88 100644 --- a/arch/alpha/kernel/sys_rawhide.c +++ b/arch/alpha/kernel/sys_rawhide.c | |||
@@ -56,9 +56,10 @@ rawhide_update_irq_hw(int hose, int mask) | |||
56 | (((h) < MCPCIA_MAX_HOSES) && (cached_irq_masks[(h)] != 0)) | 56 | (((h) < MCPCIA_MAX_HOSES) && (cached_irq_masks[(h)] != 0)) |
57 | 57 | ||
58 | static inline void | 58 | static inline void |
59 | rawhide_enable_irq(unsigned int irq) | 59 | rawhide_enable_irq(struct irq_data *d) |
60 | { | 60 | { |
61 | unsigned int mask, hose; | 61 | unsigned int mask, hose; |
62 | unsigned int irq = d->irq; | ||
62 | 63 | ||
63 | irq -= 16; | 64 | irq -= 16; |
64 | hose = irq / 24; | 65 | hose = irq / 24; |
@@ -76,9 +77,10 @@ rawhide_enable_irq(unsigned int irq) | |||
76 | } | 77 | } |
77 | 78 | ||
78 | static void | 79 | static void |
79 | rawhide_disable_irq(unsigned int irq) | 80 | rawhide_disable_irq(struct irq_data *d) |
80 | { | 81 | { |
81 | unsigned int mask, hose; | 82 | unsigned int mask, hose; |
83 | unsigned int irq = d->irq; | ||
82 | 84 | ||
83 | irq -= 16; | 85 | irq -= 16; |
84 | hose = irq / 24; | 86 | hose = irq / 24; |
@@ -96,9 +98,10 @@ rawhide_disable_irq(unsigned int irq) | |||
96 | } | 98 | } |
97 | 99 | ||
98 | static void | 100 | static void |
99 | rawhide_mask_and_ack_irq(unsigned int irq) | 101 | rawhide_mask_and_ack_irq(struct irq_data *d) |
100 | { | 102 | { |
101 | unsigned int mask, mask1, hose; | 103 | unsigned int mask, mask1, hose; |
104 | unsigned int irq = d->irq; | ||
102 | 105 | ||
103 | irq -= 16; | 106 | irq -= 16; |
104 | hose = irq / 24; | 107 | hose = irq / 24; |
@@ -121,28 +124,11 @@ rawhide_mask_and_ack_irq(unsigned int irq) | |||
121 | spin_unlock(&rawhide_irq_lock); | 124 | spin_unlock(&rawhide_irq_lock); |
122 | } | 125 | } |
123 | 126 | ||
124 | static unsigned int | ||
125 | rawhide_startup_irq(unsigned int irq) | ||
126 | { | ||
127 | rawhide_enable_irq(irq); | ||
128 | return 0; | ||
129 | } | ||
130 | |||
131 | static void | ||
132 | rawhide_end_irq(unsigned int irq) | ||
133 | { | ||
134 | if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) | ||
135 | rawhide_enable_irq(irq); | ||
136 | } | ||
137 | |||
138 | static struct irq_chip rawhide_irq_type = { | 127 | static struct irq_chip rawhide_irq_type = { |
139 | .name = "RAWHIDE", | 128 | .name = "RAWHIDE", |
140 | .startup = rawhide_startup_irq, | 129 | .irq_unmask = rawhide_enable_irq, |
141 | .shutdown = rawhide_disable_irq, | 130 | .irq_mask = rawhide_disable_irq, |
142 | .enable = rawhide_enable_irq, | 131 | .irq_mask_ack = rawhide_mask_and_ack_irq, |
143 | .disable = rawhide_disable_irq, | ||
144 | .ack = rawhide_mask_and_ack_irq, | ||
145 | .end = rawhide_end_irq, | ||
146 | }; | 132 | }; |
147 | 133 | ||
148 | static void | 134 | static void |
@@ -194,8 +180,9 @@ rawhide_init_irq(void) | |||
194 | } | 180 | } |
195 | 181 | ||
196 | for (i = 16; i < 128; ++i) { | 182 | for (i = 16; i < 128; ++i) { |
197 | irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL; | 183 | irq_set_chip_and_handler(i, &rawhide_irq_type, |
198 | irq_desc[i].chip = &rawhide_irq_type; | 184 | handle_level_irq); |
185 | irq_set_status_flags(i, IRQ_LEVEL); | ||
199 | } | 186 | } |
200 | 187 | ||
201 | init_i8259a_irqs(); | 188 | init_i8259a_irqs(); |