ReactOS
0.4.16-dev-747-gbc52d5f
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)
14
typedef
union
15
{
16
INT32
AsInt32[4];
17
struct
18
{
19
UINT32
MaxLeaf
;
20
CHAR
SignatureScrambled[12];
21
};
22
}
CPUID_SIGNATURE_REGS
;
23
24
// CPUID_VERSION_INFO (1)
25
typedef
union
26
{
27
INT32
AsInt32[4];
28
struct
29
{
30
CPUID_VERSION_INFO_EAX
Eax
;
31
CPUID_VERSION_INFO_EBX
Ebx
;
32
CPUID_VERSION_INFO_ECX
Ecx
;
33
CPUID_VERSION_INFO_EDX
Edx
;
34
};
35
}
CPUID_VERSION_INFO_REGS
;
36
37
// CPUID_EXTENDED_FUNCTION (0x80000000)
38
typedef
union
39
{
40
INT32
AsInt32[4];
41
struct
42
{
43
UINT32
MaxLeaf
;
44
UINT32
ReservedEbx
;
45
UINT32
ReservedEcx
;
46
UINT32
ReservedEdx
;
47
};
48
}
CPUID_EXTENDED_FUNCTION_REGS
;
49
50
// CPUID_THERMAL_POWER_MANAGEMENT (6)
51
typedef
union
52
{
53
INT32
AsInt32[4];
54
struct
55
{
56
CPUID_THERMAL_POWER_MANAGEMENT_EAX
Eax
;
57
CPUID_THERMAL_POWER_MANAGEMENT_EBX
Ebx
;
58
CPUID_THERMAL_POWER_MANAGEMENT_ECX
Ecx
;
59
UINT32
ReservedEdx
;
60
};
61
struct
62
{
63
UINT32
Eax
;
64
UINT32
Ebx
;
65
struct
66
{
67
UINT32
HardwareCoordinationFeedback
: 1;
68
UINT32
ACNT2
: 1;
// See https://en.wikipedia.org/wiki/CPUID
69
} Ecx;
70
} Undoc;
71
}
CPUID_THERMAL_POWER_MANAGEMENT_REGS
;
72
73
// CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS (0x07)
74
typedef
union
75
{
76
INT32
AsInt32[4];
77
struct
78
{
79
UINT32
Eax
;
80
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_EBX
Ebx
;
81
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_ECX
Ecx
;
82
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_EDX
Edx
;
83
};
84
}
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_REGS
;
85
86
// CPUID_EXTENDED_STATE (0x0D)
87
// CPUID_EXTENDED_STATE_MAIN_LEAF (0x00)
88
typedef
union
89
{
90
INT32
AsInt32[4];
91
struct
92
{
93
CPUID_EXTENDED_STATE_MAIN_LEAF_EAX
Eax
;
94
UINT32
Ebx
;
95
UINT32
Ecx
;
96
UINT32
Edx
;
97
};
98
}
CPUID_EXTENDED_STATE_MAIN_LEAF_REGS
;
99
100
// CPUID_EXTENDED_STATE (0x0D)
101
// CPUID_EXTENDED_STATE_SUB_LEAF (0x01)
102
typedef
union
103
{
104
INT32
AsInt32[4];
105
struct
106
{
107
CPUID_EXTENDED_STATE_SUB_LEAF_EAX
Eax
;
108
struct
109
{
110
UINT32
XSaveAreaSize
;
// The size in bytes of the XSAVE area containing all states enabled by XCRO | IA32_XSS.
111
} Ebx;
112
CPUID_EXTENDED_STATE_SUB_LEAF_ECX
Ecx
;
113
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.
114
};
115
}
CPUID_EXTENDED_STATE_SUB_LEAF_REGS
;
116
117
// CPUID_EXTENDED_CPU_SIG (0x80000001)
118
typedef
union
119
{
120
INT32
AsInt32[4];
121
struct
122
{
123
UINT32
Signature
;
124
UINT32
ReservedEbx
;
125
CPUID_EXTENDED_CPU_SIG_ECX
Ecx
;
126
CPUID_EXTENDED_CPU_SIG_EDX
Edx
;
127
} Intel;
128
struct
129
{
130
CPUID_AMD_EXTENDED_CPU_SIG_EAX
Eax
;
131
CPUID_AMD_EXTENDED_CPU_SIG_EBX
Ebx
;
132
CPUID_AMD_EXTENDED_CPU_SIG_ECX
Ecx
;
133
CPUID_AMD_EXTENDED_CPU_SIG_EDX
Edx
;
134
} Amd;
135
}
CPUID_EXTENDED_CPU_SIG_REGS
;
136
137
138
// Additional AMD specific CPUID:
139
// See
140
// - 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)
141
// - http://www.flounder.com/cpuid_explorer2.htm#CPUID(0x8000000A)
142
// - https://www.spinics.net/lists/kvm/msg279165.html
143
// - https://qemu-devel.nongnu.narkive.com/zgmvxGLq/patch-0-3-svm-feature-support-for-qemu
144
// - https://github.com/torvalds/linux/blob/28f20a19294da7df158dfca259d0e2b5866baaf9/arch/x86/include/asm/cpufeatures.h#L361
145
146
#define CPUID_AMD_SVM_FEATURES 0x8000000A
147
148
typedef
union
149
{
150
struct
151
{
152
UINT
SVMRev
: 8;
// EAX[7..0]
153
UINT
Reserved
: 24;
// EAX[31..8]
154
} Bits;
155
156
UINT32
Uint32
;
157
}
CPUID_AMD_SVM_FEATURES_EAX
;
158
159
typedef
union
160
{
161
struct
162
{
163
UINT32
NP
: 1;
// EDX[0] Nested paging support
164
UINT32
LbrVirt
: 1;
// EDX[1] LBR virtualization
165
UINT32
SVML
: 1;
// EDX[2] SVM Lock
166
UINT32
NRIPS
: 1;
// EDX[3] Next RIP save on VMEXIT
167
UINT32
TscRateMsr
: 1;
// EDX[4] MSR based TSC ratio control
168
UINT32
VmcbClean
: 1;
// EDX[5] VMCB Clean bits support
169
UINT32
FlushByAsid
: 1;
// EDX[6] Flush by ASID support
170
UINT32
DecodeAssists
: 1;
// EDX[7] Decode assists support
171
UINT32
Reserved1
: 2;
// EDX[9:8] Reserved
172
UINT32
PauseFilter
: 1;
// EDX[10] Pause filter support
173
UINT32
Reserved2
: 1;
// EDX[11] Reserved
174
UINT32
PauseFilterThreshold
: 1;
// EDX[12] Pause filter threshold support
175
UINT32
AVIC
: 1;
// EDX[13:13] Advanced Virtual Interrupt Controller
176
UINT32
Unknown14
: 1;
// EDX[14] Unknown. Described in AMD doc as X2AVIC, but that was probably a typo, since x2AVIC is bit 18.
177
UINT32
VMSAVEVirt
: 1;
// EDX[15] MSAVE and VMLOAD Virtualization
178
UINT32
VGIF
: 1;
// EDX[16] Virtual Global-Interrupt Flag
179
UINT32
GMET
: 1;
// EDX[17] Guest Mode Execute Trap Extension
180
UINT32
x2AVIC
: 1;
// EDX[18] Virtual x2APIC
181
UINT32
SSSCheck
: 1;
// EDX[19] AKA SupervisorShadowStack
182
UINT32
V_SPEC_CTRL
: 1;
// EDX[20] Virtual SPEC_CTRL
183
UINT32
ROGPT
: 1;
// EDX[21]
184
UINT32
Unknown22
: 1;
// EDX[22]
185
UINT32
HOST_MCE_OVERRIDE
: 1;
// EDX[23]
186
UINT32
TLBSYNC
: 1;
// EDX[24] TLBSYNC instruction can be intercepted
187
UINT32
VNMI
: 1;
// EDX[25] NMI Virtualization support
188
UINT32
IbsVirt
: 1;
// EDX[26] Instruction Based Sampling Virtualization
189
UINT32
LVTReadAllowed
: 1;
// EDX[27]
190
UINT32
Unknown28
: 1;
// EDX[28]
191
UINT32
BusLockThreshold
: 1;
// EDX[29]
192
} Bits;
193
194
UINT32
Uint32
;
195
}
CPUID_AMD_SVM_FEATURES_EDX
;
196
197
// CPUID_AMD_SVM_FEATURES (0x8000000A)
198
typedef
union
199
{
200
INT32
AsInt32[4];
201
struct
202
{
203
CPUID_AMD_SVM_FEATURES_EAX
Eax
;
204
UINT32
NumberOfSupportedASIDs
;
205
UINT32
Ecx
;
206
CPUID_AMD_SVM_FEATURES_EDX
Edx
;
207
};
208
}
CPUID_AMD_SVM_FEATURES_REGS
;
Cpuid.h
Cpuid.h
INT32
signed int INT32
Definition:
ProcessorBind.h:167
UINT32
unsigned int UINT32
Definition:
ProcessorBind.h:163
UINT
unsigned int UINT
Definition:
ndis.h:50
CPUID_AMD_EXTENDED_CPU_SIG_EAX
Definition:
Cpuid.h:64
CPUID_AMD_EXTENDED_CPU_SIG_EBX
Definition:
Cpuid.h:108
CPUID_AMD_EXTENDED_CPU_SIG_ECX
Definition:
Cpuid.h:132
CPUID_AMD_EXTENDED_CPU_SIG_EDX
Definition:
Cpuid.h:256
CPUID_AMD_SVM_FEATURES_EAX
Definition:
Cpuid.h:149
CPUID_AMD_SVM_FEATURES_EAX::Uint32
UINT32 Uint32
Definition:
Cpuid.h:156
CPUID_AMD_SVM_FEATURES_EAX::Reserved
UINT Reserved
Definition:
Cpuid.h:153
CPUID_AMD_SVM_FEATURES_EAX::SVMRev
UINT SVMRev
Definition:
Cpuid.h:152
CPUID_AMD_SVM_FEATURES_EDX
Definition:
Cpuid.h:160
CPUID_AMD_SVM_FEATURES_EDX::Uint32
UINT32 Uint32
Definition:
Cpuid.h:194
CPUID_AMD_SVM_FEATURES_EDX::PauseFilterThreshold
UINT32 PauseFilterThreshold
Definition:
Cpuid.h:174
CPUID_AMD_SVM_FEATURES_EDX::LVTReadAllowed
UINT32 LVTReadAllowed
Definition:
Cpuid.h:189
CPUID_AMD_SVM_FEATURES_EDX::Reserved1
UINT32 Reserved1
Definition:
Cpuid.h:171
CPUID_AMD_SVM_FEATURES_EDX::PauseFilter
UINT32 PauseFilter
Definition:
Cpuid.h:172
CPUID_AMD_SVM_FEATURES_EDX::FlushByAsid
UINT32 FlushByAsid
Definition:
Cpuid.h:169
CPUID_AMD_SVM_FEATURES_EDX::ROGPT
UINT32 ROGPT
Definition:
Cpuid.h:183
CPUID_AMD_SVM_FEATURES_EDX::VMSAVEVirt
UINT32 VMSAVEVirt
Definition:
Cpuid.h:177
CPUID_AMD_SVM_FEATURES_EDX::Unknown22
UINT32 Unknown22
Definition:
Cpuid.h:184
CPUID_AMD_SVM_FEATURES_EDX::LbrVirt
UINT32 LbrVirt
Definition:
Cpuid.h:164
CPUID_AMD_SVM_FEATURES_EDX::Unknown28
UINT32 Unknown28
Definition:
Cpuid.h:190
CPUID_AMD_SVM_FEATURES_EDX::x2AVIC
UINT32 x2AVIC
Definition:
Cpuid.h:180
CPUID_AMD_SVM_FEATURES_EDX::SSSCheck
UINT32 SSSCheck
Definition:
Cpuid.h:181
CPUID_AMD_SVM_FEATURES_EDX::GMET
UINT32 GMET
Definition:
Cpuid.h:179
CPUID_AMD_SVM_FEATURES_EDX::BusLockThreshold
UINT32 BusLockThreshold
Definition:
Cpuid.h:191
CPUID_AMD_SVM_FEATURES_EDX::VNMI
UINT32 VNMI
Definition:
Cpuid.h:187
CPUID_AMD_SVM_FEATURES_EDX::Unknown14
UINT32 Unknown14
Definition:
Cpuid.h:176
CPUID_AMD_SVM_FEATURES_EDX::AVIC
UINT32 AVIC
Definition:
Cpuid.h:175
CPUID_AMD_SVM_FEATURES_EDX::NRIPS
UINT32 NRIPS
Definition:
Cpuid.h:166
CPUID_AMD_SVM_FEATURES_EDX::TscRateMsr
UINT32 TscRateMsr
Definition:
Cpuid.h:167
CPUID_AMD_SVM_FEATURES_EDX::Reserved2
UINT32 Reserved2
Definition:
Cpuid.h:173
CPUID_AMD_SVM_FEATURES_EDX::IbsVirt
UINT32 IbsVirt
Definition:
Cpuid.h:188
CPUID_AMD_SVM_FEATURES_EDX::NP
UINT32 NP
Definition:
Cpuid.h:163
CPUID_AMD_SVM_FEATURES_EDX::V_SPEC_CTRL
UINT32 V_SPEC_CTRL
Definition:
Cpuid.h:182
CPUID_AMD_SVM_FEATURES_EDX::VmcbClean
UINT32 VmcbClean
Definition:
Cpuid.h:168
CPUID_AMD_SVM_FEATURES_EDX::VGIF
UINT32 VGIF
Definition:
Cpuid.h:178
CPUID_AMD_SVM_FEATURES_EDX::TLBSYNC
UINT32 TLBSYNC
Definition:
Cpuid.h:186
CPUID_AMD_SVM_FEATURES_EDX::DecodeAssists
UINT32 DecodeAssists
Definition:
Cpuid.h:170
CPUID_AMD_SVM_FEATURES_EDX::SVML
UINT32 SVML
Definition:
Cpuid.h:165
CPUID_AMD_SVM_FEATURES_EDX::HOST_MCE_OVERRIDE
UINT32 HOST_MCE_OVERRIDE
Definition:
Cpuid.h:185
CPUID_AMD_SVM_FEATURES_REGS
Definition:
Cpuid.h:199
CPUID_AMD_SVM_FEATURES_REGS::Ecx
UINT32 Ecx
Definition:
Cpuid.h:205
CPUID_AMD_SVM_FEATURES_REGS::NumberOfSupportedASIDs
UINT32 NumberOfSupportedASIDs
Definition:
Cpuid.h:204
CPUID_AMD_SVM_FEATURES_REGS::Edx
CPUID_AMD_SVM_FEATURES_EDX Edx
Definition:
Cpuid.h:206
CPUID_AMD_SVM_FEATURES_REGS::Eax
CPUID_AMD_SVM_FEATURES_EAX Eax
Definition:
Cpuid.h:203
CPUID_EXTENDED_CPU_SIG_ECX
Definition:
Cpuid.h:3774
CPUID_EXTENDED_CPU_SIG_EDX
Definition:
Cpuid.h:3805
CPUID_EXTENDED_CPU_SIG_REGS
Definition:
Cpuid.h:119
CPUID_EXTENDED_CPU_SIG_REGS::Ecx
CPUID_AMD_EXTENDED_CPU_SIG_ECX Ecx
Definition:
Cpuid.h:132
CPUID_EXTENDED_CPU_SIG_REGS::Edx
CPUID_AMD_EXTENDED_CPU_SIG_EDX Edx
Definition:
Cpuid.h:133
CPUID_EXTENDED_CPU_SIG_REGS::Eax
CPUID_AMD_EXTENDED_CPU_SIG_EAX Eax
Definition:
Cpuid.h:130
CPUID_EXTENDED_CPU_SIG_REGS::Signature
UINT32 Signature
Definition:
Cpuid.h:123
CPUID_EXTENDED_CPU_SIG_REGS::Edx
CPUID_EXTENDED_CPU_SIG_EDX Edx
Definition:
Cpuid.h:126
CPUID_EXTENDED_CPU_SIG_REGS::ReservedEbx
UINT32 ReservedEbx
Definition:
Cpuid.h:124
CPUID_EXTENDED_CPU_SIG_REGS::Ebx
CPUID_AMD_EXTENDED_CPU_SIG_EBX Ebx
Definition:
Cpuid.h:131
CPUID_EXTENDED_CPU_SIG_REGS::Ecx
CPUID_EXTENDED_CPU_SIG_ECX Ecx
Definition:
Cpuid.h:125
CPUID_EXTENDED_FUNCTION_REGS
Definition:
Cpuid.h:39
CPUID_EXTENDED_FUNCTION_REGS::ReservedEdx
UINT32 ReservedEdx
Definition:
Cpuid.h:46
CPUID_EXTENDED_FUNCTION_REGS::MaxLeaf
UINT32 MaxLeaf
Definition:
Cpuid.h:43
CPUID_EXTENDED_FUNCTION_REGS::ReservedEbx
UINT32 ReservedEbx
Definition:
Cpuid.h:44
CPUID_EXTENDED_FUNCTION_REGS::ReservedEcx
UINT32 ReservedEcx
Definition:
Cpuid.h:45
CPUID_EXTENDED_STATE_MAIN_LEAF_EAX
Definition:
Cpuid.h:1959
CPUID_EXTENDED_STATE_MAIN_LEAF_REGS
Definition:
Cpuid.h:89
CPUID_EXTENDED_STATE_MAIN_LEAF_REGS::Ecx
UINT32 Ecx
Definition:
Cpuid.h:95
CPUID_EXTENDED_STATE_MAIN_LEAF_REGS::Ebx
UINT32 Ebx
Definition:
Cpuid.h:94
CPUID_EXTENDED_STATE_MAIN_LEAF_REGS::Eax
CPUID_EXTENDED_STATE_MAIN_LEAF_EAX Eax
Definition:
Cpuid.h:93
CPUID_EXTENDED_STATE_MAIN_LEAF_REGS::Edx
UINT32 Edx
Definition:
Cpuid.h:96
CPUID_EXTENDED_STATE_SUB_LEAF_EAX
Definition:
Cpuid.h:2039
CPUID_EXTENDED_STATE_SUB_LEAF_ECX
Definition:
Cpuid.h:2072
CPUID_EXTENDED_STATE_SUB_LEAF_REGS
Definition:
Cpuid.h:103
CPUID_EXTENDED_STATE_SUB_LEAF_REGS::Eax
CPUID_EXTENDED_STATE_SUB_LEAF_EAX Eax
Definition:
Cpuid.h:107
CPUID_EXTENDED_STATE_SUB_LEAF_REGS::XSaveAreaSize
UINT32 XSaveAreaSize
Definition:
Cpuid.h:110
CPUID_EXTENDED_STATE_SUB_LEAF_REGS::Edx
UINT32 Edx
Definition:
Cpuid.h:113
CPUID_EXTENDED_STATE_SUB_LEAF_REGS::Ecx
CPUID_EXTENDED_STATE_SUB_LEAF_ECX Ecx
Definition:
Cpuid.h:112
CPUID_SIGNATURE_REGS
Definition:
Cpuid.h:15
CPUID_SIGNATURE_REGS::MaxLeaf
UINT32 MaxLeaf
Definition:
Cpuid.h:19
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_EBX
Definition:
Cpuid.h:1313
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_ECX
Definition:
Cpuid.h:1466
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_EDX
Definition:
Cpuid.h:1535
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_REGS
Definition:
Cpuid.h:75
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_REGS::Ebx
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_EBX Ebx
Definition:
Cpuid.h:80
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_REGS::Edx
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_EDX Edx
Definition:
Cpuid.h:82
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_REGS::Eax
UINT32 Eax
Definition:
Cpuid.h:79
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_REGS::Ecx
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_ECX Ecx
Definition:
Cpuid.h:81
CPUID_THERMAL_POWER_MANAGEMENT_EAX
Definition:
Cpuid.h:1120
CPUID_THERMAL_POWER_MANAGEMENT_EBX
Definition:
Cpuid.h:1215
CPUID_THERMAL_POWER_MANAGEMENT_ECX
Definition:
Cpuid.h:1236
CPUID_THERMAL_POWER_MANAGEMENT_REGS
Definition:
Cpuid.h:52
CPUID_THERMAL_POWER_MANAGEMENT_REGS::Ebx
UINT32 Ebx
Definition:
Cpuid.h:64
CPUID_THERMAL_POWER_MANAGEMENT_REGS::HardwareCoordinationFeedback
UINT32 HardwareCoordinationFeedback
Definition:
Cpuid.h:67
CPUID_THERMAL_POWER_MANAGEMENT_REGS::Eax
UINT32 Eax
Definition:
Cpuid.h:63
CPUID_THERMAL_POWER_MANAGEMENT_REGS::Ebx
CPUID_THERMAL_POWER_MANAGEMENT_EBX Ebx
Definition:
Cpuid.h:57
CPUID_THERMAL_POWER_MANAGEMENT_REGS::Ecx
CPUID_THERMAL_POWER_MANAGEMENT_ECX Ecx
Definition:
Cpuid.h:58
CPUID_THERMAL_POWER_MANAGEMENT_REGS::ACNT2
UINT32 ACNT2
Definition:
Cpuid.h:68
CPUID_THERMAL_POWER_MANAGEMENT_REGS::ReservedEdx
UINT32 ReservedEdx
Definition:
Cpuid.h:59
CPUID_THERMAL_POWER_MANAGEMENT_REGS::Eax
CPUID_THERMAL_POWER_MANAGEMENT_EAX Eax
Definition:
Cpuid.h:56
CPUID_VERSION_INFO_EAX
Definition:
Cpuid.h:87
CPUID_VERSION_INFO_EBX
Definition:
Cpuid.h:121
CPUID_VERSION_INFO_ECX
Definition:
Cpuid.h:165
CPUID_VERSION_INFO_EDX
Definition:
Cpuid.h:340
CPUID_VERSION_INFO_REGS
Definition:
Cpuid.h:26
CPUID_VERSION_INFO_REGS::Eax
CPUID_VERSION_INFO_EAX Eax
Definition:
Cpuid.h:30
CPUID_VERSION_INFO_REGS::Edx
CPUID_VERSION_INFO_EDX Edx
Definition:
Cpuid.h:33
CPUID_VERSION_INFO_REGS::Ecx
CPUID_VERSION_INFO_ECX Ecx
Definition:
Cpuid.h:32
CPUID_VERSION_INFO_REGS::Ebx
CPUID_VERSION_INFO_EBX Ebx
Definition:
Cpuid.h:31
CHAR
char CHAR
Definition:
xmlstorage.h:175
sdk
include
reactos
x86x64
Cpuid.h
Generated on Fri Feb 14 2025 06:13:10 for ReactOS by
1.9.6