Register APC interrupt handler
This commit is contained in:
@@ -22,6 +22,7 @@ namespace KE
|
|||||||
STATIC XTAPI VOID DeliverApc(IN KPROCESSOR_MODE ProcessorMode,
|
STATIC XTAPI VOID DeliverApc(IN KPROCESSOR_MODE ProcessorMode,
|
||||||
IN PKEXCEPTION_FRAME ExceptionFrame,
|
IN PKEXCEPTION_FRAME ExceptionFrame,
|
||||||
IN PKTRAP_FRAME TrapFrame);
|
IN PKTRAP_FRAME TrapFrame);
|
||||||
|
STATIC XTCDECL VOID HandleApcInterrupt(IN PKTRAP_FRAME TrapFrame);
|
||||||
STATIC XTAPI VOID InitializeApc(IN PKAPC Apc,
|
STATIC XTAPI VOID InitializeApc(IN PKAPC Apc,
|
||||||
IN PKTHREAD Thread,
|
IN PKTHREAD Thread,
|
||||||
IN KAPC_ENVIRONMENT Environment,
|
IN KAPC_ENVIRONMENT Environment,
|
||||||
|
|||||||
@@ -142,6 +142,7 @@ VOID
|
|||||||
KE::KernelInit::InitializeInterruptHandlers(VOID)
|
KE::KernelInit::InitializeInterruptHandlers(VOID)
|
||||||
{
|
{
|
||||||
/* Register interrupt handlers */
|
/* 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_DPC, KE::Dispatcher::HandleDispatchInterrupt);
|
||||||
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_IPI, KE::Ipi::HandleIpiInterrupt);
|
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_IPI, KE::Ipi::HandleIpiInterrupt);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,6 +76,27 @@ KE::Apc::DeliverApc(IN KPROCESSOR_MODE ProcessorMode,
|
|||||||
Thread->ApcState.KernelApcPending = FALSE;
|
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.
|
* Initializes an APC object.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -142,6 +142,7 @@ VOID
|
|||||||
KE::KernelInit::InitializeInterruptHandlers(VOID)
|
KE::KernelInit::InitializeInterruptHandlers(VOID)
|
||||||
{
|
{
|
||||||
/* Register interrupt handlers */
|
/* 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_DPC, KE::Dispatcher::HandleDispatchInterrupt);
|
||||||
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_IPI, KE::Ipi::HandleIpiInterrupt);
|
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_IPI, KE::Ipi::HandleIpiInterrupt);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user