1 /** @file
2   TCG EFI Platform Definition in TCG_EFI_Platform_1_20_Final
3 
4   Copyright (c) 2006 - 2012, Intel Corporation. All rights reserved.<BR>
5   This program and the accompanying materials
6   are licensed and made available under the terms and conditions of the BSD License
7   which accompanies this distribution.  The full text of the license may be found at
8   http://opensource.org/licenses/bsd-license.php
9 
10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 
13 **/
14 
15 #ifndef __UEFI_TCG_PLATFORM_H__
16 #define __UEFI_TCG_PLATFORM_H__
17 
18 #include <IndustryStandard/Tpm12.h>
19 #include <Uefi.h>
20 
21 //
22 // Standard event types
23 //
24 #define EV_POST_CODE                ((TCG_EVENTTYPE) 0x00000001)
25 #define EV_SEPARATOR                ((TCG_EVENTTYPE) 0x00000004)
26 #define EV_S_CRTM_CONTENTS          ((TCG_EVENTTYPE) 0x00000007)
27 #define EV_S_CRTM_VERSION           ((TCG_EVENTTYPE) 0x00000008)
28 #define EV_CPU_MICROCODE            ((TCG_EVENTTYPE) 0x00000009)
29 #define EV_TABLE_OF_DEVICES         ((TCG_EVENTTYPE) 0x0000000B)
30 
31 //
32 // EFI specific event types
33 //
34 #define EV_EFI_EVENT_BASE                   ((TCG_EVENTTYPE) 0x80000000)
35 #define EV_EFI_VARIABLE_DRIVER_CONFIG       (EV_EFI_EVENT_BASE + 1)
36 #define EV_EFI_VARIABLE_BOOT                (EV_EFI_EVENT_BASE + 2)
37 #define EV_EFI_BOOT_SERVICES_APPLICATION    (EV_EFI_EVENT_BASE + 3)
38 #define EV_EFI_BOOT_SERVICES_DRIVER         (EV_EFI_EVENT_BASE + 4)
39 #define EV_EFI_RUNTIME_SERVICES_DRIVER      (EV_EFI_EVENT_BASE + 5)
40 #define EV_EFI_GPT_EVENT                    (EV_EFI_EVENT_BASE + 6)
41 #define EV_EFI_ACTION                       (EV_EFI_EVENT_BASE + 7)
42 #define EV_EFI_PLATFORM_FIRMWARE_BLOB       (EV_EFI_EVENT_BASE + 8)
43 #define EV_EFI_HANDOFF_TABLES               (EV_EFI_EVENT_BASE + 9)
44 
45 #define EFI_CALLING_EFI_APPLICATION         \
46   "Calling EFI Application from Boot Option"
47 #define EFI_RETURNING_FROM_EFI_APPLICATOIN  \
48   "Returning from EFI Application from Boot Option"
49 #define EFI_EXIT_BOOT_SERVICES_INVOCATION   \
50   "Exit Boot Services Invocation"
51 #define EFI_EXIT_BOOT_SERVICES_FAILED       \
52   "Exit Boot Services Returned with Failure"
53 #define EFI_EXIT_BOOT_SERVICES_SUCCEEDED    \
54   "Exit Boot Services Returned with Success"
55 
56 
57 #define EV_POSTCODE_INFO_POST_CODE    "POST CODE"
58 #define POST_CODE_STR_LEN             (sizeof(EV_POSTCODE_INFO_POST_CODE) - 1)
59 
60 #define EV_POSTCODE_INFO_SMM_CODE     "SMM CODE"
61 #define SMM_CODE_STR_LEN              (sizeof(EV_POSTCODE_INFO_SMM_CODE) - 1)
62 
63 #define EV_POSTCODE_INFO_ACPI_DATA    "ACPI DATA"
64 #define ACPI_DATA_LEN                 (sizeof(EV_POSTCODE_INFO_ACPI_DATA) - 1)
65 
66 #define EV_POSTCODE_INFO_BIS_CODE     "BIS CODE"
67 #define BIS_CODE_LEN                  (sizeof(EV_POSTCODE_INFO_BIS_CODE) - 1)
68 
69 #define EV_POSTCODE_INFO_UEFI_PI      "UEFI PI"
70 #define UEFI_PI_LEN                   (sizeof(EV_POSTCODE_INFO_UEFI_PI) - 1)
71 
72 #define EV_POSTCODE_INFO_OPROM        "Embedded Option ROM"
73 #define OPROM_LEN                     (sizeof(EV_POSTCODE_INFO_OPROM) - 1)
74 
75 //
76 // Set structure alignment to 1-byte
77 //
78 #pragma pack (1)
79 
80 typedef UINT32                     TCG_EVENTTYPE;
81 typedef TPM_PCRINDEX               TCG_PCRINDEX;
82 typedef TPM_DIGEST                 TCG_DIGEST;
83 ///
84 /// Event Log Entry Structure Definition
85 ///
86 typedef struct tdTCG_PCR_EVENT {
87   TCG_PCRINDEX                      PCRIndex;  ///< PCRIndex event extended to
88   TCG_EVENTTYPE                     EventType; ///< TCG EFI event type
89   TCG_DIGEST                        Digest;    ///< Value extended into PCRIndex
90   UINT32                            EventSize; ///< Size of the event data
91   UINT8                             Event[1];  ///< The event data
92 } TCG_PCR_EVENT;
93 
94 #define TSS_EVENT_DATA_MAX_SIZE   256
95 
96 ///
97 /// TCG_PCR_EVENT_HDR
98 ///
99 typedef struct tdTCG_PCR_EVENT_HDR {
100   TCG_PCRINDEX                      PCRIndex;
101   TCG_EVENTTYPE                     EventType;
102   TCG_DIGEST                        Digest;
103   UINT32                            EventSize;
104 } TCG_PCR_EVENT_HDR;
105 
106 ///
107 /// EFI_PLATFORM_FIRMWARE_BLOB
108 ///
109 /// BlobLength should be of type UINTN but we use UINT64 here
110 /// because PEI is 32-bit while DXE is 64-bit on x64 platforms
111 ///
112 typedef struct tdEFI_PLATFORM_FIRMWARE_BLOB {
113   EFI_PHYSICAL_ADDRESS              BlobBase;
114   UINT64                            BlobLength;
115 } EFI_PLATFORM_FIRMWARE_BLOB;
116 
117 ///
118 /// EFI_IMAGE_LOAD_EVENT
119 ///
120 /// This structure is used in EV_EFI_BOOT_SERVICES_APPLICATION,
121 /// EV_EFI_BOOT_SERVICES_DRIVER and EV_EFI_RUNTIME_SERVICES_DRIVER
122 ///
123 typedef struct tdEFI_IMAGE_LOAD_EVENT {
124   EFI_PHYSICAL_ADDRESS              ImageLocationInMemory;
125   UINTN                             ImageLengthInMemory;
126   UINTN                             ImageLinkTimeAddress;
127   UINTN                             LengthOfDevicePath;
128   EFI_DEVICE_PATH_PROTOCOL          DevicePath[1];
129 } EFI_IMAGE_LOAD_EVENT;
130 
131 ///
132 /// EFI_HANDOFF_TABLE_POINTERS
133 ///
134 /// This structure is used in EV_EFI_HANDOFF_TABLES event to facilitate
135 /// the measurement of given configuration tables.
136 ///
137 typedef struct tdEFI_HANDOFF_TABLE_POINTERS {
138   UINTN                             NumberOfTables;
139   EFI_CONFIGURATION_TABLE           TableEntry[1];
140 } EFI_HANDOFF_TABLE_POINTERS;
141 
142 ///
143 /// EFI_VARIABLE_DATA
144 ///
145 /// This structure serves as the header for measuring variables. The name of the
146 /// variable (in Unicode format) should immediately follow, then the variable
147 /// data.
148 ///
149 typedef struct tdEFI_VARIABLE_DATA {
150   EFI_GUID                          VariableName;
151   UINTN                             UnicodeNameLength;
152   UINTN                             VariableDataLength;
153   CHAR16                            UnicodeName[1];
154   INT8                              VariableData[1];  ///< Driver or platform-specific data
155 } EFI_VARIABLE_DATA;
156 
157 typedef struct tdEFI_GPT_DATA {
158   EFI_PARTITION_TABLE_HEADER  EfiPartitionHeader;
159   UINTN                       NumberOfPartitions;
160   EFI_PARTITION_ENTRY         Partitions[1];
161 } EFI_GPT_DATA;
162 
163 //
164 // Restore original structure alignment
165 //
166 #pragma pack ()
167 
168 #endif
169 
170 
171