aboutsummaryrefslogtreecommitdiffstats
path: root/arch/alpha/kernel/sys_eiger.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/alpha/kernel/sys_eiger.c')
-rw-r--r--arch/alpha/kernel/sys_eiger.c33
1 files changed, 9 insertions, 24 deletions
diff --git a/arch/alpha/kernel/sys_eiger.c b/arch/alpha/kernel/sys_eiger.c
index 3ca1dbcf4044..a60cd5b2621e 100644
--- a/arch/alpha/kernel/sys_eiger.c
+++ b/arch/alpha/kernel/sys_eiger.c
@@ -51,43 +51,28 @@ eiger_update_irq_hw(unsigned long irq, unsigned long mask)
51} 51}
52 52
53static inline void 53static inline void
54eiger_enable_irq(unsigned int irq) 54eiger_enable_irq(struct irq_data *d)
55{ 55{
56 unsigned int irq = d->irq;
56 unsigned long mask; 57 unsigned long mask;
57 mask = (cached_irq_mask[irq >= 64] &= ~(1UL << (irq & 63))); 58 mask = (cached_irq_mask[irq >= 64] &= ~(1UL << (irq & 63)));
58 eiger_update_irq_hw(irq, mask); 59 eiger_update_irq_hw(irq, mask);
59} 60}
60 61
61static void 62static void
62eiger_disable_irq(unsigned int irq) 63eiger_disable_irq(struct irq_data *d)
63{ 64{
65 unsigned int irq = d->irq;
64 unsigned long mask; 66 unsigned long mask;
65 mask = (cached_irq_mask[irq >= 64] |= 1UL << (irq & 63)); 67 mask = (cached_irq_mask[irq >= 64] |= 1UL << (irq & 63));
66 eiger_update_irq_hw(irq, mask); 68 eiger_update_irq_hw(irq, mask);
67} 69}
68 70
69static unsigned int
70eiger_startup_irq(unsigned int irq)
71{
72 eiger_enable_irq(irq);
73 return 0; /* never anything pending */
74}
75
76static void
77eiger_end_irq(unsigned int irq)
78{
79 if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
80 eiger_enable_irq(irq);
81}
82
83static struct irq_chip eiger_irq_type = { 71static struct irq_chip eiger_irq_type = {
84 .name = "EIGER", 72 .name = "EIGER",
85 .startup = eiger_startup_irq, 73 .irq_unmask = eiger_enable_irq,
86 .shutdown = eiger_disable_irq, 74 .irq_mask = eiger_disable_irq,
87 .enable = eiger_enable_irq, 75 .irq_mask_ack = eiger_disable_irq,
88 .disable = eiger_disable_irq,
89 .ack = eiger_disable_irq,
90 .end = eiger_end_irq,
91}; 76};
92 77
93static void 78static void
@@ -153,8 +138,8 @@ eiger_init_irq(void)
153 init_i8259a_irqs(); 138 init_i8259a_irqs();
154 139
155 for (i = 16; i < 128; ++i) { 140 for (i = 16; i < 128; ++i) {
156 irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL; 141 irq_set_chip_and_handler(i, &eiger_irq_type, handle_level_irq);
157 irq_desc[i].chip = &eiger_irq_type; 142 irq_set_status_flags(i, IRQ_LEVEL);
158 } 143 }
159} 144}
160 145