1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
|
//*************************************************************************
//*************************************************************************
//** **
//** (C)Copyright 1985-2009, American Megatrends, Inc. **
//** **
//** All Rights Reserved. **
//** **
//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
//** **
//** Phone: (770)-246-8600 **
//** **
//*************************************************************************
//*************************************************************************
//**********************************************************************
// $Header: /Alaska/SOURCE/Modules/SharkBayRefCodes/Haswell/AMI Cpu PKG/AMI TXT DXE/TxtTcgService.h 1 7/18/12 2:07a Davidhsieh $
//
// $Revision: 1 $
//
// $Date: 7/18/12 2:07a $
//
//**********************************************************************
//**********************************************************************
// Revision History
// ----------------
// $Log: /Alaska/SOURCE/Modules/SharkBayRefCodes/Haswell/AMI Cpu PKG/AMI TXT DXE/TxtTcgService.h $
//
// 1 7/18/12 2:07a Davidhsieh
// [TAG] None
// [Category] Improvement
// [Description] AMI TXT Dxe module part create
//
// 1 2/25/11 3:55a Hpbirdchen
// Initial 0.5 RC Check-in
//
// 1 12/01/10 11:11p Calvinchen
//
// 2 10/05/25 3:07p Calvinchen
//
// 4 7/27/09 7:12a Calvinchen
// TXT module uses internal TPM startup procedure instead of TCG
// library.(EIP#20424)
//
// 3 6/24/09 12:10a Calvinchen
// (EIP#22177)Updated for Aptio Source Enhancement.
//
//
//**********************************************************************
//
// Statements that include other header files.
//
typedef struct _EFI_TCG_PROTOCOL EFI_TCG_PROTOCOL;
typedef struct _EFI_TPM_DEVICE_PROTOCOL EFI_TPM_DEVICE_PROTOCOL;
typedef UINT16 TPM_STRUCTURE_TAG;
typedef UINT16 TPM_TAG;
typedef UINT32 TPM_COMMAND_CODE;
typedef UINT32 TPM_RESULT;
typedef UINT16 TPM_STARTUP_TYPE;
// The TPM is starting up from a clean state
#define TPM_ST_CLEAR ((TPM_STARTUP_TYPE) 0x0001)
#define ST_CLEAR 0
// The TPM is starting up from a saved state
#define TPM_ST_STATE ((TPM_STARTUP_TYPE) 0x0002)
#define ST_STATE 1
#define TPM_ORD_Startup ((TPM_COMMAND_CODE) 0x00000099)
#define TPM_ORD_ContinueSelfTest ((TPM_COMMAND_CODE) 0x00000053)
#define TPM_ORD_NV_READVALUE ((TPM_COMMAND_CODE) 0x000000CF) // 207
#define TPM_ORD_NV_WRITEVALUE ((TPM_COMMAND_CODE) 0x000000CD) // 205
#define TPM_ORD_NV_DEFINESPACE ((TPM_COMMAND_CODE) 0x000000CC) // 204
#define TPM_ORD_VERIFY 0x020000001
#define TPM_NV_INDEX_LOCK 0x0FFFFFFFF
#define TPM_TAG_RQU_COMMAND ((TPM_STRUCTURE_TAG) 0x00C1)
#define TPM_TAG_RQU_AUTH1_COMMAND ((TPM_STRUCTURE_TAG) 0x00C2)
#define EFI_TCG_PROTOCOL_GUID \
{0xf541796d, 0xa62e, 0x4954, 0xa7, 0x75, 0x95, 0x84, 0xf6, 0x1b, 0x9c, 0xdd}
#define EFI_TPM_DEVICE_PROTOCOL_GUID \
{ 0xde161cfe, 0x1e60, 0x42a1, 0x8c, 0xc3, 0xee, 0x7e, 0xf0, 0x73, 0x52, 0x12 }
#define TPM_H2NS(x) \
(((UINT16)(x) << 8) | ((UINT16)(x) >> 8))
#define TPM_H2NL(x) \
(UINT32)((((UINT32)(x)) >> 24) | \
(((x) >> 8) & 0xff00) | \
((x) << 24) | \
(((x) & 0xff00) << 8))
//----------------------------------------------------------------------------
// NVram definition
//----------------------------------------------------------------------------
#pragma pack (push)
#pragma pack (1)
typedef struct _TCPA_DIGEST {
UINT8 digest[20];
} TCPA_DIGEST;
typedef struct _TPM_PCR_SELECTION {
UINT16 sizeOfSelect;
UINT8 pcrSelect[3];
} TPM_PCR_SELECTION;
typedef struct _TPM_PCR_INFO_SHORT {
//- TPM_PCR_SELECTION pcrSelection;
UINT16 sizeOfSelect;
UINT8 pcrSelect[3];
UINT8 localityAtRelease;
TCPA_DIGEST digestAtRelease;
} TPM_PCR_INFO_SHORT;
typedef struct _TPM_NV_ATTRIBUTES {
UINT16 tag;
UINT32 attributes;
} TPM_NV_ATTRIBUTES;
typedef struct _TPM_NV_DATA_PUBLIC1 {
UINT16 Tag_;
UINT32 NvIndex;
TPM_PCR_INFO_SHORT PcrInfoRead;
} TPM_NV_DATA_PUBLIC1;
typedef struct _TPM_NV_DATA_PUBLIC2 {
TPM_PCR_INFO_SHORT PcrInfoWrite;
TPM_NV_ATTRIBUTES PerMission;
UINT8 bReadSTClear;
UINT8 bWriteSTClear;
UINT8 bWriteDefine;
UINT32 DataSize;
} TPM_NV_DATA_PUBLIC2;
typedef struct _TPM_DEF_NV_DATA {
TPM_NV_DATA_PUBLIC1 TpmDefineSpaceIn_pubinfo1;
TPM_NV_DATA_PUBLIC2 TpmDefineSpaceIn_pubinfo2;
TCPA_DIGEST TpmDefineSpaceIn_encAuth;
} TPM_DEF_NV_DATA;
//----------------------------------------------------------------------------
// TCG definition
//----------------------------------------------------------------------------
typedef struct _TPM_1_2_CMD_HEADER {
TPM_TAG Tag;
UINT32 ParamSize;
TPM_COMMAND_CODE Ordinal;
} TPM_1_2_CMD_HEADER;
typedef struct _TPM_1_2_RET_HEADER {
TPM_TAG Tag;
UINT32 ParamSize;
TPM_RESULT RetCode;
} TPM_1_2_RET_HEADER;
typedef struct _TPM_1_2_CMD_STARTUP {
TPM_1_2_CMD_HEADER Header;
TPM_STARTUP_TYPE StartupType;
} TPM_1_2_CMD_STARTUP;
typedef struct _TPM_1_2_REGISTERS {
UINT8 Access; // 0
UINT8 Reserved1[7]; // 1
UINT32 IntEnable; // 8
UINT8 IntVector; // 0ch
UINT8 Reserved2[3]; // 0dh
UINT32 IntSts; // 10h
UINT32 IntfCapability; // 14h
UINT8 Sts; // 18h
UINT16 BurstCount; // 19h
UINT8 Reserved3[9];
UINT32 DataFifo; // 24h
UINT8 Reserved4[0xed8]; // 28h
UINT16 Vid; // 0f00h
UINT16 Did; // 0f02h
UINT8 Rid; // 0f04h
UINT8 TcgDefined[0x7b]; // 0f05h
UINT32 LegacyAddress1; // 0f80h
UINT32 LegacyAddress1Ex; // 0f84h
UINT32 LegacyAddress2; // 0f88h
UINT32 LegacyAddress2Ex; // 0f8ch
UINT8 VendorDefined[0x70];// 0f90h
} TPM_1_2_REGISTERS;
#pragma pack (pop)
typedef EFI_STATUS (EFIAPI *EFI_TCG_STATUS_CHECK) (
//- IN EFI_TCG_PROTOCOL *This,
//- OUT TCG_EFI_BOOT_SERVICE_CAPABILITY
//- *ProtocolCapability,
//- OUT UINT32 *TCGFeatureFlags,
//- OUT EFI_PHYSICAL_ADDRESS *EventLogLocation,
//- OUT EFI_PHYSICAL_ADDRESS *EventLogLastEntry
);
typedef EFI_STATUS (EFIAPI *EFI_TCG_HASH_ALL) (
//- IN EFI_TCG_PROTOCOL *This,
//- IN UINT8 *HashData,
//- IN UINT64 HashDataLen,
//- IN TCG_ALGORITHM_ID AlgorithmId,
//- IN OUT UINT64 *HashedDataLen,
//- IN OUT UINT8 **HashedDataResult
);
typedef EFI_STATUS (EFIAPI *EFI_TCG_LOG_EVENT) (
//- IN EFI_TCG_PROTOCOL *This,
//- IN TCG_PCR_EVENT *TCGLogData,
//- IN OUT UINT32 *EventNumber,
//- IN UINT32 Flags
);
typedef EFI_STATUS (EFIAPI *EFI_TCG_PASS_THROUGH_TO_TPM) (
IN EFI_TCG_PROTOCOL *This,
IN UINT32 TpmInputParamterBlockSize,
IN UINT8 *TpmInputParamterBlock,
IN UINT32 TpmOutputParameterBlockSize,
IN UINT8 *TpmOutputParameterBlock
);
typedef EFI_STATUS (EFIAPI *EFI_TCG_HASH_LOG_EXTEND_EVENT) (
//- IN EFI_TCG_PROTOCOL *This,
//- IN UINT8 *HashData,
//- IN UINT64 HashDataLen,
//- IN TCG_ALGORITHM_ID AlgorithmId,
//- IN OUT TCG_PCR_EVENT *TCGLogData,
//- IN OUT UINT32 *EventNumber,
//- OUT EFI_PHYSICAL_ADDRESS *EventLogLastEntry
);
typedef struct _EFI_TCG_PROTOCOL {
EFI_TCG_STATUS_CHECK StatusCheck;
EFI_TCG_HASH_ALL HashAll;
EFI_TCG_LOG_EVENT LogEvent;
EFI_TCG_PASS_THROUGH_TO_TPM PassThroughToTpm;
EFI_TCG_HASH_LOG_EXTEND_EVENT HashLogExtendEvent;
} EFI_TCG_PROTOCOL;
typedef EFI_STATUS (EFIAPI *EFI_TPM_MP_INIT) (
IN EFI_TPM_DEVICE_PROTOCOL *This
);
typedef EFI_STATUS (EFIAPI *EFI_TPM_MP_CLOSE) (
IN EFI_TPM_DEVICE_PROTOCOL *This
);
typedef EFI_STATUS (EFIAPI *EFI_TPM_MP_GET_STATUS_INFO) (
IN EFI_TPM_DEVICE_PROTOCOL *This
);
typedef EFI_STATUS (EFIAPI *EFI_TPM_MP_TRANSMIT) (
//- IN EFI_TPM_DEVICE_PROTOCOL *This,
//- IN UINTN NoInBuffers,
//- IN TPM_TRANSMIT_BUFFER *InBuffers,
//- IN UINTN NoOutBuffers,
//- IN OUT TPM_TRANSMIT_BUFFER *OutBuffers
);
typedef struct _EFI_TPM_DEVICE_PROTOCOL {
EFI_TPM_MP_INIT Init;
EFI_TPM_MP_CLOSE Close;
EFI_TPM_MP_GET_STATUS_INFO GetStatusInfo;
EFI_TPM_MP_TRANSMIT Transmit;
} EFI_TPM_DEVICE_PROTOCOL;
typedef struct _TPM_TRANSMIT_BUFFER {
VOID *Buffer;
UINTN Size;
} TPM_TRANSMIT_BUFFER;
typedef volatile TPM_1_2_REGISTERS *TPM_1_2_REGISTERS_PTR;
//*************************************************************************
//*************************************************************************
//** **
//** (C)Copyright 1985-2009, American Megatrends, Inc. **
//** **
//** All Rights Reserved. **
//** **
//** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 **
//** **
//** Phone: (770)-246-8600 **
//** **
//*************************************************************************
//*************************************************************************
|