aboutsummaryrefslogtreecommitdiffstats
path: root/arch/alpha/kernel/sys_eb64p.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/alpha/kernel/sys_eb64p.c')
-rw-r--r--arch/alpha/kernel/sys_eb64p.c37
1 files changed, 10 insertions, 27 deletions
diff --git a/arch/alpha/kernel/sys_eb64p.c b/arch/alpha/kernel/sys_eb64p.c
index df2090ce5e7f..a7a23b40eec5 100644
--- a/arch/alpha/kernel/sys_eb64p.c
+++ b/arch/alpha/kernel/sys_eb64p.c
@@ -44,39 +44,22 @@ eb64p_update_irq_hw(unsigned int irq, unsigned long mask)
44} 44}
45 45
46static inline void 46static inline void
47eb64p_enable_irq(unsigned int irq) 47eb64p_enable_irq(struct irq_data *d)
48{ 48{
49 eb64p_update_irq_hw(irq, cached_irq_mask &= ~(1 << irq)); 49 eb64p_update_irq_hw(d->irq, cached_irq_mask &= ~(1 << d->irq));
50} 50}
51 51
52static void 52static void
53eb64p_disable_irq(unsigned int irq) 53eb64p_disable_irq(struct irq_data *d)
54{ 54{
55 eb64p_update_irq_hw(irq, cached_irq_mask |= 1 << irq); 55 eb64p_update_irq_hw(d->irq, cached_irq_mask |= 1 << d->irq);
56}
57
58static unsigned int
59eb64p_startup_irq(unsigned int irq)
60{
61 eb64p_enable_irq(irq);
62 return 0; /* never anything pending */
63}
64
65static void
66eb64p_end_irq(unsigned int irq)
67{
68 if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
69 eb64p_enable_irq(irq);
70} 56}
71 57
72static struct irq_chip eb64p_irq_type = { 58static struct irq_chip eb64p_irq_type = {
73 .name = "EB64P", 59 .name = "EB64P",
74 .startup = eb64p_startup_irq, 60 .irq_unmask = eb64p_enable_irq,
75 .shutdown = eb64p_disable_irq, 61 .irq_mask = eb64p_disable_irq,
76 .enable = eb64p_enable_irq, 62 .irq_mask_ack = eb64p_disable_irq,
77 .disable = eb64p_disable_irq,
78 .ack = eb64p_disable_irq,
79 .end = eb64p_end_irq,
80}; 63};
81 64
82static void 65static void
@@ -135,9 +118,9 @@ eb64p_init_irq(void)
135 init_i8259a_irqs(); 118 init_i8259a_irqs();
136 119
137 for (i = 16; i < 32; ++i) { 120 for (i = 16; i < 32; ++i) {
138 irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL; 121 irq_set_chip_and_handler(i, &eb64p_irq_type, handle_level_irq);
139 irq_desc[i].chip = &eb64p_irq_type; 122 irq_set_status_flags(i, IRQ_LEVEL);
140 } 123 }
141 124
142 common_init_isa_dma(); 125 common_init_isa_dma();
143 setup_irq(16+5, &isa_cascade_irqaction); 126 setup_irq(16+5, &isa_cascade_irqaction);