summaryrefslogtreecommitdiff
path: root/Board/CPU/TxtDxe/TxtTcgService.h
blob: 8d6ad530a0a1fa52ce2a6505abcbedb274aa0a16 (plain)
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                         **
//**                                                                     **
//*************************************************************************
//*************************************************************************