Delegate idle process and thread setup to PS subsystem
This commit is contained in:
@@ -26,8 +26,6 @@ VOID
|
|||||||
KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlock)
|
KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlock)
|
||||||
{
|
{
|
||||||
PKPROCESSOR_CONTROL_BLOCK ControlBlock;
|
PKPROCESSOR_CONTROL_BLOCK ControlBlock;
|
||||||
PKPROCESS IdleProcess;
|
|
||||||
PETHREAD IdleThread;
|
|
||||||
|
|
||||||
/* Initialize application CPU */
|
/* Initialize application CPU */
|
||||||
AR::ProcessorSupport::InitializeProcessor(StartBlock->ProcessorStructures);
|
AR::ProcessorSupport::InitializeProcessor(StartBlock->ProcessorStructures);
|
||||||
@@ -59,15 +57,8 @@ KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlo
|
|||||||
/* Initialize local clock for this CPU */
|
/* Initialize local clock for this CPU */
|
||||||
HL::Timer::InitializeLocalClock();
|
HL::Timer::InitializeLocalClock();
|
||||||
|
|
||||||
/* Allocate and wipe memory for Idle thread */
|
/* Create and initialize IDLE thread */
|
||||||
MM::Allocator::AllocatePool(NonPagedPool, sizeof(ETHREAD), (PVOID *)&IdleThread);
|
PS::Thread::CreateIdleThread(ControlBlock, StartBlock->Stack);
|
||||||
RTL::Memory::ZeroMemory(IdleThread, sizeof(ETHREAD));
|
|
||||||
|
|
||||||
/* Initialize Idle thread */
|
|
||||||
IdleProcess = KE::KProcess::GetIdleProcess();
|
|
||||||
ControlBlock->CurrentThread = &IdleThread->ThreadControlBlock;
|
|
||||||
ControlBlock->IdleThread = &IdleThread->ThreadControlBlock;
|
|
||||||
KE::KThread::InitializeIdleThread(IdleProcess, &IdleThread->ThreadControlBlock, ControlBlock, StartBlock->Stack);
|
|
||||||
|
|
||||||
/* Register DISPATCH interrupt handler */
|
/* Register DISPATCH interrupt handler */
|
||||||
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_DPC, KE::Dispatcher::HandleDispatchInterrupt);
|
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_DPC, KE::Dispatcher::HandleDispatchInterrupt);
|
||||||
@@ -91,16 +82,9 @@ VOID
|
|||||||
KE::KernelInit::BootstrapKernel(VOID)
|
KE::KernelInit::BootstrapKernel(VOID)
|
||||||
{
|
{
|
||||||
PKPROCESSOR_CONTROL_BLOCK Prcb;
|
PKPROCESSOR_CONTROL_BLOCK Prcb;
|
||||||
ULONG_PTR PageDirectory[2];
|
|
||||||
PKPROCESS CurrentProcess;
|
|
||||||
PKTHREAD CurrentThread;
|
|
||||||
|
|
||||||
/* Get processor control block and current thread */
|
/* Get processor control block */
|
||||||
Prcb = KE::Processor::GetCurrentProcessorControlBlock();
|
Prcb = KE::Processor::GetCurrentProcessorControlBlock();
|
||||||
CurrentThread = KE::Processor::GetCurrentThread();
|
|
||||||
|
|
||||||
/* Get current process */
|
|
||||||
CurrentProcess = CurrentThread->ApcState.Process;
|
|
||||||
|
|
||||||
/* Initialize CPU power state structures */
|
/* Initialize CPU power state structures */
|
||||||
PO::Idle::InitializeProcessorIdleState(Prcb);
|
PO::Idle::InitializeProcessorIdleState(Prcb);
|
||||||
@@ -124,11 +108,8 @@ KE::KernelInit::BootstrapKernel(VOID)
|
|||||||
/* Enable shadow buffer for framebuffer */
|
/* Enable shadow buffer for framebuffer */
|
||||||
HL::FrameBuffer::EnableShadowBuffer();
|
HL::FrameBuffer::EnableShadowBuffer();
|
||||||
|
|
||||||
/* Initialize Idle process and Idle thread */
|
/* Create and initialize IDLE process */
|
||||||
PageDirectory[0] = 0;
|
PS::Process::CreateIdleProcess(Prcb);
|
||||||
PageDirectory[1] = 0;
|
|
||||||
KE::KProcess::InitializeIdleProcess(CurrentProcess, PageDirectory);
|
|
||||||
KE::KThread::InitializeIdleThread(CurrentProcess, CurrentThread, Prcb, AR::ProcessorSupport::GetBootStack());
|
|
||||||
|
|
||||||
/* Start all application processors */
|
/* Start all application processors */
|
||||||
KE::Processor::InitializeProcessorBlocks();
|
KE::Processor::InitializeProcessorBlocks();
|
||||||
|
|||||||
@@ -26,8 +26,6 @@ VOID
|
|||||||
KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlock)
|
KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlock)
|
||||||
{
|
{
|
||||||
PKPROCESSOR_CONTROL_BLOCK ControlBlock;
|
PKPROCESSOR_CONTROL_BLOCK ControlBlock;
|
||||||
PKPROCESS IdleProcess;
|
|
||||||
PETHREAD IdleThread;
|
|
||||||
|
|
||||||
/* Initialize application CPU */
|
/* Initialize application CPU */
|
||||||
AR::ProcessorSupport::InitializeProcessor(StartBlock->ProcessorStructures);
|
AR::ProcessorSupport::InitializeProcessor(StartBlock->ProcessorStructures);
|
||||||
@@ -59,15 +57,8 @@ KE::KernelInit::BootstrapApplicationProcessor(IN PPROCESSOR_START_BLOCK StartBlo
|
|||||||
/* Initialize local clock for this CPU */
|
/* Initialize local clock for this CPU */
|
||||||
HL::Timer::InitializeLocalClock();
|
HL::Timer::InitializeLocalClock();
|
||||||
|
|
||||||
/* Allocate and wipe memory for Idle thread */
|
/* Create and initialize IDLE thread */
|
||||||
MM::Allocator::AllocatePool(NonPagedPool, sizeof(ETHREAD), (PVOID *)&IdleThread);
|
PS::Thread::CreateIdleThread(ControlBlock, StartBlock->Stack);
|
||||||
RTL::Memory::ZeroMemory(IdleThread, sizeof(ETHREAD));
|
|
||||||
|
|
||||||
/* Initialize Idle thread */
|
|
||||||
IdleProcess = KE::KProcess::GetIdleProcess();
|
|
||||||
ControlBlock->CurrentThread = &IdleThread->ThreadControlBlock;
|
|
||||||
ControlBlock->IdleThread = &IdleThread->ThreadControlBlock;
|
|
||||||
KE::KThread::InitializeIdleThread(IdleProcess, &IdleThread->ThreadControlBlock, ControlBlock, StartBlock->Stack);
|
|
||||||
|
|
||||||
/* Register DISPATCH interrupt handler */
|
/* Register DISPATCH interrupt handler */
|
||||||
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_DPC, KE::Dispatcher::HandleDispatchInterrupt);
|
HL::Irq::RegisterSystemInterruptHandler(APIC_VECTOR_DPC, KE::Dispatcher::HandleDispatchInterrupt);
|
||||||
@@ -91,16 +82,9 @@ VOID
|
|||||||
KE::KernelInit::BootstrapKernel(VOID)
|
KE::KernelInit::BootstrapKernel(VOID)
|
||||||
{
|
{
|
||||||
PKPROCESSOR_CONTROL_BLOCK Prcb;
|
PKPROCESSOR_CONTROL_BLOCK Prcb;
|
||||||
ULONG_PTR PageDirectory[2];
|
|
||||||
PKPROCESS CurrentProcess;
|
|
||||||
PKTHREAD CurrentThread;
|
|
||||||
|
|
||||||
/* Get processor control block and current thread */
|
/* Get processor control block */
|
||||||
Prcb = KE::Processor::GetCurrentProcessorControlBlock();
|
Prcb = KE::Processor::GetCurrentProcessorControlBlock();
|
||||||
CurrentThread = KE::Processor::GetCurrentThread();
|
|
||||||
|
|
||||||
/* Get current process */
|
|
||||||
CurrentProcess = CurrentThread->ApcState.Process;
|
|
||||||
|
|
||||||
/* Initialize CPU power state structures */
|
/* Initialize CPU power state structures */
|
||||||
PO::Idle::InitializeProcessorIdleState(Prcb);
|
PO::Idle::InitializeProcessorIdleState(Prcb);
|
||||||
@@ -124,11 +108,8 @@ KE::KernelInit::BootstrapKernel(VOID)
|
|||||||
/* Enable shadow buffer for framebuffer */
|
/* Enable shadow buffer for framebuffer */
|
||||||
HL::FrameBuffer::EnableShadowBuffer();
|
HL::FrameBuffer::EnableShadowBuffer();
|
||||||
|
|
||||||
/* Initialize Idle process and Idle thread */
|
/* Create and initialize IDLE process */
|
||||||
PageDirectory[0] = 0;
|
PS::Process::CreateIdleProcess(Prcb);
|
||||||
PageDirectory[1] = 0;
|
|
||||||
KE::KProcess::InitializeIdleProcess(CurrentProcess, PageDirectory);
|
|
||||||
KE::KThread::InitializeIdleThread(CurrentProcess, CurrentThread, Prcb, AR::ProcessorSupport::GetBootStack());
|
|
||||||
|
|
||||||
/* Start all application processors */
|
/* Start all application processors */
|
||||||
KE::Processor::InitializeProcessorBlocks();
|
KE::Processor::InitializeProcessorBlocks();
|
||||||
|
|||||||
@@ -50,10 +50,7 @@ PS::Thread::CreateIdleThread(IN PKPROCESSOR_CONTROL_BLOCK Prcb,
|
|||||||
Prcb->IdleThread = &IdleThread->ThreadControlBlock;
|
Prcb->IdleThread = &IdleThread->ThreadControlBlock;
|
||||||
|
|
||||||
/* Initialize the IDLE thread */
|
/* Initialize the IDLE thread */
|
||||||
KE::KThread::InitializeIdleThread(IdleProcess,
|
KE::KThread::InitializeIdleThread(IdleProcess, &IdleThread->ThreadControlBlock, Prcb, Stack);
|
||||||
&IdleThread->ThreadControlBlock,
|
|
||||||
Prcb,
|
|
||||||
Stack);
|
|
||||||
|
|
||||||
/* Return success */
|
/* Return success */
|
||||||
return STATUS_SUCCESS;
|
return STATUS_SUCCESS;
|
||||||
|
|||||||
Reference in New Issue
Block a user