Register APC interrupt handler
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 26s
Builds / ExectOS (i686, debug) (push) Successful in 41s
Builds / ExectOS (amd64, release) (push) Successful in 43s
Builds / ExectOS (i686, release) (push) Successful in 31s

This commit is contained in:
2026-06-26 10:22:18 +02:00
parent 77c1138f7d
commit 53a8b57a96
4 changed files with 24 additions and 0 deletions

View File

@@ -22,6 +22,7 @@ namespace KE
STATIC XTAPI VOID DeliverApc(IN KPROCESSOR_MODE ProcessorMode,
IN PKEXCEPTION_FRAME ExceptionFrame,
IN PKTRAP_FRAME TrapFrame);
STATIC XTCDECL VOID HandleApcInterrupt(IN PKTRAP_FRAME TrapFrame);
STATIC XTAPI VOID InitializeApc(IN PKAPC Apc,
IN PKTHREAD Thread,
IN KAPC_ENVIRONMENT Environment,

View File

@@ -142,6 +142,7 @@ VOID
KE::KernelInit::InitializeInterruptHandlers(VOID)
{
/* Register interrupt handlers */
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_APC, KE::Apc::HandleApcInterrupt);
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_DPC, KE::Dispatcher::HandleDispatchInterrupt);
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_IPI, KE::Ipi::HandleIpiInterrupt);
}

View File

@@ -76,6 +76,27 @@ KE::Apc::DeliverApc(IN KPROCESSOR_MODE ProcessorMode,
Thread->ApcState.KernelApcPending = FALSE;
}
/**
* Handles the Asynchronous Procedure Call (APC) interrupt.
*
* @param TrapFrame
* Supplies a pointer to the hardware trap frame representing the interrupted context.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTCDECL
VOID
KE::Apc::HandleApcInterrupt(IN PKTRAP_FRAME TrapFrame)
{
/* Raise runlevel to APC level */
KE::RaiseRunLevel RunLevel(APC_LEVEL);
/* Deliver the APC */
DeliverApc(TrapFrame->PreviousMode, NULLPTR, TrapFrame);
}
/**
* Initializes an APC object.
*

View File

@@ -142,6 +142,7 @@ VOID
KE::KernelInit::InitializeInterruptHandlers(VOID)
{
/* Register interrupt handlers */
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_APC, KE::Apc::HandleApcInterrupt);
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_DPC, KE::Dispatcher::HandleDispatchInterrupt);
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_IPI, KE::Ipi::HandleIpiInterrupt);
}