https://git.reactos.org/?p=reactos.git;a=commitdiff;h=47c1dcd023b7f31c8b901…
commit 47c1dcd023b7f31c8b9016477c2652e6ffbb8ac8
Author: Timo Kreuzer <timo.kreuzer(a)reactos.org>
AuthorDate: Sat Aug 26 12:10:04 2023 +0300
Commit: Timo Kreuzer <timo.kreuzer(a)reactos.org>
CommitDate: Tue Oct 3 19:45:44 2023 +0300
[NDK] Update kernel feature bits constants
- Move them into architecture specific headers.
- Add missing constants based on
https://www.geoffchappell.com/studies/windows/km/ntoskrnl/structs/kprcb/fea…
- Yes, they are 64 bits
---
ntoskrnl/ke/amd64/cpu.c | 19 ++++++--------
sdk/include/ndk/amd64/ketypes.h | 56 +++++++++++++++++++++++++++++++++++++++++
sdk/include/ndk/i386/ketypes.h | 46 +++++++++++++++++++++++++++++++++
sdk/include/ndk/ketypes.h | 33 ------------------------
4 files changed, 109 insertions(+), 45 deletions(-)
diff --git a/ntoskrnl/ke/amd64/cpu.c b/ntoskrnl/ke/amd64/cpu.c
index 274320c1b12..075326d91ce 100644
--- a/ntoskrnl/ke/amd64/cpu.c
+++ b/ntoskrnl/ke/amd64/cpu.c
@@ -151,7 +151,7 @@ KiGetFeatureBits(VOID)
{
PKPRCB Prcb = KeGetCurrentPrcb();
ULONG Vendor;
- ULONG FeatureBits = KF_WORKING_PTE;
+ ULONG FeatureBits = 0;
CPU_INFO CpuInfo;
/* Get the Vendor ID */
@@ -167,7 +167,7 @@ KiGetFeatureBits(VOID)
Prcb->InitialApicId = (UCHAR)(CpuInfo.Ebx >> 24);
/* Convert all CPUID Feature bits into our format */
- if (CpuInfo.Edx & X86_FEATURE_VME) FeatureBits |= KF_V86_VIS | KF_CR4;
+ if (CpuInfo.Edx & X86_FEATURE_VME) FeatureBits |= KF_CR4;
if (CpuInfo.Edx & X86_FEATURE_PSE) FeatureBits |= KF_LARGE_PAGE | KF_CR4;
if (CpuInfo.Edx & X86_FEATURE_TSC) FeatureBits |= KF_RDTSC;
if (CpuInfo.Edx & X86_FEATURE_CX8) FeatureBits |= KF_CMPXCHG8B;
@@ -183,11 +183,9 @@ KiGetFeatureBits(VOID)
if (CpuInfo.Edx & X86_FEATURE_SSE2) FeatureBits |= KF_XMMI64;
if (CpuInfo.Ecx & X86_FEATURE_SSE3) FeatureBits |= KF_SSE3;
- //if (CpuInfo.Ecx & X86_FEATURE_MONITOR) FeatureBits |= KF_MONITOR;
- //if (CpuInfo.Ecx & X86_FEATURE_SSSE3) FeatureBits |= KF_SSE3SUP;
+ //if (CpuInfo.Ecx & X86_FEATURE_SSSE3) FeatureBits |= KF_SSSE3;
if (CpuInfo.Ecx & X86_FEATURE_CX16) FeatureBits |= KF_CMPXCHG16B;
- //if (CpuInfo.Ecx & X86_FEATURE_SSE41) FeatureBits |= KF_SSE41;
- //if (CpuInfo.Ecx & X86_FEATURE_POPCNT) FeatureBits |= KF_POPCNT;
+ //if (CpuInfo.Ecx & X86_FEATURE_SSE41) FeatureBits |= KF_SSE4_1;
if (CpuInfo.Ecx & X86_FEATURE_XSAVE) FeatureBits |= KF_XSTATE;
/* Check if the CPU has hyper-threading */
@@ -250,7 +248,7 @@ KiReportCpuFeatures(IN PKPRCB Prcb)
DPRINT1("Supported CPU features: ");
#define print_kf_bit(kf_value) if (Prcb->FeatureBits & kf_value)
DbgPrint(#kf_value " ")
- print_kf_bit(KF_V86_VIS);
+ print_kf_bit(KF_SMEP);
print_kf_bit(KF_RDTSC);
print_kf_bit(KF_CR4);
print_kf_bit(KF_CMOV);
@@ -260,7 +258,6 @@ KiReportCpuFeatures(IN PKPRCB Prcb)
print_kf_bit(KF_CMPXCHG8B);
print_kf_bit(KF_CMPXCHG16B);
print_kf_bit(KF_MMX);
- print_kf_bit(KF_WORKING_PTE);
print_kf_bit(KF_PAT);
print_kf_bit(KF_FXSR);
print_kf_bit(KF_FAST_SYSCALL);
@@ -272,10 +269,8 @@ KiReportCpuFeatures(IN PKPRCB Prcb)
print_kf_bit(KF_NX_DISABLED);
print_kf_bit(KF_NX_ENABLED);
print_kf_bit(KF_SSE3);
- //print_kf_bit(KF_SSE3SUP);
- //print_kf_bit(KF_SSE41);
- //print_kf_bit(KF_MONITOR);
- //print_kf_bit(KF_POPCNT);
+ print_kf_bit(KF_SSSE3);
+ print_kf_bit(KF_SSE4_1);
print_kf_bit(KF_XSTATE);
#undef print_kf_bit
diff --git a/sdk/include/ndk/amd64/ketypes.h b/sdk/include/ndk/amd64/ketypes.h
index e09c0a884ce..553c3bdb956 100644
--- a/sdk/include/ndk/amd64/ketypes.h
+++ b/sdk/include/ndk/amd64/ketypes.h
@@ -24,6 +24,62 @@ Author:
// Dependencies
//
+//
+// Kernel Feature Bits
+// See
https://www.geoffchappell.com/studies/windows/km/ntoskrnl/structs/kprcb/fea…
+//
+#define KF_SMEP 0x00000001 // Win 6.2
+#define KF_RDTSC 0x00000002 // From ks386.inc, ksamd64.inc
+#define KF_CR4 0x00000004 // From ks386.inc, ksamd64.inc
+#define KF_CMOV 0x00000008
+#define KF_GLOBAL_PAGE 0x00000010 // From ks386.inc, ksamd64.inc
+#define KF_LARGE_PAGE 0x00000020 // From ks386.inc, ksamd64.inc
+#define KF_MTRR 0x00000040
+#define KF_CMPXCHG8B 0x00000080 // From ks386.inc, ksamd64.inc
+#define KF_MMX 0x00000100
+#define KF_DTS 0x00000200 // Win 5.2-6.2
+#define KF_PAT 0x00000400
+#define KF_FXSR 0x00000800
+#define KF_FAST_SYSCALL 0x00001000 // From ks386.inc, ksamd64.inc
+#define KF_XMMI 0x00002000 // SSE
+#define KF_3DNOW 0x00004000
+#define KF_AMDK6MTRR 0x00008000 // Win 5.0-6.1
+#define KF_XSAVEOPT 0x00008000 // From KF_XSAVEOPT_BIT
+#define KF_XMMI64 0x00010000 // SSE2
+#define KF_BRANCH 0x00020000 // From ksamd64.inc, Win 6.1-6.2
+#define KF_00040000 0x00040000 // Unclear
+#define KF_SSE3 0x00080000 // Win 6.0+
+#define KF_CMPXCHG16B 0x00100000 // Win 6.0-6.2
+#define KF_AUTHENTICAMD 0x00200000 // Win 6.1+
+#define KF_ACNT2 0x00400000 // Win 6.1+
+#define KF_XSTATE 0x00800000 // From ksamd64.inc, Win 6.1+
+#define KF_GENUINE_INTEL 0x01000000 // Win 6.1+
+#define KF_02000000 0x02000000 // Unclear
+#define KF_SLAT 0x04000000 // Win 6.2+, Intel: EPT supported
+#define KF_VIRT_FIRMWARE_ENABLED 0x08000000 // Win 6.2+
+#define KF_RDWRFSGSBASE 0x10000000 // From ksamd64.inc
KF_RDWRFSGSBASE_BIT (0x1C)
+#define KF_NX_BIT 0x20000000
+#define KF_NX_DISABLED 0x40000000
+#define KF_NX_ENABLED 0x80000000
+#define KF_RDRAND 0x0000000100000000ULL // Win 10.0+
+#define KF_SMAP 0x0000000200000000ULL // From ksamd64.inc
+#define KF_RDTSCP 0x0000000400000000ULL // Win 10.0+
+#define KF_HUGEPAGE 0x0000002000000000ULL // Win 10.0 1607+
+#define KF_XSAVES 0x0000004000000000ULL // From ksamd64.inc KF_XSAVES_BIT
(0x26)
+#define KF_FPU_LEAKAGE 0x0000020000000000ULL // From ksamd64.inc
KF_FPU_LEAKAGE_BIT (0x29)
+#define KF_CAT 0x0000100000000000ULL // From ksamd64.inc KF_CAT_BIT
(0x02C)
+#define KF_CET_SS 0x0000400000000000ULL // From ksamd64.inc
+#define KF_SSSE3 0x0000800000000000ULL
+#define KF_SSE4_1 0x0001000000000000ULL
+#define KF_SSE4_2 0x0002000000000000ULL
+
+#define KF_XSAVEOPT_BIT 15 // From ksamd64.inc (0x0F -> 0x8000)
+#define KF_XSTATE_BIT 23 // From ksamd64.inc (0x17 -> 0x800000)
+#define KF_RDWRFSGSBASE_BIT 28 // From ksamd64.inc (0x1C -> 0x10000000)
+#define KF_XSAVES_BIT 38 // From ksamd64.inc (0x26 -> 0x4000000000)
+#define KF_FPU_LEAKAGE_BIT 41 // From ksamd64.inc (0x29 ->
0x20000000000)
+#define KF_CAT_BIT 44 // From ksamd64.inc (0x2C ->
0x100000000000)
+
//
// KPCR Access for non-IA64 builds
//
diff --git a/sdk/include/ndk/i386/ketypes.h b/sdk/include/ndk/i386/ketypes.h
index 8a9ea4c2ad5..6eb97d81ba0 100644
--- a/sdk/include/ndk/i386/ketypes.h
+++ b/sdk/include/ndk/i386/ketypes.h
@@ -23,6 +23,52 @@ Author:
// Dependencies
//
+//
+// Kernel Feature Bits
+// See
https://www.geoffchappell.com/studies/windows/km/ntoskrnl/structs/kprcb/fea…
+//
+#define KF_V86_VIS 0x00000001 // From ks386.inc
+#define KF_RDTSC 0x00000002 // From ks386.inc, ksamd64.inc
+#define KF_CR4 0x00000004 // From ks386.inc, ksamd64.inc
+#define KF_CMOV 0x00000008
+#define KF_GLOBAL_PAGE 0x00000010 // From ks386.inc, ksamd64.inc
+#define KF_LARGE_PAGE 0x00000020 // From ks386.inc, ksamd64.inc
+#define KF_MTRR 0x00000040
+#define KF_CMPXCHG8B 0x00000080 // From ks386.inc, ksamd64.inc
+#define KF_MMX 0x00000100
+#define KF_WORKING_PTE 0x00000200
+#define KF_PAT 0x00000400
+#define KF_FXSR 0x00000800
+#define KF_FAST_SYSCALL 0x00001000 // From ks386.inc, ksamd64.inc
+#define KF_XMMI 0x00002000 // SSE
+#define KF_3DNOW 0x00004000
+#define KF_AMDK6MTRR 0x00008000 // Win 5.0-6.1
+#define KF_XSAVEOPT 0x00008000 // From KF_XSAVEOPT_BIT
+#define KF_XMMI64 0x00010000 // SSE2
+#define KF_DTS 0x00020000
+#define KF_CLFLUSH 0x00040000 // Win 6.0+
+#define KF_SSE3 0x00080000 // Win 6.0+
+#define KF_AUTHENTICAMD 0x00100000 // Win 6.1+ (family 5+)
+#define KF_ACNT2 0x00200000 // Win 6.1+
+#define KF_XSTATE 0x00400000 // From ks386.inc, Win 6.1+
+#define KF_GENUINE_INTEL 0x00800000 // Win 6.1+
+#define KF_SMEP 0x01000000 // Win 6.2+
+#define KF_RDRAND 0x02000000 // Win 6.3+
+#define KF_SLAT 0x04000000 // Win 6.2+, Intel: EPT supported
+#define KF_08000000 0x08000000 // Win 6.2+
+#define KF_NX_BIT 0x20000000
+#define KF_NX_DISABLED 0x40000000
+#define KF_NX_ENABLED 0x80000000
+#define KF_RDTSCP 0x0000000100000000ULL // Win 10.0+
+#define KF_CLFLUSHOPT 0x0000000200000000ULL // Win 10.0+
+#define KF_HDC 0x0000000400000000ULL // Win 10.0+
+#define KF_FPU_LEAKAGE 0x0000001000000000ULL // From ks386.inc
KF_FPU_LEAKAGE_BIT
+#define KF_SSSE3 0x0000004000000000ULL
+#define KF_SSE4_1 0x0000008000000000ULL
+#define KF_SSE4_2 0x0000010000000000ULL
+
+#define KF_FPU_LEAKAGE_BIT 36 // From ks386.inc (0x24 -> 0x1000000000)
+
//
// KPCR Access for non-IA64 builds
//
diff --git a/sdk/include/ndk/ketypes.h b/sdk/include/ndk/ketypes.h
index d54b9ffa131..37627fc39a4 100644
--- a/sdk/include/ndk/ketypes.h
+++ b/sdk/include/ndk/ketypes.h
@@ -137,39 +137,6 @@ Author:
#define WAIT_QUANTUM_DECREMENT 1
#define CLOCK_QUANTUM_DECREMENT 3
-//
-// Kernel Feature Bits
-//
-#define KF_V86_VIS 0x00000001
-#define KF_RDTSC 0x00000002
-#define KF_CR4 0x00000004
-#define KF_CMOV 0x00000008
-#define KF_GLOBAL_PAGE 0x00000010
-#define KF_LARGE_PAGE 0x00000020
-#define KF_MTRR 0x00000040
-#define KF_CMPXCHG8B 0x00000080
-#define KF_MMX 0x00000100
-#define KF_WORKING_PTE 0x00000200
-#define KF_PAT 0x00000400
-#define KF_FXSR 0x00000800
-#define KF_FAST_SYSCALL 0x00001000
-#define KF_XMMI 0x00002000
-#define KF_3DNOW 0x00004000
-#define KF_AMDK6MTRR 0x00008000
-#define KF_XMMI64 0x00010000
-#define KF_DTS 0x00020000
-#define KF_BRANCH 0x00020000 // from ksamd64.inc
-#define KF_SSE3 0x00080000
-#define KF_CMPXCHG16B 0x00100000
-#define KF_XSTATE 0x00800000 // from ks386.inc, ksamd64.inc
-#define KF_NX_BIT 0x20000000
-#define KF_NX_DISABLED 0x40000000
-#define KF_NX_ENABLED 0x80000000
-
-#define KF_XSAVEOPT_BIT 15
-#define KF_XSTATE_BIT 23
-#define KF_RDWRFSGSBASE_BIT 28
-
//
// Internal Exception Codes
//