ReactOS 0.4.17-dev-1218-gfae4549
Cpuid.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS SDK
3 * LICENSE: MIT (https://spdx.org/licenses/MIT)
4 * PURPOSE: Provides CPUID structure definitions
5 * COPYRIGHT: Copyright 2023 Timo Kreuzer <timo.kreuzer@reactos.org>
6 */
7
8#define CHAR8 char
9
10#include "Intel/Cpuid.h"
11#include "Amd/Cpuid.h"
12
13// CPUID_SIGNATURE (0)
14typedef union
15{
16 INT32 AsInt32[4];
17 struct
18 {
20 CHAR SignatureScrambled[12];
21 };
23
24// CPUID_VERSION_INFO (1)
25typedef union
26{
27 INT32 AsInt32[4];
28 struct
29 {
34 };
36
37// CPUID_CACHE_INFO (2)
38typedef union
39{
40 INT32 AsInt32[4];
41 struct
42 {
47 };
50
51// CPUID_CACHE_PARAMS (4)
52typedef union
53{
54 INT32 AsInt32[4];
55 struct
56 {
61 };
63
64// CPUID_THERMAL_POWER_MANAGEMENT (6)
65typedef union
66{
67 INT32 AsInt32[4];
68 struct
69 {
74 };
75 struct
76 {
79 struct
80 {
82 UINT32 ACNT2 : 1; // See https://en.wikipedia.org/wiki/CPUID
83 } Ecx;
84 } Undoc;
86
87// CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS (0x07)
88typedef union
89{
90 INT32 AsInt32[4];
91 struct
92 {
97 };
99
100// CPUID_EXTENDED_STATE (0x0D)
101// CPUID_EXTENDED_STATE_MAIN_LEAF (0x00)
102typedef union
103{
104 INT32 AsInt32[4];
105 struct
106 {
111 };
113
114// CPUID_EXTENDED_STATE (0x0D)
115// CPUID_EXTENDED_STATE_SUB_LEAF (0x01)
116typedef union
117{
118 INT32 AsInt32[4];
119 struct
120 {
122 struct
123 {
124 UINT32 XSaveAreaSize; // The size in bytes of the XSAVE area containing all states enabled by XCRO | IA32_XSS.
125 } Ebx;
127 UINT32 Edx; // Reports the supported bits of the upper 32 bits of the IA32_XSS MSR. IA32_XSS[n + 32] can be set to 1 only if EDX[n] is 1.
128 };
130
131// CPUID_EXTENDED_STATE (0x0D)
132// CPUID_EXTENDED_STATE_SIZE_OFFSET (0x02 .. 0x1F)
133typedef union
134{
135 INT32 AsInt32[4];
136 struct
137 {
142 };
144
145// CPUID_EXTENDED_FUNCTION (0x80000000)
146typedef union
147{
148 INT32 AsInt32[4];
149 struct
150 {
155 };
157
158// CPUID_EXTENDED_CPU_SIG (0x80000001)
159typedef union
160{
161 INT32 AsInt32[4];
162 struct
163 {
168 } Intel;
169 struct
170 {
175 } Amd;
177
178
179// https://kib.kiev.ua/x86docs/AMD/AMD-CPUID-Spec/25481-r2.34.pdf#G3.2106230
180#define CPUID_L1_TLB_INFO 0x80000005
181
182// https://docs.amd.com/v/u/en-US/24594_3.38_APM_Vol3 (E.4.4 Function 8000_0005h—L1 Cache and TLB Information)
183typedef union
184{
185 struct
186 {
191 } Bits;
194
195typedef union
196{
197 struct
198 {
203 } Bits;
206
207typedef union
208{
209 struct
210 {
215 } Bits;
218
219typedef union
220{
221 struct
222 {
227 } Bits;
230
231typedef union
232{
233 INT32 AsInt32[4];
234 struct
235 {
240 } Intel;
241 struct
242 {
247 } Amd;
248 struct
249 {
250 // Same as AMD, but no TLB info in EAX
251 UINT32 Eax; // Reserved
255 } Via;
257
258// CPUID_EXTENDED_CACHE_INFO (0x80000006)
259// https://docs.amd.com/v/u/en-US/24594_3.38_APM_Vol3 (E.4.5 Function 8000_0006h—L2 Cache and TLB and L3 Cache Information)
260typedef union
261{
262 struct
263 {
268 } Bits;
271
272typedef union
273{
274 struct
275 {
280 } Bits;
283
284typedef union
285{
286 struct
287 {
292 } Bits;
295
296typedef union
297{
298 struct
299 {
305 } Bits;
308
309typedef union
310{
311 INT32 AsInt32[4];
312 struct
313 {
318 };
320
321// Additional AMD specific CPUID:
322// See
323// - AMD64 Architecture Programmer’s Manual Volume 2: System Programming (https://www.amd.com/content/dam/amd/en/documents/processor-tech-docs/programmer-references/24593.pdf)
324// - http://www.flounder.com/cpuid_explorer2.htm#CPUID(0x8000000A)
325// - https://www.spinics.net/lists/kvm/msg279165.html
326// - https://qemu-devel.nongnu.narkive.com/zgmvxGLq/patch-0-3-svm-feature-support-for-qemu
327// - https://github.com/torvalds/linux/blob/28f20a19294da7df158dfca259d0e2b5866baaf9/arch/x86/include/asm/cpufeatures.h#L361
328
329#define CPUID_AMD_SVM_FEATURES 0x8000000A
330
331typedef union
332{
333 struct
334 {
335 UINT SVMRev : 8; // EAX[7..0]
336 UINT Reserved : 24; // EAX[31..8]
337 } Bits;
338
341
342typedef union
343{
344 struct
345 {
346 UINT32 NP : 1; // EDX[0] Nested paging support
347 UINT32 LbrVirt : 1; // EDX[1] LBR virtualization
348 UINT32 SVML : 1; // EDX[2] SVM Lock
349 UINT32 NRIPS : 1; // EDX[3] Next RIP save on VMEXIT
350 UINT32 TscRateMsr : 1; // EDX[4] MSR based TSC ratio control
351 UINT32 VmcbClean : 1; // EDX[5] VMCB Clean bits support
352 UINT32 FlushByAsid : 1; // EDX[6] Flush by ASID support
353 UINT32 DecodeAssists : 1; // EDX[7] Decode assists support
354 UINT32 Reserved1 : 2; // EDX[9:8] Reserved
355 UINT32 PauseFilter : 1; // EDX[10] Pause filter support
356 UINT32 Reserved2 : 1; // EDX[11] Reserved
357 UINT32 PauseFilterThreshold : 1; // EDX[12] Pause filter threshold support
358 UINT32 AVIC : 1; // EDX[13:13] Advanced Virtual Interrupt Controller
359 UINT32 Unknown14 : 1; // EDX[14] Unknown. Described in AMD doc as X2AVIC, but that was probably a typo, since x2AVIC is bit 18.
360 UINT32 VMSAVEVirt : 1; // EDX[15] MSAVE and VMLOAD Virtualization
361 UINT32 VGIF : 1; // EDX[16] Virtual Global-Interrupt Flag
362 UINT32 GMET : 1; // EDX[17] Guest Mode Execute Trap Extension
363 UINT32 x2AVIC : 1; // EDX[18] Virtual x2APIC
364 UINT32 SSSCheck : 1; // EDX[19] AKA SupervisorShadowStack
365 UINT32 V_SPEC_CTRL : 1; // EDX[20] Virtual SPEC_CTRL
366 UINT32 ROGPT : 1; // EDX[21]
367 UINT32 Unknown22 : 1; // EDX[22]
368 UINT32 HOST_MCE_OVERRIDE : 1; // EDX[23]
369 UINT32 TLBSYNC : 1; // EDX[24] TLBSYNC instruction can be intercepted
370 UINT32 VNMI : 1; // EDX[25] NMI Virtualization support
371 UINT32 IbsVirt : 1; // EDX[26] Instruction Based Sampling Virtualization
372 UINT32 LVTReadAllowed : 1; // EDX[27]
373 UINT32 Unknown28 : 1; // EDX[28]
374 UINT32 BusLockThreshold : 1; // EDX[29]
375 } Bits;
376
379
380// CPUID_AMD_SVM_FEATURES (0x8000000A)
381typedef union
382{
383 INT32 AsInt32[4];
384 struct
385 {
390 };
392
393#define CPUID_CACHE_PARAMS_AMD 0x8000001D
unsigned int UINT
Definition: sysinfo.c:13
char CHAR
Definition: pedump.c:57
int32_t INT32
Definition: typedefs.h:58
uint32_t UINT32
Definition: typedefs.h:59
UINT32 L2DTlb2and4MAssoc
EAX[31..28] - DTLB associativity for 2 MB and 4 MB pages.
Definition: Cpuid.h:267
UINT32 L2ITlb2and4MSize
EAX[11..0] - ITLB number of entries for 2 MB and 4 MB pages.
Definition: Cpuid.h:264
UINT32 L2ITlb2and4MAssoc
EAX[15..12] - ITLB associativity for 2 MB and 4 MB pages.
Definition: Cpuid.h:265
UINT32 L2DTlb2and4MSize
EAX[27..16] - DTLB number of entries for 2 MB and 4 MB pages.
Definition: Cpuid.h:266
UINT32 L2DTlb4KSize
EBX[27..16] - DTLB number of entries for 4 KB pages.
Definition: Cpuid.h:278
UINT32 L2DTlb4KAssoc
EBX[31..28] - DTLB associativity for 4 KB pages.
Definition: Cpuid.h:279
UINT32 L2ITlb4KSize
EBX[11..0] - ITLB number of entries for 4 KB pages.
Definition: Cpuid.h:276
UINT32 L2ITlb4KAssoc
EBX[15..12] - ITLB associativity for 4 KB pages.
Definition: Cpuid.h:277
UINT32 L2LineSize
ECX[7..0] - L2 cache line size in bytes.
Definition: Cpuid.h:288
UINT32 L2LinesPerTag
ECX[11..8] - L2 cache lines per tag.
Definition: Cpuid.h:289
UINT32 L2Size
ECX[31..16] - L2 cache size in KB.
Definition: Cpuid.h:291
UINT32 L2Assoc
ECX[15..12] - L2 cache associativity.
Definition: Cpuid.h:290
UINT32 L3LineSize
EDX[7..0] - L3 cache line size in bytes.
Definition: Cpuid.h:300
UINT32 L3Size
EDX[31..18] - L3 cache size in 512 KB.
Definition: Cpuid.h:304
UINT32 L3LinesPerTag
EDX[11..8] - L3 cache lines per tag.
Definition: Cpuid.h:301
UINT32 Reserved
EDX[17..16] - Reserved.
Definition: Cpuid.h:303
UINT32 L3Assoc
EDX[15..12] - L3 cache associativity.
Definition: Cpuid.h:302
CPUID_AMD_EXTENDED_CACHE_INFO_EDX Edx
Definition: Cpuid.h:317
CPUID_AMD_EXTENDED_CACHE_INFO_EBX Ebx
Definition: Cpuid.h:315
CPUID_AMD_EXTENDED_CACHE_INFO_EAX Eax
Definition: Cpuid.h:314
CPUID_AMD_EXTENDED_CACHE_INFO_ECX Ecx
Definition: Cpuid.h:316
UINT32 L1ITlb2and4MAssoc
EAX[15..8] - ITLB associativity for 2 MB and 4 MB pages (0xFF = Fully associative)
Definition: Cpuid.h:188
UINT32 L1ITlb2and4MSize
EAX[7..0] - ITLB number of entries for 2 MB and 4 MB pages.
Definition: Cpuid.h:187
UINT32 L1DTlb2and4MAssoc
EAX[31..24] - DTLB associativity for 2 MB and 4 MB pages (0xFF = Fully associative)
Definition: Cpuid.h:190
UINT32 L1DTlb2and4MSize
EAX[23..16] - DTLB number of entries for 2 MB and 4 MB pages.
Definition: Cpuid.h:189
UINT32 L1ITlb4KAssoc
EBX[15..8] - ITLB associativity for 4 KB pages (0xFF = Fully associative)
Definition: Cpuid.h:200
UINT32 L1DTlb4KAssoc
EBX[31..24] - DTLB associativity for 4 KB pages (0xFF = Fully associative)
Definition: Cpuid.h:202
UINT32 L1ITlb4KSize
EBX[7..0] - ITLB number of entries for 4 KB pages.
Definition: Cpuid.h:199
UINT32 L1DTlb4KSize
EBX[23..16] - DTLB number of entries for 4 KB pages.
Definition: Cpuid.h:201
UINT32 L1DcLineSize
ECX[7..0] - L1 data cache line size in bytes.
Definition: Cpuid.h:211
UINT32 L1DcSize
ECX[31..24] - L1 data cache size in KB.
Definition: Cpuid.h:214
UINT32 L1DcAssoc
ECX[23..16] - L1 data cache associativity (0xFF = Fully associative)
Definition: Cpuid.h:213
UINT32 L1DcLinesPerTag
ECX[15..8]- L1 data cache lines per tag.
Definition: Cpuid.h:212
UINT32 L1IcSize
EDX[31..24] - L1 instruction cache size KB.
Definition: Cpuid.h:226
UINT32 L1IcLineSize
EDX[7..0] - L1 instruction cache line size in bytes.
Definition: Cpuid.h:223
UINT32 L1IcAssoc
EDX[23..16] - L1 instruction cache associativity (0xFF = Fully associative)
Definition: Cpuid.h:225
UINT32 L1IcLinesPerTag
EDX[15..8] - L1 instruction cache lines per tag.
Definition: Cpuid.h:224
CPUID_AMD_SVM_FEATURES_EDX Edx
Definition: Cpuid.h:389
CPUID_AMD_SVM_FEATURES_EAX Eax
Definition: Cpuid.h:386
CPUID_CACHE_INFO_CACHE_TLB Eax
Definition: Cpuid.h:43
CPUID_CACHE_INFO_CACHE_TLB Ecx
Definition: Cpuid.h:45
CPUID_CACHE_INFO_CACHE_TLB Ebx
Definition: Cpuid.h:44
CPUID_CACHE_INFO_CACHE_TLB Edx
Definition: Cpuid.h:46
CPUID_CACHE_PARAMS_EDX Edx
Definition: Cpuid.h:60
CPUID_CACHE_PARAMS_EBX Ebx
Definition: Cpuid.h:58
CPUID_CACHE_PARAMS_EAX Eax
Definition: Cpuid.h:57
CPUID_AMD_EXTENDED_CPU_SIG_ECX Ecx
Definition: Cpuid.h:173
CPUID_AMD_EXTENDED_CPU_SIG_EDX Edx
Definition: Cpuid.h:174
CPUID_AMD_EXTENDED_CPU_SIG_EAX Eax
Definition: Cpuid.h:171
CPUID_EXTENDED_CPU_SIG_EDX Edx
Definition: Cpuid.h:167
CPUID_AMD_EXTENDED_CPU_SIG_EBX Ebx
Definition: Cpuid.h:172
CPUID_EXTENDED_CPU_SIG_ECX Ecx
Definition: Cpuid.h:166
CPUID_EXTENDED_STATE_MAIN_LEAF_EAX Eax
Definition: Cpuid.h:107
CPUID_EXTENDED_STATE_SIZE_OFFSET_ECX Ecx
Definition: Cpuid.h:140
CPUID_EXTENDED_STATE_SUB_LEAF_EAX Eax
Definition: Cpuid.h:121
CPUID_EXTENDED_STATE_SUB_LEAF_ECX Ecx
Definition: Cpuid.h:126
CPUID_AMD_L1_TLB_INFO_ECX Ecx
Definition: Cpuid.h:245
CPUID_AMD_L1_TLB_INFO_EDX Edx
Definition: Cpuid.h:246
CPUID_AMD_L1_TLB_INFO_EAX Eax
Definition: Cpuid.h:243
CPUID_AMD_L1_TLB_INFO_EBX Ebx
Definition: Cpuid.h:244
UINT32 MaxLeaf
Definition: Cpuid.h:19
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_EBX Ebx
Definition: Cpuid.h:94
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_EDX Edx
Definition: Cpuid.h:96
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_ECX Ecx
Definition: Cpuid.h:95
CPUID_THERMAL_POWER_MANAGEMENT_EBX Ebx
Definition: Cpuid.h:71
CPUID_THERMAL_POWER_MANAGEMENT_ECX Ecx
Definition: Cpuid.h:72
CPUID_THERMAL_POWER_MANAGEMENT_EAX Eax
Definition: Cpuid.h:70
CPUID_VERSION_INFO_EAX Eax
Definition: Cpuid.h:30
CPUID_VERSION_INFO_EDX Edx
Definition: Cpuid.h:33
CPUID_VERSION_INFO_ECX Ecx
Definition: Cpuid.h:32
CPUID_VERSION_INFO_EBX Ebx
Definition: Cpuid.h:31