Commit feb11e8a authored by Finn Thain's avatar Finn Thain Committed by Geert Uytterhoeven

m68k/mac: fix baboon irq disable and shutdown

The baboon_disabled hack is broken because it is missing an irq shutdown method. So releasing a Baboon irq kills the other Baboon irqs. But we don't really need this hack because we don't have media bay support and TREX uses a NuBus IRQ. Remove it.
Signed-off-by: default avatarFinn Thain <fthain@telegraphics.com.au>
Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
parent da3fb3c9
...@@ -18,7 +18,6 @@ ...@@ -18,7 +18,6 @@
int baboon_present; int baboon_present;
static volatile struct baboon *baboon; static volatile struct baboon *baboon;
static unsigned char baboon_disabled;
#if 0 #if 0
extern int macide_ack_intr(struct ata_channel *); extern int macide_ack_intr(struct ata_channel *);
...@@ -84,37 +83,32 @@ static void baboon_irq(unsigned int irq, struct irq_desc *desc) ...@@ -84,37 +83,32 @@ static void baboon_irq(unsigned int irq, struct irq_desc *desc)
void __init baboon_register_interrupts(void) void __init baboon_register_interrupts(void)
{ {
baboon_disabled = 0;
irq_set_chained_handler(IRQ_NUBUS_C, baboon_irq); irq_set_chained_handler(IRQ_NUBUS_C, baboon_irq);
} }
/* /*
* The means for masking individual baboon interrupts remains a mystery, so * The means for masking individual Baboon interrupts remains a mystery.
* enable the umbrella interrupt only when no baboon interrupt is disabled. * However, since we only use the IDE IRQ, we can just enable/disable all
* Baboon interrupts. If/when we handle more than one Baboon IRQ, we must
* either figure out how to mask them individually or else implement the
* same workaround that's used for NuBus slots (see nubus_disabled and
* via_nubus_irq_shutdown).
*/ */
void baboon_irq_enable(int irq) void baboon_irq_enable(int irq)
{ {
int irq_idx = IRQ_IDX(irq);
#ifdef DEBUG_IRQUSE #ifdef DEBUG_IRQUSE
printk("baboon_irq_enable(%d)\n", irq); printk("baboon_irq_enable(%d)\n", irq);
#endif #endif
baboon_disabled &= ~(1 << irq_idx);
if (!baboon_disabled)
mac_irq_enable(irq_get_irq_data(IRQ_NUBUS_C)); mac_irq_enable(irq_get_irq_data(IRQ_NUBUS_C));
} }
void baboon_irq_disable(int irq) void baboon_irq_disable(int irq)
{ {
int irq_idx = IRQ_IDX(irq);
#ifdef DEBUG_IRQUSE #ifdef DEBUG_IRQUSE
printk("baboon_irq_disable(%d)\n", irq); printk("baboon_irq_disable(%d)\n", irq);
#endif #endif
baboon_disabled |= 1 << irq_idx;
if (baboon_disabled)
mac_irq_disable(irq_get_irq_data(IRQ_NUBUS_C)); mac_irq_disable(irq_get_irq_data(IRQ_NUBUS_C));
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment