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: Finn Thain <fthain@telegraphics.com.au> Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
This commit is contained in:
parent
da3fb3c9aa
commit
feb11e8a56
|
@ -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)
|
||||||
|
|
||||||
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);
|
mac_irq_enable(irq_get_irq_data(IRQ_NUBUS_C));
|
||||||
if (!baboon_disabled)
|
|
||||||
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;
|
mac_irq_disable(irq_get_irq_data(IRQ_NUBUS_C));
|
||||||
if (baboon_disabled)
|
|
||||||
mac_irq_disable(irq_get_irq_data(IRQ_NUBUS_C));
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue