~ubuntu-branches/ubuntu/quantal/open-vm-tools/quantal-201210021442

« back to all changes in this revision

Viewing changes to lib/include/x86cpuid.h

  • Committer: Bazaar Package Importer
  • Author(s): Serge Hallyn
  • Date: 2011-03-31 14:20:05 UTC
  • mfrom: (1.4.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20110331142005-3n9red91p7ogkweo
Tags: 2011.03.28-387002-0ubuntu1
* Merge latest upstream git tag.  This has the unlocked_ioctl change
  needed to fix dkms build failures (LP: #727342)
* Changes in debian/rules:
  - work around a bug in toolbox/Makefile, where install-exec-hook is
    not happening.  This needs to get fixed the right way.
  - don't install 'vmware-user' which seems to no longer exist
  - move /etc/xdg into open-vm-toolbox (which should be done using .install)
* debian/open-vm-tools.init: add 'modprobe [-r] vmblock'. (LP: #332323)
* debian/rules and debian/open-vm-toolbox.lintian-overrides:
  - Make vmware-user-suid-wrapper suid-root (LP: #332323)

Show diffs side-by-side

added added

removed removed

Lines of Context:
114
114
   CPUIDLEVEL(TRUE,  0,  0)                     \
115
115
   CPUIDLEVEL(TRUE,  1,  1)                     \
116
116
   CPUIDLEVEL(FALSE, 5,  5)                     \
 
117
   CPUIDLEVEL(TRUE,  7,  7)                     \
 
118
   CPUIDLEVEL(FALSE, A,  0xA)                   \
 
119
   CPUIDLEVEL(TRUE,  D,  0xD)                   \
117
120
   CPUIDLEVEL(FALSE,400, 0x40000000)            \
118
121
   CPUIDLEVEL(FALSE,410, 0x40000010)            \
119
122
   CPUIDLEVEL(FALSE, 80, 0x80000000)            \
125
128
#define CPUID_UNCACHED_LEVELS                   \
126
129
   CPUIDLEVEL(FALSE, 4, 4)                      \
127
130
   CPUIDLEVEL(FALSE, 6, 6)                      \
128
 
   CPUIDLEVEL(FALSE, A, 0xA)                    \
129
131
   CPUIDLEVEL(FALSE, B, 0xB)                    \
130
 
   CPUIDLEVEL(FALSE, 86, 0x80000006)
 
132
   CPUIDLEVEL(FALSE, 85, 0x80000005)            \
 
133
   CPUIDLEVEL(FALSE, 86, 0x80000006)            \
 
134
   CPUIDLEVEL(FALSE, 819, 0x80000019)           \
 
135
   CPUIDLEVEL(FALSE, 81A, 0x8000001A)           \
 
136
   CPUIDLEVEL(FALSE, 81B, 0x8000001B)           \
 
137
   CPUIDLEVEL(FALSE, 81C, 0x8000001C)           \
 
138
   CPUIDLEVEL(FALSE, 81D, 0x8000001D)           \
 
139
   CPUIDLEVEL(FALSE, 81E, 0x8000001E)
131
140
 
132
141
#define CPUID_ALL_LEVELS                        \
133
142
   CPUID_CACHED_LEVELS                          \
167
176
#define CPUID_AMD_VENDOR_STRING         "AuthcAMDenti"
168
177
#define CPUID_CYRIX_VENDOR_STRING       "CyriteadxIns"
169
178
#define CPUID_VIA_VENDOR_STRING         "CentaulsaurH"
 
179
 
170
180
#define CPUID_HYPERV_HYPERVISOR_VENDOR_STRING  "Microsoft Hv"
171
181
#define CPUID_KVM_HYPERVISOR_VENDOR_STRING     "KVMKVMKVM\0\0\0"
172
182
#define CPUID_VMWARE_HYPERVISOR_VENDOR_STRING  "VMwareVMware"
173
183
#define CPUID_XEN_HYPERVISOR_VENDOR_STRING     "XenVMMXenVMM"
 
184
 
174
185
#define CPUID_INTEL_VENDOR_STRING_FIXED "GenuineIntel"
175
186
#define CPUID_AMD_VENDOR_STRING_FIXED   "AuthenticAMD"
176
187
#define CPUID_CYRIX_VENDOR_STRING_FIXED "CyrixInstead"
177
188
#define CPUID_VIA_VENDOR_STRING_FIXED   "CentaurHauls"
178
189
 
179
190
/*
180
 
 * FIELDDEF can be defined to process the CPUID information provided
 
191
 * FIELD can be defined to process the CPUID information provided
181
192
 * in the following CPUID_FIELD_DATA macro.  The first parameter is
182
193
 * the CPUID level of the feature (must be defined in
183
194
 * CPUID_ALL_LEVELS, above.  The second parameter is the CPUID result
196
207
 * being used by usermode code (TRUE), or just CPL0 kernel code
197
208
 * (FALSE).
198
209
 *
199
 
 * FIELDDEFA takes a ninth parameter: the name used when generating
200
 
 * accessor functions in lib/public/cpuidInfoFuncs.h.
201
 
 *
202
 
 * FLAGDEF/FLAGDEFA is defined identically to fields, but their
203
 
 * accessors are more appropriate for 1-bit flags, and compile-time
204
 
 * asserts enforce that the size is 1 bit wide.
 
210
 * FLAG is defined identically to FIELD, but its accessors are more
 
211
 * appropriate for 1-bit flags, and compile-time asserts enforce that
 
212
 * the size is 1 bit wide.
205
213
 */
206
214
 
207
215
 
254
262
} CpuidFieldSupported;
255
263
 
256
264
 
257
 
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,       MON SUPP, CPL3, [FUNC] */
 
265
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,                   MON SUPP, CPL3 */
258
266
#define CPUID_FIELD_DATA_LEVEL_0                                               \
259
 
FIELDDEF(  0, EAX, COMMON,  0, 32, NUMLEVELS,           ANY, FALSE)     \
260
 
FIELDDEF(  0, EBX, COMMON,  0, 32, VENDOR1,             YES, TRUE)      \
261
 
FIELDDEF(  0, ECX, COMMON,  0, 32, VENDOR3,             YES, TRUE)      \
262
 
FIELDDEF(  0, EDX, COMMON,  0, 32, VENDOR2,             YES, TRUE)
 
267
FIELD(  0, EAX, COMMON,  0, 32, NUMLEVELS,                         ANY, FALSE) \
 
268
FIELD(  0, EBX, COMMON,  0, 32, VENDOR1,                           YES, TRUE)  \
 
269
FIELD(  0, ECX, COMMON,  0, 32, VENDOR3,                           YES, TRUE)  \
 
270
FIELD(  0, EDX, COMMON,  0, 32, VENDOR2,                           YES, TRUE)
263
271
                                                        
264
 
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,       MON SUPP, CPL3, [FUNC] */
 
272
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,                   MON SUPP, CPL3 */
265
273
#define CPUID_FIELD_DATA_LEVEL_1                                               \
266
 
FIELDDEFA( 1, EAX, COMMON,  0,  4, STEPPING,            ANY, FALSE, STEPPING)  \
267
 
FIELDDEFA( 1, EAX, COMMON,  4,  4, MODEL,               ANY, FALSE, MODEL)     \
268
 
FIELDDEFA( 1, EAX, COMMON,  8,  4, FAMILY,              YES, FALSE, FAMILY)    \
269
 
FIELDDEF(  1, EAX, COMMON, 12,  2, TYPE,                ANY, FALSE)            \
270
 
FIELDDEFA( 1, EAX, COMMON, 16,  4, EXTMODEL,            ANY, FALSE, EXT_MODEL) \
271
 
FIELDDEFA( 1, EAX, COMMON, 20,  8, EXTFAMILY,           YES, FALSE, EXT_FAMILY) \
272
 
FIELDDEF(  1, EBX, COMMON,  0,  8, BRAND_ID,            ANY, FALSE)            \
273
 
FIELDDEF(  1, EBX, COMMON,  8,  8, CLFL_SIZE,           ANY, FALSE)            \
274
 
FIELDDEFA( 1, EBX, COMMON, 16,  8, LCPU_COUNT,          ANY, FALSE, LCPU_COUNT) \
275
 
FIELDDEFA( 1, EBX, COMMON, 24,  8, APICID,              ANY, FALSE, APICID)    \
276
 
FLAGDEFA(  1, ECX, COMMON, 0,   1, SSE3,                YES, TRUE,  SSE3)      \
277
 
FLAGDEFA(  1, ECX, INTEL,  1,   1, PCLMULQDQ,           YES, TRUE, PCLMULQDQ)  \
278
 
FLAGDEF(   1, ECX, INTEL,  2,   1, NDA2,                NO,  FALSE)            \
279
 
FLAGDEFA(  1, ECX, COMMON, 3,   1, MWAIT,               ANY, FALSE, MWAIT)     \
280
 
FLAGDEFA(  1, ECX, INTEL,  4,   1, DSCPL,               NO,  FALSE, DSCPL)     \
281
 
FLAGDEFA(  1, ECX, INTEL,  5,   1, VMX,                 YES, FALSE, VMX)       \
282
 
FLAGDEF(   1, ECX, VIA,    5,   1, VMX,                 YES, FALSE)            \
283
 
FLAGDEF(   1, ECX, INTEL,  6,   1, SMX,                 NO,  FALSE)            \
284
 
FLAGDEF(   1, ECX, INTEL,  7,   1, EST,                 NO,  FALSE)            \
285
 
FLAGDEF(   1, ECX, INTEL,  8,   1, TM2,                 NO,  FALSE)            \
286
 
FLAGDEFA(  1, ECX, COMMON, 9,   1, SSSE3,               YES, TRUE,  SSSE3)     \
287
 
FLAGDEF(   1, ECX, INTEL,  10,  1, HTCACHE,             NO,  FALSE)            \
288
 
FLAGDEFA(  1, ECX, INTEL,  12,  1, FMA,                 NO,  TRUE,  FMA)       \
289
 
FLAGDEFA(  1, ECX, COMMON, 13,  1, CMPX16,              YES, TRUE,  CMPX16)    \
290
 
FLAGDEF(   1, ECX, INTEL,  14,  1, xPPR,                NO,  FALSE)            \
291
 
FLAGDEF(   1, ECX, INTEL,  15,  1, PERF_MSR,            NO,  FALSE)            \
292
 
FLAGDEF(   1, ECX, INTEL,  17,  1, PCID,                NO,  FALSE)            \
293
 
FLAGDEF(   1, ECX, INTEL,  18,  1, DCA,                 NO,  FALSE)            \
294
 
FLAGDEFA(  1, ECX, INTEL,  19,  1, SSE41,               YES, TRUE,  SSE41)     \
295
 
FLAGDEFA(  1, ECX, INTEL,  20,  1, SSE42,               YES, TRUE,  SSE42)     \
296
 
FLAGDEF(   1, ECX, INTEL,  21,  1, X2APIC,              NO,  FALSE)            \
297
 
FLAGDEFA(  1, ECX, INTEL,  22,  1, MOVBE,               YES, TRUE,  MOVBE)     \
298
 
FLAGDEFA(  1, ECX, COMMON, 23,  1, POPCNT,              YES, TRUE,  POPCNT)    \
299
 
FLAGDEF(   1, ECX, INTEL,  24,  1, ULE,                 NO,  TRUE)             \
300
 
FLAGDEFA(  1, ECX, INTEL,  25,  1, AES,                 YES, TRUE, AES)        \
301
 
FLAGDEFA(  1, ECX, INTEL,  26,  1, XSAVE,               NO,  FALSE, XSAVE)     \
302
 
FLAGDEF(   1, ECX, INTEL,  27,  1, OSXSAVE,             NO,  TRUE)             \
303
 
FLAGDEFA(  1, ECX, INTEL,  28,  1, AVX,                 NO,  TRUE,  AVX)       \
304
 
FLAGDEFA(  1, ECX, COMMON, 31,  1, HYPERVISOR,          ANY, FALSE, HYPERVISOR)\
305
 
FLAGDEFA(  1, EDX, COMMON, 0,   1, FPU,                 YES, TRUE, FPU)        \
306
 
FLAGDEFA(  1, EDX, COMMON, 1,   1, VME,                 YES, FALSE, VME)       \
307
 
FLAGDEF(   1, EDX, COMMON, 2,   1, DBGE,                YES, FALSE)            \
308
 
FLAGDEF(   1, EDX, COMMON, 3,   1, PGSZE,               YES, FALSE)            \
309
 
FLAGDEFA(  1, EDX, COMMON, 4,   1, TSC,                 YES, TRUE, TSC)        \
310
 
FLAGDEF(   1, EDX, COMMON, 5,   1, MSR,                 YES, FALSE)            \
311
 
FLAGDEFA(  1, EDX, COMMON, 6,   1, PAE,                 YES, FALSE, PAE)       \
312
 
FLAGDEF(   1, EDX, COMMON, 7,   1, MCK,                 YES, FALSE)            \
313
 
FLAGDEF(   1, EDX, COMMON, 8,   1, CPMX,                YES, TRUE)             \
314
 
FLAGDEFA(  1, EDX, COMMON, 9,   1, APIC,                ANY, FALSE, APIC)      \
315
 
FLAGDEFA(  1, EDX, COMMON, 11,  1, SEP,                 YES, TRUE,  SEP)       \
316
 
FLAGDEFA(  1, EDX, COMMON, 12,  1, MTRR,                YES, FALSE, MTRR)      \
317
 
FLAGDEFA(  1, EDX, COMMON, 13,  1, PGE,                 YES, FALSE, PGE)       \
318
 
FLAGDEFA(  1, EDX, COMMON, 14,  1, MCA,                 YES, FALSE, MCA)       \
319
 
FLAGDEFA(  1, EDX, COMMON, 15,  1, CMOV,                YES, TRUE,  CMOV)      \
320
 
FLAGDEFA(  1, EDX, COMMON, 16,  1, PAT,                 YES, FALSE, PAT)       \
321
 
FLAGDEF(   1, EDX, COMMON, 17,  1, 36PG,                YES, FALSE)            \
322
 
FLAGDEF(   1, EDX, INTEL,  18,  1, PSN,                 YES, FALSE)            \
323
 
FLAGDEFA(  1, EDX, COMMON, 19,  1, CLFL,                YES, TRUE,  CLFL)      \
324
 
FLAGDEF(   1, EDX, INTEL,  21,  1, DTES,                YES, FALSE)            \
325
 
FLAGDEF(   1, EDX, INTEL,  22,  1, ACPI,                YES, FALSE)            \
326
 
FLAGDEFA(  1, EDX, COMMON, 23,  1, MMX,                 YES, TRUE,  MMX)       \
327
 
FLAGDEFA(  1, EDX, COMMON, 24,  1, FXSAVE,              YES, TRUE,  FXSAVE)    \
328
 
FLAGDEFA(  1, EDX, COMMON, 25,  1, SSE,                 YES, TRUE,  SSE)       \
329
 
FLAGDEFA(  1, EDX, COMMON, 26,  1, SSE2,                YES, TRUE,  SSE2)      \
330
 
FLAGDEF(   1, EDX, INTEL,  27,  1, SS,                  YES, FALSE)            \
331
 
FLAGDEFA(  1, EDX, COMMON, 28,  1, HT,                  ANY, FALSE, HT)        \
332
 
FLAGDEF(   1, EDX, INTEL,  29,  1, TM,                  NO,  FALSE)            \
333
 
FLAGDEF(   1, EDX, INTEL,  30,  1, IA64,                NO,  FALSE)            \
334
 
FLAGDEF(   1, EDX, INTEL,  31,  1, PBE,                 NO,  FALSE)
 
274
FIELD(  1, EAX, COMMON,  0,  4, STEPPING,                          ANY, FALSE) \
 
275
FIELD(  1, EAX, COMMON,  4,  4, MODEL,                             ANY, FALSE) \
 
276
FIELD(  1, EAX, COMMON,  8,  4, FAMILY,                            YES, FALSE) \
 
277
FIELD(  1, EAX, COMMON, 12,  2, TYPE,                              ANY, FALSE) \
 
278
FIELD(  1, EAX, COMMON, 16,  4, EXTENDED_MODEL,                    ANY, FALSE) \
 
279
FIELD(  1, EAX, COMMON, 20,  8, EXTENDED_FAMILY,                   YES, FALSE) \
 
280
FIELD(  1, EBX, COMMON,  0,  8, BRAND_ID,                          ANY, FALSE) \
 
281
FIELD(  1, EBX, COMMON,  8,  8, CLFL_SIZE,                         ANY, FALSE) \
 
282
FIELD(  1, EBX, COMMON, 16,  8, LCPU_COUNT,                        ANY, FALSE) \
 
283
FIELD(  1, EBX, COMMON, 24,  8, APICID,                            ANY, FALSE) \
 
284
FLAG(   1, ECX, COMMON, 0,   1, SSE3,                              YES, TRUE)  \
 
285
FLAG(   1, ECX, COMMON, 1,   1, PCLMULQDQ,                         YES, TRUE)  \
 
286
FLAG(   1, ECX, INTEL,  2,   1, DTES64,                            NO,  FALSE) \
 
287
FLAG(   1, ECX, COMMON, 3,   1, MWAIT,                             ANY, FALSE) \
 
288
FLAG(   1, ECX, INTEL,  4,   1, DSCPL,                             NO,  FALSE) \
 
289
FLAG(   1, ECX, INTEL,  5,   1, VMX,                               YES, FALSE) \
 
290
FLAG(   1, ECX, VIA,    5,   1, VIA_VMX,                           YES, FALSE) \
 
291
FLAG(   1, ECX, INTEL,  6,   1, SMX,                               NO,  FALSE) \
 
292
FLAG(   1, ECX, INTEL,  7,   1, EIST,                              NO,  FALSE) \
 
293
FLAG(   1, ECX, INTEL,  8,   1, TM2,                               NO,  FALSE) \
 
294
FLAG(   1, ECX, COMMON, 9,   1, SSSE3,                             YES, TRUE)  \
 
295
FLAG(   1, ECX, INTEL,  10,  1, CNXTID,                            NO,  FALSE) \
 
296
FLAG(   1, ECX, INTEL,  11,  1, NDA11,                             NO,  FALSE) \
 
297
FLAG(   1, ECX, COMMON, 12,  1, FMA,                               YES, TRUE)  \
 
298
FLAG(   1, ECX, COMMON, 13,  1, CMPXCHG16B,                        YES, TRUE)  \
 
299
FLAG(   1, ECX, INTEL,  14,  1, xTPR,                              NO,  FALSE) \
 
300
FLAG(   1, ECX, INTEL,  15,  1, PDCM,                              NO,  FALSE) \
 
301
FLAG(   1, ECX, INTEL,  17,  1, PCID,                              YES, FALSE) \
 
302
FLAG(   1, ECX, INTEL,  18,  1, DCA,                               NO,  FALSE) \
 
303
FLAG(   1, ECX, COMMON, 19,  1, SSE41,                             YES, TRUE)  \
 
304
FLAG(   1, ECX, COMMON, 20,  1, SSE42,                             YES, TRUE)  \
 
305
FLAG(   1, ECX, INTEL,  21,  1, x2APIC,                            NO,  FALSE) \
 
306
FLAG(   1, ECX, INTEL,  22,  1, MOVBE,                             YES, TRUE)  \
 
307
FLAG(   1, ECX, COMMON, 23,  1, POPCNT,                            YES, TRUE)  \
 
308
FLAG(   1, ECX, COMMON, 24,  1, TSC_DEADLINE,                      NO,  FALSE) \
 
309
FLAG(   1, ECX, COMMON, 25,  1, AES,                               YES, TRUE)  \
 
310
FLAG(   1, ECX, COMMON, 26,  1, XSAVE,                             YES, FALSE) \
 
311
FLAG(   1, ECX, COMMON, 27,  1, OSXSAVE,                           ANY, FALSE) \
 
312
FLAG(   1, ECX, COMMON, 28,  1, AVX,                               YES, TRUE)  \
 
313
FLAG(   1, ECX, COMMON, 29,  1, F16,                               YES, TRUE)  \
 
314
FLAG(   1, ECX, COMMON, 30,  1, RDRAND,                            YES, TRUE)  \
 
315
FLAG(   1, ECX, COMMON, 31,  1, HYPERVISOR,                        ANY, FALSE) \
 
316
FLAG(   1, EDX, COMMON, 0,   1, FPU,                               YES, TRUE)  \
 
317
FLAG(   1, EDX, COMMON, 1,   1, VME,                               YES, FALSE) \
 
318
FLAG(   1, EDX, COMMON, 2,   1, DE,                                YES, FALSE) \
 
319
FLAG(   1, EDX, COMMON, 3,   1, PSE,                               YES, FALSE) \
 
320
FLAG(   1, EDX, COMMON, 4,   1, TSC,                               YES, TRUE)  \
 
321
FLAG(   1, EDX, COMMON, 5,   1, MSR,                               YES, FALSE) \
 
322
FLAG(   1, EDX, COMMON, 6,   1, PAE,                               YES, FALSE) \
 
323
FLAG(   1, EDX, COMMON, 7,   1, MCE,                               YES, FALSE) \
 
324
FLAG(   1, EDX, COMMON, 8,   1, CX8,                               YES, TRUE)  \
 
325
FLAG(   1, EDX, COMMON, 9,   1, APIC,                              ANY, FALSE) \
 
326
FLAG(   1, EDX, COMMON, 11,  1, SEP,                               YES, TRUE)  \
 
327
FLAG(   1, EDX, COMMON, 12,  1, MTRR,                              YES, FALSE) \
 
328
FLAG(   1, EDX, COMMON, 13,  1, PGE,                               YES, FALSE) \
 
329
FLAG(   1, EDX, COMMON, 14,  1, MCA,                               YES, FALSE) \
 
330
FLAG(   1, EDX, COMMON, 15,  1, CMOV,                              YES, TRUE)  \
 
331
FLAG(   1, EDX, COMMON, 16,  1, PAT,                               YES, FALSE) \
 
332
FLAG(   1, EDX, COMMON, 17,  1, PSE36,                             YES, FALSE) \
 
333
FLAG(   1, EDX, INTEL,  18,  1, PSN,                               YES, FALSE) \
 
334
FLAG(   1, EDX, COMMON, 19,  1, CLFSH,                             YES, TRUE)  \
 
335
FLAG(   1, EDX, INTEL,  21,  1, DS,                                YES, FALSE) \
 
336
FLAG(   1, EDX, INTEL,  22,  1, ACPI,                              YES, FALSE) \
 
337
FLAG(   1, EDX, COMMON, 23,  1, MMX,                               YES, TRUE)  \
 
338
FLAG(   1, EDX, COMMON, 24,  1, FXSR,                              YES, TRUE)  \
 
339
FLAG(   1, EDX, COMMON, 25,  1, SSE,                               YES, TRUE)  \
 
340
FLAG(   1, EDX, COMMON, 26,  1, SSE2,                              YES, TRUE)  \
 
341
FLAG(   1, EDX, INTEL,  27,  1, SS,                                YES, FALSE) \
 
342
FLAG(   1, EDX, COMMON, 28,  1, HTT,                               ANY, FALSE) \
 
343
FLAG(   1, EDX, INTEL,  29,  1, TM,                                NO,  FALSE) \
 
344
FLAG(   1, EDX, INTEL,  30,  1, IA64,                              NO,  FALSE) \
 
345
FLAG(   1, EDX, INTEL,  31,  1, PBE,                               NO,  FALSE)
335
346
 
336
 
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,       MON SUPP, CPL3, [FUNC] */
 
347
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,                   MON SUPP, CPL3 */
337
348
#define CPUID_FIELD_DATA_LEVEL_4                                               \
338
 
FIELDDEF(  4, EAX, INTEL,   0,  5, CACHE_TYPE,          NA,  FALSE)            \
339
 
FIELDDEF(  4, EAX, INTEL,   5,  3, CACHE_LEVEL,         NA,  FALSE)            \
340
 
FLAGDEF(   4, EAX, INTEL,   8,  1, CACHE_SELF_INIT,     NA,  FALSE)            \
341
 
FLAGDEF(   4, EAX, INTEL,   9,  1, CACHE_FULLY_ASSOC,   NA,  FALSE)            \
342
 
FIELDDEF(  4, EAX, INTEL,  14, 12, CACHE_NUMHT_SHARING, NA,  FALSE)            \
343
 
FIELDDEFA( 4, EAX, INTEL,  26,  6, CORE_COUNT,          NA,  FALSE, INTEL_CORE_COUNT)  \
344
 
FIELDDEF(  4, EBX, INTEL,   0, 12, CACHE_LINE,          NA,  FALSE)            \
345
 
FIELDDEF(  4, EBX, INTEL,  12, 10, CACHE_PART,          NA,  FALSE)            \
346
 
FIELDDEF(  4, EBX, INTEL,  22, 10, CACHE_WAYS,          NA,  FALSE)            \
347
 
FIELDDEF(  4, ECX, INTEL,   0, 32, CACHE_SETS,          NA,  FALSE)            \
348
 
FLAGDEF(   4, EDX, INTEL,   0,  1, CACHE_WBINVD_NOT_GUARANTEED, NA,  FALSE)    \
349
 
FLAGDEF(   4, EDX, INTEL,   1,  1, CACHE_IS_INCLUSIVE,  NA,  FALSE)
350
 
 
351
 
/*     LEVEL, REG, VENDOR, POS, SIZE, NAME,       MON SUPP, CPL3, [FUNC] */
352
 
#define CPUID_FIELD_DATA_LEVEL_5                                           \
353
 
FIELDDEFA( 5, EAX, COMMON,  0, 16, MWAIT_MIN_SIZE,      NA,  FALSE, MWAIT_MIN_SIZE) \
354
 
FIELDDEFA( 5, EBX, COMMON,  0, 16, MWAIT_MAX_SIZE,      NA,  FALSE, MWAIT_MAX_SIZE) \
355
 
FLAGDEF(   5, ECX, COMMON,  0,  1, MWAIT_EXTENSIONS,    NA,  FALSE) \
356
 
FLAGDEFA(  5, ECX, COMMON,  1,  1, MWAIT_INTR_BREAK,    NA,  FALSE, MWAIT_INTR_BREAK) \
357
 
FIELDDEF(  5, EDX, INTEL,   0,  4, MWAIT_C0_SUBSTATE,   NA,  FALSE) \
358
 
FIELDDEF(  5, EDX, INTEL,   4,  4, MWAIT_C1_SUBSTATE,   NA,  FALSE) \
359
 
FIELDDEF(  5, EDX, INTEL,   8,  4, MWAIT_C2_SUBSTATE,   NA,  FALSE) \
360
 
FIELDDEF(  5, EDX, INTEL,  12,  4, MWAIT_C3_SUBSTATE,   NA,  FALSE) \
361
 
FIELDDEF(  5, EDX, INTEL,  16,  4, MWAIT_C4_SUBSTATE,   NA,  FALSE)
362
 
 
363
 
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,       MON SUPP, CPL3, [FUNC] */
 
349
FIELD(  4, EAX, INTEL,   0,  5, LEAF4_CACHE_TYPE,                  NA,  FALSE) \
 
350
FIELD(  4, EAX, INTEL,   5,  3, LEAF4_CACHE_LEVEL,                 NA,  FALSE) \
 
351
FLAG(   4, EAX, INTEL,   8,  1, LEAF4_CACHE_SELF_INIT,             NA,  FALSE) \
 
352
FLAG(   4, EAX, INTEL,   9,  1, LEAF4_CACHE_FULLY_ASSOC,           NA,  FALSE) \
 
353
FIELD(  4, EAX, INTEL,  14, 12, LEAF4_CACHE_NUMHT_SHARING,         NA,  FALSE) \
 
354
FIELD(  4, EAX, INTEL,  26,  6, LEAF4_CORE_COUNT,                  NA,  FALSE) \
 
355
FIELD(  4, EBX, INTEL,   0, 12, LEAF4_CACHE_LINE,                  NA,  FALSE) \
 
356
FIELD(  4, EBX, INTEL,  12, 10, LEAF4_CACHE_PART,                  NA,  FALSE) \
 
357
FIELD(  4, EBX, INTEL,  22, 10, LEAF4_CACHE_WAYS,                  NA,  FALSE) \
 
358
FIELD(  4, ECX, INTEL,   0, 32, LEAF4_CACHE_SETS,                  NA,  FALSE) \
 
359
FLAG(   4, EDX, INTEL,   0,  1, LEAF4_CACHE_WBINVD_NOT_GUARANTEED, NA,  FALSE) \
 
360
FLAG(   4, EDX, INTEL,   1,  1, LEAF4_CACHE_IS_INCLUSIVE,          NA,  FALSE)
 
361
 
 
362
/*     LEVEL, REG, VENDOR, POS, SIZE, NAME,                   MON SUPP, CPL3 */
 
363
#define CPUID_FIELD_DATA_LEVEL_5                                               \
 
364
FIELD(  5, EAX, COMMON,  0, 16, MWAIT_MIN_SIZE,                    NA,  FALSE) \
 
365
FIELD(  5, EBX, COMMON,  0, 16, MWAIT_MAX_SIZE,                    NA,  FALSE) \
 
366
FLAG(   5, ECX, COMMON,  0,  1, MWAIT_EXTENSIONS,                  NA,  FALSE) \
 
367
FLAG(   5, ECX, COMMON,  1,  1, MWAIT_INTR_BREAK,                  NA,  FALSE) \
 
368
FIELD(  5, EDX, INTEL,   0,  4, MWAIT_C0_SUBSTATE,                 NA,  FALSE) \
 
369
FIELD(  5, EDX, INTEL,   4,  4, MWAIT_C1_SUBSTATE,                 NA,  FALSE) \
 
370
FIELD(  5, EDX, INTEL,   8,  4, MWAIT_C2_SUBSTATE,                 NA,  FALSE) \
 
371
FIELD(  5, EDX, INTEL,  12,  4, MWAIT_C3_SUBSTATE,                 NA,  FALSE) \
 
372
FIELD(  5, EDX, INTEL,  16,  4, MWAIT_C4_SUBSTATE,                 NA,  FALSE)
 
373
 
 
374
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,                   MON SUPP, CPL3 */
364
375
#define CPUID_FIELD_DATA_LEVEL_6                                               \
365
 
FLAGDEF(   6, EAX, INTEL,   0,  1, THERMAL_SENSOR,      NA,  FALSE)     \
366
 
FLAGDEF(   6, EAX, INTEL,   1,  1, TURBO_MODE,          NA,  FALSE)     \
367
 
FIELDDEF(  6, EBX, INTEL,   0,  4, NUM_INTR_THRESHOLDS, NA,  FALSE)     \
368
 
FLAGDEF(   6, ECX, INTEL,   0,  1, HW_COORD_FEEDBACK,   NA,  FALSE)     \
369
 
FLAGDEF(   6, ECX, INTEL,   3,  1, ENERGY_PERF_BIAS,    NA,  FALSE)
370
 
 
371
 
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,       MON SUPP, CPL3, [FUNC] */
 
376
FLAG(   6, EAX, INTEL,   0,  1, THERMAL_SENSOR,                    NA,  FALSE) \
 
377
FLAG(   6, EAX, INTEL,   1,  1, TURBO_MODE,                        NA,  FALSE) \
 
378
FLAG(   6, EAX, INTEL,   2,  1, APIC_INVARIANT,                    NA,  FALSE) \
 
379
FIELD(  6, EBX, INTEL,   0,  4, NUM_INTR_THRESHOLDS,               NA,  FALSE) \
 
380
FLAG(   6, ECX, INTEL,   0,  1, HW_COORD_FEEDBACK,                 NA,  FALSE) \
 
381
FLAG(   6, ECX, INTEL,   3,  1, ENERGY_PERF_BIAS,                  NA,  FALSE)
 
382
 
 
383
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,                   MON SUPP, CPL3 */
 
384
#define CPUID_FIELD_DATA_LEVEL_7                                               \
 
385
FLAG(   7, EBX, INTEL,   0,  1, FSGSBASE,                          YES, TRUE)  \
 
386
FLAG(   7, EBX, INTEL,   7,  1, SMEP,                              NO,  FALSE) \
 
387
FLAG(   7, EBX, INTEL,   9,  1, ENFSTRG,                           YES, TRUE)
 
388
 
 
389
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,                   MON SUPP, CPL3 */
372
390
#define CPUID_FIELD_DATA_LEVEL_A                                               \
373
 
FIELDDEFA( A, EAX, INTEL,   0,  8, PMC_VERSION,         NA,  FALSE, PMC_VERSION) \
374
 
FIELDDEFA( A, EAX, INTEL,   8,  8, NUM_PMCS,            NA,  FALSE, NUM_PMCS)  \
375
 
FIELDDEF(  A, EAX, INTEL,  16,  8, PMC_BIT_WIDTH,       NA,  FALSE)            \
376
 
FIELDDEFA( A, EAX, INTEL,  24,  8, PMC_EBX_LENGTH,      NA,  FALSE, PMC_EBX_LENGTH) \
377
 
FLAGDEF(   A, EBX, INTEL,   0,  1, PMC_CORE_CYCLE,      NA,  FALSE)            \
378
 
FLAGDEF(   A, EBX, INTEL,   1,  1, PMC_INSTR_RETIRED,   NA,  FALSE)            \
379
 
FLAGDEF(   A, EBX, INTEL,   2,  1, PMC_REF_CYCLES,      NA,  FALSE)            \
380
 
FLAGDEF(   A, EBX, INTEL,   3,  1, PMC_LAST_LVL_CREF,   NA,  FALSE)            \
381
 
FLAGDEF(   A, EBX, INTEL,   4,  1, PMC_LAST_LVL_CMISS,  NA,  FALSE)            \
382
 
FLAGDEF(   A, EBX, INTEL,   5,  1, PMC_BR_INST_RETIRED, NA,  FALSE)            \
383
 
FLAGDEF(   A, EBX, INTEL,   6,  1, PMC_BR_MISS_RETIRED, NA,  FALSE)            \
384
 
FIELDDEF(  A, EDX, INTEL,   0,  5, PMC_FIXED_NUM,       NA,  FALSE)            \
385
 
FIELDDEF(  A, EDX, INTEL,   5,  8, PMC_FIXED_SIZE,      NA,  FALSE)
 
391
FIELD(  A, EAX, INTEL,   0,  8, PMC_VERSION,                       NA,  FALSE) \
 
392
FIELD(  A, EAX, INTEL,   8,  8, PMC_NUM_GEN,                       NA,  FALSE) \
 
393
FIELD(  A, EAX, INTEL,  16,  8, PMC_WIDTH_GEN,                     NA,  FALSE) \
 
394
FIELD(  A, EAX, INTEL,  24,  8, PMC_EBX_LENGTH,                    NA,  FALSE) \
 
395
FLAG(   A, EBX, INTEL,   0,  1, PMC_CORE_CYCLES,                   NA,  FALSE) \
 
396
FLAG(   A, EBX, INTEL,   1,  1, PMC_INSTR_RETIRED,                 NA,  FALSE) \
 
397
FLAG(   A, EBX, INTEL,   2,  1, PMC_REF_CYCLES,                    NA,  FALSE) \
 
398
FLAG(   A, EBX, INTEL,   3,  1, PMC_LAST_LVL_CREF,                 NA,  FALSE) \
 
399
FLAG(   A, EBX, INTEL,   4,  1, PMC_LAST_LVL_CMISS,                NA,  FALSE) \
 
400
FLAG(   A, EBX, INTEL,   5,  1, PMC_BR_INST_RETIRED,               NA,  FALSE) \
 
401
FLAG(   A, EBX, INTEL,   6,  1, PMC_BR_MISS_RETIRED,               NA,  FALSE) \
 
402
FIELD(  A, EDX, INTEL,   0,  5, PMC_NUM_FIXED,                     NA,  FALSE) \
 
403
FIELD(  A, EDX, INTEL,   5,  8, PMC_WIDTH_FIXED,                   NA,  FALSE)
386
404
 
387
 
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,       MON SUPP, CPL3, [FUNC] */
 
405
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,                   MON SUPP, CPL3 */
388
406
#define CPUID_FIELD_DATA_LEVEL_B                                               \
389
 
FIELDDEF(  B, EAX, INTEL,   0,  5, MASK_WIDTH,          NA,  FALSE)            \
390
 
FIELDDEF(  B, EBX, INTEL,   0, 16, CPUS_SHARING_LEVEL,  NA,  FALSE)            \
391
 
FIELDDEF(  B, ECX, INTEL,   0,  8, LEVEL_NUMBER,        NA,  FALSE)            \
392
 
FIELDDEF(  B, ECX, INTEL,   8,  8, LEVEL_TYPE,          NA,  FALSE)            \
393
 
FIELDDEF(  B, EDX, INTEL,   0, 32, X2APIC_ID,           NA,  FALSE)
394
 
 
395
 
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,       MON SUPP, CPL3, [FUNC] */
 
407
FIELD(  B, EAX, INTEL,   0,  5, MASK_WIDTH,                        NA,  FALSE) \
 
408
FIELD(  B, EBX, INTEL,   0, 16, CPUS_SHARING_LEVEL,                NA,  FALSE) \
 
409
FIELD(  B, ECX, INTEL,   0,  8, LEVEL_NUMBER,                      NA,  FALSE) \
 
410
FIELD(  B, ECX, INTEL,   8,  8, LEVEL_TYPE,                        NA,  FALSE) \
 
411
FIELD(  B, EDX, INTEL,   0, 32, X2APIC_ID,                         NA,  FALSE)
 
412
 
 
413
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,                   MON SUPP, CPL3 */
 
414
#define CPUID_FIELD_DATA_LEVEL_D                                               \
 
415
FLAG(   D, EAX, COMMON,  0,  1, XCR0_MASTER_LEGACY_FP,             YES, FALSE) \
 
416
FLAG(   D, EAX, COMMON,  1,  1, XCR0_MASTER_SSE,                   YES, FALSE) \
 
417
FLAG(   D, EAX, COMMON,  2,  1, XCR0_MASTER_YMM_H,                 YES, FALSE) \
 
418
FIELD(  D, EAX, COMMON,  3, 29, XCR0_MASTER_LOWER,                 NO,  FALSE) \
 
419
FIELD(  D, EBX, COMMON,  0, 32, XSAVE_ENABLED_SIZE,                YES, FALSE) \
 
420
FIELD(  D, ECX, COMMON,  0, 32, XSAVE_MAX_SIZE,                    YES, FALSE) \
 
421
FIELD(  D, EDX, COMMON,  0, 32, XCR0_MASTER_UPPER,                 NO,  FALSE)
 
422
 
 
423
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,                   MON SUPP, CPL3 */
396
424
#define CPUID_FIELD_DATA_LEVEL_400                                             \
397
 
FIELDDEF(400, EAX, COMMON,  0, 32, NUM_HYP_LEVELS,      NA,  FALSE)            \
398
 
FIELDDEF(400, EBX, COMMON,  0, 32, HYPERVISOR1,         NA,  FALSE)            \
399
 
FIELDDEF(400, ECX, COMMON,  0, 32, HYPERVISOR2,         NA,  FALSE)            \
400
 
FIELDDEF(400, EDX, COMMON,  0, 32, HYPERVISOR3,         NA,  FALSE)
 
425
FIELD(400, EAX, COMMON,  0, 32, NUM_HYP_LEVELS,                    NA,  FALSE) \
 
426
FIELD(400, EBX, COMMON,  0, 32, HYPERVISOR1,                       NA,  FALSE) \
 
427
FIELD(400, ECX, COMMON,  0, 32, HYPERVISOR2,                       NA,  FALSE) \
 
428
FIELD(400, EDX, COMMON,  0, 32, HYPERVISOR3,                       NA,  FALSE)
401
429
 
402
 
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,       MON SUPP, CPL3, [FUNC] */
 
430
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,                   MON SUPP, CPL3 */
403
431
#define CPUID_FIELD_DATA_LEVEL_410                                             \
404
 
FIELDDEF(410, EAX, COMMON,  0, 32, TSC_HZ,              NA,  FALSE)            \
405
 
FIELDDEF(410, EBX, COMMON,  0, 32, ACPIBUS_HZ,          NA,  FALSE)
 
432
FIELD(410, EAX, COMMON,  0, 32, TSC_HZ,                            NA,  FALSE) \
 
433
FIELD(410, EBX, COMMON,  0, 32, ACPIBUS_HZ,                        NA,  FALSE)
406
434
 
407
 
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,       MON SUPP, CPL3, [FUNC] */
 
435
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,                   MON SUPP, CPL3 */
408
436
#define CPUID_FIELD_DATA_LEVEL_80                                              \
409
 
FIELDDEF( 80, EAX, COMMON,  0, 32, NUM_EXT_LEVELS,      NA,  FALSE)            \
410
 
FIELDDEF( 80, EBX, AMD,     0, 32, AMD_VENDOR1,         NA,  FALSE)            \
411
 
FIELDDEF( 80, ECX, AMD,     0, 32, AMD_VENDOR3,         NA,  FALSE)            \
412
 
FIELDDEF( 80, EDX, AMD,     0, 32, AMD_VENDOR2,         NA,  FALSE)
 
437
FIELD( 80, EAX, COMMON,  0, 32, NUM_EXT_LEVELS,                    NA,  FALSE) \
 
438
FIELD( 80, EBX, AMD,     0, 32, LEAF80_VENDOR1,                    NA,  FALSE) \
 
439
FIELD( 80, ECX, AMD,     0, 32, LEAF80_VENDOR3,                    NA,  FALSE) \
 
440
FIELD( 80, EDX, AMD,     0, 32, LEAF80_VENDOR2,                    NA,  FALSE)
413
441
                                                        
414
 
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,       MON SUPP, CPL3, [FUNC] */
 
442
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,                   MON SUPP, CPL3 */
415
443
#define CPUID_FIELD_DATA_LEVEL_81                                              \
416
 
FIELDDEF( 81, EAX, INTEL,   0, 32, UNKNOWN81EAX,        ANY, FALSE)            \
417
 
FIELDDEF( 81, EAX, AMD,     0,  4, STEPPING,            ANY, FALSE)            \
418
 
FIELDDEF( 81, EAX, AMD,     4,  4, MODEL,               ANY, FALSE)            \
419
 
FIELDDEF( 81, EAX, AMD,     8,  4, FAMILY,              ANY, FALSE)            \
420
 
FIELDDEF( 81, EAX, AMD,    12,  2, TYPE,                ANY, FALSE)            \
421
 
FIELDDEF( 81, EAX, AMD,    16,  4, EXTMODEL,            ANY, FALSE)            \
422
 
FIELDDEF( 81, EAX, AMD,    20,  8, EXTFAMILY,           ANY, FALSE)            \
423
 
FIELDDEF( 81, EBX, INTEL,   0, 32, UNKNOWN81EBX,        ANY, FALSE)            \
424
 
FIELDDEF( 81, EBX, AMD,     0, 16, BRAND_ID,            ANY, FALSE)            \
425
 
FIELDDEF( 81, EBX, AMD,    16, 16, UNDEF,               ANY, FALSE)            \
426
 
FLAGDEFA( 81, ECX, COMMON,  0,  1, LAHF,                YES, TRUE,  LAHF64)    \
427
 
FLAGDEFA( 81, ECX, AMD,     1,  1, CMPLEGACY,           NO,  FALSE, CMPLEGACY) \
428
 
FLAGDEFA( 81, ECX, AMD,     2,  1, SVM,                 YES, FALSE, SVM)       \
429
 
FLAGDEFA( 81, ECX, AMD,     3,  1, EXTAPICSPC,          YES, FALSE, EXTAPICSPC) \
430
 
FLAGDEFA( 81, ECX, AMD,     4,  1, CR8AVAIL,            NO,  FALSE, CR8AVAIL)  \
431
 
FLAGDEFA( 81, ECX, AMD,     5,  1, ABM,                 YES, TRUE,  ABM)       \
432
 
FLAGDEFA( 81, ECX, AMD,     6,  1, SSE4A,               YES, TRUE,  SSE4A)     \
433
 
FLAGDEF(  81, ECX, AMD,     7,  1, MISALIGNED_SSE,      YES, TRUE)             \
434
 
FLAGDEFA( 81, ECX, AMD,     8,  1, 3DNPREFETCH,         YES, TRUE, 3DNPREFETCH) \
435
 
FLAGDEF(  81, ECX, AMD,     9,  1, OSVW,                NO,  FALSE)            \
436
 
FLAGDEF(  81, ECX, AMD,    10,  1, IBS,                 NO,  FALSE)            \
437
 
FLAGDEF(  81, ECX, AMD,    11,  1, SSE5,                NO,  TRUE)             \
438
 
FLAGDEF(  81, ECX, AMD,    12,  1, SKINIT,              NO,  FALSE)            \
439
 
FLAGDEF(  81, ECX, AMD,    13,  1, WATCHDOG,            NO,  FALSE)            \
440
 
FLAGDEF(  81, ECX, AMD,    19,  1, NODEID,              NO,  FALSE)            \
441
 
FLAGDEF(  81, EDX, AMD,     0,  1, FPU,                 YES, TRUE)             \
442
 
FLAGDEF(  81, EDX, AMD,     1,  1, VME,                 YES, FALSE)            \
443
 
FLAGDEF(  81, EDX, AMD,     2,  1, DBGE,                YES, FALSE)            \
444
 
FLAGDEF(  81, EDX, AMD,     3,  1, PGSZE,               YES, FALSE)            \
445
 
FLAGDEF(  81, EDX, AMD,     4,  1, TSC,                 YES, TRUE)             \
446
 
FLAGDEF(  81, EDX, AMD,     5,  1, MSR,                 YES, FALSE)            \
447
 
FLAGDEF(  81, EDX, AMD,     6,  1, PAE,                 YES, FALSE)            \
448
 
FLAGDEF(  81, EDX, AMD,     7,  1, MCK,                 YES, FALSE)            \
449
 
FLAGDEF(  81, EDX, AMD,     8,  1, CPMX,                YES, TRUE)             \
450
 
FLAGDEF(  81, EDX, AMD,     9,  1, APIC,                ANY, FALSE)            \
451
 
FLAGDEFA( 81, EDX, COMMON, 11,  1, SYSC,                ANY, TRUE, SYSC)       \
452
 
FLAGDEF(  81, EDX, AMD,    12,  1, MTRR,                YES, FALSE)            \
453
 
FLAGDEF(  81, EDX, AMD,    13,  1, PGE,                 YES, FALSE)            \
454
 
FLAGDEF(  81, EDX, AMD,    14,  1, MCA,                 YES, FALSE)            \
455
 
FLAGDEF(  81, EDX, AMD,    15,  1, CMOV,                YES, TRUE)             \
456
 
FLAGDEF(  81, EDX, AMD,    16,  1, PAT,                 YES, FALSE)            \
457
 
FLAGDEF(  81, EDX, AMD,    17,  1, 36PG,                YES, FALSE)            \
458
 
FLAGDEFA( 81, EDX, COMMON, 20,  1, NX,                  YES, FALSE, NX)        \
459
 
FLAGDEFA( 81, EDX, AMD,    22,  1, MMXEXT,              YES, TRUE,  MMXEXT)    \
460
 
FLAGDEF(  81, EDX, AMD,    23,  1, MMX,                 YES, TRUE)             \
461
 
FLAGDEF(  81, EDX, AMD,    24,  1, FXSAVE,              YES, TRUE)             \
462
 
FLAGDEFA( 81, EDX, AMD,    25,  1, FFXSR,               YES, FALSE, FFXSR)     \
463
 
FLAGDEF(  81, EDX, COMMON, 26,  1, PDPE1GB,             NO,  FALSE)            \
464
 
FLAGDEFA( 81, EDX, COMMON, 27,  1, RDTSCP,              YES, TRUE,  RDTSCP)    \
465
 
FLAGDEFA( 81, EDX, COMMON, 29,  1, LM,                  YES, FALSE, LM) \
466
 
FLAGDEFA( 81, EDX, AMD,    30,  1, 3DNOWPLUS,           YES, TRUE,  3DNOWPLUS) \
467
 
FLAGDEFA( 81, EDX, AMD,    31,  1, 3DNOW,               YES, TRUE,  3DNOW)
 
444
FIELD( 81, EAX, INTEL,   0, 32, UNKNOWN81EAX,                      ANY, FALSE) \
 
445
FIELD( 81, EAX, AMD,     0,  4, LEAF81_STEPPING,                   ANY, FALSE) \
 
446
FIELD( 81, EAX, AMD,     4,  4, LEAF81_MODEL,                      ANY, FALSE) \
 
447
FIELD( 81, EAX, AMD,     8,  4, LEAF81_FAMILY,                     ANY, FALSE) \
 
448
FIELD( 81, EAX, AMD,    12,  2, LEAF81_TYPE,                       ANY, FALSE) \
 
449
FIELD( 81, EAX, AMD,    16,  4, LEAF81_EXTENDED_MODEL,             ANY, FALSE) \
 
450
FIELD( 81, EAX, AMD,    20,  8, LEAF81_EXTENDED_FAMILY,            ANY, FALSE) \
 
451
FIELD( 81, EBX, INTEL,   0, 32, UNKNOWN81EBX,                      ANY, FALSE) \
 
452
FIELD( 81, EBX, AMD,     0, 16, LEAF81_BRAND_ID,                   ANY, FALSE) \
 
453
FIELD( 81, EBX, AMD,    16, 16, UNDEF,                             ANY, FALSE) \
 
454
FLAG(  81, ECX, COMMON,  0,  1, LAHF64,                            YES, TRUE)  \
 
455
FLAG(  81, ECX, AMD,     1,  1, CMPLEGACY,                         NO,  FALSE) \
 
456
FLAG(  81, ECX, AMD,     2,  1, SVM,                               YES, FALSE) \
 
457
FLAG(  81, ECX, AMD,     3,  1, EXTAPICSPC,                        YES, FALSE) \
 
458
FLAG(  81, ECX, AMD,     4,  1, CR8AVAIL,                          NO,  FALSE) \
 
459
FLAG(  81, ECX, AMD,     5,  1, ABM,                               YES, TRUE)  \
 
460
FLAG(  81, ECX, AMD,     6,  1, SSE4A,                             YES, TRUE)  \
 
461
FLAG(  81, ECX, AMD,     7,  1, MISALIGNED_SSE,                    YES, TRUE)  \
 
462
FLAG(  81, ECX, AMD,     8,  1, 3DNPREFETCH,                       YES, TRUE)  \
 
463
FLAG(  81, ECX, AMD,     9,  1, OSVW,                              ANY, FALSE) \
 
464
FLAG(  81, ECX, AMD,    10,  1, IBS,                               NO,  FALSE) \
 
465
FLAG(  81, ECX, AMD,    11,  1, XOP,                               YES, TRUE)  \
 
466
FLAG(  81, ECX, AMD,    12,  1, SKINIT,                            NO,  FALSE) \
 
467
FLAG(  81, ECX, AMD,    13,  1, WATCHDOG,                          NO,  FALSE) \
 
468
FLAG(  81, ECX, AMD,    15,  1, LWP,                               NO,  FALSE) \
 
469
FLAG(  81, ECX, AMD,    16,  1, FMA4,                              YES, TRUE)  \
 
470
FLAG(  81, ECX, AMD,    19,  1, NODEID,                            NO,  FALSE) \
 
471
FLAG(  81, ECX, AMD,    22,  1, TOPOLOGY,                          NO,  FALSE) \
 
472
FLAG(  81, EDX, AMD,     0,  1, LEAF81_FPU,                        YES, TRUE)  \
 
473
FLAG(  81, EDX, AMD,     1,  1, LEAF81_VME,                        YES, FALSE) \
 
474
FLAG(  81, EDX, AMD,     2,  1, LEAF81_DE,                         YES, FALSE) \
 
475
FLAG(  81, EDX, AMD,     3,  1, LEAF81_PSE,                        YES, FALSE) \
 
476
FLAG(  81, EDX, AMD,     4,  1, LEAF81_TSC,                        YES, TRUE)  \
 
477
FLAG(  81, EDX, AMD,     5,  1, LEAF81_MSR,                        YES, FALSE) \
 
478
FLAG(  81, EDX, AMD,     6,  1, LEAF81_PAE,                        YES, FALSE) \
 
479
FLAG(  81, EDX, AMD,     7,  1, LEAF81_MCE,                        YES, FALSE) \
 
480
FLAG(  81, EDX, AMD,     8,  1, LEAF81_CX8,                        YES, TRUE)  \
 
481
FLAG(  81, EDX, AMD,     9,  1, LEAF81_APIC,                       ANY, FALSE) \
 
482
FLAG(  81, EDX, COMMON, 11,  1, SYSC,                              ANY, TRUE)  \
 
483
FLAG(  81, EDX, AMD,    12,  1, LEAF81_MTRR,                       YES, FALSE) \
 
484
FLAG(  81, EDX, AMD,    13,  1, LEAF81_PGE,                        YES, FALSE) \
 
485
FLAG(  81, EDX, AMD,    14,  1, LEAF81_MCA,                        YES, FALSE) \
 
486
FLAG(  81, EDX, AMD,    15,  1, LEAF81_CMOV,                       YES, TRUE)  \
 
487
FLAG(  81, EDX, AMD,    16,  1, LEAF81_PAT,                        YES, FALSE) \
 
488
FLAG(  81, EDX, AMD,    17,  1, LEAF81_PSE36,                      YES, FALSE) \
 
489
FLAG(  81, EDX, COMMON, 20,  1, NX,                                YES, FALSE) \
 
490
FLAG(  81, EDX, AMD,    22,  1, MMXEXT,                            YES, TRUE)  \
 
491
FLAG(  81, EDX, AMD,    23,  1, LEAF81_MMX,                        YES, TRUE)  \
 
492
FLAG(  81, EDX, AMD,    24,  1, LEAF81_FXSR,                       YES, TRUE)  \
 
493
FLAG(  81, EDX, AMD,    25,  1, FFXSR,                             YES, FALSE) \
 
494
FLAG(  81, EDX, COMMON, 26,  1, PDPE1GB,                           YES, FALSE) \
 
495
FLAG(  81, EDX, COMMON, 27,  1, RDTSCP,                            YES, TRUE)  \
 
496
FLAG(  81, EDX, COMMON, 29,  1, LM,                                YES, FALSE) \
 
497
FLAG(  81, EDX, AMD,    30,  1, 3DNOWPLUS,                         YES, TRUE)  \
 
498
FLAG(  81, EDX, AMD,    31,  1, 3DNOW,                             YES, TRUE)
468
499
 
469
 
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,       MON SUPP, CPL3, [FUNC] */
 
500
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,                   MON SUPP, CPL3 */
470
501
#define CPUID_FIELD_DATA_LEVEL_8x                                              \
471
 
FIELDDEF( 86, ECX, AMD,     0,  8, L2CACHE_LINE,        NA,  FALSE)            \
472
 
FIELDDEF( 86, ECX, AMD,     8,  4, L2CACHE_LINE_PER_TAG, NA, FALSE)            \
473
 
FIELDDEF( 86, ECX, AMD,    12,  4, L2CACHE_WAYS,        NA,  FALSE)            \
474
 
FIELDDEF( 86, ECX, AMD,    16, 16, L2CACHE_SIZE,        NA,  FALSE)            \
475
 
FIELDDEF( 86, EDX, AMD,     0,  8, L3CACHE_LINE,        NA,  FALSE)            \
476
 
FIELDDEF( 86, EDX, AMD,     8,  4, L3CACHE_LINE_PER_TAG,NA,  FALSE)            \
477
 
FIELDDEF( 86, EDX, AMD,    12,  4, L3CACHE_WAYS,        NA,  FALSE)            \
478
 
FIELDDEF( 86, EDX, AMD,    18, 14, L3CACHE_SIZE,        NA,  FALSE)            \
479
 
FLAGDEF(  87, EDX, AMD,     0,  1, TS,                  NA,  FALSE)            \
480
 
FLAGDEF(  87, EDX, AMD,     1,  1, FID,                 NA,  FALSE)            \
481
 
FLAGDEF(  87, EDX, AMD,     2,  1, VID,                 NA,  FALSE)            \
482
 
FLAGDEF(  87, EDX, AMD,     3,  1, TTP,                 NA,  FALSE)            \
483
 
FLAGDEF(  87, EDX, AMD,     4,  1, TM,                  NA,  FALSE)            \
484
 
FLAGDEF(  87, EDX, AMD,     5,  1, STC,                 NA,  FALSE)            \
485
 
FLAGDEF(  87, EDX, AMD,     6,  1, 100MHZSTEPS,         NA,  FALSE)            \
486
 
FLAGDEF(  87, EDX, AMD,     7,  1, HWPSTATE,            NA,  FALSE)            \
487
 
FLAGDEF(  87, EDX, COMMON,  8,  1, TSC_INVARIANT,       NA,  FALSE)            \
488
 
FIELDDEFA(88, EAX, COMMON,  0,  8, PHYSBITS,            NA,  FALSE, PHYS_BITS) \
489
 
FIELDDEFA(88, EAX, COMMON,  8,  8, VIRTBITS,            NA,  FALSE, VIRT_BITS) \
490
 
FIELDDEFA(88, ECX, AMD,     0,  8, CORE_COUNT,          NA,  FALSE, AMD_CORE_COUNT) \
491
 
FIELDDEFA(88, ECX, AMD,    12,  4, APICID_COREID_SIZE,  NA,  FALSE, AMD_APICID_COREID_SIZE) \
492
 
FIELDDEFA(8A, EAX, AMD,     0,  8, SVM_REVISION,        YES, FALSE, SVM_REVISION) \
493
 
FLAGDEF(  8A, EAX, AMD,     8,  1, SVM_HYPERVISOR,      NO,  FALSE)            \
494
 
FIELDDEF( 8A, EAX, AMD,     9, 23, SVMEAX_RSVD,         NO,  FALSE)            \
495
 
FIELDDEF( 8A, EBX, AMD,     0, 32, SVM_N_ASIDS,         ANY, FALSE)            \
496
 
FIELDDEF( 8A, ECX, AMD,     0, 32, SVMECX_RSVD,         NO,  FALSE)            \
497
 
FLAGDEFA( 8A, EDX, AMD,     0,  1, SVM_NP,              YES, FALSE, NPT)       \
498
 
FLAGDEF(  8A, EDX, AMD,     1,  1, SVM_LBR,             NO,  FALSE)            \
499
 
FLAGDEF(  8A, EDX, AMD,     2,  1, SVM_LOCK,            NO,  FALSE)            \
500
 
FLAGDEF(  8A, EDX, AMD,     3,  1, SVM_NRIP,            NO,  FALSE)            \
501
 
FLAGDEFA( 8A, EDX, AMD,    10,  1, SVM_PAUSE_FILTER,    NO,  FALSE, PAUSE_FILTER)
502
 
 
503
 
 
504
 
 
505
 
#define CPUID_FIELD_DATA_LEVEL_8A_BD                                           \
506
 
FIELDDEF( 8A, EDX, AMD,     4,  6, SVMEDX_RSVD0,        NO,  FALSE)            \
507
 
FIELDDEF( 8A, EDX, AMD,    11, 21, SVMEDX_RSVD1,        NO,  FALSE)
508
 
 
509
 
 
510
 
 
 
502
FIELD( 85, EAX, AMD,     0,  8, ITLB_ENTRIES_2M4M_PGS,             NA,  FALSE) \
 
503
FIELD( 85, EAX, AMD,     8,  8, ITLB_ASSOC_2M4M_PGS,               NA,  FALSE) \
 
504
FIELD( 85, EAX, AMD,    16,  8, DTLB_ENTRIES_2M4M_PGS,             NA,  FALSE) \
 
505
FIELD( 85, EAX, AMD,    24,  8, DTLB_ASSOC_2M4M_PGS,               NA,  FALSE) \
 
506
FIELD( 85, EBX, AMD,     0,  8, ITLB_ENTRIES_4K_PGS,               NA,  FALSE) \
 
507
FIELD( 85, EBX, AMD,     8,  8, ITLB_ASSOC_4K_PGS,                 NA,  FALSE) \
 
508
FIELD( 85, EBX, AMD,    16,  8, DTLB_ENTRIES_4K_PGS,               NA,  FALSE) \
 
509
FIELD( 85, EBX, AMD,    24,  8, DTLB_ASSOC_4K_PGS,                 NA,  FALSE) \
 
510
FIELD( 85, ECX, AMD,     0,  8, L1_DCACHE_LINE_SIZE,               NA,  FALSE) \
 
511
FIELD( 85, ECX, AMD,     8,  8, L1_DCACHE_LINES_PER_TAG,           NA,  FALSE) \
 
512
FIELD( 85, ECX, AMD,    16,  8, L1_DCACHE_ASSOC,                   NA,  FALSE) \
 
513
FIELD( 85, ECX, AMD,    24,  8, L1_DCACHE_SIZE,                    NA,  FALSE) \
 
514
FIELD( 85, EDX, AMD,     0,  8, L1_ICACHE_LINE_SIZE,               NA,  FALSE) \
 
515
FIELD( 85, EDX, AMD,     8,  8, L1_ICACHE_LINES_PER_TAG,           NA,  FALSE) \
 
516
FIELD( 85, EDX, AMD,    16,  8, L1_ICACHE_ASSOC,                   NA,  FALSE) \
 
517
FIELD( 85, EDX, AMD,    24,  8, L1_ICACHE_SIZE,                    NA,  FALSE) \
 
518
FIELD( 86, EAX, AMD,     0, 12, L2_ITLB_ENTRIES_2M4M_PGS,          NA,  FALSE) \
 
519
FIELD( 86, EAX, AMD,    12,  4, L2_ITLB_ASSOC_2M4M_PGS,            NA,  FALSE) \
 
520
FIELD( 86, EAX, AMD,    16, 12, L2_DTLB_ENTRIES_2M4M_PGS,          NA,  FALSE) \
 
521
FIELD( 86, EAX, AMD,    28,  4, L2_DTLB_ASSOC_2M4M_PGS,            NA,  FALSE) \
 
522
FIELD( 86, EBX, AMD,     0, 12, L2_ITLB_ENTRIES_4K_PGS,            NA,  FALSE) \
 
523
FIELD( 86, EBX, AMD,    12,  4, L2_ITLB_ASSOC_4K_PGS,              NA,  FALSE) \
 
524
FIELD( 86, EBX, AMD,    16, 12, L2_DTLB_ENTRIES_4K_PGS,            NA,  FALSE) \
 
525
FIELD( 86, EBX, AMD,    28,  4, L2_DTLB_ASSOC_4K_PGS,              NA,  FALSE) \
 
526
FIELD( 86, ECX, AMD,     0,  8, L2CACHE_LINE,                      NA,  FALSE) \
 
527
FIELD( 86, ECX, AMD,     8,  4, L2CACHE_LINE_PER_TAG,              NA,  FALSE) \
 
528
FIELD( 86, ECX, AMD,    12,  4, L2CACHE_WAYS,                      NA,  FALSE) \
 
529
FIELD( 86, ECX, AMD,    16, 16, L2CACHE_SIZE,                      NA,  FALSE) \
 
530
FIELD( 86, EDX, AMD,     0,  8, L3CACHE_LINE,                      NA,  FALSE) \
 
531
FIELD( 86, EDX, AMD,     8,  4, L3CACHE_LINE_PER_TAG,              NA,  FALSE) \
 
532
FIELD( 86, EDX, AMD,    12,  4, L3CACHE_WAYS,                      NA,  FALSE) \
 
533
FIELD( 86, EDX, AMD,    18, 14, L3CACHE_SIZE,                      NA,  FALSE) \
 
534
FLAG(  87, EDX, AMD,     0,  1, TS,                                NA,  FALSE) \
 
535
FLAG(  87, EDX, AMD,     1,  1, FID,                               NA,  FALSE) \
 
536
FLAG(  87, EDX, AMD,     2,  1, VID,                               NA,  FALSE) \
 
537
FLAG(  87, EDX, AMD,     3,  1, TTP,                               NA,  FALSE) \
 
538
FLAG(  87, EDX, AMD,     4,  1, LEAF87_TM,                         NA,  FALSE) \
 
539
FLAG(  87, EDX, AMD,     5,  1, STC,                               NA,  FALSE) \
 
540
FLAG(  87, EDX, AMD,     6,  1, 100MHZSTEPS,                       NA,  FALSE) \
 
541
FLAG(  87, EDX, AMD,     7,  1, HWPSTATE,                          NA,  FALSE) \
 
542
FLAG(  87, EDX, COMMON,  8,  1, TSC_INVARIANT,                     NA,  FALSE) \
 
543
FLAG(  87, EDX, COMMON,  9,  1, CORE_PERF_BOOST,                   NA,  FALSE) \
 
544
FIELD( 88, EAX, COMMON,  0,  8, PHYS_BITS,                         NA,  FALSE) \
 
545
FIELD( 88, EAX, COMMON,  8,  8, VIRT_BITS,                         NA,  FALSE) \
 
546
FIELD( 88, EAX, COMMON, 16,  8, GUEST_PHYS_ADDR_SZ,                NA,  FALSE) \
 
547
FIELD( 88, ECX, AMD,     0,  8, LEAF88_CORE_COUNT,                 NA,  FALSE) \
 
548
FIELD( 88, ECX, AMD,    12,  4, APICID_COREID_SIZE,                NA,  FALSE) \
 
549
FIELD( 8A, EAX, AMD,     0,  8, SVM_REVISION,                      YES, FALSE) \
 
550
FLAG(  8A, EAX, AMD,     8,  1, SVM_HYPERVISOR,                    NO,  FALSE) \
 
551
FIELD( 8A, EAX, AMD,     9, 23, SVMEAX_RSVD,                       NO,  FALSE) \
 
552
FIELD( 8A, EBX, AMD,     0, 32, SVM_NUM_ASIDS,                     YES, FALSE) \
 
553
FIELD( 8A, ECX, AMD,     0, 32, SVMECX_RSVD,                       NO,  FALSE) \
 
554
FLAG(  8A, EDX, AMD,     0,  1, SVM_NPT,                           YES, FALSE) \
 
555
FLAG(  8A, EDX, AMD,     1,  1, SVM_LBR,                           NO,  FALSE) \
 
556
FLAG(  8A, EDX, AMD,     2,  1, SVM_LOCK,                          YES, FALSE) \
 
557
FLAG(  8A, EDX, AMD,     3,  1, SVM_NRIP,                          YES, FALSE) \
 
558
FLAG(  8A, EDX, AMD,     4,  1, SVM_TSC_RATE_MSR,                  NO,  FALSE) \
 
559
FLAG(  8A, EDX, AMD,     5,  1, SVM_VMCB_CLEAN,                    YES, FALSE) \
 
560
FLAG(  8A, EDX, AMD,     6,  1, SVM_FLUSH_BY_ASID,                 YES, FALSE) \
 
561
FLAG(  8A, EDX, AMD,     7,  1, SVM_DECODE_ASSISTS,                YES, FALSE) \
 
562
FIELD( 8A, EDX, AMD,     8,  2, SVMEDX_RSVD0,                      NO,  FALSE) \
 
563
FLAG(  8A, EDX, AMD,    10,  1, SVM_PAUSE_FILTER,                  NO,  FALSE) \
 
564
FLAG(  8A, EDX, AMD,    11,  1, SVMEDX_RSVD1,                      NO,  FALSE) \
 
565
FLAG(  8A, EDX, AMD,    12,  1, SVM_PAUSE_THRESHOLD,               NO,  FALSE) \
 
566
FIELD( 8A, EDX, AMD,    13, 19, SVMEDX_RSVD2,                      NO,  FALSE)
 
567
 
 
568
/*    LEVEL, REG, VENDOR, POS, SIZE, NAME,                   MON SUPP, CPL3 */
 
569
#define CPUID_FIELD_DATA_LEVEL_81x                                             \
 
570
FIELD(819, EAX, AMD,     0, 12, L1_ITLB_ENTRIES_1G_PGS,            NA,  FALSE) \
 
571
FIELD(819, EAX, AMD,    12,  4, L1_ITLB_ASSOC_1G_PGS,              NA,  FALSE) \
 
572
FIELD(819, EAX, AMD,    16, 12, L1_DTLB_ENTRIES_1G_PGS,            NA,  FALSE) \
 
573
FIELD(819, EAX, AMD,    28,  4, L1_DTLB_ASSOC_1G_PGS,              NA,  FALSE) \
 
574
FIELD(819, EBX, AMD,     0, 12, L2_ITLB_ENTRIES_1G_PGS,            NA,  FALSE) \
 
575
FIELD(819, EBX, AMD,    12,  4, L2_ITLB_ASSOC_1G_PGS,              NA,  FALSE) \
 
576
FIELD(819, EBX, AMD,    16, 12, L2_DTLB_ENTRIES_1G_PGS,            NA,  FALSE) \
 
577
FIELD(819, EBX, AMD,    28,  4, L2_DTLB_ASSOC_1G_PGS,              NA,  FALSE) \
 
578
FLAG( 81A, EAX, AMD,     0,  1, FP128,                             NA,  FALSE) \
 
579
FLAG( 81A, EAX, AMD,     1,  1, MOVU,                              NA,  FALSE) \
 
580
FLAG( 81B, EAX, AMD,     0,  1, IBS_FFV,                           NA,  FALSE) \
 
581
FLAG( 81B, EAX, AMD,     1,  1, IBS_FETCHSAM,                      NA,  FALSE) \
 
582
FLAG( 81B, EAX, AMD,     2,  1, IBS_OPSAM,                         NA,  FALSE) \
 
583
FLAG( 81B, EAX, AMD,     3,  1, RW_OPCOUNT,                        NA,  FALSE) \
 
584
FLAG( 81B, EAX, AMD,     4,  1, OPCOUNT,                           NA,  FALSE) \
 
585
FLAG( 81B, EAX, AMD,     5,  1, BRANCH_TARGET_ADDR,                NA,  FALSE) \
 
586
FLAG( 81B, EAX, AMD,     6,  1, OPCOUNT_EXT,                       NA,  FALSE) \
 
587
FLAG( 81B, EAX, AMD,     7,  1, RIP_INVALID_CHECK,                 NA,  FALSE) \
 
588
FLAG( 81C, EAX, AMD,     0,  1, LWP_AVAIL,                         NA,  FALSE) \
 
589
FLAG( 81C, EAX, AMD,     1,  1, LWP_VAL_AVAIL,                     NA,  FALSE) \
 
590
FLAG( 81C, EAX, AMD,     2,  1, LWP_IRE_AVAIL,                     NA,  FALSE) \
 
591
FLAG( 81C, EAX, AMD,     3,  1, LWP_BRE_AVAIL,                     NA,  FALSE) \
 
592
FLAG( 81C, EAX, AMD,     4,  1, LWP_DME_AVAIL,                     NA,  FALSE) \
 
593
FLAG( 81C, EAX, AMD,     5,  1, LWP_CNH_AVAIL,                     NA,  FALSE) \
 
594
FLAG( 81C, EAX, AMD,     6,  1, LWP_RNH_AVAIL,                     NA,  FALSE) \
 
595
FLAG( 81C, EAX, AMD,    31,  1, LWP_INT_AVAIL,                     NA,  FALSE) \
 
596
FIELD(81C, EBX, AMD,     0,  8, LWP_CB_SIZE,                       NA,  FALSE) \
 
597
FIELD(81C, EBX, AMD,     8,  8, LWP_EVENT_SIZE,                    NA,  FALSE) \
 
598
FIELD(81C, EBX, AMD,    16,  8, LWP_MAX_EVENTS,                    NA,  FALSE) \
 
599
FIELD(81C, EBX, AMD,    24,  8, LWP_EVENT_OFFSET,                  NA,  FALSE) \
 
600
FIELD(81C, ECX, AMD,     0,  4, LWP_LATENCY_MAX,                   NA,  FALSE) \
 
601
FLAG( 81C, ECX, AMD,     5,  1, LWP_DATA_ADDR_VALID,               NA,  FALSE) \
 
602
FIELD(81C, ECX, AMD,     6,  3, LWP_LATENCY_ROUND,                 NA,  FALSE) \
 
603
FIELD(81C, ECX, AMD,     9,  7, LWP_VERSION,                       NA,  FALSE) \
 
604
FIELD(81C, ECX, AMD,    16,  8, LWP_MIN_BUF_SIZE,                  NA,  FALSE) \
 
605
FLAG( 81C, ECX, AMD,    28,  1, LWP_BRANCH_PRED,                   NA,  FALSE) \
 
606
FLAG( 81C, ECX, AMD,    29,  1, LWP_IP_FILTERING,                  NA,  FALSE) \
 
607
FLAG( 81C, ECX, AMD,    30,  1, LWP_CACHE_LEVEL,                   NA,  FALSE) \
 
608
FLAG( 81C, ECX, AMD,    31,  1, LWP_CACHE_LATENCY,                 NA,  FALSE) \
 
609
FLAG( 81C, EDX, AMD,     0,  1, LWP_SUPPORTED,                     NA,  FALSE) \
 
610
FLAG( 81C, EDX, AMD,     1,  1, LWP_VAL_SUPPORTED,                 NA,  FALSE) \
 
611
FLAG( 81C, EDX, AMD,     2,  1, LWP_IRE_SUPPORTED,                 NA,  FALSE) \
 
612
FLAG( 81C, EDX, AMD,     3,  1, LWP_BRE_SUPPORTED,                 NA,  FALSE) \
 
613
FLAG( 81C, EDX, AMD,     4,  1, LWP_DME_SUPPORTED,                 NA,  FALSE) \
 
614
FLAG( 81C, EDX, AMD,     5,  1, LWP_CNH_SUPPORTED,                 NA,  FALSE) \
 
615
FLAG( 81C, EDX, AMD,     6,  1, LWP_RNH_SUPPORTED,                 NA,  FALSE) \
 
616
FLAG( 81C, EDX, AMD,    31,  1, LWP_INT_SUPPORTED,                 NA,  FALSE) \
 
617
FIELD(81D, EAX, AMD,     0,  5, LEAF81D_CACHE_TYPE,                NA,  FALSE) \
 
618
FIELD(81D, EAX, AMD,     5,  3, LEAF81D_CACHE_LEVEL,               NA,  FALSE) \
 
619
FLAG( 81D, EAX, AMD,     8,  1, LEAF81D_CACHE_SELF_INIT,           NA,  FALSE) \
 
620
FLAG( 81D, EAX, AMD,     9,  1, LEAF81D_CACHE_FULLY_ASSOC,         NA,  FALSE) \
 
621
FIELD(81D, EAX, AMD,    14, 12, LEAF81D_NUM_SHARING_CACHE,         NA,  FALSE) \
 
622
FIELD(81D, EBX, AMD,     0, 12, LEAF81D_CACHE_LINE_SIZE,           NA,  FALSE) \
 
623
FIELD(81D, EBX, AMD,    12, 10, LEAF81D_CACHE_PHYS_PARTITIONS,     NA,  FALSE) \
 
624
FIELD(81D, EBX, AMD,    22, 10, LEAF81D_CACHE_WAYS,                NA,  FALSE) \
 
625
FIELD(81D, ECX, AMD,     0, 32, LEAF81D_CACHE_NUM_SETS,            NA,  FALSE) \
 
626
FLAG( 81D, EDX, AMD,     0,  1, LEAF81D_CACHE_WBINVD,              NA,  FALSE) \
 
627
FLAG( 81D, EDX, AMD,     1,  1, LEAF81D_CACHE_INCLUSIVE,           NA,  FALSE) \
 
628
FIELD(81E, EAX, AMD,     0, 32, EXTENDED_APICID,                   NA,  FALSE) \
 
629
FIELD(81E, EBX, AMD,     0,  8, COMPUTE_UNIT_ID,                   NA,  FALSE) \
 
630
FIELD(81E, EBX, AMD,     8,  2, CORES_PER_COMPUTE_UNIT,            NA,  FALSE) \
 
631
FIELD(81E, ECX, AMD,     0,  8, NODEID,                            NA,  FALSE) \
 
632
FIELD(81E, ECX, AMD,     8,  3, NODES_PER_PKG,                     NA,  FALSE)
 
633
 
 
634
#define INTEL_CPUID_FIELD_DATA
 
635
 
 
636
#define AMD_CPUID_FIELD_DATA
511
637
 
512
638
#define CPUID_FIELD_DATA                                              \
513
639
   CPUID_FIELD_DATA_LEVEL_0                                           \
515
641
   CPUID_FIELD_DATA_LEVEL_4                                           \
516
642
   CPUID_FIELD_DATA_LEVEL_5                                           \
517
643
   CPUID_FIELD_DATA_LEVEL_6                                           \
 
644
   CPUID_FIELD_DATA_LEVEL_7                                           \
518
645
   CPUID_FIELD_DATA_LEVEL_A                                           \
519
646
   CPUID_FIELD_DATA_LEVEL_B                                           \
 
647
   CPUID_FIELD_DATA_LEVEL_D                                           \
520
648
   CPUID_FIELD_DATA_LEVEL_400                                         \
521
649
   CPUID_FIELD_DATA_LEVEL_410                                         \
522
650
   CPUID_FIELD_DATA_LEVEL_80                                          \
523
651
   CPUID_FIELD_DATA_LEVEL_81                                          \
524
652
   CPUID_FIELD_DATA_LEVEL_8x                                          \
525
 
   CPUID_FIELD_DATA_LEVEL_8A_BD
526
 
 
 
653
   CPUID_FIELD_DATA_LEVEL_81x                                         \
 
654
   INTEL_CPUID_FIELD_DATA                                             \
 
655
   AMD_CPUID_FIELD_DATA
527
656
 
528
657
/*
529
658
 * Define all field and flag values as an enum.  The result is a full
534
663
 * CPUID_<vendor>_ID<level><reg>_<name>_SHIFT   == offset of field
535
664
 *
536
665
 * e.g. - CPUID_FEATURE_COMMON_ID1EDX_FPU     = 0x1
537
 
 *      - CPUID_COMMON_ID88EAX_VIRTBITS_MASK  = 0xff00
538
 
 *      - CPUID_COMMON_ID88EAX_VIRTBITS_SHIFT = 8
 
666
 *      - CPUID_COMMON_ID88EAX_VIRT_BITS_MASK  = 0xff00
 
667
 *      - CPUID_COMMON_ID88EAX_VIRT_BITS_SHIFT = 8
539
668
 *
540
669
 * Note: The FEATURE/MASK definitions must use some gymnastics to get
541
670
 * around a warning when shifting left by 32.
542
671
 */
543
672
#define VMW_BIT_MASK(shift)  (((1 << (shift - 1)) << 1) - 1)
544
673
 
545
 
#define FIELDDEF(lvl, reg, vend, bitpos, size, name, s, c3)             \
546
 
   CPUID_##vend##_ID##lvl##reg##_##name##_SHIFT = bitpos,               \
547
 
   CPUID_##vend##_ID##lvl##reg##_##name##_MASK  =                       \
548
 
                      VMW_BIT_MASK(size) << bitpos,                     \
549
 
   CPUID_FEATURE_##vend##_ID##lvl##reg##_##name =                       \
550
 
                      CPUID_##vend##_ID##lvl##reg##_##name##_MASK,
551
 
 
552
 
/* Before simplifying this take a look at bug 293638... */
553
 
#define FIELDDEFA(lvl, reg, vend, bitpos, size, name, s, c3, f)         \
554
 
   CPUID_##vend##_ID##lvl##reg##_##name##_SHIFT = bitpos,               \
555
 
   CPUID_##vend##_ID##lvl##reg##_##name##_MASK  =                       \
556
 
                      VMW_BIT_MASK(size) << bitpos,                     \
557
 
   CPUID_FEATURE_##vend##_ID##lvl##reg##_##name =                       \
558
 
                      CPUID_##vend##_ID##lvl##reg##_##name##_MASK,
559
 
 
560
 
#define FLAGDEFA FIELDDEFA
561
 
#define FLAGDEF FIELDDEF
 
674
#define FIELD(lvl, reg, vend, bitpos, size, name, s, c3)              \
 
675
   CPUID_##vend##_ID##lvl##reg##_##name##_SHIFT = bitpos,             \
 
676
   CPUID_##vend##_ID##lvl##reg##_##name##_MASK  =                     \
 
677
                      VMW_BIT_MASK(size) << bitpos,                   \
 
678
   CPUID_FEATURE_##vend##_ID##lvl##reg##_##name =                     \
 
679
                      CPUID_##vend##_ID##lvl##reg##_##name##_MASK,
 
680
 
 
681
#define FLAG FIELD
562
682
 
563
683
enum {
564
684
   /* Define data for every CPUID field we have */
565
685
   CPUID_FIELD_DATA
566
686
};
567
687
#undef VMW_BIT_MASK
568
 
#undef FIELDDEF
569
 
#undef FLAGDEF
570
 
#undef FIELDDEFA
571
 
#undef FLAGDEFA
 
688
#undef FIELD
 
689
#undef FLAG
 
690
 
 
691
/* Level D subleaf 1 eax XSAVEOPT */
 
692
#define CPUID_COMMON_IDDsub1EAX_XSAVEOPT 1
572
693
 
573
694
/*
574
695
 * Legal CPUID config file mask characters.  For a description of the
633
754
FIELD_FUNC(MODEL,            CPUID_COMMON_ID1EAX_MODEL)
634
755
FIELD_FUNC(FAMILY,           CPUID_COMMON_ID1EAX_FAMILY)
635
756
FIELD_FUNC(TYPE,             CPUID_COMMON_ID1EAX_TYPE)
636
 
FIELD_FUNC(EXTENDED_MODEL,   CPUID_COMMON_ID1EAX_EXTMODEL)
637
 
FIELD_FUNC(EXTENDED_FAMILY,  CPUID_COMMON_ID1EAX_EXTFAMILY)
 
757
FIELD_FUNC(EXTENDED_MODEL,   CPUID_COMMON_ID1EAX_EXTENDED_MODEL)
 
758
FIELD_FUNC(EXTENDED_FAMILY,  CPUID_COMMON_ID1EAX_EXTENDED_FAMILY)
638
759
FIELD_FUNC(LCPU_COUNT,       CPUID_COMMON_ID1EBX_LCPU_COUNT)
639
760
FIELD_FUNC(APICID,           CPUID_COMMON_ID1EBX_APICID)
640
 
FIELD_FUNC(PA_BITS,          CPUID_COMMON_ID88EAX_PHYSBITS)
641
 
FIELD_FUNC(VIRT_BITS,        CPUID_COMMON_ID88EAX_VIRTBITS)
 
761
FIELD_FUNC(PHYS_BITS,        CPUID_COMMON_ID88EAX_PHYS_BITS)
 
762
FIELD_FUNC(VIRT_BITS,        CPUID_COMMON_ID88EAX_VIRT_BITS)
642
763
FIELD_FUNC(SVM_REVISION,     CPUID_AMD_ID8AEAX_SVM_REVISION)
643
 
FIELD_FUNC(SVM_N_ASIDS,      CPUID_AMD_ID8AEBX_SVM_N_ASIDS)
644
 
FIELD_FUNC(CACHE_TYPE,       CPUID_INTEL_ID4EAX_CACHE_TYPE)
645
 
FIELD_FUNC(INTEL_CORE_COUNT, CPUID_INTEL_ID4EAX_CORE_COUNT)
646
 
FIELD_FUNC(AMD_CORE_COUNT,   CPUID_AMD_ID88ECX_CORE_COUNT)
 
764
FIELD_FUNC(SVM_NUM_ASIDS,    CPUID_AMD_ID8AEBX_SVM_NUM_ASIDS)
 
765
FIELD_FUNC(CACHE_TYPE,       CPUID_INTEL_ID4EAX_LEAF4_CACHE_TYPE)
 
766
FIELD_FUNC(LEAF4_CORE_COUNT, CPUID_INTEL_ID4EAX_LEAF4_CORE_COUNT)
 
767
FIELD_FUNC(LEAF88_CORE_COUNT, CPUID_AMD_ID88ECX_LEAF88_CORE_COUNT)
647
768
FIELD_FUNC(AMD_APICID_COREID_SIZE, CPUID_AMD_ID88ECX_APICID_COREID_SIZE)
648
769
FIELD_FUNC(AMD_EXTAPICSPC,   CPUID_AMD_ID81ECX_EXTAPICSPC)
649
 
FIELD_FUNC(NUM_PMCS,         CPUID_INTEL_IDAEAX_NUM_PMCS)
650
770
FIELD_FUNC(MWAIT_MIN_SIZE,   CPUID_COMMON_ID5EAX_MWAIT_MIN_SIZE)
651
771
FIELD_FUNC(MWAIT_MAX_SIZE,   CPUID_COMMON_ID5EBX_MWAIT_MAX_SIZE)
652
772
FIELD_FUNC(MWAIT_C0_SUBSTATE, CPUID_INTEL_ID5EDX_MWAIT_C0_SUBSTATE)
659
779
FIELD_FUNC(TOPOLOGY_LEVEL_NUMBER,       CPUID_INTEL_IDBECX_LEVEL_NUMBER)
660
780
FIELD_FUNC(TOPOLOGY_LEVEL_TYPE,         CPUID_INTEL_IDBECX_LEVEL_TYPE)
661
781
FIELD_FUNC(TOPOLOGY_X2APIC_ID,          CPUID_INTEL_IDBEDX_X2APIC_ID)
 
782
FIELD_FUNC(AMD_CACHE_TYPE,      CPUID_AMD_ID81DEAX_LEAF81D_CACHE_TYPE)
 
783
FIELD_FUNC(AMD_CACHE_LEVEL,     CPUID_AMD_ID81DEAX_LEAF81D_CACHE_LEVEL)
 
784
FIELD_FUNC(AMD_CACHE_WAYS,      CPUID_AMD_ID81DEBX_LEAF81D_CACHE_WAYS)
 
785
FIELD_FUNC(AMD_NODES_PER_PKG,   CPUID_AMD_ID81EECX_NODES_PER_PKG)
 
786
FIELD_FUNC(AMD_NUM_SHARING_CACHE, CPUID_AMD_ID81DEAX_LEAF81D_NUM_SHARING_CACHE)
 
787
FIELD_FUNC(AMD_CORES_PER_COMPUTE_UNIT, CPUID_AMD_ID81EEBX_CORES_PER_COMPUTE_UNIT)
662
788
#undef FIELD_FUNC
663
789
 
664
790
 
667
793
 * macros/functions for reading cpuid fields.
668
794
 */
669
795
 
670
 
#define CPUID_FAMILY_EXTENDED 15
 
796
#define CPUID_FAMILY_EXTENDED        15
671
797
 
672
798
/* Effective Intel CPU Families */
673
 
#define CPUID_FAMILY_486      4
674
 
#define CPUID_FAMILY_P5       5
675
 
#define CPUID_FAMILY_P6       6
676
 
#define CPUID_FAMILY_P4       15
 
799
#define CPUID_FAMILY_486              4
 
800
#define CPUID_FAMILY_P5               5
 
801
#define CPUID_FAMILY_P6               6
 
802
#define CPUID_FAMILY_P4              15
677
803
 
678
804
/* Effective AMD CPU Families */
679
 
#define CPUID_FAMILY_5x86     4
680
 
#define CPUID_FAMILY_K5       5
681
 
#define CPUID_FAMILY_K6       5
682
 
#define CPUID_FAMILY_K7       6
683
 
#define CPUID_FAMILY_K8       15
684
 
#define CPUID_FAMILY_K8L      16
685
 
#define CPUID_FAMILY_K8MOBILE 17
686
 
#define CPUID_FAMILY_BULLDOZER 21
 
805
#define CPUID_FAMILY_5x86             4
 
806
#define CPUID_FAMILY_K5               5 
 
807
#define CPUID_FAMILY_K6               5
 
808
#define CPUID_FAMILY_K7               6
 
809
#define CPUID_FAMILY_K8              15
 
810
#define CPUID_FAMILY_K8L             16
 
811
#define CPUID_FAMILY_K8MOBILE        17
 
812
#define CPUID_FAMILY_LLANO           18
 
813
#define CPUID_FAMILY_BOBCAT          20
 
814
#define CPUID_FAMILY_BULLDOZER       21
687
815
 
688
816
/* Effective VIA CPU Families */
689
 
#define CPUID_FAMILY_C7       6
 
817
#define CPUID_FAMILY_C7               6
690
818
 
691
819
/* Intel model information */
692
 
#define CPUID_MODEL_PPRO       1
693
 
#define CPUID_MODEL_PII_03     3
694
 
#define CPUID_MODEL_PII_05     5
695
 
#define CPUID_MODEL_CELERON_06 6
696
 
#define CPUID_MODEL_PM_09      9
697
 
#define CPUID_MODEL_PM_0D      13
698
 
#define CPUID_MODEL_PM_0E      14    // Yonah / Sossaman
699
 
#define CPUID_MODEL_CORE_0F    15    // Conroe / Merom
700
 
#define CPUID_MODEL_CORE_17    0x17  // Penryn
701
 
#define CPUID_MODEL_NEHALEM_1A 0x1a  // Nehalem / Gainestown
702
 
#define CPUID_MODEL_ATOM_1C    0x1c  // Silverthorne / Diamondville
703
 
#define CPUID_MODEL_CORE_1D    0x1d  // Dunnington
704
 
#define CPUID_MODEL_NEHALEM_1E 0x1e  // Lynnfield
705
 
#define CPUID_MODEL_NEHALEM_1F 0x1f  // Havendale
706
 
#define CPUID_MODEL_NEHALEM_25 0x25  // Westmere / Clarkdale
707
 
#define CPUID_MODEL_NEHALEM_2C 0x2c  // Westmere-EP
708
 
#define CPUID_MODEL_NEHALEM_2E 0x2e  // Nehalem-EX
 
820
#define CPUID_MODEL_PPRO              1
 
821
#define CPUID_MODEL_PII_03            3
 
822
#define CPUID_MODEL_PII_05            5
 
823
#define CPUID_MODEL_CELERON_06        6
 
824
#define CPUID_MODEL_PM_09             9
 
825
#define CPUID_MODEL_PM_0D            13
 
826
#define CPUID_MODEL_PM_0E            14  // Yonah / Sossaman
 
827
#define CPUID_MODEL_CORE_0F          15  // Conroe / Merom
 
828
#define CPUID_MODEL_CORE_17        0x17  // Penryn
 
829
#define CPUID_MODEL_NEHALEM_1A     0x1a  // Nehalem / Gainestown
 
830
#define CPUID_MODEL_ATOM_1C        0x1c  // Silverthorne / Diamondville
 
831
#define CPUID_MODEL_CORE_1D        0x1d  // Dunnington
 
832
#define CPUID_MODEL_NEHALEM_1E     0x1e  // Lynnfield
 
833
#define CPUID_MODEL_NEHALEM_1F     0x1f  // Havendale
 
834
#define CPUID_MODEL_NEHALEM_25     0x25  // Westmere / Clarkdale
 
835
#define CPUID_MODEL_SANDYBRIDGE_2A 0x2a  // Sandybridge (desktop/mobile)
 
836
#define CPUID_MODEL_SANDYBRIDGE_2D 0x2d  // Sandybridge-EP
 
837
#define CPUID_MODEL_NEHALEM_2C     0x2c  // Westmere-EP
 
838
#define CPUID_MODEL_NEHALEM_2E     0x2e  // Nehalem-EX
 
839
#define CPUID_MODEL_NEHALEM_2F     0x2f  // Westmere-EX
709
840
 
710
841
#define CPUID_MODEL_PIII_07    7
711
842
#define CPUID_MODEL_PIII_08    8
843
974
   uint32 effectiveModel = CPUID_EFFECTIVE_MODEL(v);
844
975
 
845
976
   return CPUID_FAMILY_IS_P6(v) &&
846
 
          (
847
 
           effectiveModel == CPUID_MODEL_NEHALEM_1A ||
 
977
          (effectiveModel == CPUID_MODEL_NEHALEM_1A ||
848
978
           effectiveModel == CPUID_MODEL_NEHALEM_1E ||
849
979
           effectiveModel == CPUID_MODEL_NEHALEM_1F ||
850
980
           effectiveModel == CPUID_MODEL_NEHALEM_25 ||
851
981
           effectiveModel == CPUID_MODEL_NEHALEM_2C ||
852
 
           effectiveModel == CPUID_MODEL_NEHALEM_2E);
853
 
}
854
 
 
855
 
 
 
982
           effectiveModel == CPUID_MODEL_NEHALEM_2E ||
 
983
           effectiveModel == CPUID_MODEL_NEHALEM_2F);
 
984
}
 
985
 
 
986
 
 
987
static INLINE Bool
 
988
CPUID_UARCH_IS_SANDYBRIDGE(uint32 v) // IN: %eax from CPUID with %eax=1.
 
989
{
 
990
   /* Assumes the CPU manufacturer is Intel. */
 
991
   uint32 effectiveModel = CPUID_EFFECTIVE_MODEL(v);
 
992
 
 
993
   return CPUID_FAMILY_IS_P6(v) &&
 
994
          (effectiveModel == CPUID_MODEL_SANDYBRIDGE_2A ||
 
995
           effectiveModel == CPUID_MODEL_SANDYBRIDGE_2D);
 
996
}
856
997
 
857
998
 
858
999
static INLINE Bool
881
1022
static INLINE Bool
882
1023
CPUID_FAMILY_IS_K8L(uint32 eax)
883
1024
{
884
 
   return CPUID_EFFECTIVE_FAMILY(eax) == CPUID_FAMILY_K8L;
 
1025
   return CPUID_EFFECTIVE_FAMILY(eax) == CPUID_FAMILY_K8L ||
 
1026
          CPUID_EFFECTIVE_FAMILY(eax) == CPUID_FAMILY_LLANO;
885
1027
}
886
1028
 
887
1029
static INLINE Bool
903
1045
}
904
1046
 
905
1047
static INLINE Bool
 
1048
CPUID_FAMILY_IS_BOBCAT(uint32 eax)
 
1049
{
 
1050
   return CPUID_EFFECTIVE_FAMILY(eax) == CPUID_FAMILY_BOBCAT;
 
1051
}
 
1052
 
 
1053
static INLINE Bool
906
1054
CPUID_FAMILY_IS_BULLDOZER(uint32 eax)
907
1055
{
908
1056
   return CPUID_EFFECTIVE_FAMILY(eax) == CPUID_FAMILY_BULLDOZER;
915
1063
CPUID_MODEL_IS_BARCELONA(uint32 v) // IN: %eax from CPUID with %eax=1.
916
1064
{
917
1065
   /* Assumes the CPU manufacturer is AMD. */
918
 
   return CPUID_FAMILY_IS_K8L(v) &&
919
 
          CPUID_EFFECTIVE_MODEL(v) == CPUID_MODEL_BARCELONA_02;
 
1066
   return CPUID_EFFECTIVE_FAMILY(v) == CPUID_FAMILY_K8 &&
 
1067
          CPUID_EFFECTIVE_MODEL(v)  == CPUID_MODEL_BARCELONA_02;
920
1068
}
921
1069
 
922
1070
 
924
1072
#define CPUID_TYPE_OVERDRIVE   1
925
1073
#define CPUID_TYPE_SECONDARY   2
926
1074
 
927
 
#define CPUID_INTEL_ID4EAX_CACHE_TYPE_NULL      0
928
 
#define CPUID_INTEL_ID4EAX_CACHE_TYPE_DATA      1
929
 
#define CPUID_INTEL_ID4EAX_CACHE_TYPE_INST      2
930
 
#define CPUID_INTEL_ID4EAX_CACHE_TYPE_UNIF      3
 
1075
#define CPUID_INTEL_ID4EAX_LEAF4_CACHE_TYPE_NULL      0
 
1076
#define CPUID_INTEL_ID4EAX_LEAF4_CACHE_TYPE_DATA      1
 
1077
#define CPUID_INTEL_ID4EAX_LEAF4_CACHE_TYPE_INST      2
 
1078
#define CPUID_INTEL_ID4EAX_LEAF4_CACHE_TYPE_UNIF      3
931
1079
 
932
 
#define CPUID_INTEL_ID4EAX_CACHE_SELF_INIT      0x00000100
933
 
#define CPUID_INTEL_ID4EAX_CACHE_FULLY_ASSOC    0x00000200
 
1080
#define CPUID_INTEL_ID4EAX_LEAF4_CACHE_SELF_INIT      0x00000100
 
1081
#define CPUID_INTEL_ID4EAX_LEAF4_CACHE_FULLY_ASSOC    0x00000200
934
1082
 
935
1083
#define CPUID_INTEL_IDBECX_LEVEL_TYPE_INVALID   0
936
1084
#define CPUID_INTEL_IDBECX_LEVEL_TYPE_SMT       1
991
1139
CPUID_IntelCoresPerPackage(uint32 v) /* %eax from CPUID with %eax=4 and %ecx=0. */
992
1140
{
993
1141
   // Note: This is not guaranteed to work on older Intel CPUs.
994
 
   return 1 + CPUID_INTEL_CORE_COUNT(v);
 
1142
   return 1 + CPUID_LEAF4_CORE_COUNT(v);
995
1143
}
996
1144
 
997
1145
 
999
1147
CPUID_AMDCoresPerPackage(uint32 v) /* %ecx from CPUID with %eax=0x80000008. */
1000
1148
{
1001
1149
   // Note: This is not guaranteed to work on older AMD CPUs.
1002
 
   return 1 + CPUID_AMD_CORE_COUNT(v);
 
1150
   return 1 + CPUID_LEAF88_CORE_COUNT(v);
1003
1151
}
1004
1152
 
1005
1153
 
1007
1155
 * Hypervisor CPUID space is 0x400000XX.
1008
1156
 */
1009
1157
static INLINE Bool
1010
 
CPUID_IsHypervisorLevel(uint32 level, uint32 *offset)
 
1158
CPUID_IsHypervisorLevel(uint32 level)
1011
1159
{
1012
 
   *offset = level & 0xff;
1013
1160
   return (level & 0xffffff00) == 0x40000000;
1014
1161
}
1015
1162