/** This service is a proxy for commands to the TPM. @param[in] This Indicates the calling context @param[in] TpmInputParameterBlockSize Size of the TPM input parameter block @param[in] TpmInputParameterBlock Pointer to the TPM input parameter block @param[in] TpmOutputParameterBlockSize Size of the TPM output parameter block @param[in] TpmOutputParameterBlock Pointer to the TPM output parameter block @retval EFI_SUCCESS Operation completed successfully. @retval EFI_INVALID_PARAMETER Invalid ordinal. @retval EFI_UNSUPPORTED Current Task Priority Level >= EFI_TPL_CALLBACK. @retval EFI_TIMEOUT The TIS timed-out. **/ EFI_STATUS EFIAPI TcgDxePassThroughToTpm ( IN EFI_TCG_PROTOCOL *This, IN UINT32 TpmInputParameterBlockSize, IN UINT8 *TpmInputParameterBlock, IN UINT32 TpmOutputParameterBlockSize, IN UINT8 *TpmOutputParameterBlock ) { TCG_DXE_DATA *TcgData; if (TpmInputParameterBlock == NULL || TpmOutputParameterBlock == NULL || TpmInputParameterBlockSize == 0 || TpmOutputParameterBlockSize == 0) { return EFI_INVALID_PARAMETER; } TcgData = TCG_DXE_DATA_FROM_THIS (This); return TisPcExecute ( &(TcgData->TpmHandle), "%r%/%r", TpmInputParameterBlock, (UINTN) TpmInputParameterBlockSize, TpmOutputParameterBlock, (UINTN) TpmOutputParameterBlockSize ); }
/** Extend a TPM PCR. @param[in] TpmHandle TPM handle. @param[in] DigestToExtend The 160 bit value representing the event to be recorded. @param[in] PcrIndex The PCR to be updated. @param[out] NewPcrValue New PCR value after extend. @retval EFI_SUCCESS Operation completed successfully. @retval EFI_DEVICE_ERROR The command was unsuccessful. **/ EFI_STATUS TpmCommExtend ( IN TIS_TPM_HANDLE TpmHandle, IN TPM_DIGEST *DigestToExtend, IN TPM_PCRINDEX PcrIndex, OUT TPM_DIGEST *NewPcrValue ) { EFI_STATUS Status; TPM_DIGEST NewValue; TPM_RQU_COMMAND_HDR CmdHdr; TPM_RSP_COMMAND_HDR RspHdr; if (NewPcrValue == NULL) { NewPcrValue = &NewValue; } CmdHdr.tag = TPM_TAG_RQU_COMMAND; CmdHdr.paramSize = sizeof (CmdHdr) + sizeof (PcrIndex) + sizeof (*DigestToExtend); CmdHdr.ordinal = TPM_ORD_Extend; Status = TisPcExecute ( TpmHandle, "%h%d%r%/%h%r", &CmdHdr, PcrIndex, DigestToExtend, (UINTN)sizeof (*DigestToExtend), &RspHdr, NewPcrValue, (UINTN)sizeof (*NewPcrValue) ); if (EFI_ERROR (Status)) { return Status; } if (RspHdr.returnCode != 0) { return EFI_DEVICE_ERROR; } return EFI_SUCCESS; }
/** This service is a proxy for commands to the TPM. @param[in] This Indicates the calling context @param[in] TpmInputParameterBlockSize Size of the TPM input parameter block @param[in] TpmInputParameterBlock Pointer to the TPM input parameter block @param[in] TpmOutputParameterBlockSize Size of the TPM output parameter block @param[in] TpmOutputParameterBlock Pointer to the TPM output parameter block @retval EFI_SUCCESS Operation completed successfully. @retval EFI_INVALID_PARAMETER Invalid ordinal. @retval EFI_UNSUPPORTED Current Task Priority Level >= EFI_TPL_CALLBACK. @retval EFI_TIMEOUT The TIS timed-out. **/ EFI_STATUS EFIAPI TcgDxePassThroughToTpm ( IN EFI_TCG_PROTOCOL *This, IN UINT32 TpmInputParameterBlockSize, IN UINT8 *TpmInputParameterBlock, IN UINT32 TpmOutputParameterBlockSize, IN UINT8 *TpmOutputParameterBlock ) { TCG_DXE_DATA *TcgData; TcgData = TCG_DXE_DATA_FROM_THIS (This); return TisPcExecute ( TcgData->TpmHandle, "%r%/%r", TpmInputParameterBlock, (UINTN) TpmInputParameterBlockSize, TpmOutputParameterBlock, (UINTN) TpmOutputParameterBlockSize ); }
/** Get TPM capability flags. @param[in] TpmHandle TPM handle. @param[in] FlagSubcap Flag subcap. @param[out] FlagBuffer Pointer to the buffer for returned flag structure. @param[in] FlagSize Size of the buffer. @retval EFI_SUCCESS Operation completed successfully. @retval EFI_DEVICE_ERROR The command was unsuccessful. **/ EFI_STATUS TpmCommGetFlags ( IN TIS_TPM_HANDLE TpmHandle, IN UINT32 FlagSubcap, OUT VOID *FlagBuffer, IN UINTN FlagSize ) { EFI_STATUS Status; TPM_RQU_COMMAND_HDR CmdHdr; TPM_RSP_COMMAND_HDR RspHdr; UINT32 Size; CmdHdr.tag = TPM_TAG_RQU_COMMAND; CmdHdr.paramSize = sizeof (CmdHdr) + sizeof (UINT32) * 3; CmdHdr.ordinal = TPM_ORD_GetCapability; Status = TisPcExecute ( TpmHandle, "%h%d%d%d%/%h%d%r", &CmdHdr, TPM_CAP_FLAG, sizeof (FlagSubcap), FlagSubcap, &RspHdr, &Size, FlagBuffer, FlagSize ); if (EFI_ERROR (Status)) { return Status; } if (RspHdr.returnCode != 0) { return EFI_DEVICE_ERROR; } return EFI_SUCCESS; }