From af1a266670d040d2f4083ff309d732d648afba2a Mon Sep 17 00:00:00 2001
From: Angelos Mouzakitis <a.mouzakitis@virtualopensystems.com>
Date: Tue, 10 Oct 2023 14:33:42 +0000
Subject: Add submodule dependency files

Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
---
 .../MdeModulePkg/Universal/DriverSampleDxe/Vfr.vfr | 932 +++++++++++++++++++++
 1 file changed, 932 insertions(+)
 create mode 100644 roms/edk2/MdeModulePkg/Universal/DriverSampleDxe/Vfr.vfr

(limited to 'roms/edk2/MdeModulePkg/Universal/DriverSampleDxe/Vfr.vfr')

diff --git a/roms/edk2/MdeModulePkg/Universal/DriverSampleDxe/Vfr.vfr b/roms/edk2/MdeModulePkg/Universal/DriverSampleDxe/Vfr.vfr
new file mode 100644
index 000000000..65a65d4d1
--- /dev/null
+++ b/roms/edk2/MdeModulePkg/Universal/DriverSampleDxe/Vfr.vfr
@@ -0,0 +1,932 @@
+///** @file
+//
+//    Sample Setup formset.
+//
+//  Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
+//  SPDX-License-Identifier: BSD-2-Clause-Patent
+//
+//**/
+
+
+#include <Uefi/UefiMultiPhase.h>
+#include "NVDataStruc.h"
+
+//
+// Formset class used by Device Manager
+//
+#define EFI_NON_DEVICE_CLASS              0x00
+#define EFI_DISK_DEVICE_CLASS             0x01
+#define EFI_VIDEO_DEVICE_CLASS            0x02
+#define EFI_NETWORK_DEVICE_CLASS          0x04
+#define EFI_INPUT_DEVICE_CLASS            0x08
+#define EFI_ON_BOARD_DEVICE_CLASS         0x10
+#define EFI_OTHER_DEVICE_CLASS            0x20
+
+//
+// Formset subclass
+//
+#define EFI_SETUP_APPLICATION_SUBCLASS    0x00
+#define EFI_GENERAL_APPLICATION_SUBCLASS  0x01
+#define EFI_FRONT_PAGE_SUBCLASS           0x02
+#define EFI_SINGLE_USE_SUBCLASS           0x03
+
+#define EFI_USER_INFO_ACCESS_SETUP_ADMIN_GUID \
+  { 0x85b75607, 0xf7ce, 0x471e, { 0xb7, 0xe4, 0x2a, 0xea, 0x5f, 0x72, 0x32, 0xee } }
+
+#define PERL_GUID \
+  { 0x63E60A51, 0x497D, 0xD427, {0xC4, 0xA5, 0xB8, 0xAB, 0xDC, 0x3A, 0xAE, 0xB6 }}
+
+//
+// Labels definition
+//
+#define LABEL_1_VALUE               0x01
+#define LABEL_2_VALUE               0x1000
+#define LABEL_UPDATE_BBS            0x2222
+
+formset
+  guid      = DRIVER_SAMPLE_FORMSET_GUID,
+  title     = STRING_TOKEN(STR_FORM_SET_TITLE),
+  help      = STRING_TOKEN(STR_FORM_SET_TITLE_HELP),
+  classguid = EFI_HII_PLATFORM_SETUP_FORMSET_GUID,
+
+  //
+  // Notes: VfrCompiler will insert a Standard Default Storage declaration
+  // after the formset declaration.    >00000040: 5C 06 00 00 00 00.
+  // So we don't need to declare the Standard Default.
+  // Please check the vfr.lst file for details.
+  // To enable list file for VFR, add "-l" to VfrCompile <Command> in [Build.Visual-Form-Representation-File] as follows:
+  //          VfrCompile -l --no-pre-processing --output-directory ${d_path} $(OUTPUT_DIR)(+)${s_dir}(+)${s_base}.iii
+  //
+
+   //
+  // Define a Buffer Storage (EFI_IFR_VARSTORE)
+  //
+  varstore DRIVER_SAMPLE_CONFIGURATION,     // This is the data structure type
+    varid = CONFIGURATION_VARSTORE_ID,      // Optional VarStore ID
+    name  = MyIfrNVData,                    // Define referenced name in vfr
+    guid  = DRIVER_SAMPLE_FORMSET_GUID;     // GUID of this buffer storage
+
+  //
+  // Define a EFI variable Storage (EFI_IFR_VARSTORE_EFI)
+  //
+  efivarstore MY_EFI_VARSTORE_DATA,
+    attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,  // EFI variable attribures
+    name  = MyEfiVar,
+    guid  = DRIVER_SAMPLE_FORMSET_GUID;
+
+  //
+  // Define a Buffer Storage (EFI_IFR_VARSTORE)
+  //
+  efivarstore MY_EFI_BITS_VARSTORE_DATA,                                      // This is the data structure type
+    attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,  // EFI variable attribures
+    name  = MyEfiBitVar,                                                      // Define referenced name in vfr
+    guid  = DRIVER_SAMPLE_FORMSET_GUID;                                       // GUID of this buffer storage
+
+  efivarstore MY_EFI_UNION_DATA,
+    attribute = EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,  // EFI variable attribures
+    name  = MyEfiUnionVar,
+    guid  = DRIVER_SAMPLE_FORMSET_GUID;
+
+  //
+  // Define a Name/Value Storage (EFI_IFR_VARSTORE_NAME_VALUE)
+  //
+  namevaluevarstore MyNameValueVar,                // Define storage reference name in vfr
+    name = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME0), // Define Name list of this storage, refer it by MyNameValueVar[0]
+    name = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME1), // Define Name list of this storage, refer it by MyNameValueVar[1]
+    name = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME2), // Define Name list of this storage, refer it by MyNameValueVar[2]
+    guid = DRIVER_SAMPLE_FORMSET_GUID;             // GUID of this Name/Value storage
+
+  defaultstore MyStandardDefault,
+    prompt      = STRING_TOKEN(STR_STANDARD_DEFAULT_PROMPT),
+    attribute   = 0x0000;                         // Default ID: 0000 standard default
+
+  defaultstore MyManufactureDefault,
+    prompt      = STRING_TOKEN(STR_MANUFACTURE_DEFAULT_PROMPT),
+    attribute   = 0x0001;                         // Default ID: 0001 manufacture default
+
+  //
+  // Define a Form (EFI_IFR_FORM)
+  //
+  form formid = 1,                                // Form ID
+       title  = STRING_TOKEN(STR_FORM1_TITLE);    // Form title
+
+    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT);
+
+    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT2);
+
+    //
+    // Define a display only text (EFI_IFR_TEXT)
+    //
+    text
+      help   = STRING_TOKEN(STR_TEXT_HELP),       // Help string
+      text   = STRING_TOKEN(STR_CPU_STRING),      // Prompt string
+        text   = STRING_TOKEN(STR_CPU_STRING2);   // TextTwo
+
+    //
+    // Define action button (EFI_IFR_ACTION)
+    //
+    text
+      help   = STRING_TOKEN(STR_EXIT_TEXT),
+      text   = STRING_TOKEN(STR_EXIT_TEXT),
+      flags  = INTERACTIVE,   // VfrCompiler will generate opcode EFI_IFR_ACTION for Text marked as INTERACTIVE
+      key    = 0x1237;
+
+    text
+      help   = STRING_TOKEN(STR_SAVE_TEXT),
+      text   = STRING_TOKEN(STR_SAVE_TEXT),
+      flags  = INTERACTIVE,
+      key    = 0x1238;
+
+    text
+      help   = STRING_TOKEN(STR_SAVE_CURRENT),
+      text   = STRING_TOKEN(STR_SAVE_CURRENT),
+      flags  = INTERACTIVE,
+      key    = 0x1243;
+
+    text
+      help   = STRING_TOKEN(STR_DISCARD_CURRENT_AND_EXIT),
+      text   = STRING_TOKEN(STR_DISCARD_CURRENT_AND_EXIT),
+      flags  = INTERACTIVE,
+      key    = 0x1244;
+    //
+    // Define oneof (EFI_IFR_ONE_OF)
+    //
+    oneof name = MyOneOf,                                // Define reference name for Question
+      varid   = MyIfrNVData.SuppressGrayOutSomething,    // Use "DataStructure.Member" to reference Buffer Storage
+      prompt  = STRING_TOKEN(STR_ONE_OF_PROMPT),
+      help    = STRING_TOKEN(STR_ONE_OF_HELP),
+      //
+      // Define an option (EFI_IFR_ONE_OF_OPTION)
+      //
+      option text = STRING_TOKEN(STR_ONE_OF_TEXT4), value = 0x0, flags = 0;
+      option text = STRING_TOKEN(STR_ONE_OF_TEXT5), value = 0x1, flags = 0;
+      //
+      // DEFAULT indicate this option will be marked with EFI_IFR_OPTION_DEFAULT
+      //
+      option text = STRING_TOKEN(STR_ONE_OF_TEXT6), value = 0x2, flags = DEFAULT;
+    endoneof;
+
+    oneof varid  = MyIfrNVData.BootOrderLarge,
+      prompt      = STRING_TOKEN(STR_ONE_OF_PROMPT),
+      help        = STRING_TOKEN(STR_ONE_OF_HELP),
+      default value = cond (pushthis == 0 ? 0 : cond ((questionref(MyOneOf) >> 0x4 & 0xF00) == 0x0 + 0x2 ? 0 : 1)),
+      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0x0, flags = 0;
+      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 0x1, flags = 0;
+    endoneof;
+
+    grayoutif  ideqval MyIfrNVData.SuppressGrayOutSomething == 0x1;
+      suppressif questionref(MyOneOf) == 0x0;
+
+        checkbox varid   = MyIfrNVData.ChooseToActivateNuclearWeaponry,
+                 prompt   = STRING_TOKEN(STR_CHECK_BOX_PROMPT),
+                 help     = STRING_TOKEN(STR_CHECK_BOX_HELP),
+                 //
+                 // CHECKBOX_DEFAULT indicate this checkbox is marked with EFI_IFR_CHECKBOX_DEFAULT
+                 // CHECKBOX_DEFAULT_MFG indicate EFI_IFR_CHECKBOX_DEFAULT_MFG.
+                 //
+                 flags    = CHECKBOX_DEFAULT | CHECKBOX_DEFAULT_MFG,
+                 default  = TRUE,
+        endcheckbox;
+      endif;
+    endif;
+
+    //
+    // Ordered list:
+    //   sizeof(MyIfrNVData) storage must be UINT8 array, and
+    //   size written for the variable must be size of the entire
+    //   variable.
+    //
+    //
+    suppressif ideqval MyIfrNVData.SuppressGrayOutSomething == 0x0;
+
+      //
+      // label is defined as an anchor where you want to insert some dynamic
+      // opcodes created on-the-fly
+      //
+      label LABEL_UPDATE_BBS;
+
+      orderedlist
+                varid       = MyIfrNVData.BootOrder,
+                prompt      = STRING_TOKEN(STR_BOOT_OPTIONS),
+                help        = STRING_TOKEN(STR_NULL_STRING),
+                flags       = RESET_REQUIRED,
+                option text = STRING_TOKEN(STR_BOOT_OPTION2), value = 2, flags = 0;
+                option text = STRING_TOKEN(STR_BOOT_OPTION1), value = 1, flags = 0;
+                option text = STRING_TOKEN(STR_BOOT_OPTION3), value = 3, flags = 0;
+              suppressif ideqval MyIfrNVData.BootOrderLarge == 0;
+                option text = STRING_TOKEN(STR_BOOT_OPTION4), value = 4, flags = 0;
+              endif;
+      endlist;
+
+      //
+      // label should be paired with each other
+      //
+      label LABEL_END;
+
+    endif;    // end suppressif
+
+    disableif ideqval MyIfrNVData.SuppressGrayOutSomething == 0x2;
+      orderedlist
+        varid       = MyIfrNVData.OrderedList,
+        prompt      = STRING_TOKEN(STR_TEST_OPCODE),
+        help        = STRING_TOKEN(STR_TEXT_HELP),
+        flags       = RESET_REQUIRED,
+        option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 3, flags = 0;
+        option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 2, flags = 0;
+        option text = STRING_TOKEN(STR_ONE_OF_TEXT3), value = 1, flags = 0;
+        default     = {1,2,3},
+      endlist;
+    endif;
+
+    label 100;
+
+    //
+    // Define a hyperlink (EFI_IFR_REF)
+    //
+    goto 0x1234,                                  // Destination Form ID
+      prompt  = STRING_TOKEN(STR_GOTO_DYNAMIC),   // Prompt string
+      help    = STRING_TOKEN(STR_GOTO_HELP),      // Help string
+      flags   = INTERACTIVE,                      // INTERACTIVE indicate it's marked with EFI_IFR_FLAG_CALLBACK
+      key     = 0x1234;                           // Question ID which will be passed-in in COnfigAccess.Callback()
+
+    goto 0x1234,
+      prompt  = STRING_TOKEN(STR_GOTO_DYNAMIC2),
+      help    = STRING_TOKEN(STR_GOTO_HELP),
+      flags   = INTERACTIVE,
+      key     = 0x1235;
+
+    oneof varid  = MyIfrNVData.TestLateCheck,
+      prompt      = STRING_TOKEN(STR_TEST_OPCODE),
+      help        = STRING_TOKEN(STR_ONE_OF_HELP),
+      flags       = RESET_REQUIRED,
+      option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 0, flags = 0;
+      option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 1, flags = DEFAULT;
+      warningif prompt = STRING_TOKEN(STR_WARNING_POPUP), timeout = 5,
+        ideqval MyIfrNVData.TestLateCheck == 0
+      endif;
+
+    endoneof;
+
+    oneof varid  = MyIfrNVData.TestLateCheck2,
+      prompt      = STRING_TOKEN(STR_TEST_OPCODE2),
+      help        = STRING_TOKEN(STR_ONE_OF_HELP),
+      flags       = RESET_REQUIRED,
+      option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 0, flags = DEFAULT;
+      option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 1, flags = 0;
+
+      inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
+        ideqid MyIfrNVData.TestLateCheck == MyIfrNVData.TestLateCheck2
+      endif;
+
+    endoneof;
+
+    oneof varid  = MyIfrNVData.QuestionAboutTreeHugging,
+      prompt      = STRING_TOKEN(STR_ONE_OF_PROMPT_KEYWORD),
+      help        = STRING_TOKEN(STR_ONE_OF_HELP),
+      flags       = RESET_REQUIRED,
+      option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 0, flags = 0;
+      option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 1, flags = DEFAULT;
+      option text = STRING_TOKEN(STR_ONE_OF_TEXT3), value = 3, flags = 0;
+    endoneof;
+
+    //
+    // Define a string (EFI_IFR_STRING)
+    //
+    string    varid    = MyIfrNVData.MyStringData,
+              prompt   = STRING_TOKEN(STR_MY_STRING_PROMPT2),
+              help     = STRING_TOKEN(STR_MY_STRING_HELP2),
+              flags    = INTERACTIVE,
+              key      = 0x1236,
+              minsize  = 6,
+              maxsize  = 40,
+              inconsistentif prompt = STRING_TOKEN(STR_STRING_CHECK_ERROR_POPUP),
+                pushthis != stringref(STRING_TOKEN(STR_STRING_CHECK))
+              endif;
+    endstring;
+
+    //
+    // Define a numeric (EFI_IFR_NUMERIC)
+    //
+    numeric varid   = MyIfrNVData.HowOldAreYouInYearsManual,
+            prompt  = STRING_TOKEN(STR_NUMERIC_READONLY_PROMPT),
+            help    = STRING_TOKEN(STR_NUMERIC_HELP0),
+            flags   = READ_ONLY,  // READ_ONLY indicate it's marked with EFI_IFR_FLAG_READ_ONLY
+            minimum = 0,
+            maximum = 0xf0,
+            step    = 0,          // Stepping of 0 equates to a manual entering
+                                  // of a value, otherwise it will be adjusted by "+"/"-"
+            default = 21,         // defaultstore could be used to specify the default type
+                                  // If no defaultstore is specified, it implies Standard Default
+
+    endnumeric;
+
+    numeric varid   = MyIfrNVData.HowOldAreYouInYearsManual,
+            prompt  = STRING_TOKEN(STR_NUMERIC_MANUAL_PROMPT),
+            help    = STRING_TOKEN(STR_NUMERIC_HELP0),
+            minimum = 0,
+            maximum = 0xf0,
+            step    = 0,
+            default value = questionrefval(devicepath = STRING_TOKEN (STR_DEVICE_PATH), guid = DRIVER_SAMPLE_FORMSET_GUID, 0x1111),
+
+            inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
+              ideqval MyIfrNVData.HowOldAreYouInYearsManual == 99
+              OR
+              ideqid  MyIfrNVData.HowOldAreYouInYearsManual == MyEfiVar.Field8
+              OR
+              ideqvallist MyIfrNVData.HowOldAreYouInYearsManual == 1 3 5 7
+            endif;
+
+    endnumeric;
+
+    numeric varid   = MyEfiVar.Field8,                    // Reference of EFI variable storage
+            questionid  = 0x1111,
+            prompt  = STRING_TOKEN(STR_TALL_HEX_PROMPT),
+            help    = STRING_TOKEN(STR_NUMERIC_HELP1),
+            flags   = DISPLAY_UINT_HEX | INTERACTIVE,     // Display in HEX format (if not specified, default is in decimal format)
+            minimum = 0,
+            maximum = 250,
+            default = 18, defaultstore = MyStandardDefault,     // This is standard default value
+            default = 19, defaultstore = MyManufactureDefault,  // This is manufacture default value
+
+    endnumeric;
+
+    //
+    // Define numeric using Name/Value Storage
+    //
+    numeric varid   = MyNameValueVar[0],     // This numeric take NameValueVar0 as storage
+            prompt  = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME0),
+            help    = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME0_HELP),
+            //
+            // Size should be defined for numeric when use Name/Value storage
+            // Valid value for numerice size are: NUMERIC_SIZE_1, NUMERIC_SIZE_2, NUMERIC_SIZE_4 and NUMERIC_SIZE_8
+            //
+            flags   = NUMERIC_SIZE_1,        // Size of this numeric is 1 byte
+            minimum = 0,
+            maximum = 0xff,
+            step    = 0,
+            locked,
+            default = 16, defaultstore = MyStandardDefault,     // This is standard default value
+            default = 17, defaultstore = MyManufactureDefault,  // This is manufacture default value
+    endnumeric;
+
+    numeric varid   = MyNameValueVar[1],     // This numeric take NameValueVar1 as storage
+            prompt  = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME1),
+            help    = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME1_HELP),
+            flags   = NUMERIC_SIZE_2,        // Size of this numeric is 2 bytes
+            minimum = 0,
+            maximum = 0xffff,
+            step    = 0,
+            default = 18, defaultstore = MyStandardDefault,     // This is standard default value
+            default = 19, defaultstore = MyManufactureDefault,  // This is manufacture default value
+    endnumeric;
+
+    //
+    // Define string using Name/Value Storage
+    //
+    string    varid    = MyNameValueVar[2],     // This string take NameValueVar2 as storage
+              prompt   = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME2),
+              help     = STRING_TOKEN(STR_NAME_VALUE_VAR_NAME2_HELP),
+              minsize  = 2,
+              maxsize  = 0x14,
+    endstring;
+
+    oneof varid   = MyEfiVar.Field16,
+      prompt      = STRING_TOKEN(STR_ONE_OF_PROMPT),
+      help        = STRING_TOKEN(STR_NUMERIC_NUM_HELP),
+      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0x0, flags = 0;
+      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 0x1, flags = DEFAULT;
+    endoneof;
+
+    label LABEL_1_VALUE;
+    label LABEL_2_VALUE;
+
+    grayoutif  ideqval MyIfrNVData.HowOldAreYouInYearsManual == 23 AND ideqval MyIfrNVData.SuppressGrayOutSomething == 0x1;
+      numeric varid   = MyIfrNVData.HowOldAreYouInYears,
+              prompt  = STRING_TOKEN(STR_NUMERIC_STEP_PROMPT),
+              help    = STRING_TOKEN(STR_NUMERIC_HELP2),
+              minimum = 0,
+              maximum = 243,
+              step    = 1,
+              default = 18, defaultstore = MyStandardDefault,     // This is standard default value
+              default = 19, defaultstore = MyManufactureDefault,  // This is manufacture default value
+
+      endnumeric;
+    endif;
+
+    numeric varid   = MyIfrNVData.GetDefaultValueFromAccess,
+            questionid = 0x1239,
+            prompt  = STRING_TOKEN(STR_DEFAULT_VALUE_FROM_ACCESS_PROMPT),
+            help    = STRING_TOKEN(STR_DEFAULT_VALUE_FROM_ACCESS_HELP),
+            flags   = DISPLAY_UINT_HEX | INTERACTIVE,
+            minimum = 0,
+            maximum = 255,
+            step    = 1,
+            default = 18,
+    endnumeric;
+
+    numeric varid   = MyIfrNVData.GetDefaultValueFromCallBack,
+            questionid = 0x1240,
+            prompt  = STRING_TOKEN(STR_DEFAULT_VALUE_FROM_CALLBACK_PROMPT),
+            help    = STRING_TOKEN(STR_DEFAULT_VALUE_FROM_CALLBACK_HELP),
+            flags   = DISPLAY_UINT_HEX | INTERACTIVE,
+            minimum = 0,
+            maximum = 255,
+            step    = 1,
+            default = 18,
+    endnumeric;
+
+    orderedlist
+        varid       = MyIfrNVData.GetDefaultValueFromCallBackForOrderedList,
+        questionid  = 0x1252,
+        prompt      = STRING_TOKEN(STR_DEFAULT_VALUE_FROM_CALLBACK_PROMPT),
+        help        = STRING_TOKEN(STR_DEFAULT_VALUE_FROM_CALLBACK_HELP),
+        flags       = INTERACTIVE,
+        option text = STRING_TOKEN(STR_ONE_OF_TEXT1), value = 1, flags = 0;
+        option text = STRING_TOKEN(STR_ONE_OF_TEXT2), value = 2, flags = 0;
+        option text = STRING_TOKEN(STR_ONE_OF_TEXT3), value = 3, flags = 0;
+    endlist;
+
+    resetbutton
+      defaultstore = MyStandardDefault,
+      prompt   = STRING_TOKEN(STR_STANDARD_DEFAULT_PROMPT),
+      help     = STRING_TOKEN(STR_STANDARD_DEFAULT_HELP),
+    endresetbutton;
+
+    resetbutton
+      defaultstore = MyManufactureDefault,
+      prompt   = STRING_TOKEN(STR_MANUFACTURE_DEFAULT_PROMPT),
+      help     = STRING_TOKEN(STR_MANUFACTURE_DEFAULT_HELP),
+    endresetbutton;
+
+    //
+    // Sample use case for IFR Security op-code
+    //
+    grayoutif NOT security (EFI_USER_INFO_ACCESS_SETUP_ADMIN_GUID);
+      text
+        help = STRING_TOKEN(STR_TEXT_SECRUITY_TEST_HELP),
+        text = STRING_TOKEN(STR_TEXT_SECRUITY_TEST_TEXT);
+    endif;
+
+    numeric varid   = MyEfiVar.SubmittedCallback,
+            questionid = 0x1250,
+            prompt  = STRING_TOKEN(STR_SUBMITTED_CALLBACK_TEST_PROMPT),
+            help    = STRING_TOKEN(STR_SUBMITTED_CALLBACK_TEST_HELP),
+            flags   = INTERACTIVE,
+            minimum = 0,
+            maximum = 255,
+            default = 18,
+    endnumeric;
+
+    text
+      help  = STRING_TOKEN(STR_POPUP_TEST_HELP),
+      text  = STRING_TOKEN(STR_POPUP_TEST_PROMPT),
+      flags = INTERACTIVE,
+      key   = 0x1330;
+
+    goto 2,
+      prompt = STRING_TOKEN(STR_GOTO_FORM2), //SecondSetupPage  // this too has no end-op and basically it's a jump to a form ONLY
+      help   = STRING_TOKEN(STR_GOTO_HELP);
+
+    goto 3,
+      prompt = STRING_TOKEN(STR_GOTO_FORM3), //ThirdSetupPage  // this too has no end-op and basically it's a jump to a form ONLY
+      help   = STRING_TOKEN(STR_GOTO_HELP);
+
+    goto 4,
+      prompt = STRING_TOKEN(STR_GOTO_FORM4), //FourthSetupPage  // this too has no end-op and basically it's a jump to a form ONLY
+      help   = STRING_TOKEN(STR_GOTO_HELP);
+
+    goto 5,
+      prompt = STRING_TOKEN(STR_GOTO_FORM5), //FifthSetupPage  // this too has no end-op and basically it's a jump to a form ONLY
+      help   = STRING_TOKEN(STR_GOTO_FORM5_HELP);
+
+    goto 6,
+      prompt = STRING_TOKEN(STR_GOTO_FORM6), //SixthSetupPage  // this too has no end-op and basically it's a jump to a form ONLY
+      help   = STRING_TOKEN(STR_GOTO_HELP);
+
+    goto
+      formsetguid = DRIVER_SAMPLE_INVENTORY_GUID,
+      formid  = 0x1,
+      question = 0x1,
+      prompt  = STRING_TOKEN(STR_GOTO_ANOTHER_FORMSET),
+      help    = STRING_TOKEN(STR_GOTO_ANOTHER_FORMSET_HELP);
+
+    guidop
+      guid = DRIVER_SAMPLE_FORMSET_GUID,
+      datatype = MY_EFI_VARSTORE_DATA,
+        data.Field8  = 0x21,
+        data.Field16 = 0x2121,
+        data.OrderedList[0] = 0x21,
+    endguidop;
+
+     goto 7,
+      prompt = STRING_TOKEN(STR_GOTO_FORM7),
+      help   = STRING_TOKEN(STR_GOTO_FORM7_HELP);
+
+  endform;
+
+  suppressif ideqval MyIfrNVData.BootOrderLarge == 0;
+    form formid = 2,               // SecondSetupPage,
+      title = STRING_TOKEN(STR_FORM2_TITLE);  // note formid is a variable (for readability) (UINT16) - also added Form to the line to signify the Op-Code
+
+      date
+        name    = Date,
+        prompt  = STRING_TOKEN(STR_DATE_PROMPT),
+        help    = STRING_TOKEN(STR_DATE_HELP),
+        flags   = STORAGE_TIME,
+        default = 2004/1/1,
+
+        inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
+          ideqval Date.Day == 31
+          AND
+          ideqvallist Date.Month == 2 4 6 9 11
+        endif;
+
+        //
+        // If the day is 30 AND month is 2
+        //
+        inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
+          ideqval Date.Day == 30
+          AND
+          ideqval Date.Month == 2
+        endif;
+
+        //
+        // If the day is 29 AND month is 2 AND it year is NOT a leapyear
+        //
+        inconsistentif prompt = STRING_TOKEN(STR_ERROR_POPUP),
+          ideqval Date.Day == 0x1D
+          AND
+          ideqval Date.Month == 2
+          AND
+          NOT
+          ideqvallist Date.Year == 2004 2008 20012 20016 2020 2024 2028 2032 2036
+        endif;
+
+      enddate;
+
+      text
+        help   = STRING_TOKEN(STR_SAVE_CURRENT_AND_EXIT),
+        text   = STRING_TOKEN(STR_SAVE_CURRENT_AND_EXIT),
+        flags  = INTERACTIVE,
+        key    = 0x1241;
+
+      text
+        help   = STRING_TOKEN(STR_DISCARD_CURRENT),
+        text   = STRING_TOKEN(STR_DISCARD_CURRENT),
+        flags  = INTERACTIVE,
+        key    = 0x1242;
+
+      time
+        prompt  = STRING_TOKEN(STR_TIME_PROMPT),
+        help    = STRING_TOKEN(STR_TIME_HELP),
+        flags   = STORAGE_TIME,
+      endtime;
+
+      time
+            name    = MyTime,
+            varid   = MyIfrNVData.Time,
+            prompt  = STRING_TOKEN(STR_TIME_PROMPT),
+            help    = STRING_TOKEN(STR_TIME_PROMPT),
+            flags   = STORAGE_NORMAL | SECOND_SUPPRESS,
+            default = 15:33:33,
+      endtime;
+
+      checkbox varid   = MyIfrNVData.ChooseToActivateNuclearWeaponry,
+              prompt   = STRING_TOKEN(STR_CHECK_BOX_PROMPT),
+              help     = STRING_TOKEN(STR_CHECK_BOX_HELP),
+              flags    = CHECKBOX_DEFAULT,
+      endcheckbox;
+
+      text
+        help = STRING_TOKEN(STR_TEXT_HELP),
+        text = STRING_TOKEN(STR_TEXT_TEXT_1);
+
+      text
+        help   = STRING_TOKEN(STR_TEXT_HELP),
+        text   = STRING_TOKEN(STR_TEXT_TEXT_1),
+        text   = STRING_TOKEN(STR_TEXT_TEXT_2);
+
+      goto 1,
+        prompt = STRING_TOKEN(STR_GOTO_FORM1), //MainSetupPage  // this too has no end-op and basically it's a jump to a form ONLY
+        help   = STRING_TOKEN(STR_GOTO_HELP);
+
+    goto
+      varid   = MyIfrNVData.RefData,
+      prompt  = STRING_TOKEN(STR_GOTO_DYNAMIC3),
+      help    = STRING_TOKEN(STR_GOTO_DYNAMIC3_HELP),
+      flags   = INTERACTIVE,
+      key     = 0x1248,
+      //
+      // Set the defult value, format is QuestionId; FormId; FormsetGuid; Device Path String Token
+      //
+      default = 0;0;ZERO_GUID;STRING_TOKEN(STR_NULL_STRING),
+    ;                                                         // goto opcode end flag.
+
+    goto
+      prompt  = STRING_TOKEN(STR_GOTO_DYNAMIC4),
+      help    = STRING_TOKEN(STR_GOTO_DYNAMIC4_HELP),
+      flags   = INTERACTIVE,
+      key     = 0x1249;
+
+    endform;
+  endif;
+
+  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
+
+    suppressif  ideqval MyEfiVar.Field8 == 111;
+      text
+        help = STRING_TOKEN(STR_TEXT_HELP),
+        text = STRING_TOKEN(STR_TEXT_TEXT_1);
+    endif;
+
+    goto 1,
+      prompt = STRING_TOKEN(STR_GOTO_FORM1), //MainSetupPage
+      help   = STRING_TOKEN(STR_GOTO_HELP);
+
+    numeric varid   = MyIfrNVData.DynamicRefresh,
+            prompt  = STRING_TOKEN(STR_NUMERIC_MANUAL_PROMPT),
+            help    = STRING_TOKEN(STR_NUMERIC_HELP0),
+            flags   = INTERACTIVE,
+            key     = 0x5678,
+            minimum = 0,
+            maximum = 0xff,
+            step    = 0,
+            default = 0,
+            refresh interval = 3             // Refresh interval in seconds
+    endnumeric;
+
+    grayoutif  match2 (stringref(STRING_TOKEN(STR_PATTERN)), stringref(STRING_TOKEN(STR_STRING)), PERL_GUID);
+      numeric
+        varid   = MyIfrNVData.Match2,
+        prompt  = STRING_TOKEN(STR_MATCH2_PROMPT),
+        help    = STRING_TOKEN(STR_MATCH2_HELP),
+        minimum = 0,
+        maximum = 243,
+      endnumeric;
+    endif;
+
+    label LABEL_UPDATE2;
+    label LABEL_END;
+
+  endform;
+
+  formmap formid = 4,
+    maptitle = STRING_TOKEN(STR_SAMPL_MAP_METHOD);
+    mapguid  = DRIVER_SAMPLE_FORMSET_GUID;
+    maptitle = STRING_TOKEN(STR_STANDARD_MAP_METHOD);
+    mapguid  = EFI_HII_STANDARD_FORM_GUID;
+
+    oneof varid = MyIfrNVData.SerialPortNo,
+      prompt  = STRING_TOKEN(STR_SERIAL_PORT),
+      help    = STRING_TOKEN(STR_ONE_OF_HELP),
+
+      read    cond (get(MyIfrNVData.SerialPortStatus) != 0 ? 0 : cond ((get(MyIfrNVData.SerialPortIo) & 0xF00) >> 0x8 == get(MyIfrNVData.SerialPortIrq) - 1 ? UNDEFINED : map (get(MyIfrNVData.SerialPortIo) : 0x3f8,1; 0x2F8,2; 0x3E8,3; 0x2E8,4;)));
+      write   set(MyIfrNVData.SerialPortStatus, pushthis != 0) AND set(MyIfrNVData.SerialPortIo, map (pushthis : 1,0x3F8; 2,0x2F8; 3,0x3E8; 4,0x2E8;)) AND set (MyIfrNVData.SerialPortIrq, map (pushthis: 1,4; 2,3; 3,4; 4,3;));
+
+      option text = STRING_TOKEN(STR_SERIAL_PORT_DISABLE), value = 0x0, flags = DEFAULT;
+      option text = STRING_TOKEN(STR_SERIAL_PORT1), value = 0x1, flags = 0;
+      option text = STRING_TOKEN(STR_SERIAL_PORT2), value = 0x2, flags = 0;
+      option text = STRING_TOKEN(STR_SERIAL_PORT3), value = 0x3, flags = 0;
+      option text = STRING_TOKEN(STR_SERIAL_PORT4), value = 0x4, flags = 0;
+    endoneof;
+
+    grayoutif TRUE;
+      checkbox varid = MyIfrNVData.SerialPortStatus,
+        prompt   = STRING_TOKEN(STR_SERIAL_PORT_STATUS),
+        help     = STRING_TOKEN(STR_CHECK_BOX_HELP),
+      endcheckbox;
+    endif;
+
+    grayoutif TRUE;
+      suppressif ideqval MyIfrNVData.SerialPortStatus == 0;
+        oneof varid = MyIfrNVData.SerialPortIo,
+          prompt  = STRING_TOKEN(STR_SERIAL_PORT_IO_ADDRESS),
+          help    = STRING_TOKEN(STR_ONE_OF_HELP),
+
+          option text = STRING_TOKEN(STR_SERIAL_PORT1_IOADDR), value = 0x3F8, flags = DEFAULT;
+          option text = STRING_TOKEN(STR_SERIAL_PORT2_IOADDR), value = 0x2F8, flags = 0;
+          option text = STRING_TOKEN(STR_SERIAL_PORT3_IOADDR), value = 0x3E8, flags = 0;
+          option text = STRING_TOKEN(STR_SERIAL_PORT4_IOADDR), value = 0x2E8, flags = 0;
+        endoneof;
+      endif;
+    endif;
+
+    grayoutif TRUE;
+      suppressif ideqval MyIfrNVData.SerialPortStatus == 0;
+        oneof varid = MyIfrNVData.SerialPortIrq,
+          prompt  = STRING_TOKEN(STR_SERIAL_PORT_IRQ),
+          help    = STRING_TOKEN(STR_ONE_OF_HELP),
+
+          option text = STRING_TOKEN(STR_SERIAL_PORT13_IRQ), value = 0x4, flags = DEFAULT;
+          option text = STRING_TOKEN(STR_SERIAL_PORT24_IRQ), value = 0x3, flags = 0;
+        endoneof;
+      endif;
+    endif;
+
+    goto 1,
+      prompt = STRING_TOKEN(STR_GOTO_FORM1), //MainSetupPage
+      help   = STRING_TOKEN(STR_GOTO_HELP);
+
+  endform;
+
+  form formid = 5,            // Modal form
+       title = STRING_TOKEN(STR_MODAL_FORM_TITLE);
+    //
+    //  This form is a modal form.
+    //
+    modal;
+    text
+      help   = STRING_TOKEN(STR_EXIT_TEXT),
+      text   = STRING_TOKEN(STR_EXIT_TEXT),
+      flags  = INTERACTIVE,   // VfrCompiler will generate opcode EFI_IFR_ACTION for Text marked as INTERACTIVE
+      key    = 0x1245;
+
+    text
+      help   = STRING_TOKEN(STR_SAVE_TEXT),
+      text   = STRING_TOKEN(STR_SAVE_TEXT),
+      flags  = INTERACTIVE,   // VfrCompiler will generate opcode EFI_IFR_ACTION for Text marked as INTERACTIVE
+      key    = 0x1246;
+  endform;
+
+  form formid = 6,            // Form to show the refresh guid group op-code
+       title = STRING_TOKEN(STR_FORM6_TITLE);
+
+    text
+      help   = STRING_TOKEN(STR_TEXT_REFRESH_GUID),
+      text   = STRING_TOKEN(STR_TEXT_REFRESH_GUID);
+
+    numeric varid   = MyIfrNVData.RefreshGuidCount,
+            prompt  = STRING_TOKEN(STR_TEXT_REFRESH_GUID_COUNT),
+            help    = STRING_TOKEN(STR_NUMERIC_HELP0),
+            flags   = INTERACTIVE,
+            key     = 0x1247,
+            minimum = 0,
+            maximum = 0xff,
+            step    = 0,
+            default = 0,
+            refreshguid = EFI_IFR_REFRESH_ID_OP_GUID,
+    endnumeric;
+
+    label LABEL_UPDATE3;
+    label LABEL_END;
+
+  endform;
+
+  form formid = 0x1234,            // Dynamically created page,
+       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
+
+    label LABEL_UPDATE1;
+    //
+    // This is where we will insert dynamic created opcodes
+    //
+    label LABEL_END;
+
+  endform;
+
+
+  form formid = 7,                          // Form to show the question refer to union and bit Varstore
+    title = STRING_TOKEN(STR_FORM7_TITLE);
+
+    subtitle text = STRING_TOKEN(STR_NEST_BIT_EFI_VARSTORE);
+
+    checkbox varid   = MyEfiBitVar.BitsData.NestBitCheckbox,
+             prompt   = STRING_TOKEN(STR_BIT_NEST_CHECK_BOX_PROMPT),
+             help     = STRING_TOKEN(STR_BIT_NEST_CHECK_BOX_HELP),
+             flags    = CHECKBOX_DEFAULT,
+    endcheckbox;
+
+    oneof varid  = MyEfiBitVar.BitsData.NestBitOneof,
+      prompt      = STRING_TOKEN(STR_ONE_OF_BIT_NEST_PROMPT),
+      help        = STRING_TOKEN(STR_ONE_OF_BIT_NEST_HELP),
+      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0, flags = MANUFACTURING;
+      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 1, flags = DEFAULT;
+    endoneof;
+
+    numeric varid   = MyEfiBitVar.BitsData.NestBitNumeric,
+            questionid = 0x6666,
+            prompt  = STRING_TOKEN(STR_BIT_NEST_NUMERIC_PROMPT),
+            help    = STRING_TOKEN(STR_BIT_NEST_NUMERIC_DEFAULT_HELP),
+            flags   = DISPLAY_UINT_HEX | INTERACTIVE,
+            minimum = 2,
+            maximum = 15,
+            step    = 1,
+    endnumeric;
+
+    oneof varid  = MyEfiBitVar.BitsData.NestByteField,
+      prompt      = STRING_TOKEN(BYTE_QUESTION_NEST_BIT_PROMPT),
+      help        = STRING_TOKEN(BYTE_QUESTION_NEST_BIT_HELP),
+      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0, flags = MANUFACTURING;
+      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 1, flags = DEFAULT;
+    endoneof;
+
+    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT2);
+    subtitle text = STRING_TOKEN(STR_BIT_EFI_VARSTORE);
+
+    checkbox varid   = MyEfiBitVar.EfiBitCheckbox,
+      prompt   = STRING_TOKEN(STR_BIT_CHECK_BOX_PROMPT),
+      help     = STRING_TOKEN(STR_BIT_CHECK_BOX_HELP),
+      flags    = CHECKBOX_DEFAULT,
+    endcheckbox;
+
+  grayoutif  ideqval MyEfiBitVar.EfiBitGrayoutTest == 0;
+    numeric varid   = MyEfiBitVar.EfiBitNumeric,
+            prompt  = STRING_TOKEN(STR_BIT_NUMERIC_PROMPT),
+            help    = STRING_TOKEN(STR_BIT_NUMERIC_HELP),
+            minimum = 0,
+            maximum = 7,
+            step    = 0,
+            default = 4, defaultstore = MyStandardDefault,
+            default = 5, defaultstore = MyManufactureDefault,
+    endnumeric;
+  endif;
+
+      oneof varid  = MyEfiBitVar.EfiBitOneof,
+      questionid = 0x9999,
+      prompt      = STRING_TOKEN(STR_ONE_OF_BIT_PROMPT),
+      help        = STRING_TOKEN(STR_ONE_OF_BIT_HELP),
+      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0x0, flags = MANUFACTURING;
+      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 0x1, flags = DEFAULT;
+    endoneof;
+
+    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT2);
+    subtitle text = STRING_TOKEN(STR_NEST_BIT_VARSTORE);
+    checkbox varid   = MyIfrNVData.MyBitData.NestBitCheckbox,
+             prompt   = STRING_TOKEN(STR_BIT_NEST_CHECK_BOX_PROMPT),
+             help     = STRING_TOKEN(STR_BIT_NEST_CHECK_BOX_HELP),
+             flags    = CHECKBOX_DEFAULT,
+    endcheckbox;
+
+    oneof varid  = MyIfrNVData.MyBitData.NestBitOneof,
+      prompt      = STRING_TOKEN(STR_ONE_OF_BIT_NEST_PROMPT),
+      help        = STRING_TOKEN(STR_ONE_OF_BIT_NEST_HELP),
+      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0, flags = MANUFACTURING;
+      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 1, flags = DEFAULT;
+    endoneof;
+
+    numeric varid   = MyIfrNVData.MyBitData.NestBitNumeric,
+            prompt  = STRING_TOKEN(STR_BIT_NEST_NUMERIC_PROMPT),
+            help    = STRING_TOKEN(STR_BIT_NEST_NUMERIC_HELP),
+            minimum = 0,
+            maximum = 7,
+            step    = 0,
+            default = 6, defaultstore = MyStandardDefault,
+            default = 7, defaultstore = MyManufactureDefault,
+    endnumeric;
+
+    oneof varid  = MyIfrNVData.MyBitData.NestByteField,
+      prompt      = STRING_TOKEN(BYTE_QUESTION_NEST_BIT_PROMPT),
+      help        = STRING_TOKEN(BYTE_QUESTION_NEST_BIT_HELP),
+      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0, flags = MANUFACTURING;
+      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 1, flags = DEFAULT;
+    endoneof;
+
+    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT2);
+    subtitle text = STRING_TOKEN(STR_BIT_VARSTORE);
+
+    oneof varid  = MyIfrNVData.BitOneof,
+      prompt      = STRING_TOKEN(STR_ONE_OF_BIT_PROMPT),
+      help        = STRING_TOKEN(STR_ONE_OF_BIT_HELP),
+      option text = STRING_TOKEN(STR_BOOT_ORDER1), value = 0, flags = MANUFACTURING;
+      option text = STRING_TOKEN(STR_BOOT_ORDER2), value = 1, flags = DEFAULT;
+    endoneof;
+
+    checkbox varid   = MyIfrNVData.BitCheckbox,
+             prompt   = STRING_TOKEN(STR_BIT_CHECK_BOX_PROMPT),
+             help     = STRING_TOKEN(STR_BIT_CHECK_BOX_HELP),
+             flags    = CHECKBOX_DEFAULT,
+    endcheckbox;
+
+    numeric varid   = MyIfrNVData.BitNumeric,
+            prompt  = STRING_TOKEN(STR_BIT_NUMERIC_PROMPT),
+            help    = STRING_TOKEN(STR_BUFFER_BIT_NUMERIC_HELP),
+            minimum = 0,
+            maximum = 20,
+            step    = 0,
+            default = 16, defaultstore = MyStandardDefault,
+            default = 17, defaultstore = MyManufactureDefault,
+    endnumeric;
+
+    subtitle text = STRING_TOKEN(STR_SUBTITLE_TEXT2);
+    subtitle text = STRING_TOKEN(STR_UNION_EFI_VARSTORE);
+
+    numeric varid   = MyEfiUnionVar.UnionNumeric,
+            prompt  = STRING_TOKEN(STR_UNION_BYTE_NUMERIC_PROMPT),
+            help    = STRING_TOKEN(STR_UNION_BYTE_NUMERIC_HELP),
+            minimum = 0,
+            maximum = 20,
+            step    = 0,
+            default = 7, defaultstore = MyStandardDefault,
+            default = 8, defaultstore = MyManufactureDefault,
+    endnumeric;
+
+    guidop
+      guid = DRIVER_SAMPLE_FORMSET_GUID,
+      datatype = MY_EFI_BITS_VARSTORE_DATA,
+        data.EfiBitNumeric  = 1,
+        data.EfiBitOneof = 1,
+        data.EfiBitCheckbox = 1,
+    endguidop;
+
+  endform;
+
+endformset;
-- 
cgit