Kernel: Acquire ISA interrupt overrides from Interrupt Management

Also, InterruptDisabler were added to prevent critical function from
being interrupted. In addition, the interrupt numbers are abstracted
from IDT offsets, thus, allowing to create a better routing scheme
when using IOAPICs for interrupt redirection.
This commit is contained in:
Liav A 2020-03-06 03:19:40 +02:00 committed by Andreas Kling
commit 30fc78bfaf
Notes: sideshowbarker 2024-07-19 08:53:01 +09:00
5 changed files with 54 additions and 21 deletions

View file

@ -39,20 +39,20 @@ GenericInterruptHandler& GenericInterruptHandler::from(u8 interrupt_number)
GenericInterruptHandler::GenericInterruptHandler(u8 interrupt_number)
: m_interrupt_number(interrupt_number)
{
register_generic_interrupt_handler(interrupt_number, *this);
register_generic_interrupt_handler(InterruptManagement::acquire_mapped_interrupt_number(m_interrupt_number), *this);
}
GenericInterruptHandler::~GenericInterruptHandler()
{
unregister_generic_interrupt_handler(m_interrupt_number, *this);
unregister_generic_interrupt_handler(InterruptManagement::acquire_mapped_interrupt_number(m_interrupt_number), *this);
}
void GenericInterruptHandler::change_interrupt_number(u8 number)
{
ASSERT_INTERRUPTS_ENABLED();
unregister_generic_interrupt_handler(interrupt_number(), *this);
unregister_generic_interrupt_handler(InterruptManagement::acquire_mapped_interrupt_number(interrupt_number()), *this);
m_interrupt_number = number;
register_generic_interrupt_handler(interrupt_number(), *this);
register_generic_interrupt_handler(InterruptManagement::acquire_mapped_interrupt_number(interrupt_number()), *this);
}
void GenericInterruptHandler::increment_invoking_counter()
{