Update the implementation to use PP BlockSID related actions.
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Chao Zhang <chao.b.zhang@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Eric Dong <eric.dong@intel.com>
Signed-off-by: Star Zeng <star.zeng@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
IN VOID *Context\r
)\r
{\r
- EFI_STATUS Status;\r
- OPAL_DRIVER_DEVICE* Itr;\r
- TCG_RESULT Result;\r
- OPAL_EXTRA_INFO_VAR OpalExtraInfo;\r
- UINTN DataSize;\r
- OPAL_SESSION Session;\r
+ OPAL_DRIVER_DEVICE *Itr;\r
+ TCG_RESULT Result;\r
+ OPAL_SESSION Session;\r
+ UINT32 PpStorageFlag;\r
\r
gBS->CloseEvent (Event);\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
- return;\r
- }\r
-\r
- if (OpalExtraInfo.EnableBlockSid == TRUE) {\r
+ PpStorageFlag = Tcg2PhysicalPresenceLibGetManagementFlags ();\r
+ if ((PpStorageFlag & TCG2_BIOS_STORAGE_MANAGEMENT_FLAG_ENABLE_BLOCK_SID) != 0) {\r
//\r
// Send BlockSID command to each Opal disk\r
//\r
\r
#include <PiDxe.h>\r
\r
-#include <Guid/OpalPasswordExtraInfoVariable.h>\r
-\r
#include <Protocol/PciIo.h>\r
#include <Protocol/SmmCommunication.h>\r
#include <Protocol/BlockIo.h>\r
#include <Library/UefiHiiServicesLib.h>\r
#include <Library/TcgStorageOpalLib.h>\r
#include <Library/OpalPasswordSupportLib.h>\r
+#include <Library/Tcg2PhysicalPresenceLib.h>\r
\r
#define EFI_DRIVER_NAME_UNICODE L"1.0 UEFI Opal Driver"\r
\r
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
} else if (Action == EFI_BROWSER_ACTION_CHANGED) {\r
switch (HiiKeyId) {\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
**/\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
#string STR_DISK_INFO_REVERT #language en-US "Admin Revert to factory default and Disable"\r
#string STR_DISK_INFO_DISABLE_USER #language en-US "Disable User"\r
#string STR_DISK_INFO_ENABLE_FEATURE #language en-US "Enable Feature"\r
-#string STR_DISK_INFO_ENABLE_BLOCKSID #language en-US "Enable BlockSID"\r
-#string STR_ENABLED #language en-US "Enabled"\r
-#string STR_DISABLED #language en-US "Disabled"\r
+#string STR_DISK_INFO_ENABLE_BLOCKSID #language en-US "TCG Storage Action"\r
+#string STR_ENABLED #language en-US "Enable BlockSID"\r
+#string STR_DISABLED #language en-US "Disable BlockSID"\r
+\r
+#string STR_NONE #language en-US "None"\r
+#string STR_DISK_INFO_ENABLE_BLOCKSID_TRUE #language en-US "Require physical presence when remote enable BlockSID"\r
+#string STR_DISK_INFO_ENABLE_BLOCKSID_FALSE #language en-US "Not require physical presence when remote enable BlockSID"\r
+#string STR_DISK_INFO_DISABLE_BLOCKSID_TRUE #language en-US "Require physical presence when remote disable BlockSID"\r
+#string STR_DISK_INFO_DISABLE_BLOCKSID_FALSE #language en-US "Not require physical presence when remote disable BlockSID"\r
+\r
+#string STR_BLOCKSID_STATUS_HELP #language en-US "BlockSID action change status"\r
+#string STR_BLOCKSID_STATUS #language en-US "Current BlockSID Status:"\r
+#string STR_BLOCKSID_STATUS1 #language en-US ""\r
+#string STR_BLOCKSID_STATUS2 #language en-US ""\r
+#string STR_BLOCKSID_STATUS3 #language en-US ""\r
\r
#string STR_DISK_INFO_GOTO_LOCK_HELP #language en-US "Lock the disk"\r
#string STR_DISK_INFO_GOTO_UNLOCK_HELP #language en-US "Unlock the disk"\r
#string STR_DISK_INFO_GOTO_PSID_REVERT_HELP #language en-US "Revert the disk to factory defaults"\r
#string STR_DISK_INFO_GOTO_DISABLE_USER_HELP #language en-US "Disable User"\r
#string STR_DISK_INFO_GOTO_ENABLE_FEATURE_HELP #language en-US "Enable Feature"\r
-#string STR_DISK_INFO_GOTO_ENABLE_BLOCKSID_HELP #language en-US "Enable to send BlockSID command"\r
+#string STR_DISK_INFO_GOTO_ENABLE_BLOCKSID_HELP #language en-US "Change BlockSID actions, includes enable or disable BlockSID, Require or not require physical presence when remote enable or disable BlockSID"\r
\r
///////////////////////////////// DISK ACTION MENU FORM /////////////////////////////////\r
#string STR_DISK_ACTION_LBL #language en-US " "\r
/**\r
Update block sid info.\r
\r
- @param Enable Enable/disable BlockSid.\r
+ @param PpRequest Input the Pp 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
+ UINT32 PpRequest\r
);\r
\r
/**\r
OpalPasswordSupportLib\r
UefiLib\r
TcgStorageOpalLib\r
+ Tcg2PhysicalPresenceLib\r
\r
[Protocols]\r
gEfiHiiConfigAccessProtocolGuid ## PRODUCES\r
\r
subtitle text = STRING_TOKEN(STR_NULL);\r
\r
+ grayoutif TRUE;\r
+ text\r
+ help = STRING_TOKEN(STR_BLOCKSID_STATUS_HELP),\r
+ text = STRING_TOKEN(STR_BLOCKSID_STATUS);\r
+ text\r
+ help = STRING_TOKEN(STR_BLOCKSID_STATUS_HELP),\r
+ text = STRING_TOKEN(STR_BLOCKSID_STATUS1);\r
+ text\r
+ help = STRING_TOKEN(STR_BLOCKSID_STATUS_HELP),\r
+ text = STRING_TOKEN(STR_BLOCKSID_STATUS2);\r
+ text\r
+ help = STRING_TOKEN(STR_BLOCKSID_STATUS_HELP),\r
+ text = STRING_TOKEN(STR_BLOCKSID_STATUS3);\r
+ subtitle text = STRING_TOKEN(STR_NULL);\r
+ endif;\r
+\r
oneof varid = OpalHiiConfig.EnableBlockSid,\r
questionid = 0x8017, // 32791,\r
prompt = STRING_TOKEN(STR_DISK_INFO_ENABLE_BLOCKSID),\r
help = STRING_TOKEN(STR_DISK_INFO_GOTO_ENABLE_BLOCKSID_HELP),\r
flags = INTERACTIVE,\r
- option text = STRING_TOKEN(STR_DISABLED), value = 0, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;\r
+ option text = STRING_TOKEN(STR_NONE), value = 0, flags = DEFAULT | MANUFACTURING | RESET_REQUIRED;\r
option text = STRING_TOKEN(STR_ENABLED), value = 1, flags = RESET_REQUIRED;\r
+ option text = STRING_TOKEN(STR_DISABLED), value = 2, flags = RESET_REQUIRED;\r
+ option text = STRING_TOKEN(STR_DISK_INFO_ENABLE_BLOCKSID_TRUE), value = 3, flags = RESET_REQUIRED;\r
+ option text = STRING_TOKEN(STR_DISK_INFO_ENABLE_BLOCKSID_FALSE), value = 4, flags = RESET_REQUIRED;\r
+ option text = STRING_TOKEN(STR_DISK_INFO_DISABLE_BLOCKSID_TRUE), value = 5, flags = RESET_REQUIRED;\r
+ option text = STRING_TOKEN(STR_DISK_INFO_DISABLE_BLOCKSID_FALSE), value = 6, flags = RESET_REQUIRED;\r
endoneof;\r
\r
+\r
+\r
endform; // MAIN MENU FORM\r
\r
//\r