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