]> git.proxmox.com Git - mirror_edk2.git/blob - SecurityPkg/Include/Library/Tpm12CommandLib.h
SecurityPkg: Replace BSD License with BSD+Patent License
[mirror_edk2.git] / SecurityPkg / Include / Library / Tpm12CommandLib.h
1 /** @file
2 This library is used by other modules to send TPM12 command.
3
4 Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved. <BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7 **/
8
9 #ifndef _TPM12_COMMAND_LIB_H_
10 #define _TPM12_COMMAND_LIB_H_
11
12 #include <IndustryStandard/Tpm12.h>
13
14 /**
15 Send Startup command to TPM1.2.
16
17 @param TpmSt Startup Type.
18
19 @retval EFI_SUCCESS Operation completed successfully.
20 @retval EFI_DEVICE_ERROR Unexpected device behavior.
21 **/
22 EFI_STATUS
23 EFIAPI
24 Tpm12Startup (
25 IN TPM_STARTUP_TYPE TpmSt
26 );
27
28 /**
29 Send SaveState command to TPM1.2.
30
31 @retval EFI_SUCCESS Operation completed successfully.
32 @retval EFI_DEVICE_ERROR Unexpected device behavior.
33 **/
34 EFI_STATUS
35 EFIAPI
36 Tpm12SaveState (
37 VOID
38 );
39
40 /**
41 Send ForceClear command to TPM1.2.
42
43 @retval EFI_SUCCESS Operation completed successfully.
44 @retval EFI_DEVICE_ERROR Unexpected device behavior.
45 **/
46 EFI_STATUS
47 EFIAPI
48 Tpm12ForceClear (
49 VOID
50 );
51
52 #pragma pack(1)
53
54 typedef struct {
55 UINT16 sizeOfSelect;
56 UINT8 pcrSelect[3];
57 } TPM12_PCR_SELECTION;
58
59 typedef struct {
60 TPM12_PCR_SELECTION pcrSelection;
61 TPM_LOCALITY_SELECTION localityAtRelease;
62 TPM_COMPOSITE_HASH digestAtRelease;
63 } TPM12_PCR_INFO_SHORT;
64
65 typedef struct {
66 TPM_STRUCTURE_TAG tag;
67 TPM_NV_INDEX nvIndex;
68 TPM12_PCR_INFO_SHORT pcrInfoRead;
69 TPM12_PCR_INFO_SHORT pcrInfoWrite;
70 TPM_NV_ATTRIBUTES permission;
71 BOOLEAN bReadSTClear;
72 BOOLEAN bWriteSTClear;
73 BOOLEAN bWriteDefine;
74 UINT32 dataSize;
75 } TPM12_NV_DATA_PUBLIC;
76
77 #pragma pack()
78
79 /**
80 Send NV DefineSpace command to TPM1.2.
81
82 @param PubInfo The public parameters of the NV area.
83 @param EncAuth The encrypted AuthData, only valid if the attributes require subsequent authorization.
84
85 @retval EFI_SUCCESS Operation completed successfully.
86 @retval EFI_DEVICE_ERROR Unexpected device behavior.
87 **/
88 EFI_STATUS
89 EFIAPI
90 Tpm12NvDefineSpace (
91 IN TPM12_NV_DATA_PUBLIC *PubInfo,
92 IN TPM_ENCAUTH *EncAuth
93 );
94
95 /**
96 Send NV ReadValue command to TPM1.2.
97
98 @param NvIndex The index of the area to set.
99 @param Offset The offset into the area.
100 @param DataSize The size of the data area.
101 @param Data The data to set the area to.
102
103 @retval EFI_SUCCESS Operation completed successfully.
104 @retval EFI_DEVICE_ERROR Unexpected device behavior.
105 **/
106 EFI_STATUS
107 EFIAPI
108 Tpm12NvReadValue (
109 IN TPM_NV_INDEX NvIndex,
110 IN UINT32 Offset,
111 IN OUT UINT32 *DataSize,
112 OUT UINT8 *Data
113 );
114
115 /**
116 Send NV WriteValue command to TPM1.2.
117
118 @param NvIndex The index of the area to set.
119 @param Offset The offset into the NV Area.
120 @param DataSize The size of the data parameter.
121 @param Data The data to set the area to.
122
123 @retval EFI_SUCCESS Operation completed successfully.
124 @retval EFI_DEVICE_ERROR Unexpected device behavior.
125 **/
126 EFI_STATUS
127 EFIAPI
128 Tpm12NvWriteValue (
129 IN TPM_NV_INDEX NvIndex,
130 IN UINT32 Offset,
131 IN UINT32 DataSize,
132 IN UINT8 *Data
133 );
134
135 /**
136 Extend a TPM PCR.
137
138 @param[in] DigestToExtend The 160 bit value representing the event to be recorded.
139 @param[in] PcrIndex The PCR to be updated.
140 @param[out] NewPcrValue New PCR value after extend.
141
142 @retval EFI_SUCCESS Operation completed successfully.
143 @retval EFI_TIMEOUT The register can't run into the expected status in time.
144 @retval EFI_BUFFER_TOO_SMALL Response data buffer is too small.
145 @retval EFI_DEVICE_ERROR Unexpected device behavior.
146
147 **/
148 EFI_STATUS
149 EFIAPI
150 Tpm12Extend (
151 IN TPM_DIGEST *DigestToExtend,
152 IN TPM_PCRINDEX PcrIndex,
153 OUT TPM_DIGEST *NewPcrValue
154 );
155
156 /**
157 Send TSC_PhysicalPresence command to TPM.
158
159 @param[in] PhysicalPresence The state to set the TPMs Physical Presence flags.
160
161 @retval EFI_SUCCESS Operation completed successfully.
162 @retval EFI_TIMEOUT The register can't run into the expected status in time.
163 @retval EFI_BUFFER_TOO_SMALL Response data buffer is too small.
164 @retval EFI_DEVICE_ERROR Unexpected device behavior.
165
166 **/
167 EFI_STATUS
168 EFIAPI
169 Tpm12PhysicalPresence (
170 IN TPM_PHYSICAL_PRESENCE PhysicalPresence
171 );
172
173 /**
174 Send TPM_ContinueSelfTest command to TPM.
175
176 @retval EFI_SUCCESS Operation completed successfully.
177 @retval EFI_TIMEOUT The register can't run into the expected status in time.
178 @retval EFI_BUFFER_TOO_SMALL Response data buffer is too small.
179 @retval EFI_DEVICE_ERROR Unexpected device behavior.
180
181 **/
182 EFI_STATUS
183 EFIAPI
184 Tpm12ContinueSelfTest (
185 VOID
186 );
187
188 /**
189 Get TPM capability permanent flags.
190
191 @param[out] TpmPermanentFlags Pointer to the buffer for returned flag structure.
192
193 @retval EFI_SUCCESS Operation completed successfully.
194 @retval EFI_TIMEOUT The register can't run into the expected status in time.
195 @retval EFI_BUFFER_TOO_SMALL Response data buffer is too small.
196 @retval EFI_DEVICE_ERROR Unexpected device behavior.
197
198 **/
199 EFI_STATUS
200 EFIAPI
201 Tpm12GetCapabilityFlagPermanent (
202 OUT TPM_PERMANENT_FLAGS *TpmPermanentFlags
203 );
204
205 /**
206 Get TPM capability volatile flags.
207
208 @param[out] VolatileFlags Pointer to the buffer for returned flag structure.
209
210 @retval EFI_SUCCESS Operation completed successfully.
211 @retval EFI_DEVICE_ERROR The command was unsuccessful.
212
213 **/
214 EFI_STATUS
215 EFIAPI
216 Tpm12GetCapabilityFlagVolatile (
217 OUT TPM_STCLEAR_FLAGS *VolatileFlags
218 );
219 #endif