diff options
Diffstat (limited to 'arch/alpha/kernel/sys_eiger.c')
-rw-r--r-- | arch/alpha/kernel/sys_eiger.c | 33 |
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 | ||
53 | static inline void | 53 | static inline void |
54 | eiger_enable_irq(unsigned int irq) | 54 | eiger_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 | ||
61 | static void | 62 | static void |
62 | eiger_disable_irq(unsigned int irq) | 63 | eiger_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 | ||
69 | static unsigned int | ||
70 | eiger_startup_irq(unsigned int irq) | ||
71 | { | ||
72 | eiger_enable_irq(irq); | ||
73 | return 0; /* never anything pending */ | ||
74 | } | ||
75 | |||
76 | static void | ||
77 | eiger_end_irq(unsigned int irq) | ||
78 | { | ||
79 | if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) | ||
80 | eiger_enable_irq(irq); | ||
81 | } | ||
82 | |||
83 | static struct irq_chip eiger_irq_type = { | 71 | static 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 | ||
93 | static void | 78 | static 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 | ||