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
-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
-http://opensource.org/licenses/bsd-license.php\r
-\r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>\r
+(C) Copyright 2018 Hewlett Packard Enterprise Development LP<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\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
END_DEVICE_PATH_TYPE,\r
END_ENTIRE_DEVICE_PATH_SUBTYPE,\r
- { \r
+ {\r
(UINT8) (END_DEVICE_PATH_LENGTH),\r
(UINT8) ((END_DEVICE_PATH_LENGTH) >> 8)\r
}\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
@param[in] Register Pointer to PTP register.\r
- \r
+\r
@retval TRUE PTP CRB is supported.\r
@retval FALSE PTP CRB is unsupported.\r
**/\r
Return if PTP FIFO is supported.\r
\r
@param[in] Register Pointer to PTP register.\r
- \r
+\r
@retval TRUE PTP FIFO is supported.\r
@retval FALSE PTP FIFO is unsupported.\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
- \r
+\r
@retval EFI_SUCCESS PTP interface type is set.\r
@retval EFI_INVALID_PARAMETER PTP interface type is invalid.\r
@retval EFI_UNSUPPORTED PTP interface type is unsupported.\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
} else {\r
mTcg2ConfigPrivateDate->PCRBanksDesired &= ~(0x1 << PCRBankIndex);\r
}\r
- \r
+\r
ReturnCode = Tcg2PhysicalPresenceLibSubmitRequestToPreOSFunction (TCG2_PHYSICAL_PRESENCE_SET_PCR_BANKS, mTcg2ConfigPrivateDate->PCRBanksDesired);\r
if (ReturnCode == TCG_PP_SUBMIT_REQUEST_TO_PREOS_SUCCESS) {\r
Status = EFI_SUCCESS;\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
return EFI_SUCCESS;\r
}\r
\r
+/**\r
+ This function processes the results of changes in configuration\r
+ for TCG2 version information.\r
+\r
+ @param[in] Action Specifies the type of action taken by the browser.\r
+ ASSERT if the Action is not EFI_BROWSER_ACTION_SUBMITTED.\r
+ @param[in] QuestionId A unique value which is sent to the original\r
+ exporting driver so that it can identify the type\r
+ of data to expect.\r
+ @param[in] Type The type of value for the question.\r
+ @param[in] Value A pointer to the data being sent to the original\r
+ exporting driver.\r
+\r
+ @retval EFI_SUCCESS The callback successfully handled the action.\r
+\r
+**/\r
+EFI_STATUS\r
+Tcg2VersionInfoCallback (\r
+ IN EFI_BROWSER_ACTION Action,\r
+ IN EFI_QUESTION_ID QuestionId,\r
+ IN UINT8 Type,\r
+ IN EFI_IFR_TYPE_VALUE *Value\r
+ )\r
+{\r
+ EFI_INPUT_KEY Key;\r
+ UINT64 PcdTcg2PpiVersion;\r
+ UINT8 PcdTpm2AcpiTableRev;\r
+\r
+ ASSERT (Action == EFI_BROWSER_ACTION_SUBMITTED);\r
+\r
+ if (QuestionId == KEY_TCG2_PPI_VERSION) {\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
+ PcdTcg2PpiVersion = 0;\r
+ CopyMem (\r
+ &PcdTcg2PpiVersion,\r
+ PcdGetPtr (PcdTcgPhysicalPresenceInterfaceVer),\r
+ AsciiStrSize ((CHAR8 *) PcdGetPtr (PcdTcgPhysicalPresenceInterfaceVer))\r
+ );\r
+ if (PcdTcg2PpiVersion != Value->u64) {\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ L"WARNING: PcdTcgPhysicalPresenceInterfaceVer is not DynamicHii type and does not map to this option!",\r
+ L"The version configuring by this setup option will not work!",\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
/**\r
This function processes the results of changes in configuration.\r
\r
}\r
}\r
}\r
- \r
+\r
if (Action == EFI_BROWSER_ACTION_CHANGED) {\r
if (QuestionId == KEY_TPM_DEVICE) {\r
return EFI_SUCCESS;\r
return SaveTcg2PpRequestParameter (Value->u32);\r
}\r
if ((QuestionId >= KEY_TPM2_PCR_BANKS_REQUEST_0) && (QuestionId <= KEY_TPM2_PCR_BANKS_REQUEST_4)) {\r
- SaveTcg2PCRBanksRequest (QuestionId - KEY_TPM2_PCR_BANKS_REQUEST_0, Value->b);\r
+ return SaveTcg2PCRBanksRequest (QuestionId - KEY_TPM2_PCR_BANKS_REQUEST_0, Value->b);\r
+ }\r
+ }\r
+\r
+ if (Action == EFI_BROWSER_ACTION_SUBMITTED) {\r
+ if (QuestionId == KEY_TCG2_PPI_VERSION || QuestionId == KEY_TPM2_ACPI_REVISION) {\r
+ return Tcg2VersionInfoCallback (Action, QuestionId, Type, Value);\r
}\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
&gEfiHiiConfigAccessProtocolGuid,\r
ConfigAccess,\r
NULL\r
- ); \r
+ );\r
\r
return EFI_OUT_OF_RESOURCES;\r
}\r
- \r
+\r
PrivateData->HiiHandle = HiiHandle;\r
\r
//\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
- return EFI_SUCCESS; \r
+\r
+ return EFI_SUCCESS;\r
}\r
\r
/**\r
);\r
PrivateData->DriverHandle = NULL;\r
}\r
- \r
+\r
FreePool (PrivateData);\r
}\r