forked from xt-sys/exectos
Extend AP bootstrap code
This commit is contained in:
@@ -25,11 +25,14 @@ XTAPI
|
|||||||
VOID
|
VOID
|
||||||
KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlock)
|
KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlock)
|
||||||
{
|
{
|
||||||
PKPROCESSOR_BLOCK ProcessorBlock;
|
PKPROCESSOR_CONTROL_BLOCK ControlBlock;
|
||||||
|
|
||||||
/* Initialize application CPU */
|
/* Initialize application CPU */
|
||||||
AR::ProcessorSupport::InitializeProcessor(StartBlock->ProcessorStructures);
|
AR::ProcessorSupport::InitializeProcessor(StartBlock->ProcessorStructures);
|
||||||
|
|
||||||
|
/* Get processor control block */
|
||||||
|
ControlBlock = KE::Processor::GetCurrentProcessorControlBlock();
|
||||||
|
|
||||||
/* Initialize processor */
|
/* Initialize processor */
|
||||||
HL::Cpu::InitializeProcessor();
|
HL::Cpu::InitializeProcessor();
|
||||||
|
|
||||||
@@ -39,12 +42,21 @@ KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlo
|
|||||||
/* Mark processor as started */
|
/* Mark processor as started */
|
||||||
StartBlock->Started = TRUE;
|
StartBlock->Started = TRUE;
|
||||||
|
|
||||||
/* Get current processor block */
|
/* Initialize CPU power state structures */
|
||||||
ProcessorBlock = KE::Processor::GetCurrentProcessorBlock();
|
PO::Idle::InitializeProcessorIdleState(ControlBlock);
|
||||||
|
|
||||||
|
/* Save processor state */
|
||||||
|
KE::Processor::SaveProcessorState(&ControlBlock->ProcessorState);
|
||||||
|
|
||||||
|
/* Lower to APC runlevel */
|
||||||
|
KE::RunLevel::LowerRunLevel(APC_LEVEL);
|
||||||
|
|
||||||
|
/* Initialize local clock for this CPU */
|
||||||
|
HL::Timer::InitializeLocalClock();
|
||||||
|
|
||||||
/* Enter infinite loop */
|
/* Enter infinite loop */
|
||||||
DebugPrint(L"KernelInit::BootstrapApplicationProcessor() finished for CPU #%lu. Entering infinite loop.\n",
|
DebugPrint(L"KernelInit::BootstrapApplicationProcessor() finished for CPU #%lu. Entering infinite loop.\n",
|
||||||
ProcessorBlock->CpuNumber);
|
ControlBlock->CpuNumber);
|
||||||
KE::Crash::HaltSystem();
|
KE::Crash::HaltSystem();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,11 +25,14 @@ XTAPI
|
|||||||
VOID
|
VOID
|
||||||
KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlock)
|
KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlock)
|
||||||
{
|
{
|
||||||
PKPROCESSOR_BLOCK ProcessorBlock;
|
PKPROCESSOR_CONTROL_BLOCK ControlBlock;
|
||||||
|
|
||||||
/* Initialize application CPU */
|
/* Initialize application CPU */
|
||||||
AR::ProcessorSupport::InitializeProcessor(StartBlock->ProcessorStructures);
|
AR::ProcessorSupport::InitializeProcessor(StartBlock->ProcessorStructures);
|
||||||
|
|
||||||
|
/* Get processor control block */
|
||||||
|
ControlBlock = KE::Processor::GetCurrentProcessorControlBlock();
|
||||||
|
|
||||||
/* Initialize processor */
|
/* Initialize processor */
|
||||||
HL::Cpu::InitializeProcessor();
|
HL::Cpu::InitializeProcessor();
|
||||||
|
|
||||||
@@ -39,12 +42,21 @@ KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlo
|
|||||||
/* Mark processor as started */
|
/* Mark processor as started */
|
||||||
StartBlock->Started = TRUE;
|
StartBlock->Started = TRUE;
|
||||||
|
|
||||||
/* Get current processor block */
|
/* Initialize CPU power state structures */
|
||||||
ProcessorBlock = KE::Processor::GetCurrentProcessorBlock();
|
PO::Idle::InitializeProcessorIdleState(ControlBlock);
|
||||||
|
|
||||||
|
/* Save processor state */
|
||||||
|
KE::Processor::SaveProcessorState(&ControlBlock->ProcessorState);
|
||||||
|
|
||||||
|
/* Lower to APC runlevel */
|
||||||
|
KE::RunLevel::LowerRunLevel(APC_LEVEL);
|
||||||
|
|
||||||
|
/* Initialize local clock for this CPU */
|
||||||
|
HL::Timer::InitializeLocalClock();
|
||||||
|
|
||||||
/* Enter infinite loop */
|
/* Enter infinite loop */
|
||||||
DebugPrint(L"KernelInit::BootstrapApplicationProcessor() finished for CPU #%lu. Entering infinite loop.\n",
|
DebugPrint(L"KernelInit::BootstrapApplicationProcessor() finished for CPU #%lu. Entering infinite loop.\n",
|
||||||
ProcessorBlock->CpuNumber);
|
ControlBlock->CpuNumber);
|
||||||
KE::Crash::HaltSystem();
|
KE::Crash::HaltSystem();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user