diff options
Diffstat (limited to 'src/VBox/Devices/EFI/Firmware/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2DeviceLibDTpmBase.c')
-rw-r--r-- | src/VBox/Devices/EFI/Firmware/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2DeviceLibDTpmBase.c | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/src/VBox/Devices/EFI/Firmware/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2DeviceLibDTpmBase.c b/src/VBox/Devices/EFI/Firmware/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2DeviceLibDTpmBase.c new file mode 100644 index 00000000..43ac13ed --- /dev/null +++ b/src/VBox/Devices/EFI/Firmware/SecurityPkg/Library/Tpm2DeviceLibDTpm/Tpm2DeviceLibDTpmBase.c @@ -0,0 +1,68 @@ +/** @file + This file abstract internal interfaces of which implementation differs per library instance. + +Copyright (c) 2013 - 2018, Intel Corporation. All rights reserved. <BR> +Copyright (c) Microsoft Corporation. +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include <Library/Tpm2DeviceLib.h> +#include <Library/PcdLib.h> + +#include "Tpm2DeviceLibDTpm.h" + +/** + Return cached PTP CRB interface IdleByPass state. + + @return Cached PTP CRB interface IdleByPass state. +**/ +UINT8 +GetCachedIdleByPass ( + VOID + ) +{ + return PcdGet8(PcdCRBIdleByPass); +} + +/** + Return cached PTP interface type. + + @return Cached PTP interface type. +**/ +TPM2_PTP_INTERFACE_TYPE +GetCachedPtpInterface ( + VOID + ) +{ + return PcdGet8(PcdActiveTpmInterfaceType); +} + +/** + The common function cache current active TpmInterfaceType when needed. + + @retval EFI_SUCCESS DTPM2.0 instance is registered, or system does not support register DTPM2.0 instance +**/ +EFI_STATUS +InternalTpm2DeviceLibDTpmCommonConstructor ( + VOID + ) +{ + TPM2_PTP_INTERFACE_TYPE PtpInterface; + UINT8 IdleByPass; + + // + // Cache current active TpmInterfaceType only when needed + // + if (PcdGet8(PcdActiveTpmInterfaceType) == 0xFF) { + PtpInterface = Tpm2GetPtpInterface ((VOID *) (UINTN) PcdGet64 (PcdTpmBaseAddress)); + PcdSet8S(PcdActiveTpmInterfaceType, PtpInterface); + } + + if (PcdGet8(PcdActiveTpmInterfaceType) == Tpm2PtpInterfaceCrb && PcdGet8(PcdCRBIdleByPass) == 0xFF) { + IdleByPass = Tpm2GetIdleByPass((VOID *) (UINTN) PcdGet64 (PcdTpmBaseAddress)); + PcdSet8S(PcdCRBIdleByPass, IdleByPass); + } + + return EFI_SUCCESS; +} |