diff options
Diffstat (limited to 'arch/alpha/kernel/sys_mikasa.c')
-rw-r--r-- | arch/alpha/kernel/sys_mikasa.c | 36 |
1 files changed, 10 insertions, 26 deletions
diff --git a/arch/alpha/kernel/sys_mikasa.c b/arch/alpha/kernel/sys_mikasa.c index ee8865169811..0e6e4697a025 100644 --- a/arch/alpha/kernel/sys_mikasa.c +++ b/arch/alpha/kernel/sys_mikasa.c | |||
@@ -43,39 +43,22 @@ mikasa_update_irq_hw(int mask) | |||
43 | } | 43 | } |
44 | 44 | ||
45 | static inline void | 45 | static inline void |
46 | mikasa_enable_irq(unsigned int irq) | 46 | mikasa_enable_irq(struct irq_data *d) |
47 | { | 47 | { |
48 | mikasa_update_irq_hw(cached_irq_mask |= 1 << (irq - 16)); | 48 | mikasa_update_irq_hw(cached_irq_mask |= 1 << (d->irq - 16)); |
49 | } | 49 | } |
50 | 50 | ||
51 | static void | 51 | static void |
52 | mikasa_disable_irq(unsigned int irq) | 52 | mikasa_disable_irq(struct irq_data *d) |
53 | { | 53 | { |
54 | mikasa_update_irq_hw(cached_irq_mask &= ~(1 << (irq - 16))); | 54 | mikasa_update_irq_hw(cached_irq_mask &= ~(1 << (d->irq - 16))); |
55 | } | ||
56 | |||
57 | static unsigned int | ||
58 | mikasa_startup_irq(unsigned int irq) | ||
59 | { | ||
60 | mikasa_enable_irq(irq); | ||
61 | return 0; | ||
62 | } | ||
63 | |||
64 | static void | ||
65 | mikasa_end_irq(unsigned int irq) | ||
66 | { | ||
67 | if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) | ||
68 | mikasa_enable_irq(irq); | ||
69 | } | 55 | } |
70 | 56 | ||
71 | static struct irq_chip mikasa_irq_type = { | 57 | static struct irq_chip mikasa_irq_type = { |
72 | .name = "MIKASA", | 58 | .name = "MIKASA", |
73 | .startup = mikasa_startup_irq, | 59 | .irq_unmask = mikasa_enable_irq, |
74 | .shutdown = mikasa_disable_irq, | 60 | .irq_mask = mikasa_disable_irq, |
75 | .enable = mikasa_enable_irq, | 61 | .irq_mask_ack = mikasa_disable_irq, |
76 | .disable = mikasa_disable_irq, | ||
77 | .ack = mikasa_disable_irq, | ||
78 | .end = mikasa_end_irq, | ||
79 | }; | 62 | }; |
80 | 63 | ||
81 | static void | 64 | static void |
@@ -115,8 +98,9 @@ mikasa_init_irq(void) | |||
115 | mikasa_update_irq_hw(0); | 98 | mikasa_update_irq_hw(0); |
116 | 99 | ||
117 | for (i = 16; i < 32; ++i) { | 100 | for (i = 16; i < 32; ++i) { |
118 | irq_desc[i].status = IRQ_DISABLED | IRQ_LEVEL; | 101 | irq_set_chip_and_handler(i, &mikasa_irq_type, |
119 | irq_desc[i].chip = &mikasa_irq_type; | 102 | handle_level_irq); |
103 | irq_set_status_flags(i, IRQ_LEVEL); | ||
120 | } | 104 | } |
121 | 105 | ||
122 | init_i8259a_irqs(); | 106 | init_i8259a_irqs(); |