HII Config Access protocol implementation of TCG2 configuration module.\r
NOTE: This module is only for reference only, each platform should have its own setup page.\r
\r
-Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>\r
+(C) Copyright 2018 Hewlett Packard Enterprise Development LP<BR>\r
This program and the accompanying materials \r
are licensed and made available under the terms and conditions of the BSD License \r
which accompanies this distribution. The full text of the license may be found at \r
#include "Tcg2ConfigImpl.h"\r
#include <Library/PcdLib.h>\r
#include <Library/Tpm2CommandLib.h>\r
+#include <Library/Tpm2DeviceLib.h>\r
#include <Library/IoLib.h>\r
+\r
#include <Guid/TpmInstance.h>\r
\r
#include <IndustryStandard/TpmPtp.h>\r
\r
UINT8 mCurrentPpRequest;\r
\r
-/**\r
- Return PTP interface type.\r
-\r
- @param[in] Register Pointer to PTP register.\r
-\r
- @return PTP interface type.\r
-**/\r
-UINT8\r
-GetPtpInterface (\r
- IN VOID *Register\r
- )\r
-{\r
- PTP_CRB_INTERFACE_IDENTIFIER InterfaceId;\r
- PTP_FIFO_INTERFACE_CAPABILITY InterfaceCapability;\r
-\r
- //\r
- // Check interface id\r
- //\r
- InterfaceId.Uint32 = MmioRead32 ((UINTN)&((PTP_CRB_REGISTERS *)Register)->InterfaceId);\r
- InterfaceCapability.Uint32 = MmioRead32 ((UINTN)&((PTP_FIFO_REGISTERS *)Register)->InterfaceCapability);\r
-\r
- if ((InterfaceId.Bits.InterfaceType == PTP_INTERFACE_IDENTIFIER_INTERFACE_TYPE_CRB) &&\r
- (InterfaceId.Bits.InterfaceVersion == PTP_INTERFACE_IDENTIFIER_INTERFACE_VERSION_CRB) &&\r
- (InterfaceId.Bits.CapCRB != 0)) {\r
- return TPM_DEVICE_INTERFACE_PTP_CRB;\r
- }\r
- if ((InterfaceId.Bits.InterfaceType == PTP_INTERFACE_IDENTIFIER_INTERFACE_TYPE_FIFO) &&\r
- (InterfaceId.Bits.InterfaceVersion == PTP_INTERFACE_IDENTIFIER_INTERFACE_VERSION_FIFO) &&\r
- (InterfaceId.Bits.CapFIFO != 0) &&\r
- (InterfaceCapability.Bits.InterfaceVersion == INTERFACE_CAPABILITY_INTERFACE_VERSION_PTP)) {\r
- return TPM_DEVICE_INTERFACE_PTP_FIFO;\r
- }\r
- return TPM_DEVICE_INTERFACE_TIS;\r
-}\r
-\r
/**\r
Return if PTP CRB is supported.\r
\r
\r
/**\r
Set PTP interface type.\r
+ Do not update PcdActiveTpmInterfaceType here because interface change only happens on next _TPM_INIT\r
\r
@param[in] Register Pointer to PTP register.\r
@param[in] PtpInterface PTP interface type.\r
IN UINT8 PtpInterface\r
)\r
{\r
- UINT8 PtpInterfaceCurrent;\r
+ TPM2_PTP_INTERFACE_TYPE PtpInterfaceCurrent;\r
PTP_CRB_INTERFACE_IDENTIFIER InterfaceId;\r
\r
- PtpInterfaceCurrent = GetPtpInterface (Register);\r
- if ((PtpInterfaceCurrent != TPM_DEVICE_INTERFACE_PTP_FIFO) && \r
- (PtpInterfaceCurrent != TPM_DEVICE_INTERFACE_PTP_CRB)) {\r
+ PtpInterfaceCurrent = PcdGet8(PcdActiveTpmInterfaceType);\r
+ if ((PtpInterfaceCurrent != Tpm2PtpInterfaceFifo) &&\r
+ (PtpInterfaceCurrent != Tpm2PtpInterfaceCrb)) {\r
return EFI_UNSUPPORTED;\r
}\r
InterfaceId.Uint32 = MmioRead32 ((UINTN)&((PTP_CRB_REGISTERS *)Register)->InterfaceId);\r
}\r
\r
switch (PtpInterface) {\r
- case TPM_DEVICE_INTERFACE_PTP_FIFO:\r
+ case Tpm2PtpInterfaceFifo:\r
if (InterfaceId.Bits.CapFIFO == 0) {\r
return EFI_UNSUPPORTED;\r
}\r
InterfaceId.Bits.InterfaceSelector = PTP_INTERFACE_IDENTIFIER_INTERFACE_SELECTOR_FIFO;\r
MmioWrite32 ((UINTN)&((PTP_CRB_REGISTERS *)Register)->InterfaceId, InterfaceId.Uint32);\r
return EFI_SUCCESS;\r
- case TPM_DEVICE_INTERFACE_PTP_CRB:\r
+ case Tpm2PtpInterfaceCrb:\r
if (InterfaceId.Bits.CapCRB == 0) {\r
return EFI_UNSUPPORTED;\r
}\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
+ *Progress = Configuration;\r
+\r
return EFI_NOT_FOUND;\r
}\r
\r
// #### is Firmware Version 1\r
//\r
if (PnpHID) {\r
- AsciiSPrint(Hid + 3, TPM_HID_PNP_SIZE - 3, "%02d%02d", ((FirmwareVersion1 & 0xFFFF0000) >> 16), (FirmwareVersion1 && 0x0000FFFF));\r
+ AsciiSPrint(Hid + 3, TPM_HID_PNP_SIZE - 3, "%02d%02d", ((FirmwareVersion1 & 0xFFFF0000) >> 16), (FirmwareVersion1 & 0x0000FFFF));\r
} else {\r
- AsciiSPrint(Hid + 4, TPM_HID_ACPI_SIZE - 4, "%02d%02d", ((FirmwareVersion1 & 0xFFFF0000) >> 16), (FirmwareVersion1 && 0x0000FFFF));\r
+ AsciiSPrint(Hid + 4, TPM_HID_ACPI_SIZE - 4, "%02d%02d", ((FirmwareVersion1 & 0xFFFF0000) >> 16), (FirmwareVersion1 & 0x0000FFFF));\r
}\r
\r
} else {\r
{\r
EFI_INPUT_KEY Key;\r
UINT64 PcdTcg2PpiVersion;\r
+ UINT8 PcdTpm2AcpiTableRev;\r
\r
ASSERT (Action == EFI_BROWSER_ACTION_SUBMITTED);\r
\r
NULL\r
);\r
}\r
+ } else if (QuestionId == KEY_TPM2_ACPI_REVISION){\r
+ //\r
+ // Get the PCD value after EFI_BROWSER_ACTION_SUBMITTED,\r
+ // the SetVariable to TCG2_VERSION_NAME should have been done.\r
+ // If the PCD value is not equal to the value set to variable,\r
+ // the PCD is not DynamicHii type and does not map to the setup option.\r
+ //\r
+ PcdTpm2AcpiTableRev = PcdGet8 (PcdTpm2AcpiTableRev);\r
+\r
+ if (PcdTpm2AcpiTableRev != Value->u8) {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"WARNING: PcdTpm2AcpiTableRev is not DynamicHii type and does not map to this option!",\r
+ L"The Revision configuring by this setup option will not work!",\r
+ NULL\r
+ );\r
+ }\r
}\r
\r
return EFI_SUCCESS;\r
}\r
\r
if (Action == EFI_BROWSER_ACTION_SUBMITTED) {\r
- if (QuestionId == KEY_TCG2_PPI_VERSION) {\r
+ if (QuestionId == KEY_TCG2_PPI_VERSION || QuestionId == KEY_TPM2_ACPI_REVISION) {\r
return Tcg2VersionInfoCallback (Action, QuestionId, Type, Value);\r
}\r
}\r
TPML_PCR_SELECTION Pcrs;\r
CHAR16 TempBuffer[1024];\r
TCG2_CONFIGURATION_INFO Tcg2ConfigInfo;\r
- UINT8 TpmDeviceInterfaceDetected;\r
+ TPM2_PTP_INTERFACE_TYPE TpmDeviceInterfaceDetected;\r
\r
DriverHandle = NULL;\r
ConfigAccess = &PrivateData->ConfigAccess;\r
// Update TPM device interface type\r
//\r
if (PrivateData->TpmDeviceDetected == TPM_DEVICE_2_0_DTPM) {\r
- TpmDeviceInterfaceDetected = GetPtpInterface ((VOID *) (UINTN) PcdGet64 (PcdTpmBaseAddress));\r
+ TpmDeviceInterfaceDetected = PcdGet8(PcdActiveTpmInterfaceType);\r
switch (TpmDeviceInterfaceDetected) {\r
- case TPM_DEVICE_INTERFACE_TIS:\r
+ case Tpm2PtpInterfaceTis:\r
HiiSetString (PrivateData->HiiHandle, STRING_TOKEN (STR_TCG2_DEVICE_INTERFACE_STATE_CONTENT), L"TIS", NULL);\r
break;\r
- case TPM_DEVICE_INTERFACE_PTP_FIFO:\r
+ case Tpm2PtpInterfaceFifo:\r
HiiSetString (PrivateData->HiiHandle, STRING_TOKEN (STR_TCG2_DEVICE_INTERFACE_STATE_CONTENT), L"PTP FIFO", NULL);\r
break;\r
- case TPM_DEVICE_INTERFACE_PTP_CRB:\r
+ case Tpm2PtpInterfaceCrb:\r
HiiSetString (PrivateData->HiiHandle, STRING_TOKEN (STR_TCG2_DEVICE_INTERFACE_STATE_CONTENT), L"PTP CRB", NULL);\r
break;\r
default:\r
\r
Tcg2ConfigInfo.TpmDeviceInterfaceAttempt = TpmDeviceInterfaceDetected;\r
switch (TpmDeviceInterfaceDetected) {\r
- case TPM_DEVICE_INTERFACE_TIS:\r
+ case Tpm2PtpInterfaceTis:\r
Tcg2ConfigInfo.TpmDeviceInterfacePtpFifoSupported = FALSE;\r
Tcg2ConfigInfo.TpmDeviceInterfacePtpCrbSupported = FALSE;\r
HiiSetString (PrivateData->HiiHandle, STRING_TOKEN (STR_TCG2_DEVICE_INTERFACE_CAPABILITY_CONTENT), L"TIS", NULL);\r
break;\r
- case TPM_DEVICE_INTERFACE_PTP_FIFO:\r
- case TPM_DEVICE_INTERFACE_PTP_CRB:\r
+ case Tpm2PtpInterfaceFifo:\r
+ case Tpm2PtpInterfaceCrb:\r
Tcg2ConfigInfo.TpmDeviceInterfacePtpFifoSupported = IsPtpFifoSupported((VOID *) (UINTN) PcdGet64 (PcdTpmBaseAddress));\r
Tcg2ConfigInfo.TpmDeviceInterfacePtpCrbSupported = IsPtpCrbSupported((VOID *) (UINTN) PcdGet64 (PcdTpmBaseAddress));\r
TempBuffer[0] = 0;\r
if (EFI_ERROR (Status)) {\r
DEBUG ((EFI_D_ERROR, "Tcg2ConfigDriver: Fail to set TCG2_STORAGE_INFO_NAME\n"));\r
}\r
+\r
return EFI_SUCCESS; \r
}\r
\r