VOID\r
)\r
{\r
- EFI_STATUS Status;\r
- OPAL_EXTRA_INFO_VAR OpalExtraInfo;\r
- UINTN DataSize;\r
+ UINT32 PpStorageFlag;\r
+ EFI_STRING NewString;\r
\r
gHiiConfiguration.NumDisks = GetDeviceCount();\r
\r
- DataSize = sizeof (OPAL_EXTRA_INFO_VAR);\r
- Status = gRT->GetVariable (\r
- OPAL_EXTRA_INFO_VAR_NAME,\r
- &gOpalExtraInfoVariableGuid,\r
- NULL,\r
- &DataSize,\r
- &OpalExtraInfo\r
- );\r
- if (!EFI_ERROR (Status)) {\r
- gHiiConfiguration.EnableBlockSid = OpalExtraInfo.EnableBlockSid;\r
+ //\r
+ // Update the BlockSID status string.\r
+ //\r
+ PpStorageFlag = Tcg2PhysicalPresenceLibGetManagementFlags ();\r
+\r
+ if ((PpStorageFlag & TCG2_BIOS_STORAGE_MANAGEMENT_FLAG_ENABLE_BLOCK_SID) != 0) {\r
+ NewString = HiiGetString (gHiiPackageListHandle, STRING_TOKEN(STR_ENABLED), NULL);\r
+ if (NewString == NULL) {\r
+ DEBUG ((DEBUG_INFO, "HiiSetCurrentConfiguration: HiiGetString( ) failed\n"));\r
+ return;\r
+ }\r
+ } else {\r
+ NewString = HiiGetString (gHiiPackageListHandle, STRING_TOKEN(STR_DISABLED), NULL);\r
+ if (NewString == NULL) {\r
+ DEBUG ((DEBUG_INFO, "HiiSetCurrentConfiguration: HiiGetString( ) failed\n"));\r
+ return;\r
+ }\r
}\r
+ HiiSetString(gHiiPackageListHandle, STRING_TOKEN(STR_BLOCKSID_STATUS1), NewString, NULL);\r
+ FreePool (NewString);\r
+\r
+ if ((PpStorageFlag & TCG2_BIOS_STORAGE_MANAGEMENT_FLAG_PP_REQUIRED_FOR_ENABLE_BLOCK_SID) != 0) {\r
+ NewString = HiiGetString (gHiiPackageListHandle, STRING_TOKEN(STR_DISK_INFO_ENABLE_BLOCKSID_TRUE), NULL);\r
+ if (NewString == NULL) {\r
+ DEBUG ((DEBUG_INFO, "HiiSetCurrentConfiguration: HiiGetString( ) failed\n"));\r
+ return;\r
+ }\r
+ } else {\r
+ NewString = HiiGetString (gHiiPackageListHandle, STRING_TOKEN(STR_DISK_INFO_ENABLE_BLOCKSID_FALSE), NULL);\r
+ if (NewString == NULL) {\r
+ DEBUG ((DEBUG_INFO, "HiiSetCurrentConfiguration: HiiGetString( ) failed\n"));\r
+ return;\r
+ }\r
+ }\r
+ HiiSetString(gHiiPackageListHandle, STRING_TOKEN(STR_BLOCKSID_STATUS2), NewString, NULL);\r
+ FreePool (NewString);\r
+\r
+ if ((PpStorageFlag & TCG2_BIOS_STORAGE_MANAGEMENT_FLAG_PP_REQUIRED_FOR_DISABLE_BLOCK_SID) != 0) {\r
+ NewString = HiiGetString (gHiiPackageListHandle, STRING_TOKEN(STR_DISK_INFO_DISABLE_BLOCKSID_TRUE), NULL);\r
+ if (NewString == NULL) {\r
+ DEBUG ((DEBUG_INFO, "HiiSetCurrentConfiguration: HiiGetString( ) failed\n"));\r
+ return;\r
+ }\r
+ } else {\r
+ NewString = HiiGetString (gHiiPackageListHandle, STRING_TOKEN(STR_DISK_INFO_DISABLE_BLOCKSID_FALSE), NULL);\r
+ if (NewString == NULL) {\r
+ DEBUG ((DEBUG_INFO, "HiiSetCurrentConfiguration: HiiGetString( ) failed\n"));\r
+ return;\r
+ }\r
+ }\r
+ HiiSetString(gHiiPackageListHandle, STRING_TOKEN(STR_BLOCKSID_STATUS3), NewString, NULL);\r
+ FreePool (NewString);\r
}\r
\r
/**\r
{\r
HII_KEY HiiKey;\r
UINT8 HiiKeyId;\r
+ UINT32 PpRequest;\r
\r
if (ActionRequest != NULL) {\r
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_NONE;\r
\r
case HII_KEY_ID_ENTER_PASSWORD:\r
return HiiPasswordEntered(Value->string);\r
+\r
+ case HII_KEY_ID_ENTER_PSID:\r
+ return HiiPsidRevert(Value->string);\r
+\r
}\r
} else if (Action == EFI_BROWSER_ACTION_CHANGED) {\r
switch (HiiKeyId) {\r
- case HII_KEY_ID_ENTER_PSID:\r
- HiiPsidRevert();\r
- *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY;\r
- return EFI_SUCCESS;\r
-\r
case HII_KEY_ID_BLOCKSID:\r
- HiiSetBlockSid(Value->b);\r
+ switch (Value->u8) {\r
+ case 0:\r
+ PpRequest = TCG2_PHYSICAL_PRESENCE_NO_ACTION;\r
+ break;\r
+\r
+ case 1:\r
+ PpRequest = TCG2_PHYSICAL_PRESENCE_ENABLE_BLOCK_SID;\r
+ break;\r
+\r
+ case 2:\r
+ PpRequest = TCG2_PHYSICAL_PRESENCE_DISABLE_BLOCK_SID;\r
+ break;\r
+\r
+ case 3:\r
+ PpRequest = TCG2_PHYSICAL_PRESENCE_SET_PP_REQUIRED_FOR_ENABLE_BLOCK_SID_FUNC_TRUE;\r
+ break;\r
+\r
+ case 4:\r
+ PpRequest = TCG2_PHYSICAL_PRESENCE_SET_PP_REQUIRED_FOR_ENABLE_BLOCK_SID_FUNC_FALSE;\r
+ break;\r
+\r
+ case 5:\r
+ PpRequest = TCG2_PHYSICAL_PRESENCE_SET_PP_REQUIRED_FOR_DISABLE_BLOCK_SID_FUNC_TRUE;\r
+ break;\r
+\r
+ case 6:\r
+ PpRequest = TCG2_PHYSICAL_PRESENCE_SET_PP_REQUIRED_FOR_DISABLE_BLOCK_SID_FUNC_FALSE;\r
+ break;\r
+\r
+ default:\r
+ PpRequest = TCG2_PHYSICAL_PRESENCE_NO_ACTION;\r
+ DEBUG ((DEBUG_ERROR, "Invalid value input!\n"));\r
+ break;\r
+ }\r
+ HiiSetBlockSidAction(PpRequest);\r
+\r
*ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY;\r
return EFI_SUCCESS;\r
+\r
+ default:\r
+ break;\r
}\r
}\r
\r
/**\r
Reverts the Opal disk to factory default.\r
\r
+ @param PsidStringId The string id for the PSID info.\r
+\r
@retval EFI_SUCCESS Do the required action success.\r
\r
**/\r
EFI_STATUS\r
HiiPsidRevert(\r
- VOID\r
+ EFI_STRING_ID PsidStringId\r
)\r
{\r
CHAR8 Response[DEFAULT_RESPONSE_SIZE];\r
OPAL_DISK *OpalDisk;\r
TCG_RESULT Ret;\r
OPAL_SESSION Session;\r
+ CHAR16 *UnicodeStr;\r
+ UINT8 TmpBuf[PSID_CHARACTER_STRING_END_LENGTH];\r
\r
Ret = TcgResultFailure;\r
\r
- OpalHiiGetBrowserData();\r
-\r
- UnicodeStrToAsciiStrS (gHiiConfiguration.Psid, (CHAR8*)Psid.Psid, PSID_CHARACTER_LENGTH);\r
+ UnicodeStr = HiiGetString (gHiiPackageListHandle, PsidStringId, NULL);\r
+ ZeroMem (TmpBuf, sizeof (TmpBuf));\r
+ UnicodeStrToAsciiStrS (UnicodeStr, (CHAR8*)TmpBuf, PSID_CHARACTER_STRING_END_LENGTH);\r
+ CopyMem (Psid.Psid, TmpBuf, PSID_CHARACTER_LENGTH);\r
+ HiiSetString (gHiiPackageListHandle, PsidStringId, L"", NULL);\r
+ ZeroMem (TmpBuf, sizeof (TmpBuf));\r
+ ZeroMem (UnicodeStr, StrSize (UnicodeStr));\r
+ FreePool (UnicodeStr);\r
\r
OpalDisk = HiiGetOpalDiskCB (gHiiConfiguration.SelectedDiskIndex);\r
if (OpalDisk != NULL) {\r
Ret = OpalSupportPsidRevert(&Session, Psid.Psid, (UINT32)sizeof(Psid.Psid), OpalDisk->OpalDevicePath);\r
}\r
\r
+ ZeroMem (Psid.Psid, PSID_CHARACTER_LENGTH);\r
+\r
if (Ret == TcgResultSuccess) {\r
AsciiSPrint( Response, DEFAULT_RESPONSE_SIZE, "%a", "PSID Revert: Success" );\r
} else {\r
EFI_STRING_ID Str\r
)\r
{\r
- OPAL_DISK* OpalDisk;\r
- CHAR8 Password[MAX_PASSWORD_CHARACTER_LENGTH + 1];\r
+ OPAL_DISK* OpalDisk;\r
+ CHAR8 Password[MAX_PASSWORD_CHARACTER_LENGTH + 1];\r
CHAR16* UniStr;\r
UINT32 PassLength;\r
EFI_STATUS Status;\r
if (UniStr == NULL) {\r
return EFI_NOT_FOUND;\r
}\r
+\r
+ HiiSetString(gHiiPackageListHandle, Str, L"", NULL);\r
+\r
PassLength = (UINT32) StrLen (UniStr);\r
if (PassLength >= sizeof(Password)) {\r
HiiSetFormString(STRING_TOKEN(STR_ACTION_STATUS), "Password too long");\r
- gBS->FreePool(UniStr);\r
+ ZeroMem (UniStr, StrSize (UniStr));\r
+ FreePool(UniStr);\r
return EFI_BUFFER_TOO_SMALL;\r
}\r
\r
UnicodeStrToAsciiStrS (UniStr, Password, sizeof (Password));\r
- gBS->FreePool(UniStr);\r
+ ZeroMem (UniStr, StrSize (UniStr));\r
+ FreePool(UniStr);\r
\r
if (gHiiConfiguration.SelectedAction == HII_KEY_ID_GOTO_UNLOCK) {\r
Status = HiiUnlock (OpalDisk, Password, PassLength);\r
Status = HiiSetPassword(OpalDisk, Password, PassLength);\r
}\r
\r
+ ZeroMem (Password, sizeof (Password));\r
+\r
OpalHiiSetBrowserData ();\r
\r
return Status;\r
}\r
\r
/**\r
- Update block sid info.\r
+ Send BlockSid request through TPM physical presence module.\r
\r
- @param Enable Enable/disable BlockSid.\r
+ @param PpRequest TPM physical presence operation request.\r
\r
@retval EFI_SUCCESS Do the required action success.\r
@retval Others Other error occur.\r
\r
**/\r
EFI_STATUS\r
-HiiSetBlockSid (\r
- BOOLEAN Enable\r
+HiiSetBlockSidAction (\r
+ IN UINT32 PpRequest\r
)\r
{\r
- EFI_STATUS Status;\r
- OPAL_EXTRA_INFO_VAR OpalExtraInfo;\r
- UINTN DataSize;\r
-\r
- Status = EFI_SUCCESS;\r
-\r
- OpalExtraInfo.EnableBlockSid = Enable;\r
- DataSize = sizeof (OPAL_EXTRA_INFO_VAR);\r
- Status = gRT->SetVariable (\r
- OPAL_EXTRA_INFO_VAR_NAME,\r
- &gOpalExtraInfoVariableGuid,\r
- EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
- DataSize,\r
- &OpalExtraInfo\r
- );\r
+ UINT32 ReturnCode;\r
+ EFI_STATUS Status;\r
+\r
+ ReturnCode = Tcg2PhysicalPresenceLibSubmitRequestToPreOSFunction (PpRequest, 0);\r
+ if (ReturnCode == TCG_PP_SUBMIT_REQUEST_TO_PREOS_SUCCESS) {\r
+ Status = EFI_SUCCESS;\r
+ } else if (ReturnCode == TCG_PP_SUBMIT_REQUEST_TO_PREOS_GENERAL_FAILURE) {\r
+ Status = EFI_OUT_OF_RESOURCES;\r
+ } else if (ReturnCode == TCG_PP_SUBMIT_REQUEST_TO_PREOS_NOT_IMPLEMENTED) {\r
+ Status = EFI_UNSUPPORTED;\r
+ } else {\r
+ Status = EFI_DEVICE_ERROR;\r
+ }\r
\r
return Status;\r
}\r
)\r
{\r
EFI_STATUS Status;\r
+ EFI_STRING ConfigRequest;\r
+ EFI_STRING ConfigRequestHdr;\r
+ UINTN BufferSize;\r
+ UINTN Size;\r
+ BOOLEAN AllocatedRequest;\r
+ EFI_HANDLE DriverHandle;\r
\r
//\r
// Check for valid parameters\r
return EFI_NOT_FOUND;\r
}\r
\r
+ AllocatedRequest = FALSE;\r
+ BufferSize = sizeof (OPAL_HII_CONFIGURATION);\r
+ ConfigRequest = Request;\r
+ if ((Request == NULL) || (StrStr (Request, L"OFFSET") == NULL)) {\r
+ //\r
+ // Request has no request element, construct full request string.\r
+ // Allocate and fill a buffer large enough to hold the <ConfigHdr> template\r
+ // followed by "&OFFSET=0&WIDTH=WWWWWWWWWWWWWWWW" followed by a Null-terminator\r
+ //\r
+ DriverHandle = HiiGetDriverImageHandleCB();\r
+ ConfigRequestHdr = HiiConstructConfigHdr (&gHiiSetupVariableGuid, OpalPasswordStorageName, DriverHandle);\r
+ Size = (StrLen (ConfigRequestHdr) + 32 + 1) * sizeof (CHAR16);\r
+ ConfigRequest = AllocateZeroPool (Size);\r
+ if (ConfigRequest == NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+ AllocatedRequest = TRUE;\r
+ UnicodeSPrint (ConfigRequest, Size, L"%s&OFFSET=0&WIDTH=%016LX", ConfigRequestHdr, (UINT64)BufferSize);\r
+ FreePool (ConfigRequestHdr);\r
+ }\r
+\r
//\r
// Convert Buffer Data to <ConfigResp> by helper function BlockToConfig( )\r
//\r
Status = gHiiConfigRouting->BlockToConfig(\r
gHiiConfigRouting,\r
- Request,\r
+ ConfigRequest,\r
(UINT8*)&gHiiConfiguration,\r
sizeof(OPAL_HII_CONFIGURATION),\r
Results,\r
Progress\r
);\r
\r
+ //\r
+ // Free the allocated config request string.\r
+ //\r
+ if (AllocatedRequest) {\r
+ FreePool (ConfigRequest);\r
+ ConfigRequest = NULL;\r
+ }\r
+\r
+ //\r
+ // Set Progress string to the original request string.\r
+ //\r
+ if (Request == NULL) {\r
+ *Progress = NULL;\r
+ } else if (StrStr (Request, L"OFFSET") == NULL) {\r
+ *Progress = Request + StrLen (Request);\r
+ }\r
+\r
return (Status);\r
}\r
\r