Register dispatch interrupt handler
This commit is contained in:
@@ -57,6 +57,9 @@ KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlo
|
||||
/* Initialize local clock for this CPU */
|
||||
HL::Timer::InitializeLocalClock();
|
||||
|
||||
/* Register DISPATCH interrupt handler */
|
||||
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_DPC, KE::Dispatcher::HandleDispatchInterrupt);
|
||||
|
||||
/* Enter infinite loop */
|
||||
DebugPrint(L"KernelInit::BootstrapApplicationProcessor() finished for CPU #%lu. Entering infinite loop.\n",
|
||||
ControlBlock->CpuNumber);
|
||||
@@ -129,6 +132,9 @@ KE::KernelInit::BootstrapKernel(VOID)
|
||||
KE::Processor::InitializeProcessorBlocks();
|
||||
HL::Cpu::StartAllProcessors();
|
||||
|
||||
/* Register DISPATCH interrupt handler */
|
||||
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_DPC, KE::Dispatcher::HandleDispatchInterrupt);
|
||||
|
||||
/* Enter infinite loop */
|
||||
DebugPrint(L"KernelInit::BootstrapKernel() finished. Entering infinite loop.\n");
|
||||
KE::Crash::HaltSystem();
|
||||
|
||||
@@ -29,6 +29,25 @@ KE::Dispatcher::ExitDispatcher(IN KRUNLEVEL OldRunLevel)
|
||||
RunLevel::LowerRunLevel(OldRunLevel);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handles the dispatch interrupt by retiring pending DPCs, asking the scheduler for the next runnable thread
|
||||
* and performing the context switch.
|
||||
*
|
||||
* @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::Dispatcher::HandleDispatchInterrupt(IN PKTRAP_FRAME TrapFrame)
|
||||
{
|
||||
/* End the interrupt */
|
||||
HL::Pic::SendEoi();
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the runtime quantum of the currently executing thread and handles preemption.
|
||||
*
|
||||
|
||||
@@ -57,6 +57,9 @@ KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlo
|
||||
/* Initialize local clock for this CPU */
|
||||
HL::Timer::InitializeLocalClock();
|
||||
|
||||
/* Register DISPATCH interrupt handler */
|
||||
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_DPC, KE::Dispatcher::HandleDispatchInterrupt);
|
||||
|
||||
/* Enter infinite loop */
|
||||
DebugPrint(L"KernelInit::BootstrapApplicationProcessor() finished for CPU #%lu. Entering infinite loop.\n",
|
||||
ControlBlock->CpuNumber);
|
||||
@@ -129,6 +132,9 @@ KE::KernelInit::BootstrapKernel(VOID)
|
||||
KE::Processor::InitializeProcessorBlocks();
|
||||
HL::Cpu::StartAllProcessors();
|
||||
|
||||
/* Register DISPATCH interrupt handler */
|
||||
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_DPC, KE::Dispatcher::HandleDispatchInterrupt);
|
||||
|
||||
/* Enter infinite loop */
|
||||
DebugPrint(L"KernelInit::BootstrapKernel() finished. Entering infinite loop.\n");
|
||||
KE::Crash::HaltSystem();
|
||||
|
||||
Reference in New Issue
Block a user