From 64b5de98c83f82f264e319f38174f775b1ad5606 Mon Sep 17 00:00:00 2001 From: Aiken Harris Date: Fri, 27 Mar 2026 12:00:09 +0100 Subject: [PATCH] Move IRQ handling from kernel executive to hardware layer --- xtoskrnl/CMakeLists.txt | 2 +- xtoskrnl/hl/x86/pic.cc | 4 +-- xtoskrnl/includes/hl.hh | 1 + xtoskrnl/includes/{ke => hl}/irq.hh | 14 +++++----- xtoskrnl/includes/ke.hh | 1 - xtoskrnl/ke/amd64/irq.cc | 43 ----------------------------- xtoskrnl/ke/i686/irq.cc | 43 ----------------------------- 7 files changed, 11 insertions(+), 97 deletions(-) rename xtoskrnl/includes/{ke => hl}/irq.hh (62%) delete mode 100644 xtoskrnl/ke/amd64/irq.cc delete mode 100644 xtoskrnl/ke/i686/irq.cc diff --git a/xtoskrnl/CMakeLists.txt b/xtoskrnl/CMakeLists.txt index 1080ff64..fb2da17a 100644 --- a/xtoskrnl/CMakeLists.txt +++ b/xtoskrnl/CMakeLists.txt @@ -20,6 +20,7 @@ list(APPEND XTOSKRNL_SOURCE ${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/cpu.cc ${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/pic.cc ${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/ioport.cc + ${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/irq.cc ${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/runlevel.cc ${XTOSKRNL_SOURCE_DIR}/hl/acpi.cc ${XTOSKRNL_SOURCE_DIR}/hl/cport.cc @@ -31,7 +32,6 @@ list(APPEND XTOSKRNL_SOURCE ${XTOSKRNL_SOURCE_DIR}/kd/data.cc ${XTOSKRNL_SOURCE_DIR}/kd/dbgio.cc ${XTOSKRNL_SOURCE_DIR}/kd/exports.cc - ${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/irq.cc ${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/krnlinit.cc ${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/kthread.cc ${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/proc.cc diff --git a/xtoskrnl/hl/x86/pic.cc b/xtoskrnl/hl/x86/pic.cc index 8fefc6c2..bfe02197 100644 --- a/xtoskrnl/hl/x86/pic.cc +++ b/xtoskrnl/hl/x86/pic.cc @@ -249,8 +249,8 @@ HL::Pic::InitializeApic(VOID) WriteApicRegister(APIC_LINT1, LvtRegister.Long); /* Register interrupt handlers */ - KE::Irq::SetInterruptHandler(APIC_VECTOR_SPURIOUS, (PVOID)HandleApicSpuriousService); - KE::Irq::SetInterruptHandler(PIC1_VECTOR_SPURIOUS, (PVOID)HandlePicSpuriousService); + HL::Irq::SetInterruptHandler(APIC_VECTOR_SPURIOUS, (PVOID)HandleApicSpuriousService); + HL::Irq::SetInterruptHandler(PIC1_VECTOR_SPURIOUS, (PVOID)HandlePicSpuriousService); /* Clear any pre-existing errors */ WriteApicRegister(APIC_ESR, 0); diff --git a/xtoskrnl/includes/hl.hh b/xtoskrnl/includes/hl.hh index fd76ffc8..a3eda532 100644 --- a/xtoskrnl/includes/hl.hh +++ b/xtoskrnl/includes/hl.hh @@ -18,6 +18,7 @@ #include #include #include +#include #include #include diff --git a/xtoskrnl/includes/ke/irq.hh b/xtoskrnl/includes/hl/irq.hh similarity index 62% rename from xtoskrnl/includes/ke/irq.hh rename to xtoskrnl/includes/hl/irq.hh index 8817fe29..ac37a22d 100644 --- a/xtoskrnl/includes/ke/irq.hh +++ b/xtoskrnl/includes/hl/irq.hh @@ -1,19 +1,19 @@ /** * PROJECT: ExectOS * COPYRIGHT: See COPYING.md in the top level directory - * FILE: xtoskrnl/includes/ke/irq.hh - * DESCRIPTION: Kernel interrupts support + * FILE: xtoskrnl/includes/hl/irq.hh + * DESCRIPTION: Interrupts support * DEVELOPERS: Aiken Harris */ -#ifndef __XTOSKRNL_KE_IRQ_HH -#define __XTOSKRNL_KE_IRQ_HH +#ifndef __XTOSKRNL_HL_IRQ_HH +#define __XTOSKRNL_HL_IRQ_HH #include -/* Kernel Library */ -namespace KE +/* Hardware Layer */ +namespace HL { class Irq { @@ -23,4 +23,4 @@ namespace KE }; } -#endif /* __XTOSKRNL_KE_IRQ_HH */ +#endif /* __XTOSKRNL_HL_IRQ_HH */ diff --git a/xtoskrnl/includes/ke.hh b/xtoskrnl/includes/ke.hh index 607e2e7a..fa995d63 100644 --- a/xtoskrnl/includes/ke.hh +++ b/xtoskrnl/includes/ke.hh @@ -17,7 +17,6 @@ #include #include #include -#include #include #include #include diff --git a/xtoskrnl/ke/amd64/irq.cc b/xtoskrnl/ke/amd64/irq.cc deleted file mode 100644 index 209cd7c5..00000000 --- a/xtoskrnl/ke/amd64/irq.cc +++ /dev/null @@ -1,43 +0,0 @@ -/** - * PROJECT: ExectOS - * COPYRIGHT: See COPYING.md in the top level directory - * FILE: xtoskrnl/ke/amd64/irq.cc - * DESCRIPTION: Kernel interrupts support for amd64 architecture - * DEVELOPERS: Rafal Kupiec - */ - -#include - - -/** - * Sets new interrupt handler for the existing IDT entry. - * - * @param HalVector - * Supplies the HAL vector number. - * - * @param Handler - * Supplies the new interrupt handler. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTAPI -VOID -KE::Irq::SetInterruptHandler(IN ULONG Vector, - IN PVOID Handler) -{ - PKPROCESSOR_BLOCK ProcessorBlock; - - /* Get current processor block */ - ProcessorBlock = KE::Processor::GetCurrentProcessorBlock(); - - /* Update interrupt handler */ - AR::ProcSup::SetIdtGate(ProcessorBlock->IdtBase, - Vector, - Handler, - KGDT_R0_CODE, - 0, - KIDT_ACCESS_RING0, - AMD64_INTERRUPT_GATE); -} diff --git a/xtoskrnl/ke/i686/irq.cc b/xtoskrnl/ke/i686/irq.cc deleted file mode 100644 index 9e33c7c6..00000000 --- a/xtoskrnl/ke/i686/irq.cc +++ /dev/null @@ -1,43 +0,0 @@ -/** - * PROJECT: ExectOS - * COPYRIGHT: See COPYING.md in the top level directory - * FILE: xtoskrnl/ke/i686/irq.cc - * DESCRIPTION: Kernel interrupts support for i686 architecture - * DEVELOPERS: Rafal Kupiec - */ - -#include - - -/** - * Sets new interrupt handler for the existing IDT entry. - * - * @param HalVector - * Supplies the HAL vector number. - * - * @param Handler - * Supplies the new interrupt handler. - * - * @return This routine does not return any value. - * - * @since XT 1.0 - */ -XTAPI -VOID -KE::Irq::SetInterruptHandler(IN ULONG Vector, - IN PVOID Handler) -{ - PKPROCESSOR_BLOCK ProcessorBlock; - - /* Get current processor block */ - ProcessorBlock = KE::Processor::GetCurrentProcessorBlock(); - - /* Update interrupt handler */ - AR::ProcSup::SetIdtGate(ProcessorBlock->IdtBase, - Vector, - Handler, - KGDT_R0_CODE, - 0, - KIDT_ACCESS_RING0, - I686_INTERRUPT_GATE); -}