diff --git a/xtoskrnl/hl/amd64/irq.cc b/xtoskrnl/hl/amd64/irq.cc new file mode 100644 index 00000000..c071987d --- /dev/null +++ b/xtoskrnl/hl/amd64/irq.cc @@ -0,0 +1,44 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtoskrnl/hl/amd64/irq.cc + * DESCRIPTION: Interrupts support for amd64 architecture + * DEVELOPERS: Rafal Kupiec + * Aiken Harris + */ + +#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 +HL::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/hl/i686/irq.cc b/xtoskrnl/hl/i686/irq.cc new file mode 100644 index 00000000..cd658ec2 --- /dev/null +++ b/xtoskrnl/hl/i686/irq.cc @@ -0,0 +1,44 @@ +/** + * PROJECT: ExectOS + * COPYRIGHT: See COPYING.md in the top level directory + * FILE: xtoskrnl/hl/i686/irq.cc + * DESCRIPTION: Interrupts support for i686 architecture + * DEVELOPERS: Rafal Kupiec + * Aiken Harris + */ + +#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 +HL::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); +}