xref: /illumos-gate/usr/src/boot/efi/include/IndustryStandard/UefiTcgPlatform.h (revision f334afcfaebea1b7dc3430015651d8d748fa8a3e)
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