aboutsummaryrefslogtreecommitdiffstats
path: root/arch/alpha/kernel/sys_takara.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/alpha/kernel/sys_takara.c')
-rw-r--r--arch/alpha/kernel/sys_takara.c34
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
47static inline void 47static inline void
48takara_enable_irq(unsigned int irq) 48takara_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
55static void 56static void
56takara_disable_irq(unsigned int irq) 57takara_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
63static unsigned int
64takara_startup_irq(unsigned int irq)
65{
66 takara_enable_irq(irq);
67 return 0; /* never anything pending */
68}
69
70static void
71takara_end_irq(unsigned int irq)
72{
73 if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
74 takara_enable_irq(irq);
75}
76
77static struct irq_chip takara_irq_type = { 65static 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
87static void 72static 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();