Use a bool to check if an irq was acknowledged by the MFP, else we don't call the handler.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26725 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
150b5ae01f
commit
2fc21d4fad
@ -44,7 +44,7 @@ public:
|
||||
|
||||
virtual void EnableIOInterrupt(int irq) = 0;
|
||||
virtual void DisableIOInterrupt(int irq) = 0;
|
||||
virtual void AcknowledgeIOInterrupt(int irq) = 0;
|
||||
virtual bool AcknowledgeIOInterrupt(int irq) = 0;
|
||||
|
||||
virtual void SetHardwareRTC(uint32 seconds) = 0;
|
||||
virtual uint32 GetHardwareRTC() = 0;
|
||||
|
@ -272,9 +272,10 @@ dprintf("handling I/O interrupts done\n");
|
||||
default:
|
||||
// vectors >= 64 are user defined vectors, used for IRQ
|
||||
if (vector >= 64) {
|
||||
M68KPlatform::Default()->AcknowledgeIOInterrupt(vector);
|
||||
ret = int_io_interrupt_handler(vector, true);
|
||||
break;
|
||||
if (M68KPlatform::Default()->AcknowledgeIOInterrupt(vector)) {
|
||||
ret = int_io_interrupt_handler(vector, true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
dprintf("unhandled exception type 0x%x\n", vector);
|
||||
print_iframe(iframe);
|
||||
|
@ -47,7 +47,7 @@ public:
|
||||
|
||||
void EnableIOInterrupt(int irq);
|
||||
void DisableIOInterrupt(int irq);
|
||||
void AcknowledgeIOInterrupt(int irq);
|
||||
bool AcknowledgeIOInterrupt(int irq);
|
||||
|
||||
private:
|
||||
uint32 fBase;
|
||||
@ -70,7 +70,7 @@ public:
|
||||
|
||||
virtual void EnableIOInterrupt(int irq);
|
||||
virtual void DisableIOInterrupt(int irq);
|
||||
virtual void AcknowledgeIOInterrupt(int irq);
|
||||
virtual bool AcknowledgeIOInterrupt(int irq);
|
||||
|
||||
virtual void SetHardwareRTC(uint32 seconds);
|
||||
virtual uint32 GetHardwareRTC();
|
||||
@ -148,7 +148,7 @@ M68KAtari::MFP::DisableIOInterrupt(int irq)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
bool
|
||||
M68KAtari::MFP::AcknowledgeIOInterrupt(int irq)
|
||||
{
|
||||
uint8 bit = 1 << (irq % 8);
|
||||
@ -158,7 +158,9 @@ M68KAtari::MFP::AcknowledgeIOInterrupt(int irq)
|
||||
if (val & bit) {
|
||||
val &= ~bit;
|
||||
outb(reg, val);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@ -303,13 +305,14 @@ M68KAtari::DisableIOInterrupt(int irq)
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
bool
|
||||
M68KAtari::AcknowledgeIOInterrupt(int irq)
|
||||
{
|
||||
MFP *mfp = MFPForIrq(irq);
|
||||
|
||||
if (mfp)
|
||||
mfp->AcknowledgeIOInterrupt(irq - mfp->Vector());
|
||||
return mfp->AcknowledgeIOInterrupt(irq - mfp->Vector());
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
|
Loading…
x
Reference in New Issue
Block a user