Replace CPUID queries with cached PRCB feature bits
This commit is contained in:
@@ -78,28 +78,13 @@ XTAPI
|
|||||||
BOOLEAN
|
BOOLEAN
|
||||||
HL::Pic::CheckApicSupport(VOID)
|
HL::Pic::CheckApicSupport(VOID)
|
||||||
{
|
{
|
||||||
CPUID_REGISTERS CpuRegisters;
|
PKPROCESSOR_CONTROL_BLOCK Prcb;
|
||||||
|
|
||||||
/* Prepare CPUID registers */
|
/* Get current processor control block */
|
||||||
CpuRegisters.Leaf = CPUID_GET_STANDARD1_FEATURES;
|
Prcb = KE::Processor::GetCurrentProcessorControlBlock();
|
||||||
CpuRegisters.SubLeaf = 0;
|
|
||||||
CpuRegisters.Eax = 0;
|
|
||||||
CpuRegisters.Ebx = 0;
|
|
||||||
CpuRegisters.Ecx = 0;
|
|
||||||
CpuRegisters.Edx = 0;
|
|
||||||
|
|
||||||
/* Get CPUID */
|
/* Return APIC status */
|
||||||
AR::CpuFunc::CpuId(&CpuRegisters);
|
return (Prcb->CpuId.FeatureBits & KCF_APIC) ? TRUE : FALSE;
|
||||||
|
|
||||||
/* Check APIC status from the CPUID results */
|
|
||||||
if(!(CpuRegisters.Edx & CPUID_FEATURES_EDX_APIC))
|
|
||||||
{
|
|
||||||
/* APIC is not supported */
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* APIC is supported */
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -116,28 +101,13 @@ XTAPI
|
|||||||
BOOLEAN
|
BOOLEAN
|
||||||
HL::Pic::CheckX2ApicSupport(VOID)
|
HL::Pic::CheckX2ApicSupport(VOID)
|
||||||
{
|
{
|
||||||
CPUID_REGISTERS CpuRegisters;
|
PKPROCESSOR_CONTROL_BLOCK Prcb;
|
||||||
|
|
||||||
/* Prepare CPUID registers */
|
/* Get current processor control block */
|
||||||
CpuRegisters.Leaf = CPUID_GET_STANDARD1_FEATURES;
|
Prcb = KE::Processor::GetCurrentProcessorControlBlock();
|
||||||
CpuRegisters.SubLeaf = 0;
|
|
||||||
CpuRegisters.Eax = 0;
|
|
||||||
CpuRegisters.Ebx = 0;
|
|
||||||
CpuRegisters.Ecx = 0;
|
|
||||||
CpuRegisters.Edx = 0;
|
|
||||||
|
|
||||||
/* Get CPUID */
|
/* Return x2APIC status */
|
||||||
AR::CpuFunc::CpuId(&CpuRegisters);
|
return (Prcb->CpuId.FeatureBits & KCF_X2APIC) ? TRUE : FALSE;
|
||||||
|
|
||||||
/* Check x2APIC status from the CPUID results */
|
|
||||||
if(!(CpuRegisters.Ecx & CPUID_FEATURES_ECX_X2APIC))
|
|
||||||
{
|
|
||||||
/* x2APIC is not supported */
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* x2APIC is supported */
|
|
||||||
return TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user