1*f334afcfSToomas Soome /** @file 2*f334afcfSToomas Soome TCG EFI Platform Definition in TCG_EFI_Platform_1_20_Final and 3*f334afcfSToomas Soome TCG PC Client Platform Firmware Profile Specification, Revision 1.05 4*f334afcfSToomas Soome 5*f334afcfSToomas Soome Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR> 6*f334afcfSToomas Soome SPDX-License-Identifier: BSD-2-Clause-Patent 7*f334afcfSToomas Soome 8*f334afcfSToomas Soome **/ 9*f334afcfSToomas Soome 10*f334afcfSToomas Soome #ifndef __UEFI_TCG_PLATFORM_H__ 11*f334afcfSToomas Soome #define __UEFI_TCG_PLATFORM_H__ 12*f334afcfSToomas Soome 13*f334afcfSToomas Soome #include <IndustryStandard/Tpm12.h> 14*f334afcfSToomas Soome #include <IndustryStandard/Tpm20.h> 15*f334afcfSToomas Soome #include <Uefi.h> 16*f334afcfSToomas Soome 17*f334afcfSToomas Soome // 18*f334afcfSToomas Soome // Standard event types 19*f334afcfSToomas Soome // 20*f334afcfSToomas Soome #define EV_PREBOOT_CERT ((TCG_EVENTTYPE) 0x00000000) 21*f334afcfSToomas Soome #define EV_POST_CODE ((TCG_EVENTTYPE) 0x00000001) 22*f334afcfSToomas Soome #define EV_NO_ACTION ((TCG_EVENTTYPE) 0x00000003) 23*f334afcfSToomas Soome #define EV_SEPARATOR ((TCG_EVENTTYPE) 0x00000004) 24*f334afcfSToomas Soome #define EV_ACTION ((TCG_EVENTTYPE) 0x00000005) 25*f334afcfSToomas Soome #define EV_EVENT_TAG ((TCG_EVENTTYPE) 0x00000006) 26*f334afcfSToomas Soome #define EV_S_CRTM_CONTENTS ((TCG_EVENTTYPE) 0x00000007) 27*f334afcfSToomas Soome #define EV_S_CRTM_VERSION ((TCG_EVENTTYPE) 0x00000008) 28*f334afcfSToomas Soome #define EV_CPU_MICROCODE ((TCG_EVENTTYPE) 0x00000009) 29*f334afcfSToomas Soome #define EV_PLATFORM_CONFIG_FLAGS ((TCG_EVENTTYPE) 0x0000000A) 30*f334afcfSToomas Soome #define EV_TABLE_OF_DEVICES ((TCG_EVENTTYPE) 0x0000000B) 31*f334afcfSToomas Soome #define EV_COMPACT_HASH ((TCG_EVENTTYPE) 0x0000000C) 32*f334afcfSToomas Soome #define EV_NONHOST_CODE ((TCG_EVENTTYPE) 0x0000000F) 33*f334afcfSToomas Soome #define EV_NONHOST_CONFIG ((TCG_EVENTTYPE) 0x00000010) 34*f334afcfSToomas Soome #define EV_NONHOST_INFO ((TCG_EVENTTYPE) 0x00000011) 35*f334afcfSToomas Soome #define EV_OMIT_BOOT_DEVICE_EVENTS ((TCG_EVENTTYPE) 0x00000012) 36*f334afcfSToomas Soome 37*f334afcfSToomas Soome // 38*f334afcfSToomas Soome // EFI specific event types 39*f334afcfSToomas Soome // 40*f334afcfSToomas Soome #define EV_EFI_EVENT_BASE ((TCG_EVENTTYPE) 0x80000000) 41*f334afcfSToomas Soome #define EV_EFI_VARIABLE_DRIVER_CONFIG (EV_EFI_EVENT_BASE + 1) 42*f334afcfSToomas Soome #define EV_EFI_VARIABLE_BOOT (EV_EFI_EVENT_BASE + 2) 43*f334afcfSToomas Soome #define EV_EFI_BOOT_SERVICES_APPLICATION (EV_EFI_EVENT_BASE + 3) 44*f334afcfSToomas Soome #define EV_EFI_BOOT_SERVICES_DRIVER (EV_EFI_EVENT_BASE + 4) 45*f334afcfSToomas Soome #define EV_EFI_RUNTIME_SERVICES_DRIVER (EV_EFI_EVENT_BASE + 5) 46*f334afcfSToomas Soome #define EV_EFI_GPT_EVENT (EV_EFI_EVENT_BASE + 6) 47*f334afcfSToomas Soome #define EV_EFI_ACTION (EV_EFI_EVENT_BASE + 7) 48*f334afcfSToomas Soome #define EV_EFI_PLATFORM_FIRMWARE_BLOB (EV_EFI_EVENT_BASE + 8) 49*f334afcfSToomas Soome #define EV_EFI_HANDOFF_TABLES (EV_EFI_EVENT_BASE + 9) 50*f334afcfSToomas Soome #define EV_EFI_PLATFORM_FIRMWARE_BLOB2 (EV_EFI_EVENT_BASE + 0xA) 51*f334afcfSToomas Soome #define EV_EFI_HANDOFF_TABLES2 (EV_EFI_EVENT_BASE + 0xB) 52*f334afcfSToomas Soome #define EV_EFI_HCRTM_EVENT (EV_EFI_EVENT_BASE + 0x10) 53*f334afcfSToomas Soome #define EV_EFI_VARIABLE_AUTHORITY (EV_EFI_EVENT_BASE + 0xE0) 54*f334afcfSToomas Soome #define EV_EFI_SPDM_FIRMWARE_BLOB (EV_EFI_EVENT_BASE + 0xE1) 55*f334afcfSToomas Soome #define EV_EFI_SPDM_FIRMWARE_CONFIG (EV_EFI_EVENT_BASE + 0xE2) 56*f334afcfSToomas Soome 57*f334afcfSToomas Soome #define EFI_CALLING_EFI_APPLICATION \ 58*f334afcfSToomas Soome "Calling EFI Application from Boot Option" 59*f334afcfSToomas Soome #define EFI_RETURNING_FROM_EFI_APPLICATION \ 60*f334afcfSToomas Soome "Returning from EFI Application from Boot Option" 61*f334afcfSToomas Soome #define EFI_EXIT_BOOT_SERVICES_INVOCATION \ 62*f334afcfSToomas Soome "Exit Boot Services Invocation" 63*f334afcfSToomas Soome #define EFI_EXIT_BOOT_SERVICES_FAILED \ 64*f334afcfSToomas Soome "Exit Boot Services Returned with Failure" 65*f334afcfSToomas Soome #define EFI_EXIT_BOOT_SERVICES_SUCCEEDED \ 66*f334afcfSToomas Soome "Exit Boot Services Returned with Success" 67*f334afcfSToomas Soome 68*f334afcfSToomas Soome #define EV_POSTCODE_INFO_POST_CODE "POST CODE" 69*f334afcfSToomas Soome #define POST_CODE_STR_LEN (sizeof(EV_POSTCODE_INFO_POST_CODE) - 1) 70*f334afcfSToomas Soome 71*f334afcfSToomas Soome #define EV_POSTCODE_INFO_SMM_CODE "SMM CODE" 72*f334afcfSToomas Soome #define SMM_CODE_STR_LEN (sizeof(EV_POSTCODE_INFO_SMM_CODE) - 1) 73*f334afcfSToomas Soome 74*f334afcfSToomas Soome #define EV_POSTCODE_INFO_ACPI_DATA "ACPI DATA" 75*f334afcfSToomas Soome #define ACPI_DATA_LEN (sizeof(EV_POSTCODE_INFO_ACPI_DATA) - 1) 76*f334afcfSToomas Soome 77*f334afcfSToomas Soome #define EV_POSTCODE_INFO_BIS_CODE "BIS CODE" 78*f334afcfSToomas Soome #define BIS_CODE_LEN (sizeof(EV_POSTCODE_INFO_BIS_CODE) - 1) 79*f334afcfSToomas Soome 80*f334afcfSToomas Soome #define EV_POSTCODE_INFO_UEFI_PI "UEFI PI" 81*f334afcfSToomas Soome #define UEFI_PI_LEN (sizeof(EV_POSTCODE_INFO_UEFI_PI) - 1) 82*f334afcfSToomas Soome 83*f334afcfSToomas Soome #define EV_POSTCODE_INFO_OPROM "Embedded Option ROM" 84*f334afcfSToomas Soome #define OPROM_LEN (sizeof(EV_POSTCODE_INFO_OPROM) - 1) 85*f334afcfSToomas Soome 86*f334afcfSToomas Soome #define EV_POSTCODE_INFO_EMBEDDED_UEFI_DRIVER "Embedded UEFI Driver" 87*f334afcfSToomas Soome #define EMBEDDED_UEFI_DRIVER_LEN (sizeof(EV_POSTCODE_INFO_EMBEDDED_UEFI_DRIVER) - 1) 88*f334afcfSToomas Soome 89*f334afcfSToomas Soome #define FIRMWARE_DEBUGGER_EVENT_STRING "UEFI Debug Mode" 90*f334afcfSToomas Soome #define FIRMWARE_DEBUGGER_EVENT_STRING_LEN (sizeof(FIRMWARE_DEBUGGER_EVENT_STRING) - 1) 91*f334afcfSToomas Soome 92*f334afcfSToomas Soome // 93*f334afcfSToomas Soome // Set structure alignment to 1-byte 94*f334afcfSToomas Soome // 95*f334afcfSToomas Soome #pragma pack (1) 96*f334afcfSToomas Soome 97*f334afcfSToomas Soome typedef UINT32 TCG_EVENTTYPE; 98*f334afcfSToomas Soome typedef TPM_PCRINDEX TCG_PCRINDEX; 99*f334afcfSToomas Soome typedef TPM_DIGEST TCG_DIGEST; 100*f334afcfSToomas Soome /// 101*f334afcfSToomas Soome /// Event Log Entry Structure Definition 102*f334afcfSToomas Soome /// 103*f334afcfSToomas Soome typedef struct tdTCG_PCR_EVENT { 104*f334afcfSToomas Soome TCG_PCRINDEX PCRIndex; ///< PCRIndex event extended to 105*f334afcfSToomas Soome TCG_EVENTTYPE EventType; ///< TCG EFI event type 106*f334afcfSToomas Soome TCG_DIGEST Digest; ///< Value extended into PCRIndex 107*f334afcfSToomas Soome UINT32 EventSize; ///< Size of the event data 108*f334afcfSToomas Soome UINT8 Event[1]; ///< The event data 109*f334afcfSToomas Soome } TCG_PCR_EVENT; 110*f334afcfSToomas Soome 111*f334afcfSToomas Soome #define TSS_EVENT_DATA_MAX_SIZE 256 112*f334afcfSToomas Soome 113*f334afcfSToomas Soome /// 114*f334afcfSToomas Soome /// TCG_PCR_EVENT_HDR 115*f334afcfSToomas Soome /// 116*f334afcfSToomas Soome typedef struct tdTCG_PCR_EVENT_HDR { 117*f334afcfSToomas Soome TCG_PCRINDEX PCRIndex; 118*f334afcfSToomas Soome TCG_EVENTTYPE EventType; 119*f334afcfSToomas Soome TCG_DIGEST Digest; 120*f334afcfSToomas Soome UINT32 EventSize; 121*f334afcfSToomas Soome } TCG_PCR_EVENT_HDR; 122*f334afcfSToomas Soome 123*f334afcfSToomas Soome /// 124*f334afcfSToomas Soome /// EFI_PLATFORM_FIRMWARE_BLOB 125*f334afcfSToomas Soome /// 126*f334afcfSToomas Soome /// BlobLength should be of type UINTN but we use UINT64 here 127*f334afcfSToomas Soome /// because PEI is 32-bit while DXE is 64-bit on x64 platforms 128*f334afcfSToomas Soome /// 129*f334afcfSToomas Soome typedef struct tdEFI_PLATFORM_FIRMWARE_BLOB { 130*f334afcfSToomas Soome EFI_PHYSICAL_ADDRESS BlobBase; 131*f334afcfSToomas Soome UINT64 BlobLength; 132*f334afcfSToomas Soome } EFI_PLATFORM_FIRMWARE_BLOB; 133*f334afcfSToomas Soome 134*f334afcfSToomas Soome /// 135*f334afcfSToomas Soome /// UEFI_PLATFORM_FIRMWARE_BLOB 136*f334afcfSToomas Soome /// 137*f334afcfSToomas Soome /// This structure is used in EV_EFI_PLATFORM_FIRMWARE_BLOB 138*f334afcfSToomas Soome /// event to facilitate the measurement of firmware volume. 139*f334afcfSToomas Soome /// 140*f334afcfSToomas Soome typedef struct tdUEFI_PLATFORM_FIRMWARE_BLOB { 141*f334afcfSToomas Soome EFI_PHYSICAL_ADDRESS BlobBase; 142*f334afcfSToomas Soome UINT64 BlobLength; 143*f334afcfSToomas Soome } UEFI_PLATFORM_FIRMWARE_BLOB; 144*f334afcfSToomas Soome 145*f334afcfSToomas Soome /// 146*f334afcfSToomas Soome /// UEFI_PLATFORM_FIRMWARE_BLOB2 147*f334afcfSToomas Soome /// 148*f334afcfSToomas Soome /// This structure is used in EV_EFI_PLATFORM_FIRMWARE_BLOB2 149*f334afcfSToomas Soome /// event to facilitate the measurement of firmware volume. 150*f334afcfSToomas Soome /// 151*f334afcfSToomas Soome typedef struct tdUEFI_PLATFORM_FIRMWARE_BLOB2 { 152*f334afcfSToomas Soome UINT8 BlobDescriptionSize; 153*f334afcfSToomas Soome // UINT8 BlobDescription[BlobDescriptionSize]; 154*f334afcfSToomas Soome // EFI_PHYSICAL_ADDRESS BlobBase; 155*f334afcfSToomas Soome // UINT64 BlobLength; 156*f334afcfSToomas Soome } UEFI_PLATFORM_FIRMWARE_BLOB2; 157*f334afcfSToomas Soome 158*f334afcfSToomas Soome /// 159*f334afcfSToomas Soome /// EFI_IMAGE_LOAD_EVENT 160*f334afcfSToomas Soome /// 161*f334afcfSToomas Soome /// This structure is used in EV_EFI_BOOT_SERVICES_APPLICATION, 162*f334afcfSToomas Soome /// EV_EFI_BOOT_SERVICES_DRIVER and EV_EFI_RUNTIME_SERVICES_DRIVER 163*f334afcfSToomas Soome /// 164*f334afcfSToomas Soome typedef struct tdEFI_IMAGE_LOAD_EVENT { 165*f334afcfSToomas Soome EFI_PHYSICAL_ADDRESS ImageLocationInMemory; 166*f334afcfSToomas Soome UINTN ImageLengthInMemory; 167*f334afcfSToomas Soome UINTN ImageLinkTimeAddress; 168*f334afcfSToomas Soome UINTN LengthOfDevicePath; 169*f334afcfSToomas Soome EFI_DEVICE_PATH_PROTOCOL DevicePath[1]; 170*f334afcfSToomas Soome } EFI_IMAGE_LOAD_EVENT; 171*f334afcfSToomas Soome 172*f334afcfSToomas Soome /// 173*f334afcfSToomas Soome /// UEFI_IMAGE_LOAD_EVENT 174*f334afcfSToomas Soome /// 175*f334afcfSToomas Soome /// This structure is used in EV_EFI_BOOT_SERVICES_APPLICATION, 176*f334afcfSToomas Soome /// EV_EFI_BOOT_SERVICES_DRIVER and EV_EFI_RUNTIME_SERVICES_DRIVER 177*f334afcfSToomas Soome /// 178*f334afcfSToomas Soome typedef struct tdUEFI_IMAGE_LOAD_EVENT { 179*f334afcfSToomas Soome EFI_PHYSICAL_ADDRESS ImageLocationInMemory; 180*f334afcfSToomas Soome UINT64 ImageLengthInMemory; 181*f334afcfSToomas Soome UINT64 ImageLinkTimeAddress; 182*f334afcfSToomas Soome UINT64 LengthOfDevicePath; 183*f334afcfSToomas Soome EFI_DEVICE_PATH_PROTOCOL DevicePath[1]; 184*f334afcfSToomas Soome } UEFI_IMAGE_LOAD_EVENT; 185*f334afcfSToomas Soome 186*f334afcfSToomas Soome /// 187*f334afcfSToomas Soome /// EFI_HANDOFF_TABLE_POINTERS 188*f334afcfSToomas Soome /// 189*f334afcfSToomas Soome /// This structure is used in EV_EFI_HANDOFF_TABLES event to facilitate 190*f334afcfSToomas Soome /// the measurement of given configuration tables. 191*f334afcfSToomas Soome /// 192*f334afcfSToomas Soome typedef struct tdEFI_HANDOFF_TABLE_POINTERS { 193*f334afcfSToomas Soome UINTN NumberOfTables; 194*f334afcfSToomas Soome EFI_CONFIGURATION_TABLE TableEntry[1]; 195*f334afcfSToomas Soome } EFI_HANDOFF_TABLE_POINTERS; 196*f334afcfSToomas Soome 197*f334afcfSToomas Soome /// 198*f334afcfSToomas Soome /// UEFI_HANDOFF_TABLE_POINTERS 199*f334afcfSToomas Soome /// 200*f334afcfSToomas Soome /// This structure is used in EV_EFI_HANDOFF_TABLES event to facilitate 201*f334afcfSToomas Soome /// the measurement of given configuration tables. 202*f334afcfSToomas Soome /// 203*f334afcfSToomas Soome typedef struct tdUEFI_HANDOFF_TABLE_POINTERS { 204*f334afcfSToomas Soome UINT64 NumberOfTables; 205*f334afcfSToomas Soome EFI_CONFIGURATION_TABLE TableEntry[1]; 206*f334afcfSToomas Soome } UEFI_HANDOFF_TABLE_POINTERS; 207*f334afcfSToomas Soome 208*f334afcfSToomas Soome /// 209*f334afcfSToomas Soome /// UEFI_HANDOFF_TABLE_POINTERS2 210*f334afcfSToomas Soome /// 211*f334afcfSToomas Soome /// This structure is used in EV_EFI_HANDOFF_TABLES2 event to facilitate 212*f334afcfSToomas Soome /// the measurement of given configuration tables. 213*f334afcfSToomas Soome /// 214*f334afcfSToomas Soome typedef struct tdUEFI_HANDOFF_TABLE_POINTERS2 { 215*f334afcfSToomas Soome UINT8 TableDescriptionSize; 216*f334afcfSToomas Soome // UINT8 TableDescription[TableDescriptionSize]; 217*f334afcfSToomas Soome // UINT64 NumberOfTables; 218*f334afcfSToomas Soome // EFI_CONFIGURATION_TABLE TableEntry[1]; 219*f334afcfSToomas Soome } UEFI_HANDOFF_TABLE_POINTERS2; 220*f334afcfSToomas Soome 221*f334afcfSToomas Soome /// 222*f334afcfSToomas Soome /// EFI_VARIABLE_DATA 223*f334afcfSToomas Soome /// 224*f334afcfSToomas Soome /// This structure serves as the header for measuring variables. The name of the 225*f334afcfSToomas Soome /// variable (in Unicode format) should immediately follow, then the variable 226*f334afcfSToomas Soome /// data. 227*f334afcfSToomas Soome /// This is defined in TCG EFI Platform Spec for TPM1.1 or 1.2 V1.22 228*f334afcfSToomas Soome /// 229*f334afcfSToomas Soome typedef struct tdEFI_VARIABLE_DATA { 230*f334afcfSToomas Soome EFI_GUID VariableName; 231*f334afcfSToomas Soome UINTN UnicodeNameLength; 232*f334afcfSToomas Soome UINTN VariableDataLength; 233*f334afcfSToomas Soome CHAR16 UnicodeName[1]; 234*f334afcfSToomas Soome INT8 VariableData[1]; ///< Driver or platform-specific data 235*f334afcfSToomas Soome } EFI_VARIABLE_DATA; 236*f334afcfSToomas Soome 237*f334afcfSToomas Soome /// 238*f334afcfSToomas Soome /// UEFI_VARIABLE_DATA 239*f334afcfSToomas Soome /// 240*f334afcfSToomas Soome /// This structure serves as the header for measuring variables. The name of the 241*f334afcfSToomas Soome /// variable (in Unicode format) should immediately follow, then the variable 242*f334afcfSToomas Soome /// data. 243*f334afcfSToomas Soome /// This is defined in TCG PC Client Firmware Profile Spec 00.21 244*f334afcfSToomas Soome /// 245*f334afcfSToomas Soome typedef struct tdUEFI_VARIABLE_DATA { 246*f334afcfSToomas Soome EFI_GUID VariableName; 247*f334afcfSToomas Soome UINT64 UnicodeNameLength; 248*f334afcfSToomas Soome UINT64 VariableDataLength; 249*f334afcfSToomas Soome CHAR16 UnicodeName[1]; 250*f334afcfSToomas Soome INT8 VariableData[1]; ///< Driver or platform-specific data 251*f334afcfSToomas Soome } UEFI_VARIABLE_DATA; 252*f334afcfSToomas Soome 253*f334afcfSToomas Soome // 254*f334afcfSToomas Soome // For TrEE1.0 compatibility 255*f334afcfSToomas Soome // 256*f334afcfSToomas Soome typedef struct { 257*f334afcfSToomas Soome EFI_GUID VariableName; 258*f334afcfSToomas Soome UINT64 UnicodeNameLength; // The TCG Definition used UINTN 259*f334afcfSToomas Soome UINT64 VariableDataLength; // The TCG Definition used UINTN 260*f334afcfSToomas Soome CHAR16 UnicodeName[1]; 261*f334afcfSToomas Soome INT8 VariableData[1]; 262*f334afcfSToomas Soome } EFI_VARIABLE_DATA_TREE; 263*f334afcfSToomas Soome 264*f334afcfSToomas Soome typedef struct tdEFI_GPT_DATA { 265*f334afcfSToomas Soome EFI_PARTITION_TABLE_HEADER EfiPartitionHeader; 266*f334afcfSToomas Soome UINTN NumberOfPartitions; 267*f334afcfSToomas Soome EFI_PARTITION_ENTRY Partitions[1]; 268*f334afcfSToomas Soome } EFI_GPT_DATA; 269*f334afcfSToomas Soome 270*f334afcfSToomas Soome typedef struct tdUEFI_GPT_DATA { 271*f334afcfSToomas Soome EFI_PARTITION_TABLE_HEADER EfiPartitionHeader; 272*f334afcfSToomas Soome UINT64 NumberOfPartitions; 273*f334afcfSToomas Soome EFI_PARTITION_ENTRY Partitions[1]; 274*f334afcfSToomas Soome } UEFI_GPT_DATA; 275*f334afcfSToomas Soome 276*f334afcfSToomas Soome #define TCG_DEVICE_SECURITY_EVENT_DATA_SIGNATURE "SPDM Device Sec" 277*f334afcfSToomas Soome #define TCG_DEVICE_SECURITY_EVENT_DATA_VERSION 1 278*f334afcfSToomas Soome 279*f334afcfSToomas Soome #define TCG_DEVICE_SECURITY_EVENT_DATA_DEVICE_TYPE_NULL 0 280*f334afcfSToomas Soome #define TCG_DEVICE_SECURITY_EVENT_DATA_DEVICE_TYPE_PCI 1 281*f334afcfSToomas Soome #define TCG_DEVICE_SECURITY_EVENT_DATA_DEVICE_TYPE_USB 2 282*f334afcfSToomas Soome 283*f334afcfSToomas Soome /// 284*f334afcfSToomas Soome /// TCG_DEVICE_SECURITY_EVENT_DATA_HEADER 285*f334afcfSToomas Soome /// This is the header of TCG_DEVICE_SECURITY_EVENT_DATA, which is 286*f334afcfSToomas Soome /// used in EV_EFI_SPDM_FIRMWARE_BLOB and EV_EFI_SPDM_FIRMWARE_CONFIG. 287*f334afcfSToomas Soome /// 288*f334afcfSToomas Soome typedef struct { 289*f334afcfSToomas Soome UINT8 Signature[16]; 290*f334afcfSToomas Soome UINT16 Version; 291*f334afcfSToomas Soome UINT16 Length; 292*f334afcfSToomas Soome UINT32 SpdmHashAlgo; 293*f334afcfSToomas Soome UINT32 DeviceType; 294*f334afcfSToomas Soome // SPDM_MEASUREMENT_BLOCK SpdmMeasurementBlock; 295*f334afcfSToomas Soome } TCG_DEVICE_SECURITY_EVENT_DATA_HEADER; 296*f334afcfSToomas Soome 297*f334afcfSToomas Soome #define TCG_DEVICE_SECURITY_EVENT_DATA_PCI_CONTEXT_VERSION 0 298*f334afcfSToomas Soome 299*f334afcfSToomas Soome /// 300*f334afcfSToomas Soome /// TCG_DEVICE_SECURITY_EVENT_DATA_PCI_CONTEXT 301*f334afcfSToomas Soome /// This is the PCI context data of TCG_DEVICE_SECURITY_EVENT_DATA, which is 302*f334afcfSToomas Soome /// used in EV_EFI_SPDM_FIRMWARE_BLOB and EV_EFI_SPDM_FIRMWARE_CONFIG. 303*f334afcfSToomas Soome /// 304*f334afcfSToomas Soome typedef struct { 305*f334afcfSToomas Soome UINT16 Version; 306*f334afcfSToomas Soome UINT16 Length; 307*f334afcfSToomas Soome UINT16 VendorId; 308*f334afcfSToomas Soome UINT16 DeviceId; 309*f334afcfSToomas Soome UINT8 RevisionID; 310*f334afcfSToomas Soome UINT8 ClassCode[3]; 311*f334afcfSToomas Soome UINT16 SubsystemVendorID; 312*f334afcfSToomas Soome UINT16 SubsystemID; 313*f334afcfSToomas Soome } TCG_DEVICE_SECURITY_EVENT_DATA_PCI_CONTEXT; 314*f334afcfSToomas Soome 315*f334afcfSToomas Soome #define TCG_DEVICE_SECURITY_EVENT_DATA_USB_CONTEXT_VERSION 0 316*f334afcfSToomas Soome 317*f334afcfSToomas Soome /// 318*f334afcfSToomas Soome /// TCG_DEVICE_SECURITY_EVENT_DATA_USB_CONTEXT 319*f334afcfSToomas Soome /// This is the USB context data of TCG_DEVICE_SECURITY_EVENT_DATA, which is 320*f334afcfSToomas Soome /// used in EV_EFI_SPDM_FIRMWARE_BLOB and EV_EFI_SPDM_FIRMWARE_CONFIG. 321*f334afcfSToomas Soome /// 322*f334afcfSToomas Soome typedef struct { 323*f334afcfSToomas Soome UINT16 Version; 324*f334afcfSToomas Soome UINT16 Length; 325*f334afcfSToomas Soome // UINT8 DeviceDescriptor[DescLen]; 326*f334afcfSToomas Soome // UINT8 BodDescriptor[DescLen]; 327*f334afcfSToomas Soome // UINT8 ConfigurationDescriptor[DescLen][NumOfConfiguration]; 328*f334afcfSToomas Soome } TCG_DEVICE_SECURITY_EVENT_DATA_USB_CONTEXT; 329*f334afcfSToomas Soome 330*f334afcfSToomas Soome // 331*f334afcfSToomas Soome // Crypto Agile Log Entry Format 332*f334afcfSToomas Soome // 333*f334afcfSToomas Soome typedef struct tdTCG_PCR_EVENT2 { 334*f334afcfSToomas Soome TCG_PCRINDEX PCRIndex; 335*f334afcfSToomas Soome TCG_EVENTTYPE EventType; 336*f334afcfSToomas Soome TPML_DIGEST_VALUES Digest; 337*f334afcfSToomas Soome UINT32 EventSize; 338*f334afcfSToomas Soome UINT8 Event[1]; 339*f334afcfSToomas Soome } TCG_PCR_EVENT2; 340*f334afcfSToomas Soome 341*f334afcfSToomas Soome // 342*f334afcfSToomas Soome // TCG PCR Event2 Header 343*f334afcfSToomas Soome // Follow TCG EFI Protocol Spec 5.2 Crypto Agile Log Entry Format 344*f334afcfSToomas Soome // 345*f334afcfSToomas Soome typedef struct tdTCG_PCR_EVENT2_HDR { 346*f334afcfSToomas Soome TCG_PCRINDEX PCRIndex; 347*f334afcfSToomas Soome TCG_EVENTTYPE EventType; 348*f334afcfSToomas Soome TPML_DIGEST_VALUES Digests; 349*f334afcfSToomas Soome UINT32 EventSize; 350*f334afcfSToomas Soome } TCG_PCR_EVENT2_HDR; 351*f334afcfSToomas Soome 352*f334afcfSToomas Soome // 353*f334afcfSToomas Soome // Log Header Entry Data 354*f334afcfSToomas Soome // 355*f334afcfSToomas Soome typedef struct { 356*f334afcfSToomas Soome // 357*f334afcfSToomas Soome // TCG defined hashing algorithm ID. 358*f334afcfSToomas Soome // 359*f334afcfSToomas Soome UINT16 algorithmId; 360*f334afcfSToomas Soome // 361*f334afcfSToomas Soome // The size of the digest for the respective hashing algorithm. 362*f334afcfSToomas Soome // 363*f334afcfSToomas Soome UINT16 digestSize; 364*f334afcfSToomas Soome } TCG_EfiSpecIdEventAlgorithmSize; 365*f334afcfSToomas Soome 366*f334afcfSToomas Soome #define TCG_EfiSpecIDEventStruct_SIGNATURE_02 "Spec ID Event02" 367*f334afcfSToomas Soome #define TCG_EfiSpecIDEventStruct_SIGNATURE_03 "Spec ID Event03" 368*f334afcfSToomas Soome 369*f334afcfSToomas Soome #define TCG_EfiSpecIDEventStruct_SPEC_VERSION_MAJOR_TPM12 1 370*f334afcfSToomas Soome #define TCG_EfiSpecIDEventStruct_SPEC_VERSION_MINOR_TPM12 2 371*f334afcfSToomas Soome #define TCG_EfiSpecIDEventStruct_SPEC_ERRATA_TPM12 2 372*f334afcfSToomas Soome 373*f334afcfSToomas Soome #define TCG_EfiSpecIDEventStruct_SPEC_VERSION_MAJOR_TPM2 2 374*f334afcfSToomas Soome #define TCG_EfiSpecIDEventStruct_SPEC_VERSION_MINOR_TPM2 0 375*f334afcfSToomas Soome #define TCG_EfiSpecIDEventStruct_SPEC_ERRATA_TPM2 0 376*f334afcfSToomas Soome #define TCG_EfiSpecIDEventStruct_SPEC_ERRATA_TPM2_REV_105 105 377*f334afcfSToomas Soome 378*f334afcfSToomas Soome typedef struct { 379*f334afcfSToomas Soome UINT8 signature[16]; 380*f334afcfSToomas Soome // 381*f334afcfSToomas Soome // The value for the Platform Class. 382*f334afcfSToomas Soome // The enumeration is defined in the TCG ACPI Specification Client Common Header. 383*f334afcfSToomas Soome // 384*f334afcfSToomas Soome UINT32 platformClass; 385*f334afcfSToomas Soome // 386*f334afcfSToomas Soome // The TCG EFI Platform Specification minor version number this BIOS supports. 387*f334afcfSToomas Soome // Any BIOS supporting version (1.22) MUST set this value to 02h. 388*f334afcfSToomas Soome // Any BIOS supporting version (2.0) SHALL set this value to 0x00. 389*f334afcfSToomas Soome // 390*f334afcfSToomas Soome UINT8 specVersionMinor; 391*f334afcfSToomas Soome // 392*f334afcfSToomas Soome // The TCG EFI Platform Specification major version number this BIOS supports. 393*f334afcfSToomas Soome // Any BIOS supporting version (1.22) MUST set this value to 01h. 394*f334afcfSToomas Soome // Any BIOS supporting version (2.0) SHALL set this value to 0x02. 395*f334afcfSToomas Soome // 396*f334afcfSToomas Soome UINT8 specVersionMajor; 397*f334afcfSToomas Soome // 398*f334afcfSToomas Soome // The TCG EFI Platform Specification errata for this specification this BIOS supports. 399*f334afcfSToomas Soome // Any BIOS supporting version and errata (1.22) MUST set this value to 02h. 400*f334afcfSToomas Soome // Any BIOS supporting version and errata (2.0) SHALL set this value to 0x00. 401*f334afcfSToomas Soome // 402*f334afcfSToomas Soome UINT8 specErrata; 403*f334afcfSToomas Soome // 404*f334afcfSToomas Soome // Specifies the size of the UINTN fields used in various data structures used in this specification. 405*f334afcfSToomas Soome // 0x01 indicates UINT32 and 0x02 indicates UINT64. 406*f334afcfSToomas Soome // 407*f334afcfSToomas Soome UINT8 uintnSize; 408*f334afcfSToomas Soome // 409*f334afcfSToomas Soome // This field is added in "Spec ID Event03". 410*f334afcfSToomas Soome // The number of hashing algorithms used in this event log (except the first event). 411*f334afcfSToomas Soome // All events in this event log use all hashing algorithms defined here. 412*f334afcfSToomas Soome // 413*f334afcfSToomas Soome // UINT32 numberOfAlgorithms; 414*f334afcfSToomas Soome // 415*f334afcfSToomas Soome // This field is added in "Spec ID Event03". 416*f334afcfSToomas Soome // An array of size numberOfAlgorithms of value pairs. 417*f334afcfSToomas Soome // 418*f334afcfSToomas Soome // TCG_EfiSpecIdEventAlgorithmSize digestSize[numberOfAlgorithms]; 419*f334afcfSToomas Soome // 420*f334afcfSToomas Soome // Size in bytes of the VendorInfo field. 421*f334afcfSToomas Soome // Maximum value SHALL be FFh bytes. 422*f334afcfSToomas Soome // 423*f334afcfSToomas Soome // UINT8 vendorInfoSize; 424*f334afcfSToomas Soome // 425*f334afcfSToomas Soome // Provided for use by the BIOS implementer. 426*f334afcfSToomas Soome // The value might be used, for example, to provide more detailed information about the specific BIOS such as BIOS revision numbers, etc. 427*f334afcfSToomas Soome // The values within this field are not standardized and are implementer-specific. 428*f334afcfSToomas Soome // Platform-specific or -unique information SHALL NOT be provided in this field. 429*f334afcfSToomas Soome // 430*f334afcfSToomas Soome // UINT8 vendorInfo[vendorInfoSize]; 431*f334afcfSToomas Soome } TCG_EfiSpecIDEventStruct; 432*f334afcfSToomas Soome 433*f334afcfSToomas Soome typedef struct tdTCG_PCClientTaggedEvent { 434*f334afcfSToomas Soome UINT32 taggedEventID; 435*f334afcfSToomas Soome UINT32 taggedEventDataSize; 436*f334afcfSToomas Soome // UINT8 taggedEventData[taggedEventDataSize]; 437*f334afcfSToomas Soome } TCG_PCClientTaggedEvent; 438*f334afcfSToomas Soome 439*f334afcfSToomas Soome #define TCG_Sp800_155_PlatformId_Event_SIGNATURE "SP800-155 Event" 440*f334afcfSToomas Soome #define TCG_Sp800_155_PlatformId_Event2_SIGNATURE "SP800-155 Event2" 441*f334afcfSToomas Soome 442*f334afcfSToomas Soome typedef struct tdTCG_Sp800_155_PlatformId_Event2 { 443*f334afcfSToomas Soome UINT8 Signature[16]; 444*f334afcfSToomas Soome // 445*f334afcfSToomas Soome // Where Vendor ID is an integer defined 446*f334afcfSToomas Soome // at http://www.iana.org/assignments/enterprisenumbers 447*f334afcfSToomas Soome // 448*f334afcfSToomas Soome UINT32 VendorId; 449*f334afcfSToomas Soome // 450*f334afcfSToomas Soome // 16-byte identifier of a given platform's static configuration of code 451*f334afcfSToomas Soome // 452*f334afcfSToomas Soome EFI_GUID ReferenceManifestGuid; 453*f334afcfSToomas Soome // 454*f334afcfSToomas Soome // Below structure is newly added in TCG_Sp800_155_PlatformId_Event2. 455*f334afcfSToomas Soome // 456*f334afcfSToomas Soome // UINT8 PlatformManufacturerStrSize; 457*f334afcfSToomas Soome // UINT8 PlatformManufacturerStr[PlatformManufacturerStrSize]; 458*f334afcfSToomas Soome // UINT8 PlatformModelSize; 459*f334afcfSToomas Soome // UINT8 PlatformModel[PlatformModelSize]; 460*f334afcfSToomas Soome // UINT8 PlatformVersionSize; 461*f334afcfSToomas Soome // UINT8 PlatformVersion[PlatformVersionSize]; 462*f334afcfSToomas Soome // UINT8 PlatformModelSize; 463*f334afcfSToomas Soome // UINT8 PlatformModel[PlatformModelSize]; 464*f334afcfSToomas Soome // UINT8 FirmwareManufacturerStrSize; 465*f334afcfSToomas Soome // UINT8 FirmwareManufacturerStr[FirmwareManufacturerStrSize]; 466*f334afcfSToomas Soome // UINT32 FirmwareManufacturerId; 467*f334afcfSToomas Soome // UINT8 FirmwareVersion; 468*f334afcfSToomas Soome // UINT8 FirmwareVersion[FirmwareVersionSize]]; 469*f334afcfSToomas Soome } TCG_Sp800_155_PlatformId_Event2; 470*f334afcfSToomas Soome 471*f334afcfSToomas Soome #define TCG_EfiStartupLocalityEvent_SIGNATURE "StartupLocality" 472*f334afcfSToomas Soome 473*f334afcfSToomas Soome // 474*f334afcfSToomas Soome // The Locality Indicator which sent the TPM2_Startup command 475*f334afcfSToomas Soome // 476*f334afcfSToomas Soome #define LOCALITY_0_INDICATOR 0x00 477*f334afcfSToomas Soome #define LOCALITY_3_INDICATOR 0x03 478*f334afcfSToomas Soome 479*f334afcfSToomas Soome // 480*f334afcfSToomas Soome // Startup Locality Event 481*f334afcfSToomas Soome // 482*f334afcfSToomas Soome typedef struct tdTCG_EfiStartupLocalityEvent { 483*f334afcfSToomas Soome UINT8 Signature[16]; 484*f334afcfSToomas Soome // 485*f334afcfSToomas Soome // The Locality Indicator which sent the TPM2_Startup command 486*f334afcfSToomas Soome // 487*f334afcfSToomas Soome UINT8 StartupLocality; 488*f334afcfSToomas Soome } TCG_EfiStartupLocalityEvent; 489*f334afcfSToomas Soome 490*f334afcfSToomas Soome // 491*f334afcfSToomas Soome // Restore original structure alignment 492*f334afcfSToomas Soome // 493*f334afcfSToomas Soome #pragma pack () 494*f334afcfSToomas Soome 495*f334afcfSToomas Soome #endif 496