]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/DriverSample: Add questions with bit/union VarStore
authorDandan Bi <dandan.bi@intel.com>
Wed, 20 Sep 2017 12:20:05 +0000 (20:20 +0800)
committerEric Dong <eric.dong@intel.com>
Wed, 11 Oct 2017 05:33:11 +0000 (13:33 +0800)
REF:https://bugzilla.tianocore.org/show_bug.cgi?id=545

Cc: Eric Dong <eric.dong@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
MdeModulePkg/Universal/DriverSampleDxe/DriverSample.c
MdeModulePkg/Universal/DriverSampleDxe/DriverSample.h
MdeModulePkg/Universal/DriverSampleDxe/NVDataStruc.h
MdeModulePkg/Universal/DriverSampleDxe/Vfr.vfr
MdeModulePkg/Universal/DriverSampleDxe/VfrStrings.uni

index bbd9713eea75afa3ca69131e8223bbc62e3797c8..af31615a61b612a1d4e080d6b049250167fbb7ad 100644 (file)
@@ -20,6 +20,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 CHAR16     VariableName[] = L"MyIfrNVData";\r
 CHAR16     MyEfiVar[] = L"MyEfiVar";\r
+CHAR16     MyEfiBitVar[] = L"MyEfiBitVar";\r
+CHAR16     MyEfiUnionVar[] = L"MyEfiUnionVar";\r
+\r
 EFI_HANDLE                      DriverHandle[2] = {NULL, NULL};\r
 DRIVER_SAMPLE_PRIVATE_DATA      *mPrivateData = NULL;\r
 EFI_EVENT                       mEvent;\r
@@ -664,6 +667,13 @@ ExtractConfig (
     if (HiiIsConfigHdrMatch(Request, &gDriverSampleFormSetGuid, MyEfiVar)) {\r
       return EFI_UNSUPPORTED;\r
     }\r
+    if (HiiIsConfigHdrMatch(Request, &gDriverSampleFormSetGuid, MyEfiBitVar)) {\r
+      return EFI_UNSUPPORTED;\r
+    }\r
+    if (HiiIsConfigHdrMatch(Request, &gDriverSampleFormSetGuid, MyEfiUnionVar)) {\r
+      return EFI_UNSUPPORTED;\r
+    }\r
+\r
     //\r
     // Set Request to the unified request string.\r
     //\r
@@ -885,6 +895,12 @@ RouteConfig (
   if (HiiIsConfigHdrMatch(Configuration, &gDriverSampleFormSetGuid, MyEfiVar)) {\r
     return EFI_UNSUPPORTED;\r
   }\r
+  if (HiiIsConfigHdrMatch(Configuration, &gDriverSampleFormSetGuid, MyEfiBitVar)) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+  if (HiiIsConfigHdrMatch(Configuration, &gDriverSampleFormSetGuid, MyEfiUnionVar)) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
 \r
   //\r
   // Get Buffer Storage data from EFI variable\r
@@ -1297,6 +1313,10 @@ DriverCallback (
         }\r
       break;\r
 \r
+      case 0x6666:\r
+        Value->u8 = 12;\r
+        break;\r
+\r
       default:\r
         Status = EFI_UNSUPPORTED;\r
       break;\r
@@ -1311,6 +1331,10 @@ DriverCallback (
         Value->u8 = DEFAULT_CLASS_MANUFACTURING_VALUE;\r
       break;\r
 \r
+     case 0x6666:\r
+        Value->u8 = 13;\r
+        break;\r
+\r
       default:\r
         Status = EFI_UNSUPPORTED;      \r
       break;\r
@@ -1705,6 +1729,8 @@ DriverSampleInit (
   EFI_STRING                      ConfigRequestHdr;\r
   EFI_STRING                      NameRequestHdr;\r
   MY_EFI_VARSTORE_DATA            *VarStoreConfig;\r
+  MY_EFI_BITS_VARSTORE_DATA       *BitsVarStoreConfig;\r
+  MY_EFI_UNION_DATA               *UnionConfig;\r
   EFI_INPUT_KEY                   HotKey;\r
   EDKII_FORM_BROWSER_EXTENSION_PROTOCOL *FormBrowserEx;\r
 \r
@@ -1993,6 +2019,100 @@ DriverSampleInit (
   }\r
   FreePool (ConfigRequestHdr);\r
 \r
+  //\r
+  // 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
index 507cff6ec9fc477d093d132dfa4676a39184c1f0..00752bfa29b5341a4ce8e91af49bf092b5e50c16 100644 (file)
@@ -85,6 +85,8 @@ typedef struct {
   EFI_HII_HANDLE                   HiiHandle[2];\r
   DRIVER_SAMPLE_CONFIGURATION      Configuration;\r
   MY_EFI_VARSTORE_DATA             VarStoreConfig;\r
+  MY_EFI_BITS_VARSTORE_DATA        BitsVarStoreConfig;\r
+  MY_EFI_UNION_DATA                UnionConfig;\r
 \r
   //\r
   // Name/Value storage Name list\r
index 195cc8ad62e77da4cd0eea1ae0e312ec4d599b67..40fb3d0964787c56ddca25479749edeeaa80d97b 100644 (file)
@@ -1,6 +1,6 @@
 /** @file\r
 \r
-Copyright (c) 2007 - 2016, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2007 - 2017, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -31,8 +31,24 @@ Revision History:
 #include <Guid/ZeroGuid.h>\r
 \r
 #define CONFIGURATION_VARSTORE_ID    0x1234\r
+#define BITS_VARSTORE_ID             0x2345\r
 \r
 #pragma pack(1)\r
+\r
+typedef struct {\r
+  UINT16   NestByteField;\r
+  UINT8                    : 1;  // unamed field can be used for padding\r
+  UINT8    NestBitCheckbox : 1;\r
+  UINT8    NestBitOneof    : 2;\r
+  UINT8                    : 0;  // Special width 0 can be used to force alignment at the next word boundary\r
+  UINT8    NestBitNumeric  : 4;\r
+} MY_BITS_DATA;\r
+\r
+typedef union {\r
+  UINT16   BitField : 10;\r
+  UINT8    ByteField;\r
+} MY_EFI_UNION_DATA;\r
+\r
 typedef struct {\r
   UINT16  MyStringData[40];\r
   UINT16  SomethingHiddenForHtml;\r
@@ -67,6 +83,11 @@ typedef struct {
   UINT8   RefreshGuidCount;\r
   UINT8   Match2;\r
   UINT8   GetDefaultValueFromCallBackForOrderedList[3];\r
+  UINT8   BitCheckbox : 1;\r
+  UINT16  BitOneof    : 6;\r
+  UINT16  BitNumeric  : 12;\r
+  MY_BITS_DATA  MyBitData;\r
+  MY_EFI_UNION_DATA MyUnionData;\r
 } DRIVER_SAMPLE_CONFIGURATION;\r
 \r
 //\r
@@ -79,6 +100,17 @@ typedef struct {
   UINT16        SubmittedCallback;\r
 } MY_EFI_VARSTORE_DATA;\r
 \r
+//\r
+// 3rd NV data structure definition\r
+//\r
+typedef struct {\r
+  MY_BITS_DATA  BitsData;\r
+  UINT32   EfiBitGrayoutTest : 5;\r
+  UINT32   EfiBitNumeric     : 4;\r
+  UINT32   EfiBitOneof       : 10;\r
+  UINT32   EfiBitCheckbox    : 1;\r
+} MY_EFI_BITS_VARSTORE_DATA;\r
+\r
 //\r
 // Labels definition\r
 //\r
index d547ec809b89c80b36f541ca02bdaa8f814277f3..c1682913faf17630bb9c008e8247bfbd9ba6a22d 100644 (file)
@@ -87,6 +87,19 @@ formset
     name  = MyEfiVar,\r
     guid  = DRIVER_SAMPLE_FORMSET_GUID;\r
 \r
+  //\r
+  // Define a Buffer Storage (EFI_IFR_VARSTORE)\r
+  //\r
+  efivarstore MY_EFI_BITS_VARSTORE_DATA,                                      // This is the data structure type\r
+    attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,  // EFI variable attribures\r
+    name  = MyEfiBitVar,                                                      // Define referenced name in vfr\r
+    guid  = DRIVER_SAMPLE_FORMSET_GUID;                                       // GUID of this buffer storage\r
+\r
+  efivarstore MY_EFI_UNION_DATA,\r
+    attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,  // EFI variable attribures\r
+    name  = MyEfiUnionVar,\r
+    guid  = DRIVER_SAMPLE_FORMSET_GUID;\r
+\r
   //\r
   // Define a Name/Value Storage (EFI_IFR_VARSTORE_NAME_VALUE)\r
   //\r
@@ -518,6 +531,9 @@ formset
         data.OrderedList[0] = 0x21,        \r
     endguidop;\r
 \r
+     goto 7,\r
+      prompt = STRING_TOKEN(STR_GOTO_FORM7),\r
+      help   = STRING_TOKEN(STR_GOTO_FORM7_HELP);\r
 \r
   endform;\r
 \r
@@ -780,4 +796,160 @@ formset
 \r
   endform;\r
 \r
+\r
+  form formid = 7,                          // Form to show the question refer to union and bit Varstore\r
+    title = STRING_TOKEN(STR_FORM7_TITLE);\r
+\r
+    subtitle text = STRING_TOKEN(STR_NEST_BIT_EFI_VARSTORE);\r
+\r
+    checkbox varid   = MyEfiBitVar.BitsData.NestBitCheckbox,\r
+             prompt   = STRING_TOKEN(STR_BIT_NEST_CHECK_BOX_PROMPT),\r
+             help     = STRING_TOKEN(STR_BIT_NEST_CHECK_BOX_HELP),\r
+             flags    = CHECKBOX_DEFAULT,\r
+    endcheckbox;\r
+\r
+    oneof varid  = MyEfiBitVar.BitsData.NestBitOneof,\r
+      prompt      = STRING_TOKEN(STR_ONE_OF_BIT_NEST_PROMPT),\r
+      help        = STRING_TOKEN(STR_ONE_OF_BIT_NEST_HELP),\r
+      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0, flags = MANUFACTURING;\r
+      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 1, flags = DEFAULT;\r
+    endoneof;\r
+\r
+    numeric varid   = MyEfiBitVar.BitsData.NestBitNumeric,\r
+            questionid = 0x6666,\r
+            prompt  = STRING_TOKEN(STR_BIT_NEST_NUMERIC_PROMPT),\r
+            help    = STRING_TOKEN(STR_BIT_NEST_NUMERIC_DEFAULT_HELP),\r
+            flags   = DISPLAY_UINT_HEX | INTERACTIVE,\r
+            minimum = 2,\r
+            maximum = 15,\r
+            step    = 1,\r
+    endnumeric;\r
+\r
+    oneof varid  = MyEfiBitVar.BitsData.NestByteField,\r
+      prompt      = STRING_TOKEN(BYTE_QUESTION_NEST_BIT_PROMPT),\r
+      help        = STRING_TOKEN(BYTE_QUESTION_NEST_BIT_HELP),\r
+      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0, flags = MANUFACTURING;\r
+      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 1, flags = DEFAULT;\r
+    endoneof;\r
+\r
+    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT2);\r
+    subtitle text = STRING_TOKEN(STR_BIT_EFI_VARSTORE);\r
+\r
+    checkbox varid   = MyEfiBitVar.EfiBitCheckbox,\r
+      prompt   = STRING_TOKEN(STR_BIT_CHECK_BOX_PROMPT),\r
+      help     = STRING_TOKEN(STR_BIT_CHECK_BOX_HELP),\r
+      flags    = CHECKBOX_DEFAULT,\r
+    endcheckbox;\r
+\r
+  grayoutif  ideqval MyEfiBitVar.EfiBitGrayoutTest == 0;\r
+    numeric varid   = MyEfiBitVar.EfiBitNumeric,\r
+            prompt  = STRING_TOKEN(STR_BIT_NUMERIC_PROMPT),\r
+            help    = STRING_TOKEN(STR_BIT_NUMERIC_HELP),\r
+            minimum = 0,\r
+            maximum = 7,\r
+            step    = 0,\r
+            default = 4, defaultstore = MyStandardDefault,\r
+            default = 5, defaultstore = MyManufactureDefault,\r
+    endnumeric;\r
+  endif;\r
+\r
+      oneof varid  = MyEfiBitVar.EfiBitOneof,\r
+      questionid = 0x9999,\r
+      prompt      = STRING_TOKEN(STR_ONE_OF_BIT_PROMPT),\r
+      help        = STRING_TOKEN(STR_ONE_OF_BIT_HELP),\r
+      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0x0, flags = MANUFACTURING;\r
+      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 0x1, flags = DEFAULT;\r
+    endoneof;\r
+\r
+    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT2);\r
+    subtitle text = STRING_TOKEN(STR_NEST_BIT_VARSTORE);\r
+    checkbox varid   = MyIfrNVData.MyBitData.NestBitCheckbox,\r
+             prompt   = STRING_TOKEN(STR_BIT_NEST_CHECK_BOX_PROMPT),\r
+             help     = STRING_TOKEN(STR_BIT_NEST_CHECK_BOX_HELP),\r
+             flags    = CHECKBOX_DEFAULT,\r
+    endcheckbox;\r
+\r
+    oneof varid  = MyIfrNVData.MyBitData.NestBitOneof,\r
+      prompt      = STRING_TOKEN(STR_ONE_OF_BIT_NEST_PROMPT),\r
+      help        = STRING_TOKEN(STR_ONE_OF_BIT_NEST_HELP),\r
+      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0, flags = MANUFACTURING;\r
+      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 1, flags = DEFAULT;\r
+    endoneof;\r
+\r
+    numeric varid   = MyIfrNVData.MyBitData.NestBitNumeric,\r
+            prompt  = STRING_TOKEN(STR_BIT_NEST_NUMERIC_PROMPT),\r
+            help    = STRING_TOKEN(STR_BIT_NEST_NUMERIC_HELP),\r
+            minimum = 0,\r
+            maximum = 7,\r
+            step    = 0,\r
+            default = 6, defaultstore = MyStandardDefault,\r
+            default = 7, defaultstore = MyManufactureDefault,\r
+    endnumeric;\r
+\r
+    oneof varid  = MyIfrNVData.MyBitData.NestByteField,\r
+      prompt      = STRING_TOKEN(BYTE_QUESTION_NEST_BIT_PROMPT),\r
+      help        = STRING_TOKEN(BYTE_QUESTION_NEST_BIT_HELP),\r
+      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0, flags = MANUFACTURING;\r
+      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 1, flags = DEFAULT;\r
+    endoneof;\r
+\r
+    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT2);\r
+    subtitle text = STRING_TOKEN(STR_BIT_VARSTORE);\r
+\r
+    oneof varid  = MyIfrNVData.BitOneof,\r
+      prompt      = STRING_TOKEN(STR_ONE_OF_BIT_PROMPT),\r
+      help        = STRING_TOKEN(STR_ONE_OF_BIT_HELP),\r
+      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0, flags = MANUFACTURING;\r
+      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 1, flags = DEFAULT;\r
+    endoneof;\r
+\r
+    checkbox varid   = MyIfrNVData.BitCheckbox,\r
+             prompt   = STRING_TOKEN(STR_BIT_CHECK_BOX_PROMPT),\r
+             help     = STRING_TOKEN(STR_BIT_CHECK_BOX_HELP),\r
+             flags    = CHECKBOX_DEFAULT,\r
+    endcheckbox;\r
+\r
+    numeric varid   = MyIfrNVData.BitNumeric,\r
+            prompt  = STRING_TOKEN(STR_BIT_NUMERIC_PROMPT),\r
+            help    = STRING_TOKEN(STR_BUFFER_BIT_NUMERIC_HELP),\r
+            minimum = 0,\r
+            maximum = 20,\r
+            step    = 0,\r
+            default = 16, defaultstore = MyStandardDefault,\r
+            default = 17, defaultstore = MyManufactureDefault,\r
+    endnumeric;\r
+\r
+    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT2);\r
+    subtitle text = STRING_TOKEN(STR_UNION_EFI_VARSTORE);\r
+\r
+    numeric varid   = MyEfiUnionVar.ByteField,\r
+            prompt  = STRING_TOKEN(STR_UNION_BYTE_NUMERIC_PROMPT),\r
+            help    = STRING_TOKEN(STR_UNION_BYTE_NUMERIC_HELP),\r
+            minimum = 0,\r
+            maximum = 20,\r
+            step    = 0,\r
+            default = 7, defaultstore = MyStandardDefault,\r
+            default = 8, defaultstore = MyManufactureDefault,\r
+    endnumeric;\r
+\r
+    numeric varid   = MyEfiUnionVar.BitField,\r
+            prompt  = STRING_TOKEN(STR_UNION_BIT_NUMERIC_PROMPT),\r
+            help    = STRING_TOKEN(STR_UNION_BIT_NUMERIC_HELP),\r
+            minimum = 0,\r
+            maximum = 20,\r
+            step    = 0,\r
+            default = 7, defaultstore = MyStandardDefault,\r
+            default = 8, defaultstore = MyManufactureDefault,\r
+    endnumeric;\r
+\r
+    guidop\r
+      guid = DRIVER_SAMPLE_FORMSET_GUID,\r
+      datatype = MY_EFI_BITS_VARSTORE_DATA,\r
+        data.EfiBitNumeric  = 1,\r
+        data.EfiBitOneof = 1,\r
+        data.EfiBitCheckbox = 1,\r
+    endguidop;\r
+\r
+  endform;\r
+\r
 endformset;\r
index 6a268d12369c9d7fbd932a804cc56d6b1100b851..7cc6a19e935d046694ba8f3f052c8a4ee8533780 100644 (file)
                                                      #language fr-FR "Select this question will pop up a message box, then user can decide whether exit curret form or not"\r
 #string STR_POPUP_STRING                             #language en-US "Are you sure to exit current form?"\r
                                                      #language fr-FR "Are you sure to exit current form?"\r
+//\r
+// Form 7 to show Questions which refer to Union Bit varstore\r
+//\r
+#string STR_FORM7_TITLE                #language en-US "Form to Show Questions with union and bit VarStore"\r
+                                       #language fr-FR "Form to Show Questions with union and bit VarStore"\r
+#string STR_GOTO_FORM7                 #language en-US "Enter Page 7"\r
+                                       #language fr-FR "Enter Page 7"\r
+#string STR_GOTO_FORM7_HELP            #language en-US "This Form is to Show Questions with union and bit VarStore"\r
+                                       #language fr-FR "This Form is to Show Questions with union and bit VarStore"\r
+#string STR_NEST_BIT_EFI_VARSTORE      #language en-US "Nested BIT fields in efivarstore"\r
+                                       #language fr-FR "Nested BIT fields in efivarstore"\r
+#string STR_BIT_EFI_VARSTORE           #language en-US "BIT fields in efivarstore"\r
+                                       #language fr-FR "BIT fields in efivarstore"\r
+#string STR_NEST_BIT_VARSTORE          #language en-US "Nested BIT fields in bufferstore"\r
+                                       #language fr-FR "Nested BIT fields in bufferstore"\r
+#string STR_BIT_VARSTORE               #language en-US "BIT fields in bufferstore"\r
+                                       #language fr-FR "BIT fields in bufferstore"\r
+#string STR_UNION_EFI_VARSTORE         #language en-US "Union efivarstore"\r
+                                       #language fr-FR "Union efivarstore"\r
+#string STR_BIT_NEST_CHECK_BOX_PROMPT  #language en-US "NEST_BIT check box"\r
+                                       #language fr-FR "NEST_BIT check box"\r
+#string STR_BIT_NEST_CHECK_BOX_HELP    #language en-US "The check box refer to nested bit field, the default is checked"\r
+                                       #language fr-FR "The check box refer to nested bit field, the default is checked"\r
+#string STR_ONE_OF_BIT_NEST_PROMPT     #language en-US "NEST_BIT one-of"\r
+                                       #language fr-FR "NEST_BIT one-of"\r
+#string STR_ONE_OF_BIT_NEST_HELP       #language en-US "The oneof refer to nested bit field"\r
+                                       #language fr-FR "The oneof refer to nested bit field"\r
+#string STR_BIT_NEST_NUMERIC_PROMPT    #language en-US "NEST_BIT numeric"\r
+                                       #language fr-FR "NEST_BIT numeric"\r
+#string STR_BIT_NEST_NUMERIC_HELP      #language en-US "The numeric refer to nested bit field, the Standard default is 6 Manufacture default is 7"\r
+                                       #language fr-FR "The numeric refer to nested bit field, the Standard default is 6 Manufacture default is 7"\r
+#string BYTE_QUESTION_NEST_BIT_PROMPT  #language en-US "Use byte field in NEST_BIT structure"\r
+                                       #language fr-FR "Use byte field in NEST_BIT structure"\r
+#string BYTE_QUESTION_NEST_BIT_HELP    #language en-US "The Question refer to byte field in NEST_BIT structure"\r
+                                       #language fr-FR "The Question refer to byte field in NEST_BIT structure"\r
+#string STR_BIT_NEST_NUMERIC_DEFAULT_HELP   #language en-US "NEST_BIT numeric, default value form callback function, the Standard default is C Manufacture default is D"\r
+                                            #language fr-FR "NEST_BIT numeric, default value form callback function, the Standard default is C Manufacture default is D"\r
+#string STR_BIT_CHECK_BOX_PROMPT       #language en-US "BIT check box"\r
+                                       #language fr-FR "BIT check box"\r
+#string STR_BIT_CHECK_BOX_HELP         #language en-US "The check box refer to bit field, the default is checked"\r
+                                       #language fr-FR "The check box refer to bit field, the default is checked"\r
+#string STR_ONE_OF_BIT_PROMPT          #language en-US "BIT one-of"\r
+                                       #language fr-FR "BIT one-of"\r
+#string STR_ONE_OF_BIT_HELP            #language en-US "The one-of refer to bit field"\r
+                                       #language fr-FR "The one-of refer to bit field"\r
+#string STR_BIT_NUMERIC_PROMPT         #language en-US "BIT numeric"\r
+                                       #language fr-FR "BIT numeric"\r
+#string STR_BIT_NUMERIC_HELP           #language en-US "The numeric refer to bit field, the Standard default is 4 Manufacture default is 5"\r
+                                       #language fr-FR "The numeric refer to bit field  the Standard default is 4 Manufacture default is 5"\r
+#string STR_BUFFER_BIT_NUMERIC_HELP    #language en-US "The numeric refer to bit field, the Standard default is 16 Manufacture default is 17"\r
+                                       #language fr-FR "The numeric refer to bit field, the Standard default is 16 Manufacture default is 17"\r
+#string BYTE_QUESTION_BIT_PROMPT       #language en-US "Use byte field in BIT structure"\r
+                                       #language fr-FR "Use byte field in BIT structure"\r
+#string BYTE_QUESTION_BIT_HELP         #language en-US "The question refer to byte field in BIT structure"\r
+                                       #language fr-FR "The question refer to byte field in BIT structure"\r
+#string STR_UNION_BYTE_NUMERIC_PROMPT  #language en-US "UNION EfiVarStore byte numeric"\r
+                                       #language fr-FR "UNION EfiVarStore byte numeric"\r
+#string STR_UNION_BYTE_NUMERIC_HELP    #language en-US "Question refer to byte field in UNION type efivastore, the Standard default is 7 Manufacture default is 8"\r
+                                       #language fr-FR "Question refer to byte field in UNION type efivastore, the Standard default is 7 Manufacture default is 8"\r
+#string STR_UNION_BIT_NUMERIC_PROMPT   #language en-US "UNION EfiVarStore bit numeric"\r
+                                       #language fr-FR "UNION EfiVarStore bit numeric"\r
+#string STR_UNION_BIT_NUMERIC_HELP     #language en-US "Question refer to bit field in UNION type efivastore, the Standard default is 7 Manufacture default is 8"\r
+                                       #language fr-FR "Question refer to bit field in UNION type efivastore, the Standard default is 7 Manufacture default is 8"\r
 // Boot Order\r
 #string STR_BOOT_TITLE                 #language en-US "Boot"\r
 #string STR_BOOT_OPTIONS               #language en-US "Boot Order"\r