]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/SetupBrowserDxe/Setup.h
Retire Extended HII library class.
[mirror_edk2.git] / MdeModulePkg / Universal / SetupBrowserDxe / Setup.h
index 647c4488fc3f99a8f3cddb54ef0c809e081153f2..ebd9a47d737c55c92c151eb1f4f97b01d6fb6eab 100644 (file)
-/** @file
-
-Copyright (c) 2007, Intel Corporation
-All rights reserved. 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.
-
-Module Name:
-
-  Setup.h
-
-Abstract:
-
-
-Revision History
-
-
-**/
-
-#ifndef _SETUP_H
-#define _SETUP_H
-
-
-#include <PiDxe.h>
-
-#include <Protocol/Print.h>
-#include <Protocol/SimpleTextOut.h>
-#include <Protocol/SimpleTextIn.h>
-#include <Protocol/FormBrowser2.h>
-#include <Protocol/DevicePath.h>
-#include <Protocol/UnicodeCollation.h>
-#include <Protocol/HiiConfigAccess.h>
-#include <Protocol/HiiConfigRouting.h>
-#include <Protocol/HiiDatabase.h>
-#include <Protocol/HiiString.h>
-
-#include <MdeModuleHii.h>
-
-#include <Library/GraphicsLib.h>
-#include <Library/PrintLib.h>
-#include <Library/DebugLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/UefiRuntimeServicesTableLib.h>
-#include <Library/UefiDriverEntryPoint.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Library/BaseLib.h>
-#include <Library/MemoryAllocationLib.h>
-#include <Library/IfrSupportLib.h>
-#include <Library/ExtendedIfrSupportLib.h>
-#include <Library/HiiLib.h>
-#include <Library/ExtendedHiiLib.h>
-
-#include "R8Lib.h"
-
-#include "Colors.h"
-
-//@MT:#include EFI_PROTOCOL_DEFINITION (HiiDatabase)
-//@MT:#include EFI_PROTOCOL_DEFINITION (HiiString)
-//@MT:#include EFI_PROTOCOL_DEFINITION (HiiConfigRouting)
-//@MT:#include EFI_PROTOCOL_DEFINITION (HiiConfigAccess)
-//@MT:#include EFI_PROTOCOL_DEFINITION (FormBrowser2)
-
-//@MT:#include EFI_GUID_DEFINITION (GlobalVariable)
-//@MT:#include EFI_PROTOCOL_DEFINITION (DevicePath)
-//@MT:#include EFI_PROTOCOL_DEFINITION (SimpleTextOut)
-//@MT:#include EFI_PROTOCOL_DEFINITION (SimpleTextIn)
-//@MT:#include EFI_PROTOCOL_DEFINITION (Print)
-//@MT:#include EFI_PROTOCOL_DEFINITION (UnicodeCollation)
-
-//
-// This is the generated header file which includes whatever needs to be exported (strings + IFR)
-//
-
-extern UINT8  SetupBrowserStrings[];
-
-//
-// Screen definitions
-//
-#define BANNER_HEIGHT                 6
-#define BANNER_COLUMNS                3
-
-#define FRONT_PAGE_HEADER_HEIGHT      6
-#define NONE_FRONT_PAGE_HEADER_HEIGHT 3
-#define LEFT_SKIPPED_COLUMNS          4
-#define FOOTER_HEIGHT                 4
-#define STATUS_BAR_HEIGHT             1
-#define SCROLL_ARROW_HEIGHT           1
-#define POPUP_PAD_SPACE_COUNT         5
-#define POPUP_FRAME_WIDTH             2
-
-//
-// Definition for function key setting
-//
-#define NONE_FUNCTION_KEY_SETTING     0
-#define DEFAULT_FUNCTION_KEY_SETTING  (FUNCTION_ONE | FUNCTION_TWO | FUNCTION_NINE | FUNCTION_TEN)
-
-#define FUNCTION_ONE                  (1 << 0)
-#define FUNCTION_TWO                  (1 << 1)
-#define FUNCTION_NINE                 (1 << 2)
-#define FUNCTION_TEN                  (1 << 3)
-
-typedef struct {
-  EFI_GUID  FormSetGuid;
-  UINTN     KeySetting;
-} FUNCTIION_KEY_SETTING;
-
-//
-// Character definitions
-//
-#define CHAR_SPACE              0x0020
-#define UPPER_LOWER_CASE_OFFSET 0x20
-
-//
-// Time definitions
-//
-#define ONE_SECOND  10000000
-
-//
-// Display definitions
-//
-#define LEFT_HYPER_DELIMITER      L'<'
-#define RIGHT_HYPER_DELIMITER     L'>'
-
-#define LEFT_ONEOF_DELIMITER      L'<'
-#define RIGHT_ONEOF_DELIMITER     L'>'
-
-#define LEFT_NUMERIC_DELIMITER    L'['
-#define RIGHT_NUMERIC_DELIMITER   L']'
-
-#define LEFT_CHECKBOX_DELIMITER   L'['
-#define RIGHT_CHECKBOX_DELIMITER  L']'
-
-#define CHECK_ON                  L'X'
-#define CHECK_OFF                 L' '
-
-#define TIME_SEPARATOR            L':'
-#define DATE_SEPARATOR            L'/'
-
-#define YES_ANSWER                L'Y'
-#define NO_ANSWER                 L'N'
-
-//
-// This is the Input Error Message
-//
-#define INPUT_ERROR 1
-
-//
-// This is the NV RAM update required Message
-//
-#define NV_UPDATE_REQUIRED  2
-
-//
-// Refresh the Status Bar with flags
-//
-#define REFRESH_STATUS_BAR  0xff
-
-//
-// Incremental string lenght of ConfigRequest
-//
-#define CONFIG_REQUEST_STRING_INCREMENTAL  1024
-
-//
-// HII value compare result
-//
-#define HII_VALUE_UNDEFINED     0
-#define HII_VALUE_EQUAL         1
-#define HII_VALUE_LESS_THAN     2
-#define HII_VALUE_GREATER_THAN  3
-
-//
-// Incremental size of stack for expression
-//
-#define EXPRESSION_STACK_SIZE_INCREMENT    0x100
-
-
-#define EFI_SPECIFICATION_ERRATA_VERSION   0
-
-#define EFI_IFR_SPECIFICATION_VERSION  \
-        ((((EFI_SPECIFICATION_VERSION) >> 8) & 0xff00) | \
-         (((EFI_SPECIFICATION_VERSION) & 0xf) << 4) | \
-         ((EFI_SPECIFICATION_ERRATA_VERSION) & 0xf))
-
-#define SETUP_DRIVER_SIGNATURE EFI_SIGNATURE_32 ('F', 'B', 'D', 'V')
-typedef struct {
-  UINT32                             Signature;
-
-  EFI_HANDLE                         Handle;
-
-  //
-  // Produced protocol
-  //
-  EFI_FORM_BROWSER2_PROTOCOL         FormBrowser2;
-  EFI_PRINT_PROTOCOL                 Print;
-
-} SETUP_DRIVER_PRIVATE_DATA;
-
-typedef struct {
-  EFI_STRING_ID  Banner[BANNER_HEIGHT][BANNER_COLUMNS];
-} BANNER_DATA;
-
-//
-// IFR relative definition
-//
-#define EFI_HII_EXPRESSION_INCONSISTENT_IF   0
-#define EFI_HII_EXPRESSION_NO_SUBMIT_IF      1
-#define EFI_HII_EXPRESSION_GRAY_OUT_IF       2
-#define EFI_HII_EXPRESSION_SUPPRESS_IF       3
-#define EFI_HII_EXPRESSION_DISABLE_IF        4
-#define EFI_HII_EXPRESSION_VALUE             5
-#define EFI_HII_EXPRESSION_RULE              6
-
-#define EFI_HII_VARSTORE_BUFFER              0
-#define EFI_HII_VARSTORE_NAME_VALUE          1
-#define EFI_HII_VARSTORE_EFI_VARIABLE        2
-
-#define FORM_INCONSISTENT_VALIDATION         0
-#define FORM_NO_SUBMIT_VALIDATION            1
-
-typedef struct {
-  UINT8               Type;
-  EFI_IFR_TYPE_VALUE  Value;
-} EFI_HII_VALUE;
-
-#define NAME_VALUE_NODE_SIGNATURE  EFI_SIGNATURE_32 ('N', 'V', 'S', 'T')
-
-typedef struct {
-  UINTN            Signature;
-  LIST_ENTRY       Link;
-  CHAR16           *Name;
-  CHAR16           *Value;
-  CHAR16           *EditValue;
-} NAME_VALUE_NODE;
-
-#define NAME_VALUE_NODE_FROM_LINK(a)  CR (a, NAME_VALUE_NODE, Link, NAME_VALUE_NODE_SIGNATURE)
-
-#define FORMSET_STORAGE_SIGNATURE  EFI_SIGNATURE_32 ('F', 'S', 'T', 'G')
-
-typedef struct {
-  UINTN            Signature;
-  LIST_ENTRY       Link;
-
-  UINT8            Type;           // Storage type
-
-  UINT16           VarStoreId;
-  EFI_GUID         Guid;
-
-  CHAR16           *Name;          // For EFI_IFR_VARSTORE
-  UINT16           Size;
-  UINT8            *Buffer;
-  UINT8            *EditBuffer;    // Edit copy for Buffer Storage
-
-  LIST_ENTRY       NameValueListHead; // List of NAME_VALUE_NODE
-
-  UINT32           Attributes;     // For EFI_IFR_VARSTORE_EFI: EFI Variable attribute
-
-  CHAR16           *ConfigHdr;     // <ConfigHdr>
-  CHAR16           *ConfigRequest; // <ConfigRequest> = <ConfigHdr> + <RequestElement>
-  UINTN            ElementCount;   // Number of <RequestElement> in the <ConfigRequest>
-  UINTN            SpareStrLen;    // Spare length of ConfigRequest string buffer
-} FORMSET_STORAGE;
-
-#define FORMSET_STORAGE_FROM_LINK(a)  CR (a, FORMSET_STORAGE, Link, FORMSET_STORAGE_SIGNATURE)
-
-#define EXPRESSION_OPCODE_SIGNATURE  EFI_SIGNATURE_32 ('E', 'X', 'O', 'P')
-
-typedef struct {
-  UINTN             Signature;
-  LIST_ENTRY        Link;
-
-  UINT8             Operand;
-
-  UINT8             Format;      // For EFI_IFR_TO_STRING, EFI_IFR_FIND
-  UINT8             Flags;       // For EFI_IFR_SPAN
-  UINT8             RuleId;      // For EFI_IFR_RULE_REF
-
-  EFI_HII_VALUE     Value;       // For EFI_IFR_EQ_ID_VAL, EFI_IFR_UINT64, EFI_IFR_UINT32, EFI_IFR_UINT16, EFI_IFR_UINT8, EFI_IFR_STRING_REF1
-
-  EFI_QUESTION_ID   QuestionId;  // For EFI_IFR_EQ_ID_ID, EFI_IFR_EQ_ID_LIST, EFI_IFR_QUESTION_REF1
-  EFI_QUESTION_ID   QuestionId2;
-
-  UINT16            ListLength;  // For EFI_IFR_EQ_ID_LIST
-  UINT16            *ValueList;
-
-  EFI_STRING_ID     DevicePath;  // For EFI_IFR_QUESTION_REF3_2, EFI_IFR_QUESTION_REF3_3
-  EFI_GUID          Guid;
-} EXPRESSION_OPCODE;
-
-#define EXPRESSION_OPCODE_FROM_LINK(a)  CR (a, EXPRESSION_OPCODE, Link, EXPRESSION_OPCODE_SIGNATURE)
-
-#define FORM_EXPRESSION_SIGNATURE  EFI_SIGNATURE_32 ('F', 'E', 'X', 'P')
-
-typedef struct {
-  UINTN             Signature;
-  LIST_ENTRY        Link;
-
-  UINT8             Type;            // Type for this expression
-
-  UINT8             RuleId;          // For EFI_IFR_RULE only
-  EFI_STRING_ID     Error;           // For EFI_IFR_NO_SUBMIT_IF, EFI_IFR_INCONSISTENT_IF only
-
-  EFI_HII_VALUE     Result;          // Expression evaluation result
-
-  LIST_ENTRY        OpCodeListHead;  // OpCodes consist of this expression (EXPRESSION_OPCODE)
-} FORM_EXPRESSION;
-
-#define FORM_EXPRESSION_FROM_LINK(a)  CR (a, FORM_EXPRESSION, Link, FORM_EXPRESSION_SIGNATURE)
-
-#define QUESTION_DEFAULT_SIGNATURE  EFI_SIGNATURE_32 ('Q', 'D', 'F', 'T')
-
-typedef struct {
-  UINTN               Signature;
-  LIST_ENTRY          Link;
-
-  UINT16              DefaultId;
-  EFI_HII_VALUE       Value;              // Default value
-
-  FORM_EXPRESSION     *ValueExpression;   // Not-NULL indicates default value is provided by EFI_IFR_VALUE
-} QUESTION_DEFAULT;
-
-#define QUESTION_DEFAULT_FROM_LINK(a)  CR (a, QUESTION_DEFAULT, Link, QUESTION_DEFAULT_SIGNATURE)
-
-#define QUESTION_OPTION_SIGNATURE  EFI_SIGNATURE_32 ('Q', 'O', 'P', 'T')
-
-typedef struct {
-  UINTN               Signature;
-  LIST_ENTRY          Link;
-
-  EFI_STRING_ID       Text;
-  UINT8               Flags;
-  EFI_HII_VALUE       Value;
-  EFI_IMAGE_ID        ImageId;
-
-  FORM_EXPRESSION     *SuppressExpression; // Non-NULL indicates nested inside of SuppressIf
-} QUESTION_OPTION;
-
-#define QUESTION_OPTION_FROM_LINK(a)  CR (a, QUESTION_OPTION, Link, QUESTION_OPTION_SIGNATURE)
-
-#define FORM_BROWSER_STATEMENT_SIGNATURE  EFI_SIGNATURE_32 ('F', 'S', 'T', 'A')
-typedef struct {
-  UINTN                 Signature;
-  LIST_ENTRY            Link;
-
-  UINT8                 Operand;          // The operand (first byte) of this Statement or Question
-
-  //
-  // Statement Header
-  //
-  EFI_STRING_ID         Prompt;
-  EFI_STRING_ID         Help;
-  EFI_STRING_ID         TextTwo;          // For EFI_IFR_TEXT
-
-  //
-  // Question Header
-  //
-  EFI_QUESTION_ID       QuestionId;       // The value of zero is reserved
-  EFI_VARSTORE_ID       VarStoreId;       // A value of zero indicates no variable storage
-  FORMSET_STORAGE       *Storage;
-  union {
-    EFI_STRING_ID       VarName;
-    UINT16              VarOffset;
-  }  VarStoreInfo;
-  UINT16                StorageWidth;
-  UINT8                 QuestionFlags;
-  CHAR16                *VariableName;    // Name/Value or EFI Variable name
-  CHAR16                *BlockName;       // Buffer storage block name: "OFFSET=...WIDTH=..."
-
-  EFI_HII_VALUE         HiiValue;         // Edit copy for checkbox, numberic, oneof
-  UINT8                 *BufferValue;     // Edit copy for string, password, orderedlist
-
-  //
-  // OpCode specific members
-  //
-  UINT8                 Flags;            // for EFI_IFR_CHECKBOX, EFI_IFR_DATE, EFI_IFR_NUMERIC, EFI_IFR_ONE_OF,
-                                          // EFI_IFR_ORDERED_LIST, EFI_IFR_STRING,EFI_IFR_SUBTITLE,EFI_IFR_TIME, EFI_IFR_BANNER
-  UINT8                 MaxContainers;    // for EFI_IFR_ORDERED_LIST
-
-  UINT16                BannerLineNumber; // for EFI_IFR_BANNER, 1-based line number
-  EFI_STRING_ID         QuestionConfig;   // for EFI_IFR_ACTION, if 0 then no configuration string will be processed
-
-  UINT64                Minimum;          // for EFI_IFR_ONE_OF/EFI_IFR_NUMERIC, it's Min/Max value
-  UINT64                Maximum;          // for EFI_IFR_STRING/EFI_IFR_PASSWORD, it's Min/Max length
-  UINT64                Step;
-
-  EFI_DEFAULT_ID        DefaultId;        // for EFI_IFR_RESET_BUTTON
-  EFI_FORM_ID           RefFormId;        // for EFI_IFR_REF
-  EFI_QUESTION_ID       RefQuestionId;    // for EFI_IFR_REF2
-  EFI_GUID              RefFormSetId;     // for EFI_IFR_REF3
-  EFI_STRING_ID         RefDevicePath;    // for EFI_IFR_REF4
-
-  //
-  // Get from IFR parsing
-  //
-  FORM_EXPRESSION       *ValueExpression;    // nested EFI_IFR_VALUE, provide Question value and indicate Question is ReadOnly
-  LIST_ENTRY            DefaultListHead;     // nested EFI_IFR_DEFAULT list (QUESTION_DEFAULT), provide default values
-  LIST_ENTRY            OptionListHead;      // nested EFI_IFR_ONE_OF_OPTION list (QUESTION_OPTION)
-
-  EFI_IMAGE_ID          ImageId;             // nested EFI_IFR_IMAGE
-  UINT8                 RefreshInterval;     // nested EFI_IFR_REFRESH, refresh interval(in seconds) for Question value, 0 means no refresh
-  BOOLEAN               InSubtitle;          // nesting inside of EFI_IFR_SUBTITLE
-
-  LIST_ENTRY            InconsistentListHead;// nested inconsistent expression list (FORM_EXPRESSION)
-  LIST_ENTRY            NoSubmitListHead;    // nested nosubmit expression list (FORM_EXPRESSION)
-  FORM_EXPRESSION       *GrayOutExpression;  // nesting inside of GrayOutIf
-  FORM_EXPRESSION       *SuppressExpression; // nesting inside of SuppressIf
-
-} FORM_BROWSER_STATEMENT;
-
-#define FORM_BROWSER_STATEMENT_FROM_LINK(a)  CR (a, FORM_BROWSER_STATEMENT, Link, FORM_BROWSER_STATEMENT_SIGNATURE)
-
-#define FORM_BROWSER_FORM_SIGNATURE  EFI_SIGNATURE_32 ('F', 'F', 'R', 'M')
-
-typedef struct {
-  UINTN             Signature;
-  LIST_ENTRY        Link;
-
-  UINT16            FormId;
-  EFI_STRING_ID     FormTitle;
-
-  EFI_IMAGE_ID      ImageId;
-
-  LIST_ENTRY        ExpressionListHead;   // List of Expressions (FORM_EXPRESSION)
-  LIST_ENTRY        StatementListHead;    // List of Statements and Questions (FORM_BROWSER_STATEMENT)
-} FORM_BROWSER_FORM;
-
-#define FORM_BROWSER_FORM_FROM_LINK(a)  CR (a, FORM_BROWSER_FORM, Link, FORM_BROWSER_FORM_SIGNATURE)
-
-#define FORMSET_DEFAULTSTORE_SIGNATURE  EFI_SIGNATURE_32 ('F', 'D', 'F', 'S')
-
-typedef struct {
-  UINTN            Signature;
-  LIST_ENTRY       Link;
-
-  UINT16           DefaultId;
-  EFI_STRING_ID    DefaultName;
-} FORMSET_DEFAULTSTORE;
-
-#define FORMSET_DEFAULTSTORE_FROM_LINK(a)  CR (a, FORMSET_DEFAULTSTORE, Link, FORMSET_DEFAULTSTORE_SIGNATURE)
-
-typedef struct {
-  EFI_HII_HANDLE                  HiiHandle;
-  EFI_HANDLE                      DriverHandle;
-  EFI_HII_CONFIG_ACCESS_PROTOCOL  *ConfigAccess;
-  EFI_DEVICE_PATH_PROTOCOL        *DevicePath;
-
-  UINTN                           IfrBinaryLength;
-  UINT8                           *IfrBinaryData;
-
-  EFI_GUID                        Guid;
-  EFI_STRING_ID                   FormSetTitle;
-  EFI_STRING_ID                   Help;
-  UINT16                          Class;
-  UINT16                          SubClass;
-  EFI_IMAGE_ID                    ImageId;
-
-  FORM_BROWSER_STATEMENT          *StatementBuffer;     // Buffer for all Statements and Questions
-  EXPRESSION_OPCODE               *ExpressionBuffer;    // Buffer for all Expression OpCode
-
-  LIST_ENTRY                      StorageListHead;      // Storage list (FORMSET_STORAGE)
-  LIST_ENTRY                      DefaultStoreListHead; // DefaultStore list (FORMSET_DEFAULTSTORE)
-  LIST_ENTRY                      FormListHead;         // Form list (FORM_BROWSER_FORM)
-} FORM_BROWSER_FORMSET;
-
-
-extern EFI_HII_DATABASE_PROTOCOL         *mHiiDatabase;
-extern EFI_HII_STRING_PROTOCOL           *mHiiString;
-extern EFI_HII_CONFIG_ROUTING_PROTOCOL   *mHiiConfigRouting;
-
-extern BANNER_DATA           *BannerData;
-extern EFI_HII_HANDLE        FrontPageHandle;
-extern UINTN                 gClassOfVfr;
-extern UINTN                 gFunctionKeySetting;
-extern BOOLEAN               gResetRequired;
-extern BOOLEAN               gNvUpdateRequired;
-extern EFI_HII_HANDLE        gHiiHandle;
-extern BOOLEAN               gFirstIn;
-extern UINT16                gDirection;
-extern EFI_SCREEN_DESCRIPTOR gScreenDimensions;
-extern BOOLEAN               gUpArrow;
-extern BOOLEAN               gDownArrow;
-
-//
-// Browser Global Strings
-//
-extern CHAR16            *gFunctionOneString;
-extern CHAR16            *gFunctionTwoString;
-extern CHAR16            *gFunctionNineString;
-extern CHAR16            *gFunctionTenString;
-extern CHAR16            *gEnterString;
-extern CHAR16            *gEnterCommitString;
-extern CHAR16            *gEscapeString;
-extern CHAR16            *gSaveFailed;
-extern CHAR16            *gMoveHighlight;
-extern CHAR16            *gMakeSelection;
-extern CHAR16            *gDecNumericInput;
-extern CHAR16            *gHexNumericInput;
-extern CHAR16            *gToggleCheckBox;
-extern CHAR16            *gPromptForData;
-extern CHAR16            *gPromptForPassword;
-extern CHAR16            *gPromptForNewPassword;
-extern CHAR16            *gConfirmPassword;
-extern CHAR16            *gConfirmError;
-extern CHAR16            *gPassowordInvalid;
-extern CHAR16            *gPressEnter;
-extern CHAR16            *gEmptyString;
-extern CHAR16            *gAreYouSure;
-extern CHAR16            *gYesResponse;
-extern CHAR16            *gNoResponse;
-extern CHAR16            *gMiniString;
-extern CHAR16            *gPlusString;
-extern CHAR16            *gMinusString;
-extern CHAR16            *gAdjustNumber;
-
-extern CHAR16            gPromptBlockWidth;
-extern CHAR16            gOptionBlockWidth;
-extern CHAR16            gHelpBlockWidth;
-
-extern EFI_GUID          gZeroGuid;
-extern EFI_GUID          gTianoHiiIfrGuid;
-
-//
-// Global Procedure Defines
-//
-VOID
-InitializeBrowserStrings (
-  VOID
-  )
-;
-
-UINTN
-_Print (
-  IN CHAR16                         *fmt,
-  ...
-  )
-;
-
-UINTN
-PrintString (
-  CHAR16       *String
-  )
-;
-
-UINTN
-PrintChar (
-  CHAR16       Character
-  )
-;
-
-UINTN
-PrintAt (
-  IN UINTN     Column,
-  IN UINTN     Row,
-  IN CHAR16    *fmt,
-  ...
-  )
-;
-
-UINTN
-PrintStringAt (
-  IN UINTN     Column,
-  IN UINTN     Row,
-  CHAR16       *String
-  )
-;
-
-UINTN
-PrintCharAt (
-  IN UINTN     Column,
-  IN UINTN     Row,
-  CHAR16       Character
-  )
-;
-
-EFI_STATUS
-ParseOpCodes (
-  IN FORM_BROWSER_FORMSET              *FormSet
-  )
-;
-
-VOID
-DestroyFormSet (
-  IN OUT FORM_BROWSER_FORMSET  *FormSet
-  )
-;
-
-VOID
-DisplayPageFrame (
-  VOID
-  )
-;
-
-EFI_STRING_ID
-NewString (
-  IN  CHAR16                   *String,
-  IN  EFI_HII_HANDLE           HiiHandle
-  )
-;
-
-EFI_STATUS
-DeleteString (
-  IN  EFI_STRING_ID            StringId,
-  IN  EFI_HII_HANDLE           HiiHandle
-  )
-;
-CHAR16 *
-GetToken (
-  IN  EFI_STRING_ID                Token,
-  IN  EFI_HII_HANDLE               HiiHandle
-  )
-;
-
-VOID
-CreateSharedPopUp (
-  IN  UINTN                       RequestedWidth,
-  IN  UINTN                       NumberOfLines,
-  IN  CHAR16                      **ArrayOfStrings
-  )
-;
-
-EFI_STATUS
-CreateDialog (
-  IN  UINTN                       NumberOfLines,
-  IN  BOOLEAN                     HotKey,
-  IN  UINTN                       MaximumStringSize,
-  OUT CHAR16                      *StringBuffer,
-  OUT EFI_INPUT_KEY               *KeyValue,
-  IN  CHAR16                      *String,
-  ...
-  )
-;
-
-EFI_STATUS
-GetQuestionValue (
-  IN FORM_BROWSER_FORMSET             *FormSet,
-  IN FORM_BROWSER_FORM                *Form,
-  IN OUT FORM_BROWSER_STATEMENT       *Question,
-  IN BOOLEAN                          Cached
-  )
-;
-
-EFI_STATUS
-SetQuestionValue (
-  IN FORM_BROWSER_FORMSET             *FormSet,
-  IN FORM_BROWSER_FORM                *Form,
-  IN OUT FORM_BROWSER_STATEMENT       *Question,
-  IN BOOLEAN                          Cached
-  )
-;
-
-EFI_STATUS
-ValidateQuestion (
-  IN  FORM_BROWSER_FORMSET            *FormSet,
-  IN  FORM_BROWSER_FORM               *Form,
-  IN  FORM_BROWSER_STATEMENT          *Question,
-  IN  UINTN                           Type
-  )
-;
-
-EFI_STATUS
-SubmitForm (
-  IN FORM_BROWSER_FORMSET             *FormSet,
-  IN FORM_BROWSER_FORM                *Form
-  )
-;
-
-EFI_STATUS
-GetQuestionDefault (
-  IN FORM_BROWSER_FORMSET             *FormSet,
-  IN FORM_BROWSER_FORM                *Form,
-  IN FORM_BROWSER_STATEMENT           *Question,
-  IN UINT16                           DefaultId
-  )
-;
-
-EFI_STATUS
-InitializeCurrentSetting (
-  IN OUT FORM_BROWSER_FORMSET             *FormSet
-  )
-;
-
-EFI_STATUS
-InitializeFormSet (
-  IN  EFI_HII_HANDLE                   Handle,
-  IN OUT EFI_GUID                      *FormSetGuid,
-  OUT FORM_BROWSER_FORMSET             *FormSet
-  )
-;
-
-EFI_STATUS
-ExtractFormDefault (
-  IN FORM_BROWSER_FORMSET             *FormSet,
-  IN  FORM_BROWSER_FORM               *Form,
-  IN UINT16                           DefaultId
-  )
-;
-
-EFI_STATUS
-LoadFormConfig (
-  IN FORM_BROWSER_FORMSET             *FormSet,
-  IN FORM_BROWSER_FORM                *Form
-  )
-;
-
-EFI_STATUS
-StorageToConfigResp (
-  IN FORMSET_STORAGE         *Storage,
-  IN CHAR16                  **ConfigResp
-  )
-;
-
-EFI_STATUS
-ConfigRespToStorage (
-  IN FORMSET_STORAGE         *Storage,
-  IN CHAR16                  *ConfigResp
-  )
-;
-
-EFI_STATUS
-LoadStorage (
-  IN FORM_BROWSER_FORMSET    *FormSet,
-  IN FORMSET_STORAGE         *Storage
-  )
-;
-
-EFI_STATUS
-GetIfrBinaryData (
-  IN  EFI_HII_HANDLE   Handle,
-  IN OUT EFI_GUID      *FormSetGuid,
-  OUT UINTN            *BinaryLength,
-  OUT UINT8            **BinaryData
-  )
-;
-
-EFI_STATUS
-EFIAPI
-SendForm (
-  IN  CONST EFI_FORM_BROWSER2_PROTOCOL *This,
-  IN  EFI_HII_HANDLE                   *Handles,
-  IN  UINTN                            HandleCount,
-  IN  EFI_GUID                         *FormSetGuid, OPTIONAL
-  IN  UINT16                           FormId, OPTIONAL
-  IN  CONST EFI_SCREEN_DESCRIPTOR      *ScreenDimensions, OPTIONAL
-  OUT EFI_BROWSER_ACTION_REQUEST       *ActionRequest  OPTIONAL
-  )
-;
-
-EFI_STATUS
-EFIAPI
-BrowserCallback (
-  IN CONST EFI_FORM_BROWSER2_PROTOCOL  *This,
-  IN OUT UINTN                         *ResultsDataSize,
-  IN OUT EFI_STRING                    ResultsData,
-  IN BOOLEAN                           RetrieveData,
-  IN CONST EFI_GUID                    *VariableGuid, OPTIONAL
-  IN CONST CHAR16                      *VariableName  OPTIONAL
-  )
-;
-
-#endif
+/** @file\r
+Private MACRO, structure and function definitions for Setup Browser module. \r
+\r
+Copyright (c) 2007, Intel Corporation\r
+All rights reserved. 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
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+\r
+**/\r
+\r
+#ifndef _SETUP_H_\r
+#define _SETUP_H_\r
+\r
+\r
+#include <PiDxe.h>\r
+\r
+#include <Protocol/SimpleTextOut.h>\r
+#include <Protocol/SimpleTextIn.h>\r
+#include <Protocol/FormBrowser2.h>\r
+#include <Protocol/DevicePath.h>\r
+#include <Protocol/UnicodeCollation.h>\r
+#include <Protocol/HiiConfigAccess.h>\r
+#include <Protocol/HiiConfigRouting.h>\r
+#include <Protocol/HiiDatabase.h>\r
+#include <Protocol/HiiString.h>\r
+\r
+#include <Guid/MdeModuleHii.h>\r
+\r
+#include <Library/PrintLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/BaseMemoryLib.h>\r
+#include <Library/UefiRuntimeServicesTableLib.h>\r
+#include <Library/UefiDriverEntryPoint.h>\r
+#include <Library/UefiBootServicesTableLib.h>\r
+#include <Library/BaseLib.h>\r
+#include <Library/MemoryAllocationLib.h>\r
+#include <Library/IfrSupportLib.h>\r
+#include <Library/ExtendedIfrSupportLib.h>\r
+#include <Library/HiiLib.h>\r
+#include <Library/PcdLib.h>\r
+\r
+#include "Colors.h"\r
+\r
+//\r
+// This is the generated header file which includes whatever needs to be exported (strings + IFR)\r
+//\r
+\r
+extern UINT8  SetupBrowserStrings[];\r
+\r
+//\r
+// Screen definitions\r
+//\r
+#define BANNER_HEIGHT                 6\r
+#define BANNER_COLUMNS                3\r
+\r
+#define FRONT_PAGE_HEADER_HEIGHT      6\r
+#define NONE_FRONT_PAGE_HEADER_HEIGHT 3\r
+#define LEFT_SKIPPED_COLUMNS          4\r
+#define FOOTER_HEIGHT                 4\r
+#define STATUS_BAR_HEIGHT             1\r
+#define SCROLL_ARROW_HEIGHT           1\r
+#define POPUP_PAD_SPACE_COUNT         5\r
+#define POPUP_FRAME_WIDTH             2\r
+\r
+//\r
+// Definition for function key setting\r
+//\r
+#define NONE_FUNCTION_KEY_SETTING     0\r
+#define DEFAULT_FUNCTION_KEY_SETTING  (FUNCTION_ONE | FUNCTION_TWO | FUNCTION_NINE | FUNCTION_TEN)\r
+\r
+#define FUNCTION_ONE                  (1 << 0)\r
+#define FUNCTION_TWO                  (1 << 1)\r
+#define FUNCTION_NINE                 (1 << 2)\r
+#define FUNCTION_TEN                  (1 << 3)\r
+\r
+typedef struct {\r
+  EFI_GUID  FormSetGuid;\r
+  UINTN     KeySetting;\r
+} FUNCTIION_KEY_SETTING;\r
+\r
+//\r
+// Character definitions\r
+//\r
+#define CHAR_SPACE              0x0020\r
+#define UPPER_LOWER_CASE_OFFSET 0x20\r
+\r
+//\r
+// Time definitions\r
+//\r
+#define ONE_SECOND  10000000\r
+\r
+//\r
+// Display definitions\r
+//\r
+#define LEFT_HYPER_DELIMITER      L'<'\r
+#define RIGHT_HYPER_DELIMITER     L'>'\r
+\r
+#define LEFT_ONEOF_DELIMITER      L'<'\r
+#define RIGHT_ONEOF_DELIMITER     L'>'\r
+\r
+#define LEFT_NUMERIC_DELIMITER    L'['\r
+#define RIGHT_NUMERIC_DELIMITER   L']'\r
+\r
+#define LEFT_CHECKBOX_DELIMITER   L'['\r
+#define RIGHT_CHECKBOX_DELIMITER  L']'\r
+\r
+#define CHECK_ON                  L'X'\r
+#define CHECK_OFF                 L' '\r
+\r
+#define TIME_SEPARATOR            L':'\r
+#define DATE_SEPARATOR            L'/'\r
+\r
+#define YES_ANSWER                L'Y'\r
+#define NO_ANSWER                 L'N'\r
+\r
+//\r
+// This is the Input Error Message\r
+//\r
+#define INPUT_ERROR 1\r
+\r
+//\r
+// This is the NV RAM update required Message\r
+//\r
+#define NV_UPDATE_REQUIRED  2\r
+\r
+//\r
+// Refresh the Status Bar with flags\r
+//\r
+#define REFRESH_STATUS_BAR  0xff\r
+\r
+//\r
+// Incremental string lenght of ConfigRequest\r
+//\r
+#define CONFIG_REQUEST_STRING_INCREMENTAL  1024\r
+\r
+//\r
+// HII value compare result\r
+//\r
+#define HII_VALUE_UNDEFINED     0\r
+#define HII_VALUE_EQUAL         1\r
+#define HII_VALUE_LESS_THAN     2\r
+#define HII_VALUE_GREATER_THAN  3\r
+\r
+//\r
+// Incremental size of stack for expression\r
+//\r
+#define EXPRESSION_STACK_SIZE_INCREMENT    0x100\r
+\r
+\r
+#define EFI_SPECIFICATION_ERRATA_VERSION   0\r
+\r
+#define EFI_IFR_SPECIFICATION_VERSION  \\r
+        ((((EFI_SPECIFICATION_VERSION) >> 8) & 0xff00) | \\r
+         (((EFI_SPECIFICATION_VERSION) & 0xf) << 4) | \\r
+         ((EFI_SPECIFICATION_ERRATA_VERSION) & 0xf))\r
+\r
+#define SETUP_DRIVER_SIGNATURE SIGNATURE_32 ('F', 'B', 'D', 'V')\r
+typedef struct {\r
+  UINT32                             Signature;\r
+\r
+  EFI_HANDLE                         Handle;\r
+\r
+  //\r
+  // Produced protocol\r
+  //\r
+  EFI_FORM_BROWSER2_PROTOCOL         FormBrowser2;\r
+\r
+} SETUP_DRIVER_PRIVATE_DATA;\r
+\r
+typedef struct {\r
+  EFI_STRING_ID  Banner[BANNER_HEIGHT][BANNER_COLUMNS];\r
+} BANNER_DATA;\r
+\r
+//\r
+// IFR relative definition\r
+//\r
+#define EFI_HII_EXPRESSION_INCONSISTENT_IF   0\r
+#define EFI_HII_EXPRESSION_NO_SUBMIT_IF      1\r
+#define EFI_HII_EXPRESSION_GRAY_OUT_IF       2\r
+#define EFI_HII_EXPRESSION_SUPPRESS_IF       3\r
+#define EFI_HII_EXPRESSION_DISABLE_IF        4\r
+#define EFI_HII_EXPRESSION_VALUE             5\r
+#define EFI_HII_EXPRESSION_RULE              6\r
+\r
+#define EFI_HII_VARSTORE_BUFFER              0\r
+#define EFI_HII_VARSTORE_NAME_VALUE          1\r
+#define EFI_HII_VARSTORE_EFI_VARIABLE        2\r
+\r
+#define FORM_INCONSISTENT_VALIDATION         0\r
+#define FORM_NO_SUBMIT_VALIDATION            1\r
+\r
+typedef struct {\r
+  UINT8               Type;\r
+  EFI_IFR_TYPE_VALUE  Value;\r
+} EFI_HII_VALUE;\r
+\r
+#define NAME_VALUE_NODE_SIGNATURE  SIGNATURE_32 ('N', 'V', 'S', 'T')\r
+\r
+typedef struct {\r
+  UINTN            Signature;\r
+  LIST_ENTRY       Link;\r
+  CHAR16           *Name;\r
+  CHAR16           *Value;\r
+  CHAR16           *EditValue;\r
+} NAME_VALUE_NODE;\r
+\r
+#define NAME_VALUE_NODE_FROM_LINK(a)  CR (a, NAME_VALUE_NODE, Link, NAME_VALUE_NODE_SIGNATURE)\r
+\r
+#define FORMSET_STORAGE_SIGNATURE  SIGNATURE_32 ('F', 'S', 'T', 'G')\r
+\r
+typedef struct {\r
+  UINTN            Signature;\r
+  LIST_ENTRY       Link;\r
+\r
+  UINT8            Type;           // Storage type\r
+\r
+  UINT16           VarStoreId;\r
+  EFI_GUID         Guid;\r
+\r
+  CHAR16           *Name;          // For EFI_IFR_VARSTORE\r
+  UINT16           Size;\r
+  UINT8            *Buffer;\r
+  UINT8            *EditBuffer;    // Edit copy for Buffer Storage\r
+\r
+  LIST_ENTRY       NameValueListHead; // List of NAME_VALUE_NODE\r
+\r
+  UINT32           Attributes;     // For EFI_IFR_VARSTORE_EFI: EFI Variable attribute\r
+\r
+  CHAR16           *ConfigHdr;     // <ConfigHdr>\r
+  CHAR16           *ConfigRequest; // <ConfigRequest> = <ConfigHdr> + <RequestElement>\r
+  UINTN            ElementCount;   // Number of <RequestElement> in the <ConfigRequest>\r
+  UINTN            SpareStrLen;    // Spare length of ConfigRequest string buffer\r
+} FORMSET_STORAGE;\r
+\r
+#define FORMSET_STORAGE_FROM_LINK(a)  CR (a, FORMSET_STORAGE, Link, FORMSET_STORAGE_SIGNATURE)\r
+\r
+#define EXPRESSION_OPCODE_SIGNATURE  SIGNATURE_32 ('E', 'X', 'O', 'P')\r
+\r
+typedef struct {\r
+  UINTN             Signature;\r
+  LIST_ENTRY        Link;\r
+\r
+  UINT8             Operand;\r
+\r
+  UINT8             Format;      // For EFI_IFR_TO_STRING, EFI_IFR_FIND\r
+  UINT8             Flags;       // For EFI_IFR_SPAN\r
+  UINT8             RuleId;      // For EFI_IFR_RULE_REF\r
+\r
+  EFI_HII_VALUE     Value;       // For EFI_IFR_EQ_ID_VAL, EFI_IFR_UINT64, EFI_IFR_UINT32, EFI_IFR_UINT16, EFI_IFR_UINT8, EFI_IFR_STRING_REF1\r
+\r
+  EFI_QUESTION_ID   QuestionId;  // For EFI_IFR_EQ_ID_ID, EFI_IFR_EQ_ID_LIST, EFI_IFR_QUESTION_REF1\r
+  EFI_QUESTION_ID   QuestionId2;\r
+\r
+  UINT16            ListLength;  // For EFI_IFR_EQ_ID_LIST\r
+  UINT16            *ValueList;\r
+\r
+  EFI_STRING_ID     DevicePath;  // For EFI_IFR_QUESTION_REF3_2, EFI_IFR_QUESTION_REF3_3\r
+  EFI_GUID          Guid;\r
+} EXPRESSION_OPCODE;\r
+\r
+#define EXPRESSION_OPCODE_FROM_LINK(a)  CR (a, EXPRESSION_OPCODE, Link, EXPRESSION_OPCODE_SIGNATURE)\r
+\r
+#define FORM_EXPRESSION_SIGNATURE  SIGNATURE_32 ('F', 'E', 'X', 'P')\r
+\r
+typedef struct {\r
+  UINTN             Signature;\r
+  LIST_ENTRY        Link;\r
+\r
+  UINT8             Type;            // Type for this expression\r
+\r
+  UINT8             RuleId;          // For EFI_IFR_RULE only\r
+  EFI_STRING_ID     Error;           // For EFI_IFR_NO_SUBMIT_IF, EFI_IFR_INCONSISTENT_IF only\r
+\r
+  EFI_HII_VALUE     Result;          // Expression evaluation result\r
+\r
+  LIST_ENTRY        OpCodeListHead;  // OpCodes consist of this expression (EXPRESSION_OPCODE)\r
+} FORM_EXPRESSION;\r
+\r
+#define FORM_EXPRESSION_FROM_LINK(a)  CR (a, FORM_EXPRESSION, Link, FORM_EXPRESSION_SIGNATURE)\r
+\r
+#define QUESTION_DEFAULT_SIGNATURE  SIGNATURE_32 ('Q', 'D', 'F', 'T')\r
+\r
+typedef struct {\r
+  UINTN               Signature;\r
+  LIST_ENTRY          Link;\r
+\r
+  UINT16              DefaultId;\r
+  EFI_HII_VALUE       Value;              // Default value\r
+\r
+  FORM_EXPRESSION     *ValueExpression;   // Not-NULL indicates default value is provided by EFI_IFR_VALUE\r
+} QUESTION_DEFAULT;\r
+\r
+#define QUESTION_DEFAULT_FROM_LINK(a)  CR (a, QUESTION_DEFAULT, Link, QUESTION_DEFAULT_SIGNATURE)\r
+\r
+#define QUESTION_OPTION_SIGNATURE  SIGNATURE_32 ('Q', 'O', 'P', 'T')\r
+\r
+typedef struct {\r
+  UINTN               Signature;\r
+  LIST_ENTRY          Link;\r
+\r
+  EFI_STRING_ID       Text;\r
+  UINT8               Flags;\r
+  EFI_HII_VALUE       Value;\r
+  EFI_IMAGE_ID        ImageId;\r
+\r
+  FORM_EXPRESSION     *SuppressExpression; // Non-NULL indicates nested inside of SuppressIf\r
+} QUESTION_OPTION;\r
+\r
+#define QUESTION_OPTION_FROM_LINK(a)  CR (a, QUESTION_OPTION, Link, QUESTION_OPTION_SIGNATURE)\r
+\r
+#define FORM_BROWSER_STATEMENT_SIGNATURE  SIGNATURE_32 ('F', 'S', 'T', 'A')\r
+typedef struct {\r
+  UINTN                 Signature;\r
+  LIST_ENTRY            Link;\r
+\r
+  UINT8                 Operand;          // The operand (first byte) of this Statement or Question\r
+\r
+  //\r
+  // Statement Header\r
+  //\r
+  EFI_STRING_ID         Prompt;\r
+  EFI_STRING_ID         Help;\r
+  EFI_STRING_ID         TextTwo;          // For EFI_IFR_TEXT\r
+\r
+  //\r
+  // Question Header\r
+  //\r
+  EFI_QUESTION_ID       QuestionId;       // The value of zero is reserved\r
+  EFI_VARSTORE_ID       VarStoreId;       // A value of zero indicates no variable storage\r
+  FORMSET_STORAGE       *Storage;\r
+  union {\r
+    EFI_STRING_ID       VarName;\r
+    UINT16              VarOffset;\r
+  }  VarStoreInfo;\r
+  UINT16                StorageWidth;\r
+  UINT8                 QuestionFlags;\r
+  CHAR16                *VariableName;    // Name/Value or EFI Variable name\r
+  CHAR16                *BlockName;       // Buffer storage block name: "OFFSET=...WIDTH=..."\r
+\r
+  EFI_HII_VALUE         HiiValue;         // Edit copy for checkbox, numberic, oneof\r
+  UINT8                 *BufferValue;     // Edit copy for string, password, orderedlist\r
+\r
+  //\r
+  // OpCode specific members\r
+  //\r
+  UINT8                 Flags;            // for EFI_IFR_CHECKBOX, EFI_IFR_DATE, EFI_IFR_NUMERIC, EFI_IFR_ONE_OF,\r
+                                          // EFI_IFR_ORDERED_LIST, EFI_IFR_STRING,EFI_IFR_SUBTITLE,EFI_IFR_TIME, EFI_IFR_BANNER\r
+  UINT8                 MaxContainers;    // for EFI_IFR_ORDERED_LIST\r
+\r
+  UINT16                BannerLineNumber; // for EFI_IFR_BANNER, 1-based line number\r
+  EFI_STRING_ID         QuestionConfig;   // for EFI_IFR_ACTION, if 0 then no configuration string will be processed\r
+\r
+  UINT64                Minimum;          // for EFI_IFR_ONE_OF/EFI_IFR_NUMERIC, it's Min/Max value\r
+  UINT64                Maximum;          // for EFI_IFR_STRING/EFI_IFR_PASSWORD, it's Min/Max length\r
+  UINT64                Step;\r
+\r
+  EFI_DEFAULT_ID        DefaultId;        // for EFI_IFR_RESET_BUTTON\r
+  EFI_FORM_ID           RefFormId;        // for EFI_IFR_REF\r
+  EFI_QUESTION_ID       RefQuestionId;    // for EFI_IFR_REF2\r
+  EFI_GUID              RefFormSetId;     // for EFI_IFR_REF3\r
+  EFI_STRING_ID         RefDevicePath;    // for EFI_IFR_REF4\r
+\r
+  //\r
+  // Get from IFR parsing\r
+  //\r
+  FORM_EXPRESSION       *ValueExpression;    // nested EFI_IFR_VALUE, provide Question value and indicate Question is ReadOnly\r
+  LIST_ENTRY            DefaultListHead;     // nested EFI_IFR_DEFAULT list (QUESTION_DEFAULT), provide default values\r
+  LIST_ENTRY            OptionListHead;      // nested EFI_IFR_ONE_OF_OPTION list (QUESTION_OPTION)\r
+\r
+  EFI_IMAGE_ID          ImageId;             // nested EFI_IFR_IMAGE\r
+  UINT8                 RefreshInterval;     // nested EFI_IFR_REFRESH, refresh interval(in seconds) for Question value, 0 means no refresh\r
+  BOOLEAN               InSubtitle;          // nesting inside of EFI_IFR_SUBTITLE\r
+\r
+  LIST_ENTRY            InconsistentListHead;// nested inconsistent expression list (FORM_EXPRESSION)\r
+  LIST_ENTRY            NoSubmitListHead;    // nested nosubmit expression list (FORM_EXPRESSION)\r
+  FORM_EXPRESSION       *GrayOutExpression;  // nesting inside of GrayOutIf\r
+  FORM_EXPRESSION       *SuppressExpression; // nesting inside of SuppressIf\r
+\r
+} FORM_BROWSER_STATEMENT;\r
+\r
+#define FORM_BROWSER_STATEMENT_FROM_LINK(a)  CR (a, FORM_BROWSER_STATEMENT, Link, FORM_BROWSER_STATEMENT_SIGNATURE)\r
+\r
+#define FORM_BROWSER_FORM_SIGNATURE  SIGNATURE_32 ('F', 'F', 'R', 'M')\r
+\r
+typedef struct {\r
+  UINTN             Signature;\r
+  LIST_ENTRY        Link;\r
+\r
+  UINT16            FormId;\r
+  EFI_STRING_ID     FormTitle;\r
+\r
+  EFI_IMAGE_ID      ImageId;\r
+\r
+  LIST_ENTRY        ExpressionListHead;   // List of Expressions (FORM_EXPRESSION)\r
+  LIST_ENTRY        StatementListHead;    // List of Statements and Questions (FORM_BROWSER_STATEMENT)\r
+} FORM_BROWSER_FORM;\r
+\r
+#define FORM_BROWSER_FORM_FROM_LINK(a)  CR (a, FORM_BROWSER_FORM, Link, FORM_BROWSER_FORM_SIGNATURE)\r
+\r
+#define FORMSET_DEFAULTSTORE_SIGNATURE  SIGNATURE_32 ('F', 'D', 'F', 'S')\r
+\r
+typedef struct {\r
+  UINTN            Signature;\r
+  LIST_ENTRY       Link;\r
+\r
+  UINT16           DefaultId;\r
+  EFI_STRING_ID    DefaultName;\r
+} FORMSET_DEFAULTSTORE;\r
+\r
+#define FORMSET_DEFAULTSTORE_FROM_LINK(a)  CR (a, FORMSET_DEFAULTSTORE, Link, FORMSET_DEFAULTSTORE_SIGNATURE)\r
+\r
+typedef struct {\r
+  EFI_HII_HANDLE                  HiiHandle;\r
+  EFI_HANDLE                      DriverHandle;\r
+  EFI_HII_CONFIG_ACCESS_PROTOCOL  *ConfigAccess;\r
+  EFI_DEVICE_PATH_PROTOCOL        *DevicePath;\r
+\r
+  UINTN                           IfrBinaryLength;\r
+  UINT8                           *IfrBinaryData;\r
+\r
+  EFI_GUID                        Guid;\r
+  EFI_STRING_ID                   FormSetTitle;\r
+  EFI_STRING_ID                   Help;\r
+  UINT16                          Class;\r
+  UINT16                          SubClass;\r
+  EFI_IMAGE_ID                    ImageId;\r
+\r
+  FORM_BROWSER_STATEMENT          *StatementBuffer;     // Buffer for all Statements and Questions\r
+  EXPRESSION_OPCODE               *ExpressionBuffer;    // Buffer for all Expression OpCode\r
+\r
+  LIST_ENTRY                      StorageListHead;      // Storage list (FORMSET_STORAGE)\r
+  LIST_ENTRY                      DefaultStoreListHead; // DefaultStore list (FORMSET_DEFAULTSTORE)\r
+  LIST_ENTRY                      FormListHead;         // Form list (FORM_BROWSER_FORM)\r
+} FORM_BROWSER_FORMSET;\r
+\r
+\r
+extern EFI_HII_DATABASE_PROTOCOL         *mHiiDatabase;\r
+extern EFI_HII_STRING_PROTOCOL           *mHiiString;\r
+extern EFI_HII_CONFIG_ROUTING_PROTOCOL   *mHiiConfigRouting;\r
+\r
+extern BANNER_DATA           *BannerData;\r
+extern EFI_HII_HANDLE        FrontPageHandle;\r
+extern UINTN                 gClassOfVfr;\r
+extern UINTN                 gFunctionKeySetting;\r
+extern BOOLEAN               gResetRequired;\r
+extern BOOLEAN               gNvUpdateRequired;\r
+extern EFI_HII_HANDLE        gHiiHandle;\r
+extern UINT16                gDirection;\r
+extern EFI_SCREEN_DESCRIPTOR gScreenDimensions;\r
+extern BOOLEAN               gUpArrow;\r
+extern BOOLEAN               gDownArrow;\r
+\r
+//\r
+// Browser Global Strings\r
+//\r
+extern CHAR16            *gFunctionOneString;\r
+extern CHAR16            *gFunctionTwoString;\r
+extern CHAR16            *gFunctionNineString;\r
+extern CHAR16            *gFunctionTenString;\r
+extern CHAR16            *gEnterString;\r
+extern CHAR16            *gEnterCommitString;\r
+extern CHAR16            *gEnterEscapeString;\r
+extern CHAR16            *gEscapeString;\r
+extern CHAR16            *gSaveFailed;\r
+extern CHAR16            *gMoveHighlight;\r
+extern CHAR16            *gMakeSelection;\r
+extern CHAR16            *gDecNumericInput;\r
+extern CHAR16            *gHexNumericInput;\r
+extern CHAR16            *gToggleCheckBox;\r
+extern CHAR16            *gPromptForData;\r
+extern CHAR16            *gPromptForPassword;\r
+extern CHAR16            *gPromptForNewPassword;\r
+extern CHAR16            *gConfirmPassword;\r
+extern CHAR16            *gConfirmError;\r
+extern CHAR16            *gPassowordInvalid;\r
+extern CHAR16            *gPressEnter;\r
+extern CHAR16            *gEmptyString;\r
+extern CHAR16            *gAreYouSure;\r
+extern CHAR16            *gYesResponse;\r
+extern CHAR16            *gNoResponse;\r
+extern CHAR16            *gMiniString;\r
+extern CHAR16            *gPlusString;\r
+extern CHAR16            *gMinusString;\r
+extern CHAR16            *gAdjustNumber;\r
+extern CHAR16            *gSaveChanges;\r
+extern CHAR16            *gOptionMismatch;\r
+\r
+extern CHAR16            gPromptBlockWidth;\r
+extern CHAR16            gOptionBlockWidth;\r
+extern CHAR16            gHelpBlockWidth;\r
+\r
+extern EFI_GUID          gZeroGuid;\r
+extern EFI_GUID          gTianoHiiIfrGuid;\r
+\r
+//\r
+// Global Procedure Defines\r
+//\r
+\r
+/**\r
+  Initialize the HII String Token to the correct values.\r
+\r
+**/\r
+VOID\r
+InitializeBrowserStrings (\r
+  VOID\r
+  );\r
+\r
+/**\r
+  Prints a unicode string to the default console,\r
+  using L"%s" format.\r
+\r
+  @param  String     String pointer.\r
+\r
+  @return Length of string printed to the console\r
+\r
+**/\r
+UINTN\r
+PrintString (\r
+  IN CHAR16       *String\r
+  );\r
+\r
+/**\r
+  Prints a chracter to the default console,\r
+  using L"%c" format.\r
+\r
+  @param  Character  Character to print.\r
+\r
+  @return Length of string printed to the console.\r
+\r
+**/\r
+UINTN\r
+PrintChar (\r
+  CHAR16       Character\r
+  );\r
+\r
+/**\r
+  Prints a formatted unicode string to the default console, at\r
+  the supplied cursor position.\r
+\r
+  @param  Column     The cursor position to print the string at.\r
+  @param  Row        The cursor position to print the string at\r
+  @param  Fmt        Format string\r
+  @param  ...        Variable argument list for formating string.\r
+\r
+  @return Length of string printed to the console\r
+\r
+**/\r
+UINTN\r
+PrintAt (\r
+  IN UINTN     Column,\r
+  IN UINTN     Row,\r
+  IN CHAR16    *Fmt,\r
+  ...\r
+  );\r
+\r
+/**\r
+  Prints a unicode string to the default console, at\r
+  the supplied cursor position, using L"%s" format.\r
+\r
+  @param  Column     The cursor position to print the string at.\r
+  @param  Row        The cursor position to print the string at\r
+  @param  String     String pointer.\r
+\r
+  @return Length of string printed to the console\r
+\r
+**/\r
+UINTN\r
+PrintStringAt (\r
+  IN UINTN     Column,\r
+  IN UINTN     Row,\r
+  IN CHAR16    *String\r
+  );\r
+\r
+/**\r
+  Prints a chracter to the default console, at\r
+  the supplied cursor position, using L"%c" format.\r
+\r
+  @param  Column     The cursor position to print the string at.\r
+  @param  Row        The cursor position to print the string at.\r
+  @param  Character  Character to print.\r
+\r
+  @return Length of string printed to the console.\r
+\r
+**/\r
+UINTN\r
+PrintCharAt (\r
+  IN UINTN     Column,\r
+  IN UINTN     Row,\r
+  CHAR16       Character\r
+  );\r
+\r
+/**\r
+  Parse opcodes in the formset IFR binary.\r
+\r
+  @param  FormSet                Pointer of the FormSet data structure.\r
+\r
+  @retval EFI_SUCCESS            Opcode parse success.\r
+  @retval Other                  Opcode parse fail.\r
+\r
+**/\r
+EFI_STATUS\r
+ParseOpCodes (\r
+  IN FORM_BROWSER_FORMSET              *FormSet\r
+  );\r
+\r
+/**\r
+  Free resources allocated for a FormSet.\r
+\r
+  @param  FormSet                Pointer of the FormSet\r
+\r
+**/\r
+VOID\r
+DestroyFormSet (\r
+  IN OUT FORM_BROWSER_FORMSET  *FormSet\r
+  );\r
+\r
+/**\r
+  This function displays the page frame.\r
+\r
+**/\r
+VOID\r
+DisplayPageFrame (\r
+  VOID\r
+  );\r
+\r
+/**\r
+  Create a new string in HII Package List.\r
+\r
+  @param  String                 The String to be added\r
+  @param  HiiHandle              The package list in the HII database to insert the\r
+                                 specified string.\r
+\r
+  @return The output string.\r
+\r
+**/\r
+EFI_STRING_ID\r
+NewString (\r
+  IN  CHAR16                   *String,\r
+  IN  EFI_HII_HANDLE           HiiHandle\r
+  );\r
+\r
+/**\r
+  Delete a string from HII Package List.\r
+\r
+  @param  StringId               Id of the string in HII database.\r
+  @param  HiiHandle              The HII package list handle.\r
+\r
+  @retval EFI_SUCCESS            The string was deleted successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+DeleteString (\r
+  IN  EFI_STRING_ID            StringId,\r
+  IN  EFI_HII_HANDLE           HiiHandle\r
+  );\r
+\r
+/**\r
+  Get the string based on the StringId and HII Package List Handle.\r
+\r
+  @param  Token                  The String's ID.\r
+  @param  HiiHandle              The package list in the HII database to search for\r
+                                 the specified string.\r
+\r
+  @return The output string.\r
+\r
+**/\r
+CHAR16 *\r
+GetToken (\r
+  IN  EFI_STRING_ID                Token,\r
+  IN  EFI_HII_HANDLE               HiiHandle\r
+  );\r
+\r
+/**\r
+  Draw a pop up windows based on the dimension, number of lines and\r
+  strings specified.\r
+\r
+  @param RequestedWidth  The width of the pop-up.\r
+  @param NumberOfLines   The number of lines.\r
+  @param Marker          The variable argument list for the list of string to be printed.\r
+\r
+**/\r
+VOID\r
+CreateSharedPopUp (\r
+  IN  UINTN                       RequestedWidth,\r
+  IN  UINTN                       NumberOfLines,\r
+  IN  VA_LIST                     Marker\r
+  );\r
+\r
+/**\r
+  Routine used to abstract a generic dialog interface and return the selected key or string\r
+\r
+  @param  NumberOfLines          The number of lines for the dialog box\r
+  @param  HotKey                 Defines whether a single character is parsed\r
+                                 (TRUE) and returned in KeyValue or a string is\r
+                                 returned in StringBuffer.  Two special characters\r
+                                 are considered when entering a string, a SCAN_ESC\r
+                                 and an CHAR_CARRIAGE_RETURN.  SCAN_ESC terminates\r
+                                 string input and returns\r
+  @param  MaximumStringSize      The maximum size in bytes of a typed in string\r
+                                 (each character is a CHAR16) and the minimum\r
+                                 string returned is two bytes\r
+  @param  StringBuffer           The passed in pointer to the buffer which will\r
+                                 hold the typed in string if HotKey is FALSE\r
+  @param  KeyValue               The EFI_KEY value returned if HotKey is TRUE..\r
+  @param  ...                    A series of (quantity == NumberOfLines) text\r
+                                 strings which will be used to construct the dialog\r
+                                 box\r
+\r
+  @retval EFI_SUCCESS            Displayed dialog and received user interaction\r
+  @retval EFI_INVALID_PARAMETER  One of the parameters was invalid (e.g.\r
+                                 (StringBuffer == NULL) && (HotKey == FALSE))\r
+  @retval EFI_DEVICE_ERROR       User typed in an ESC character to exit the routine\r
+\r
+**/\r
+EFI_STATUS\r
+CreateDialog (\r
+  IN  UINTN                       NumberOfLines,\r
+  IN  BOOLEAN                     HotKey,\r
+  IN  UINTN                       MaximumStringSize,\r
+  OUT CHAR16                      *StringBuffer,\r
+  OUT EFI_INPUT_KEY               *KeyValue,\r
+  ...\r
+  );\r
+\r
+/**\r
+  Get Question's current Value.\r
+\r
+  @param  FormSet                FormSet data structure.\r
+  @param  Form                   Form data structure.\r
+  @param  Question               Question to be initialized.\r
+  @param  Cached                 TRUE:  get from Edit copy FALSE: get from original\r
+                                 Storage\r
+\r
+  @retval EFI_SUCCESS            The function completed successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+GetQuestionValue (\r
+  IN FORM_BROWSER_FORMSET             *FormSet,\r
+  IN FORM_BROWSER_FORM                *Form,\r
+  IN OUT FORM_BROWSER_STATEMENT       *Question,\r
+  IN BOOLEAN                          Cached\r
+  );\r
+\r
+/**\r
+  Save Question Value to edit copy(cached) or Storage(uncached).\r
+\r
+  @param  FormSet                FormSet data structure.\r
+  @param  Form                   Form data structure.\r
+  @param  Question               Pointer to the Question.\r
+  @param  Cached                 TRUE:  set to Edit copy FALSE: set to original\r
+                                 Storage\r
+\r
+  @retval EFI_SUCCESS            The function completed successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+SetQuestionValue (\r
+  IN FORM_BROWSER_FORMSET             *FormSet,\r
+  IN FORM_BROWSER_FORM                *Form,\r
+  IN OUT FORM_BROWSER_STATEMENT       *Question,\r
+  IN BOOLEAN                          Cached\r
+  );\r
+\r
+/**\r
+  Perform inconsistent check for a Form.\r
+\r
+  @param  FormSet                FormSet data structure.\r
+  @param  Form                   Form data structure.\r
+  @param  Question               The Question to be validated.\r
+  @param  Type                   Validation type: InConsistent or NoSubmit\r
+\r
+  @retval EFI_SUCCESS            Form validation pass.\r
+  @retval other                  Form validation failed.\r
+\r
+**/\r
+EFI_STATUS\r
+ValidateQuestion (\r
+  IN  FORM_BROWSER_FORMSET            *FormSet,\r
+  IN  FORM_BROWSER_FORM               *Form,\r
+  IN  FORM_BROWSER_STATEMENT          *Question,\r
+  IN  UINTN                           Type\r
+  );\r
+\r
+/**\r
+  Submit a Form.\r
+\r
+  @param  FormSet                FormSet data structure.\r
+  @param  Form                   Form data structure.\r
+\r
+  @retval EFI_SUCCESS            The function completed successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+SubmitForm (\r
+  IN FORM_BROWSER_FORMSET             *FormSet,\r
+  IN FORM_BROWSER_FORM                *Form\r
+  );\r
+\r
+/**\r
+  Reset Question to its default value.\r
+\r
+  @param  FormSet                The form set.\r
+  @param  Form                   The form.\r
+  @param  Question               The question.\r
+  @param  DefaultId              The Class of the default.\r
+\r
+  @retval EFI_SUCCESS            Question is reset to default value.\r
+\r
+**/\r
+EFI_STATUS\r
+GetQuestionDefault (\r
+  IN FORM_BROWSER_FORMSET             *FormSet,\r
+  IN FORM_BROWSER_FORM                *Form,\r
+  IN FORM_BROWSER_STATEMENT           *Question,\r
+  IN UINT16                           DefaultId\r
+  );\r
+\r
+/**\r
+  Get current setting of Questions.\r
+\r
+  @param  FormSet                FormSet data structure.\r
+\r
+  @retval EFI_SUCCESS            The function completed successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+InitializeCurrentSetting (\r
+  IN OUT FORM_BROWSER_FORMSET             *FormSet\r
+  );\r
+\r
+/**\r
+  Initialize the internal data structure of a FormSet.\r
+\r
+  @param  Handle                 PackageList Handle\r
+  @param  FormSetGuid            GUID of a formset. If not specified (NULL or zero\r
+                                 GUID), take the first FormSet found in package\r
+                                 list.\r
+  @param  FormSet                FormSet data structure.\r
+\r
+  @retval EFI_SUCCESS            The function completed successfully.\r
+  @retval EFI_NOT_FOUND          The specified FormSet could not be found.\r
+\r
+**/\r
+EFI_STATUS\r
+InitializeFormSet (\r
+  IN  EFI_HII_HANDLE                   Handle,\r
+  IN OUT EFI_GUID                      *FormSetGuid,\r
+  OUT FORM_BROWSER_FORMSET             *FormSet\r
+  );\r
+\r
+/**\r
+  Reset Questions in a Form to their default value.\r
+\r
+  @param  FormSet                FormSet data structure.\r
+  @param  Form                   The Form which to be reset.\r
+  @param  DefaultId              The Class of the default.\r
+\r
+  @retval EFI_SUCCESS            The function completed successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+ExtractFormDefault (\r
+  IN FORM_BROWSER_FORMSET             *FormSet,\r
+  IN  FORM_BROWSER_FORM               *Form,\r
+  IN UINT16                           DefaultId\r
+  );\r
+\r
+/**\r
+  Initialize Question's Edit copy from Storage.\r
+\r
+  @param  FormSet                FormSet data structure.\r
+  @param  Form                   Form data structure.\r
+\r
+  @retval EFI_SUCCESS            The function completed successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+LoadFormConfig (\r
+  IN FORM_BROWSER_FORMSET             *FormSet,\r
+  IN FORM_BROWSER_FORM                *Form\r
+  );\r
+\r
+/**\r
+  Convert setting of Buffer Storage or NameValue Storage to <ConfigResp>.\r
+\r
+  @param  Storage                The Storage to be conveted.\r
+  @param  ConfigResp             The returned <ConfigResp>.\r
+\r
+  @retval EFI_SUCCESS            Convert success.\r
+  @retval EFI_INVALID_PARAMETER  Incorrect storage type.\r
+\r
+**/\r
+EFI_STATUS\r
+StorageToConfigResp (\r
+  IN FORMSET_STORAGE         *Storage,\r
+  IN CHAR16                  **ConfigResp\r
+  );\r
+\r
+/**\r
+  Convert <ConfigResp> to settings in Buffer Storage or NameValue Storage.\r
+\r
+  @param  Storage                The Storage to receive the settings.\r
+  @param  ConfigResp             The <ConfigResp> to be converted.\r
+\r
+  @retval EFI_SUCCESS            Convert success.\r
+  @retval EFI_INVALID_PARAMETER  Incorrect storage type.\r
+\r
+**/\r
+EFI_STATUS\r
+ConfigRespToStorage (\r
+  IN FORMSET_STORAGE         *Storage,\r
+  IN CHAR16                  *ConfigResp\r
+  );\r
+\r
+/**\r
+  Fill storage's edit copy with settings requested from Configuration Driver.\r
+\r
+  @param  FormSet                FormSet data structure.\r
+  @param  Storage                Buffer Storage.\r
+\r
+  @retval EFI_SUCCESS            The function completed successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+LoadStorage (\r
+  IN FORM_BROWSER_FORMSET    *FormSet,\r
+  IN FORMSET_STORAGE         *Storage\r
+  );\r
+\r
+/**\r
+  Fetch the Ifr binary data of a FormSet.\r
+\r
+  @param  Handle                 PackageList Handle\r
+  @param  FormSetGuid            GUID of a formset. If not specified (NULL or zero\r
+                                 GUID), take the first FormSet found in package\r
+                                 list.\r
+  @param  BinaryLength           The length of the FormSet IFR binary.\r
+  @param  BinaryData             The buffer designed to receive the FormSet.\r
+\r
+  @retval EFI_SUCCESS            Buffer filled with the requested FormSet.\r
+                                 BufferLength was updated.\r
+  @retval EFI_INVALID_PARAMETER  The handle is unknown.\r
+  @retval EFI_NOT_FOUND          A form or FormSet on the requested handle cannot\r
+                                 be found with the requested FormId.\r
+\r
+**/\r
+EFI_STATUS\r
+GetIfrBinaryData (\r
+  IN  EFI_HII_HANDLE   Handle,\r
+  IN OUT EFI_GUID      *FormSetGuid,\r
+  OUT UINTN            *BinaryLength,\r
+  OUT UINT8            **BinaryData\r
+  );\r
+\r
+/**\r
+  This is the routine which an external caller uses to direct the browser\r
+  where to obtain it's information.\r
+\r
+\r
+  @param This            The Form Browser protocol instanse.\r
+  @param Handles         A pointer to an array of Handles.  If HandleCount > 1 we\r
+                         display a list of the formsets for the handles specified.\r
+  @param HandleCount     The number of Handles specified in Handle.\r
+  @param FormSetGuid     This field points to the EFI_GUID which must match the Guid\r
+                         field in the EFI_IFR_FORM_SET op-code for the specified\r
+                         forms-based package. If FormSetGuid is NULL, then this\r
+                         function will display the first found forms package.\r
+  @param FormId          This field specifies which EFI_IFR_FORM to render as the first\r
+                         displayable page. If this field has a value of 0x0000, then\r
+                         the forms browser will render the specified forms in their encoded order.\r
+                         ScreenDimenions - This allows the browser to be called so that it occupies a\r
+                         portion of the physical screen instead of dynamically determining the screen dimensions.\r
+                         ActionRequest   - Points to the action recommended by the form.\r
+  @param ScreenDimensions Points to recommended form dimensions, including any non-content area, in \r
+                          characters.\r
+  @param ActionRequest       Points to the action recommended by the form.\r
+\r
+  @retval  EFI_SUCCESS            The function completed successfully.\r
+  @retval  EFI_INVALID_PARAMETER  One of the parameters has an invalid value.\r
+  @retval  EFI_NOT_FOUND          No valid forms could be found to display.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+SendForm (\r
+  IN  CONST EFI_FORM_BROWSER2_PROTOCOL *This,\r
+  IN  EFI_HII_HANDLE                   *Handles,\r
+  IN  UINTN                            HandleCount,\r
+  IN  EFI_GUID                         *FormSetGuid, OPTIONAL\r
+  IN  UINT16                           FormId, OPTIONAL\r
+  IN  CONST EFI_SCREEN_DESCRIPTOR      *ScreenDimensions, OPTIONAL\r
+  OUT EFI_BROWSER_ACTION_REQUEST       *ActionRequest  OPTIONAL\r
+  );\r
+\r
+/**\r
+  This function is called by a callback handler to retrieve uncommitted state\r
+  data from the browser.\r
+\r
+  @param  This                   A pointer to the EFI_FORM_BROWSER2_PROTOCOL\r
+                                 instance.\r
+  @param  ResultsDataSize        A pointer to the size of the buffer associated\r
+                                 with ResultsData.\r
+  @param  ResultsData            A string returned from an IFR browser or\r
+                                 equivalent. The results string will have no\r
+                                 routing information in them.\r
+  @param  RetrieveData           A BOOLEAN field which allows an agent to retrieve\r
+                                 (if RetrieveData = TRUE) data from the uncommitted\r
+                                 browser state information or set (if RetrieveData\r
+                                 = FALSE) data in the uncommitted browser state\r
+                                 information.\r
+  @param  VariableGuid           An optional field to indicate the target variable\r
+                                 GUID name to use.\r
+  @param  VariableName           An optional field to indicate the target\r
+                                 human-readable variable name.\r
+\r
+  @retval EFI_SUCCESS            The results have been distributed or are awaiting\r
+                                 distribution.\r
+  @retval EFI_BUFFER_TOO_SMALL   The ResultsDataSize specified was too small to\r
+                                 contain the results data.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+BrowserCallback (\r
+  IN CONST EFI_FORM_BROWSER2_PROTOCOL  *This,\r
+  IN OUT UINTN                         *ResultsDataSize,\r
+  IN OUT EFI_STRING                    ResultsData,\r
+  IN BOOLEAN                           RetrieveData,\r
+  IN CONST EFI_GUID                    *VariableGuid, OPTIONAL\r
+  IN CONST CHAR16                      *VariableName  OPTIONAL\r
+  );\r
+\r
+#endif\r