/** @file\r
The module entry point for Tcg2 configuration module.\r
\r
-Copyright (c) 2015 - 2016, 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
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
return ;\r
}\r
\r
+/**\r
+ Initialize TCG2 version information.\r
+\r
+ This function will initialize efi varstore configuration data for\r
+ TCG2_VERSION_NAME variable, check the value of related PCD with\r
+ the variable value and set string for the version state content\r
+ according to the PCD value.\r
+\r
+ @param[in] PrivateData Points to TCG2 configuration private data.\r
+\r
+**/\r
+VOID\r
+InitializeTcg2VersionInfo (\r
+ IN TCG2_CONFIG_PRIVATE_DATA *PrivateData\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+ EFI_STRING ConfigRequestHdr;\r
+ BOOLEAN ActionFlag;\r
+ TCG2_VERSION Tcg2Version;\r
+ UINTN DataSize;\r
+ UINT64 PcdTcg2PpiVersion;\r
+ UINT8 PcdTpm2AcpiTableRev;\r
+\r
+ //\r
+ // Get the PCD value before initializing efi varstore configuration data.\r
+ //\r
+ PcdTcg2PpiVersion = 0;\r
+ CopyMem (\r
+ &PcdTcg2PpiVersion,\r
+ PcdGetPtr (PcdTcgPhysicalPresenceInterfaceVer),\r
+ AsciiStrSize ((CHAR8 *) PcdGetPtr (PcdTcgPhysicalPresenceInterfaceVer))\r
+ );\r
+\r
+ PcdTpm2AcpiTableRev = PcdGet8 (PcdTpm2AcpiTableRev);\r
+\r
+ //\r
+ // Initialize efi varstore configuration data.\r
+ //\r
+ ZeroMem (&Tcg2Version, sizeof (Tcg2Version));\r
+ ConfigRequestHdr = HiiConstructConfigHdr (\r
+ &gTcg2ConfigFormSetGuid,\r
+ TCG2_VERSION_NAME,\r
+ PrivateData->DriverHandle\r
+ );\r
+ ASSERT (ConfigRequestHdr != NULL);\r
+ DataSize = sizeof (Tcg2Version);\r
+ Status = gRT->GetVariable (\r
+ TCG2_VERSION_NAME,\r
+ &gTcg2ConfigFormSetGuid,\r
+ NULL,\r
+ &DataSize,\r
+ &Tcg2Version\r
+ );\r
+ if (!EFI_ERROR (Status)) {\r
+ //\r
+ // EFI variable does exist and validate current setting.\r
+ //\r
+ ActionFlag = HiiValidateSettings (ConfigRequestHdr);\r
+ if (!ActionFlag) {\r
+ //\r
+ // Current configuration is invalid, reset to defaults.\r
+ //\r
+ ActionFlag = HiiSetToDefaults (ConfigRequestHdr, EFI_HII_DEFAULT_CLASS_STANDARD);\r
+ ASSERT (ActionFlag);\r
+ //\r
+ // Get the default values from variable.\r
+ //\r
+ DataSize = sizeof (Tcg2Version);\r
+ Status = gRT->GetVariable (\r
+ TCG2_VERSION_NAME,\r
+ &gTcg2ConfigFormSetGuid,\r
+ NULL,\r
+ &DataSize,\r
+ &Tcg2Version\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ }\r
+ } else {\r
+ //\r
+ // EFI variable doesn't exist or variable size is not expected.\r
+ //\r
+\r
+ //\r
+ // Store zero data Buffer Storage to EFI variable.\r
+ //\r
+ Status = gRT->SetVariable (\r
+ TCG2_VERSION_NAME,\r
+ &gTcg2ConfigFormSetGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ sizeof (Tcg2Version),\r
+ &Tcg2Version\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ DEBUG ((DEBUG_ERROR, "Tcg2ConfigDriver: Fail to set TCG2_VERSION_NAME\n"));\r
+ return;\r
+ } else {\r
+ //\r
+ // Build this variable based on default values stored in IFR.\r
+ //\r
+ ActionFlag = HiiSetToDefaults (ConfigRequestHdr, EFI_HII_DEFAULT_CLASS_STANDARD);\r
+ ASSERT (ActionFlag);\r
+ //\r
+ // Get the default values from variable.\r
+ //\r
+ DataSize = sizeof (Tcg2Version);\r
+ Status = gRT->GetVariable (\r
+ TCG2_VERSION_NAME,\r
+ &gTcg2ConfigFormSetGuid,\r
+ NULL,\r
+ &DataSize,\r
+ &Tcg2Version\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ if (PcdTcg2PpiVersion != Tcg2Version.PpiVersion) {\r
+ DEBUG ((DEBUG_WARN, "WARNING: PcdTcgPhysicalPresenceInterfaceVer default value is not same with the default value in VFR\n"));\r
+ DEBUG ((DEBUG_WARN, "WARNING: The default value in VFR has be chosen\n"));\r
+ }\r
+ if (PcdTpm2AcpiTableRev != Tcg2Version.Tpm2AcpiTableRev) {\r
+ DEBUG ((DEBUG_WARN, "WARNING: PcdTpm2AcpiTableRev default value is not same with the default value in VFR\n"));\r
+ DEBUG ((DEBUG_WARN, "WARNING: The default value in VFR has be chosen\n"));\r
+ }\r
+ }\r
+ }\r
+ FreePool (ConfigRequestHdr);\r
+\r
+ //\r
+ // Get the PCD value again.\r
+ // If the PCD value is not equal to the value in 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 != Tcg2Version.PpiVersion) {\r
+ DEBUG ((DEBUG_WARN, "WARNING: PcdTcgPhysicalPresenceInterfaceVer is not DynamicHii type and does not map to TCG2_VERSION.PpiVersion\n"));\r
+ DEBUG ((DEBUG_WARN, "WARNING: The TCG2 PPI version configuring from setup page will not work\n"));\r
+ }\r
+\r
+ switch (PcdTcg2PpiVersion) {\r
+ case TCG2_PPI_VERSION_1_2:\r
+ HiiSetString (PrivateData->HiiHandle, STRING_TOKEN (STR_TCG2_PPI_VERSION_STATE_CONTENT), L"1.2", NULL);\r
+ break;\r
+ case TCG2_PPI_VERSION_1_3:\r
+ HiiSetString (PrivateData->HiiHandle, STRING_TOKEN (STR_TCG2_PPI_VERSION_STATE_CONTENT), L"1.3", NULL);\r
+ break;\r
+ default:\r
+ ASSERT (FALSE);\r
+ break;\r
+ }\r
+\r
+ //\r
+ // Get the PcdTpm2AcpiTableRev value again.\r
+ // If the PCD value is not equal to the value in variable,\r
+ // the PCD is not DynamicHii type and does not map to TCG2_VERSION Variable.\r
+ //\r
+ PcdTpm2AcpiTableRev = PcdGet8 (PcdTpm2AcpiTableRev);\r
+ if (PcdTpm2AcpiTableRev != Tcg2Version.Tpm2AcpiTableRev) {\r
+ DEBUG ((DEBUG_WARN, "WARNING: PcdTpm2AcpiTableRev is not DynamicHii type and does not map to TCG2_VERSION.Tpm2AcpiTableRev\n"));\r
+ DEBUG ((DEBUG_WARN, "WARNING: The Tpm2 ACPI Revision configuring from setup page will not work\n"));\r
+ }\r
+\r
+ switch (PcdTpm2AcpiTableRev) {\r
+ case EFI_TPM2_ACPI_TABLE_REVISION_3:\r
+ HiiSetString (PrivateData->HiiHandle, STRING_TOKEN (STR_TPM2_ACPI_REVISION_STATE_CONTENT), L"Rev 3", NULL);\r
+ break;\r
+ case EFI_TPM2_ACPI_TABLE_REVISION_4:\r
+ HiiSetString (PrivateData->HiiHandle, STRING_TOKEN (STR_TPM2_ACPI_REVISION_STATE_CONTENT), L"Rev 4", NULL);\r
+ break;\r
+ default:\r
+ ASSERT (FALSE);\r
+ break;\r
+ }\r
+}\r
+\r
/**\r
The entry point for Tcg2 configuration driver.\r
\r
\r
@retval EFI_ALREADY_STARTED The driver already exists in system.\r
@retval EFI_OUT_OF_RESOURCES Fail to execute entry point due to lack of resources.\r
- @retval EFI_SUCCES All the related protocols are installed on the driver.\r
+ @retval EFI_SUCCESS All the related protocols are installed on the driver.\r
@retval Others Fail to install protocols as indicated.\r
\r
**/\r
if (!EFI_ERROR (Status)) {\r
return EFI_ALREADY_STARTED;\r
}\r
- \r
+\r
//\r
// Create a private data structure.\r
//\r
mTcg2ConfigPrivateDate = PrivateData;\r
//\r
// Install private GUID.\r
- // \r
+ //\r
Status = gBS->InstallMultipleProtocolInterfaces (\r
&ImageHandle,\r
&gEfiCallerIdGuid,\r
);\r
ASSERT_EFI_ERROR (Status);\r
}\r
- \r
+\r
//\r
// Install Tcg2 configuration form\r
//\r
goto ErrorExit;\r
}\r
\r
+ InitializeTcg2VersionInfo (PrivateData);\r
+\r
return EFI_SUCCESS;\r
\r
ErrorExit:\r
if (PrivateData != NULL) {\r
UninstallTcg2ConfigForm (PrivateData);\r
- } \r
- \r
+ }\r
+\r
return Status;\r
}\r
\r
ImageHandle,\r
&gEfiCallerIdGuid,\r
(VOID **) &PrivateData\r
- ); \r
+ );\r
if (EFI_ERROR (Status)) {\r
- return Status; \r
+ return Status;\r
}\r
- \r
+\r
ASSERT (PrivateData->Signature == TCG2_CONFIG_PRIVATE_DATA_SIGNATURE);\r
\r
gBS->UninstallMultipleProtocolInterfaces (\r
- &ImageHandle,\r
+ ImageHandle,\r
&gEfiCallerIdGuid,\r
PrivateData,\r
NULL\r
);\r
- \r
+\r
UninstallTcg2ConfigForm (PrivateData);\r
\r
return EFI_SUCCESS;\r