aboutsummaryrefslogtreecommitdiffstats
path: root/arch/m68k/mac/oss.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/m68k/mac/oss.c')
-rw-r--r--arch/m68k/mac/oss.c78
1 files changed, 0 insertions, 78 deletions
diff --git a/arch/m68k/mac/oss.c b/arch/m68k/mac/oss.c
index cc784c2ff6e8..a4c82dab9ff1 100644
--- a/arch/m68k/mac/oss.c
+++ b/arch/m68k/mac/oss.c
@@ -19,9 +19,7 @@
19#include <linux/mm.h> 19#include <linux/mm.h>
20#include <linux/delay.h> 20#include <linux/delay.h>
21#include <linux/init.h> 21#include <linux/init.h>
22#ifdef CONFIG_GENERIC_HARDIRQS
23#include <linux/irq.h> 22#include <linux/irq.h>
24#endif
25 23
26#include <asm/bootinfo.h> 24#include <asm/bootinfo.h>
27#include <asm/macintosh.h> 25#include <asm/macintosh.h>
@@ -32,11 +30,7 @@
32int oss_present; 30int oss_present;
33volatile struct mac_oss *oss; 31volatile struct mac_oss *oss;
34 32
35#ifdef CONFIG_GENERIC_HARDIRQS
36extern void via1_irq(unsigned int irq, struct irq_desc *desc); 33extern void via1_irq(unsigned int irq, struct irq_desc *desc);
37#else
38extern irqreturn_t via1_irq(int, void *);
39#endif
40 34
41/* 35/*
42 * Initialize the OSS 36 * Initialize the OSS
@@ -76,7 +70,6 @@ void __init oss_nubus_init(void)
76 * and SCSI; everything else is routed to its own autovector IRQ. 70 * and SCSI; everything else is routed to its own autovector IRQ.
77 */ 71 */
78 72
79#ifdef CONFIG_GENERIC_HARDIRQS
80static void oss_irq(unsigned int irq, struct irq_desc *desc) 73static void oss_irq(unsigned int irq, struct irq_desc *desc)
81{ 74{
82 int events; 75 int events;
@@ -103,35 +96,6 @@ static void oss_irq(unsigned int irq, struct irq_desc *desc)
103 /* FIXME: error check here? */ 96 /* FIXME: error check here? */
104 } 97 }
105} 98}
106#else
107static irqreturn_t oss_irq(int irq, void *dev_id)
108{
109 int events;
110
111 events = oss->irq_pending & (OSS_IP_SOUND|OSS_IP_SCSI);
112 if (!events)
113 return IRQ_NONE;
114
115#ifdef DEBUG_IRQS
116 if ((console_loglevel == 10) && !(events & OSS_IP_SCSI)) {
117 printk("oss_irq: irq %d events = 0x%04X\n", irq,
118 (int) oss->irq_pending);
119 }
120#endif
121 /* FIXME: how do you clear a pending IRQ? */
122
123 if (events & OSS_IP_SOUND) {
124 oss->irq_pending &= ~OSS_IP_SOUND;
125 /* FIXME: call sound handler */
126 } else if (events & OSS_IP_SCSI) {
127 oss->irq_pending &= ~OSS_IP_SCSI;
128 generic_handle_irq(IRQ_MAC_SCSI);
129 } else {
130 /* FIXME: error check here? */
131 }
132 return IRQ_HANDLED;
133}
134#endif
135 99
136/* 100/*
137 * Nubus IRQ handler, OSS style 101 * Nubus IRQ handler, OSS style
@@ -139,7 +103,6 @@ static irqreturn_t oss_irq(int irq, void *dev_id)
139 * Unlike the VIA/RBV this is on its own autovector interrupt level. 103 * Unlike the VIA/RBV this is on its own autovector interrupt level.
140 */ 104 */
141 105
142#ifdef CONFIG_GENERIC_HARDIRQS
143static void oss_nubus_irq(unsigned int irq, struct irq_desc *desc) 106static void oss_nubus_irq(unsigned int irq, struct irq_desc *desc)
144{ 107{
145 int events, irq_bit, i; 108 int events, irq_bit, i;
@@ -166,35 +129,6 @@ static void oss_nubus_irq(unsigned int irq, struct irq_desc *desc)
166 } 129 }
167 } while(events & (irq_bit - 1)); 130 } while(events & (irq_bit - 1));
168} 131}
169#else
170static irqreturn_t oss_nubus_irq(int irq, void *dev_id)
171{
172 int events, irq_bit, i;
173
174 events = oss->irq_pending & OSS_IP_NUBUS;
175 if (!events)
176 return IRQ_NONE;
177
178#ifdef DEBUG_NUBUS_INT
179 if (console_loglevel > 7) {
180 printk("oss_nubus_irq: events = 0x%04X\n", events);
181 }
182#endif
183 /* There are only six slots on the OSS, not seven */
184
185 i = 6;
186 irq_bit = 0x40;
187 do {
188 --i;
189 irq_bit >>= 1;
190 if (events & irq_bit) {
191 oss->irq_pending &= ~irq_bit;
192 generic_handle_irq(NUBUS_SOURCE_BASE + i);
193 }
194 } while(events & (irq_bit - 1));
195 return IRQ_HANDLED;
196}
197#endif
198 132
199/* 133/*
200 * Register the OSS and NuBus interrupt dispatchers. 134 * Register the OSS and NuBus interrupt dispatchers.
@@ -202,22 +136,10 @@ static irqreturn_t oss_nubus_irq(int irq, void *dev_id)
202 136
203void __init oss_register_interrupts(void) 137void __init oss_register_interrupts(void)
204{ 138{
205#ifdef CONFIG_GENERIC_HARDIRQS
206 irq_set_chained_handler(OSS_IRQLEV_SCSI, oss_irq); 139 irq_set_chained_handler(OSS_IRQLEV_SCSI, oss_irq);
207 irq_set_chained_handler(OSS_IRQLEV_NUBUS, oss_nubus_irq); 140 irq_set_chained_handler(OSS_IRQLEV_NUBUS, oss_nubus_irq);
208 irq_set_chained_handler(OSS_IRQLEV_SOUND, oss_irq); 141 irq_set_chained_handler(OSS_IRQLEV_SOUND, oss_irq);
209 irq_set_chained_handler(OSS_IRQLEV_VIA1, via1_irq); 142 irq_set_chained_handler(OSS_IRQLEV_VIA1, via1_irq);
210#else /* !CONFIG_GENERIC_HARDIRQS */
211 if (request_irq(OSS_IRQLEV_SCSI, oss_irq, 0, "scsi", (void *)oss))
212 pr_err("Couldn't register %s interrupt\n", "scsi");
213 if (request_irq(OSS_IRQLEV_NUBUS, oss_nubus_irq, 0, "nubus",
214 (void *)oss))
215 pr_err("Couldn't register %s interrupt\n", "nubus");
216 if (request_irq(OSS_IRQLEV_SOUND, oss_irq, 0, "sound", (void *)oss))
217 pr_err("Couldn't register %s interrupt\n", "sound");
218 if (request_irq(OSS_IRQLEV_VIA1, via1_irq, 0, "via1", (void *)via1))
219 pr_err("Couldn't register %s interrupt\n", "via1");
220#endif /* !CONFIG_GENERIC_HARDIRQS */
221} 143}
222 144
223/* 145/*