]> git.proxmox.com Git - mirror_edk2.git/blobdiff - SecurityPkg/Tcg/Opal/OpalPasswordDxe/OpalHii.c
SecurityPkg OpalPassword: Add solution without SMM device code
[mirror_edk2.git] / SecurityPkg / Tcg / Opal / OpalPasswordDxe / OpalHii.c
index 7371b7e892d6ab801e24c3e432b0d14cf0402de7..e3bde4275dfa73a9be861fb41fe6e5e653b7a7d5 100644 (file)
@@ -98,9 +98,9 @@ HiiSetCurrentConfiguration(
   //\r
   // Update the BlockSID status string.\r
   //\r
-  PpStorageFlag = TcgPhysicalPresenceStorageLibReturnStorageFlags();\r
+  PpStorageFlag = Tcg2PhysicalPresenceLibGetManagementFlags ();\r
 \r
-  if ((PpStorageFlag & TCG_BIOS_STORAGE_MANAGEMENT_FLAG_ENABLE_BLOCK_SID) != 0) {\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
@@ -116,7 +116,7 @@ HiiSetCurrentConfiguration(
   HiiSetString(gHiiPackageListHandle, STRING_TOKEN(STR_BLOCKSID_STATUS1), NewString, NULL);\r
   FreePool (NewString);\r
 \r
-  if ((PpStorageFlag & TCG_BIOS_STORAGE_MANAGEMENT_FLAG_PP_REQUIRED_FOR_ENABLE_BLOCK_SID) != 0) {\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
@@ -132,7 +132,7 @@ HiiSetCurrentConfiguration(
   HiiSetString(gHiiPackageListHandle, STRING_TOKEN(STR_BLOCKSID_STATUS2), NewString, NULL);\r
   FreePool (NewString);\r
 \r
-  if ((PpStorageFlag & TCG_BIOS_STORAGE_MANAGEMENT_FLAG_PP_REQUIRED_FOR_DISABLE_BLOCK_SID) != 0) {\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
@@ -1174,9 +1174,9 @@ HiiPasswordEntered(
 }\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
@@ -1190,11 +1190,7 @@ HiiSetBlockSidAction (
   UINT32                           ReturnCode;\r
   EFI_STATUS                       Status;\r
 \r
-  //\r
-  // Process TCG Physical Presence request just after trusted console is ready\r
-  // Platform can connect trusted consoles and then call the below function.\r
-  //\r
-  ReturnCode = TcgPhysicalPresenceStorageLibSubmitRequestToPreOSFunction (PpRequest, 0);\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
@@ -1284,6 +1280,12 @@ ExtractConfig(
   )\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
@@ -1298,18 +1300,56 @@ ExtractConfig(
     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