EFI_GUID mInventoryGuid = INVENTORY_GUID;\r
\r
CHAR16 VariableName[] = L"MyIfrNVData";\r
-\r
EFI_HANDLE DriverHandle[2] = {NULL, NULL};\r
DRIVER_SAMPLE_PRIVATE_DATA *PrivateData = NULL;\r
\r
UINTN BufferSize;\r
DRIVER_SAMPLE_PRIVATE_DATA *PrivateData;\r
EFI_HII_CONFIG_ROUTING_PROTOCOL *HiiConfigRouting;\r
- EFI_STRING ConfigRequestHdr;\r
EFI_STRING ConfigRequest;\r
+ EFI_STRING ConfigRequestHdr;\r
UINTN Size;\r
-\r
+ \r
+ if (Progress == NULL || Results == NULL || Request == NULL) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
//\r
// Initialize the local variables.\r
//\r
- ConfigRequestHdr = NULL;\r
- ConfigRequest = NULL;\r
- Size = 0;\r
- *Progress = Request;\r
+ ConfigRequestHdr = NULL;\r
+ ConfigRequest = NULL;\r
+ Size = 0;\r
+ *Progress = Request;\r
\r
PrivateData = DRIVER_SAMPLE_PRIVATE_FROM_THIS (This);\r
HiiConfigRouting = PrivateData->HiiConfigRouting;\r
// Try to get the current setting from variable.\r
//\r
BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);\r
- gRT->GetVariable (\r
- VariableName,\r
- &mFormSetGuid,\r
- NULL,\r
- &BufferSize,\r
- &PrivateData->Configuration\r
- );\r
+ Status = gRT->GetVariable (\r
+ VariableName,\r
+ &mFormSetGuid,\r
+ NULL,\r
+ &BufferSize,\r
+ &PrivateData->Configuration\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return EFI_NOT_FOUND;\r
+ }\r
\r
if (Request == NULL) {\r
//\r
// Request is set to NULL, construct full request string.\r
//\r
\r
- //\r
- // First Set ConfigRequestHdr string.\r
- //\r
- ConfigRequestHdr = HiiConstructConfigHdr (&mFormSetGuid, VariableName, PrivateData->DriverHandle[0]);\r
- ASSERT (ConfigRequestHdr != NULL);\r
-\r
//\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
- Size = (StrLen (ConfigRequestHdr) + 32 + 1) * sizeof (CHAR16);\r
+ ConfigRequestHdr = HiiConstructConfigHdr (&mFormSetGuid, VariableName, PrivateData->DriverHandle[0]);\r
+ Size = (StrLen (ConfigRequest) + 32 + 1) * sizeof (CHAR16);\r
ConfigRequest = AllocateZeroPool (Size);\r
UnicodeSPrint (ConfigRequest, Size, L"%s&OFFSET=0&WIDTH=%016LX", ConfigRequestHdr, (UINT64)BufferSize);\r
FreePool (ConfigRequestHdr);\r
} else {\r
- ConfigRequest = Request;\r
- }\r
-\r
- //\r
- // Check routing data in <ConfigHdr>.\r
- // Note: if only one Storage is used, then this checking could be skipped.\r
- //\r
- if (!HiiIsConfigHdrMatch (ConfigRequest, &mFormSetGuid, VariableName)) {\r
- if (Request == NULL) {\r
- FreePool (ConfigRequest);\r
+ //\r
+ // Check routing data in <ConfigHdr>.\r
+ // Note: if only one Storage is used, then this checking could be skipped.\r
+ //\r
+ if (!HiiIsConfigHdrMatch (Request, &mFormSetGuid, VariableName)) {\r
+ return EFI_NOT_FOUND;\r
}\r
- return EFI_NOT_FOUND;\r
+ ConfigRequest = Request;\r
}\r
\r
//\r
\r
if (Request == NULL) {\r
FreePool (ConfigRequest);\r
- *Progress = NULL;\r
+ *Progress = NULL;\r
}\r
\r
return Status;\r
// Get Buffer Storage data from EFI variable\r
//\r
BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);\r
- gRT->GetVariable (\r
- VariableName,\r
- &mFormSetGuid,\r
- NULL,\r
- &BufferSize,\r
- &PrivateData->Configuration\r
- );\r
+ Status = gRT->GetVariable (\r
+ VariableName,\r
+ &mFormSetGuid,\r
+ NULL,\r
+ &BufferSize,\r
+ &PrivateData->Configuration\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
\r
//\r
// Convert <ConfigResp> to buffer data by helper function ConfigToBlock()\r
DRIVER_SAMPLE_CONFIGURATION *Configuration;\r
BOOLEAN ActionFlag;\r
EFI_STRING ConfigRequestHdr; \r
-\r
+ \r
//\r
// Initialize the local variables.\r
//\r
ConfigRequestHdr = NULL;\r
-\r
//\r
// Initialize screen dimensions for SendForm().\r
// Remove 3 characters from top and bottom\r
BufferSize = sizeof (DRIVER_SAMPLE_CONFIGURATION);\r
Status = gRT->GetVariable (VariableName, &mFormSetGuid, NULL, &BufferSize, Configuration);\r
if (EFI_ERROR (Status)) {\r
+ //\r
+ // Store zero data Buffer Storage to EFI variable\r
+ //\r
+ Status = gRT->SetVariable(\r
+ VariableName,\r
+ &mFormSetGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ sizeof (DRIVER_SAMPLE_CONFIGURATION),\r
+ Configuration\r
+ );\r
+ ASSERT (Status == EFI_SUCCESS);\r
//\r
// EFI variable for NV config doesn't exit, we should build this variable\r
// based on default values stored in IFR\r