85 DPRINT1(
"VIA CPUs not fully supported\n");
111 KiCpuId(&CpuInfo, 1);
120 Stepping = CpuSignature.
Model;
121 ExtendModel = (CpuSignature.
Family == 15);
122#if ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) ) || (NTDDI_VERSION >= NTDDI_WS03SP1)
123 if (CpuSignature.
Family == 6)
126#if (NTDDI_VERSION >= NTDDI_WIN8)
136 Stepping = (Stepping << 8) | CpuSignature.
Step;
219 VersionInfo.Ebx.Bits.MaximumAddressableIdsForLogicalProcessors;
271 if ((extendedFunction.
MaxLeaf & 0xffffff00) == 0x80000000)
288 if (ExtSig.
Amd.Edx.Bits.ThreeDNow) FeatureBits |=
KF_3DNOW;
316 if (ProcBasedCtls.
Bits.Allowed1.ActivateSecondaryControls)
321 if (ProcBasedCtls2.
Bits.Allowed1.EPT)
332 if ((extendedFunction.
MaxLeaf & 0xffffff00) == 0x80000000)
353 ULONG CpuFeatures = 0;
358 KiCpuId(&CpuInfo, 1);
359 CpuFeatures = CpuInfo.
Edx;
362 DPRINT1(
"Supported CPU features:");
364#define print_kf_bit(kf_value) if (Prcb->FeatureBits & kf_value) DbgPrint(" " #kf_value)
409#define print_cf(cpu_flag) if (CpuFeatures & cpu_flag) DbgPrint(" " #cpu_flag)
424 ULONG CacheRequests = 0,
i;
425 ULONG CurrentRegister;
444 KiCpuId(&CpuInfo, 0);
445 if (CpuInfo.
Eax >= 2)
451 KiCpuId(&CpuInfo, 2);
460 CacheRequests = CpuInfo.
Eax & 0xFF;
461 CpuInfo.
Eax &= 0xFFFFFF00;
468 for (
i = 0;
i < 4;
i++)
477 if (CurrentRegister & 0x80000000)
continue;
480 while (CurrentRegister)
483 RegisterByte = (
UCHAR)(CurrentRegister & 0xFF);
484 CurrentRegister >>= 8;
485 if (!RegisterByte)
continue;
492 if (((RegisterByte > 0x40) &&
493 (RegisterByte <= 0x49)) ||
494 ((RegisterByte > 0x80) &&
495 (RegisterByte <= 0x89)))
498 RegisterByte &= 0x0F;
506 }
while (--CacheRequests);
513 KiCpuId(&CpuInfo, 0x80000000);
514 if (CpuInfo.
Eax >= 6)
517 KiCpuId(&CpuInfo, 0x80000006);
581 ProcessorState->SpecialRegisters.Cr0 =
__readcr0();
582 ProcessorState->SpecialRegisters.Cr2 =
__readcr2();
583 ProcessorState->SpecialRegisters.Cr3 =
__readcr3();
584 ProcessorState->SpecialRegisters.Cr4 =
__readcr4();
585 ProcessorState->SpecialRegisters.Cr8 = __readcr8();
588 ProcessorState->SpecialRegisters.KernelDr0 =
__readdr(0);
589 ProcessorState->SpecialRegisters.KernelDr1 =
__readdr(1);
590 ProcessorState->SpecialRegisters.KernelDr2 =
__readdr(2);
591 ProcessorState->SpecialRegisters.KernelDr3 =
__readdr(3);
592 ProcessorState->SpecialRegisters.KernelDr6 =
__readdr(6);
593 ProcessorState->SpecialRegisters.KernelDr7 =
__readdr(7);
596 __sgdt(&ProcessorState->SpecialRegisters.Gdtr.Limit);
597 __sldt(&ProcessorState->SpecialRegisters.Ldtr);
598 __str(&ProcessorState->SpecialRegisters.Tr);
599 __sidt(&ProcessorState->SpecialRegisters.Idtr.Limit);
601 ProcessorState->SpecialRegisters.MxCsr =
_mm_getcsr();
646 TrapFrame->PreviousMode);
#define MSR_IA32_VMX_PROCBASED_CTLS
#define MSR_IA32_VMX_PROCBASED_CTLS2
#define CPUID_AMD_SVM_FEATURES
#define CPUID_EXTENDED_FUNCTION
#define CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS
#define CPUID_VERSION_INFO
#define CPUID_EXTENDED_STATE
#define CPUID_THERMAL_POWER_MANAGEMENT
#define CPUID_EXTENDED_STATE_SUB_LEAF
#define CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_SUB_LEAF_INFO
#define CPUID_EXTENDED_CPU_SIG
int strcmp(const char *String1, const char *String2)
OSVERSIONINFOW VersionInfo
#define KeLowerIrql(oldIrql)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
KIRQL NTAPI KeRaiseIrqlToSynchLevel(VOID)
#define InterlockedExchangeAdd
PPC_QUAL void __writemsr(const unsigned long Value)
PPC_QUAL void __cpuid(int CPUInfo[], const int InfoType)
PPC_QUAL unsigned long long __readmsr()
PPC_QUAL void __wbinvd(void)
__INTRIN_INLINE unsigned long __readcr3(void)
__INTRIN_INLINE void __lidt(void *Source)
__INTRIN_INLINE void __cpuidex(int CPUInfo[4], int InfoType, int ECXValue)
__INTRIN_INLINE unsigned int __readdr(unsigned int reg)
__INTRIN_INLINE unsigned long __readcr4(void)
__INTRIN_INLINE unsigned long __readcr0(void)
__INTRIN_INLINE void __writecr3(unsigned int Data)
__INTRIN_INLINE unsigned long __readcr2(void)
__INTRIN_INLINE void __writecr0(unsigned int Data)
__INTRIN_INLINE void __sidt(void *Destination)
__INTRIN_INLINE void __writecr4(unsigned int Data)
__INTRIN_INLINE void __writedr(unsigned reg, unsigned int value)
#define KF_VIRT_FIRMWARE_ENABLED
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
NTSYSAPI VOID NTAPI RtlCaptureContext(_Out_ PCONTEXT ContextRecord)
#define UNREFERENCED_PARAMETER(P)
#define X86_MSR_KERNEL_GSBASE
VOID NTAPI KeTrapFrameToContext(IN PKTRAP_FRAME TrapFrame, IN PKEXCEPTION_FRAME ExceptionFrame, IN OUT PCONTEXT Context)
VOID NTAPI KeContextToTrapFrame(PCONTEXT Context, PKEXCEPTION_FRAME ExeptionFrame, PKTRAP_FRAME TrapFrame, ULONG ContextFlags, KPROCESSOR_MODE PreviousMode)
ULONG NTAPI KeGetRecommendedSharedDataAlignment(VOID)
VOID NTAPI KiRestoreProcessorControlState(PKPROCESSOR_STATE ProcessorState)
VOID NTAPI KeFlushCurrentTb(VOID)
VOID NTAPI KiSetProcessorType(VOID)
VOID NTAPI KeFlushEntireTb(IN BOOLEAN Invalid, IN BOOLEAN AllProcessors)
VOID __cdecl KeSaveStateForHibernate(IN PKPROCESSOR_STATE State)
BOOLEAN KiSMTProcessorsPresent
ULONG64 NTAPI KiGetFeatureBits(VOID)
Evaluates the KeFeatureFlag bits for the current CPU.
BOOLEAN NTAPI KeInvalidateAllCaches(VOID)
NTSTATUS NTAPI KxRestoreFloatingPointState(IN PKFLOATING_SAVE FloatingState)
ULONG NTAPI KiGetCpuVendor(VOID)
volatile LONG KiTbFlushTimeStamp
VOID NTAPI KiSaveProcessorState(_In_ PKTRAP_FRAME TrapFrame, _In_ PKEXCEPTION_FRAME ExceptionFrame)
VOID NTAPI KeSetDmaIoCoherency(IN ULONG Coherency)
NTSTATUS NTAPI KxSaveFloatingPointState(OUT PKFLOATING_SAVE FloatingState)
VOID NTAPI KiSaveProcessorControlState(OUT PKPROCESSOR_STATE ProcessorState)
static const CHAR CmpIntelID[]
static const CHAR CmpAmdID[]
VOID NTAPI KiRestoreProcessorState(_Out_ PKTRAP_FRAME TrapFrame, _Out_ PKEXCEPTION_FRAME ExceptionFrame)
static const CHAR CmpCentaurID[]
VOID NTAPI KiGetCacheInformation(VOID)
union _CPU_SIGNATURE CPU_SIGNATURE
ULONG SecondLevelCacheSize
UCHAR LogicalProcessorsPerPhysicalProcessor
KPROCESSOR_STATE ProcessorState
KSPECIAL_REGISTERS SpecialRegisters
struct CPUID_AMD_SVM_FEATURES_EDX::@3820 Bits
CPUID_AMD_SVM_FEATURES_EDX Edx
struct CPUID_EXTENDED_CPU_SIG_REGS::@3817 Intel
struct CPUID_EXTENDED_CPU_SIG_REGS::@3818 Amd
struct CPUID_EXTENDED_STATE_SUB_LEAF_EAX::@3915 Bits
CPUID_EXTENDED_STATE_SUB_LEAF_EAX Eax
struct CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_EBX::@3905 Bits
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_EBX Ebx
struct CPUID_THERMAL_POWER_MANAGEMENT_REGS::@3808 Undoc
struct MSR_IA32_VMX_PROCBASED_CTLS2_REGISTER::@3952 Bits
struct MSR_IA32_VMX_PROCBASED_CTLS_REGISTER::@3951 Bits
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
void _mm_setcsr(unsigned int a)
unsigned int _mm_getcsr(void)