aboutsummaryrefslogtreecommitdiffstats
path: root/arch/alpha/kernel/sys_rawhide.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/alpha/kernel/sys_rawhide.c')
-rw-r--r--arch/alpha/kernel/sys_rawhide.c37
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
58static inline void 58static inline void
59rawhide_enable_irq(unsigned int irq) 59rawhide_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
78static void 79static void
79rawhide_disable_irq(unsigned int irq) 80rawhide_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
98static void 100static void
99rawhide_mask_and_ack_irq(unsigned int irq) 101rawhide_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
124static unsigned int
125rawhide_startup_irq(unsigned int irq)
126{
127 rawhide_enable_irq(irq);
128 return 0;
129}
130
131static void
132rawhide_end_irq(unsigned int irq)
133{
134 if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
135 rawhide_enable_irq(irq);
136}
137
138static struct irq_chip rawhide_irq_type = { 127static 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
148static void 134static 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();