|
@@ -18,10 +18,6 @@
|
|
|
int baboon_present;
|
|
|
static volatile struct baboon *baboon;
|
|
|
|
|
|
-#if 0
|
|
|
-extern int macide_ack_intr(struct ata_channel *);
|
|
|
-#endif
|
|
|
-
|
|
|
/*
|
|
|
* Baboon initialization.
|
|
|
*/
|
|
@@ -41,33 +37,26 @@ void __init baboon_init(void)
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- * Baboon interrupt handler. This works a lot like a VIA.
|
|
|
+ * Baboon interrupt handler.
|
|
|
+ * XXX how do you clear a pending IRQ? is it even necessary?
|
|
|
*/
|
|
|
|
|
|
static void baboon_irq(struct irq_desc *desc)
|
|
|
{
|
|
|
- int irq_bit, irq_num;
|
|
|
- unsigned char events;
|
|
|
+ short events, irq_bit;
|
|
|
+ int irq_num;
|
|
|
|
|
|
events = baboon->mb_ifr & 0x07;
|
|
|
- if (!events)
|
|
|
- return;
|
|
|
-
|
|
|
irq_num = IRQ_BABOON_0;
|
|
|
irq_bit = 1;
|
|
|
do {
|
|
|
- if (events & irq_bit) {
|
|
|
- baboon->mb_ifr &= ~irq_bit;
|
|
|
+ if (events & irq_bit) {
|
|
|
+ events &= ~irq_bit;
|
|
|
generic_handle_irq(irq_num);
|
|
|
}
|
|
|
+ ++irq_num;
|
|
|
irq_bit <<= 1;
|
|
|
- irq_num++;
|
|
|
- } while(events >= irq_bit);
|
|
|
-#if 0
|
|
|
- if (baboon->mb_ifr & 0x02) macide_ack_intr(NULL);
|
|
|
- /* for now we need to smash all interrupts */
|
|
|
- baboon->mb_ifr &= ~events;
|
|
|
-#endif
|
|
|
+ } while (events);
|
|
|
}
|
|
|
|
|
|
/*
|