/** @file Protocol used to report CPU information Copyright (c) 2017, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _CPU_INFO_H_ #define _CPU_INFO_H_ #include typedef struct _CPU_INFO_PROTOCOL CPU_INFO_PROTOCOL; extern EFI_GUID gCpuInfoProtocolGuid; // // DXE_CPU_INFO_PROTOCOL revisions // #define CPU_INFO_PROTOCOL_REVISION 1 // // Processor feature definitions. // #define TXT_SUPPORT BIT0 #define VMX_SUPPORT BIT1 #define XD_SUPPORT BIT2 #define DCA_SUPPORT BIT3 #define X2APIC_SUPPORT BIT4 #define AES_SUPPORT BIT5 #define HT_SUPPORT BIT6 #define DEBUG_SUPPORT BIT7 #define DEBUG_LOCK_SUPPORT BIT8 #define PROC_TRACE_SUPPORT BIT9 #define HDC_SUPPORT BIT10 #pragma pack(1) /// /// Cache descriptor information /// typedef struct { UINT8 Desc; ///< Cache Descriptor UINT8 Level; ///< Cache Level UINT8 Type; ///< Cache Type. 0: Data, 1: Instruction, 3: Unified UINT32 Size; ///< Cache Size. UINT16 Associativity; ///< Cache Ways of Associativity. } CACHE_DESCRIPTOR_INFO; /// /// Processor information /// typedef struct { UINT32 CpuSignature; ///< Processor signature and version information. UINT64 Features; ///< Features availability in the CPU based on reading ECX after doing Asmcpuid(EAX=1). CHAR8 *BrandString; ///< Processor Brand String. UINT8 NumSupportedCores; ///< Total Number of Supported Cores in CPU Package. If Dual core, 2 cores. UINT8 NumSupportedThreadsPerCore; ///< Number of Supported Threads per Core. UINT8 NumCores; ///< Number of Enabled or Active Cores. UINT8 NumHts; ///< Number of Enabled Threads per Core. This will be 1 or 2. UINT32 IntendedFreq; ///< Maximum non turbo ratio in MHz UINT32 ActualFreq; ///< Actual frequency in MHz UINT32 Voltage; ///< Current operating voltage. CACHE_DESCRIPTOR_INFO *CacheInfo; ///< Cache descriptor information. UINT8 MaxCacheSupported; ///< Maximum cache supported. UINT8 SmmbaseSwSmiNumber; ///< Software SMI Number from Smbase. UINT16 NumberOfPStates; ///< Number of P-States. } CPU_INFO; /// /// This HOB is data structure representing two different address location in SMRAM to hold SMRAM CPU DATA. /// typedef struct { EFI_PHYSICAL_ADDRESS LockBoxData; ///< First location (address) of SMRAM CPU DATA. EFI_PHYSICAL_ADDRESS SmramCpuData; ///< Second location (Address) of SMRAM CPU DATA. UINT64 LockBoxSize; ///< Size of SMRAM CPU DATA. } SMRAM_CPU_INFO; /// /// SGX Information /// typedef struct { UINT64 SgxSinitNvsData; ///< Sinit SE SVN Version saved and passed back in next boot } SGX_INFO; #pragma pack() /// /// This protocol provides information about the common features available in this CPU. /// struct _CPU_INFO_PROTOCOL { /** Revision for the protocol structure. Any backwards compatible changes to this protocol will result in an update in the revision number. Major changes will require publication of a new protocol Revision 1: - Initial version **/ UINT8 Revision; /** CPU Supported Feature. - BIT0: If set then processor supports TXT. - BIT1: If set then processor supports virtual mode extensions. - BIT2: If set then processor supports execute disable bit. - BIT3: If set then processor supports DCA. - BIT4: If set then processor supports X2APIC. - BIT5: If set then processor supports Advanced Encryption Standard. - BIT6: If set then processor supports hyperthreading. - BIT7: If set then processor supports debug interface. - BIT8: If set then processor supports debug interface lock. - BIT9: If set then processor supports processor trace. - BIT10: If Set then processor supports supports HDC. **/ UINT64 CpuCommonFeatures; CPU_INFO *CpuInfo; ///< Processor Basic Information SMRAM_CPU_INFO *SmramCpuInfo; ///< SMRAM CPU Information SGX_INFO *SgxInfo; ///< SGX Information }; #endif