/** @file\r
HII Config Access protocol implementation of TCG configuration module.\r
\r
-Copyright (c) 2011 - 2012, 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) 2011 - 2019, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#include "TcgConfigImpl.h"\r
\r
-CHAR16 mTcgStorageName[] = L"TCG_CONFIGURATION";\r
+CHAR16 mTcgStorageName[] = L"TCG_CONFIGURATION";\r
\r
-TCG_CONFIG_PRIVATE_DATA mTcgConfigPrivateDateTemplate = {\r
+TCG_CONFIG_PRIVATE_DATA mTcgConfigPrivateDateTemplate = {\r
TCG_CONFIG_PRIVATE_DATA_SIGNATURE,\r
{\r
TcgExtractConfig,\r
}\r
};\r
\r
-HII_VENDOR_DEVICE_PATH mTcgHiiVendorDevicePath = {\r
+HII_VENDOR_DEVICE_PATH mTcgHiiVendorDevicePath = {\r
{\r
{\r
HARDWARE_DEVICE_PATH,\r
HW_VENDOR_DP,\r
{\r
- (UINT8) (sizeof (VENDOR_DEVICE_PATH)),\r
- (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
+ (UINT8)(sizeof (VENDOR_DEVICE_PATH)),\r
+ (UINT8)((sizeof (VENDOR_DEVICE_PATH)) >> 8)\r
}\r
},\r
TCG_CONFIG_FORM_SET_GUID\r
{\r
END_DEVICE_PATH_TYPE,\r
END_ENTIRE_DEVICE_PATH_SUBTYPE,\r
- { \r
- (UINT8) (END_DEVICE_PATH_LENGTH),\r
- (UINT8) ((END_DEVICE_PATH_LENGTH) >> 8)\r
+ {\r
+ (UINT8)(END_DEVICE_PATH_LENGTH),\r
+ (UINT8)((END_DEVICE_PATH_LENGTH) >> 8)\r
}\r
}\r
};\r
**/\r
EFI_STATUS\r
GetTpmState (\r
- IN EFI_TCG_PROTOCOL *TcgProtocol,\r
- OUT BOOLEAN *TpmEnable, OPTIONAL\r
- OUT BOOLEAN *TpmActivate OPTIONAL\r
+ IN EFI_TCG_PROTOCOL *TcgProtocol,\r
+ OUT BOOLEAN *TpmEnable OPTIONAL,\r
+ OUT BOOLEAN *TpmActivate OPTIONAL\r
)\r
{\r
- EFI_STATUS Status;\r
- TPM_RSP_COMMAND_HDR *TpmRsp;\r
- UINT32 TpmSendSize;\r
- TPM_PERMANENT_FLAGS *TpmPermanentFlags;\r
- UINT8 CmdBuf[64];\r
+ EFI_STATUS Status;\r
+ TPM_RSP_COMMAND_HDR *TpmRsp;\r
+ UINT32 TpmSendSize;\r
+ TPM_PERMANENT_FLAGS *TpmPermanentFlags;\r
+ UINT8 CmdBuf[64];\r
\r
ASSERT (TcgProtocol != NULL);\r
- \r
+\r
//\r
// Get TPM Permanent flags (TpmEnable, TpmActivate)\r
//\r
if ((TpmEnable != NULL) || (TpmActivate != NULL)) {\r
TpmSendSize = sizeof (TPM_RQU_COMMAND_HDR) + sizeof (UINT32) * 3;\r
- *(UINT16*)&CmdBuf[0] = SwapBytes16 (TPM_TAG_RQU_COMMAND);\r
- *(UINT32*)&CmdBuf[2] = SwapBytes32 (TpmSendSize);\r
- *(UINT32*)&CmdBuf[6] = SwapBytes32 (TPM_ORD_GetCapability);\r
- \r
- *(UINT32*)&CmdBuf[10] = SwapBytes32 (TPM_CAP_FLAG);\r
- *(UINT32*)&CmdBuf[14] = SwapBytes32 (sizeof (TPM_CAP_FLAG_PERMANENT));\r
- *(UINT32*)&CmdBuf[18] = SwapBytes32 (TPM_CAP_FLAG_PERMANENT);\r
+ *(UINT16 *)&CmdBuf[0] = SwapBytes16 (TPM_TAG_RQU_COMMAND);\r
+ *(UINT32 *)&CmdBuf[2] = SwapBytes32 (TpmSendSize);\r
+ *(UINT32 *)&CmdBuf[6] = SwapBytes32 (TPM_ORD_GetCapability);\r
+\r
+ *(UINT32 *)&CmdBuf[10] = SwapBytes32 (TPM_CAP_FLAG);\r
+ *(UINT32 *)&CmdBuf[14] = SwapBytes32 (sizeof (TPM_CAP_FLAG_PERMANENT));\r
+ *(UINT32 *)&CmdBuf[18] = SwapBytes32 (TPM_CAP_FLAG_PERMANENT);\r
\r
Status = TcgProtocol->PassThroughToTpm (\r
TcgProtocol,\r
CmdBuf,\r
sizeof (CmdBuf),\r
CmdBuf\r
- ); \r
- TpmRsp = (TPM_RSP_COMMAND_HDR *) &CmdBuf[0];\r
+ );\r
+ TpmRsp = (TPM_RSP_COMMAND_HDR *)&CmdBuf[0];\r
if (EFI_ERROR (Status) || (TpmRsp->tag != SwapBytes16 (TPM_TAG_RSP_COMMAND)) || (TpmRsp->returnCode != 0)) {\r
return EFI_DEVICE_ERROR;\r
}\r
- \r
- TpmPermanentFlags = (TPM_PERMANENT_FLAGS *) &CmdBuf[sizeof (TPM_RSP_COMMAND_HDR) + sizeof (UINT32)];\r
+\r
+ TpmPermanentFlags = (TPM_PERMANENT_FLAGS *)&CmdBuf[sizeof (TPM_RSP_COMMAND_HDR) + sizeof (UINT32)];\r
\r
if (TpmEnable != NULL) {\r
*TpmEnable = (BOOLEAN) !TpmPermanentFlags->disable;\r
*TpmActivate = (BOOLEAN) !TpmPermanentFlags->deactivated;\r
}\r
}\r
- \r
- return EFI_SUCCESS; \r
+\r
+ return EFI_SUCCESS;\r
}\r
\r
/**\r
EFI_STATUS\r
EFIAPI\r
TcgExtractConfig (\r
- IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
- IN CONST EFI_STRING Request,\r
- OUT EFI_STRING *Progress,\r
- OUT EFI_STRING *Results\r
+ IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
+ IN CONST EFI_STRING Request,\r
+ OUT EFI_STRING *Progress,\r
+ OUT EFI_STRING *Results\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN BufferSize;\r
- TCG_CONFIGURATION Configuration;\r
- TCG_CONFIG_PRIVATE_DATA *PrivateData;\r
- EFI_STRING ConfigRequestHdr;\r
- EFI_STRING ConfigRequest;\r
- BOOLEAN AllocatedRequest;\r
- UINTN Size;\r
- BOOLEAN TpmEnable;\r
- BOOLEAN TpmActivate;\r
- CHAR16 State[32];\r
-\r
- if (Progress == NULL || Results == NULL) {\r
+ EFI_STATUS Status;\r
+ TCG_CONFIG_PRIVATE_DATA *PrivateData;\r
+ EFI_STRING ConfigRequestHdr;\r
+ EFI_STRING ConfigRequest;\r
+ BOOLEAN AllocatedRequest;\r
+ UINTN Size;\r
+ BOOLEAN TpmEnable;\r
+ BOOLEAN TpmActivate;\r
+\r
+ if ((Progress == NULL) || (Results == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
\r
//\r
// Convert buffer data to <ConfigResp> by helper function BlockToConfig()\r
- // \r
- ZeroMem (&Configuration, sizeof (TCG_CONFIGURATION));\r
-\r
- Configuration.TpmOperation = PHYSICAL_PRESENCE_ENABLE;\r
- Configuration.HideTpm = (BOOLEAN) (PcdGetBool (PcdHideTpmSupport) && PcdGetBool (PcdHideTpm));\r
- //\r
- // Read the original value of HideTpm from PrivateData which won't be changed by Setup in this boot.\r
//\r
- Configuration.OriginalHideTpm = PrivateData->HideTpm;\r
+ PrivateData->Configuration->TpmOperation = PHYSICAL_PRESENCE_NO_ACTION;\r
\r
//\r
- // Display current TPM state.\r
+ // Get current TPM state.\r
//\r
if (PrivateData->TcgProtocol != NULL) {\r
Status = GetTpmState (PrivateData->TcgProtocol, &TpmEnable, &TpmActivate);\r
return Status;\r
}\r
\r
- UnicodeSPrint (\r
- State,\r
- sizeof (State),\r
- L"%s, and %s",\r
- TpmEnable ? L"Enabled" : L"Disabled",\r
- TpmActivate ? L"Activated" : L"Deactivated"\r
- );\r
- Configuration.TpmEnable = TpmEnable;\r
- Configuration.TpmActivate = TpmActivate;\r
-\r
- HiiSetString (PrivateData->HiiHandle, STRING_TOKEN (STR_TPM_STATE_CONTENT), State, NULL);\r
+ PrivateData->Configuration->TpmEnable = TpmEnable;\r
+ PrivateData->Configuration->TpmActivate = TpmActivate;\r
}\r
\r
- BufferSize = sizeof (Configuration);\r
ConfigRequest = Request;\r
if ((Request == NULL) || (StrStr (Request, L"OFFSET") == NULL)) {\r
//\r
// followed by "&OFFSET=0&WIDTH=WWWWWWWWWWWWWWWW" followed by a Null-terminator\r
//\r
ConfigRequestHdr = HiiConstructConfigHdr (&gTcgConfigFormSetGuid, mTcgStorageName, PrivateData->DriverHandle);\r
- Size = (StrLen (ConfigRequestHdr) + 32 + 1) * sizeof (CHAR16);\r
- ConfigRequest = AllocateZeroPool (Size);\r
+ Size = (StrLen (ConfigRequestHdr) + 32 + 1) * sizeof (CHAR16);\r
+ ConfigRequest = AllocateZeroPool (Size);\r
ASSERT (ConfigRequest != NULL);\r
AllocatedRequest = TRUE;\r
- UnicodeSPrint (ConfigRequest, Size, L"%s&OFFSET=0&WIDTH=%016LX", ConfigRequestHdr, (UINT64) BufferSize);\r
+ UnicodeSPrint (ConfigRequest, Size, L"%s&OFFSET=0&WIDTH=%016LX", ConfigRequestHdr, sizeof (TCG_CONFIGURATION));\r
FreePool (ConfigRequestHdr);\r
}\r
\r
Status = gHiiConfigRouting->BlockToConfig (\r
gHiiConfigRouting,\r
ConfigRequest,\r
- (UINT8 *) &Configuration,\r
- BufferSize,\r
+ (UINT8 *)PrivateData->Configuration,\r
+ sizeof (TCG_CONFIGURATION),\r
Results,\r
Progress\r
);\r
if (AllocatedRequest) {\r
FreePool (ConfigRequest);\r
}\r
+\r
//\r
// Set Progress string to the original request string.\r
//\r
EFI_STATUS\r
EFIAPI\r
TcgRouteConfig (\r
- IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
- IN CONST EFI_STRING Configuration,\r
- OUT EFI_STRING *Progress\r
+ IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
+ IN CONST EFI_STRING Configuration,\r
+ OUT EFI_STRING *Progress\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN BufferSize;\r
- TCG_CONFIGURATION TcgConfiguration;\r
+ EFI_STATUS Status;\r
+ UINTN BufferSize;\r
+ TCG_CONFIGURATION TcgConfiguration;\r
\r
- if (Configuration == NULL || Progress == NULL) {\r
+ if ((Configuration == NULL) || (Progress == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
// Convert <ConfigResp> to buffer data by helper function ConfigToBlock()\r
//\r
BufferSize = sizeof (TCG_CONFIGURATION);\r
- Status = gHiiConfigRouting->ConfigToBlock (\r
- gHiiConfigRouting,\r
- Configuration,\r
- (UINT8 *) &TcgConfiguration,\r
- &BufferSize,\r
- Progress\r
- );\r
+ Status = gHiiConfigRouting->ConfigToBlock (\r
+ gHiiConfigRouting,\r
+ Configuration,\r
+ (UINT8 *)&TcgConfiguration,\r
+ &BufferSize,\r
+ Progress\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
- PcdSetBool (PcdHideTpm, TcgConfiguration.HideTpm);\r
-\r
return EFI_SUCCESS;\r
}\r
\r
**/\r
EFI_STATUS\r
SavePpRequest (\r
- IN UINT8 PpRequest\r
+ IN UINT8 PpRequest\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN DataSize;\r
- EFI_PHYSICAL_PRESENCE PpData;\r
+ EFI_STATUS Status;\r
+ UINTN DataSize;\r
+ EFI_PHYSICAL_PRESENCE PpData;\r
\r
//\r
// Save TPM command to variable.\r
//\r
DataSize = sizeof (EFI_PHYSICAL_PRESENCE);\r
- Status = gRT->GetVariable (\r
- PHYSICAL_PRESENCE_VARIABLE,\r
- &gEfiPhysicalPresenceGuid,\r
- NULL,\r
- &DataSize,\r
- &PpData\r
- );\r
+ Status = gRT->GetVariable (\r
+ PHYSICAL_PRESENCE_VARIABLE,\r
+ &gEfiPhysicalPresenceGuid,\r
+ NULL,\r
+ &DataSize,\r
+ &PpData\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
- } \r
- \r
+ }\r
+\r
PpData.PPRequest = PpRequest;\r
- Status = gRT->SetVariable (\r
- PHYSICAL_PRESENCE_VARIABLE,\r
- &gEfiPhysicalPresenceGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
- DataSize,\r
- &PpData\r
- );\r
- if (EFI_ERROR(Status)) {\r
+ Status = gRT->SetVariable (\r
+ PHYSICAL_PRESENCE_VARIABLE,\r
+ &gEfiPhysicalPresenceGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,\r
+ DataSize,\r
+ &PpData\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
\r
EFI_STATUS\r
EFIAPI\r
TcgCallback (\r
- IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
- IN EFI_BROWSER_ACTION Action,\r
- IN EFI_QUESTION_ID QuestionId,\r
- IN UINT8 Type,\r
- IN EFI_IFR_TYPE_VALUE *Value,\r
- OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest\r
+ IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL *This,\r
+ IN EFI_BROWSER_ACTION Action,\r
+ IN EFI_QUESTION_ID QuestionId,\r
+ IN UINT8 Type,\r
+ IN EFI_IFR_TYPE_VALUE *Value,\r
+ OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest\r
)\r
{\r
+ TCG_CONFIG_PRIVATE_DATA *PrivateData;\r
+ CHAR16 State[32];\r
+\r
if ((This == NULL) || (Value == NULL) || (ActionRequest == NULL)) {\r
return EFI_INVALID_PARAMETER;\r
}\r
\r
+ if (Action == EFI_BROWSER_ACTION_FORM_OPEN) {\r
+ if (QuestionId == KEY_TPM_ACTION) {\r
+ PrivateData = TCG_CONFIG_PRIVATE_DATA_FROM_THIS (This);\r
+ UnicodeSPrint (\r
+ State,\r
+ sizeof (State),\r
+ L"%s, and %s",\r
+ PrivateData->Configuration->TpmEnable ? L"Enabled" : L"Disabled",\r
+ PrivateData->Configuration->TpmActivate ? L"Activated" : L"Deactivated"\r
+ );\r
+ HiiSetString (PrivateData->HiiHandle, STRING_TOKEN (STR_TPM_STATE_CONTENT), State, NULL);\r
+ }\r
+\r
+ return EFI_SUCCESS;\r
+ }\r
+\r
if ((Action != EFI_BROWSER_ACTION_CHANGED) || (QuestionId != KEY_TPM_ACTION)) {\r
return EFI_UNSUPPORTED;\r
}\r
\r
SavePpRequest (Value->u8);\r
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_SUBMIT;\r
- \r
+\r
return EFI_SUCCESS;\r
}\r
\r
EFI_STATUS Status;\r
EFI_HII_HANDLE HiiHandle;\r
EFI_HANDLE DriverHandle;\r
- VOID *StartOpCodeHandle;\r
- VOID *EndOpCodeHandle;\r
- EFI_IFR_GUID_LABEL *StartLabel;\r
- EFI_IFR_GUID_LABEL *EndLabel;\r
-\r
EFI_HII_CONFIG_ACCESS_PROTOCOL *ConfigAccess;\r
\r
DriverHandle = NULL;\r
ConfigAccess = &PrivateData->ConfigAccess;\r
- Status = gBS->InstallMultipleProtocolInterfaces (\r
- &DriverHandle,\r
- &gEfiDevicePathProtocolGuid,\r
- &mTcgHiiVendorDevicePath,\r
- &gEfiHiiConfigAccessProtocolGuid,\r
- ConfigAccess,\r
- NULL\r
- );\r
+ Status = gBS->InstallMultipleProtocolInterfaces (\r
+ &DriverHandle,\r
+ &gEfiDevicePathProtocolGuid,\r
+ &mTcgHiiVendorDevicePath,\r
+ &gEfiHiiConfigAccessProtocolGuid,\r
+ ConfigAccess,\r
+ NULL\r
+ );\r
if (EFI_ERROR (Status)) {\r
return Status;\r
}\r
&gEfiHiiConfigAccessProtocolGuid,\r
ConfigAccess,\r
NULL\r
- ); \r
+ );\r
\r
return EFI_OUT_OF_RESOURCES;\r
}\r
- \r
- PrivateData->HiiHandle = HiiHandle;\r
-\r
- //\r
- // Remove the Hide TPM question from the IFR\r
- //\r
- if (!PcdGetBool (PcdHideTpmSupport)) {\r
- //\r
- // Allocate space for creation of UpdateData Buffer\r
- //\r
- StartOpCodeHandle = HiiAllocateOpCodeHandle ();\r
- ASSERT (StartOpCodeHandle != NULL);\r
-\r
- EndOpCodeHandle = HiiAllocateOpCodeHandle ();\r
- ASSERT (EndOpCodeHandle != NULL);\r
-\r
- //\r
- // Create Hii Extend Label OpCode as the start opcode\r
- //\r
- StartLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (StartOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
- StartLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
- StartLabel->Number = LABEL_TCG_CONFIGURATION_HIDETPM;\r
\r
- //\r
- // Create Hii Extend Label OpCode as the end opcode\r
- //\r
- EndLabel = (EFI_IFR_GUID_LABEL *) HiiCreateGuidOpCode (EndOpCodeHandle, &gEfiIfrTianoGuid, NULL, sizeof (EFI_IFR_GUID_LABEL));\r
- EndLabel->ExtendOpCode = EFI_IFR_EXTEND_OP_LABEL;\r
- EndLabel->Number = LABEL_END;\r
- \r
- HiiUpdateForm (HiiHandle, NULL, TCG_CONFIGURATION_FORM_ID, StartOpCodeHandle, EndOpCodeHandle);\r
-\r
- HiiFreeOpCodeHandle (StartOpCodeHandle);\r
- HiiFreeOpCodeHandle (EndOpCodeHandle);\r
- }\r
+ PrivateData->HiiHandle = HiiHandle;\r
\r
- return EFI_SUCCESS; \r
+ return EFI_SUCCESS;\r
}\r
\r
/**\r
**/\r
VOID\r
UninstallTcgConfigForm (\r
- IN OUT TCG_CONFIG_PRIVATE_DATA *PrivateData\r
+ IN OUT TCG_CONFIG_PRIVATE_DATA *PrivateData\r
)\r
{\r
//\r
);\r
PrivateData->DriverHandle = NULL;\r
}\r
- \r
+\r
+ if (PrivateData->Configuration != NULL) {\r
+ FreePool (PrivateData->Configuration);\r
+ }\r
+\r
FreePool (PrivateData);\r
}\r