EFI_GUID MyEventGroupGuid = EFI_IFR_REFRESH_ID_OP_GUID;\r
\r
CHAR16 VariableName[] = L"MyIfrNVData";\r
+CHAR16 MyEfiVar[] = L"MyEfiVar";\r
EFI_HANDLE DriverHandle[2] = {NULL, NULL};\r
DRIVER_SAMPLE_PRIVATE_DATA *PrivateData = NULL;\r
EFI_EVENT mEvent;\r
return EFI_NOT_FOUND;\r
}\r
//\r
+ // Check whether request for EFI Varstore. EFI varstore get data\r
+ // through hii database, not support in this path.\r
+ //\r
+ if (HiiIsConfigHdrMatch(Request, &mFormSetGuid, MyEfiVar)) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+ //\r
// Set Request to the unified request string.\r
//\r
ConfigRequest = Request;\r
return EFI_NOT_FOUND;\r
}\r
\r
+ //\r
+ // Check whether request for EFI Varstore. EFI varstore get data\r
+ // through hii database, not support in this path.\r
+ //\r
+ if (HiiIsConfigHdrMatch(Configuration, &mFormSetGuid, MyEfiVar)) {\r
+ return EFI_UNSUPPORTED;\r
+ }\r
+\r
//\r
// Get Buffer Storage data from EFI variable\r
//\r
{\r
DRIVER_SAMPLE_PRIVATE_DATA *PrivateData;\r
EFI_STATUS Status;\r
- UINT8 MyVar;\r
VOID *StartOpCodeHandle;\r
VOID *OptionsOpCodeHandle;\r
EFI_IFR_GUID_LABEL *StartLabel;\r
EFI_IFR_GUID_LABEL *EndLabel;\r
EFI_INPUT_KEY Key;\r
DRIVER_SAMPLE_CONFIGURATION *Configuration;\r
- UINTN MyVarSize;\r
+ MY_EFI_VARSTORE_DATA *EfiData;\r
EFI_FORM_ID FormId;\r
\r
if (((Value == NULL) && (Action != EFI_BROWSER_ACTION_FORM_OPEN) && (Action != EFI_BROWSER_ACTION_FORM_CLOSE))||\r
\r
case EFI_BROWSER_ACTION_RETRIEVE:\r
{\r
- if (QuestionId == 0x1111) {\r
- //\r
- // EfiVarstore question takes sample action (print value as debug information) \r
- // after read/write question.\r
- //\r
- MyVarSize = 1;\r
- Status = gRT->GetVariable(\r
- L"MyVar",\r
- &mFormSetGuid,\r
- NULL,\r
- &MyVarSize,\r
- &MyVar\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
- DEBUG ((DEBUG_INFO, "EfiVarstore question: Tall value is %d with value width %d\n", MyVar, MyVarSize));\r
+ if (QuestionId == 0x1248) {\r
+ {\r
+ if (Type != EFI_IFR_TYPE_REF) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ \r
+ Value->ref.FormId = 0x3;\r
+ }\r
}\r
}\r
break;\r
case EFI_BROWSER_ACTION_CHANGING:\r
{\r
switch (QuestionId) {\r
+ case 0x1249:\r
+ {\r
+ if (Type != EFI_IFR_TYPE_REF) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ Value->ref.FormId = 0x1234;\r
+ }\r
+ break;\r
case 0x1234:\r
//\r
// Initialize the container for dynamic opcodes\r
PrivateData->Configuration.DynamicRefresh++;\r
} else if (QuestionId == 0x1247 ) {\r
StartLabel->Number = LABEL_UPDATE3;\r
- FormId = 0x05;\r
+ FormId = 0x06;\r
PrivateData->Configuration.RefreshGuidCount++;\r
}\r
\r
\r
if (QuestionId == 0x5678) {\r
//\r
- // Change an EFI Variable storage (MyEfiVar) asynchronous, this will cause\r
- // the first statement in Form 3 be suppressed\r
+ // Update uncommitted data of Browser\r
//\r
- MyVarSize = 1;\r
- MyVar = 111;\r
- Status = gRT->SetVariable(\r
- L"MyVar",\r
- &mFormSetGuid,\r
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
- MyVarSize,\r
- &MyVar\r
- );\r
+ EfiData = AllocateZeroPool (sizeof (MY_EFI_VARSTORE_DATA));\r
+ ASSERT (EfiData != NULL);\r
+ if (HiiGetBrowserData (&mFormSetGuid, MyEfiVar, sizeof (MY_EFI_VARSTORE_DATA), (UINT8 *) EfiData)) {\r
+ EfiData->Field8 = 111;\r
+ HiiSetBrowserData (\r
+ &mFormSetGuid,\r
+ MyEfiVar,\r
+ sizeof (MY_EFI_VARSTORE_DATA),\r
+ (UINT8 *) EfiData,\r
+ NULL\r
+ );\r
+ }\r
+ FreePool (EfiData);\r
}\r
break;\r
\r
\r
break;\r
\r
- case 0x1111:\r
- //\r
- // EfiVarstore question takes sample action (print value as debug information) \r
- // after read/write question.\r
- //\r
- MyVarSize = 1;\r
- Status = gRT->GetVariable(\r
- L"MyVar",\r
- &mFormSetGuid,\r
- NULL,\r
- &MyVarSize,\r
- &MyVar\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
- DEBUG ((DEBUG_INFO, "EfiVarstore question: Tall value is %d with value width %d\n", MyVar, MyVarSize));\r
default:\r
break;\r
}\r
DRIVER_SAMPLE_CONFIGURATION *Configuration;\r
BOOLEAN ActionFlag;\r
EFI_STRING ConfigRequestHdr;\r
+ MY_EFI_VARSTORE_DATA *VarStoreConfig;\r
\r
//\r
// Initialize the local variables.\r
ActionFlag = HiiValidateSettings (ConfigRequestHdr);\r
ASSERT (ActionFlag);\r
}\r
+ FreePool (ConfigRequestHdr);\r
\r
+ //\r
+ // Initialize efi varstore configuration data\r
+ //\r
+ VarStoreConfig = &PrivateData->VarStoreConfig;\r
+ ZeroMem (VarStoreConfig, sizeof (MY_EFI_VARSTORE_DATA));\r
+\r
+ ConfigRequestHdr = HiiConstructConfigHdr (&mFormSetGuid, MyEfiVar, DriverHandle[0]);\r
+ ASSERT (ConfigRequestHdr != NULL);\r
+\r
+ BufferSize = sizeof (MY_EFI_VARSTORE_DATA);\r
+ Status = gRT->GetVariable (MyEfiVar, &mFormSetGuid, NULL, &BufferSize, VarStoreConfig);\r
+ if (EFI_ERROR (Status)) {\r
+ //\r
+ // Store zero data to EFI variable Storage.\r
+ //\r
+ Status = gRT->SetVariable(\r
+ MyEfiVar,\r
+ &mFormSetGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ sizeof (MY_EFI_VARSTORE_DATA),\r
+ VarStoreConfig\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
+ //\r
+ ActionFlag = HiiSetToDefaults (ConfigRequestHdr, EFI_HII_DEFAULT_CLASS_STANDARD);\r
+ ASSERT (ActionFlag);\r
+ } else {\r
+ //\r
+ // EFI variable does exist and Validate Current Setting\r
+ //\r
+ ActionFlag = HiiValidateSettings (ConfigRequestHdr);\r
+ ASSERT (ActionFlag);\r
+ }\r
FreePool (ConfigRequestHdr);\r
\r
Status = gBS->CreateEventEx (\r