1 /** @file 2 This library abstract how to access TPM2 hardware device. 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 _TPM2_DEVICE_LIB_H_ 10 #define _TPM2_DEVICE_LIB_H_ 11 12 #include <Uefi.h> 13 14 // 15 // Used in PcdActiveTpmInterfaceType to identify TPM interface type 16 // 17 typedef enum { 18 Tpm2PtpInterfaceTis, 19 Tpm2PtpInterfaceFifo, 20 Tpm2PtpInterfaceCrb, 21 Tpm2PtpInterfaceMax, 22 } TPM2_PTP_INTERFACE_TYPE; 23 24 /** 25 This service enables the sending of commands to the TPM2. 26 27 @param[in] InputParameterBlockSize Size of the TPM2 input parameter block. 28 @param[in] InputParameterBlock Pointer to the TPM2 input parameter block. 29 @param[in,out] OutputParameterBlockSize Size of the TPM2 output parameter block. 30 @param[in] OutputParameterBlock Pointer to the TPM2 output parameter block. 31 32 @retval EFI_SUCCESS The command byte stream was successfully sent to the device and a response was successfully received. 33 @retval EFI_DEVICE_ERROR The command was not successfully sent to the device or a response was not successfully received from the device. 34 @retval EFI_BUFFER_TOO_SMALL The output parameter block is too small. 35 **/ 36 EFI_STATUS 37 EFIAPI 38 Tpm2SubmitCommand ( 39 IN UINT32 InputParameterBlockSize, 40 IN UINT8 *InputParameterBlock, 41 IN OUT UINT32 *OutputParameterBlockSize, 42 IN UINT8 *OutputParameterBlock 43 ); 44 45 /** 46 This service requests use TPM2. 47 48 @retval EFI_SUCCESS Get the control of TPM2 chip. 49 @retval EFI_NOT_FOUND TPM2 not found. 50 @retval EFI_DEVICE_ERROR Unexpected device behavior. 51 **/ 52 EFI_STATUS 53 EFIAPI 54 Tpm2RequestUseTpm ( 55 VOID 56 ); 57 58 /** 59 This service enables the sending of commands to the TPM2. 60 61 @param[in] InputParameterBlockSize Size of the TPM2 input parameter block. 62 @param[in] InputParameterBlock Pointer to the TPM2 input parameter block. 63 @param[in,out] OutputParameterBlockSize Size of the TPM2 output parameter block. 64 @param[in] OutputParameterBlock Pointer to the TPM2 output parameter block. 65 66 @retval EFI_SUCCESS The command byte stream was successfully sent to the device and a response was successfully received. 67 @retval EFI_DEVICE_ERROR The command was not successfully sent to the device or a response was not successfully received from the device. 68 @retval EFI_BUFFER_TOO_SMALL The output parameter block is too small. 69 **/ 70 typedef 71 EFI_STATUS 72 (EFIAPI *TPM2_SUBMIT_COMMAND) ( 73 IN UINT32 InputParameterBlockSize, 74 IN UINT8 *InputParameterBlock, 75 IN OUT UINT32 *OutputParameterBlockSize, 76 IN UINT8 *OutputParameterBlock 77 ); 78 79 /** 80 This service requests use TPM2. 81 82 @retval EFI_SUCCESS Get the control of TPM2 chip. 83 @retval EFI_NOT_FOUND TPM2 not found. 84 @retval EFI_DEVICE_ERROR Unexpected device behavior. 85 **/ 86 typedef 87 EFI_STATUS 88 (EFIAPI *TPM2_REQUEST_USE_TPM) ( 89 VOID 90 ); 91 92 typedef struct { 93 EFI_GUID ProviderGuid; 94 TPM2_SUBMIT_COMMAND Tpm2SubmitCommand; 95 TPM2_REQUEST_USE_TPM Tpm2RequestUseTpm; 96 } TPM2_DEVICE_INTERFACE; 97 98 /** 99 This service register TPM2 device. 100 101 @param Tpm2Device TPM2 device 102 103 @retval EFI_SUCCESS This TPM2 device is registered successfully. 104 @retval EFI_UNSUPPORTED System does not support register this TPM2 device. 105 @retval EFI_ALREADY_STARTED System already register this TPM2 device. 106 **/ 107 EFI_STATUS 108 EFIAPI 109 Tpm2RegisterTpm2DeviceLib ( 110 IN TPM2_DEVICE_INTERFACE *Tpm2Device 111 ); 112 113 #endif 114