)\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