+ // Initialize Bits efi varstore configuration data\r
+ //\r
+ BitsVarStoreConfig = &mPrivateData->BitsVarStoreConfig;\r
+ ZeroMem (BitsVarStoreConfig, sizeof (MY_EFI_BITS_VARSTORE_DATA));\r
+\r
+ ConfigRequestHdr = HiiConstructConfigHdr (&gDriverSampleFormSetGuid, MyEfiBitVar, DriverHandle[0]);\r
+ ASSERT (ConfigRequestHdr != NULL);\r
+\r
+ BufferSize = sizeof (MY_EFI_BITS_VARSTORE_DATA);\r
+ Status = gRT->GetVariable (MyEfiBitVar, &gDriverSampleFormSetGuid, NULL, &BufferSize, BitsVarStoreConfig);\r
+ if (EFI_ERROR (Status)) {\r
+ //\r
+ // Store zero data to EFI variable Storage.\r
+ //\r
+ Status = gRT->SetVariable(\r
+ MyEfiBitVar,\r
+ &gDriverSampleFormSetGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ sizeof (MY_EFI_BITS_VARSTORE_DATA),\r
+ BitsVarStoreConfig\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return Status;\r
+ }\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
+ if (!ActionFlag) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ } else {\r
+ //\r
+ // EFI variable does exist and Validate Current Setting\r
+ //\r
+ ActionFlag = HiiValidateSettings (ConfigRequestHdr);\r
+ if (!ActionFlag) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ }\r
+ FreePool (ConfigRequestHdr);\r
+\r
+ //\r
+ // Initialize Union efi varstore configuration data\r
+ //\r
+ UnionConfig = &mPrivateData->UnionConfig;\r
+ ZeroMem (UnionConfig, sizeof (MY_EFI_UNION_DATA));\r
+\r
+ ConfigRequestHdr = HiiConstructConfigHdr (&gDriverSampleFormSetGuid, MyEfiUnionVar, DriverHandle[0]);\r
+ ASSERT (ConfigRequestHdr != NULL);\r
+\r
+ BufferSize = sizeof (MY_EFI_UNION_DATA);\r
+ Status = gRT->GetVariable (MyEfiUnionVar, &gDriverSampleFormSetGuid, NULL, &BufferSize, UnionConfig);\r
+ if (EFI_ERROR (Status)) {\r
+ //\r
+ // Store zero data to EFI variable Storage.\r
+ //\r
+ Status = gRT->SetVariable(\r
+ MyEfiUnionVar,\r
+ &gDriverSampleFormSetGuid,\r
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS,\r
+ sizeof (MY_EFI_UNION_DATA),\r
+ UnionConfig\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return Status;\r
+ }\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
+ if (!ActionFlag) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ } else {\r
+ //\r
+ // EFI variable does exist and Validate Current Setting\r
+ //\r
+ ActionFlag = HiiValidateSettings (ConfigRequestHdr);\r
+ if (!ActionFlag) {\r
+ DriverSampleUnload (ImageHandle);\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+ }\r
+ FreePool (ConfigRequestHdr);\r
+\r
+ Status = gBS->CreateEventEx (\r
+ EVT_NOTIFY_SIGNAL,\r
+ TPL_NOTIFY,\r
+ EfiEventEmptyFunction,\r
+ NULL,\r
+ &gEfiIfrRefreshIdOpGuid,\r
+ &mEvent\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+\r
+ //\r
+ // Example of how to use BrowserEx protocol to register HotKey.\r
+ //\r
+ Status = gBS->LocateProtocol (&gEdkiiFormBrowserExProtocolGuid, NULL, (VOID **) &FormBrowserEx);\r
+ if (!EFI_ERROR (Status)) {\r
+ //\r
+ // First unregister the default hot key F9 and F10.\r
+ //\r
+ HotKey.UnicodeChar = CHAR_NULL;\r
+ HotKey.ScanCode = SCAN_F9;\r
+ FormBrowserEx->RegisterHotKey (&HotKey, 0, 0, NULL);\r
+ HotKey.ScanCode = SCAN_F10;\r
+ FormBrowserEx->RegisterHotKey (&HotKey, 0, 0, NULL);\r
+\r
+ //\r
+ // Register the default HotKey F9 and F10 again.\r
+ //\r
+ HotKey.ScanCode = SCAN_F10;\r
+ NewString = HiiGetString (mPrivateData->HiiHandle[0], STRING_TOKEN (FUNCTION_TEN_STRING), NULL);\r
+ ASSERT (NewString != NULL);\r
+ FormBrowserEx->RegisterHotKey (&HotKey, BROWSER_ACTION_SUBMIT, 0, NewString);\r
+ HotKey.ScanCode = SCAN_F9;\r
+ NewString = HiiGetString (mPrivateData->HiiHandle[0], STRING_TOKEN (FUNCTION_NINE_STRING), NULL);\r
+ ASSERT (NewString != NULL);\r
+ FormBrowserEx->RegisterHotKey (&HotKey, BROWSER_ACTION_DEFAULT, EFI_HII_DEFAULT_CLASS_STANDARD, NewString);\r
+ }\r
+\r
+ //\r
+ // In default, this driver is built into Flash device image,\r