Files
system76-edk2/MdeModulePkg/Universal/DriverSampleDxe/Vfr.vfr
Dandan Bi 9495c01ee8 MdeModulePkg:Support orderedList with default value
Our tool can support OrderedList which has default value,but doesn't update the
source code in HiiDatabase when parse the ifr data.Now update the code and add
test case in DriverSample.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18388 6f19259b-4bc3-4df7-8a09-765794883524
2015-09-02 08:44:24 +00:00

787 lines
30 KiB
Plaintext

///** @file
//
// Sample Setup formset.
//
// Copyright (c) 2004 - 2015, Intel Corporation. All rights reserved.<BR>
// This program and the accompanying materials
// are licensed and made available under the terms and conditions of the BSD License
// which accompanies this distribution. The full text of the license may be found at
// http://opensource.org/licenses/bsd-license.php
//
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
//**/
#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
//
// EFI Variable attributes
//
#define EFI_VARIABLE_NON_VOLATILE 0x00000001
#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002
#define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004
#define EFI_VARIABLE_READ_ONLY 0x00000008
#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 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;
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;
//
// Non-interactive password, validate by Setup Browser
//
password varid = MyIfrNVData.WhatIsThePassword,
prompt = STRING_TOKEN(STR_PASSWORD_PROMPT),
help = STRING_TOKEN(STR_PASSWORD_HELP),
minsize = 6,
maxsize = 20,
endpassword;
string varid = MyIfrNVData.PasswordClearText,
prompt = STRING_TOKEN(STR_MY_STRING_PROMPT),
help = STRING_TOKEN(STR_MY_STRING_HELP),
minsize = 6,
maxsize = 0x14,
default = STRING_TOKEN(STR_MY_STRING_DEFAULT),
endstring;
//
// Interactive password, validate via ConfigAccess.Callback()
//
password varid = MyIfrNVData.WhatIsThePassword2,
prompt = STRING_TOKEN(STR_PASSWORD_CALLBACK_PROMPT),
help = STRING_TOKEN(STR_PASSWORD_HELP),
flags = INTERACTIVE,
key = 0x2000,
minsize = 6,
maxsize = 20,
endpassword;
//
// 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;
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;
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;
endformset;