1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 20:07:36 +00:00

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
parent d9d792d37f
commit 30fc78bfaf
5 changed files with 54 additions and 21 deletions

View file

@ -47,11 +47,16 @@ public:
static InterruptManagement& the();
static void initialize();
static bool initialized();
static u8 acquire_mapped_interrupt_number(u8);
virtual void switch_to_pic_mode();
virtual void switch_to_ioapic_mode();
RefPtr<IRQController> get_responsible_irq_controller(u8 interrupt_vector);
Vector<RefPtr<ISAInterruptOverrideMetadata>> isa_overrides();
u8 get_mapped_vector_number(u8 original_vector);
void enumerate_interrupt_handlers(Function<void(GenericInterruptHandler&)>);
IRQController& get_interrupt_controller(int index);
@ -60,6 +65,7 @@ private:
PhysicalAddress search_for_madt();
void locate_apic_data();
void locate_pci_interrupt_overrides();
bool m_smp_enabled { false };
FixedArray<RefPtr<IRQController>> m_interrupt_controllers { 1 };
Vector<RefPtr<ISAInterruptOverrideMetadata>> m_isa_interrupt_overrides;
Vector<RefPtr<PCIInterruptOverrideMetadata>> m_pci_interrupt_overrides;