1 /*++ 2 3 Copyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR> 4 This program and the accompanying materials 5 are licensed and made available under the terms and conditions of the BSD License 6 which accompanies this distribution. The full text of the license may be found at 7 http://opensource.org/licenses/bsd-license.php 8 9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 12 Module Name: 13 14 EfiTpm.h 15 16 Abstract: 17 18 EFI definition according to TCG_EFI_Platform_1_20_Final 19 20 See http://trustedcomputinggroup.org for latest specification updates 21 22 --*/ 23 24 #ifndef _EFI_TPM_H_ 25 #define _EFI_TPM_H_ 26 27 #include "Tiano.h" 28 29 // 30 // The start of TPM return codes 31 // 32 #define TPM_BASE (EFI_MAX_BIT + (EFI_MAX_BIT >> 1)) 33 #include "Tpm12.h" 34 35 // 36 // Standard event types 37 // 38 #define EV_POST_CODE ((TCG_EVENTTYPE) 0x00000001) 39 #define EV_SEPARATOR ((TCG_EVENTTYPE) 0x00000004) 40 #define EV_S_CRTM_CONTENTS ((TCG_EVENTTYPE) 0x00000007) 41 #define EV_S_CRTM_VERSION ((TCG_EVENTTYPE) 0x00000008) 42 43 // 44 // EFI specific event types 45 // 46 #define EV_EFI_EVENT_BASE ((TCG_EVENTTYPE) 0x80000000) 47 #define EV_EFI_VARIABLE_DRIVER_CONFIG (EV_EFI_EVENT_BASE + 1) 48 #define EV_EFI_VARIABLE_BOOT (EV_EFI_EVENT_BASE + 2) 49 #define EV_EFI_BOOT_SERVICES_APPLICATION (EV_EFI_EVENT_BASE + 3) 50 #define EV_EFI_BOOT_SERVICES_DRIVER (EV_EFI_EVENT_BASE + 4) 51 #define EV_EFI_RUNTIME_SERVICES_DRIVER (EV_EFI_EVENT_BASE + 5) 52 #define EV_EFI_GPT_EVENT (EV_EFI_EVENT_BASE + 6) 53 #define EV_EFI_ACTION (EV_EFI_EVENT_BASE + 7) 54 #define EV_EFI_PLATFORM_FIRMWARE_BLOB (EV_EFI_EVENT_BASE + 8) 55 #define EV_EFI_HANDOFF_TABLES (EV_EFI_EVENT_BASE + 9) 56 57 // 58 // Set structure alignment to 1-byte 59 // 60 #pragma pack (1) 61 62 typedef UINT32 TCG_EVENTTYPE; 63 64 #define TCG_DIGEST TPM_DIGEST 65 #define TCG_PCRINDEX TPM_PCRINDEX 66 67 // 68 // TCG_PCR_EVENT 69 // 70 typedef struct tdTCG_PCR_EVENT { 71 TCG_PCRINDEX PCRIndex; // PCRIndex event extended to 72 TCG_EVENTTYPE EventType; // TCG EFI event type 73 TCG_DIGEST Digest; // Value extended into PCRIndex 74 UINT32 EventSize; // Size of the event data 75 UINT8 Event[1]; // The event data 76 } TCG_PCR_EVENT; 77 78 // 79 // TCG_PCR_EVENT_HDR 80 // 81 typedef struct tdTCG_PCR_EVENT_HDR { 82 TCG_PCRINDEX PCRIndex; 83 TCG_EVENTTYPE EventType; 84 TCG_DIGEST Digest; 85 UINT32 EventSize; 86 } TCG_PCR_EVENT_HDR; 87 88 // 89 // EFI_PLATFORM_FIRMWARE_BLOB 90 // 91 // BlobLength should be of type UINTN but we use UINT64 here 92 // because PEI is 32-bit while DXE is 64-bit on x64 platforms 93 // 94 typedef struct tdEFI_PLATFORM_FIRMWARE_BLOB { 95 EFI_PHYSICAL_ADDRESS BlobBase; 96 UINT64 BlobLength; 97 } EFI_PLATFORM_FIRMWARE_BLOB; 98 99 // 100 // EFI_IMAGE_LOAD_EVENT 101 // 102 // This structure is used in EV_EFI_BOOT_SERVICES_APPLICATION, 103 // EV_EFI_BOOT_SERVICES_DRIVER and EV_EFI_RUNTIME_SERVICES_DRIVER 104 // 105 typedef struct tdEFI_IMAGE_LOAD_EVENT { 106 EFI_PHYSICAL_ADDRESS ImageLocationInMemory; 107 UINTN ImageLengthInMemory; 108 UINTN ImageLinkTimeAddress; 109 UINTN LengthOfDevicePath; 110 EFI_DEVICE_PATH_PROTOCOL DevicePath[1]; 111 } EFI_IMAGE_LOAD_EVENT; 112 113 // 114 // EFI_HANDOFF_TABLE_POINTERS 115 // 116 // This structure is used in EV_EFI_HANDOFF_TABLES event to facilitate 117 // the measurement of given configuration tables. 118 // 119 typedef struct tdEFI_HANDOFF_TABLE_POINTERS { 120 UINTN NumberOfTables; 121 EFI_CONFIGURATION_TABLE TableEntry[1]; 122 } EFI_HANDOFF_TABLE_POINTERS; 123 124 // 125 // EFI_VARIABLE_DATA 126 // 127 // This structure serves as the header for measuring variables. The name of the 128 // variable (in Unicode format) should immediately follow, then the variable 129 // data. 130 // 131 typedef struct tdEFI_VARIABLE_DATA { 132 EFI_GUID VariableName; 133 UINTN UnicodeNameLength; 134 UINTN VariableDataLength; 135 CHAR16 UnicodeName[1]; 136 INT8 VariableData[1]; // Driver or platform-specific data 137 } EFI_VARIABLE_DATA; 138 139 // 140 // Restore original structure alignment 141 // 142 #pragma pack () 143 144 #endif // _EFI_TPM_H_ 145