mirror of https://github.com/acidanthera/audk.git
3407 lines
113 KiB
C
3407 lines
113 KiB
C
/** @file
|
|
CPUID leaf definitions.
|
|
|
|
Provides defines for CPUID leaf indexes. Data structures are provided for
|
|
registers returned by a CPUID leaf that contain one or more bit fields.
|
|
If a register returned is a single 32-bit value, then a data structure is
|
|
not provided for that register.
|
|
|
|
Copyright (c) 2015 - 2016, Intel Corporation. All rights reserved.<BR>
|
|
This program and the accompanying materials are licensed and made available under
|
|
the terms and conditions of the BSD License which accompanies this distribution.
|
|
The full text of the license may be found at
|
|
http://opensource.org/licenses/bsd-license.php
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
|
|
@par Specification Reference:
|
|
Intel(R) 64 and IA-32 Architectures Software Developer's Manual, Volume 2A,
|
|
December 2015, CPUID instruction.
|
|
|
|
**/
|
|
|
|
#ifndef __CPUID_H__
|
|
#define __CPUID_H__
|
|
|
|
/**
|
|
CPUID Signature Information
|
|
|
|
@param EAX CPUID_SIGNATURE (0x00)
|
|
|
|
@retval EAX Returns the highest value the CPUID instruction recognizes for
|
|
returning basic processor information. The value is returned is
|
|
processor specific.
|
|
@retval EBX First 4 characters of a vendor identification string.
|
|
@retval ECX Last 4 characters of a vendor identification string.
|
|
@retval EDX Middle 4 characters of a vendor identification string.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
UINT32 Eax;
|
|
UINT32 Ebx;
|
|
UINT32 Ecx;
|
|
UINT32 Edx;
|
|
|
|
AsmCpuid (CPUID_SIGNATURE, &Eax, &Ebx, &Ecx, &Edx);
|
|
@endcode
|
|
**/
|
|
#define CPUID_SIGNATURE 0x00
|
|
|
|
///
|
|
/// @{ CPUID signature values returned by Intel processors
|
|
///
|
|
#define CPUID_SIGNATURE_GENUINE_INTEL_EBX SIGNATURE_32 ('G', 'e', 'n', 'u')
|
|
#define CPUID_SIGNATURE_GENUINE_INTEL_EDX SIGNATURE_32 ('i', 'n', 'e', 'I')
|
|
#define CPUID_SIGNATURE_GENUINE_INTEL_ECX SIGNATURE_32 ('n', 't', 'e', 'l')
|
|
///
|
|
/// @}
|
|
///
|
|
|
|
|
|
/**
|
|
CPUID Version Information
|
|
|
|
@param EAX CPUID_VERSION_INFO (0x01)
|
|
|
|
@retval EAX Returns Model, Family, Stepping Information described by the
|
|
type CPUID_VERSION_INFO_EAX.
|
|
@retval EBX Returns Brand, Cache Line Size, and Initial APIC ID described by
|
|
the type CPUID_VERSION_INFO_EBX.
|
|
@retval ECX CPU Feature Information described by the type
|
|
CPUID_VERSION_INFO_ECX.
|
|
@retval EDX CPU Feature Information described by the type
|
|
CPUID_VERSION_INFO_EDX.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_VERSION_INFO_EAX Eax;
|
|
CPUID_VERSION_INFO_EBX Ebx;
|
|
CPUID_VERSION_INFO_ECX Ecx;
|
|
CPUID_VERSION_INFO_EDX Edx;
|
|
|
|
AsmCpuid (CPUID_VERSION_INFO, &Eax.Uint32, &Ebx.Uint32, &Ecx.Uint32, &Edx.Uint32);
|
|
@endcode
|
|
**/
|
|
#define CPUID_VERSION_INFO 0x01
|
|
|
|
/**
|
|
CPUID Version Information returned in EAX for CPUID leaf
|
|
#CPUID_VERSION_INFO.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
UINT32 SteppingId:4; ///< [Bits 3:0] Stepping ID
|
|
UINT32 Model:4; ///< [Bits 7:4] Model
|
|
UINT32 FamilyId:4; ///< [Bits 11:8] Family
|
|
UINT32 ProcessorType:2; ///< [Bits 13:12] Processor Type
|
|
UINT32 Reserved1:2; ///< [Bits 15:14] Reserved
|
|
UINT32 ExtendedModelId:4; ///< [Bits 19:16] Extended Model ID
|
|
UINT32 ExtendedFamilyId:8; ///< [Bits 27:20] Extended Family ID
|
|
UINT32 Reserved2:4; ///< Reserved
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_VERSION_INFO_EAX;
|
|
|
|
///
|
|
/// @{ Define value for bit field CPUID_VERSION_INFO_EAX.ProcessorType
|
|
///
|
|
#define CPUID_VERSION_INFO_EAX_PROCESSOR_TYPE_ORIGINAL_OEM_PROCESSOR 0x00
|
|
#define CPUID_VERSION_INFO_EAX_PROCESSOR_TYPE_INTEL_OVERDRIVE_PROCESSOR 0x01
|
|
#define CPUID_VERSION_INFO_EAX_PROCESSOR_TYPE_DUAL_PROCESSOR 0x02
|
|
///
|
|
/// @}
|
|
///
|
|
|
|
/**
|
|
CPUID Version Information returned in EBX for CPUID leaf
|
|
#CPUID_VERSION_INFO.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 7:0] Provides an entry into a brand string table that contains
|
|
/// brand strings for IA-32 processors.
|
|
///
|
|
UINT32 BrandIndex:8;
|
|
///
|
|
/// [Bits 15:8] Indicates the size of the cache line flushed by the CLFLUSH
|
|
/// and CLFLUSHOPT instructions in 8-byte increments. This field was
|
|
/// introduced in the Pentium 4 processor.
|
|
///
|
|
UINT32 CacheLineSize:8;
|
|
///
|
|
/// [Bits 23:16] Maximum number of addressable IDs for logical processors
|
|
/// in this physical package.
|
|
///
|
|
/// @note
|
|
/// The nearest power-of-2 integer that is not smaller than EBX[23:16] is
|
|
/// the number of unique initial APICIDs reserved for addressing different
|
|
/// logical processors in a physical package. This field is only valid if
|
|
/// CPUID.1.EDX.HTT[bit 28]= 1.
|
|
///
|
|
UINT32 MaximumAddressableIdsForLogicalProcessors:8;
|
|
///
|
|
/// [Bits 31:24] The 8-bit ID that is assigned to the local APIC on the
|
|
/// processor during power up. This field was introduced in the Pentium 4
|
|
/// processor.
|
|
///
|
|
UINT32 InitialLocalApicId:8;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_VERSION_INFO_EBX;
|
|
|
|
/**
|
|
CPUID Version Information returned in ECX for CPUID leaf
|
|
#CPUID_VERSION_INFO.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 0] Streaming SIMD Extensions 3 (SSE3). A value of 1 indicates the
|
|
/// processor supports this technology
|
|
///
|
|
UINT32 SSE3:1;
|
|
///
|
|
/// [Bit 1] A value of 1 indicates the processor supports the PCLMULQDQ
|
|
/// instruction. Carryless Multiplication
|
|
///
|
|
UINT32 PCLMULQDQ:1;
|
|
///
|
|
/// [Bit 2] 64-bit DS Area. A value of 1 indicates the processor supports
|
|
/// DS area using 64-bit layout.
|
|
///
|
|
UINT32 DTES64:1;
|
|
///
|
|
/// [Bit 3] MONITOR/MWAIT. A value of 1 indicates the processor supports
|
|
/// this feature.
|
|
///
|
|
UINT32 MONITOR:1;
|
|
///
|
|
/// [Bit 4] CPL Qualified Debug Store. A value of 1 indicates the processor
|
|
/// supports the extensions to the Debug Store feature to allow for branch
|
|
/// message storage qualified by CPL
|
|
///
|
|
UINT32 DS_CPL:1;
|
|
///
|
|
/// [Bit 5] Virtual Machine Extensions. A value of 1 indicates that the
|
|
/// processor supports this technology.
|
|
///
|
|
UINT32 VMX:1;
|
|
///
|
|
/// [Bit 6] Safer Mode Extensions. A value of 1 indicates that the processor
|
|
/// supports this technology
|
|
///
|
|
UINT32 SMX:1;
|
|
///
|
|
/// [Bit 7] Enhanced Intel SpeedStep(R) technology. A value of 1 indicates
|
|
/// that the processor supports this technology
|
|
///
|
|
UINT32 EIST:1;
|
|
///
|
|
/// [Bit 8] Thermal Monitor 2. A value of 1 indicates whether the processor
|
|
/// supports this technology
|
|
///
|
|
UINT32 TM2:1;
|
|
///
|
|
/// [Bit 9] A value of 1 indicates the presence of the Supplemental Streaming
|
|
/// SIMD Extensions 3 (SSSE3). A value of 0 indicates the instruction
|
|
/// extensions are not present in the processor.
|
|
///
|
|
UINT32 SSSE3:1;
|
|
///
|
|
/// [Bit 10] L1 Context ID. A value of 1 indicates the L1 data cache mode
|
|
/// can be set to either adaptive mode or shared mode. A value of 0 indicates
|
|
/// this feature is not supported. See definition of the IA32_MISC_ENABLE MSR
|
|
/// Bit 24 (L1 Data Cache Context Mode) for details
|
|
///
|
|
UINT32 CNXT_ID:1;
|
|
///
|
|
/// [Bit 11] A value of 1 indicates the processor supports IA32_DEBUG_INTERFACE
|
|
/// MSR for silicon debug
|
|
///
|
|
UINT32 SDBG:1;
|
|
///
|
|
/// [Bit 12] A value of 1 indicates the processor supports FMA (Fused Multiple
|
|
/// Add) extensions using YMM state.
|
|
///
|
|
UINT32 FMA:1;
|
|
///
|
|
/// [Bit 13] CMPXCHG16B Available. A value of 1 indicates that the feature
|
|
/// is available.
|
|
///
|
|
UINT32 CMPXCHG16B:1;
|
|
///
|
|
/// [Bit 14] xTPR Update Control. A value of 1 indicates that the processor
|
|
/// supports changing IA32_MISC_ENABLE[Bit 23].
|
|
///
|
|
UINT32 xTPR_Update_Control:1;
|
|
///
|
|
/// [Bit 15] Perfmon and Debug Capability: A value of 1 indicates the
|
|
/// processor supports the performance and debug feature indication MSR
|
|
/// IA32_PERF_CAPABILITIES.
|
|
///
|
|
UINT32 PDCM:1;
|
|
UINT32 Reserved:1;
|
|
///
|
|
/// [Bit 17] Process-context identifiers. A value of 1 indicates that the
|
|
/// processor supports PCIDs and that software may set CR4.PCIDE to 1.
|
|
///
|
|
UINT32 PCID:1;
|
|
///
|
|
/// [Bit 18] A value of 1 indicates the processor supports the ability to
|
|
/// prefetch data from a memory mapped device. Direct Cache Access.
|
|
///
|
|
UINT32 DCA:1;
|
|
///
|
|
/// [Bit 19] A value of 1 indicates that the processor supports SSE4.1.
|
|
///
|
|
UINT32 SSE4_1:1;
|
|
///
|
|
/// [Bit 20] A value of 1 indicates that the processor supports SSE4.2.
|
|
///
|
|
UINT32 SSE4_2:1;
|
|
///
|
|
/// [Bit 21] A value of 1 indicates that the processor supports x2APIC
|
|
/// feature.
|
|
///
|
|
UINT32 x2APIC:1;
|
|
///
|
|
/// [Bit 22] A value of 1 indicates that the processor supports MOVBE
|
|
/// instruction.
|
|
///
|
|
UINT32 MOVBE:1;
|
|
///
|
|
/// [Bit 23] A value of 1 indicates that the processor supports the POPCNT
|
|
/// instruction.
|
|
///
|
|
UINT32 POPCNT:1;
|
|
///
|
|
/// [Bit 24] A value of 1 indicates that the processor's local APIC timer
|
|
/// supports one-shot operation using a TSC deadline value.
|
|
///
|
|
UINT32 TSC_Deadline:1;
|
|
///
|
|
/// [Bit 25] A value of 1 indicates that the processor supports the AESNI
|
|
/// instruction extensions.
|
|
///
|
|
UINT32 AESNI:1;
|
|
///
|
|
/// [Bit 26] A value of 1 indicates that the processor supports the
|
|
/// XSAVE/XRSTOR processor extended states feature, the XSETBV/XGETBV
|
|
/// instructions, and XCR0.
|
|
///
|
|
UINT32 XSAVE:1;
|
|
///
|
|
/// [Bit 27] A value of 1 indicates that the OS has set CR4.OSXSAVE[Bit 18]
|
|
/// to enable XSETBV/XGETBV instructions to access XCR0 and to support
|
|
/// processor extended state management using XSAVE/XRSTOR.
|
|
///
|
|
UINT32 OSXSAVE:1;
|
|
///
|
|
/// [Bit 28] A value of 1 indicates the processor supports the AVX instruction
|
|
/// extensions.
|
|
///
|
|
UINT32 AVX:1;
|
|
///
|
|
/// [Bit 29] A value of 1 indicates that processor supports 16-bit
|
|
/// floating-point conversion instructions.
|
|
///
|
|
UINT32 F16C:1;
|
|
///
|
|
/// [Bit 30] A value of 1 indicates that processor supports RDRAND instruction.
|
|
///
|
|
UINT32 RDRAND:1;
|
|
///
|
|
/// [Bit 31] Always returns 0.
|
|
///
|
|
UINT32 NotUsed:1;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_VERSION_INFO_ECX;
|
|
|
|
/**
|
|
CPUID Version Information returned in EDX for CPUID leaf
|
|
#CPUID_VERSION_INFO.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 0] Floating Point Unit On-Chip. The processor contains an x87 FPU.
|
|
///
|
|
UINT32 FPU:1;
|
|
///
|
|
/// [Bit 1] Virtual 8086 Mode Enhancements. Virtual 8086 mode enhancements,
|
|
/// including CR4.VME for controlling the feature, CR4.PVI for protected
|
|
/// mode virtual interrupts, software interrupt indirection, expansion of
|
|
/// the TSS with the software indirection bitmap, and EFLAGS.VIF and
|
|
/// EFLAGS.VIP flags.
|
|
///
|
|
UINT32 VME:1;
|
|
///
|
|
/// [Bit 2] Debugging Extensions. Support for I/O breakpoints, including
|
|
/// CR4.DE for controlling the feature, and optional trapping of accesses to
|
|
/// DR4 and DR5.
|
|
///
|
|
UINT32 DE:1;
|
|
///
|
|
/// [Bit 3] Page Size Extension. Large pages of size 4 MByte are supported,
|
|
/// including CR4.PSE for controlling the feature, the defined dirty bit in
|
|
/// PDE (Page Directory Entries), optional reserved bit trapping in CR3,
|
|
/// PDEs, and PTEs.
|
|
///
|
|
UINT32 PSE:1;
|
|
///
|
|
/// [Bit 4] Time Stamp Counter. The RDTSC instruction is supported,
|
|
/// including CR4.TSD for controlling privilege.
|
|
///
|
|
UINT32 TSC:1;
|
|
///
|
|
/// [Bit 5] Model Specific Registers RDMSR and WRMSR Instructions. The
|
|
/// RDMSR and WRMSR instructions are supported. Some of the MSRs are
|
|
/// implementation dependent.
|
|
///
|
|
UINT32 MSR:1;
|
|
///
|
|
/// [Bit 6] Physical Address Extension. Physical addresses greater than 32
|
|
/// bits are supported: extended page table entry formats, an extra level in
|
|
/// the page translation tables is defined, 2-MByte pages are supported
|
|
/// instead of 4 Mbyte pages if PAE bit is 1.
|
|
///
|
|
UINT32 PAE:1;
|
|
///
|
|
/// [Bit 7] Machine Check Exception. Exception 18 is defined for Machine
|
|
/// Checks, including CR4.MCE for controlling the feature. This feature does
|
|
/// not define the model-specific implementations of machine-check error
|
|
/// logging, reporting, and processor shutdowns. Machine Check exception
|
|
/// handlers may have to depend on processor version to do model specific
|
|
/// processing of the exception, or test for the presence of the Machine
|
|
/// Check feature.
|
|
///
|
|
UINT32 MCE:1;
|
|
///
|
|
/// [Bit 8] CMPXCHG8B Instruction. The compare-and-exchange 8 bytes(64 bits)
|
|
/// instruction is supported (implicitly locked and atomic).
|
|
///
|
|
UINT32 CX8:1;
|
|
///
|
|
/// [Bit 9] APIC On-Chip. The processor contains an Advanced Programmable
|
|
/// Interrupt Controller (APIC), responding to memory mapped commands in the
|
|
/// physical address range FFFE0000H to FFFE0FFFH (by default - some
|
|
/// processors permit the APIC to be relocated).
|
|
///
|
|
UINT32 APIC:1;
|
|
UINT32 Reserved1:1;
|
|
///
|
|
/// [Bit 11] SYSENTER and SYSEXIT Instructions. The SYSENTER and SYSEXIT
|
|
/// and associated MSRs are supported.
|
|
///
|
|
UINT32 SEP:1;
|
|
///
|
|
/// [Bit 12] Memory Type Range Registers. MTRRs are supported. The MTRRcap
|
|
/// MSR contains feature bits that describe what memory types are supported,
|
|
/// how many variable MTRRs are supported, and whether fixed MTRRs are
|
|
/// supported.
|
|
///
|
|
UINT32 MTRR:1;
|
|
///
|
|
/// [Bit 13] Page Global Bit. The global bit is supported in paging-structure
|
|
/// entries that map a page, indicating TLB entries that are common to
|
|
/// different processes and need not be flushed. The CR4.PGE bit controls
|
|
/// this feature.
|
|
///
|
|
UINT32 PGE:1;
|
|
///
|
|
/// [Bit 14] Machine Check Architecture. The Machine Check Architecture,
|
|
/// which provides a compatible mechanism for error reporting in P6 family,
|
|
/// Pentium 4, Intel Xeon processors, and future processors, is supported.
|
|
/// The MCG_CAP MSR contains feature bits describing how many banks of error
|
|
/// reporting MSRs are supported.
|
|
///
|
|
UINT32 MCA:1;
|
|
///
|
|
/// [Bit 15] Conditional Move Instructions. The conditional move instruction
|
|
/// CMOV is supported. In addition, if x87 FPU is present as indicated by the
|
|
/// CPUID.FPU feature bit, then the FCOMI and FCMOV instructions are supported.
|
|
///
|
|
UINT32 CMOV:1;
|
|
///
|
|
/// [Bit 16] Page Attribute Table. Page Attribute Table is supported. This
|
|
/// feature augments the Memory Type Range Registers (MTRRs), allowing an
|
|
/// operating system to specify attributes of memory accessed through a
|
|
/// linear address on a 4KB granularity.
|
|
///
|
|
UINT32 PAT:1;
|
|
///
|
|
/// [Bit 17] 36-Bit Page Size Extension. 4-MByte pages addressing physical
|
|
/// memory beyond 4 GBytes are supported with 32-bit paging. This feature
|
|
/// indicates that upper bits of the physical address of a 4-MByte page are
|
|
/// encoded in bits 20:13 of the page-directory entry. Such physical
|
|
/// addresses are limited by MAXPHYADDR and may be up to 40 bits in size.
|
|
///
|
|
UINT32 PSE_36:1;
|
|
///
|
|
/// [Bit 18] Processor Serial Number. The processor supports the 96-bit
|
|
/// processor identification number feature and the feature is enabled.
|
|
///
|
|
UINT32 PSN:1;
|
|
///
|
|
/// [Bit 19] CLFLUSH Instruction. CLFLUSH Instruction is supported.
|
|
///
|
|
UINT32 CLFSH:1;
|
|
UINT32 Reserved2:1;
|
|
///
|
|
/// [Bit 21] Debug Store. The processor supports the ability to write debug
|
|
/// information into a memory resident buffer. This feature is used by the
|
|
/// branch trace store (BTS) and precise event-based sampling (PEBS)
|
|
/// facilities.
|
|
///
|
|
UINT32 DS:1;
|
|
///
|
|
/// [Bit 22] Thermal Monitor and Software Controlled Clock Facilities. The
|
|
/// processor implements internal MSRs that allow processor temperature to
|
|
/// be monitored and processor performance to be modulated in predefined
|
|
/// duty cycles under software control.
|
|
///
|
|
UINT32 ACPI:1;
|
|
///
|
|
/// [Bit 23] Intel MMX Technology. The processor supports the Intel MMX
|
|
/// technology.
|
|
///
|
|
UINT32 MMX:1;
|
|
///
|
|
/// [Bit 24] FXSAVE and FXRSTOR Instructions. The FXSAVE and FXRSTOR
|
|
/// instructions are supported for fast save and restore of the floating
|
|
/// point context. Presence of this bit also indicates that CR4.OSFXSR is
|
|
/// available for an operating system to indicate that it supports the
|
|
/// FXSAVE and FXRSTOR instructions.
|
|
///
|
|
UINT32 FXSR:1;
|
|
///
|
|
/// [Bit 25] SSE. The processor supports the SSE extensions.
|
|
///
|
|
UINT32 SSE:1;
|
|
///
|
|
/// [Bit 26] SSE2. The processor supports the SSE2 extensions.
|
|
///
|
|
UINT32 SSE2:1;
|
|
///
|
|
/// [Bit 27] Self Snoop. The processor supports the management of
|
|
/// conflicting memory types by performing a snoop of its own cache
|
|
/// structure for transactions issued to the bus.
|
|
///
|
|
UINT32 SS:1;
|
|
///
|
|
/// [Bit 28] Max APIC IDs reserved field is Valid. A value of 0 for HTT
|
|
/// indicates there is only a single logical processor in the package and
|
|
/// software should assume only a single APIC ID is reserved. A value of 1
|
|
/// for HTT indicates the value in CPUID.1.EBX[23:16] (the Maximum number of
|
|
/// addressable IDs for logical processors in this package) is valid for the
|
|
/// package.
|
|
///
|
|
UINT32 HTT:1;
|
|
///
|
|
/// [Bit 29] Thermal Monitor. The processor implements the thermal monitor
|
|
/// automatic thermal control circuitry (TCC).
|
|
///
|
|
UINT32 TM:1;
|
|
UINT32 Reserved3:1;
|
|
///
|
|
/// [Bit 31] Pending Break Enable. The processor supports the use of the
|
|
/// FERR#/PBE# pin when the processor is in the stop-clock state (STPCLK# is
|
|
/// asserted) to signal the processor that an interrupt is pending and that
|
|
/// the processor should return to normal operation to handle the interrupt.
|
|
/// Bit 10 (PBE enable) in the IA32_MISC_ENABLE MSR enables this capability.
|
|
///
|
|
UINT32 PBE:1;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_VERSION_INFO_EDX;
|
|
|
|
|
|
/**
|
|
CPUID Cache and TLB Information
|
|
|
|
@param EAX CPUID_CACHE_INFO (0x02)
|
|
|
|
@retval EAX Cache and TLB Information described by the type
|
|
CPUID_CACHE_INFO_CACHE_TLB.
|
|
CPUID_CACHE_INFO_CACHE_TLB.CacheDescriptor[0] always returns
|
|
0x01 and must be ignored. Only valid if
|
|
CPUID_CACHE_INFO_CACHE_TLB.Bits.NotValid is clear.
|
|
@retval EBX Cache and TLB Information described by the type
|
|
CPUID_CACHE_INFO_CACHE_TLB. Only valid if
|
|
CPUID_CACHE_INFO_CACHE_TLB.Bits.NotValid is clear.
|
|
@retval ECX Cache and TLB Information described by the type
|
|
CPUID_CACHE_INFO_CACHE_TLB. Only valid if
|
|
CPUID_CACHE_INFO_CACHE_TLB.Bits.NotValid is clear.
|
|
@retval EDX Cache and TLB Information described by the type
|
|
CPUID_CACHE_INFO_CACHE_TLB. Only valid if
|
|
CPUID_CACHE_INFO_CACHE_TLB.Bits.NotValid is clear.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_CACHE_INFO_CACHE_TLB Eax;
|
|
CPUID_CACHE_INFO_CACHE_TLB Ebx;
|
|
CPUID_CACHE_INFO_CACHE_TLB Ecx;
|
|
CPUID_CACHE_INFO_CACHE_TLB Edx;
|
|
|
|
AsmCpuid (CPUID_CACHE_INFO, &Eax.Uint32, &Ebx.Uint32, &Ecx.Uint32, &Edx.Uint32);
|
|
@endcode
|
|
|
|
<b>Cache Descriptor values</b>
|
|
<table>
|
|
<tr><th>Value </th><th> Type </th><th> Description </th></tr>
|
|
<tr><td> 0x00 </td><td> General </td><td> Null descriptor, this byte contains no information</td></tr>
|
|
<tr><td> 0x01 </td><td> TLB </td><td> Instruction TLB: 4 KByte pages, 4-way set associative, 32 entries</td></tr>
|
|
<tr><td> 0x02 </td><td> TLB </td><td> Instruction TLB: 4 MByte pages, fully associative, 2 entries</td></tr>
|
|
<tr><td> 0x03 </td><td> TLB </td><td> Data TLB: 4 KByte pages, 4-way set associative, 64 entries</td></tr>
|
|
<tr><td> 0x04 </td><td> TLB </td><td> Data TLB: 4 MByte pages, 4-way set associative, 8 entries</td></tr>
|
|
<tr><td> 0x05 </td><td> TLB </td><td> Data TLB1: 4 MByte pages, 4-way set associative, 32 entries</td></tr>
|
|
<tr><td> 0x06 </td><td> Cache </td><td> 1st-level instruction cache: 8 KBytes, 4-way set associative,
|
|
32 byte line size</td></tr>
|
|
<tr><td> 0x08 </td><td> Cache </td><td> 1st-level instruction cache: 16 KBytes, 4-way set associative,
|
|
32 byte line size</td></tr>
|
|
<tr><td> 0x09 </td><td> Cache </td><td> 1st-level instruction cache: 32KBytes, 4-way set associative,
|
|
64 byte line size</td></tr>
|
|
<tr><td> 0x0A </td><td> Cache </td><td> 1st-level data cache: 8 KBytes, 2-way set associative, 32 byte line size</td></tr>
|
|
<tr><td> 0x0B </td><td> TLB </td><td> Instruction TLB: 4 MByte pages, 4-way set associative, 4 entries</td></tr>
|
|
<tr><td> 0x0C </td><td> Cache </td><td> 1st-level data cache: 16 KBytes, 4-way set associative, 32 byte line size</td></tr>
|
|
<tr><td> 0x0D </td><td> Cache </td><td> 1st-level data cache: 16 KBytes, 4-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x0E </td><td> Cache </td><td> 1st-level data cache: 24 KBytes, 6-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x1D </td><td> Cache </td><td> 2nd-level cache: 128 KBytes, 2-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x21 </td><td> Cache </td><td> 2nd-level cache: 256 KBytes, 8-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x22 </td><td> Cache </td><td> 3rd-level cache: 512 KBytes, 4-way set associative, 64 byte line size,
|
|
2 lines per sector</td></tr>
|
|
<tr><td> 0x23 </td><td> Cache </td><td> 3rd-level cache: 1 MBytes, 8-way set associative, 64 byte line size,
|
|
2 lines per sector</td></tr>
|
|
<tr><td> 0x24 </td><td> Cache </td><td> 2nd-level cache: 1 MBytes, 16-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x25 </td><td> Cache </td><td> 3rd-level cache: 2 MBytes, 8-way set associative, 64 byte line size,
|
|
2 lines per sector</td></tr>
|
|
<tr><td> 0x29 </td><td> Cache </td><td> 3rd-level cache: 4 MBytes, 8-way set associative, 64 byte line size,
|
|
2 lines per sector</td></tr>
|
|
<tr><td> 0x2C </td><td> Cache </td><td> 1st-level data cache: 32 KBytes, 8-way set associative,
|
|
64 byte line size</td></tr>
|
|
<tr><td> 0x30 </td><td> Cache </td><td> 1st-level instruction cache: 32 KBytes, 8-way set associative,
|
|
64 byte line size</td></tr>
|
|
<tr><td> 0x40 </td><td> Cache </td><td> No 2nd-level cache or, if processor contains a valid 2nd-level cache,
|
|
no 3rd-level cache</td></tr>
|
|
<tr><td> 0x41 </td><td> Cache </td><td> 2nd-level cache: 128 KBytes, 4-way set associative, 32 byte line size</td></tr>
|
|
<tr><td> 0x42 </td><td> Cache </td><td> 2nd-level cache: 256 KBytes, 4-way set associative, 32 byte line size</td></tr>
|
|
<tr><td> 0x43 </td><td> Cache </td><td> 2nd-level cache: 512 KBytes, 4-way set associative, 32 byte line size</td></tr>
|
|
<tr><td> 0x44 </td><td> Cache </td><td> 2nd-level cache: 1 MByte, 4-way set associative, 32 byte line size</td></tr>
|
|
<tr><td> 0x45 </td><td> Cache </td><td> 2nd-level cache: 2 MByte, 4-way set associative, 32 byte line size</td></tr>
|
|
<tr><td> 0x46 </td><td> Cache </td><td> 3rd-level cache: 4 MByte, 4-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x47 </td><td> Cache </td><td> 3rd-level cache: 8 MByte, 8-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x48 </td><td> Cache </td><td> 2nd-level cache: 3MByte, 12-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x49 </td><td> Cache </td><td> 3rd-level cache: 4MB, 16-way set associative, 64-byte line size
|
|
(Intel Xeon processor MP, Family 0FH, Model 06H)<BR>
|
|
2nd-level cache: 4 MByte, 16-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x4A </td><td> Cache </td><td> 3rd-level cache: 6MByte, 12-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x4B </td><td> Cache </td><td> 3rd-level cache: 8MByte, 16-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x4C </td><td> Cache </td><td> 3rd-level cache: 12MByte, 12-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x4D </td><td> Cache </td><td> 3rd-level cache: 16MByte, 16-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x4E </td><td> Cache </td><td> 2nd-level cache: 6MByte, 24-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x4F </td><td> TLB </td><td> Instruction TLB: 4 KByte pages, 32 entries</td></tr>
|
|
<tr><td> 0x50 </td><td> TLB </td><td> Instruction TLB: 4 KByte and 2-MByte or 4-MByte pages, 64 entries</td></tr>
|
|
<tr><td> 0x51 </td><td> TLB </td><td> Instruction TLB: 4 KByte and 2-MByte or 4-MByte pages, 128 entries</td></tr>
|
|
<tr><td> 0x52 </td><td> TLB </td><td> Instruction TLB: 4 KByte and 2-MByte or 4-MByte pages, 256 entries</td></tr>
|
|
<tr><td> 0x55 </td><td> TLB </td><td> Instruction TLB: 2-MByte or 4-MByte pages, fully associative, 7 entries</td></tr>
|
|
<tr><td> 0x56 </td><td> TLB </td><td> Data TLB0: 4 MByte pages, 4-way set associative, 16 entries</td></tr>
|
|
<tr><td> 0x57 </td><td> TLB </td><td> Data TLB0: 4 KByte pages, 4-way associative, 16 entries</td></tr>
|
|
<tr><td> 0x59 </td><td> TLB </td><td> Data TLB0: 4 KByte pages, fully associative, 16 entries</td></tr>
|
|
<tr><td> 0x5A </td><td> TLB </td><td> Data TLB0: 2-MByte or 4 MByte pages, 4-way set associative, 32 entries</td></tr>
|
|
<tr><td> 0x5B </td><td> TLB </td><td> Data TLB: 4 KByte and 4 MByte pages, 64 entries</td></tr>
|
|
<tr><td> 0x5C </td><td> TLB </td><td> Data TLB: 4 KByte and 4 MByte pages,128 entries</td></tr>
|
|
<tr><td> 0x5D </td><td> TLB </td><td> Data TLB: 4 KByte and 4 MByte pages,256 entries</td></tr>
|
|
<tr><td> 0x60 </td><td> Cache </td><td> 1st-level data cache: 16 KByte, 8-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x61 </td><td> TLB </td><td> Instruction TLB: 4 KByte pages, fully associative, 48 entries</td></tr>
|
|
<tr><td> 0x63 </td><td> TLB </td><td> Data TLB: 1 GByte pages, 4-way set associative, 4 entries</td></tr>
|
|
<tr><td> 0x66 </td><td> Cache </td><td> 1st-level data cache: 8 KByte, 4-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x67 </td><td> Cache </td><td> 1st-level data cache: 16 KByte, 4-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x68 </td><td> Cache </td><td> 1st-level data cache: 32 KByte, 4-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x6A </td><td> Cache </td><td> uTLB: 4 KByte pages, 8-way set associative, 64 entries</td></tr>
|
|
<tr><td> 0x6B </td><td> Cache </td><td> DTLB: 4 KByte pages, 8-way set associative, 256 entries</td></tr>
|
|
<tr><td> 0x6C </td><td> Cache </td><td> DTLB: 2M/4M pages, 8-way set associative, 128 entries</td></tr>
|
|
<tr><td> 0x6D </td><td> Cache </td><td> DTLB: 1 GByte pages, fully associative, 16 entries</td></tr>
|
|
<tr><td> 0x70 </td><td> Cache </td><td> Trace cache: 12 K-uop, 8-way set associative</td></tr>
|
|
<tr><td> 0x71 </td><td> Cache </td><td> Trace cache: 16 K-uop, 8-way set associative</td></tr>
|
|
<tr><td> 0x72 </td><td> Cache </td><td> Trace cache: 32 K-uop, 8-way set associative</td></tr>
|
|
<tr><td> 0x76 </td><td> TLB </td><td> Instruction TLB: 2M/4M pages, fully associative, 8 entries</td></tr>
|
|
<tr><td> 0x78 </td><td> Cache </td><td> 2nd-level cache: 1 MByte, 4-way set associative, 64byte line size</td></tr>
|
|
<tr><td> 0x79 </td><td> Cache </td><td> 2nd-level cache: 128 KByte, 8-way set associative, 64 byte line size,
|
|
2 lines per sector</td></tr>
|
|
<tr><td> 0x7A </td><td> Cache </td><td> 2nd-level cache: 256 KByte, 8-way set associative, 64 byte line size,
|
|
2 lines per sector</td></tr>
|
|
<tr><td> 0x7B </td><td> Cache </td><td> 2nd-level cache: 512 KByte, 8-way set associative, 64 byte line size,
|
|
2 lines per sector</td></tr>
|
|
<tr><td> 0x7C </td><td> Cache </td><td> 2nd-level cache: 1 MByte, 8-way set associative, 64 byte line size,
|
|
2 lines per sector</td></tr>
|
|
<tr><td> 0x7D </td><td> Cache </td><td> 2nd-level cache: 2 MByte, 8-way set associative, 64byte line size</td></tr>
|
|
<tr><td> 0x7F </td><td> Cache </td><td> 2nd-level cache: 512 KByte, 2-way set associative, 64-byte line size</td></tr>
|
|
<tr><td> 0x80 </td><td> Cache </td><td> 2nd-level cache: 512 KByte, 8-way set associative, 64-byte line size</td></tr>
|
|
<tr><td> 0x82 </td><td> Cache </td><td> 2nd-level cache: 256 KByte, 8-way set associative, 32 byte line size</td></tr>
|
|
<tr><td> 0x83 </td><td> Cache </td><td> 2nd-level cache: 512 KByte, 8-way set associative, 32 byte line size</td></tr>
|
|
<tr><td> 0x84 </td><td> Cache </td><td> 2nd-level cache: 1 MByte, 8-way set associative, 32 byte line size</td></tr>
|
|
<tr><td> 0x85 </td><td> Cache </td><td> 2nd-level cache: 2 MByte, 8-way set associative, 32 byte line size</td></tr>
|
|
<tr><td> 0x86 </td><td> Cache </td><td> 2nd-level cache: 512 KByte, 4-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0x87 </td><td> Cache </td><td> 2nd-level cache: 1 MByte, 8-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0xA0 </td><td> DTLB </td><td> DTLB: 4k pages, fully associative, 32 entries</td></tr>
|
|
<tr><td> 0xB0 </td><td> TLB </td><td> Instruction TLB: 4 KByte pages, 4-way set associative, 128 entries</td></tr>
|
|
<tr><td> 0xB1 </td><td> TLB </td><td> Instruction TLB: 2M pages, 4-way, 8 entries or 4M pages, 4-way, 4 entries</td></tr>
|
|
<tr><td> 0xB2 </td><td> TLB </td><td> Instruction TLB: 4KByte pages, 4-way set associative, 64 entries</td></tr>
|
|
<tr><td> 0xB3 </td><td> TLB </td><td> Data TLB: 4 KByte pages, 4-way set associative, 128 entries</td></tr>
|
|
<tr><td> 0xB4 </td><td> TLB </td><td> Data TLB1: 4 KByte pages, 4-way associative, 256 entries</td></tr>
|
|
<tr><td> 0xB5 </td><td> TLB </td><td> Instruction TLB: 4KByte pages, 8-way set associative, 64 entries</td></tr>
|
|
<tr><td> 0xB6 </td><td> TLB </td><td> Instruction TLB: 4KByte pages, 8-way set associative,
|
|
128 entries</td></tr>
|
|
<tr><td> 0xBA </td><td> TLB </td><td> Data TLB1: 4 KByte pages, 4-way associative, 64 entries</td></tr>
|
|
<tr><td> 0xC0 </td><td> TLB </td><td> Data TLB: 4 KByte and 4 MByte pages, 4-way associative, 8 entries</td></tr>
|
|
<tr><td> 0xC1 </td><td> STLB </td><td> Shared 2nd-Level TLB: 4 KByte/2MByte pages, 8-way associative,
|
|
1024 entries</td></tr>
|
|
<tr><td> 0xC2 </td><td> DTLB </td><td> DTLB: 4 KByte/2 MByte pages, 4-way associative, 16 entries</td></tr>
|
|
<tr><td> 0xC3 </td><td> STLB </td><td> Shared 2nd-Level TLB: 4 KByte /2 MByte pages, 6-way associative,
|
|
1536 entries. Also 1GBbyte pages, 4-way, 16 entries.</td></tr>
|
|
<tr><td> 0xCA </td><td> STLB </td><td> Shared 2nd-Level TLB: 4 KByte pages, 4-way associative, 512 entries</td></tr>
|
|
<tr><td> 0xD0 </td><td> Cache </td><td> 3rd-level cache: 512 KByte, 4-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0xD1 </td><td> Cache </td><td> 3rd-level cache: 1 MByte, 4-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0xD2 </td><td> Cache </td><td> 3rd-level cache: 2 MByte, 4-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0xD6 </td><td> Cache </td><td> 3rd-level cache: 1 MByte, 8-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0xD7 </td><td> Cache </td><td> 3rd-level cache: 2 MByte, 8-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0xD8 </td><td> Cache </td><td> 3rd-level cache: 4 MByte, 8-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0xDC </td><td> Cache </td><td> 3rd-level cache: 1.5 MByte, 12-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0xDD </td><td> Cache </td><td> 3rd-level cache: 3 MByte, 12-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0xDE </td><td> Cache </td><td> 3rd-level cache: 6 MByte, 12-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0xE2 </td><td> Cache </td><td> 3rd-level cache: 2 MByte, 16-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0xE3 </td><td> Cache </td><td> 3rd-level cache: 4 MByte, 16-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0xE4 </td><td> Cache </td><td> 3rd-level cache: 8 MByte, 16-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0xEA </td><td> Cache </td><td> 3rd-level cache: 12MByte, 24-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0xEB </td><td> Cache </td><td> 3rd-level cache: 18MByte, 24-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0xEC </td><td> Cache </td><td> 3rd-level cache: 24MByte, 24-way set associative, 64 byte line size</td></tr>
|
|
<tr><td> 0xF0 </td><td> Prefetch</td><td> 64-Byte prefetching</td></tr>
|
|
<tr><td> 0xF1 </td><td> Prefetch</td><td> 128-Byte prefetching</td></tr>
|
|
<tr><td> 0xFF </td><td> General </td><td> CPUID leaf 2 does not report cache descriptor information,
|
|
use CPUID leaf 4 to query cache parameters</td></tr>
|
|
</table>
|
|
**/
|
|
#define CPUID_CACHE_INFO 0x02
|
|
|
|
/**
|
|
CPUID Cache and TLB Information returned in EAX, EBX, ECX, and EDX for CPUID
|
|
leaf #CPUID_CACHE_INFO.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
UINT32 Reserved:31;
|
|
///
|
|
/// [Bit 31] If 0, then the cache descriptor bytes in the register are valid.
|
|
/// if 1, then none of the cache descriptor bytes in the register are valid.
|
|
///
|
|
UINT32 NotValid:1;
|
|
} Bits;
|
|
///
|
|
/// Array of Cache and TLB descriptor bytes
|
|
///
|
|
UINT8 CacheDescriptor[4];
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_CACHE_INFO_CACHE_TLB;
|
|
|
|
|
|
/**
|
|
CPUID Processor Serial Number
|
|
|
|
Processor serial number (PSN) is not supported in the Pentium 4 processor
|
|
or later. On all models, use the PSN flag (returned using CPUID) to check
|
|
for PSN support before accessing the feature.
|
|
|
|
@param EAX CPUID_SERIAL_NUMBER (0x03)
|
|
|
|
@retval EAX Reserved.
|
|
@retval EBX Reserved.
|
|
@retval ECX Bits 31:0 of 96 bit processor serial number. (Available in
|
|
Pentium III processor only; otherwise, the value in this
|
|
register is reserved.)
|
|
@retval EDX Bits 63:32 of 96 bit processor serial number. (Available in
|
|
Pentium III processor only; otherwise, the value in this
|
|
register is reserved.)
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
UINT32 Ecx;
|
|
UINT32 Edx;
|
|
|
|
AsmCpuid (CPUID_SERIAL_NUMBER, NULL, NULL, &Ecx, &Edx);
|
|
@endcode
|
|
**/
|
|
#define CPUID_SERIAL_NUMBER 0x03
|
|
|
|
|
|
/**
|
|
CPUID Cache Parameters
|
|
|
|
@param EAX CPUID_CACHE_PARAMS (0x04)
|
|
@param ECX Cache Level. Valid values start at 0. Software can enumerate
|
|
the deterministic cache parameters for each level of the cache
|
|
hierarchy starting with an index value of 0, until the
|
|
parameters report the value associated with the CacheType
|
|
field in CPUID_CACHE_PARAMS_EAX is 0.
|
|
|
|
@retval EAX Returns cache type information described by the type
|
|
CPUID_CACHE_PARAMS_EAX.
|
|
@retval EBX Returns cache line and associativity information described by
|
|
the type CPUID_CACHE_PARAMS_EBX.
|
|
@retval ECX Returns the number of sets in the cache.
|
|
@retval EDX Returns cache WINVD/INVD behavior described by the type
|
|
CPUID_CACHE_PARAMS_EDX.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
UINT32 CacheLevel;
|
|
CPUID_CACHE_PARAMS_EAX Eax;
|
|
CPUID_CACHE_PARAMS_EBX Ebx;
|
|
UINT32 Ecx;
|
|
CPUID_CACHE_PARAMS_EDX Edx;
|
|
|
|
CacheLevel = 0;
|
|
do {
|
|
AsmCpuidEx (
|
|
CPUID_CACHE_PARAMS, CacheLevel,
|
|
&Eax.Uint32, &Ebx.Uint32, &Ecx, &Edx.Uint32
|
|
);
|
|
CacheLevel++;
|
|
} while (Eax.Bits.CacheType != CPUID_CACHE_PARAMS_CACHE_TYPE_NULL);
|
|
@endcode
|
|
**/
|
|
#define CPUID_CACHE_PARAMS 0x04
|
|
|
|
/**
|
|
CPUID Cache Parameters Information returned in EAX for CPUID leaf
|
|
#CPUID_CACHE_PARAMS.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 4:0] Cache type field. If #CPUID_CACHE_PARAMS_CACHE_TYPE_NULL,
|
|
/// then there is no information for the requested cache level.
|
|
///
|
|
UINT32 CacheType:5;
|
|
///
|
|
/// [Bits 7:5] Cache level (Starts at 1).
|
|
///
|
|
UINT32 CacheLevel:3;
|
|
///
|
|
/// [Bit 8] Self Initializing cache level (does not need SW initialization).
|
|
///
|
|
UINT32 SelfInitializingCache:1;
|
|
///
|
|
/// [Bit 9] Fully Associative cache.
|
|
///
|
|
UINT32 FullyAssociativeCache:1;
|
|
///
|
|
/// [Bits 13:10] Reserved.
|
|
///
|
|
UINT32 Reserved:4;
|
|
///
|
|
/// [Bits 25:14] Maximum number of addressable IDs for logical processors
|
|
/// sharing this cache.
|
|
///
|
|
/// Add one to the return value to get the result.
|
|
/// The nearest power-of-2 integer that is not smaller than (1 + EAX[25:14])
|
|
/// is the number of unique initial APIC IDs reserved for addressing
|
|
/// different logical processors sharing this cache.
|
|
///
|
|
UINT32 MaximumAddressableIdsForLogicalProcessors:12;
|
|
///
|
|
/// [Bits 31:26] Maximum number of addressable IDs for processor cores in
|
|
/// the physical package.
|
|
///
|
|
/// The nearest power-of-2 integer that is not smaller than (1 + EAX[31:26])
|
|
/// is the number of unique Core_IDs reserved for addressing different
|
|
/// processor cores in a physical package. Core ID is a subset of bits of
|
|
/// the initial APIC ID.
|
|
/// The returned value is constant for valid initial values in ECX. Valid
|
|
/// ECX values start from 0.
|
|
///
|
|
UINT32 MaximumAddressableIdsForProcessorCores:6;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_CACHE_PARAMS_EAX;
|
|
|
|
///
|
|
/// @{ Define value for bit field CPUID_CACHE_PARAMS_EAX.CacheType
|
|
///
|
|
#define CPUID_CACHE_PARAMS_CACHE_TYPE_NULL 0x00
|
|
#define CPUID_CACHE_PARAMS_CACHE_TYPE_DATA 0x01
|
|
#define CPUID_CACHE_PARAMS_CACHE_TYPE_INSTRUCTION 0x02
|
|
#define CPUID_CACHE_PARAMS_CACHE_TYPE_UNIFIED 0x03
|
|
///
|
|
/// @}
|
|
///
|
|
|
|
/**
|
|
CPUID Cache Parameters Information returned in EBX for CPUID leaf
|
|
#CPUID_CACHE_PARAMS.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 11:0] System Coherency Line Size. Add one to the return value to
|
|
/// get the result.
|
|
///
|
|
UINT32 LineSize:12;
|
|
///
|
|
/// [Bits 21:12] Physical Line Partitions. Add one to the return value to
|
|
/// get the result.
|
|
///
|
|
UINT32 LinePartitions:10;
|
|
///
|
|
/// [Bits 31:22] Ways of associativity. Add one to the return value to get
|
|
/// the result.
|
|
///
|
|
UINT32 Ways:10;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_CACHE_PARAMS_EBX;
|
|
|
|
/**
|
|
CPUID Cache Parameters Information returned in EDX for CPUID leaf
|
|
#CPUID_CACHE_PARAMS.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 0] Write-Back Invalidate/Invalidate.
|
|
/// 0 = WBINVD/INVD from threads sharing this cache acts upon lower level
|
|
/// caches for threads sharing this cache.
|
|
/// 1 = WBINVD/INVD is not guaranteed to act upon lower level caches of
|
|
/// non-originating threads sharing this cache.
|
|
///
|
|
UINT32 Invalidate:1;
|
|
///
|
|
/// [Bit 1] Cache Inclusiveness.
|
|
/// 0 = Cache is not inclusive of lower cache levels.
|
|
/// 1 = Cache is inclusive of lower cache levels.
|
|
///
|
|
UINT32 CacheInclusiveness:1;
|
|
///
|
|
/// [Bit 2] Complex Cache Indexing.
|
|
/// 0 = Direct mapped cache.
|
|
/// 1 = A complex function is used to index the cache, potentially using all
|
|
/// address bits.
|
|
///
|
|
UINT32 ComplexCacheIndexing:1;
|
|
UINT32 Reserved:29;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_CACHE_PARAMS_EDX;
|
|
|
|
|
|
/**
|
|
CPUID MONITOR/MWAIT Information
|
|
|
|
@param EAX CPUID_MONITOR_MWAIT (0x05)
|
|
|
|
@retval EAX Smallest monitor-line size in bytes described by the type
|
|
CPUID_MONITOR_MWAIT_EAX.
|
|
@retval EBX Largest monitor-line size in bytes described by the type
|
|
CPUID_MONITOR_MWAIT_EBX.
|
|
@retval ECX Enumeration of Monitor-Mwait extensions support described by
|
|
the type CPUID_MONITOR_MWAIT_ECX.
|
|
@retval EDX Sub C-states supported described by the type
|
|
CPUID_MONITOR_MWAIT_EDX.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_MONITOR_MWAIT_EAX Eax;
|
|
CPUID_MONITOR_MWAIT_EBX Ebx;
|
|
CPUID_MONITOR_MWAIT_ECX Ecx;
|
|
CPUID_MONITOR_MWAIT_EDX Edx;
|
|
|
|
AsmCpuid (CPUID_MONITOR_MWAIT, &Eax.Uint32, &Ebx.Uint32, &Ecx.Uint32, &Edx.Uint32);
|
|
@endcode
|
|
**/
|
|
#define CPUID_MONITOR_MWAIT 0x05
|
|
|
|
/**
|
|
CPUID MONITOR/MWAIT Information returned in EAX for CPUID leaf
|
|
#CPUID_MONITOR_MWAIT.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 15:0] Smallest monitor-line size in bytes (default is processor's
|
|
/// monitor granularity).
|
|
///
|
|
UINT32 SmallestMonitorLineSize:16;
|
|
UINT32 Reserved:16;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_MONITOR_MWAIT_EAX;
|
|
|
|
/**
|
|
CPUID MONITOR/MWAIT Information returned in EBX for CPUID leaf
|
|
#CPUID_MONITOR_MWAIT.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 15:0] Largest monitor-line size in bytes (default is processor's
|
|
/// monitor granularity).
|
|
///
|
|
UINT32 LargestMonitorLineSize:16;
|
|
UINT32 Reserved:16;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_MONITOR_MWAIT_EBX;
|
|
|
|
/**
|
|
CPUID MONITOR/MWAIT Information returned in ECX for CPUID leaf
|
|
#CPUID_MONITOR_MWAIT.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 0] If 0, then only EAX and EBX are valid. If 1, then EAX, EBX, ECX,
|
|
/// and EDX are valid.
|
|
///
|
|
UINT32 ExtensionsSupported:1;
|
|
///
|
|
/// [Bit 1] Supports treating interrupts as break-event for MWAIT, even when
|
|
/// interrupts disabled.
|
|
///
|
|
UINT32 InterruptAsBreak:1;
|
|
UINT32 Reserved:30;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_MONITOR_MWAIT_ECX;
|
|
|
|
/**
|
|
CPUID MONITOR/MWAIT Information returned in EDX for CPUID leaf
|
|
#CPUID_MONITOR_MWAIT.
|
|
|
|
@note
|
|
The definition of C0 through C7 states for MWAIT extension are
|
|
processor-specific C-states, not ACPI C-states.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 3:0] Number of C0 sub C-states supported using MWAIT.
|
|
///
|
|
UINT32 C0States:4;
|
|
///
|
|
/// [Bits 7:4] Number of C1 sub C-states supported using MWAIT.
|
|
///
|
|
UINT32 C1States:4;
|
|
///
|
|
/// [Bits 11:8] Number of C2 sub C-states supported using MWAIT.
|
|
///
|
|
UINT32 C2States:4;
|
|
///
|
|
/// [Bits 15:12] Number of C3 sub C-states supported using MWAIT.
|
|
///
|
|
UINT32 C3States:4;
|
|
///
|
|
/// [Bits 19:16] Number of C4 sub C-states supported using MWAIT.
|
|
///
|
|
UINT32 C4States:4;
|
|
///
|
|
/// [Bits 23:20] Number of C5 sub C-states supported using MWAIT.
|
|
///
|
|
UINT32 C5States:4;
|
|
///
|
|
/// [Bits 27:24] Number of C6 sub C-states supported using MWAIT.
|
|
///
|
|
UINT32 C6States:4;
|
|
///
|
|
/// [Bits 31:28] Number of C7 sub C-states supported using MWAIT.
|
|
///
|
|
UINT32 C7States:4;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_MONITOR_MWAIT_EDX;
|
|
|
|
|
|
/**
|
|
CPUID Thermal and Power Management
|
|
|
|
@param EAX CPUID_THERMAL_POWER_MANAGEMENT (0x06)
|
|
|
|
@retval EAX Thermal and power management features described by the type
|
|
CPUID_THERMAL_POWER_MANAGEMENT_EAX.
|
|
@retval EBX Number of Interrupt Thresholds in Digital Thermal Sensor
|
|
described by the type CPUID_THERMAL_POWER_MANAGEMENT_EBX.
|
|
@retval ECX Performance features described by the type
|
|
CPUID_THERMAL_POWER_MANAGEMENT_ECX.
|
|
@retval EDX Reserved.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_THERMAL_POWER_MANAGEMENT_EAX Eax;
|
|
CPUID_THERMAL_POWER_MANAGEMENT_EBX Ebx;
|
|
CPUID_THERMAL_POWER_MANAGEMENT_ECX Ecx;
|
|
|
|
AsmCpuid (CPUID_THERMAL_POWER_MANAGEMENT, &Eax.Uint32, &Ebx.Uint32, &Ecx.Uint32, NULL);
|
|
@endcode
|
|
**/
|
|
#define CPUID_THERMAL_POWER_MANAGEMENT 0x06
|
|
|
|
/**
|
|
CPUID Thermal and Power Management Information returned in EAX for CPUID leaf
|
|
#CPUID_THERMAL_POWER_MANAGEMENT.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 0] Digital temperature sensor is supported if set.
|
|
///
|
|
UINT32 DigitalTemperatureSensor:1;
|
|
///
|
|
/// [Bit 1] Intel Turbo Boost Technology Available (see IA32_MISC_ENABLE[38]).
|
|
///
|
|
UINT32 TurboBoostTechnology:1;
|
|
///
|
|
/// [Bit 2] APIC-Timer-always-running feature is supported if set.
|
|
///
|
|
UINT32 ARAT:1;
|
|
UINT32 Reserved1:1;
|
|
///
|
|
/// [Bit 4] Power limit notification controls are supported if set.
|
|
///
|
|
UINT32 PLN:1;
|
|
///
|
|
/// [Bit 5] Clock modulation duty cycle extension is supported if set.
|
|
///
|
|
UINT32 ECMD:1;
|
|
///
|
|
/// [Bit 6] Package thermal management is supported if set.
|
|
///
|
|
UINT32 PTM:1;
|
|
///
|
|
/// [Bit 7] HWP base registers (IA32_PM_ENABLE[Bit 0], IA32_HWP_CAPABILITIES,
|
|
/// IA32_HWP_REQUEST, IA32_HWP_STATUS) are supported if set.
|
|
///
|
|
UINT32 HWP:1;
|
|
///
|
|
/// [Bit 8] IA32_HWP_INTERRUPT MSR is supported if set.
|
|
///
|
|
UINT32 HWP_Notification:1;
|
|
///
|
|
/// [Bit 9] IA32_HWP_REQUEST[Bits 41:32] is supported if set.
|
|
///
|
|
UINT32 HWP_Activity_Window:1;
|
|
///
|
|
/// [Bit 10] IA32_HWP_REQUEST[Bits 31:24] is supported if set.
|
|
///
|
|
UINT32 HWP_Energy_Performance_Preference:1;
|
|
///
|
|
/// [Bit 11] IA32_HWP_REQUEST_PKG MSR is supported if set.
|
|
///
|
|
UINT32 HWP_Package_Level_Request:1;
|
|
UINT32 Reserved2:1;
|
|
///
|
|
/// [Bit 13] HDC base registers IA32_PKG_HDC_CTL, IA32_PM_CTL1,
|
|
/// IA32_THREAD_STALL MSRs are supported if set.
|
|
///
|
|
UINT32 HDC:1;
|
|
UINT32 Reserved3:18;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_THERMAL_POWER_MANAGEMENT_EAX;
|
|
|
|
/**
|
|
CPUID Thermal and Power Management Information returned in EBX for CPUID leaf
|
|
#CPUID_THERMAL_POWER_MANAGEMENT.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// {Bits 3:0] Number of Interrupt Thresholds in Digital Thermal Sensor.
|
|
///
|
|
UINT32 InterruptThresholds:4;
|
|
UINT32 Reserved:28;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_THERMAL_POWER_MANAGEMENT_EBX;
|
|
|
|
/**
|
|
CPUID Thermal and Power Management Information returned in ECX for CPUID leaf
|
|
#CPUID_THERMAL_POWER_MANAGEMENT.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 0] Hardware Coordination Feedback Capability (Presence of IA32_MPERF
|
|
/// and IA32_APERF). The capability to provide a measure of delivered
|
|
/// processor performance (since last reset of the counters), as a percentage
|
|
/// of the expected processor performance when running at the TSC frequency.
|
|
///
|
|
UINT32 HardwareCoordinationFeedback:1;
|
|
UINT32 Reserved1:2;
|
|
///
|
|
/// [Bit 3] If this bit is set, then the processor supports performance-energy
|
|
/// bias preference and the architectural MSR called IA32_ENERGY_PERF_BIAS
|
|
/// (1B0H).
|
|
///
|
|
UINT32 PerformanceEnergyBias:1;
|
|
UINT32 Reserved2:28;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_THERMAL_POWER_MANAGEMENT_ECX;
|
|
|
|
|
|
/**
|
|
CPUID Structured Extended Feature Flags Enumeration
|
|
|
|
@param EAX CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS (0x07)
|
|
@param ECX CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_SUB_LEAF_INFO (0x00).
|
|
|
|
@note
|
|
If ECX contains an invalid sub-leaf index, EAX/EBX/ECX/EDX return 0. Sub-leaf
|
|
index n is invalid if n exceeds the value that sub-leaf 0 returns in EAX.
|
|
|
|
@retval EAX The maximum input value for ECX to retrieve sub-leaf information.
|
|
@retval EBX Structured Extended Feature Flags described by the type
|
|
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_EBX.
|
|
@retval EBX Structured Extended Feature Flags described by the type
|
|
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_ECX.
|
|
@retval EDX Reserved.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
UINT32 Eax;
|
|
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_EBX Ebx;
|
|
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_ECX Ecx;
|
|
UINT32 SubLeaf;
|
|
|
|
AsmCpuidEx (
|
|
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS,
|
|
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_SUB_LEAF_INFO,
|
|
&Eax, NULL, NULL, NULL
|
|
);
|
|
for (SubLeaf = 0; SubLeaf <= Eax; SubLeaf++) {
|
|
AsmCpuidEx (
|
|
CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS,
|
|
SubLeaf,
|
|
NULL, &Ebx.Uint32, &Ecx.Uint32, NULL
|
|
);
|
|
SubLeaf++;
|
|
} while (SubLeaf <= Eax);
|
|
@endcode
|
|
**/
|
|
#define CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS 0x07
|
|
|
|
///
|
|
/// CPUID Structured Extended Feature Flags Enumeration sub-leaf
|
|
///
|
|
#define CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_SUB_LEAF_INFO 0x00
|
|
|
|
/**
|
|
CPUID Structured Extended Feature Flags Enumeration in EBX for CPUID leaf
|
|
#CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS sub leaf
|
|
#CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_SUB_LEAF_INFO.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 0] Supports RDFSBASE/RDGSBASE/WRFSBASE/WRGSBASE if 1.
|
|
///
|
|
UINT32 FSGSBASE:1;
|
|
///
|
|
/// [Bit 1] IA32_TSC_ADJUST MSR is supported if 1.
|
|
///
|
|
UINT32 IA32_TSC_ADJUST:1;
|
|
///
|
|
/// [Bit 2] Intel SGX is supported if 1. See section 37.7 "DISCOVERING SUPPORT
|
|
/// FOR INTEL(R) SGX AND ENABLING ENCLAVE INSTRUCTIONS".
|
|
///
|
|
UINT32 SGX:1;
|
|
///
|
|
/// [Bit 3] If 1 indicates the processor supports the first group of advanced
|
|
/// bit manipulation extensions (ANDN, BEXTR, BLSI, BLSMSK, BLSR, TZCNT)
|
|
///
|
|
UINT32 BMI1:1;
|
|
///
|
|
/// [Bit 4] Hardware Lock Elision
|
|
///
|
|
UINT32 HLE:1;
|
|
///
|
|
/// [Bit 5] If 1 indicates the processor supports AVX2 instruction extensions.
|
|
///
|
|
UINT32 AVX2:1;
|
|
///
|
|
/// [Bit 6] x87 FPU Data Pointer updated only on x87 exceptions if 1.
|
|
///
|
|
UINT32 FDP_EXCPTN_ONLY:1;
|
|
///
|
|
/// [Bit 7] Supports Supervisor-Mode Execution Prevention if 1.
|
|
///
|
|
UINT32 SMEP:1;
|
|
///
|
|
/// [Bit 8] If 1 indicates the processor supports the second group of
|
|
/// advanced bit manipulation extensions (BZHI, MULX, PDEP, PEXT, RORX,
|
|
/// SARX, SHLX, SHRX)
|
|
///
|
|
UINT32 BMI2:1;
|
|
///
|
|
/// [Bit 9] Supports Enhanced REP MOVSB/STOSB if 1.
|
|
///
|
|
UINT32 EnhancedRepMovsbStosb:1;
|
|
///
|
|
/// [Bit 10] If 1, supports INVPCID instruction for system software that
|
|
/// manages process-context identifiers.
|
|
///
|
|
UINT32 INVPCID:1;
|
|
///
|
|
/// [Bit 11] Restricted Transactional Memory
|
|
///
|
|
UINT32 RTM:1;
|
|
///
|
|
/// [Bit 12] Supports Platform Quality of Service Monitoring (PQM)
|
|
/// capability if 1.
|
|
///
|
|
UINT32 PQM:1;
|
|
///
|
|
/// [Bit 13] Deprecates FPU CS and FPU DS values if 1.
|
|
///
|
|
UINT32 DeprecateFpuCsDs:1;
|
|
///
|
|
/// [Bit 14] Supports Intel(R) Memory Protection Extensions if 1.
|
|
///
|
|
UINT32 MPX:1;
|
|
///
|
|
/// [Bit 15] Supports Platform Quality of Service Enforcement (PQE)
|
|
/// capability if 1.
|
|
///
|
|
UINT32 PQE:1;
|
|
UINT32 Reserved2:2;
|
|
///
|
|
/// [Bit 18] If 1 indicates the processor supports the RDSEED instruction.
|
|
///
|
|
UINT32 RDSEED:1;
|
|
///
|
|
/// [Bit 19] If 1 indicates the processor supports the ADCX and ADOX
|
|
/// instructions.
|
|
///
|
|
UINT32 ADX:1;
|
|
///
|
|
/// [Bit 20] Supports Supervisor-Mode Access Prevention (and the CLAC/STAC
|
|
/// instructions) if 1.
|
|
///
|
|
UINT32 SMAP:1;
|
|
UINT32 Reserved3:2;
|
|
///
|
|
/// [Bit 23] If 1 indicates the processor supports the CLFLUSHOPT instruction.
|
|
///
|
|
UINT32 CLFLUSHOPT:1;
|
|
UINT32 Reserved4:1;
|
|
///
|
|
/// [Bit 25] If 1 indicates the processor supports the Intel Processor Trace
|
|
/// extensions.
|
|
///
|
|
UINT32 IntelProcessorTrace:1;
|
|
UINT32 Reserved5:6;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_EBX;
|
|
|
|
/**
|
|
CPUID Structured Extended Feature Flags Enumeration in ECX for CPUID leaf
|
|
#CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS sub leaf
|
|
#CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_SUB_LEAF_INFO.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 0] If 1 indicates the processor supports the PREFETCHWT1 instruction.
|
|
///
|
|
UINT32 PREFETCHWT1:1;
|
|
UINT32 Reserved1:2;
|
|
///
|
|
/// [Bit 3] Supports protection keys for user-mode pages if 1.
|
|
///
|
|
UINT32 PKU:1;
|
|
///
|
|
/// [Bit 4] If 1, OS has set CR4.PKE to enable protection keys (and the
|
|
/// RDPKRU/WRPKRU instructions).
|
|
///
|
|
UINT32 OSPKE:1;
|
|
UINT32 Reserved2:27;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_STRUCTURED_EXTENDED_FEATURE_FLAGS_ECX;
|
|
|
|
|
|
/**
|
|
CPUID Direct Cache Access Information
|
|
|
|
@param EAX CPUID_DIRECT_CACHE_ACCESS_INFO (0x09)
|
|
|
|
@retval EAX Value of bits [31:0] of IA32_PLATFORM_DCA_CAP MSR (address 1F8H).
|
|
@retval EBX Reserved.
|
|
@retval ECX Reserved.
|
|
@retval EDX Reserved.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
UINT32 Eax;
|
|
|
|
AsmCpuid (CPUID_DIRECT_CACHE_ACCESS_INFO, &Eax, NULL, NULL, NULL);
|
|
@endcode
|
|
**/
|
|
#define CPUID_DIRECT_CACHE_ACCESS_INFO 0x09
|
|
|
|
|
|
/**
|
|
CPUID Architectural Performance Monitoring
|
|
|
|
@param EAX CPUID_ARCHITECTURAL_PERFORMANCE_MONITORING (0x0A)
|
|
|
|
@retval EAX Architectural Performance Monitoring information described by
|
|
the type CPUID_ARCHITECTURAL_PERFORMANCE_MONITORING_EAX.
|
|
@retval EBX Architectural Performance Monitoring information described by
|
|
the type CPUID_ARCHITECTURAL_PERFORMANCE_MONITORING_EBX.
|
|
@retval ECX Reserved.
|
|
@retval EDX Architectural Performance Monitoring information described by
|
|
the type CPUID_ARCHITECTURAL_PERFORMANCE_MONITORING_EDX.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_ARCHITECTURAL_PERFORMANCE_MONITORING_EAX Eax;
|
|
CPUID_ARCHITECTURAL_PERFORMANCE_MONITORING_EBX Ebx;
|
|
CPUID_ARCHITECTURAL_PERFORMANCE_MONITORING_EDX Edx;
|
|
|
|
AsmCpuid (CPUID_ARCHITECTURAL_PERFORMANCE_MONITORING, &Eax.Uint32, &Ebx.Uint32, NULL, &Edx.Uint32);
|
|
@endcode
|
|
**/
|
|
#define CPUID_ARCHITECTURAL_PERFORMANCE_MONITORING 0x0A
|
|
|
|
/**
|
|
CPUID Architectural Performance Monitoring EAX for CPUID leaf
|
|
#CPUID_ARCHITECTURAL_PERFORMANCE_MONITORING.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 7:0] Version ID of architectural performance monitoring.
|
|
///
|
|
UINT32 ArchPerfMonVerID:8;
|
|
///
|
|
/// [Bits 15:8] Number of general-purpose performance monitoring counter
|
|
/// per logical processor.
|
|
///
|
|
/// IA32_PERFEVTSELx MSRs start at address 186H and occupy a contiguous
|
|
/// block of MSR address space. Each performance event select register is
|
|
/// paired with a corresponding performance counter in the 0C1H address
|
|
/// block.
|
|
///
|
|
UINT32 PerformanceMonitorCounters:8;
|
|
///
|
|
/// [Bits 23:16] Bit width of general-purpose, performance monitoring counter.
|
|
///
|
|
/// The bit width of an IA32_PMCx MSR. This the number of valid bits for
|
|
/// read operation. On write operations, the lower-order 32 bits of the MSR
|
|
/// may be written with any value, and the high-order bits are sign-extended
|
|
/// from the value of bit 31.
|
|
///
|
|
UINT32 PerformanceMonitorCounterWidth:8;
|
|
///
|
|
/// [Bits 31:24] Length of EBX bit vector to enumerate architectural
|
|
/// performance monitoring events.
|
|
///
|
|
UINT32 EbxBitVectorLength:8;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_ARCHITECTURAL_PERFORMANCE_MONITORING_EAX;
|
|
|
|
/**
|
|
CPUID Architectural Performance Monitoring EBX for CPUID leaf
|
|
#CPUID_ARCHITECTURAL_PERFORMANCE_MONITORING.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 0] Core cycle event not available if 1.
|
|
///
|
|
UINT32 UnhaltedCoreCycles:1;
|
|
///
|
|
/// [Bit 1] Instruction retired event not available if 1.
|
|
///
|
|
UINT32 InstructionsRetired:1;
|
|
///
|
|
/// [Bit 2] Reference cycles event not available if 1.
|
|
///
|
|
UINT32 UnhaltedReferenceCycles:1;
|
|
///
|
|
/// [Bit 3] Last-level cache reference event not available if 1.
|
|
///
|
|
UINT32 LastLevelCacheReferences:1;
|
|
///
|
|
/// [Bit 4] Last-level cache misses event not available if 1.
|
|
///
|
|
UINT32 LastLevelCacheMisses:1;
|
|
///
|
|
/// [Bit 5] Branch instruction retired event not available if 1.
|
|
///
|
|
UINT32 BranchInstructionsRetired:1;
|
|
///
|
|
/// [Bit 6] Branch mispredict retired event not available if 1.
|
|
///
|
|
UINT32 AllBranchMispredictRetired:1;
|
|
UINT32 Reserved:25;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_ARCHITECTURAL_PERFORMANCE_MONITORING_EBX;
|
|
|
|
/**
|
|
CPUID Architectural Performance Monitoring EDX for CPUID leaf
|
|
#CPUID_ARCHITECTURAL_PERFORMANCE_MONITORING.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 4:0] Number of fixed-function performance counters
|
|
/// (if Version ID > 1).
|
|
///
|
|
UINT32 FixedFunctionPerformanceCounters:5;
|
|
///
|
|
/// [Bits 12:5] Bit width of fixed-function performance counters
|
|
/// (if Version ID > 1).
|
|
///
|
|
UINT32 FixedFunctionPerformanceCounterWidth:8;
|
|
UINT32 Reserved:19;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_ARCHITECTURAL_PERFORMANCE_MONITORING_EDX;
|
|
|
|
|
|
/**
|
|
CPUID Extended Topology Information
|
|
|
|
@note
|
|
Most of Leaf 0BH output depends on the initial value in ECX. The EDX output
|
|
of leaf 0BH is always valid and does not vary with input value in ECX. Output
|
|
value in ECX[7:0] always equals input value in ECX[7:0]. For sub-leaves that
|
|
return an invalid level-type of 0 in ECX[15:8]; EAX and EBX will return 0. If
|
|
an input value n in ECX returns the invalid level-type of 0 in ECX[15:8],
|
|
other input values with ECX > n also return 0 in ECX[15:8].
|
|
|
|
@param EAX CPUID_EXTENDED_TOPOLOGY (0x0B)
|
|
@param ECX Level number
|
|
|
|
@retval EAX Extended topology information described by the type
|
|
CPUID_EXTENDED_TOPOLOGY_EAX.
|
|
@retval EBX Extended topology information described by the type
|
|
CPUID_EXTENDED_TOPOLOGY_EBX.
|
|
@retval ECX Extended topology information described by the type
|
|
CPUID_EXTENDED_TOPOLOGY_ECX.
|
|
@retval EDX x2APIC ID the current logical processor.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_EXTENDED_TOPOLOGY_EAX Eax;
|
|
CPUID_EXTENDED_TOPOLOGY_EBX Ebx;
|
|
CPUID_EXTENDED_TOPOLOGY_ECX Ecx;
|
|
UINT32 Edx;
|
|
UINT32 LevelNumber;
|
|
|
|
LevelNumber = 0;
|
|
do {
|
|
AsmCpuidEx (
|
|
CPUID_EXTENDED_TOPOLOGY, LevelNumber,
|
|
&Eax.Uint32, &Ebx.Uint32, &Ecx.Uint32, &Edx
|
|
);
|
|
LevelNumber++;
|
|
} while (Eax.Bits.ApicIdShift != 0);
|
|
@endcode
|
|
**/
|
|
#define CPUID_EXTENDED_TOPOLOGY 0x0B
|
|
|
|
/**
|
|
CPUID Extended Topology Information EAX for CPUID leaf #CPUID_EXTENDED_TOPOLOGY.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 4:0] Number of bits to shift right on x2APIC ID to get a unique
|
|
/// topology ID of the next level type. All logical processors with the
|
|
/// same next level ID share current level.
|
|
///
|
|
/// @note
|
|
/// Software should use this field (EAX[4:0]) to enumerate processor
|
|
/// topology of the system.
|
|
///
|
|
UINT32 ApicIdShift:5;
|
|
UINT32 Reserved:27;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_EXTENDED_TOPOLOGY_EAX;
|
|
|
|
/**
|
|
CPUID Extended Topology Information EBX for CPUID leaf #CPUID_EXTENDED_TOPOLOGY.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 15:0] Number of logical processors at this level type. The number
|
|
/// reflects configuration as shipped by Intel.
|
|
///
|
|
/// @note
|
|
/// Software must not use EBX[15:0] to enumerate processor topology of the
|
|
/// system. This value in this field (EBX[15:0]) is only intended for
|
|
/// display/diagnostic purposes. The actual number of logical processors
|
|
/// available to BIOS/OS/Applications may be different from the value of
|
|
/// EBX[15:0], depending on software and platform hardware configurations.
|
|
///
|
|
UINT32 LogicalProcessors:16;
|
|
UINT32 Reserved:16;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_EXTENDED_TOPOLOGY_EBX;
|
|
|
|
/**
|
|
CPUID Extended Topology Information ECX for CPUID leaf #CPUID_EXTENDED_TOPOLOGY.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 7:0] Level number. Same value in ECX input.
|
|
///
|
|
UINT32 LevelNumber:8;
|
|
///
|
|
/// [Bits 15:8] Level type.
|
|
///
|
|
/// @note
|
|
/// The value of the "level type" field is not related to level numbers in
|
|
/// any way, higher "level type" values do not mean higher levels.
|
|
///
|
|
UINT32 LevelType:8;
|
|
UINT32 Reserved:16;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_EXTENDED_TOPOLOGY_ECX;
|
|
|
|
///
|
|
/// @{ Define value for CPUID_EXTENDED_TOPOLOGY_ECX.LevelType
|
|
///
|
|
#define CPUID_EXTENDED_TOPOLOGY_LEVEL_TYPE_INVALID 0x00
|
|
#define CPUID_EXTENDED_TOPOLOGY_LEVEL_TYPE_SMT 0x01
|
|
#define CPUID_EXTENDED_TOPOLOGY_LEVEL_TYPE_CORE 0x02
|
|
///
|
|
/// @}
|
|
///
|
|
|
|
|
|
/**
|
|
CPUID Extended State Information
|
|
|
|
@param EAX CPUID_EXTENDED_STATE (0x0D)
|
|
@param ECX CPUID_EXTENDED_STATE_MAIN_LEAF (0x00).
|
|
CPUID_EXTENDED_STATE_SUB_LEAF (0x01).
|
|
CPUID_EXTENDED_STATE_SIZE_OFFSET (0x02).
|
|
Sub leafs 2..n based on supported bits in XCR0 or IA32_XSS_MSR.
|
|
**/
|
|
#define CPUID_EXTENDED_STATE 0x0D
|
|
|
|
/**
|
|
CPUID Extended State Information Main Leaf
|
|
|
|
@param EAX CPUID_EXTENDED_STATE (0x0D)
|
|
@param ECX CPUID_EXTENDED_STATE_MAIN_LEAF (0x00)
|
|
|
|
@retval EAX Reports the supported bits of the lower 32 bits of XCR0. XCR0[n]
|
|
can be set to 1 only if EAX[n] is 1. The format of the extended
|
|
state main leaf is described by the type
|
|
CPUID_EXTENDED_STATE_MAIN_LEAF_EAX.
|
|
@retval EBX Maximum size (bytes, from the beginning of the XSAVE/XRSTOR save
|
|
area) required by enabled features in XCR0. May be different than
|
|
ECX if some features at the end of the XSAVE save area are not
|
|
enabled.
|
|
@retval ECX Maximum size (bytes, from the beginning of the XSAVE/XRSTOR save
|
|
area) of the XSAVE/XRSTOR save area required by all supported
|
|
features in the processor, i.e all the valid bit fields in XCR0.
|
|
@retval EDX Reports the supported bits of the upper 32 bits of XCR0.
|
|
XCR0[n+32] can be set to 1 only if EDX[n] is 1.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_EXTENDED_STATE_MAIN_LEAF_EAX Eax;
|
|
UINT32 Ebx;
|
|
UINT32 Ecx;
|
|
UINT32 Edx;
|
|
|
|
AsmCpuidEx (
|
|
CPUID_EXTENDED_STATE, CPUID_EXTENDED_STATE_MAIN_LEAF,
|
|
&Eax.Uint32, &Ebx, &Ecx, &Edx
|
|
);
|
|
@endcode
|
|
**/
|
|
#define CPUID_EXTENDED_STATE_MAIN_LEAF 0x00
|
|
|
|
/**
|
|
CPUID Extended State Information EAX for CPUID leaf #CPUID_EXTENDED_STATE,
|
|
sub-leaf #CPUID_EXTENDED_STATE_MAIN_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 0] x87 state.
|
|
///
|
|
UINT32 x87:1;
|
|
///
|
|
/// [Bit 1] SSE state.
|
|
///
|
|
UINT32 SSE:1;
|
|
///
|
|
/// [Bit 2] AVX state.
|
|
///
|
|
UINT32 AVX:1;
|
|
///
|
|
/// [Bits 4:3] MPX state.
|
|
///
|
|
UINT32 MPX:2;
|
|
///
|
|
/// [Bits 7:5] AVX-512 state.
|
|
///
|
|
UINT32 AVX_512:3;
|
|
///
|
|
/// [Bit 8] Used for IA32_XSS.
|
|
///
|
|
UINT32 IA32_XSS:1;
|
|
///
|
|
/// [Bit 9] PKRU state.
|
|
///
|
|
UINT32 PKRU:1;
|
|
UINT32 Reserved:22;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_EXTENDED_STATE_MAIN_LEAF_EAX;
|
|
|
|
/**
|
|
CPUID Extended State Information Sub Leaf
|
|
|
|
@param EAX CPUID_EXTENDED_STATE (0x0D)
|
|
@param ECX CPUID_EXTENDED_STATE_SUB_LEAF (0x01)
|
|
|
|
@retval EAX The format of the extended state sub-leaf is described by the
|
|
type CPUID_EXTENDED_STATE_SUB_LEAF_EAX.
|
|
@retval EBX The size in bytes of the XSAVE area containing all states
|
|
enabled by XCRO | IA32_XSS.
|
|
@retval ECX The format of the extended state sub-leaf is described by the
|
|
type CPUID_EXTENDED_STATE_SUB_LEAF_ECX.
|
|
@retval 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.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_EXTENDED_STATE_SUB_LEAF_EAX Eax;
|
|
UINT32 Ebx;
|
|
CPUID_EXTENDED_STATE_SUB_LEAF_ECX Ecx;
|
|
UINT32 Edx;
|
|
|
|
AsmCpuidEx (
|
|
CPUID_EXTENDED_STATE, CPUID_EXTENDED_STATE_SUB_LEAF,
|
|
&Eax.Uint32, &Ebx, &Ecx.Uint32, &Edx
|
|
);
|
|
@endcode
|
|
**/
|
|
#define CPUID_EXTENDED_STATE_SUB_LEAF 0x01
|
|
|
|
/**
|
|
CPUID Extended State Information EAX for CPUID leaf #CPUID_EXTENDED_STATE,
|
|
sub-leaf #CPUID_EXTENDED_STATE_SUB_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 0] XSAVEOPT is available.
|
|
///
|
|
UINT32 XSAVEOPT:1;
|
|
///
|
|
/// [Bit 1] Supports XSAVEC and the compacted form of XRSTOR if set.
|
|
///
|
|
UINT32 XSAVEC:1;
|
|
///
|
|
/// [Bit 2] Supports XGETBV with ECX = 1 if set.
|
|
///
|
|
UINT32 XGETBV:1;
|
|
///
|
|
/// [Bit 3] Supports XSAVES/XRSTORS and IA32_XSS if set.
|
|
///
|
|
UINT32 XSAVES:1;
|
|
UINT32 Reserved:28;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_EXTENDED_STATE_SUB_LEAF_EAX;
|
|
|
|
/**
|
|
CPUID Extended State Information ECX for CPUID leaf #CPUID_EXTENDED_STATE,
|
|
sub-leaf #CPUID_EXTENDED_STATE_SUB_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 7:0] Used for XCR0.
|
|
///
|
|
UINT32 XCR0:1;
|
|
///
|
|
/// [Bit 8] PT STate.
|
|
///
|
|
UINT32 PT:1;
|
|
///
|
|
/// [Bit 9] Used for XCR0.
|
|
///
|
|
UINT32 XCR0_1:1;
|
|
UINT32 Reserved:22;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_EXTENDED_STATE_SUB_LEAF_ECX;
|
|
|
|
/**
|
|
CPUID Extended State Information Size and Offset Sub Leaf
|
|
|
|
@note
|
|
Leaf 0DH output depends on the initial value in ECX.
|
|
Each sub-leaf index (starting at position 2) is supported if it corresponds to
|
|
a supported bit in either the XCR0 register or the IA32_XSS MSR.
|
|
If ECX contains an invalid sub-leaf index, EAX/EBX/ECX/EDX return 0. Sub-leaf
|
|
n (0 <= n <= 31) is invalid if sub-leaf 0 returns 0 in EAX[n] and sub-leaf 1
|
|
returns 0 in ECX[n]. Sub-leaf n (32 <= n <= 63) is invalid if sub-leaf 0
|
|
returns 0 in EDX[n-32] and sub-leaf 1 returns 0 in EDX[n-32].
|
|
|
|
@param EAX CPUID_EXTENDED_STATE (0x0D)
|
|
@param ECX CPUID_EXTENDED_STATE_SIZE_OFFSET (0x02). Sub leafs 2..n based
|
|
on supported bits in XCR0 or IA32_XSS_MSR.
|
|
|
|
@retval EAX The size in bytes (from the offset specified in EBX) of the save
|
|
area for an extended state feature associated with a valid
|
|
sub-leaf index, n.
|
|
@retval EBX The offset in bytes of this extended state component's save area
|
|
from the beginning of the XSAVE/XRSTOR area. This field reports
|
|
0 if the sub-leaf index, n, does not map to a valid bit in the
|
|
XCR0 register.
|
|
@retval ECX The format of the extended state components's save area as
|
|
described by the type CPUID_EXTENDED_STATE_SIZE_OFFSET_ECX.
|
|
This field reports 0 if the sub-leaf index, n, is invalid.
|
|
@retval EDX This field reports 0 if the sub-leaf index, n, is invalid;
|
|
otherwise it is reserved.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
UINT32 Eax;
|
|
UINT32 Ebx;
|
|
CPUID_EXTENDED_STATE_SIZE_OFFSET_ECX Ecx;
|
|
UINT32 Edx;
|
|
UINTN SubLeaf;
|
|
|
|
for (SubLeaf = CPUID_EXTENDED_STATE_SIZE_OFFSET; SubLeaf < 32; SubLeaf++) {
|
|
AsmCpuidEx (
|
|
CPUID_EXTENDED_STATE, SubLeaf,
|
|
&Eax, &Ebx, &Ecx.Uint32, &Edx
|
|
);
|
|
}
|
|
@endcode
|
|
**/
|
|
#define CPUID_EXTENDED_STATE_SIZE_OFFSET 0x02
|
|
|
|
/**
|
|
CPUID Extended State Information ECX for CPUID leaf #CPUID_EXTENDED_STATE,
|
|
sub-leaf #CPUID_EXTENDED_STATE_SIZE_OFFSET.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 0] Is set if the bit n (corresponding to the sub-leaf index) is
|
|
/// supported in the IA32_XSS MSR; it is clear if bit n is instead supported
|
|
/// in XCR0.
|
|
///
|
|
UINT32 XSS:1;
|
|
///
|
|
/// [Bit 1] is set if, when the compacted format of an XSAVE area is used,
|
|
/// this extended state component located on the next 64-byte boundary
|
|
/// following the preceding state component (otherwise, it is located
|
|
/// immediately following the preceding state component).
|
|
///
|
|
UINT32 Compacted:1;
|
|
UINT32 Reserved:30;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_EXTENDED_STATE_SIZE_OFFSET_ECX;
|
|
|
|
|
|
/**
|
|
CPUID Platform QoS Monitoring Information
|
|
|
|
@param EAX CPUID_PLATFORM_QOS_MONITORING (0x0F)
|
|
@param ECX CPUID_PLATFORM_QOS_MONITORING_ENUMERATION_SUB_LEAF (0x00).
|
|
CPUID_PLATFORM_QOS_MONITORING_CAPABILITY_SUB_LEAF (0x01).
|
|
|
|
**/
|
|
#define CPUID_PLATFORM_QOS_MONITORING 0x0F
|
|
|
|
/**
|
|
CPUID Platform QoS Monitoring Information Enumeration Sub-leaf
|
|
|
|
@param EAX CPUID_PLATFORM_QOS_MONITORING (0x0F)
|
|
@param ECX CPUID_PLATFORM_QOS_MONITORING_ENUMERATION_SUB_LEAF (0x00)
|
|
|
|
@retval EAX Reserved.
|
|
@retval EBX Maximum range (zero-based) of RMID within this physical
|
|
processor of all types.
|
|
@retval ECX Reserved.
|
|
@retval EDX L3 Cache QoS Monitoring Information Enumeration described by the
|
|
type CPUID_PLATFORM_QOS_MONITORING_ENUMERATION_SUB_LEAF_EDX.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
UINT32 Ebx;
|
|
CPUID_PLATFORM_QOS_MONITORING_ENUMERATION_SUB_LEAF_EDX Edx;
|
|
|
|
AsmCpuidEx (
|
|
CPUID_PLATFORM_QOS_MONITORING, CPUID_PLATFORM_QOS_MONITORING_ENUMERATION_SUB_LEAF,
|
|
NULL, &Ebx, NULL, &Edx.Uint32
|
|
);
|
|
@endcode
|
|
**/
|
|
#define CPUID_PLATFORM_QOS_MONITORING_ENUMERATION_SUB_LEAF 0x00
|
|
|
|
/**
|
|
CPUID Platform QoS Monitoring Information EDX for CPUID leaf
|
|
#CPUID_PLATFORM_QOS_MONITORING, sub-leaf
|
|
#CPUID_PLATFORM_QOS_MONITORING_ENUMERATION_SUB_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
UINT32 Reserved1:1;
|
|
///
|
|
/// [Bit 1] Supports L3 Cache QoS Monitoring if 1.
|
|
///
|
|
UINT32 L3CacheQosEnforcement:1;
|
|
UINT32 Reserved2:30;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_PLATFORM_QOS_MONITORING_ENUMERATION_SUB_LEAF_EDX;
|
|
|
|
/**
|
|
CPUID Platform QoS Monitoring Information Capability Sub-leaf
|
|
|
|
@param EAX CPUID_PLATFORM_QOS_MONITORING (0x0F)
|
|
@param ECX CPUID_PLATFORM_QOS_MONITORING_CAPABILITY_SUB_LEAF (0x01)
|
|
|
|
@retval EAX Reserved.
|
|
@retval EBX Conversion factor from reported IA32_QM_CTR value to occupancy metric (bytes).
|
|
@retval ECX Maximum range (zero-based) of RMID of this resource type.
|
|
@retval EDX L3 Cache QoS Monitoring Capability information described by the
|
|
type CPUID_PLATFORM_QOS_MONITORING_CAPABILITY_SUB_LEAF_EDX.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
UINT32 Ebx;
|
|
UINT32 Ecx;
|
|
CPUID_PLATFORM_QOS_MONITORING_CAPABILITY_SUB_LEAF_EDX Edx;
|
|
|
|
AsmCpuidEx (
|
|
CPUID_PLATFORM_QOS_MONITORING, CPUID_PLATFORM_QOS_MONITORING_CAPABILITY_SUB_LEAF,
|
|
NULL, &Ebx, &Ecx, &Edx.Uint32
|
|
);
|
|
@endcode
|
|
**/
|
|
#define CPUID_PLATFORM_QOS_MONITORING_CAPABILITY_SUB_LEAF 0x01
|
|
|
|
/**
|
|
CPUID Platform QoS Monitoring Information Capability EDX for CPUID leaf
|
|
#CPUID_PLATFORM_QOS_MONITORING, sub-leaf
|
|
#CPUID_PLATFORM_QOS_MONITORING_CAPABILITY_SUB_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 0] Supports L3 occupancy monitoring if 1.
|
|
///
|
|
UINT32 L3CacheOccupancyMonitoring:1;
|
|
UINT32 Reserved:31;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_PLATFORM_QOS_MONITORING_CAPABILITY_SUB_LEAF_EDX;
|
|
|
|
|
|
/**
|
|
CPUID Platform QoS Enforcement Information
|
|
|
|
@param EAX CPUID_PLATFORM_QOS_ENFORCEMENT (0x10).
|
|
@param ECX CPUID_PLATFORM_QOS_ENFORCEMENT_MAIN_LEAF (0x00).
|
|
CPUID_PLATFORM_QOS_ENFORCEMENT_RESID_SUB_LEAF (0x01).
|
|
Additional sub leafs 1..n based in RESID from sub leaf 0x00.
|
|
**/
|
|
#define CPUID_PLATFORM_QOS_ENFORCEMENT 0x10
|
|
|
|
/**
|
|
CPUID Platform QoS Enforcement Information
|
|
|
|
@param EAX CPUID_PLATFORM_QOS_ENFORCEMENT (0x10)
|
|
@param ECX CPUID_PLATFORM_QOS_ENFORCEMENT_MAIN_LEAF (0x00).
|
|
|
|
@retval EAX Reserved.
|
|
@retval EBX L3 Cache QoS Enforcement information described by the
|
|
type CPUID_PLATFORM_QOS_ENFORCEMENT_MAIN_LEAF_EBX.
|
|
@retval ECX Reserved.
|
|
@retval EDX Reserved.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_PLATFORM_QOS_ENFORCEMENT_MAIN_LEAF_EBX Ebx;
|
|
|
|
AsmCpuidEx (
|
|
CPUID_PLATFORM_QOS_ENFORCEMENT, CPUID_PLATFORM_QOS_ENFORCEMENT_MAIN_LEAF,
|
|
NULL, &Ebx.Uint32, NULL, NULL
|
|
);
|
|
@endcode
|
|
**/
|
|
#define CPUID_PLATFORM_QOS_ENFORCEMENT_MAIN_LEAF 0x00
|
|
|
|
/**
|
|
CPUID Platform QoS Enforcement Information EBX for CPUID leaf
|
|
#CPUID_PLATFORM_QOS_ENFORCEMENT, sub-leaf
|
|
#CPUID_PLATFORM_QOS_ENFORCEMENT_MAIN_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
UINT32 Reserved1:1;
|
|
///
|
|
/// [Bit 1] Supports L3 Cache QoS Enforcement if 1.
|
|
///
|
|
UINT32 L3CacheQosEnforcement:1;
|
|
UINT32 Reserved2:30;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_PLATFORM_QOS_ENFORCEMENT_MAIN_LEAF_EBX;
|
|
|
|
|
|
/**
|
|
CPUID Platform QoS Enforcement Information
|
|
|
|
@param EAX CPUID_PLATFORM_QOS_ENFORCEMENT (0x10)
|
|
@param ECX CPUID_PLATFORM_QOS_ENFORCEMENT_RESID_SUB_LEAF (0x00)
|
|
Additional sub leafs 1..n based in RESID from sub leaf 0x00.
|
|
|
|
@retval EAX RESID L3 Cache3 QoS Enforcement information described by the
|
|
type CPUID_PLATFORM_QOS_ENFORCEMENT_RESID_SUB_LEAF_EAX.
|
|
@retval EBX Bit-granular map of isolation/contention of allocation units.
|
|
@retval ECX RESID L3 Cache3 QoS Enforcement information described by the
|
|
type CPUID_PLATFORM_QOS_ENFORCEMENT_RESID_SUB_LEAF_ECX.
|
|
@retval EDX RESID L3 Cache3 QoS Enforcement information described by the
|
|
type CPUID_PLATFORM_QOS_ENFORCEMENT_RESID_SUB_LEAF_EDX.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_PLATFORM_QOS_ENFORCEMENT_RESID_SUB_LEAF_EAX Eax;
|
|
UINT32 Ebx;
|
|
CPUID_PLATFORM_QOS_ENFORCEMENT_RESID_SUB_LEAF_ECX Ecx;
|
|
CPUID_PLATFORM_QOS_ENFORCEMENT_RESID_SUB_LEAF_EDX Edx;
|
|
|
|
AsmCpuidEx (
|
|
CPUID_PLATFORM_QOS_ENFORCEMENT, CPUID_PLATFORM_QOS_ENFORCEMENT_RESID_SUB_LEAF,
|
|
&Eax.Uint32, &Ebx, &Ecx.Uint32, &Edx.Uint32
|
|
);
|
|
@endcode
|
|
**/
|
|
#define CPUID_PLATFORM_QOS_ENFORCEMENT_RESID_SUB_LEAF 0x01
|
|
|
|
/**
|
|
CPUID Platform QoS Enforcement Information EAX for CPUID leaf
|
|
#CPUID_PLATFORM_QOS_ENFORCEMENT, sub-leaf
|
|
#CPUID_PLATFORM_QOS_ENFORCEMENT_RESID_SUB_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 3:0] Length of the capacity bit mask for the corresponding ResID.
|
|
///
|
|
UINT32 CapacityLength:4;
|
|
UINT32 Reserved:28;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_PLATFORM_QOS_ENFORCEMENT_RESID_SUB_LEAF_EAX;
|
|
|
|
/**
|
|
CPUID Platform QoS Enforcement Information ECX for CPUID leaf
|
|
#CPUID_PLATFORM_QOS_ENFORCEMENT, sub-leaf
|
|
#CPUID_PLATFORM_QOS_ENFORCEMENT_RESID_SUB_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
UINT32 Reserved1:1;
|
|
///
|
|
/// [Bit 1] Updates of COS should be infrequent if 1.
|
|
///
|
|
UINT32 CosUpdatesInfrequent:1;
|
|
///
|
|
/// [Bit 2] Code and Data Prioritization Technology supported if 1.
|
|
///
|
|
UINT32 CodeDataPrioritization:1;
|
|
UINT32 Reserved2:29;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_PLATFORM_QOS_ENFORCEMENT_RESID_SUB_LEAF_ECX;
|
|
|
|
/**
|
|
CPUID Platform QoS Enforcement Information EDX for CPUID leaf
|
|
#CPUID_PLATFORM_QOS_ENFORCEMENT, sub-leaf
|
|
#CPUID_PLATFORM_QOS_ENFORCEMENT_RESID_SUB_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 15:0] Highest COS number supported for this ResID.
|
|
///
|
|
UINT32 HighestCosNumber:16;
|
|
UINT32 Reserved:16;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_PLATFORM_QOS_ENFORCEMENT_RESID_SUB_LEAF_EDX;
|
|
|
|
|
|
/**
|
|
Intel SGX resource capability and configuration.
|
|
See Section 37.7.2 "Intel(R) SGX Resource Enumeration Leaves".
|
|
|
|
If CPUID.(EAX=07H, ECX=0H):EBX.SGX = 1, the processor also supports querying
|
|
CPUID with EAX=12H on Intel SGX resource capability and configuration.
|
|
|
|
@param EAX CPUID_INTEL_SGX (0x12)
|
|
@param ECX CPUID_INTEL_SGX_CAPABILITIES_0_SUB_LEAF (0x00).
|
|
CPUID_INTEL_SGX_CAPABILITIES_1_SUB_LEAF (0x01).
|
|
CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF (0x02).
|
|
Sub leafs 2..n based on the sub-leaf-type encoding (returned in EAX[3:0])
|
|
until the sub-leaf type is invalid.
|
|
|
|
**/
|
|
#define CPUID_INTEL_SGX 0x12
|
|
|
|
/**
|
|
Sub-Leaf 0 Enumeration of Intel SGX Capabilities.
|
|
Enumerates Intel SGX capability, including enclave instruction opcode support.
|
|
|
|
@param EAX CPUID_INTEL_SGX (0x12)
|
|
@param ECX CPUID_INTEL_SGX_CAPABILITIES_0_SUB_LEAF (0x00)
|
|
|
|
@retval EAX The format of Sub-Leaf 0 Enumeration of Intel SGX Capabilities is
|
|
described by the type CPUID_INTEL_SGX_CAPABILITIES_0_SUB_LEAF_EAX.
|
|
@retval EBX MISCSELECT: Reports the bit vector of supported extended features
|
|
that can be written to the MISC region of the SSA.
|
|
@retval ECX Reserved.
|
|
@retval EDX The format of Sub-Leaf 0 Enumeration of Intel SGX Capabilities is
|
|
described by the type CPUID_INTEL_SGX_CAPABILITIES_0_SUB_LEAF_EDX.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_INTEL_SGX_CAPABILITIES_0_SUB_LEAF_EAX Eax;
|
|
UINT32 Ebx;
|
|
CPUID_INTEL_SGX_CAPABILITIES_0_SUB_LEAF_EDX Edx;
|
|
|
|
AsmCpuidEx (
|
|
CPUID_INTEL_SGX, CPUID_INTEL_SGX_CAPABILITIES_0_SUB_LEAF,
|
|
&Eax.Uint32, &Ebx, NULL, &Edx.Uint32
|
|
);
|
|
@endcode
|
|
**/
|
|
#define CPUID_INTEL_SGX_CAPABILITIES_0_SUB_LEAF 0x00
|
|
|
|
/**
|
|
Sub-Leaf 0 Enumeration of Intel SGX Capabilities EAX for CPUID leaf #CPUID_INTEL_SGX,
|
|
sub-leaf #CPUID_INTEL_SGX_CAPABILITIES_0_SUB_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 0] If 1, indicates leaf functions of SGX1 instruction are supported.
|
|
///
|
|
UINT32 SGX1:1;
|
|
///
|
|
/// [Bit 1] If 1, indicates leaf functions of SGX2 instruction are supported.
|
|
///
|
|
UINT32 SGX2:1;
|
|
UINT32 Reserved:30;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_INTEL_SGX_CAPABILITIES_0_SUB_LEAF_EAX;
|
|
|
|
/**
|
|
Sub-Leaf 0 Enumeration of Intel SGX Capabilities EDX for CPUID leaf #CPUID_INTEL_SGX,
|
|
sub-leaf #CPUID_INTEL_SGX_CAPABILITIES_0_SUB_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 7:0] The maximum supported enclave size is 2^(EDX[7:0]) bytes
|
|
/// when not in 64-bit mode.
|
|
///
|
|
UINT32 MaxEnclaveSize_Not64:8;
|
|
///
|
|
/// [Bit 15:8] The maximum supported enclave size is 2^(EDX[15:8]) bytes
|
|
/// when operating in 64-bit mode.
|
|
///
|
|
UINT32 MaxEnclaveSize_64:8;
|
|
UINT32 Reserved:16;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_INTEL_SGX_CAPABILITIES_0_SUB_LEAF_EDX;
|
|
|
|
|
|
/**
|
|
Sub-Leaf 1 Enumeration of Intel SGX Capabilities.
|
|
Enumerates Intel SGX capability of processor state configuration and enclave
|
|
configuration in the SECS structure.
|
|
|
|
@param EAX CPUID_INTEL_SGX (0x12)
|
|
@param ECX CPUID_INTEL_SGX_CAPABILITIES_1_SUB_LEAF (0x01)
|
|
|
|
@retval EAX Report the valid bits of SECS.ATTRIBUTES[31:0] that software can
|
|
set with ECREATE. SECS.ATTRIBUTES[n] can be set to 1 using ECREATE
|
|
only if EAX[n] is 1, where n < 32.
|
|
@retval EBX Report the valid bits of SECS.ATTRIBUTES[63:32] that software can
|
|
set with ECREATE. SECS.ATTRIBUTES[n+32] can be set to 1 using ECREATE
|
|
only if EBX[n] is 1, where n < 32.
|
|
@retval ECX Report the valid bits of SECS.ATTRIBUTES[95:64] that software can
|
|
set with ECREATE. SECS.ATTRIBUTES[n+64] can be set to 1 using ECREATE
|
|
only if ECX[n] is 1, where n < 32.
|
|
@retval EDX Report the valid bits of SECS.ATTRIBUTES[127:96] that software can
|
|
set with ECREATE. SECS.ATTRIBUTES[n+96] can be set to 1 using ECREATE
|
|
only if EDX[n] is 1, where n < 32.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
UINT32 Eax;
|
|
UINT32 Ebx;
|
|
UINT32 Ecx;
|
|
UINT32 Edx;
|
|
|
|
AsmCpuidEx (
|
|
CPUID_INTEL_SGX, CPUID_INTEL_SGX_CAPABILITIES_1_SUB_LEAF,
|
|
&Eax, &Ebx, &Ecx, &Edx
|
|
);
|
|
@endcode
|
|
**/
|
|
#define CPUID_INTEL_SGX_CAPABILITIES_1_SUB_LEAF 0x01
|
|
|
|
|
|
/**
|
|
Sub-Leaf Index 2 or Higher Enumeration of Intel SGX Resources.
|
|
Enumerates available EPC resources.
|
|
|
|
@param EAX CPUID_INTEL_SGX (0x12)
|
|
@param ECX CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF (0x02)
|
|
|
|
@retval EAX The format of Sub-Leaf Index 2 or Higher Enumeration of Intel SGX
|
|
Resources is described by the type
|
|
CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF_EAX.
|
|
@retval EBX The format of Sub-Leaf Index 2 or Higher Enumeration of Intel SGX
|
|
Resources is described by the type
|
|
CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF_EBX.
|
|
@retval EDX The format of Sub-Leaf Index 2 or Higher Enumeration of Intel SGX
|
|
Resources is described by the type
|
|
CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF_ECX.
|
|
@retval EDX The format of Sub-Leaf Index 2 or Higher Enumeration of Intel SGX
|
|
Resources is described by the type
|
|
CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF_EDX.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF_EAX Eax;
|
|
CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF_EBX Ebx;
|
|
CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF_ECX Ecx;
|
|
CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF_EDX Edx;
|
|
|
|
AsmCpuidEx (
|
|
CPUID_INTEL_SGX, CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF,
|
|
&Eax.Uint32, &Ebx.Uint32, &Ecx.Uint32, &Edx.Uint32
|
|
);
|
|
@endcode
|
|
**/
|
|
#define CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF 0x02
|
|
|
|
/**
|
|
Sub-Leaf Index 2 or Higher Enumeration of Intel SGX Resources EAX for CPUID
|
|
leaf #CPUID_INTEL_SGX, sub-leaf #CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 3:0] Sub-leaf-type encoding.
|
|
/// 0000b: This sub-leaf is invalid, EBX:EAX and EDX:ECX report 0.
|
|
/// 0001b: This sub-leaf provides information on the Enclave Page Cache (EPC)
|
|
/// in EBX:EAX and EDX:ECX.
|
|
/// All other encoding are reserved.
|
|
///
|
|
UINT32 SubLeafType:4;
|
|
UINT32 Reserved:8;
|
|
///
|
|
/// [Bit 31:12] If EAX[3:0] = 0001b, these are bits 31:12 of the physical address of
|
|
/// the base of the EPC section.
|
|
///
|
|
UINT32 LowAddressOfEpcSection:20;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF_EAX;
|
|
|
|
/**
|
|
Sub-Leaf Index 2 or Higher Enumeration of Intel SGX Resources EBX for CPUID
|
|
leaf #CPUID_INTEL_SGX, sub-leaf #CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 19:0] If EAX[3:0] = 0001b, these are bits 51:32 of the physical address of
|
|
/// the base of the EPC section.
|
|
///
|
|
UINT32 HighAddressOfEpcSection:20;
|
|
UINT32 Reserved:12;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF_EBX;
|
|
|
|
/**
|
|
Sub-Leaf Index 2 or Higher Enumeration of Intel SGX Resources ECX for CPUID
|
|
leaf #CPUID_INTEL_SGX, sub-leaf #CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 3:0] The EPC section encoding.
|
|
/// 0000b: Not valid.
|
|
/// 0001b: The EPC section is confidentiality, integrity and replay protected.
|
|
/// All other encoding are reserved.
|
|
///
|
|
UINT32 EpcSection:4;
|
|
UINT32 Reserved:8;
|
|
///
|
|
/// [Bit 31:12] If EAX[3:0] = 0001b, these are bits 31:12 of the size of the
|
|
/// corresponding EPC section within the Processor Reserved Memory.
|
|
///
|
|
UINT32 LowSizeOfEpcSection:20;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF_ECX;
|
|
|
|
/**
|
|
Sub-Leaf Index 2 or Higher Enumeration of Intel SGX Resources EDX for CPUID
|
|
leaf #CPUID_INTEL_SGX, sub-leaf #CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 19:0] If EAX[3:0] = 0001b, these are bits 51:32 of the size of the
|
|
/// corresponding EPC section within the Processor Reserved Memory.
|
|
///
|
|
UINT32 HighSizeOfEpcSection:20;
|
|
UINT32 Reserved:12;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_INTEL_SGX_CAPABILITIES_RESOURCES_SUB_LEAF_EDX;
|
|
|
|
|
|
/**
|
|
CPUID Intel Processor Trace Information
|
|
|
|
@param EAX CPUID_INTEL_PROCESSOR_TRACE (0x14)
|
|
@param ECX CPUID_INTEL_PROCESSOR_TRACE_MAIN_LEAF (0x00).
|
|
CPUID_INTEL_PROCESSOR_TRACE_SUB_LEAF (0x01).
|
|
|
|
**/
|
|
#define CPUID_INTEL_PROCESSOR_TRACE 0x14
|
|
|
|
/**
|
|
CPUID Intel Processor Trace Information Main Leaf
|
|
|
|
@param EAX CPUID_INTEL_PROCEDSSOR_TRACE (0x14)
|
|
@param ECX CPUID_INTEL_PROCEDSSOR_TRACE_MAIN_LEAF (0x00)
|
|
|
|
@retval EAX Reports the maximum sub-leaf supported in leaf 14H.
|
|
@retval EBX Returns Intel processor trace information described by the
|
|
type CPUID_INTEL_PROCESSOR_TRACE_MAIN_LEAF_EBX.
|
|
@retval ECX Returns Intel processor trace information described by the
|
|
type CPUID_INTEL_PROCESSOR_TRACE_MAIN_LEAF_ECX.
|
|
@retval EDX Reserved.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
UINT32 Eax;
|
|
CPUID_INTEL_PROCESSOR_TRACE_MAIN_LEAF_EBX Ebx;
|
|
CPUID_INTEL_PROCESSOR_TRACE_MAIN_LEAF_ECX Ecx;
|
|
|
|
AsmCpuidEx (
|
|
CPUID_INTEL_PROCESSOR_TRACE, CPUID_INTEL_PROCESSOR_TRACE_MAIN_LEAF,
|
|
&Eax, &Ebx.Uint32, &Ecx.Uint32, NULL
|
|
);
|
|
@endcode
|
|
**/
|
|
#define CPUID_INTEL_PROCESSOR_TRACE_MAIN_LEAF 0x00
|
|
|
|
/**
|
|
CPUID Intel Processor Trace EBX for CPUID leaf #CPUID_INTEL_PROCESSOR_TRACE,
|
|
sub-leaf #CPUID_INTEL_PROCESSOR_TRACE_MAIN_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 0] If 1, Indicates that IA32_RTIT_CTL.CR3Filter can be set to 1,
|
|
/// and that IA32_RTIT_CR3_MATCH MSR can be accessed.
|
|
///
|
|
UINT32 Cr3Filter:1;
|
|
///
|
|
/// [Bit 1] If 1, Indicates support of Configurable PSB and Cycle-Accurate
|
|
/// Mode.
|
|
///
|
|
UINT32 ConfigurablePsb:1;
|
|
///
|
|
/// [Bit 2] If 1, Indicates support of IP Filtering, TraceStop filtering,
|
|
/// and preservation of Intel PT MSRs across warm reset.
|
|
///
|
|
UINT32 IpTraceStopFiltering:1;
|
|
///
|
|
/// [Bit 3] If 1, Indicates support of MTC timing packet and suppression of
|
|
/// COFI-based packets.
|
|
///
|
|
UINT32 Mtc:1;
|
|
UINT32 Reserved:28;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_INTEL_PROCESSOR_TRACE_MAIN_LEAF_EBX;
|
|
|
|
/**
|
|
CPUID Intel Processor Trace ECX for CPUID leaf #CPUID_INTEL_PROCESSOR_TRACE,
|
|
sub-leaf #CPUID_INTEL_PROCESSOR_TRACE_MAIN_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 0] If 1, Tracing can be enabled with IA32_RTIT_CTL.ToPA = 1, hence
|
|
/// utilizing the ToPA output scheme; IA32_RTIT_OUTPUT_BASE and
|
|
/// IA32_RTIT_OUTPUT_MASK_PTRS MSRs can be accessed.
|
|
///
|
|
UINT32 RTIT:1;
|
|
///
|
|
/// [Bit 1] If 1, ToPA tables can hold any number of output entries, up to
|
|
/// the maximum allowed by the MaskOrTableOffset field of
|
|
/// IA32_RTIT_OUTPUT_MASK_PTRS.
|
|
///
|
|
UINT32 ToPA:1;
|
|
///
|
|
/// [Bit 2] If 1, Indicates support of Single-Range Output scheme.
|
|
///
|
|
UINT32 SingleRangeOutput:1;
|
|
///
|
|
/// [Bit 3] If 1, Indicates support of output to Trace Transport subsystem.
|
|
///
|
|
UINT32 TraceTransportSubsystem:1;
|
|
UINT32 Reserved:27;
|
|
///
|
|
/// [Bit 31] If 1, Generated packets which contain IP payloads have LIP
|
|
/// values, which include the CS base component.
|
|
///
|
|
UINT32 LIP:1;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_INTEL_PROCESSOR_TRACE_MAIN_LEAF_ECX;
|
|
|
|
|
|
/**
|
|
CPUID Intel Processor Trace Information Sub-leaf
|
|
|
|
@param EAX CPUID_INTEL_PROCEDSSOR_TRACE (0x14)
|
|
@param ECX CPUID_INTEL_PROCESSOR_TRACE_SUB_LEAF (0x01)
|
|
|
|
@retval EAX Returns Intel processor trace information described by the
|
|
type CPUID_INTEL_PROCESSOR_TRACE_SUB_LEAF_EAX.
|
|
@retval EBX Returns Intel processor trace information described by the
|
|
type CPUID_INTEL_PROCESSOR_TRACE_SUB_LEAF_EBX.
|
|
@retval ECX Reserved.
|
|
@retval EDX Reserved.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
UINT32 MaximumSubLeaf;
|
|
UINT32 SubLeaf;
|
|
CPUID_INTEL_PROCESSOR_TRACE_SUB_LEAF_EAX Eax;
|
|
CPUID_INTEL_PROCESSOR_TRACE_SUB_LEAF_EBX Ebx;
|
|
|
|
AsmCpuidEx (
|
|
CPUID_INTEL_PROCESSOR_TRACE, CPUID_INTEL_PROCESSOR_TRACE_MAIN_LEAF,
|
|
&MaximumSubLeaf, NULL, NULL, NULL
|
|
);
|
|
|
|
for (SubLeaf = CPUID_INTEL_PROCESSOR_TRACE_SUB_LEAF; SubLeaf <= MaximumSubLeaf; SubLeaf++) {
|
|
AsmCpuidEx (
|
|
CPUID_INTEL_PROCESSOR_TRACE, SubLeaf,
|
|
&Eax.Uint32, &Ebx.Uint32, NULL, NULL
|
|
);
|
|
}
|
|
@endcode
|
|
**/
|
|
#define CPUID_INTEL_PROCESSOR_TRACE_SUB_LEAF 0x01
|
|
|
|
/**
|
|
CPUID Intel Processor Trace EAX for CPUID leaf #CPUID_INTEL_PROCESSOR_TRACE,
|
|
sub-leaf #CPUID_INTEL_PROCESSOR_TRACE_SUB_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 2:0] Number of configurable Address Ranges for filtering.
|
|
///
|
|
UINT32 ConfigurableAddressRanges:3;
|
|
UINT32 Reserved:13;
|
|
///
|
|
/// [Bits 31:16] Bitmap of supported MTC period encodings
|
|
///
|
|
UINT32 MtcPeriodEncodings:16;
|
|
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_INTEL_PROCESSOR_TRACE_SUB_LEAF_EAX;
|
|
|
|
/**
|
|
CPUID Intel Processor Trace EBX for CPUID leaf #CPUID_INTEL_PROCESSOR_TRACE,
|
|
sub-leaf #CPUID_INTEL_PROCESSOR_TRACE_SUB_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 15:0] Bitmap of supported Cycle Threshold value encodings.
|
|
///
|
|
UINT32 CycleThresholdEncodings:16;
|
|
///
|
|
/// [Bits 31:16] Bitmap of supported Configurable PSB frequency encodings.
|
|
///
|
|
UINT32 PsbFrequencyEncodings:16;
|
|
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_INTEL_PROCESSOR_TRACE_SUB_LEAF_EBX;
|
|
|
|
|
|
/**
|
|
CPUID Time Stamp Counter Information
|
|
|
|
@note
|
|
If EBX[31:0] is 0, the TSC/"core crystal clock" ratio is not enumerated.
|
|
EBX[31:0]/EAX[31:0] indicates the ratio of the TSC frequency and the core
|
|
crystal clock frequency.
|
|
"TSC frequency" = "core crystal clock frequency" * EBX/EAX.
|
|
The core crystal clock may differ from the reference clock, bus clock, or core
|
|
clock frequencies.
|
|
|
|
@param EAX CPUID_TIME_STAMP_COUNTER (0x15)
|
|
|
|
@retval EAX An unsigned integer which is the denominator of the
|
|
TSC/"core crystal clock" ratio
|
|
@retval EBX An unsigned integer which is the numerator of the
|
|
TSC/"core crystal clock" ratio.
|
|
@retval ECX Reserved.
|
|
@retval EDX Reserved.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
UINT32 Eax;
|
|
UINT32 Ebx;
|
|
|
|
AsmCpuid (CPUID_TIME_STAMP_COUNTER, &Eax, &Ebx, NULL, NULL);
|
|
@endcode
|
|
**/
|
|
#define CPUID_TIME_STAMP_COUNTER 0x15
|
|
|
|
|
|
/**
|
|
CPUID Processor Frequency Information
|
|
|
|
@note
|
|
Data is returned from this interface in accordance with the processor's
|
|
specification and does not reflect actual values. Suitable use of this data
|
|
includes the display of processor information in like manner to the processor
|
|
brand string and for determining the appropriate range to use when displaying
|
|
processor information e.g. frequency history graphs. The returned information
|
|
should not be used for any other purpose as the returned information does not
|
|
accurately correlate to information / counters returned by other processor
|
|
interfaces. While a processor may support the Processor Frequency Information
|
|
leaf, fields that return a value of zero are not supported.
|
|
|
|
@param EAX CPUID_TIME_STAMP_COUNTER (0x16)
|
|
|
|
@retval EAX Returns processor base frequency information described by the
|
|
type CPUID_PROCESSOR_FREQUENCY_EAX.
|
|
@retval EBX Returns maximum frequency information described by the type
|
|
CPUID_PROCESSOR_FREQUENCY_EBX.
|
|
@retval ECX Returns bus frequency information described by the type
|
|
CPUID_PROCESSOR_FREQUENCY_ECX.
|
|
@retval EDX Reserved.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_PROCESSOR_FREQUENCY_EAX Eax;
|
|
CPUID_PROCESSOR_FREQUENCY_EBX Ebx;
|
|
CPUID_PROCESSOR_FREQUENCY_ECX Ecx;
|
|
|
|
AsmCpuid (CPUID_PROCESSOR_FREQUENCY, &Eax.Uint32, &Ebx.Uint32, &Ecx.Uint32, NULL);
|
|
@endcode
|
|
**/
|
|
#define CPUID_PROCESSOR_FREQUENCY 0x16
|
|
|
|
/**
|
|
CPUID Processor Frequency Information EAX for CPUID leaf
|
|
#CPUID_PROCESSOR_FREQUENCY.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 15:0] Processor Base Frequency (in MHz).
|
|
///
|
|
UINT32 ProcessorBaseFrequency:16;
|
|
UINT32 Reserved:16;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_PROCESSOR_FREQUENCY_EAX;
|
|
|
|
/**
|
|
CPUID Processor Frequency Information EBX for CPUID leaf
|
|
#CPUID_PROCESSOR_FREQUENCY.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 15:0] Maximum Frequency (in MHz).
|
|
///
|
|
UINT32 MaximumFrequency:16;
|
|
UINT32 Reserved:16;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_PROCESSOR_FREQUENCY_EBX;
|
|
|
|
/**
|
|
CPUID Processor Frequency Information ECX for CPUID leaf
|
|
#CPUID_PROCESSOR_FREQUENCY.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 15:0] Bus (Reference) Frequency (in MHz).
|
|
///
|
|
UINT32 BusFrequency:16;
|
|
UINT32 Reserved:16;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_PROCESSOR_FREQUENCY_ECX;
|
|
|
|
|
|
/**
|
|
CPUID SoC Vendor Information
|
|
|
|
@param EAX CPUID_SOC_VENDOR (0x17)
|
|
@param ECX CPUID_SOC_VENDOR_MAIN_LEAF (0x00)
|
|
CPUID_SOC_VENDOR_BRAND_STRING1 (0x01)
|
|
CPUID_SOC_VENDOR_BRAND_STRING1 (0x02)
|
|
CPUID_SOC_VENDOR_BRAND_STRING1 (0x03)
|
|
|
|
@note
|
|
Leaf 17H output depends on the initial value in ECX. SOC Vendor Brand String
|
|
is a UTF-8 encoded string padded with trailing bytes of 00H. The complete SOC
|
|
Vendor Brand String is constructed by concatenating in ascending order of
|
|
EAX:EBX:ECX:EDX and from the sub-leaf 1 fragment towards sub-leaf 3.
|
|
|
|
**/
|
|
#define CPUID_SOC_VENDOR 0x17
|
|
|
|
/**
|
|
CPUID SoC Vendor Information
|
|
|
|
@param EAX CPUID_SOC_VENDOR (0x17)
|
|
@param ECX CPUID_SOC_VENDOR_MAIN_LEAF (0x00)
|
|
|
|
@retval EAX MaxSOCID_Index. Reports the maximum input value of supported
|
|
sub-leaf in leaf 17H.
|
|
@retval EBX Returns SoC Vendor information described by the type
|
|
CPUID_SOC_VENDOR_MAIN_LEAF_EBX.
|
|
@retval ECX Project ID. A unique number an SOC vendor assigns to its SOC
|
|
projects.
|
|
@retval EDX Stepping ID. A unique number within an SOC project that an SOC
|
|
vendor assigns.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
UINT32 Eax;
|
|
CPUID_SOC_VENDOR_MAIN_LEAF_EBX Ebx;
|
|
UINT32 Ecx;
|
|
UINT32 Edx;
|
|
|
|
AsmCpuidEx (
|
|
CPUID_SOC_VENDOR, CPUID_SOC_VENDOR_MAIN_LEAF,
|
|
&Eax, &Ebx.Uint32, &Ecx, &Edx
|
|
);
|
|
@endcode
|
|
**/
|
|
#define CPUID_SOC_VENDOR_MAIN_LEAF 0x00
|
|
|
|
/**
|
|
CPUID SoC Vendor Information EBX for CPUID leaf #CPUID_SOC_VENDOR sub-leaf
|
|
#CPUID_SOC_VENDOR_MAIN_LEAF.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 15:0] SOC Vendor ID.
|
|
///
|
|
UINT32 SocVendorId:16;
|
|
///
|
|
/// [Bit 16] If 1, the SOC Vendor ID field is assigned via an industry
|
|
/// standard enumeration scheme. Otherwise, the SOC Vendor ID field is
|
|
/// assigned by Intel.
|
|
///
|
|
UINT32 IsVendorScheme:1;
|
|
UINT32 Reserved:15;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_SOC_VENDOR_MAIN_LEAF_EBX;
|
|
|
|
/**
|
|
CPUID SoC Vendor Information
|
|
|
|
@param EAX CPUID_SOC_VENDOR (0x17)
|
|
@param ECX CPUID_SOC_VENDOR_BRAND_STRING1 (0x01)
|
|
|
|
@retval EAX SOC Vendor Brand String. UTF-8 encoded string of type
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA.
|
|
@retval EBX SOC Vendor Brand String. UTF-8 encoded string of type
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA.
|
|
@retval ECX SOC Vendor Brand String. UTF-8 encoded string of type
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA.
|
|
@retval EDX SOC Vendor Brand String. UTF-8 encoded string of type
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA Eax;
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA Ebx;
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA Ecx;
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA Edx;
|
|
|
|
AsmCpuidEx (
|
|
CPUID_SOC_VENDOR, CPUID_SOC_VENDOR_BRAND_STRING1,
|
|
&Eax.Uint32, &Ebx.Uint32, &Ecx.Uint32, &Edx.Uint32
|
|
);
|
|
@endcode
|
|
**/
|
|
#define CPUID_SOC_VENDOR_BRAND_STRING1 0x01
|
|
|
|
/**
|
|
CPUID SoC Vendor Brand String for CPUID leafs #CPUID_SOC_VENDOR_BRAND_STRING1,
|
|
#CPUID_SOC_VENDOR_BRAND_STRING2, and #CPUID_SOC_VENDOR_BRAND_STRING3.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// 4 UTF-8 characters of Soc Vendor Brand String
|
|
///
|
|
CHAR8 BrandString[4];
|
|
///
|
|
/// All fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_SOC_VENDOR_BRAND_STRING_DATA;
|
|
|
|
/**
|
|
CPUID SoC Vendor Information
|
|
|
|
@param EAX CPUID_SOC_VENDOR (0x17)
|
|
@param ECX CPUID_SOC_VENDOR_BRAND_STRING2 (0x02)
|
|
|
|
@retval EAX SOC Vendor Brand String. UTF-8 encoded string of type
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA.
|
|
@retval EBX SOC Vendor Brand String. UTF-8 encoded string of type
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA.
|
|
@retval ECX SOC Vendor Brand String. UTF-8 encoded string of type
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA.
|
|
@retval EDX SOC Vendor Brand String. UTF-8 encoded string of type
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA Eax;
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA Ebx;
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA Ecx;
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA Edx;
|
|
|
|
AsmCpuidEx (
|
|
CPUID_SOC_VENDOR, CPUID_SOC_VENDOR_BRAND_STRING2,
|
|
&Eax.Uint32, &Ebx.Uint32, &Ecx.Uint32, &Edx.Uint32
|
|
);
|
|
@endcode
|
|
**/
|
|
#define CPUID_SOC_VENDOR_BRAND_STRING2 0x02
|
|
|
|
/**
|
|
CPUID SoC Vendor Information
|
|
|
|
@param EAX CPUID_SOC_VENDOR (0x17)
|
|
@param ECX CPUID_SOC_VENDOR_BRAND_STRING3 (0x03)
|
|
|
|
@retval EAX SOC Vendor Brand String. UTF-8 encoded string of type
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA.
|
|
@retval EBX SOC Vendor Brand String. UTF-8 encoded string of type
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA.
|
|
@retval ECX SOC Vendor Brand String. UTF-8 encoded string of type
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA.
|
|
@retval EDX SOC Vendor Brand String. UTF-8 encoded string of type
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA Eax;
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA Ebx;
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA Ecx;
|
|
CPUID_SOC_VENDOR_BRAND_STRING_DATA Edx;
|
|
|
|
AsmCpuidEx (
|
|
CPUID_SOC_VENDOR, CPUID_SOC_VENDOR_BRAND_STRING3,
|
|
&Eax.Uint32, &Ebx.Uint32, &Ecx.Uint32, &Edx.Uint32
|
|
);
|
|
@endcode
|
|
**/
|
|
#define CPUID_SOC_VENDOR_BRAND_STRING3 0x03
|
|
|
|
|
|
/**
|
|
CPUID Extended Function
|
|
|
|
@param EAX CPUID_EXTENDED_FUNCTION (0x80000000)
|
|
|
|
@retval EAX Maximum Input Value for Extended Function CPUID Information.
|
|
@retval EBX Reserved.
|
|
@retval ECX Reserved.
|
|
@retval EDX Reserved.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
UINT32 Eax;
|
|
|
|
AsmCpuid (CPUID_EXTENDED_FUNCTION, &Eax, NULL, NULL, NULL);
|
|
@endcode
|
|
**/
|
|
#define CPUID_EXTENDED_FUNCTION 0x80000000
|
|
|
|
|
|
/**
|
|
CPUID Extended Processor Signature and Feature Bits
|
|
|
|
@param EAX CPUID_EXTENDED_CPU_SIG (0x80000001)
|
|
|
|
@retval EAX CPUID_EXTENDED_CPU_SIG.
|
|
@retval EBX Reserved.
|
|
@retval ECX Extended Processor Signature and Feature Bits information
|
|
described by the type CPUID_EXTENDED_CPU_SIG_ECX.
|
|
@retval EDX Extended Processor Signature and Feature Bits information
|
|
described by the type CPUID_EXTENDED_CPU_SIG_EDX.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
UINT32 Eax;
|
|
CPUID_EXTENDED_CPU_SIG_ECX Ecx;
|
|
CPUID_EXTENDED_CPU_SIG_EDX Edx;
|
|
|
|
AsmCpuid (CPUID_EXTENDED_CPU_SIG, &Eax, NULL, &Ecx.Uint32, &Edx.Uint32);
|
|
@endcode
|
|
**/
|
|
#define CPUID_EXTENDED_CPU_SIG 0x80000001
|
|
|
|
/**
|
|
CPUID Extended Processor Signature and Feature Bits ECX for CPUID leaf
|
|
#CPUID_EXTENDED_CPU_SIG.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bit 0] LAHF/SAHF available in 64-bit mode.
|
|
///
|
|
UINT32 LAHF_SAHF:1;
|
|
UINT32 Reserved1:4;
|
|
///
|
|
/// [Bit 5] LZCNT.
|
|
///
|
|
UINT32 LZCNT:1;
|
|
UINT32 Reserved2:2;
|
|
///
|
|
/// [Bit 8] PREFETCHW.
|
|
///
|
|
UINT32 PREFETCHW:1;
|
|
UINT32 Reserved3:23;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_EXTENDED_CPU_SIG_ECX;
|
|
|
|
/**
|
|
CPUID Extended Processor Signature and Feature Bits EDX for CPUID leaf
|
|
#CPUID_EXTENDED_CPU_SIG.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
UINT32 Reserved1:11;
|
|
///
|
|
/// [Bit 11] SYSCALL/SYSRET available in 64-bit mode.
|
|
///
|
|
UINT32 SYSCALL_SYSRET:1;
|
|
UINT32 Reserved2:8;
|
|
///
|
|
/// [Bit 20] Execute Disable Bit available.
|
|
///
|
|
UINT32 NX:1;
|
|
UINT32 Reserved3:5;
|
|
///
|
|
/// [Bit 26] 1-GByte pages are available if 1.
|
|
///
|
|
UINT32 Page1GB:1;
|
|
///
|
|
/// [Bit 27] RDTSCP and IA32_TSC_AUX are available if 1.
|
|
///
|
|
UINT32 RDTSCP:1;
|
|
UINT32 Reserved4:1;
|
|
///
|
|
/// [Bit 29] Intel(R) 64 Architecture available if 1.
|
|
///
|
|
UINT32 LM:1;
|
|
UINT32 Reserved5:2;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_EXTENDED_CPU_SIG_EDX;
|
|
|
|
|
|
/**
|
|
CPUID Processor Brand String
|
|
|
|
@param EAX CPUID_BRAND_STRING1 (0x80000002)
|
|
|
|
@retval EAX Processor Brand String in type CPUID_BRAND_STRING_DATA.
|
|
@retval EBX Processor Brand String Continued in type CPUID_BRAND_STRING_DATA.
|
|
@retval ECX Processor Brand String Continued in type CPUID_BRAND_STRING_DATA.
|
|
@retval EDX Processor Brand String Continued in type CPUID_BRAND_STRING_DATA.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_BRAND_STRING_DATA Eax;
|
|
CPUID_BRAND_STRING_DATA Ebx;
|
|
CPUID_BRAND_STRING_DATA Ecx;
|
|
CPUID_BRAND_STRING_DATA Edx;
|
|
|
|
AsmCpuid (CPUID_BRAND_STRING1, &Eax.Uint32, &Ebx.Uint32, &Ecx.Uint32, &Edx.Uint32);
|
|
@endcode
|
|
**/
|
|
#define CPUID_BRAND_STRING1 0x80000002
|
|
|
|
/**
|
|
CPUID Processor Brand String for CPUID leafs #CPUID_BRAND_STRING1,
|
|
#CPUID_BRAND_STRING2, and #CPUID_BRAND_STRING3.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// 4 ASCII characters of Processor Brand String
|
|
///
|
|
CHAR8 BrandString[4];
|
|
///
|
|
/// All fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_BRAND_STRING_DATA;
|
|
|
|
/**
|
|
CPUID Processor Brand String
|
|
|
|
@param EAX CPUID_BRAND_STRING2 (0x80000003)
|
|
|
|
@retval EAX Processor Brand String Continued in type CPUID_BRAND_STRING_DATA.
|
|
@retval EBX Processor Brand String Continued in type CPUID_BRAND_STRING_DATA.
|
|
@retval ECX Processor Brand String Continued in type CPUID_BRAND_STRING_DATA.
|
|
@retval EDX Processor Brand String Continued in type CPUID_BRAND_STRING_DATA.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_BRAND_STRING_DATA Eax;
|
|
CPUID_BRAND_STRING_DATA Ebx;
|
|
CPUID_BRAND_STRING_DATA Ecx;
|
|
CPUID_BRAND_STRING_DATA Edx;
|
|
|
|
AsmCpuid (CPUID_BRAND_STRING2, &Eax.Uint32, &Ebx.Uint32, &Ecx.Uint32, &Edx.Uint32);
|
|
@endcode
|
|
**/
|
|
#define CPUID_BRAND_STRING2 0x80000003
|
|
|
|
/**
|
|
CPUID Processor Brand String
|
|
|
|
@param EAX CPUID_BRAND_STRING3 (0x80000004)
|
|
|
|
@retval EAX Processor Brand String Continued in type CPUID_BRAND_STRING_DATA.
|
|
@retval EBX Processor Brand String Continued in type CPUID_BRAND_STRING_DATA.
|
|
@retval ECX Processor Brand String Continued in type CPUID_BRAND_STRING_DATA.
|
|
@retval EDX Processor Brand String Continued in type CPUID_BRAND_STRING_DATA.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_BRAND_STRING_DATA Eax;
|
|
CPUID_BRAND_STRING_DATA Ebx;
|
|
CPUID_BRAND_STRING_DATA Ecx;
|
|
CPUID_BRAND_STRING_DATA Edx;
|
|
|
|
AsmCpuid (CPUID_BRAND_STRING3, &Eax.Uint32, &Ebx.Uint32, &Ecx.Uint32, &Edx.Uint32);
|
|
@endcode
|
|
**/
|
|
#define CPUID_BRAND_STRING3 0x80000004
|
|
|
|
|
|
/**
|
|
CPUID Extended Cache information
|
|
|
|
@param EAX CPUID_EXTENDED_CACHE_INFO (0x80000006)
|
|
|
|
@retval EAX Reserved.
|
|
@retval EBX Reserved.
|
|
@retval ECX Extended cache information described by the type
|
|
CPUID_EXTENDED_CACHE_INFO_ECX.
|
|
@retval EDX Reserved.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_EXTENDED_CACHE_INFO_ECX Ecx;
|
|
|
|
AsmCpuid (CPUID_EXTENDED_CACHE_INFO, NULL, NULL, &Ecx.Uint32, NULL);
|
|
@endcode
|
|
**/
|
|
#define CPUID_EXTENDED_CACHE_INFO 0x80000006
|
|
|
|
/**
|
|
CPUID Extended Cache information ECX for CPUID leaf #CPUID_EXTENDED_CACHE_INFO.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 7:0] Cache line size in bytes.
|
|
///
|
|
UINT32 CacheLineSize:8;
|
|
UINT32 Reserved:4;
|
|
///
|
|
/// [Bits 15:12] L2 Associativity field. Supported values are in the range
|
|
/// #CPUID_EXTENDED_CACHE_INFO_ECX_L2_ASSOCIATIVITY_DISABLED to
|
|
/// #CPUID_EXTENDED_CACHE_INFO_ECX_L2_ASSOCIATIVITY_FULL
|
|
///
|
|
UINT32 L2Associativity:4;
|
|
///
|
|
/// [Bits 31:16] Cache size in 1K units.
|
|
///
|
|
UINT32 CacheSize:16;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_EXTENDED_CACHE_INFO_ECX;
|
|
|
|
///
|
|
/// @{ Define value for bit field CPUID_EXTENDED_CACHE_INFO_ECX.L2Associativity
|
|
///
|
|
#define CPUID_EXTENDED_CACHE_INFO_ECX_L2_ASSOCIATIVITY_DISABLED 0x00
|
|
#define CPUID_EXTENDED_CACHE_INFO_ECX_L2_ASSOCIATIVITY_DIRECT_MAPPED 0x01
|
|
#define CPUID_EXTENDED_CACHE_INFO_ECX_L2_ASSOCIATIVITY_2_WAY 0x02
|
|
#define CPUID_EXTENDED_CACHE_INFO_ECX_L2_ASSOCIATIVITY_4_WAY 0x04
|
|
#define CPUID_EXTENDED_CACHE_INFO_ECX_L2_ASSOCIATIVITY_8_WAY 0x06
|
|
#define CPUID_EXTENDED_CACHE_INFO_ECX_L2_ASSOCIATIVITY_16_WAY 0x08
|
|
#define CPUID_EXTENDED_CACHE_INFO_ECX_L2_ASSOCIATIVITY_FULL 0x0F
|
|
///
|
|
/// @}
|
|
///
|
|
|
|
/**
|
|
CPUID Extended Time Stamp Counter information
|
|
|
|
@param EAX CPUID_EXTENDED_TIME_STAMP_COUNTER (0x80000007)
|
|
|
|
@retval EAX Reserved.
|
|
@retval EBX Reserved.
|
|
@retval ECX Reserved.
|
|
@retval EDX Extended time stamp counter (TSC) information described by the
|
|
type CPUID_EXTENDED_TIME_STAMP_COUNTER_EDX.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_EXTENDED_TIME_STAMP_COUNTER_EDX Edx;
|
|
|
|
AsmCpuid (CPUID_EXTENDED_TIME_STAMP_COUNTER, NULL, NULL, NULL, &Edx.Uint32);
|
|
@endcode
|
|
**/
|
|
#define CPUID_EXTENDED_TIME_STAMP_COUNTER 0x80000007
|
|
|
|
/**
|
|
CPUID Extended Time Stamp Counter information EDX for CPUID leaf
|
|
#CPUID_EXTENDED_TIME_STAMP_COUNTER.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
UINT32 Reserved1:8;
|
|
///
|
|
/// [Bit 8] Invariant TSC available if 1.
|
|
///
|
|
UINT32 InvariantTsc:1;
|
|
UINT32 Reserved2:23;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_EXTENDED_TIME_STAMP_COUNTER_EDX;
|
|
|
|
|
|
/**
|
|
CPUID Linear Physical Address Size
|
|
|
|
@param EAX CPUID_VIR_PHY_ADDRESS_SIZE (0x80000008)
|
|
|
|
@retval EAX Linear/Physical Address Size described by the type
|
|
CPUID_VIR_PHY_ADDRESS_SIZE_EAX.
|
|
@retval EBX Reserved.
|
|
@retval ECX Reserved.
|
|
@retval EDX Reserved.
|
|
|
|
<b>Example usage</b>
|
|
@code
|
|
CPUID_VIR_PHY_ADDRESS_SIZE_EAX Eax;
|
|
|
|
AsmCpuid (CPUID_VIR_PHY_ADDRESS_SIZE, &Eax.Uint32, NULL, NULL, NULL);
|
|
@endcode
|
|
**/
|
|
#define CPUID_VIR_PHY_ADDRESS_SIZE 0x80000008
|
|
|
|
/**
|
|
CPUID Linear Physical Address Size EAX for CPUID leaf
|
|
#CPUID_VIR_PHY_ADDRESS_SIZE.
|
|
**/
|
|
typedef union {
|
|
///
|
|
/// Individual bit fields
|
|
///
|
|
struct {
|
|
///
|
|
/// [Bits 7:0] Number of physical address bits.
|
|
///
|
|
/// @note
|
|
/// If CPUID.80000008H:EAX[7:0] is supported, the maximum physical address
|
|
/// number supported should come from this field.
|
|
///
|
|
UINT32 PhysicalAddressBits:8;
|
|
///
|
|
/// [Bits 15:8] Number of linear address bits.
|
|
///
|
|
UINT32 LinearAddressBits:8;
|
|
UINT32 Reserved:16;
|
|
} Bits;
|
|
///
|
|
/// All bit fields as a 32-bit value
|
|
///
|
|
UINT32 Uint32;
|
|
} CPUID_VIR_PHY_ADDRESS_SIZE_EAX;
|
|
|
|
#endif
|