]> git.proxmox.com Git - mirror_edk2.git/commitdiff
SecurityPkg OpalPasswordDxe: Use PP actions to enable BlockSID
authorEric Dong <eric.dong@intel.com>
Thu, 2 Jun 2016 07:20:17 +0000 (15:20 +0800)
committerStar Zeng <star.zeng@intel.com>
Mon, 28 Nov 2016 06:50:43 +0000 (14:50 +0800)
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>
SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalDriver.c
SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalDriver.h
SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalHii.c
SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalHiiFormStrings.uni
SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalHiiPrivate.h
SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalPasswordDxe.inf
SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalPasswordForm.vfr

index 91324cd61df02b44e0384036f143872c781d395b..cd0c5a4096a083d5eebb8baa66ac1d81ab4e7d12 100644 (file)
@@ -417,28 +417,15 @@ ReadyToBootCallback (
   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
index 213c139e0145d17d3acdb7ae6d7c1e89642ee6c7..7761d64cbb28628fab88c52ddce6232f4d80a979 100644 (file)
@@ -17,8 +17,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \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
@@ -40,6 +38,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #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
index 1e4987f9a0f32be4df6cf79b44101386b8a3de05..4f82c1c545eef8a644e7b5604b316260f152247d 100644 (file)
@@ -90,23 +90,63 @@ HiiSetCurrentConfiguration(
   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
@@ -400,6 +440,7 @@ DriverCallback(
 {\r
   HII_KEY    HiiKey;\r
   UINT8      HiiKeyId;\r
+  UINT32     PpRequest;\r
 \r
   if (ActionRequest != NULL) {\r
     *ActionRequest = EFI_BROWSER_ACTION_REQUEST_NONE;\r
@@ -468,9 +509,47 @@ DriverCallback(
   } 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
@@ -1104,25 +1183,23 @@ HiiPasswordEntered(
 \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
index 754dbf776b1d126de887628fd02b1dce819f3ffe..4cfbde3f847e5ecb8e8fe5aac1fe5e17f0ff4124 100644 (file)
 #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
@@ -66,7 +78,7 @@
 #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
index 1f1afbc21e62060949dddb34c7454c9078adcea7..ec5a93cf3f3e0237a484443107e3326fc3cef1c5 100644 (file)
@@ -211,15 +211,15 @@ HiiPasswordEntered(
 /**\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
index 703c1b6039ad2cbb0af1ade322f3e280cc98b00d..f2afc378108cbeb2fd0bd196e76d165e4ba740f0 100644 (file)
@@ -62,6 +62,7 @@
   OpalPasswordSupportLib\r
   UefiLib\r
   TcgStorageOpalLib\r
+  Tcg2PhysicalPresenceLib\r
 \r
 [Protocols]\r
   gEfiHiiConfigAccessProtocolGuid               ## PRODUCES\r
index 88cc2a1c4e989826ed0a1cabd35618cf7393d144..218e0f442ce6ed950f53f753f8b4bc4a0a88f12a 100644 (file)
@@ -118,15 +118,38 @@ form formid = FORMID_VALUE_MAIN_MENU,
 \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