mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-05-29 15:57:59 +00:00
Support multiple registered interrupt handlers
This commit is contained in:
parent
2bdfe0bedc
commit
784d7726df
@ -131,19 +131,17 @@ namespace Interrupts
|
|||||||
if (unlikely(Frame->InterruptNumber == CPU::x86::IRQ29))
|
if (unlikely(Frame->InterruptNumber == CPU::x86::IRQ29))
|
||||||
CPU::Stop();
|
CPU::Stop();
|
||||||
|
|
||||||
Handler *handler = nullptr;
|
bool InterruptHandled = false;
|
||||||
foreach (auto var in RegisteredEvents)
|
foreach (auto ev in RegisteredEvents)
|
||||||
{
|
{
|
||||||
if (var.ID == static_cast<int>(Frame->InterruptNumber))
|
if (ev.ID == static_cast<int>(Frame->InterruptNumber))
|
||||||
{
|
{
|
||||||
handler = (Handler *)var.Data;
|
((Handler *)ev.Data)->OnInterruptReceived(Frame);
|
||||||
break;
|
InterruptHandled = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (handler != nullptr)
|
if (!InterruptHandled)
|
||||||
handler->OnInterruptReceived(Frame);
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
error("IRQ%ld is unhandled on CPU %d.", Frame->InterruptNumber - 32, Core);
|
error("IRQ%ld is unhandled on CPU %d.", Frame->InterruptNumber - 32, Core);
|
||||||
if (Frame->InterruptNumber == CPU::x86::IRQ1)
|
if (Frame->InterruptNumber == CPU::x86::IRQ1)
|
||||||
@ -172,9 +170,9 @@ namespace Interrupts
|
|||||||
|
|
||||||
Handler::Handler(int InterruptNumber)
|
Handler::Handler(int InterruptNumber)
|
||||||
{
|
{
|
||||||
foreach (auto var in RegisteredEvents)
|
foreach (auto ev in RegisteredEvents)
|
||||||
{
|
{
|
||||||
if (var.ID == InterruptNumber)
|
if (ev.ID == InterruptNumber)
|
||||||
{
|
{
|
||||||
warn("IRQ%d is already registered.", InterruptNumber - 32);
|
warn("IRQ%d is already registered.", InterruptNumber - 32);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user