mirror of
https://github.com/EnderIce2/Fennix.git
synced 2025-06-07 20:27:59 +00:00
fix(kernel): 🐛 interrupt handler was broken for PCI
This commit is contained in:
parent
814175ddaf
commit
13ce994edf
@ -423,11 +423,10 @@ namespace Interrupts
|
|||||||
{
|
{
|
||||||
for (auto ev : RegisteredEvents)
|
for (auto ev : RegisteredEvents)
|
||||||
{
|
{
|
||||||
if (ev.IRQ == InterruptNumber)
|
if (ev.IRQ != InterruptNumber)
|
||||||
{
|
continue;
|
||||||
warn("IRQ%d is already registered.",
|
|
||||||
InterruptNumber);
|
warn("IRQ%d is already registered.", InterruptNumber);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
this->InterruptNumber = InterruptNumber;
|
this->InterruptNumber = InterruptNumber;
|
||||||
@ -441,15 +440,12 @@ namespace Interrupts
|
|||||||
0, /* Priority */
|
0, /* Priority */
|
||||||
Critical}; /* Critical */
|
Critical}; /* Critical */
|
||||||
RegisteredEvents.push_back(newEvent);
|
RegisteredEvents.push_back(newEvent);
|
||||||
debug("Registered interrupt handler for IRQ%d.",
|
debug("Registered interrupt handler for IRQ%d.", InterruptNumber);
|
||||||
InterruptNumber);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Handler::Handler(PCI::PCIDevice Device, bool Critical)
|
Handler::Handler(PCI::PCIDevice Device, bool Critical)
|
||||||
|
: Handler(((PCI::PCIHeader0 *)Device.Header)->InterruptLine, Critical)
|
||||||
{
|
{
|
||||||
PCI::PCIHeader0 *hdr0 =
|
|
||||||
(PCI::PCIHeader0 *)Device.Header;
|
|
||||||
Handler(hdr0->InterruptLine, Critical);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Handler::Handler()
|
Handler::Handler()
|
||||||
@ -459,17 +455,15 @@ namespace Interrupts
|
|||||||
|
|
||||||
Handler::~Handler()
|
Handler::~Handler()
|
||||||
{
|
{
|
||||||
debug("Unregistering interrupt handler for IRQ%d.",
|
debug("Unregistering interrupt handler for IRQ%d.", this->InterruptNumber);
|
||||||
this->InterruptNumber);
|
|
||||||
|
|
||||||
forItr(itr, RegisteredEvents)
|
forItr(itr, RegisteredEvents)
|
||||||
{
|
{
|
||||||
if (itr->IRQ == this->InterruptNumber)
|
if (itr->IRQ != this->InterruptNumber)
|
||||||
{
|
continue;
|
||||||
|
|
||||||
RegisteredEvents.erase(itr);
|
RegisteredEvents.erase(itr);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
warn("Event %d not found.", this->InterruptNumber);
|
warn("Event %d not found.", this->InterruptNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user