From af1a266670d040d2f4083ff309d732d648afba2a Mon Sep 17 00:00:00 2001 From: Angelos Mouzakitis Date: Tue, 10 Oct 2023 14:33:42 +0000 Subject: Add submodule dependency files Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec --- roms/edk2/OvmfPkg/Tcg/Tcg2Config/Tpm12Support.c | 79 +++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 roms/edk2/OvmfPkg/Tcg/Tcg2Config/Tpm12Support.c (limited to 'roms/edk2/OvmfPkg/Tcg/Tcg2Config/Tpm12Support.c') diff --git a/roms/edk2/OvmfPkg/Tcg/Tcg2Config/Tpm12Support.c b/roms/edk2/OvmfPkg/Tcg/Tcg2Config/Tpm12Support.c new file mode 100644 index 000000000..4f5a775c7 --- /dev/null +++ b/roms/edk2/OvmfPkg/Tcg/Tcg2Config/Tpm12Support.c @@ -0,0 +1,79 @@ +/** @file + Implement the InternalTpm12Detect() function on top of the Tpm12DeviceLib + class. + + Copyright (C) 2020, Red Hat, Inc. + + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include +#include + +#include "Tpm12Support.h" + +#pragma pack (1) +typedef struct { + TPM_RSP_COMMAND_HDR Hdr; + TPM_CURRENT_TICKS CurrentTicks; +} TPM_RSP_GET_TICKS; +#pragma pack () + +/** + Probe for the TPM for 1.2 version, by sending TPM1.2 GetTicks + + Sending a TPM1.2 command to a TPM2 should return a TPM1.2 + header (tag = 0xc4) and error code (TPM_BADTAG = 0x1e) + + @retval EFI_SUCCESS TPM version 1.2 probing successful. + + @return Error codes propagated from Tpm12SubmitCommand(). +**/ +STATIC +EFI_STATUS +TestTpm12 ( + ) +{ + EFI_STATUS Status; + TPM_RQU_COMMAND_HDR Command; + TPM_RSP_GET_TICKS Response; + UINT32 Length; + + Command.tag = SwapBytes16 (TPM_TAG_RQU_COMMAND); + Command.paramSize = SwapBytes32 (sizeof (Command)); + Command.ordinal = SwapBytes32 (TPM_ORD_GetTicks); + + Length = sizeof (Response); + Status = Tpm12SubmitCommand (sizeof (Command), (UINT8 *)&Command, &Length, + (UINT8 *)&Response); + if (EFI_ERROR (Status)) { + return Status; + } + + return EFI_SUCCESS; +} + +/** + Detect the presence of a TPM with interface version 1.2. + + @retval EFI_SUCCESS TPM-1.2 available. The Tpm12RequestUseTpm() and + Tpm12SubmitCommand(TPM_ORD_GetTicks) operations + (from the Tpm12DeviceLib class) have succeeded. + + @return Error codes propagated from Tpm12RequestUseTpm() and + Tpm12SubmitCommand(). +**/ +EFI_STATUS +InternalTpm12Detect ( + VOID + ) +{ + EFI_STATUS Status; + + Status = Tpm12RequestUseTpm (); + if (EFI_ERROR (Status)) { + return Status; + } + + return TestTpm12 (); +} -- cgit 1.2.3-korg