diff options
Diffstat (limited to 'arch/m68k/mac/oss.c')
-rw-r--r-- | arch/m68k/mac/oss.c | 78 |
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 @@ | |||
32 | int oss_present; | 30 | int oss_present; |
33 | volatile struct mac_oss *oss; | 31 | volatile struct mac_oss *oss; |
34 | 32 | ||
35 | #ifdef CONFIG_GENERIC_HARDIRQS | ||
36 | extern void via1_irq(unsigned int irq, struct irq_desc *desc); | 33 | extern void via1_irq(unsigned int irq, struct irq_desc *desc); |
37 | #else | ||
38 | extern 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 | ||
80 | static void oss_irq(unsigned int irq, struct irq_desc *desc) | 73 | static 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 | ||
107 | static 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 | ||
143 | static void oss_nubus_irq(unsigned int irq, struct irq_desc *desc) | 106 | static 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 | ||
170 | static 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 | ||
203 | void __init oss_register_interrupts(void) | 137 | void __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 | /* |