]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Include/Library/IfrSupportLib.h
Add FvbServiceLib, HiiLib & IfrSupportLib.h
[mirror_edk2.git] / MdePkg / Include / Library / IfrSupportLib.h
index 0fe1d06f62c7c8b884bdd615a7686fbedc85a0d4..3f686bd49c297169dd5ee2eec4f0c9d6e2d68d63 100644 (file)
 /** @file\r
-  The file contain all library function for Ifr Operations.\r
-  \r
-  Copyright (c) 2006 - 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
-#ifndef __IFRSUPPORTLIBRARY_H__\r
-#define __IFRSUPPORTLIBRARY_H__\r
-\r
-#define DEFAULT_FORM_BUFFER_SIZE    0xFFFF\r
-#define DEFAULT_STRING_BUFFER_SIZE  0xFFFF\r
-\r
-#pragma pack(1)\r
-typedef struct {\r
-  CHAR16      *OptionString;  // Passed in string to generate a token for in a truly dynamic form creation\r
-  STRING_REF  StringToken;    // This is used when creating a single op-code without generating a StringToken (have one already)\r
-  UINT16      Value;\r
-  UINT8       Flags;\r
-  UINT16      Key;\r
-} IFR_OPTION;\r
-#pragma pack()\r
-\r
-EFI_STATUS\r
-GetCurrentLanguage (\r
-  OUT     CHAR16              *Lang\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Determine what is the current language setting\r
-  \r
-Arguments:\r
-\r
-  Lang      - Pointer of system language\r
-  \r
-Returns: \r
-  \r
-  Status code\r
-\r
---*/\r
-;\r
-\r
-EFI_STATUS\r
-AddString (\r
-  IN      VOID                *StringBuffer,\r
-  IN      CHAR16              *Language,\r
-  IN      CHAR16              *String,\r
-  IN OUT  STRING_REF          *StringToken\r
-  )\r
-/*++\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
-Routine Description:\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
-  Add a string to the incoming buffer and return the token and offset data\r
-  \r
-Arguments:\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
-  StringBuffer      - The incoming buffer\r
-  \r
-  Language          - Currrent language\r
-  \r
-  String            - The string to be added\r
-  \r
-  StringToken       - The index where the string placed\r
-  \r
-Returns: \r
+**/\r
 \r
-  EFI_OUT_OF_RESOURCES    - No enough buffer to allocate\r
-  \r
-  EFI_SUCCESS             - String successfully added to the incoming buffer\r
+#ifndef _IFR_SUPPORT_LIBRARY_H_\r
+#define _IFR_SUPPORT_LIBRARY_H_\r
 \r
---*/\r
-;\r
 \r
-EFI_STATUS\r
-AddOpCode (\r
-  IN      VOID                *FormBuffer,\r
-  IN OUT  VOID                *OpCodeData\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
-Routine Description:\r
+#include <Guid/GlobalVariable.h>\r
 \r
-  Add op-code data to the FormBuffer\r
-  \r
-Arguments:\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
-  FormBuffer      - Form buffer to be inserted to\r
-  \r
-  OpCodeData      - Op-code data to be inserted\r
-  \r
-Returns: \r
+#define EFI_LANGUAGE_VARIABLE           L"Lang"\r
+#define EFI_LANGUAGE_CODES_VARIABLE     L"LangCodes"\r
 \r
-  EFI_OUT_OF_RESOURCES    - No enough buffer to allocate\r
-  \r
-  EFI_SUCCESS             - Op-code data successfully inserted\r
-\r
---*/\r
-;\r
-\r
-EFI_STATUS\r
-CreateFormSet (\r
-  IN      CHAR16              *FormSetTitle,\r
-  IN      EFI_GUID            *Guid,\r
-  IN      UINT8               Class,\r
-  IN      UINT8               SubClass,\r
-  IN OUT  VOID                **FormBuffer,\r
-  IN OUT  VOID                **StringBuffer\r
-  )\r
-/*++\r
+#define UEFI_LANGUAGE_VARIABLE          L"PlatformLang"\r
+#define UEFI_LANGUAGE_CODES_VARIABLE    L"PlatformLangCodes"\r
 \r
-Routine Description:\r
+#define INVALID_VARSTORE_ID             0\r
 \r
-  Create a formset\r
-  \r
-Arguments:\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
-  FormSetTitle        - Title of formset\r
-  \r
-  Guid                - Guid of formset\r
-  \r
-  Class               - Class of formset\r
-  \r
-  SubClass            - Sub class of formset\r
-  \r
-  FormBuffer          - Pointer of the formset created\r
-  \r
-  StringBuffer        - Pointer of FormSetTitile string created\r
-  \r
-Returns: \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
-  EFI_OUT_OF_RESOURCES    - No enough buffer to allocate\r
-  \r
-  EFI_SUCCESS             - Formset successfully created\r
+typedef struct {\r
+  ///\r
+  /// Buffer size allocated for Data.\r
+  ///\r
+  UINT32                BufferSize;\r
 \r
---*/\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
-EFI_STATUS\r
-CreateForm (\r
-  IN      CHAR16              *FormTitle,\r
-  IN      UINT16              FormId,\r
-  IN OUT  VOID                *FormBuffer,\r
-  IN OUT  VOID                *StringBuffer\r
-  )\r
-/*++\r
+  ///\r
+  /// The destination buffer for created op-codes\r
+  ///\r
+  UINT8                 *Data;\r
+} EFI_HII_UPDATE_DATA;\r
 \r
-Routine Description:\r
 \r
-  Create a form\r
-  \r
-Arguments:\r
+/**\r
+  Create EFI_IFR_END_OP opcode.\r
 \r
-  FormTitle       - Title of the form\r
-  \r
-  FormId          - Id of the form\r
-  \r
-  FormBuffer          - Pointer of the form created\r
-  \r
-  StringBuffer        - Pointer of FormTitil string created\r
-  \r
-Returns: \r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
 \r
-  EFI_SUCCESS     - Form successfully created\r
+  @param  Data                   Destination for the created opcode binary\r
 \r
---*/\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
-CreateSubTitle (\r
-  IN      CHAR16              *SubTitle,\r
-  IN OUT  VOID                *FormBuffer,\r
-  IN OUT  VOID                *StringBuffer\r
+EFIAPI\r
+CreateEndOpCode (\r
+  IN OUT EFI_HII_UPDATE_DATA *Data\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Create a SubTitle\r
-  \r
-Arguments:\r
-\r
-  SubTitle        - Sub title to be created\r
-  \r
-  FormBuffer      - Where this subtitle to add to\r
-  \r
-  StringBuffer    - String buffer created for subtitle\r
-  \r
-Returns: \r
-\r
-  EFI_SUCCESS     - Subtitle successfully created\r
-\r
---*/\r
 ;\r
 \r
-EFI_STATUS\r
-CreateText (\r
-  IN      CHAR16              *String,\r
-  IN      CHAR16              *String2,\r
-  IN      CHAR16              *String3,\r
-  IN      UINT8               Flags,\r
-  IN      UINT16              Key,\r
-  IN OUT  VOID                *FormBuffer,\r
-  IN OUT  VOID                *StringBuffer\r
-  )\r
-/*++\r
+/**\r
+  Create EFI_IFR_DEFAULT_OP opcode.\r
 \r
-Routine Description:\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
 \r
-  Create a line of text\r
-  \r
-Arguments:\r
-\r
-  String          - First string of the text\r
-  \r
-  String2         - Second string of the text\r
-  \r
-  String3         - Help string of the text\r
-  \r
-  Flags           - Flag of the text\r
-  \r
-  Key             - Key of the text\r
-  \r
-  FormBuffer      - The form where this text adds to\r
-  \r
-  StringBuffer    - String buffer created for String, String2 and String3\r
-  \r
-Returns: \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
-  EFI_SUCCESS     - Text successfully created\r
-\r
---*/\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
-CreateGoto (\r
-  IN      UINT16              FormId,\r
-  IN      CHAR16              *Prompt,\r
-  IN OUT  VOID                *FormBuffer,\r
-  IN OUT  VOID                *StringBuffer\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
-Routine Description:\r
-\r
-  Create a hyperlink\r
-  \r
-Arguments:\r
-\r
-  FormId        - Form ID of the hyperlink\r
-  \r
-  Prompt        - Prompt of the hyperlink\r
-  \r
-  FormBuffer    - The form where this hyperlink adds to\r
-  \r
-  StringBuffer  - String buffer created for Prompt\r
-  \r
-Returns: \r
-\r
-  EFI_SUCCESS     - Hyperlink successfully created\r
-\r
---*/\r
 ;\r
 \r
-EFI_STATUS\r
-CreateOneOf (\r
-  IN      UINT16              QuestionId,\r
-  IN      UINT8               DataWidth,\r
-  IN      CHAR16              *Prompt,\r
-  IN      CHAR16              *Help,\r
-  IN      IFR_OPTION          *OptionsList,\r
-  IN      UINTN               OptionCount,\r
-  IN OUT  VOID                *FormBuffer,\r
-  IN OUT  VOID                *StringBuffer\r
-  )\r
-/*++\r
+/**\r
+  Create EFI_IFR_ACTION_OP opcode.\r
 \r
-Routine Description:\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
 \r
-  Create a one-of question with a set of options to choose from.  The\r
-  OptionsList is a pointer to a null-terminated list of option descriptions.\r
-  \r
-Arguments:\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
-  QuestionId      - Question ID of the one-of box\r
-  \r
-  DataWidth       - DataWidth of the one-of box\r
-  \r
-  Prompt          - Prompt of the one-of box\r
-  \r
-  Help            - Help of the one-of box\r
-  \r
-  OptionsList     - Each string in it is an option of the one-of box\r
-  \r
-  OptionCount     - Option string count\r
-  \r
-  FormBuffer      - The form where this one-of box adds to\r
-  \r
-  StringBuffer    - String buffer created for Prompt, Help and Option strings\r
-  \r
-Returns: \r
-\r
-  EFI_DEVICE_ERROR    - DataWidth > 2\r
-\r
-  EFI_SUCCESS         - One-Of box successfully created.\r
-\r
---*/\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
-CreateOrderedList (\r
-  IN      UINT16              QuestionId,\r
-  IN      UINT8               MaxEntries,\r
-  IN      CHAR16              *Prompt,\r
-  IN      CHAR16              *Help,\r
-  IN      IFR_OPTION          *OptionsList,\r
-  IN      UINTN               OptionCount,\r
-  IN OUT  VOID                *FormBuffer,\r
-  IN OUT  VOID                *StringBuffer\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
-Routine Description:\r
-\r
-  Create a one-of question with a set of options to choose from.  The\r
-  OptionsList is a pointer to a null-terminated list of option descriptions.\r
-  \r
-Arguments:\r
-\r
-  QuestionId      - Question ID of the ordered list\r
-  \r
-  MaxEntries      - MaxEntries of the ordered list\r
-  \r
-  Prompt          - Prompt of the ordered list\r
-  \r
-  Help            - Help of the ordered list\r
-  \r
-  OptionsList     - Each string in it is an option of the ordered list\r
-  \r
-  OptionCount     - Option string count\r
-  \r
-  FormBuffer      - The form where this ordered list adds to\r
-  \r
-  StringBuffer    - String buffer created for Prompt, Help and Option strings\r
-  \r
-Returns: \r
-\r
-  EFI_SUCCESS     - Ordered list successfully created.\r
-\r
---*/\r
 ;\r
 \r
-EFI_STATUS\r
-CreateCheckBox (\r
-  IN      UINT16              QuestionId,\r
-  IN      UINT8               DataWidth,\r
-  IN      CHAR16              *Prompt,\r
-  IN      CHAR16              *Help,\r
-  IN      UINT8               Flags,\r
-  IN OUT  VOID                *FormBuffer,\r
-  IN OUT  VOID                *StringBuffer\r
-  )\r
-/*++\r
+/**\r
+  Create EFI_IFR_SUBTITLE_OP opcode.\r
 \r
-Routine Description:\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
 \r
-  Create a checkbox\r
-  \r
-Arguments:\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
-  QuestionId      - Question ID of the check box\r
-  \r
-  DataWidth       - DataWidth of the check box\r
-  \r
-  Prompt          - Prompt of the check box\r
-  \r
-  Help            - Help of the check box\r
-  \r
-  Flags           - Flags of the check box\r
-  \r
-  FormBuffer      - The form where this check box adds to\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
-  StringBuffer    - String buffer created for Prompt and Help.\r
-  \r
-Returns: \r
-\r
-  EFI_DEVICE_ERROR    - DataWidth > 1\r
-\r
-  EFI_SUCCESS         - Check box successfully created\r
-\r
---*/\r
-;\r
-\r
+**/\r
 EFI_STATUS\r
-CreateNumeric (\r
-  IN      UINT16              QuestionId,\r
-  IN      UINT8               DataWidth,\r
-  IN      CHAR16              *Prompt,\r
-  IN      CHAR16              *Help,\r
-  IN      UINT16              Minimum,\r
-  IN      UINT16              Maximum,\r
-  IN      UINT16              Step,\r
-  IN      UINT16              Default,\r
+EFIAPI\r
+CreateSubTitleOpCode (\r
+  IN      EFI_STRING_ID       Prompt,\r
+  IN      EFI_STRING_ID       Help,\r
   IN      UINT8               Flags,\r
-  IN      UINT16              Key,\r
-  IN OUT  VOID                *FormBuffer,\r
-  IN OUT  VOID                *StringBuffer\r
+  IN      UINT8               Scope,\r
+  IN OUT EFI_HII_UPDATE_DATA  *Data\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Create a numeric\r
-  \r
-Arguments:\r
-\r
-  QuestionId      - Question ID of the numeric\r
-  \r
-  DataWidth       - DataWidth of the numeric\r
-  \r
-  Prompt          - Prompt of the numeric\r
-  \r
-  Help            - Help of the numeric\r
-  \r
-  Minimum         - Minumun boundary of the numeric\r
-  \r
-  Maximum         - Maximum boundary of the numeric\r
-  \r
-  Step            - Step of the numeric\r
-   \r
-  Default         - Default value\r
-  \r
-  Flags           - Flags of the numeric\r
-  \r
-  Key             - Key of the numeric\r
-  \r
-  FormBuffer      - The form where this numeric adds to\r
-  \r
-  StringBuffer    - String buffer created for Prompt and Help.\r
-  \r
-Returns: \r
-\r
-  EFI_DEVICE_ERROR      - DataWidth > 2\r
-  \r
-  EFI_SUCCESS           - Numeric is successfully created\r
-\r
---*/\r
 ;\r
 \r
-EFI_STATUS\r
-CreateString (\r
-  IN      UINT16              QuestionId,\r
-  IN      UINT8               DataWidth,\r
-  IN      CHAR16              *Prompt,\r
-  IN      CHAR16              *Help,\r
-  IN      UINT8               MinSize,\r
-  IN      UINT8               MaxSize,\r
-  IN      UINT8               Flags,\r
-  IN      UINT16              Key,\r
-  IN OUT  VOID                *FormBuffer,\r
-  IN OUT  VOID                *StringBuffer\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
+/**\r
+  Create EFI_IFR_TEXT_OP opcode.\r
 \r
-  Create a string\r
-  \r
-Arguments:\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
 \r
-  QuestionId      - Question ID of the string\r
-  \r
-  DataWidth       - DataWidth of the string\r
-  \r
-  Prompt          - Prompt of the string\r
-  \r
-  Help            - Help of the string\r
-  \r
-  MinSize         - Min size boundary of the string\r
-  \r
-  MaxSize         - Max size boundary of the string\r
-    \r
-  Flags           - Flags of the string\r
-  \r
-  Key             - Key of the string\r
-  \r
-  FormBuffer      - The form where this string adds to\r
-  \r
-  StringBuffer    - String buffer created for Prompt and Help.\r
-  \r
-Returns: \r
-\r
-  EFI_SUCCESS     - String successfully created.\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
---*/\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
-ExtractDataFromHiiHandle (\r
-  IN      EFI_HII_HANDLE      HiiHandle,\r
-  IN OUT  UINT16              *ImageLength,\r
-  OUT     UINT8               *DefaultImage,\r
-  OUT     EFI_GUID            *Guid\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
-Routine Description:\r
-\r
-  Extract information pertaining to the HiiHandle\r
-  \r
-Arguments:\r
-\r
-  HiiHandle       - Hii handle\r
-  \r
-  ImageLength     - For input, length of DefaultImage;\r
-                    For output, length of actually required\r
-                    \r
-  DefaultImage    - Image buffer prepared by caller\r
-  \r
-  Guid            - Guid information about the form\r
-  \r
-Returns: \r
-\r
-  EFI_OUT_OF_RESOURCES    - No enough buffer to allocate\r
-  \r
-  EFI_BUFFER_TOO_SMALL    - DefualtImage has no enough ImageLength\r
-  \r
-  EFI_SUCCESS             - Successfully extract data from Hii database.\r
-  \r
-  \r
---*/\r
 ;\r
 \r
-EFI_HII_HANDLE\r
-FindHiiHandle (\r
-  IN OUT EFI_HII_PROTOCOL    **HiiProtocol, OPTIONAL\r
-  IN     EFI_GUID            *Guid\r
-  )\r
-/*++\r
+/**\r
+  Create EFI_IFR_REF_OP opcode.\r
 \r
-Routine Description:\r
-  Finds HII handle for given pack GUID previously registered with the HII.\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
 \r
-Arguments:\r
-  HiiProtocol - pointer to pointer to HII protocol interface. \r
-                If NULL, the interface will be found but not returned.\r
-                If it points to NULL, the interface will be found and \r
-                written back to the pointer that is pointed to.\r
-  Guid        - The GUID of the pack that registered with the HII.\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
-Returns:\r
-  Handle to the HII pack previously registered by the memory driver.\r
-\r
---*/\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
-CreateSubTitleOpCode (\r
-  IN      STRING_REF          StringToken,\r
-  IN OUT  VOID                *FormBuffer\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
-Routine Description:\r
-\r
-  Create a SubTitle opcode independent of string creation\r
-  This is used primarily by users who need to create just one particular valid op-code and the string\r
-  data will be assumed to exist in the HiiDatabase already.  (Useful when exporting op-codes at a label\r
-  location to pre-defined forms in HII)\r
-  \r
-Arguments:\r
-\r
-  StringToken     - StringToken of the subtitle\r
-  \r
-  FormBuffer      - Output of subtitle as a form\r
-  \r
-Returns: \r
-\r
-  EFI_SUCCESS     - Subtitle created to be a form\r
-\r
---*/\r
 ;\r
 \r
-EFI_STATUS\r
-CreateTextOpCode (\r
-  IN      STRING_REF          StringToken,\r
-  IN      STRING_REF          StringTokenTwo,\r
-  IN      STRING_REF          StringTokenThree,\r
-  IN      UINT8               Flags,\r
-  IN      UINT16              Key,\r
-  IN OUT  VOID                *FormBuffer\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Create a Text opcode independent of string creation\r
-  This is used primarily by users who need to create just one particular valid op-code and the string\r
-  data will be assumed to exist in the HiiDatabase already.  (Useful when exporting op-codes at a label\r
-  location to pre-defined forms in HII)\r
-  \r
-Arguments:\r
+/**\r
+  Create EFI_IFR_ONE_OF_OPTION_OP opcode.\r
 \r
-  StringToken               - First string token of the text\r
-  \r
-  StringTokenTwo            - Second string token of the text\r
-  \r
-  StringTokenThree          - Help string token of the text\r
-  \r
-  Flags                     - Flag of the text\r
-  \r
-  Key                       - Key of the text\r
-  \r
-  FormBuffer                - Output of text as a form\r
-  \r
-Returns: \r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
 \r
-  EFI_SUCCESS       - Text created to be a form\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
---*/\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
-CreateGotoOpCode (\r
-  IN      UINT16              FormId,\r
-  IN      STRING_REF          StringToken,\r
-  IN      STRING_REF          StringTokenTwo,\r
-  IN      UINT8               Flags,\r
-  IN      UINT16              Key,\r
-  IN OUT  VOID                *FormBuffer\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
-Routine Description:\r
+/**\r
+  Create EFI_IFR_ONE_OF_OP opcode.\r
 \r
-  Create a hyperlink opcode independent of string creation\r
-  This is used primarily by users who need to create just one particular valid op-code and the string\r
-  data will be assumed to exist in the HiiDatabase already.  (Useful when exporting op-codes at a label\r
-  location to pre-defined forms in HII)\r
-  \r
-Arguments:\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
 \r
-  FormId          - Form ID of the hyperlink\r
-  \r
-  StringToken     - Prompt string token of the hyperlink\r
-  \r
-  StringTokenTwo  - Help string token of the hyperlink\r
-  \r
-  Flags           - Flags of the hyperlink\r
-  \r
-  Key             - Key of the hyperlink\r
-  \r
-  FormBuffer      - Output of hyperlink as a form\r
-  \r
-Returns: \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
-  EFI_SUCCESS   - Hyperlink created to be a form\r
-\r
---*/\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      UINT16              QuestionId,\r
-  IN      UINT8               DataWidth,\r
-  IN      STRING_REF          PromptToken,\r
-  IN      STRING_REF          HelpToken,\r
-  IN      IFR_OPTION          *OptionsList,\r
-  IN      UINTN               OptionCount,\r
-  IN OUT  VOID                *FormBuffer\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
-Routine Description:\r
-\r
-  Create a one-of opcode with a set of option op-codes to choose from independent of string creation.\r
-  This is used primarily by users who need to create just one particular valid op-code and the string\r
-  data will be assumed to exist in the HiiDatabase already.  (Useful when exporting op-codes at a label\r
-  location to pre-defined forms in HII)\r
+;\r
 \r
-  OptionsList is a pointer to a null-terminated list of option descriptions.  Ensure that OptionsList[x].StringToken\r
-  has been filled in since this routine will not generate StringToken values.\r
-  \r
-Arguments:\r
+/**\r
+  Create EFI_IFR_ORDERED_LIST_OP opcode.\r
 \r
-  QuestionId      - Question ID of the one-of box\r
-  \r
-  DataWidth       - DataWidth of the one-of box\r
-  \r
-  PromptToken     - Prompt string token of the one-of box\r
-  \r
-  HelpToken       - Help string token of the one-of box\r
-  \r
-  OptionsList     - Each string in it is an option of the one-of box\r
-  \r
-  OptionCount     - Option string count\r
-  \r
-  FormBuffer      - Output of One-Of box as a form\r
-  \r
-Returns: \r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
 \r
-  EFI_SUCCESS         - One-Of box created to be a form\r
-  \r
-  EFI_DEVICE_ERROR    - DataWidth > 2\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
---*/\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      UINT16              QuestionId,\r
-  IN      UINT8               MaxEntries,\r
-  IN      STRING_REF          PromptToken,\r
-  IN      STRING_REF          HelpToken,\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  VOID                *FormBuffer\r
+  IN OUT  EFI_HII_UPDATE_DATA *Data\r
   )\r
-/*++\r
+;\r
 \r
-Routine Description:\r
+/**\r
+  Create EFI_IFR_CHECKBOX_OP opcode.\r
 \r
-  Create a ordered list opcode with a set of option op-codes to choose from independent of string creation.\r
-  This is used primarily by users who need to create just one particular valid op-code and the string\r
-  data will be assumed to exist in the HiiDatabase already.  (Useful when exporting op-codes at a label\r
-  location to pre-defined forms in HII)\r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
 \r
-  OptionsList is a pointer to a null-terminated list of option descriptions.  Ensure that OptionsList[x].StringToken\r
-  has been filled in since this routine will not generate StringToken values.\r
-  \r
-Arguments:\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
-  QuestionId      - Question ID of the ordered list\r
-  \r
-  MaxEntries      - MaxEntries of the ordered list\r
-  \r
-  PromptToken     - Prompt string token of the ordered list\r
-  \r
-  HelpToken       - Help string token of the ordered list\r
-  \r
-  OptionsList     - Each string in it is an option of the ordered list\r
-  \r
-  OptionCount     - Option string count\r
-  \r
-  FormBuffer      - Output of ordered list as a form\r
-  \r
-Returns: \r
-\r
-  EFI_SUCCESS     - Ordered list created to be a form\r
-\r
---*/\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      UINT16              QuestionId,\r
-  IN      UINT8               DataWidth,\r
-  IN      STRING_REF          PromptToken,\r
-  IN      STRING_REF          HelpToken,\r
-  IN      UINT8               Flags,\r
-  IN      UINT16              Key,\r
-  IN OUT  VOID                *FormBuffer\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
-Routine Description:\r
+;\r
 \r
-  Create a checkbox opcode independent of string creation\r
-  This is used primarily by users who need to create just one particular valid op-code and the string\r
-  data will be assumed to exist in the HiiDatabase already.  (Useful when exporting op-codes at a label\r
-  location to pre-defined forms in HII)\r
-  \r
-Arguments:\r
+/**\r
+  Create EFI_IFR_NUMERIC_OP opcode.\r
 \r
-  QuestionId      - Question ID of the check box\r
-  \r
-  DataWidth       - DataWidth of the check box\r
-  \r
-  PromptToken     - Prompt string token of the check box\r
-  \r
-  HelpToken       - Help string token of the check box\r
-  \r
-  Flags           - Flags of the check box\r
-  \r
-  Key             - Key of the check box\r
-  \r
-  FormBuffer      - Output of the check box as a form\r
-  \r
-Returns: \r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
 \r
-  EFI_SUCCESS       - Checkbox created to be a form\r
-  \r
-  EFI_DEVICE_ERROR  - DataWidth > 1\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
---*/\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      UINT16              QuestionId,\r
-  IN      UINT8               DataWidth,\r
-  IN      STRING_REF          PromptToken,\r
-  IN      STRING_REF          HelpToken,\r
-  IN      UINT16              Minimum,\r
-  IN      UINT16              Maximum,\r
-  IN      UINT16              Step,\r
-  IN      UINT16              Default,\r
-  IN      UINT8               Flags,\r
-  IN      UINT16              Key,\r
-  IN OUT  VOID                *FormBuffer\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
-Routine Description:\r
+;\r
 \r
-  Create a numeric opcode independent of string creation\r
-  This is used primarily by users who need to create just one particular valid op-code and the string\r
-  data will be assumed to exist in the HiiDatabase already.  (Useful when exporting op-codes at a label\r
-  location to pre-defined forms in HII)\r
-  \r
-Arguments:\r
+/**\r
+  Create EFI_IFR_STRING_OP opcode.\r
 \r
-  QuestionId      - Question ID of the numeric\r
-  \r
-  DataWidth       - DataWidth of the numeric\r
-  \r
-  PromptToken     - Prompt string token of the numeric\r
-  \r
-  HelpToken       - Help string token of the numeric\r
-  \r
-  Minimum         - Minumun boundary of the numeric\r
-  \r
-  Maximum         - Maximum boundary of the numeric\r
-  \r
-  Step            - Step of the numeric\r
-  \r
-  Default         - Default value of the numeric\r
-  \r
-  Flags           - Flags of the numeric\r
-  \r
-  Key             - Key of the numeric\r
-  \r
-  FormBuffer      - Output of the numeric as a form\r
-  \r
-Returns: \r
+  If Data is NULL or Data->Data is NULL, then ASSERT.\r
 \r
-  EFI_SUCCESS       - The numeric created to be a form.\r
-  \r
-  EFI_DEVICE_ERROR  - DataWidth > 2\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
---*/\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      UINT16              QuestionId,\r
-  IN      UINT8               DataWidth,\r
-  IN      STRING_REF          PromptToken,\r
-  IN      STRING_REF          HelpToken,\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      UINT8               Flags,\r
-  IN      UINT16              Key,\r
-  IN OUT  VOID                *FormBuffer\r
+  IN OUT EFI_HII_UPDATE_DATA  *Data\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Create a numeric opcode independent of string creation\r
-  This is used primarily by users who need to create just one particular valid op-code and the string\r
-  data will be assumed to exist in the HiiDatabase already.  (Useful when exporting op-codes at a label\r
-  location to pre-defined forms in HII)\r
-  \r
-Arguments:\r
-\r
-  QuestionId      - Question ID of the string\r
-  \r
-  DataWidth       - DataWidth of the string\r
-  \r
-  PromptToken     - Prompt token of the string\r
-  \r
-  HelpToken       - Help token of the string\r
-  \r
-  MinSize         - Min size boundary of the string\r
-  \r
-  MaxSize         - Max size boundary of the string\r
-    \r
-  Flags           - Flags of the string\r
-  \r
-  Key             - Key of the string\r
-  \r
-  FormBuffer      - Output of the string as a form\r
-  \r
-Returns: \r
-\r
-  EFI_SUCCESS       - String created to be a form.\r
-\r
---*/\r
 ;\r
+/**\r
+    Construct <ConfigAltResp> for a buffer storage.\r
+\r
+    @param ConfigRequest           The Config request string. If set to NULL, all the\r
+                                   configurable elements will be extracted from BlockNameArray.\r
+    @param ConfigAltResp           The returned <ConfigAltResp>.\r
+    @param Progress                On return, points to a character in the Request.\r
+    @param Guid                    GUID of the buffer storage.\r
+    @param Name                    Name of the buffer storage.\r
+    @param DriverHandle            The DriverHandle which is used to invoke HiiDatabase\r
+                                   protocol interface NewPackageList().\r
+    @param BufferStorage           Content of the buffer storage.\r
+    @param BufferStorageSize       Length in bytes of the buffer storage.\r
+    @param BlockNameArray          Array generated by VFR compiler.\r
+    @param NumberAltCfg            Number of Default value array generated by VFR compiler.\r
+                                   The sequential input parameters will be number of\r
+                                   AltCfgId and DefaultValueArray pairs. When set to 0,\r
+                                   there will be no <AltResp>.\r
+\r
+    retval EFI_OUT_OF_RESOURCES  Run out of memory resource.\r
+    retval EFI_INVALID_PARAMETER ConfigAltResp is NULL.\r
+    retval EFI_SUCCESS           Operation successful.\r
 \r
+**/\r
 EFI_STATUS\r
-ValidateDataFromHiiHandle (\r
-  IN      EFI_HII_HANDLE      HiiHandle,\r
-  OUT     BOOLEAN             *Results\r
+ConstructConfigAltResp (\r
+  IN  EFI_STRING                  ConfigRequest,  OPTIONAL\r
+  OUT EFI_STRING                  *Progress,\r
+  OUT EFI_STRING                  *ConfigAltResp,\r
+  IN  EFI_GUID                    *Guid,\r
+  IN  CHAR16                      *Name,\r
+  IN  EFI_HANDLE                  *DriverHandle,\r
+  IN  VOID                        *BufferStorage,\r
+  IN  UINTN                       BufferStorageSize,\r
+  IN  VOID                        *BlockNameArray, OPTIONAL\r
+  IN  UINTN                       NumberAltCfg,\r
+  ...\r
+//IN  UINT16                      AltCfgId,\r
+//IN  VOID                        *DefaultValueArray,\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Validate that the data associated with the HiiHandle in NVRAM is within\r
-  the reasonable parameters for that FormSet.  Values for strings and passwords\r
-  are not verified due to their not having the equivalent of valid range settings.\r
-  \r
-Arguments:\r
-\r
-  HiiHandle -   Handle of the HII database entry to query\r
-\r
-  Results -     If return Status is EFI_SUCCESS, Results provides valid data\r
-                TRUE  = NVRAM Data is within parameters\r
-                FALSE = NVRAM Data is NOT within parameters\r
-  \r
-Returns: \r
-\r
-  EFI_OUT_OF_RESOURCES      - No enough buffer to allocate\r
-  \r
-  EFI_SUCCESS               - Data successfully validated\r
---*/\r
 ;\r
 \r
-EFI_STATUS\r
-CreateBannerOpCode (\r
-  IN      UINT16              Title,\r
-  IN      UINT16              LineNumber,\r
-  IN      UINT8               Alignment,\r
-  IN OUT  VOID                *FormBuffer\r
-  )\r
-/*++\r
-\r
-Routine Description:\r
+/**\r
+  Converts the unicode character of the string from uppercase to lowercase.\r
 \r
-  Create a banner opcode.  This is primarily used by the FrontPage implementation from BDS.\r
-  \r
-Arguments:\r
-\r
-  Title       - Title of the banner\r
-  \r
-  LineNumber  - LineNumber of the banner\r
-  \r
-  Alignment   - Alignment of the banner\r
-  \r
-  FormBuffer  - Output of banner as a form\r
-  \r
-Returns: \r
-\r
-  EFI_SUCCESS     - Banner created to be a form.\r
-\r
---*/\r
-;\r
+  @param Str     String to be converted\r
 \r
\r
+**/\r
 VOID\r
-EfiLibHiiVariablePackGetMap (\r
-  IN    EFI_HII_VARIABLE_PACK        *Pack,  \r
-  OUT   CHAR16                       **Name,  OPTIONAL\r
-  OUT   EFI_GUID                     **Guid,  OPTIONAL\r
-  OUT   UINT16                       *Id,     OPTIONAL\r
-  OUT   VOID                         **Var,   OPTIONAL\r
-  OUT   UINTN                        *Size    OPTIONAL\r
-  ) \r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Extracts a variable form a Pack.\r
-\r
-Arguments:\r
-\r
-  Pack - List of variables\r
-  Name - Name of the variable/map\r
-  Guid - GUID of the variable/map\r
-  Var  - Pointer to the variable/map\r
-  Size - Size of the variable/map in bytes\r
-\r
-Returns: \r
-\r
-  VOID.\r
-\r
---*/\r
-;\r
-\r
-UINTN\r
-EfiLibHiiVariablePackListGetMapCnt (\r
-  IN    EFI_HII_VARIABLE_PACK_LIST   *List\r
+EFIAPI\r
+ToLower (\r
+  IN OUT CHAR16    *Str\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Finds a count of the variables/maps in the List.\r
-\r
-Arguments:\r
+;\r
 \r
-  List - List of variables\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
-Returns: \r
+  @param  Str                    String for output\r
+  @param  Buffer                 Binary buffer.\r
+  @param  BufferSize             Size of the buffer in bytes.\r
 \r
-  Number of Map in the variable pack list.\r
+  @retval EFI_SUCCESS            The function completed successfully.\r
+  @retval EFI_OUT_OF_RESOURCES   There is no enough available memory space.\r
 \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
-typedef VOID (EFI_LIB_HII_VARIABLE_PACK_LIST_CALLBACK) (\r
-  IN CHAR16                      *Name,\r
-  IN EFI_GUID                    *Guid,\r
-  IN UINT16                      Id,\r
-  IN VOID                        *Var,\r
-  IN UINTN                       Size\r
-  )  \r
-/*++\r
+/**\r
+  Converts Hex String to binary buffer in reversed byte order to HexStringToBuf().\r
 \r
-Routine Description:\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
-  type definition for the callback to be \r
-  used with EfiLibHiiVariablePackListForEachVar().\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
-Arguments:\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
-  Id   - Variable/Map ID\r
-  Name - Name of the variable/map\r
-  Guid - GUID of the variable/map\r
-  Var  - Pointer to the variable/map\r
-  Size - Size of the variable/map in bytes\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
-Returns: \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
-  VOID\r
+  @retval EFI_SUCCESS          Operation completes successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL The string buffer is too small.\r
 \r
---*/\r
-;\r
-\r
-VOID\r
-EfiLibHiiVariablePackListForEachVar (\r
-  IN    EFI_HII_VARIABLE_PACK_LIST               *List,\r
-  IN    EFI_LIB_HII_VARIABLE_PACK_LIST_CALLBACK  *Callback\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
-Routine Description:\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
-  Will iterate all variable/maps as appearing \r
-  in List and for each, it will call the Callback.\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
-Arguments:\r
+  @retval EFI_SUCCESS           Operation completes successfully.\r
+  @retval EFI_BUFFER_TOO_SMALL  The string buffer is too small.\r
 \r
-  List     - List of variables\r
-  Callback - Routine to be called for each iterated variable.\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
-Returns: \r
+/**\r
+  Construct <ConfigHdr> using routing information GUID/NAME/PATH.\r
 \r
-  VOID\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
---*/\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
-EfiLibHiiVariablePackListGetMapByIdx (\r
-  IN    UINTN                         Idx,  \r
-  IN    EFI_HII_VARIABLE_PACK_LIST    *List,  \r
-  OUT   CHAR16                        **Name,  OPTIONAL\r
-  OUT   EFI_GUID                      **Guid,  OPTIONAL\r
-  OUT   UINT16                        *Id,    OPTIONAL\r
-  OUT   VOID                          **Var,\r
-  OUT   UINTN                         *Size\r
-  ) \r
-/*++\r
-\r
-Routine Description:\r
-\r
-  Finds a variable form List given \r
-  the order number as appears in the List.\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
-Arguments:\r
+;\r
 \r
-  Idx  - The index of the variable/map to retrieve\r
-  List - List of variables\r
-  Name - Name of the variable/map\r
-  Guid - GUID of the variable/map\r
-  Var  - Pointer to the variable/map\r
-  Size - Size of the variable/map in bytes\r
+/**\r
+  Determines if the Routing data (Guid and Name) is correct in <ConfigHdr>.\r
 \r
-Returns:\r
+  @param ConfigString  Either <ConfigRequest> or <ConfigResp>.\r
+  @param StorageGuid   GUID of the storage.\r
+  @param StorageName   Name of the stoarge.\r
 \r
-  EFI_SUCCESS   - Variable is found, OUT parameters are valid\r
-  EFI_NOT_FOUND - Variable is not found, OUT parameters are not valid\r
+  @retval TRUE         Routing information is correct in ConfigString.\r
+  @retval FALSE        Routing information is incorrect in ConfigString.\r
 \r
---*/\r
+**/\r
+BOOLEAN\r
+IsConfigHdrMatch (\r
+  IN EFI_STRING                ConfigString,\r
+  IN EFI_GUID                  *StorageGuid, OPTIONAL\r
+  IN CHAR16                    *StorageName  OPTIONAL\r
+  )\r
 ;\r
 \r
-EFI_STATUS\r
-EfiLibHiiVariablePackListGetMapById (\r
-  IN    UINT16                        Id,  \r
-  IN    EFI_HII_VARIABLE_PACK_LIST    *List,\r
-  OUT   CHAR16                        **Name,  OPTIONAL\r
-  OUT   EFI_GUID                      **Guid,  OPTIONAL\r
-  OUT   VOID                          **Var,\r
-  OUT   UINTN                         *Size\r
-  ) \r
-/*++\r
-\r
-Routine Description:\r
+/**\r
+  Search BlockName "&OFFSET=Offset&WIDTH=Width" in a string.\r
 \r
-  Finds a variable form List given the \r
-  order number as appears in the List.\r
+  @param  String                 The string to be searched in.\r
+  @param  Offset                 Offset in BlockName.\r
+  @param  Width                  Width in BlockName.\r
 \r
-Arguments:\r
+  @retval TRUE                   Block name found.\r
+  @retval FALSE                  Block name not found.\r
 \r
-  Id   - The ID of the variable/map to retrieve\r
-  List - List of variables\r
-  Name - Name of the variable/map\r
-  Guid - GUID of the variable/map\r
-  Var  - Pointer to the variable/map\r
-  Size - Size of the variable/map in bytes\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+FindBlockName (\r
+  IN OUT CHAR16                *String,\r
+  IN UINTN                     Offset,\r
+  IN UINTN                     Width\r
+  )\r
+;\r
 \r
-Returns:\r
+/**\r
+  This routine is invoked by ConfigAccess.Callback() to retrived uncommitted data from Form Browser.\r
 \r
-  EFI_SUCCESS   - Variable is found, OUT parameters are valid\r
-  EFI_NOT_FOUND - Variable is not found, OUT parameters are not valid\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
---*/\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
-EfiLibHiiVariablePackListGetMap (\r
-  IN    EFI_HII_VARIABLE_PACK_LIST   *List,\r
-  IN    CHAR16                       *Name,\r
-  IN    EFI_GUID                     *Guid,\r
-  OUT   UINT16                       *Id,\r
-  OUT   VOID                         **Var, \r
-  OUT   UINTN                        *Size\r
-  ) \r
-/*++\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
-Routine Description:\r
+/**\r
+  This routine is invoked by ConfigAccess.Callback() to update uncommitted data of Form Browser.\r
 \r
-  Finds a variable form EFI_HII_VARIABLE_PACK_LIST given name and GUID.\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
-Arguments:\r
+  @retval EFI_SUCCESS            Operation completes successfully.\r
+  @retval Other                  Updating Browser uncommitted data failed.\r
 \r
-  List - List of variables\r
-  Name - Name of the variable/map to be found\r
-  Guid - GUID of the variable/map to be found\r
-  Var  - Pointer to the variable/map found\r
-  Size - Size of the variable/map in bytes found\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
-Returns:\r
+/**\r
+  Draw a dialog and return the selected key.\r
 \r
-  EFI_SUCCESS   - variable is found, OUT parameters are valid\r
-  EFI_NOT_FOUND - variable is not found, OUT parameters are not valid\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
---*/\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
-EfiLibHiiVariableRetrieveFromNv (\r
-  IN  CHAR16                     *Name,\r
-  IN  EFI_GUID                   *Guid,\r
-  IN  UINTN                      Size,\r
-  OUT VOID                       **Var\r
+EFIAPI\r
+IfrLibCreatePopUp (\r
+  IN  UINTN                       NumberOfLines,\r
+  OUT EFI_INPUT_KEY               *KeyValue,\r
+  IN  CHAR16                      *String,\r
+  ...\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-  Finds out if a variable of specific Name/Guid/Size exists in NV. \r
-  If it does, it will retrieve it into the Var. \r
-\r
-Arguments:\r
-  Name, Guid, Size - Parameters of the variable to retrieve. Must match exactly.\r
-  Var              - Variable will be retrieved into buffer pointed by this pointer.\r
-                     If pointing to NULL, the buffer will be allocated. Caller is responsible for releasing the buffer.\r
-Returns:\r
-  EFI_SUCCESS    - The variable of exact Name/Guid/Size parameters was retrieved and written to Var.\r
-  EFI_NOT_FOUND  - The variable of this Name/Guid was not found in the NV.\r
-  EFI_LOAD_ERROR - The variable in the NV was of different size, or NV API returned error.\r
-\r
---*/\r
 ;\r
 \r
-////\r
-//// Variable override support.\r
-////\r
+/**\r
+  Draw a dialog and return the selected key using Variable Argument List.\r
 \r
-EFI_STATUS\r
-EfiLibHiiVariableOverrideIfSuffix (\r
-  IN  CHAR16                 *Suffix,\r
-  IN  CHAR16                 *Name,\r
-  IN  EFI_GUID               *Guid,\r
-  IN  UINTN                   Size,\r
-  OUT VOID                   *Var\r
-  )  \r
-/*++\r
-\r
-Routine Description:\r
-  Overrrides the variable with NV data if found.\r
-  But it only does it if the Name ends with specified Suffix.\r
-  For example, if Suffix="MyOverride" and the Name="XyzSetupMyOverride",\r
-  the Suffix matches the end of Name, so the variable will be loaded from NV\r
-  provided the variable exists and the GUID and Size matches.\r
-\r
-Arguments:\r
-  Suffix           - Suffix the Name should end with.\r
-  Name, Guid, Size - Parameters of the variable to retrieve. Must match exactly.\r
-  Var              - Variable will be retrieved into this buffer.\r
-                     Caller is responsible for providing storage of exactly Size size in bytes.\r
-Returns:\r
-  EFI_SUCCESS           - The variable was overriden with NV variable of same Name/Guid/Size.\r
-  EFI_INVALID_PARAMETER - The name of the variable does not end with <Suffix>.\r
-  EFI_NOT_FOUND         - The variable of this Name/Guid was not found in the NV.\r
-  EFI_LOAD_ERROR        - The variable in the NV was of different size, or NV API returned error.\r
-\r
---*/\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
-EfiLibHiiVariableOverrideBySuffix (\r
-  IN  CHAR16                 *Suffix,\r
-  IN  CHAR16                 *Name,\r
-  IN  EFI_GUID               *Guid,\r
-  IN  UINTN                   Size,\r
-  OUT VOID                   *Var\r
-  ) \r
-/*++\r
-\r
-Routine Description:\r
-  Overrrides the variable with NV data if found.\r
-  But it only does it if the NV contains the same variable with Name is appended with Suffix.  \r
-  For example, if Suffix="MyOverride" and the Name="XyzSetup",\r
-  the Suffix will be appended to the end of Name, and the variable with Name="XyzSetupMyOverride"\r
-  will be loaded from NV provided the variable exists and the GUID and Size matches.\r
-\r
-Arguments:\r
-  Suffix           - Suffix the variable will be appended with.\r
-  Name, Guid, Size - Parameters of the variable to retrieve. Must match exactly.\r
-  Var              - Variable will be retrieved into this buffer.\r
-                     Caller is responsible for providing storage of exactly Size size in bytes.\r
-\r
-Returns:\r
-  EFI_SUCCESS    - The variable was overriden with NV variable of same Name/Guid/Size.\r
-  EFI_NOT_FOUND  - The variable of this Name/Guid was not found in the NV.\r
-  EFI_LOAD_ERROR - The variable in the NV was of different size, or NV API returned error.\r
-\r
---*/\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