82 DPRINT1(
"VIA CPUs not fully supported\n");
108 KiCpuId(&CpuInfo, 1);
117 Stepping = CpuSignature.
Model;
118 ExtendModel = (CpuSignature.
Family == 15);
119#if ( (NTDDI_VERSION >= NTDDI_WINXPSP2) && (NTDDI_VERSION < NTDDI_WS03) ) || (NTDDI_VERSION >= NTDDI_WS03SP1)
120 if (CpuSignature.
Family == 6)
123#if (NTDDI_VERSION >= NTDDI_WIN8)
133 Stepping = (Stepping << 8) | CpuSignature.
Step;
161 if (!Vendor)
return FeatureBits;
164 KiCpuId(&CpuInfo, 1);
211 KiCpuId(&CpuInfo, 0x80000000);
212 if ((CpuInfo.
Eax & 0xffffff00) == 0x80000000)
215 if (CpuInfo.
Eax >= 0x80000001)
218 KiCpuId(&CpuInfo, 0x80000001);
227 if (CpuInfo.
Edx & 0x80000000) FeatureBits |=
KF_3DNOW;
243 ULONG CacheRequests = 0,
i;
244 ULONG CurrentRegister;
263 KiCpuId(&CpuInfo, 0);
264 if (CpuInfo.
Eax >= 2)
270 KiCpuId(&CpuInfo, 2);
279 CacheRequests = CpuInfo.
Eax & 0xFF;
280 CpuInfo.
Eax &= 0xFFFFFF00;
287 for (
i = 0;
i < 4;
i++)
296 if (CurrentRegister & 0x80000000)
continue;
299 while (CurrentRegister)
302 RegisterByte = (
UCHAR)(CurrentRegister & 0xFF);
303 CurrentRegister >>= 8;
304 if (!RegisterByte)
continue;
311 if (((RegisterByte > 0x40) &&
312 (RegisterByte <= 0x49)) ||
313 ((RegisterByte > 0x80) &&
314 (RegisterByte <= 0x89)))
317 RegisterByte &= 0x0F;
325 }
while (--CacheRequests);
332 KiCpuId(&CpuInfo, 0x80000000);
333 if (CpuInfo.
Eax >= 6)
336 KiCpuId(&CpuInfo, 0x80000006);
400 ProcessorState->SpecialRegisters.Cr0 =
__readcr0();
401 ProcessorState->SpecialRegisters.Cr2 =
__readcr2();
402 ProcessorState->SpecialRegisters.Cr3 =
__readcr3();
403 ProcessorState->SpecialRegisters.Cr4 =
__readcr4();
404 ProcessorState->SpecialRegisters.Cr8 = __readcr8();
407 ProcessorState->SpecialRegisters.KernelDr0 =
__readdr(0);
408 ProcessorState->SpecialRegisters.KernelDr1 =
__readdr(1);
409 ProcessorState->SpecialRegisters.KernelDr2 =
__readdr(2);
410 ProcessorState->SpecialRegisters.KernelDr3 =
__readdr(3);
411 ProcessorState->SpecialRegisters.KernelDr6 =
__readdr(6);
412 ProcessorState->SpecialRegisters.KernelDr7 =
__readdr(7);
415 __sgdt(&ProcessorState->SpecialRegisters.Gdtr.Limit);
416 __sldt(&ProcessorState->SpecialRegisters.Ldtr);
417 __str(&ProcessorState->SpecialRegisters.Tr);
418 __sidt(&ProcessorState->SpecialRegisters.Idtr.Limit);
420 ProcessorState->SpecialRegisters.MxCsr =
_mm_getcsr();
int strcmp(const char *String1, const char *String2)
#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 unsigned long long __readmsr()
PPC_QUAL void __wbinvd(void)
__INTRIN_INLINE unsigned long __readcr3(void)
__INTRIN_INLINE void __lidt(void *Source)
__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)
FORCEINLINE struct _KPRCB * KeGetCurrentPrcb(VOID)
NTSYSAPI VOID NTAPI RtlCaptureContext(_Out_ PCONTEXT ContextRecord)
#define UNREFERENCED_PARAMETER(P)
#define X86_FEATURE_XSAVE
#define X86_FEATURE_SYSCALL
#define X86_MSR_KERNEL_GSBASE
KAFFINITY KeActiveProcessors
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
BOOLEAN NTAPI KeInvalidateAllCaches(VOID)
NTSTATUS NTAPI KxRestoreFloatingPointState(IN PKFLOATING_SAVE FloatingState)
ULONG NTAPI KiGetCpuVendor(VOID)
volatile LONG KiTbFlushTimeStamp
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[]
ULONG NTAPI KiGetFeatureBits(VOID)
static const CHAR CmpCentaurID[]
VOID NTAPI KiGetCacheInformation(VOID)
union _CPU_SIGNATURE CPU_SIGNATURE
KAFFINITY NTAPI KeQueryActiveProcessors(VOID)
ULONG SecondLevelCacheSize
UCHAR LogicalProcessorsPerPhysicalProcessor
KSPECIAL_REGISTERS SpecialRegisters
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
void _mm_setcsr(unsigned int a)
unsigned int _mm_getcsr(void)