diff options
Diffstat (limited to 'arch/alpha/kernel/sys_takara.c')
-rw-r--r-- | arch/alpha/kernel/sys_takara.c | 34 |
1 files changed, 10 insertions, 24 deletions
diff --git a/arch/alpha/kernel/sys_takara.c b/arch/alpha/kernel/sys_takara.c index 4da596b6adbb..a31f8cd9bd6b 100644 --- a/arch/alpha/kernel/sys_takara.c +++ b/arch/alpha/kernel/sys_takara.c | |||
@@ -45,43 +45,28 @@ takara_update_irq_hw(unsigned long irq, unsigned long mask) | |||
45 | } | 45 | } |
46 | 46 | ||
47 | static inline void | 47 | static inline void |
48 | takara_enable_irq(unsigned int irq) | 48 | takara_enable_irq(struct irq_data *d) |
49 | { | 49 | { |
50 | unsigned int irq = d->irq; | ||
50 | unsigned long mask; | 51 | unsigned long mask; |
51 | mask = (cached_irq_mask[irq >= 64] &= ~(1UL << (irq & 63))); | 52 | mask = (cached_irq_mask[irq >= 64] &= ~(1UL << (irq & 63))); |
52 | takara_update_irq_hw(irq, mask); | 53 | takara_update_irq_hw(irq, mask); |
53 | } | 54 | } |
54 | 55 | ||
55 | static void | 56 | static void |
56 | takara_disable_irq(unsigned int irq) | 57 | takara_disable_irq(struct irq_data *d) |
57 | { | 58 | { |
59 | unsigned int irq = d->irq; | ||
58 | unsigned long mask; | 60 | unsigned long mask; |
59 | mask = (cached_irq_mask[irq >= 64] |= 1UL << (irq & 63)); | 61 | mask = (cached_irq_mask[irq >= 64] |= 1UL << (irq & 63)); |
60 | takara_update_irq_hw(irq, mask); | 62 | takara_update_irq_hw(irq, mask); |
61 | } | 63 | } |
62 | 64 | ||
63 | static unsigned int | ||
64 | takara_startup_irq(unsigned int irq) | ||
65 | { | ||
66 | takara_enable_irq(irq); | ||
67 | return 0; /* never anything pending */ | ||
68 | } | ||
69 | |||
70 | static void | ||
71 | takara_end_irq(unsigned int irq) | ||
72 | { | ||
73 | if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) | ||
74 | takara_enable_irq(irq); | ||
75 | } | ||
76 | |||
77 | static struct irq_chip takara_irq_type = { | 65 | static struct irq_chip takara_irq_type = { |
78 | .name = "TAKARA", | 66 | .name = "TAKARA", |
79 | .startup = takara_startup_irq, | 67 | .irq_unmask = takara_enable_irq, |
80 | .shutdown = takara_disable_irq, | 68 | .irq_mask = takara_disable_irq, |
81 | .enable = takara_enable_irq, | 69 | .irq_mask_ack = takara_disable_irq, |
82 | .disable = takara_disable_irq, | ||
83 | .ack = takara_disable_irq, | ||
84 | .end = takara_end_irq, | ||
85 | }; | 70 | }; |
86 | 71 | ||
87 | static void | 72 | static void |
@@ -153,8 +138,9 @@ takara_init_irq(void) | |||
153 | takara_update_irq_hw(i, -1); | 138 | takara_update_irq_hw(i, -1); |
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, &takara_irq_type, |
157 | irq_desc[i].chip = &takara_irq_type; | 142 | handle_level_irq); |
143 | irq_set_status_flags(i, IRQ_LEVEL); | ||
158 | } | 144 | } |
159 | 145 | ||
160 | common_init_isa_dma(); | 146 | common_init_isa_dma(); |