From 2fc21d4fad7056d3c2f023de5656a44aa2a74c0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Revol?= Date: Sat, 2 Aug 2008 00:36:33 +0000 Subject: [PATCH] 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 --- headers/private/kernel/arch/m68k/arch_platform.h | 2 +- src/system/kernel/arch/m68k/arch_int.cpp | 7 ++++--- src/system/kernel/platform/atari_m68k/platform.cpp | 13 ++++++++----- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/headers/private/kernel/arch/m68k/arch_platform.h b/headers/private/kernel/arch/m68k/arch_platform.h index cfe2884c34..0b97bed740 100644 --- a/headers/private/kernel/arch/m68k/arch_platform.h +++ b/headers/private/kernel/arch/m68k/arch_platform.h @@ -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; diff --git a/src/system/kernel/arch/m68k/arch_int.cpp b/src/system/kernel/arch/m68k/arch_int.cpp index a6294430c5..dfa2a87327 100644 --- a/src/system/kernel/arch/m68k/arch_int.cpp +++ b/src/system/kernel/arch/m68k/arch_int.cpp @@ -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); diff --git a/src/system/kernel/platform/atari_m68k/platform.cpp b/src/system/kernel/platform/atari_m68k/platform.cpp index 95f8507ea2..50920b0899 100644 --- a/src/system/kernel/platform/atari_m68k/platform.cpp +++ b/src/system/kernel/platform/atari_m68k/platform.cpp @@ -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