diff --git a/xtoskrnl/includes/ke/proc.hh b/xtoskrnl/includes/ke/proc.hh index 082c3d028..e588dee14 100644 --- a/xtoskrnl/includes/ke/proc.hh +++ b/xtoskrnl/includes/ke/proc.hh @@ -26,12 +26,13 @@ namespace KE STATIC XTAPI PKPROCESSOR_CONTROL_BLOCK GetCurrentProcessorControlBlock(VOID); STATIC XTAPI ULONG GetCurrentProcessorNumber(VOID); STATIC XTAPI PKTHREAD GetCurrentThread(VOID); + STATIC XTAPI ULONG GetInstalledCpus(VOID); STATIC XTAPI PKPROCESSOR_BLOCK GetProcessorBlock(IN ULONG CpuNumber); STATIC XTAPI XTSTATUS InitializeProcessorBlocks(); STATIC XTAPI VOID RegisterHardwareId(IN ULONG HardwareId); STATIC XTAPI VOID RegisterProcessorBlock(ULONG CpuNumber, PKPROCESSOR_BLOCK ProcessorBlock); - STATIC XTAPI VOID SaveProcessorState(OUT PKPROCESSOR_STATE CpuState); + STATIC XTAPI VOID SaveProcessorControlState(OUT PKPROCESSOR_STATE CpuState); }; } diff --git a/xtoskrnl/ke/amd64/proc.cc b/xtoskrnl/ke/amd64/proc.cc index 0c3a0f38d..d49b82e36 100644 --- a/xtoskrnl/ke/amd64/proc.cc +++ b/xtoskrnl/ke/amd64/proc.cc @@ -66,6 +66,21 @@ KE::Processor::GetCurrentThread(VOID) return (PKTHREAD)AR::CpuFunctions::ReadGSQuadWord(FIELD_OFFSET(KPROCESSOR_BLOCK, Prcb.CurrentThread)); } +/** + * Retrieves the number of installed and enabled CPUs in the system. + * + * @return This routine returns the number of installed CPUs in the system. + * + * @since XT 1.0 + */ +XTAPI +ULONG +KE::Processor::GetInstalledCpus(VOID) +{ + /* Return number of installed CPUs */ + return InstalledCpus; +} + /** * Gets the processor block for the specified processor number. * @@ -189,7 +204,7 @@ KE::Processor::RegisterProcessorBlock(ULONG CpuNumber, */ XTAPI VOID -KE::Processor::SaveProcessorState(OUT PKPROCESSOR_STATE CpuState) +KE::Processor::SaveProcessorControlState(OUT PKPROCESSOR_STATE CpuState) { /* Save CR registers */ CpuState->SpecialRegisters.Cr0 = AR::CpuFunctions::ReadControlRegister(0); diff --git a/xtoskrnl/ke/i686/proc.cc b/xtoskrnl/ke/i686/proc.cc index 03c29ec21..ad9ad9845 100644 --- a/xtoskrnl/ke/i686/proc.cc +++ b/xtoskrnl/ke/i686/proc.cc @@ -66,6 +66,21 @@ KE::Processor::GetCurrentThread(VOID) return (PKTHREAD)AR::CpuFunctions::ReadFSDualWord(FIELD_OFFSET(KPROCESSOR_BLOCK, Prcb.CurrentThread)); } +/** + * Retrieves the number of installed and enabled CPUs in the system. + * + * @return This routine returns the number of installed CPUs in the system. + * + * @since XT 1.0 + */ +XTAPI +ULONG +KE::Processor::GetInstalledCpus(VOID) +{ + /* Return number of installed CPUs */ + return InstalledCpus; +} + /** * Gets the processor block for the specified processor number. * @@ -189,7 +204,7 @@ KE::Processor::RegisterProcessorBlock(ULONG CpuNumber, */ XTAPI VOID -KE::Processor::SaveProcessorState(OUT PKPROCESSOR_STATE CpuState) +KE::Processor::SaveProcessorControlState(OUT PKPROCESSOR_STATE CpuState) { /* Save CR registers */ CpuState->SpecialRegisters.Cr0 = AR::CpuFunctions::ReadControlRegister(0);