]> git.proxmox.com Git - mirror_edk2.git/commitdiff
Update to use DOS format
authorqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 31 Oct 2008 04:23:58 +0000 (04:23 +0000)
committerqhuang8 <qhuang8@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 31 Oct 2008 04:23:58 +0000 (04:23 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@6325 6f19259b-4bc3-4df7-8a09-765794883524

MdePkg/Include/Library/IfrSupportLib.h

index 27ed9851aea9fdbd383cea84dff8b1811b4235e8..2904cb24cfb907cc85073d0d157a70809fc90a03 100644 (file)
-/** @file
-  This library contains functions to do IFR opcode creation and utility functions 
-  to help module to interact with a UEFI Form Browser.
-
-  Copyright (c) 2007 - 2008, 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.
-
-**/
-
-#ifndef _IFR_SUPPORT_LIBRARY_H_
-#define _IFR_SUPPORT_LIBRARY_H_
-
-
-#include <Protocol/HiiFont.h>
-#include <Protocol/HiiImage.h>
-#include <Protocol/HiiString.h>
-#include <Protocol/HiiDatabase.h>
-#include <Protocol/HiiConfigRouting.h>
-#include <Protocol/HiiConfigAccess.h>
-#include <Protocol/FormBrowser2.h>
-#include <Protocol/SimpleTextOut.h>
-
-#include <Guid/GlobalVariable.h>
-
-//
-// The architectural variable "Lang" and "LangCodes" are deprecated in UEFI
-// specification. While, UEFI specification also states that these deprecated
-// variables may be provided for backwards compatibility.
-
-#define EFI_LANGUAGE_VARIABLE           L"Lang"
-#define EFI_LANGUAGE_CODES_VARIABLE     L"LangCodes"
-
-#define UEFI_LANGUAGE_VARIABLE          L"PlatformLang"
-#define UEFI_LANGUAGE_CODES_VARIABLE    L"PlatformLangCodes"
-
-#define INVALID_VARSTORE_ID             0
-
-#define QUESTION_FLAGS              (EFI_IFR_FLAG_READ_ONLY | EFI_IFR_FLAG_CALLBACK | EFI_IFR_FLAG_RESET_REQUIRED | EFI_IFR_FLAG_OPTIONS_ONLY)
-#define QUESTION_FLAGS_MASK         (~QUESTION_FLAGS)
-
-#pragma pack(1)
-typedef struct {
-  EFI_STRING_ID       StringToken;
-  EFI_IFR_TYPE_VALUE  Value;
-  UINT8               Flags;
-} IFR_OPTION;
-#pragma pack()
-
-typedef struct {
-  ///
-  /// Buffer size allocated for Data.
-  ///
-  UINT32                BufferSize;
-
-  ///
-  /// Offset in Data to append the newly created opcode binary.
-  /// It will be adjusted automatically in Create***OpCode(), and should be
-  /// initialized to 0 before invocation of a serial of Create***OpCode()
-  ///
-  UINT32                Offset;
-
-  ///
-  /// The destination buffer for created op-codes
-  ///
-  UINT8                 *Data;
-} EFI_HII_UPDATE_DATA;
-
-
-/**
-  Create EFI_IFR_END_OP opcode.
-
-  If Data is NULL or Data->Data is NULL, then ASSERT.
-
-  @param  Data                   Destination for the created opcode binary
-
-  @retval EFI_SUCCESS            Opcode is created successfully.
-  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.
-
-**/
-EFI_STATUS
-EFIAPI
-CreateEndOpCode (
-  IN OUT EFI_HII_UPDATE_DATA *Data
-  )
-;
-
-/**
-  Create EFI_IFR_DEFAULT_OP opcode.
-
-  If Data is NULL or Data->Data is NULL, then ASSERT.
-
-  @param  Value                  Value for the default
-  @param  Type                   Type for the default
-  @param  Data                   Destination for the created opcode binary
-
-  @retval EFI_SUCCESS            Opcode is created successfully.
-  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.
-  @retval EFI_INVALID_PARAMETER The type is not valid.
-
-**/
-EFI_STATUS
-EFIAPI
-CreateDefaultOpCode (
-  IN     EFI_IFR_TYPE_VALUE  *Value,
-  IN     UINT8               Type,
-  IN OUT EFI_HII_UPDATE_DATA *Data
-  )
-;
-
-/**
-  Create EFI_IFR_ACTION_OP opcode.
-
-  If Data is NULL or Data->Data is NULL, then ASSERT.
-
-  @param  QuestionId             Question ID
-  @param  Prompt                 String ID for Prompt
-  @param  Help                   String ID for Help
-  @param  QuestionFlags          Flags in Question Header
-  @param  QuestionConfig         String ID for configuration
-  @param  Data                   Destination for the created opcode binary
-
-  @retval EFI_SUCCESS            Opcode is created successfully.
-  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.
-  @retval EFI_INVALID_PARAMETER If QuestionFlags is not valid.
-
-**/
-EFI_STATUS
-EFIAPI
-CreateActionOpCode (
-  IN     EFI_QUESTION_ID      QuestionId,
-  IN     EFI_STRING_ID        Prompt,
-  IN     EFI_STRING_ID        Help,
-  IN     UINT8                QuestionFlags,
-  IN     EFI_STRING_ID        QuestionConfig,
-  IN OUT EFI_HII_UPDATE_DATA  *Data
-  )
-;
-
-/**
-  Create EFI_IFR_SUBTITLE_OP opcode.
-
-  If Data is NULL or Data->Data is NULL, then ASSERT.
-
-  @param  Prompt                 String ID for Prompt
-  @param  Help                   String ID for Help
-  @param  Flags                  Subtitle opcode flags
-  @param  Scope                  Subtitle Scope bit
-  @param  Data                   Destination for the created opcode binary
-
-  @retval EFI_SUCCESS            Opcode is created successfully.
-  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.
-  
-**/
-EFI_STATUS
-EFIAPI
-CreateSubTitleOpCode (
-  IN      EFI_STRING_ID       Prompt,
-  IN      EFI_STRING_ID       Help,
-  IN      UINT8               Flags,
-  IN      UINT8               Scope,
-  IN OUT EFI_HII_UPDATE_DATA  *Data
-  )
-;
-
-/**
-  Create EFI_IFR_TEXT_OP opcode.
-
-  If Data is NULL or Data->Data is NULL, then ASSERT.
-
-  @param  Prompt                 String ID for Prompt
-  @param  Help                   String ID for Help
-  @param  TextTwo                String ID for text two
-  @param  Data                   Destination for the created opcode binary
-
-  @retval EFI_SUCCESS            Opcode is created successfully.
-  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.
-
-**/
-EFI_STATUS
-EFIAPI
-CreateTextOpCode (
-  IN      EFI_STRING_ID       Prompt,
-  IN      EFI_STRING_ID       Help,
-  IN      EFI_STRING_ID       TextTwo,
-  IN OUT  EFI_HII_UPDATE_DATA *Data
-  )
-;
-
-/**
-  Create EFI_IFR_REF_OP opcode.
-
-  If Data is NULL or Data->Data is NULL, then ASSERT.
-
-  @param  FormId                 Destination Form ID
-  @param  Prompt                 String ID for Prompt
-  @param  Help                   String ID for Help
-  @param  QuestionFlags          Flags in Question Header
-  @param  QuestionId             Question ID
-  @param  Data                   Destination for the created opcode binary
-
-  @retval EFI_SUCCESS            Opcode is created successfully.
-  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.
-  @retval EFI_INVALID_PARAMETER If QuestionFlags is not valid.
-
-**/
-EFI_STATUS
-EFIAPI
-CreateGotoOpCode (
-  IN      EFI_FORM_ID         FormId,
-  IN      EFI_STRING_ID       Prompt,
-  IN      EFI_STRING_ID       Help,
-  IN      UINT8               QuestionFlags,
-  IN      EFI_QUESTION_ID     QuestionId,
-  IN OUT  EFI_HII_UPDATE_DATA *Data
-  )
-;
-
-/**
-  Create EFI_IFR_ONE_OF_OPTION_OP opcode.
-
-  If Data is NULL or Data->Data is NULL, then ASSERT.
-
-  @param  OptionCount            The number of options.
-  @param  OptionsList            The list of Options.
-  @param  Type                   The data type.
-  @param  Data                   Destination for the created opcode binary
-
-  @retval EFI_SUCCESS            Opcode is created successfully.
-  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.
-  @retval EFI_INVALID_PARAMETER If OptionCount is not zero but OptionsList is NULL.
-
-**/
-EFI_STATUS
-EFIAPI
-CreateOneOfOptionOpCode (
-  IN     UINTN                OptionCount,
-  IN     IFR_OPTION           *OptionsList,
-  IN     UINT8                Type,
-  IN OUT EFI_HII_UPDATE_DATA  *Data
-  )
-;
-
-/**
-  Create EFI_IFR_ONE_OF_OP opcode.
-
-  If Data is NULL or Data->Data is NULL, then ASSERT.
-
-  @param  QuestionId             Question ID
-  @param  VarStoreId             Storage ID
-  @param  VarOffset              Offset in Storage
-  @param  Prompt                 String ID for Prompt
-  @param  Help                   String ID for Help
-  @param  QuestionFlags          Flags in Question Header
-  @param  OneOfFlags             Flags for oneof opcode
-  @param  OptionsList            List of options
-  @param  OptionCount            Number of options in option list
-  @param  Data                   Destination for the created opcode binary
-
-  @retval EFI_SUCCESS            Opcode is created successfully.
-  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.
-  @retval EFI_INVALID_PARAMETER If QuestionFlags is not valid.
-
-**/
-EFI_STATUS
-EFIAPI
-CreateOneOfOpCode (
-  IN     EFI_QUESTION_ID      QuestionId,
-  IN     EFI_VARSTORE_ID      VarStoreId,
-  IN     UINT16               VarOffset,
-  IN     EFI_STRING_ID        Prompt,
-  IN     EFI_STRING_ID        Help,
-  IN     UINT8                QuestionFlags,
-  IN     UINT8                OneOfFlags,
-  IN     IFR_OPTION           *OptionsList,
-  IN     UINTN                OptionCount,
-  IN OUT EFI_HII_UPDATE_DATA  *Data
-  )
-;
-
-/**
-  Create EFI_IFR_ORDERED_LIST_OP opcode.
-
-  If Data is NULL or Data->Data is NULL, then ASSERT.
-
-  @param  QuestionId             Question ID
-  @param  VarStoreId             Storage ID
-  @param  VarOffset              Offset in Storage
-  @param  Prompt                 String ID for Prompt
-  @param  Help                   String ID for Help
-  @param  QuestionFlags          Flags in Question Header
-  @param  OrderedListFlags       Flags for ordered list opcode
-  @param  DataType               Type for option value
-  @param  MaxContainers          Maximum count for options in this ordered list
-  @param  OptionsList            List of options
-  @param  OptionCount            Number of options in option list
-  @param  Data                   Destination for the created opcode binary
-
-  @retval EFI_SUCCESS            Opcode is created successfully.
-  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.
-  @retval EFI_INVALID_PARAMETER If QuestionFlags is not valid.
-
-**/
-EFI_STATUS
-EFIAPI
-CreateOrderedListOpCode (
-  IN      EFI_QUESTION_ID     QuestionId,
-  IN      EFI_VARSTORE_ID     VarStoreId,
-  IN      UINT16              VarOffset,
-  IN      EFI_STRING_ID       Prompt,
-  IN      EFI_STRING_ID       Help,
-  IN      UINT8               QuestionFlags,
-  IN      UINT8               OrderedListFlags,
-  IN      UINT8               DataType,
-  IN      UINT8               MaxContainers,
-  IN      IFR_OPTION          *OptionsList,
-  IN      UINTN               OptionCount,
-  IN OUT  EFI_HII_UPDATE_DATA *Data
-  )
-;
-
-/**
-  Create EFI_IFR_CHECKBOX_OP opcode.
-
-  If Data is NULL or Data->Data is NULL, then ASSERT.
-
-  @param  QuestionId             Question ID
-  @param  VarStoreId             Storage ID
-  @param  VarOffset              Offset in Storage
-  @param  Prompt                 String ID for Prompt
-  @param  Help                   String ID for Help
-  @param  QuestionFlags          Flags in Question Header
-  @param  CheckBoxFlags          Flags for checkbox opcode
-  @param  Data                   Destination for the created opcode binary
-
-  @retval EFI_SUCCESS            Opcode is created successfully.
-  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.
-  @retval EFI_INVALID_PARAMETER If QuestionFlags is not valid.
-
-**/
-EFI_STATUS
-EFIAPI
-CreateCheckBoxOpCode (
-  IN      EFI_QUESTION_ID     QuestionId,
-  IN      EFI_VARSTORE_ID     VarStoreId,
-  IN      UINT16              VarOffset,
-  IN      EFI_STRING_ID       Prompt,
-  IN      EFI_STRING_ID       Help,
-  IN      UINT8               QuestionFlags,
-  IN      UINT8               CheckBoxFlags,
-  IN OUT EFI_HII_UPDATE_DATA  *Data
-  )
-;
-
-/**
-  Create EFI_IFR_NUMERIC_OP opcode.
-
-  If Data is NULL or Data->Data is NULL, then ASSERT.
-
-  @param  QuestionId             Question ID
-  @param  VarStoreId             Storage ID
-  @param  VarOffset              Offset in Storage
-  @param  Prompt                 String ID for Prompt
-  @param  Help                   String ID for Help
-  @param  QuestionFlags          Flags in Question Header
-  @param  NumericFlags           Flags for numeric opcode
-  @param  Minimum                Numeric minimum value
-  @param  Maximum                Numeric maximum value
-  @param  Step                   Numeric step for edit
-  @param  Default                Numeric default value
-  @param  Data                   Destination for the created opcode binary
-
-  @retval EFI_SUCCESS            Opcode is created successfully.
-  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.
-  @retval EFI_INVALID_PARAMETER If QuestionFlags is not valid.
-
-**/
-EFI_STATUS
-EFIAPI
-CreateNumericOpCode (
-  IN     EFI_QUESTION_ID     QuestionId,
-  IN     EFI_VARSTORE_ID     VarStoreId,
-  IN     UINT16              VarOffset,
-  IN     EFI_STRING_ID       Prompt,
-  IN     EFI_STRING_ID       Help,
-  IN     UINT8               QuestionFlags,
-  IN     UINT8               NumericFlags,
-  IN     UINT64              Minimum,
-  IN     UINT64              Maximum,
-  IN     UINT64              Step,
-  IN     UINT64              Default,
-  IN OUT EFI_HII_UPDATE_DATA *Data
-  )
-;
-
-/**
-  Create EFI_IFR_STRING_OP opcode.
-
-  If Data is NULL or Data->Data is NULL, then ASSERT.
-
-  @param  QuestionId             Question ID
-  @param  VarStoreId             Storage ID
-  @param  VarOffset              Offset in Storage
-  @param  Prompt                 String ID for Prompt
-  @param  Help                   String ID for Help
-  @param  QuestionFlags          Flags in Question Header
-  @param  StringFlags            Flags for string opcode
-  @param  MinSize                String minimum length
-  @param  MaxSize                String maximum length
-  @param  Data                   Destination for the created opcode binary
-
-  @retval EFI_SUCCESS            Opcode is created successfully.
-  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.
-  @retval EFI_INVALID_PARAMETER If QuestionFlags is not valid.
-
-**/
-EFI_STATUS
-EFIAPI
-CreateStringOpCode (
-  IN      EFI_QUESTION_ID     QuestionId,
-  IN      EFI_VARSTORE_ID     VarStoreId,
-  IN      UINT16              VarOffset,
-  IN      EFI_STRING_ID       Prompt,
-  IN      EFI_STRING_ID       Help,
-  IN      UINT8               QuestionFlags,
-  IN      UINT8               StringFlags,
-  IN      UINT8               MinSize,
-  IN      UINT8               MaxSize,
-  IN OUT EFI_HII_UPDATE_DATA  *Data
-  )
-;
-
-/**
-  Converts the unicode character of the string from uppercase to lowercase.
-
-  @param Str     String to be converted
-
-**/
-VOID
-EFIAPI
-ToLower (
-  IN OUT CHAR16    *Str
-  )
-;
-
-/**
-  Converts binary buffer to a Unicode string. The byte buffer is in a reversed byte order 
-  compared with the byte order defined in BufToHexString().
-
-  @param  Str                    String for output
-  @param  Buffer                 Binary buffer.
-  @param  BufferSize             Size of the buffer in bytes.
-
-  @retval EFI_SUCCESS            The function completed successfully.
-  @retval EFI_OUT_OF_RESOURCES   There is no enough available memory space.
-
-**/
-EFI_STATUS
-EFIAPI
-BufInReverseOrderToHexString (
-  IN OUT CHAR16    *Str,
-  IN UINT8         *Buffer,
-  IN UINTN         BufferSize
-  )
-;
-
-/**
-  Converts Hex String to binary buffer in reversed byte order to HexStringToBuf().
-
-  @param  Buffer                 Pointer to buffer that receives the data.
-  @param  BufferSize             Length in bytes of the buffer to hold converted
-                                 data. If routine return with EFI_SUCCESS,
-                                 containing length of converted data. If routine
-                                 return with EFI_BUFFER_TOO_SMALL, containg length
-                                 of buffer desired.
-  @param  Str                    String to be converted from.
-
-  @retval EFI_SUCCESS            The function completed successfully.
-  @retval RETURN_BUFFER_TOO_SMALL   The input BufferSize is too small to hold the output. BufferSize
-                                   will be updated to the size required for the converstion.
-
-**/
-EFI_STATUS
-EFIAPI
-HexStringToBufInReverseOrder (
-  IN OUT UINT8         *Buffer,
-  IN OUT UINTN         *BufferSize,
-  IN CHAR16            *Str
-  )
-;
-
-/**
-  Convert binary representation Config string (e.g. "0041004200430044") to the
-  original string (e.g. "ABCD"). Config string appears in <ConfigHdr> (i.e.
-  "&NAME=<string>"), or Name/Value pair in <ConfigBody> (i.e. "label=<string>").
-
-  @param UnicodeString  Original Unicode string.
-  @param StrBufferLen   On input: Length in bytes of buffer to hold the Unicode string.
-                                    Includes tailing '\0' character.
-                                    On output:
-                                      containing length of Unicode string buffer when returning EFI_SUCCESS;
-                                      containg length of string buffer desired when returning EFI_BUFFER_TOO_SMALL.
-  @param ConfigString   Binary representation of Unicode String, <string> := (<HexCh>4)+
-
-  @retval EFI_SUCCESS          Operation completes successfully.
-  @retval EFI_BUFFER_TOO_SMALL The string buffer is too small.
-
-**/
-EFI_STATUS
-EFIAPI
-ConfigStringToUnicode (
-  IN OUT CHAR16                *UnicodeString,
-  IN OUT UINTN                 *StrBufferLen,
-  IN CHAR16                    *ConfigString
-  )
-;
-
-/**
-  Convert Unicode string to binary representation Config string, e.g.
-  "ABCD" => "0041004200430044". Config string appears in <ConfigHdr> (i.e.
-  "&NAME=<string>"), or Name/Value pair in <ConfigBody> (i.e. "label=<string>").
-
-  @param ConfigString   Binary representation of Unicode String, <string> := (<HexCh>4)+
-  @param  StrBufferLen  On input: Length in bytes of buffer to hold the Unicode string.
-                                    Includes tailing '\0' character.
-                                    On output:
-                                      If return EFI_SUCCESS, containing length of Unicode string buffer.
-                                      If return EFI_BUFFER_TOO_SMALL, containg length of string buffer desired.
-  @param  UnicodeString  Original Unicode string.
-
-  @retval EFI_SUCCESS           Operation completes successfully.
-  @retval EFI_BUFFER_TOO_SMALL  The string buffer is too small.
-
-**/
-EFI_STATUS
-EFIAPI
-UnicodeToConfigString (
-  IN OUT CHAR16                *ConfigString,
-  IN OUT UINTN                 *StrBufferLen,
-  IN CHAR16                    *UnicodeString
-  )
-;
-
-/**
-  Construct <ConfigHdr> using routing information GUID/NAME/PATH.
-
-  @param  ConfigHdr              Pointer to the ConfigHdr string.
-  @param  StrBufferLen           On input: Length in bytes of buffer to hold the
-                                 ConfigHdr string. Includes tailing '\0' character.
-                                 On output: If return EFI_SUCCESS, containing
-                                 length of ConfigHdr string buffer. If return
-                                 EFI_BUFFER_TOO_SMALL, containg length of string
-                                 buffer desired.
-  @param  Guid                   Routing information: GUID.
-  @param  Name                   Routing information: NAME.
-  @param  DriverHandle           Driver handle which contains the routing
-                                 information: PATH.
-
-  @retval EFI_SUCCESS            Operation completes successfully.
-  @retval EFI_BUFFER_TOO_SMALL   The ConfigHdr string buffer is too small.
-
-**/
-EFI_STATUS
-EFIAPI
-ConstructConfigHdr (
-  IN OUT CHAR16                *ConfigHdr,
-  IN OUT UINTN                 *StrBufferLen,
-  IN CONST EFI_GUID            *Guid,
-  IN CHAR16                    *Name, OPTIONAL
-  IN EFI_HANDLE                *DriverHandle
-  )
-
-;
-
-/**
-  Search BlockName "&OFFSET=Offset&WIDTH=Width" in a string.
-
-  @param  String                 The string to be searched in.
-  @param  Offset                 Offset in BlockName.
-  @param  Width                  Width in BlockName.
-
-  @retval TRUE                   Block name found.
-  @retval FALSE                  Block name not found.
-
-**/
-BOOLEAN
-EFIAPI
-FindBlockName (
-  IN OUT CHAR16                *String,
-  IN UINTN                     Offset,
-  IN UINTN                     Width
-  )
-;
-
-/**
-  This routine is invoked by ConfigAccess.Callback() to retrived uncommitted data from Form Browser.
-
-  @param  VariableGuid           An optional field to indicate the target variable
-                                 GUID name to use.
-  @param  VariableName           An optional field to indicate the target
-                                 human-readable variable name.
-  @param  BufferSize             On input: Length in bytes of buffer to hold
-                                 retrived data. On output: If return
-                                 EFI_BUFFER_TOO_SMALL, containg length of buffer
-                                 desired.
-  @param  Buffer                 Buffer to hold retrived data.
-
-  @retval EFI_SUCCESS            Operation completes successfully.
-  @retval EFI_BUFFER_TOO_SMALL   The intput buffer is too small.
-
-**/
-EFI_STATUS
-EFIAPI
-GetBrowserData (
-  IN CONST EFI_GUID          *VariableGuid, OPTIONAL
-  IN CONST CHAR16            *VariableName, OPTIONAL
-  IN OUT UINTN               *BufferSize,
-  IN OUT UINT8               *Buffer
-  )
-;
-
-/**
-  This routine is invoked by ConfigAccess.Callback() to update uncommitted data of Form Browser.
-
-  @param  VariableGuid           An optional field to indicate the target variable
-                                 GUID name to use.
-  @param  VariableName           An optional field to indicate the target
-                                 human-readable variable name.
-  @param  BufferSize             Length in bytes of buffer to hold retrived data.
-  @param  Buffer                 Buffer to hold retrived data.
-  @param  RequestElement         An optional field to specify which part of the
-                                 buffer data will be send back to Browser. If NULL,
-                                 the whole buffer of data will be committed to
-                                 Browser. <RequestElement> ::=
-                                 &OFFSET=<Number>&WIDTH=<Number>*
-
-  @retval EFI_SUCCESS            Operation completes successfully.
-  @retval Other                  Updating Browser uncommitted data failed.
-
-**/
-EFI_STATUS
-EFIAPI
-SetBrowserData (
-  IN CONST EFI_GUID          *VariableGuid, OPTIONAL
-  IN CONST CHAR16            *VariableName, OPTIONAL
-  IN UINTN                   BufferSize,
-  IN CONST UINT8             *Buffer,
-  IN CONST CHAR16            *RequestElement  OPTIONAL
-  )
-;
-
-/**
-  Draw a dialog and return the selected key.
-
-  @param  NumberOfLines          The number of lines for the dialog box
-  @param  KeyValue               The EFI_KEY value returned if HotKey is TRUE..
-  @param  String                 Pointer to the first string in the list
-  @param  ...                    A series of (quantity == NumberOfLines - 1) text
-                                 strings which will be used to construct the dialog
-                                 box
-
-  @retval EFI_SUCCESS            Displayed dialog and received user interaction
-  @retval EFI_INVALID_PARAMETER  One of the parameters was invalid.
-
-**/
-EFI_STATUS
-EFIAPI
-IfrLibCreatePopUp (
-  IN  UINTN                       NumberOfLines,
-  OUT EFI_INPUT_KEY               *KeyValue,
-  IN  CHAR16                      *String,
-  ...
-  )
-;
-
-/**
-  Draw a dialog and return the selected key using Variable Argument List.
-
-  @param  NumberOfLines          The number of lines for the dialog box
-  @param  KeyValue               The EFI_KEY value returned if HotKey is TRUE..
-  @param  Args                   VA_LIST marker for the variable argument list.
-                                 A series of (quantity == NumberOfLines - 1) text
-                                 strings which will be used to construct the dialog
-                                 box
-
-  @retval EFI_SUCCESS            Displayed dialog and received user interaction
-  @retval EFI_INVALID_PARAMETER  One of the parameters was invalid.
-
-**/
-EFI_STATUS
-EFIAPI
-IfrLibCreatePopUp2 (
-  IN  UINTN                       NumberOfLines,
-  OUT EFI_INPUT_KEY               *KeyValue,
-  IN  VA_LIST                     Args
-  )
-;
-
-#endif
+/** @file\r
+  This library contains functions to do IFR opcode creation and utility functions \r
+  to help module to interact with a UEFI Form Browser.\r
+\r
+  Copyright (c) 2007 - 2008, 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
+#ifndef _IFR_SUPPORT_LIBRARY_H_\r
+#define _IFR_SUPPORT_LIBRARY_H_\r
+\r
+\r
+#include <Protocol/HiiFont.h>\r
+#include <Protocol/HiiImage.h>\r
+#include <Protocol/HiiString.h>\r
+#include <Protocol/HiiDatabase.h>\r
+#include <Protocol/HiiConfigRouting.h>\r
+#include <Protocol/HiiConfigAccess.h>\r
+#include <Protocol/FormBrowser2.h>\r
+#include <Protocol/SimpleTextOut.h>\r
+\r
+#include <Guid/GlobalVariable.h>\r
+\r
+//\r
+// The architectural variable "Lang" and "LangCodes" are deprecated in UEFI\r
+// specification. While, UEFI specification also states that these deprecated\r
+// variables may be provided for backwards compatibility.\r
+\r
+#define EFI_LANGUAGE_VARIABLE           L"Lang"\r
+#define EFI_LANGUAGE_CODES_VARIABLE     L"LangCodes"\r
+\r
+#define UEFI_LANGUAGE_VARIABLE          L"PlatformLang"\r
+#define UEFI_LANGUAGE_CODES_VARIABLE    L"PlatformLangCodes"\r
+\r
+#define INVALID_VARSTORE_ID             0\r
+\r
+#define QUESTION_FLAGS              (EFI_IFR_FLAG_READ_ONLY | EFI_IFR_FLAG_CALLBACK | EFI_IFR_FLAG_RESET_REQUIRED | EFI_IFR_FLAG_OPTIONS_ONLY)\r
+#define QUESTION_FLAGS_MASK         (~QUESTION_FLAGS)\r
+\r
+#pragma pack(1)\r
+typedef struct {\r
+  EFI_STRING_ID       StringToken;\r
+  EFI_IFR_TYPE_VALUE  Value;\r
+  UINT8               Flags;\r
+} IFR_OPTION;\r
+#pragma pack()\r
+\r
+typedef struct {\r
+  ///\r
+  /// Buffer size allocated for Data.\r
+  ///\r
+  UINT32                BufferSize;\r
+\r
+  ///\r
+  /// Offset in Data to append the newly created opcode binary.\r
+  /// It will be adjusted automatically in Create***OpCode(), and should be\r
+  /// initialized to 0 before invocation of a serial of Create***OpCode()\r
+  ///\r
+  UINT32                Offset;\r
+\r
+  ///\r
+  /// The destination buffer for created op-codes\r
+  ///\r
+  UINT8                 *Data;\r
+} EFI_HII_UPDATE_DATA;\r
+\r
+\r
+/**\r
+  Create EFI_IFR_END_OP opcode.\r
+\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
+\r
+  @param  Data                   Destination for the created opcode binary\r
+\r
+  @retval EFI_SUCCESS            Opcode is created successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CreateEndOpCode (\r
+  IN OUT EFI_HII_UPDATE_DATA *Data\r
+  )\r
+;\r
+\r
+/**\r
+  Create EFI_IFR_DEFAULT_OP opcode.\r
+\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
+\r
+  @param  Value                  Value for the default\r
+  @param  Type                   Type for the default\r
+  @param  Data                   Destination for the created opcode binary\r
+\r
+  @retval EFI_SUCCESS            Opcode is created successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.\r
+  @retval EFI_INVALID_PARAMETER The type is not valid.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CreateDefaultOpCode (\r
+  IN     EFI_IFR_TYPE_VALUE  *Value,\r
+  IN     UINT8               Type,\r
+  IN OUT EFI_HII_UPDATE_DATA *Data\r
+  )\r
+;\r
+\r
+/**\r
+  Create EFI_IFR_ACTION_OP opcode.\r
+\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
+\r
+  @param  QuestionId             Question ID\r
+  @param  Prompt                 String ID for Prompt\r
+  @param  Help                   String ID for Help\r
+  @param  QuestionFlags          Flags in Question Header\r
+  @param  QuestionConfig         String ID for configuration\r
+  @param  Data                   Destination for the created opcode binary\r
+\r
+  @retval EFI_SUCCESS            Opcode is created successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.\r
+  @retval EFI_INVALID_PARAMETER If QuestionFlags is not valid.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CreateActionOpCode (\r
+  IN     EFI_QUESTION_ID      QuestionId,\r
+  IN     EFI_STRING_ID        Prompt,\r
+  IN     EFI_STRING_ID        Help,\r
+  IN     UINT8                QuestionFlags,\r
+  IN     EFI_STRING_ID        QuestionConfig,\r
+  IN OUT EFI_HII_UPDATE_DATA  *Data\r
+  )\r
+;\r
+\r
+/**\r
+  Create EFI_IFR_SUBTITLE_OP opcode.\r
+\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
+\r
+  @param  Prompt                 String ID for Prompt\r
+  @param  Help                   String ID for Help\r
+  @param  Flags                  Subtitle opcode flags\r
+  @param  Scope                  Subtitle Scope bit\r
+  @param  Data                   Destination for the created opcode binary\r
+\r
+  @retval EFI_SUCCESS            Opcode is created successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.\r
+  \r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CreateSubTitleOpCode (\r
+  IN      EFI_STRING_ID       Prompt,\r
+  IN      EFI_STRING_ID       Help,\r
+  IN      UINT8               Flags,\r
+  IN      UINT8               Scope,\r
+  IN OUT EFI_HII_UPDATE_DATA  *Data\r
+  )\r
+;\r
+\r
+/**\r
+  Create EFI_IFR_TEXT_OP opcode.\r
+\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
+\r
+  @param  Prompt                 String ID for Prompt\r
+  @param  Help                   String ID for Help\r
+  @param  TextTwo                String ID for text two\r
+  @param  Data                   Destination for the created opcode binary\r
+\r
+  @retval EFI_SUCCESS            Opcode is created successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CreateTextOpCode (\r
+  IN      EFI_STRING_ID       Prompt,\r
+  IN      EFI_STRING_ID       Help,\r
+  IN      EFI_STRING_ID       TextTwo,\r
+  IN OUT  EFI_HII_UPDATE_DATA *Data\r
+  )\r
+;\r
+\r
+/**\r
+  Create EFI_IFR_REF_OP opcode.\r
+\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
+\r
+  @param  FormId                 Destination Form ID\r
+  @param  Prompt                 String ID for Prompt\r
+  @param  Help                   String ID for Help\r
+  @param  QuestionFlags          Flags in Question Header\r
+  @param  QuestionId             Question ID\r
+  @param  Data                   Destination for the created opcode binary\r
+\r
+  @retval EFI_SUCCESS            Opcode is created successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.\r
+  @retval EFI_INVALID_PARAMETER If QuestionFlags is not valid.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CreateGotoOpCode (\r
+  IN      EFI_FORM_ID         FormId,\r
+  IN      EFI_STRING_ID       Prompt,\r
+  IN      EFI_STRING_ID       Help,\r
+  IN      UINT8               QuestionFlags,\r
+  IN      EFI_QUESTION_ID     QuestionId,\r
+  IN OUT  EFI_HII_UPDATE_DATA *Data\r
+  )\r
+;\r
+\r
+/**\r
+  Create EFI_IFR_ONE_OF_OPTION_OP opcode.\r
+\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
+\r
+  @param  OptionCount            The number of options.\r
+  @param  OptionsList            The list of Options.\r
+  @param  Type                   The data type.\r
+  @param  Data                   Destination for the created opcode binary\r
+\r
+  @retval EFI_SUCCESS            Opcode is created successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.\r
+  @retval EFI_INVALID_PARAMETER If OptionCount is not zero but OptionsList is NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CreateOneOfOptionOpCode (\r
+  IN     UINTN                OptionCount,\r
+  IN     IFR_OPTION           *OptionsList,\r
+  IN     UINT8                Type,\r
+  IN OUT EFI_HII_UPDATE_DATA  *Data\r
+  )\r
+;\r
+\r
+/**\r
+  Create EFI_IFR_ONE_OF_OP opcode.\r
+\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
+\r
+  @param  QuestionId             Question ID\r
+  @param  VarStoreId             Storage ID\r
+  @param  VarOffset              Offset in Storage\r
+  @param  Prompt                 String ID for Prompt\r
+  @param  Help                   String ID for Help\r
+  @param  QuestionFlags          Flags in Question Header\r
+  @param  OneOfFlags             Flags for oneof opcode\r
+  @param  OptionsList            List of options\r
+  @param  OptionCount            Number of options in option list\r
+  @param  Data                   Destination for the created opcode binary\r
+\r
+  @retval EFI_SUCCESS            Opcode is created successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.\r
+  @retval EFI_INVALID_PARAMETER If QuestionFlags is not valid.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CreateOneOfOpCode (\r
+  IN     EFI_QUESTION_ID      QuestionId,\r
+  IN     EFI_VARSTORE_ID      VarStoreId,\r
+  IN     UINT16               VarOffset,\r
+  IN     EFI_STRING_ID        Prompt,\r
+  IN     EFI_STRING_ID        Help,\r
+  IN     UINT8                QuestionFlags,\r
+  IN     UINT8                OneOfFlags,\r
+  IN     IFR_OPTION           *OptionsList,\r
+  IN     UINTN                OptionCount,\r
+  IN OUT EFI_HII_UPDATE_DATA  *Data\r
+  )\r
+;\r
+\r
+/**\r
+  Create EFI_IFR_ORDERED_LIST_OP opcode.\r
+\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
+\r
+  @param  QuestionId             Question ID\r
+  @param  VarStoreId             Storage ID\r
+  @param  VarOffset              Offset in Storage\r
+  @param  Prompt                 String ID for Prompt\r
+  @param  Help                   String ID for Help\r
+  @param  QuestionFlags          Flags in Question Header\r
+  @param  OrderedListFlags       Flags for ordered list opcode\r
+  @param  DataType               Type for option value\r
+  @param  MaxContainers          Maximum count for options in this ordered list\r
+  @param  OptionsList            List of options\r
+  @param  OptionCount            Number of options in option list\r
+  @param  Data                   Destination for the created opcode binary\r
+\r
+  @retval EFI_SUCCESS            Opcode is created successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.\r
+  @retval EFI_INVALID_PARAMETER If QuestionFlags is not valid.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CreateOrderedListOpCode (\r
+  IN      EFI_QUESTION_ID     QuestionId,\r
+  IN      EFI_VARSTORE_ID     VarStoreId,\r
+  IN      UINT16              VarOffset,\r
+  IN      EFI_STRING_ID       Prompt,\r
+  IN      EFI_STRING_ID       Help,\r
+  IN      UINT8               QuestionFlags,\r
+  IN      UINT8               OrderedListFlags,\r
+  IN      UINT8               DataType,\r
+  IN      UINT8               MaxContainers,\r
+  IN      IFR_OPTION          *OptionsList,\r
+  IN      UINTN               OptionCount,\r
+  IN OUT  EFI_HII_UPDATE_DATA *Data\r
+  )\r
+;\r
+\r
+/**\r
+  Create EFI_IFR_CHECKBOX_OP opcode.\r
+\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
+\r
+  @param  QuestionId             Question ID\r
+  @param  VarStoreId             Storage ID\r
+  @param  VarOffset              Offset in Storage\r
+  @param  Prompt                 String ID for Prompt\r
+  @param  Help                   String ID for Help\r
+  @param  QuestionFlags          Flags in Question Header\r
+  @param  CheckBoxFlags          Flags for checkbox opcode\r
+  @param  Data                   Destination for the created opcode binary\r
+\r
+  @retval EFI_SUCCESS            Opcode is created successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.\r
+  @retval EFI_INVALID_PARAMETER If QuestionFlags is not valid.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CreateCheckBoxOpCode (\r
+  IN      EFI_QUESTION_ID     QuestionId,\r
+  IN      EFI_VARSTORE_ID     VarStoreId,\r
+  IN      UINT16              VarOffset,\r
+  IN      EFI_STRING_ID       Prompt,\r
+  IN      EFI_STRING_ID       Help,\r
+  IN      UINT8               QuestionFlags,\r
+  IN      UINT8               CheckBoxFlags,\r
+  IN OUT EFI_HII_UPDATE_DATA  *Data\r
+  )\r
+;\r
+\r
+/**\r
+  Create EFI_IFR_NUMERIC_OP opcode.\r
+\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
+\r
+  @param  QuestionId             Question ID\r
+  @param  VarStoreId             Storage ID\r
+  @param  VarOffset              Offset in Storage\r
+  @param  Prompt                 String ID for Prompt\r
+  @param  Help                   String ID for Help\r
+  @param  QuestionFlags          Flags in Question Header\r
+  @param  NumericFlags           Flags for numeric opcode\r
+  @param  Minimum                Numeric minimum value\r
+  @param  Maximum                Numeric maximum value\r
+  @param  Step                   Numeric step for edit\r
+  @param  Default                Numeric default value\r
+  @param  Data                   Destination for the created opcode binary\r
+\r
+  @retval EFI_SUCCESS            Opcode is created successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.\r
+  @retval EFI_INVALID_PARAMETER If QuestionFlags is not valid.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CreateNumericOpCode (\r
+  IN     EFI_QUESTION_ID     QuestionId,\r
+  IN     EFI_VARSTORE_ID     VarStoreId,\r
+  IN     UINT16              VarOffset,\r
+  IN     EFI_STRING_ID       Prompt,\r
+  IN     EFI_STRING_ID       Help,\r
+  IN     UINT8               QuestionFlags,\r
+  IN     UINT8               NumericFlags,\r
+  IN     UINT64              Minimum,\r
+  IN     UINT64              Maximum,\r
+  IN     UINT64              Step,\r
+  IN     UINT64              Default,\r
+  IN OUT EFI_HII_UPDATE_DATA *Data\r
+  )\r
+;\r
+\r
+/**\r
+  Create EFI_IFR_STRING_OP opcode.\r
+\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
+\r
+  @param  QuestionId             Question ID\r
+  @param  VarStoreId             Storage ID\r
+  @param  VarOffset              Offset in Storage\r
+  @param  Prompt                 String ID for Prompt\r
+  @param  Help                   String ID for Help\r
+  @param  QuestionFlags          Flags in Question Header\r
+  @param  StringFlags            Flags for string opcode\r
+  @param  MinSize                String minimum length\r
+  @param  MaxSize                String maximum length\r
+  @param  Data                   Destination for the created opcode binary\r
+\r
+  @retval EFI_SUCCESS            Opcode is created successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL The space reserved in Data field is too small.\r
+  @retval EFI_INVALID_PARAMETER If QuestionFlags is not valid.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+CreateStringOpCode (\r
+  IN      EFI_QUESTION_ID     QuestionId,\r
+  IN      EFI_VARSTORE_ID     VarStoreId,\r
+  IN      UINT16              VarOffset,\r
+  IN      EFI_STRING_ID       Prompt,\r
+  IN      EFI_STRING_ID       Help,\r
+  IN      UINT8               QuestionFlags,\r
+  IN      UINT8               StringFlags,\r
+  IN      UINT8               MinSize,\r
+  IN      UINT8               MaxSize,\r
+  IN OUT EFI_HII_UPDATE_DATA  *Data\r
+  )\r
+;\r
+\r
+/**\r
+  Converts the unicode character of the string from uppercase to lowercase.\r
+\r
+  @param Str     String to be converted\r
+\r
\r
+**/\r
+VOID\r
+EFIAPI\r
+ToLower (\r
+  IN OUT CHAR16    *Str\r
+  )\r
+;\r
+\r
+/**\r
+  Converts binary buffer to a Unicode string. The byte buffer is in a reversed byte order \r
+  compared with the byte order defined in BufToHexString().\r
+\r
+  @param  Str                    String for output\r
+  @param  Buffer                 Binary buffer.\r
+  @param  BufferSize             Size of the buffer in bytes.\r
+\r
+  @retval EFI_SUCCESS            The function completed successfully.\r
+  @retval EFI_OUT_OF_RESOURCES   There is no enough available memory space.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+BufInReverseOrderToHexString (\r
+  IN OUT CHAR16    *Str,\r
+  IN UINT8         *Buffer,\r
+  IN UINTN         BufferSize\r
+  )\r
+;\r
+\r
+/**\r
+  Converts Hex String to binary buffer in reversed byte order to HexStringToBuf().\r
+\r
+  @param  Buffer                 Pointer to buffer that receives the data.\r
+  @param  BufferSize             Length in bytes of the buffer to hold converted\r
+                                 data. If routine return with EFI_SUCCESS,\r
+                                 containing length of converted data. If routine\r
+                                 return with EFI_BUFFER_TOO_SMALL, containg length\r
+                                 of buffer desired.\r
+  @param  Str                    String to be converted from.\r
+\r
+  @retval EFI_SUCCESS            The function completed successfully.\r
+  @retval RETURN_BUFFER_TOO_SMALL   The input BufferSize is too small to hold the output. BufferSize\r
+                                   will be updated to the size required for the converstion.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+HexStringToBufInReverseOrder (\r
+  IN OUT UINT8         *Buffer,\r
+  IN OUT UINTN         *BufferSize,\r
+  IN CHAR16            *Str\r
+  )\r
+;\r
+\r
+/**\r
+  Convert binary representation Config string (e.g. "0041004200430044") to the\r
+  original string (e.g. "ABCD"). Config string appears in <ConfigHdr> (i.e.\r
+  "&NAME=<string>"), or Name/Value pair in <ConfigBody> (i.e. "label=<string>").\r
+\r
+  @param UnicodeString  Original Unicode string.\r
+  @param StrBufferLen   On input: Length in bytes of buffer to hold the Unicode string.\r
+                                    Includes tailing '\0' character.\r
+                                    On output:\r
+                                      containing length of Unicode string buffer when returning EFI_SUCCESS;\r
+                                      containg length of string buffer desired when returning EFI_BUFFER_TOO_SMALL.\r
+  @param ConfigString   Binary representation of Unicode String, <string> := (<HexCh>4)+\r
+\r
+  @retval EFI_SUCCESS          Operation completes successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL The string buffer is too small.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ConfigStringToUnicode (\r
+  IN OUT CHAR16                *UnicodeString,\r
+  IN OUT UINTN                 *StrBufferLen,\r
+  IN CHAR16                    *ConfigString\r
+  )\r
+;\r
+\r
+/**\r
+  Convert Unicode string to binary representation Config string, e.g.\r
+  "ABCD" => "0041004200430044". Config string appears in <ConfigHdr> (i.e.\r
+  "&NAME=<string>"), or Name/Value pair in <ConfigBody> (i.e. "label=<string>").\r
+\r
+  @param ConfigString   Binary representation of Unicode String, <string> := (<HexCh>4)+\r
+  @param  StrBufferLen  On input: Length in bytes of buffer to hold the Unicode string.\r
+                                    Includes tailing '\0' character.\r
+                                    On output:\r
+                                      If return EFI_SUCCESS, containing length of Unicode string buffer.\r
+                                      If return EFI_BUFFER_TOO_SMALL, containg length of string buffer desired.\r
+  @param  UnicodeString  Original Unicode string.\r
+\r
+  @retval EFI_SUCCESS           Operation completes successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL  The string buffer is too small.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+UnicodeToConfigString (\r
+  IN OUT CHAR16                *ConfigString,\r
+  IN OUT UINTN                 *StrBufferLen,\r
+  IN CHAR16                    *UnicodeString\r
+  )\r
+;\r
+\r
+/**\r
+  Construct <ConfigHdr> using routing information GUID/NAME/PATH.\r
+\r
+  @param  ConfigHdr              Pointer to the ConfigHdr string.\r
+  @param  StrBufferLen           On input: Length in bytes of buffer to hold the\r
+                                 ConfigHdr string. Includes tailing '\0' character.\r
+                                 On output: If return EFI_SUCCESS, containing\r
+                                 length of ConfigHdr string buffer. If return\r
+                                 EFI_BUFFER_TOO_SMALL, containg length of string\r
+                                 buffer desired.\r
+  @param  Guid                   Routing information: GUID.\r
+  @param  Name                   Routing information: NAME.\r
+  @param  DriverHandle           Driver handle which contains the routing\r
+                                 information: PATH.\r
+\r
+  @retval EFI_SUCCESS            Operation completes successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL   The ConfigHdr string buffer is too small.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ConstructConfigHdr (\r
+  IN OUT CHAR16                *ConfigHdr,\r
+  IN OUT UINTN                 *StrBufferLen,\r
+  IN CONST EFI_GUID            *Guid,\r
+  IN CHAR16                    *Name, OPTIONAL\r
+  IN EFI_HANDLE                *DriverHandle\r
+  )\r
+\r
+;\r
+\r
+/**\r
+  Search BlockName "&OFFSET=Offset&WIDTH=Width" in a string.\r
+\r
+  @param  String                 The string to be searched in.\r
+  @param  Offset                 Offset in BlockName.\r
+  @param  Width                  Width in BlockName.\r
+\r
+  @retval TRUE                   Block name found.\r
+  @retval FALSE                  Block name not found.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+FindBlockName (\r
+  IN OUT CHAR16                *String,\r
+  IN UINTN                     Offset,\r
+  IN UINTN                     Width\r
+  )\r
+;\r
+\r
+/**\r
+  This routine is invoked by ConfigAccess.Callback() to retrived uncommitted data from Form Browser.\r
+\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
+  @param  BufferSize             On input: Length in bytes of buffer to hold\r
+                                 retrived data. On output: If return\r
+                                 EFI_BUFFER_TOO_SMALL, containg length of buffer\r
+                                 desired.\r
+  @param  Buffer                 Buffer to hold retrived data.\r
+\r
+  @retval EFI_SUCCESS            Operation completes successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL   The intput buffer is too small.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+GetBrowserData (\r
+  IN CONST EFI_GUID          *VariableGuid, OPTIONAL\r
+  IN CONST CHAR16            *VariableName, OPTIONAL\r
+  IN OUT UINTN               *BufferSize,\r
+  IN OUT UINT8               *Buffer\r
+  )\r
+;\r
+\r
+/**\r
+  This routine is invoked by ConfigAccess.Callback() to update uncommitted data of Form Browser.\r
+\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
+  @param  BufferSize             Length in bytes of buffer to hold retrived data.\r
+  @param  Buffer                 Buffer to hold retrived data.\r
+  @param  RequestElement         An optional field to specify which part of the\r
+                                 buffer data will be send back to Browser. If NULL,\r
+                                 the whole buffer of data will be committed to\r
+                                 Browser. <RequestElement> ::=\r
+                                 &OFFSET=<Number>&WIDTH=<Number>*\r
+\r
+  @retval EFI_SUCCESS            Operation completes successfully.\r
+  @retval Other                  Updating Browser uncommitted data failed.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+SetBrowserData (\r
+  IN CONST EFI_GUID          *VariableGuid, OPTIONAL\r
+  IN CONST CHAR16            *VariableName, OPTIONAL\r
+  IN UINTN                   BufferSize,\r
+  IN CONST UINT8             *Buffer,\r
+  IN CONST CHAR16            *RequestElement  OPTIONAL\r
+  )\r
+;\r
+\r
+/**\r
+  Draw a dialog and return the selected key.\r
+\r
+  @param  NumberOfLines          The number of lines for the dialog box\r
+  @param  KeyValue               The EFI_KEY value returned if HotKey is TRUE..\r
+  @param  String                 Pointer to the first string in the list\r
+  @param  ...                    A series of (quantity == NumberOfLines - 1) 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.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+IfrLibCreatePopUp (\r
+  IN  UINTN                       NumberOfLines,\r
+  OUT EFI_INPUT_KEY               *KeyValue,\r
+  IN  CHAR16                      *String,\r
+  ...\r
+  )\r
+;\r
+\r
+/**\r
+  Draw a dialog and return the selected key using Variable Argument List.\r
+\r
+  @param  NumberOfLines          The number of lines for the dialog box\r
+  @param  KeyValue               The EFI_KEY value returned if HotKey is TRUE..\r
+  @param  Args                   VA_LIST marker for the variable argument list.\r
+                                 A series of (quantity == NumberOfLines - 1) 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.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+IfrLibCreatePopUp2 (\r
+  IN  UINTN                       NumberOfLines,\r
+  OUT EFI_INPUT_KEY               *KeyValue,\r
+  IN  VA_LIST                     Args\r
+  )\r
+;\r
+\r
+#endif\r