summaryrefslogtreecommitdiff
path: root/Core/EM/TCG2/TpmClearOnRollback/TpmClearOnRollbackWrapperLib.h
blob: 5c32d15c7249d9c4dcd72f5f3a2b4adf8a1fc69f (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
//*************************************************************************
//*************************************************************************
//**                                                                     **
//**        (C)Copyright 1985-2011, American Megatrends, Inc.            **
//**                                                                     **
//**                       All Rights Reserved.                          **
//**                                                                     **
//**      5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093           **
//**                                                                     **
//**                       Phone: (770)-246-8600                         **
//**                                                                     **
//*************************************************************************
//*************************************************************************
//**********************************************************************
// $Header: /Alaska/SOURCE/Modules/TCG2/Common/TpmClearOnRollback/TpmClearOnRollbackWrapperLib.h 1     4/21/14 2:18p Fredericko $
//
// $Revision: 1 $
//
// $Date: 4/21/14 2:18p $
//**********************************************************************
// Revision History
// ----------------
// $Log: /Alaska/SOURCE/Modules/TCG2/Common/TpmClearOnRollback/TpmClearOnRollbackWrapperLib.h $
// 
// 1     4/21/14 2:18p Fredericko
// 
// 1     10/08/13 12:06p Fredericko
// Initial Check-In for Tpm-Next module
// 
// 1     7/10/13 5:57p Fredericko
// [TAG]  		EIP120969
// [Category]  	New Feature
// [Description]  	TCG (TPM20)
// 
//
//**********************************************************************
//<AMI_FHDR_START>
//----------------------------------------------------------------------------
//
// Name: 
//
// Description:	
//
//----------------------------------------------------------------------------
//<AMI_FHDR_END>
#ifndef _TPM_CLEAR_ON_ROLLBACK_WRAPPER_H
#define _TPM_CLEAR_ON_ROLLBACK_WRAPPER_H

#include <AmiDxeLib.h>
#include <Protocol\TcgService.h>
#include <TCGMisc.h>
#include <Protocol\SmmBase2.h>
#include <Protocol\AmiTpmClearOnRollbackProtocol.h>
#include <PPI/FwVersion.h>
#include <Hob.h>
#include <Token.h>
#include <AmiHobs.h>

#define FID_FFS_FILE_NAME_GUID \
    { 0x3fd1d3a2, 0x99f7, 0x420b, 0xbc, 0x69, 0x8b, 0xb1, 0xd4, 0x92, 0xa3, 0x32 }

#define FID_FFS_FILE_SECTION_GUID \
    { 0x2EBE0275, 0x6458, 0x4AF9, 0x91, 0xED, 0xD3, 0xF4, 0xED, 0xB1, 0x00, 0xAA }

#define TPM_BASE_ADDRESS   0xfed40000
#define BASE 0x0
#define INVALID_POSTINIT   ((TPM_RESULT) (BASE + 38))
#define DISABLED       ((TPM_RESULT) (BASE + 7))
#define DEACTIVATED    ((TPM_RESULT) (BASE + 6))

#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))

#define TPM_N2HS( x ) TPM_H2NS( x )
#define TPM_N2HL( x ) TPM_H2NL( x )

#pragma pack(1)

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;

typedef volatile TPM_1_2_REGISTERS *TPM_1_2_REGISTERS_PTR;

typedef struct _TPM_TRANSMIT_BUFFER {
  VOID                              *Buffer;
  UINTN                             Size;
} TPM_TRANSMIT_BUFFER;

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 _PHYSICAL_PRESENCE_CMD{
    TPM_1_2_CMD_HEADER  Hdr;
    UINT16              Data;
} PHYSICAL_PRESENCE_CMD;

typedef struct _DATA_CMD{
    TPM_1_2_CMD_HEADER  Hdr;
    UINT8               Data;
} DATA_CMD;

#pragma pack()

EFI_STATUS
__stdcall IsTpmPresent (
    IN TPM_1_2_REGISTERS_PTR TpmReg );

EFI_STATUS
__stdcall TisReleaseLocality (
    IN TPM_1_2_REGISTERS_PTR TpmReg );

EFI_STATUS
__stdcall TisRequestLocality (
    IN TPM_1_2_REGISTERS_PTR TpmReg );

EFI_STATUS
__stdcall TpmLibPassThrough (
    IN TPM_1_2_REGISTERS_PTR   TpmReg,
    IN UINTN                   NoInputBuffers,
    IN TPM_TRANSMIT_BUFFER     *InputBuffers,
    IN UINTN                   NoOutputBuffers,
    IN OUT TPM_TRANSMIT_BUFFER *OutputBuffers );

BOOLEAN
__stdcall AutoSupportType ();

EFI_STATUS TpmRecoveryGetFidFromFv(
    OUT VOID *Fid
);

EFI_STATUS TpmGetFidFromBuffer(
    OUT VOID *Fid,
    IN VOID *Buffer
);

UINT8 ClearTpmBeforeFlash();

void
__stdcall
FixedDelay(UINT32 dCount);

#endif
//*************************************************************************
//*************************************************************************
//**                                                                     **
//**        (C)Copyright 1985-2011, American Megatrends, Inc.            **
//**                                                                     **
//**                       All Rights Reserved.                          **
//**                                                                     **
//**      5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093           **
//**                                                                     **
//**                       Phone: (770)-246-8600                         **
//**                                                                     **
//*************************************************************************
//*************************************************************************