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
EFI_HANDLE DriverHandle[2];\r
EFI_HII_HANDLE HiiHandle[2];\r
DRIVER_SAMPLE_CONFIGURATION Configuration;\r
+ MY_EFI_VARSTORE_DATA VarStoreConfig;\r
UINT8 PasswordState;\r
\r
//\r
0xF5E655D9, 0x02A6, 0x46f2, {0x9E, 0x76, 0xB8, 0xBE, 0x8E, 0x60, 0xAB, 0x22} \\r
}\r
\r
+#define ZERO_GUID \\r
+ { \\r
+ 0x0, 0x0, 0x0, {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0} \\r
+ } \r
+\r
#define CONFIGURATION_VARSTORE_ID 0x1234\r
\r
#pragma pack(1)\r
UINT8 DynamicOneof;\r
UINT8 DynamicOrderedList[5];\r
UINT8 Reserved;\r
+ EFI_HII_REF RefData;\r
UINT8 NameValueVar0;\r
UINT16 NameValueVar1;\r
UINT16 NameValueVar2[20];\r
UINT8 Field8;\r
UINT16 Field16;\r
UINT8 OrderedList[3];\r
-} MY_DATA2;\r
+} MY_EFI_VARSTORE_DATA;\r
\r
//\r
// Labels definition\r
name = MyIfrNVData, // Define referenced name in vfr\r
guid = FORMSET_GUID; // GUID of this buffer storage\r
\r
- //\r
- // Define another Buffer Storage\r
- //\r
- varstore MY_DATA2,\r
- name = MyIfrNVData2,\r
- guid = FORMSET_GUID;\r
-\r
//\r
// Define a EFI variable Storage (EFI_IFR_VARSTORE_EFI)\r
//\r
- efivarstore MyEfiVar, // Define referenced name in vfr\r
- attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE, // EFI variable attribures\r
- name = STRING_TOKEN(STR_VAR_NAME), // EFI variable name\r
- varsize = 1, // Size of the EFI variable\r
- guid = FORMSET_GUID; // EFI variable GUID\r
+ efivarstore MY_EFI_VARSTORE_DATA,\r
+ attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE, // EFI variable attribures \r
+ name = MyEfiVar,\r
+ guid = FORMSET_GUID;\r
\r
//\r
// Define a Name/Value Storage (EFI_IFR_VARSTORE_NAME_VALUE)\r
inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),\r
ideqval MyIfrNVData.HowOldAreYouInYearsManual == 99\r
OR\r
- ideqid MyIfrNVData.HowOldAreYouInYearsManual == MyEfiVar\r
+ ideqid MyIfrNVData.HowOldAreYouInYearsManual == MyEfiVar.Field8\r
OR\r
ideqvallist MyIfrNVData.HowOldAreYouInYearsManual == 1 3 5 7\r
endif\r
\r
endnumeric;\r
\r
- numeric varid = MyEfiVar, // Reference of EFI variable storage\r
+ numeric varid = MyEfiVar.Field8, // Reference of EFI variable storage\r
questionid = 0x1111,\r
prompt = STRING_TOKEN(STR_TALL_HEX_PROMPT),\r
help = STRING_TOKEN(STR_NUMERIC_HELP1),\r
flags = DISPLAY_UINT_HEX | INTERACTIVE, // Display in HEX format (if not specified, default is in decimal format)\r
minimum = 0,\r
maximum = 250,\r
- default = 175,\r
+ default = 18, defaultstore = MyStandardDefault, // This is standard default value\r
+ default = 19, defaultstore = MyManufactureDefault, // This is manufacture default value\r
\r
endnumeric;\r
\r
maxsize = 0x14,\r
endstring;\r
\r
+ oneof varid = MyEfiVar.Field16,\r
+ prompt = STRING_TOKEN(STR_ONE_OF_PROMPT),\r
+ help = STRING_TOKEN(STR_NUMERIC_NUM_HELP),\r
+ option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0x0, flags = 0;\r
+ option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 0x1, flags = DEFAULT;\r
+ endoneof;\r
+\r
label LABEL_1_VALUE;\r
label LABEL_2_VALUE;\r
\r
prompt = STRING_TOKEN(STR_GOTO_FORM4), //FourthSetupPage // this too has no end-op and basically it's a jump to a form ONLY\r
help = STRING_TOKEN(STR_GOTO_HELP);\r
\r
+ goto 5,\r
+ prompt = STRING_TOKEN(STR_GOTO_FORM5), //FifthSetupPage // this too has no end-op and basically it's a jump to a form ONLY\r
+ help = STRING_TOKEN(STR_GOTO_FORM5_HELP);\r
+ \r
+ goto 6,\r
+ prompt = STRING_TOKEN(STR_GOTO_FORM6), //SixthSetupPage // this too has no end-op and basically it's a jump to a form ONLY\r
+ help = STRING_TOKEN(STR_GOTO_HELP);\r
+\r
guidop \r
guid = FORMSET_GUID,\r
- datatype = MY_DATA2,\r
+ datatype = MY_EFI_VARSTORE_DATA,\r
data.Field8 = 0x21, \r
data.Field16 = 0x2121,\r
data.OrderedList[0] = 0x21, \r
prompt = STRING_TOKEN(STR_GOTO_FORM1), //MainSetupPage // this too has no end-op and basically it's a jump to a form ONLY\r
help = STRING_TOKEN(STR_GOTO_HELP);\r
\r
+ goto \r
+ varid = MyIfrNVData.RefData,\r
+ prompt = STRING_TOKEN(STR_GOTO_DYNAMIC3),\r
+ help = STRING_TOKEN(STR_GOTO_DYNAMIC3_HELP),\r
+ flags = INTERACTIVE,\r
+ key = 0x1248;\r
+ //\r
+ // Set the defult value, format is QuestionId; FormId; FormsetGuid; Device Path String Token\r
+ //\r
+ default = 0;0;ZERO_GUID;STRING_TOKEN(STR_NULL_STRING), \r
+\r
+ goto \r
+ prompt = STRING_TOKEN(STR_GOTO_DYNAMIC4),\r
+ help = STRING_TOKEN(STR_GOTO_DYNAMIC4_HELP),\r
+ flags = INTERACTIVE,\r
+ key = 0x1249;\r
+ \r
endform;\r
endif;\r
\r
form formid = 3, title = STRING_TOKEN(STR_FORM3_TITLE); // note formid is a variable (for readability) (UINT16) - also added Form to the line to signify the Op-Code\r
\r
- suppressif ideqval MyEfiVar == 111;\r
+ suppressif ideqval MyEfiVar.Field8 == 111;\r
text\r
help = STRING_TOKEN(STR_TEXT_HELP),\r
text = STRING_TOKEN(STR_TEXT_TEXT_1);\r
\r
endform;\r
\r
+ form formid = 5, // Modal form\r
+ title = STRING_TOKEN(STR_MODAL_FORM_TITLE);\r
+ //\r
+ // This form is a modal form.\r
+ //\r
+ modal;\r
+ text\r
+ help = STRING_TOKEN(STR_EXIT_TEXT),\r
+ text = STRING_TOKEN(STR_EXIT_TEXT),\r
+ text = STRING_TOKEN(STR_EXIT_TEXT),\r
+ flags = INTERACTIVE, // VfrCompiler will generate opcode EFI_IFR_ACTION for Text marked as INTERACTIVE\r
+ key = 0x1245;\r
+\r
+ text\r
+ help = STRING_TOKEN(STR_SAVE_TEXT),\r
+ text = STRING_TOKEN(STR_SAVE_TEXT),\r
+ text = STRING_TOKEN(STR_SAVE_TEXT),\r
+ flags = INTERACTIVE, // VfrCompiler will generate opcode EFI_IFR_ACTION for Text marked as INTERACTIVE\r
+ key = 0x1246;\r
+ endform;\r
+\r
+ form formid = 6, // Form to show the refresh guid group op-code\r
+ title = STRING_TOKEN(STR_FORM6_TITLE); \r
+\r
+ text\r
+ help = STRING_TOKEN(STR_TEXT_REFRESH_GUID),\r
+ text = STRING_TOKEN(STR_TEXT_REFRESH_GUID);\r
+\r
+ numeric varid = MyIfrNVData.RefreshGuidCount,\r
+ prompt = STRING_TOKEN(STR_TEXT_REFRESH_GUID_COUNT),\r
+ help = STRING_TOKEN(STR_NUMERIC_HELP0),\r
+ flags = INTERACTIVE,\r
+ key = 0x1247,\r
+ minimum = 0,\r
+ maximum = 0xff,\r
+ step = 0,\r
+ default = 0,\r
+ refreshguid = EFI_IFR_REFRESH_ID_OP_GUID,\r
+ endnumeric;\r
+\r
+ label LABEL_UPDATE3;\r
+ label LABEL_END;\r
+\r
+ endform;\r
+\r
form formid = 0x1234, // Dynamically created page,\r
title = STRING_TOKEN(STR_DYNAMIC_TITLE); // note formid is a variable (for readability) (UINT16) - also added Form to the line to signify the Op-Code\r
\r