git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2893 6f19259b...
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 29 Jun 2007 06:33:01 +0000 (06:33 +0000)
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 29 Jun 2007 06:33:01 +0000 (06:33 +0000)
IntelFrameworkPkg/Include/Library/FrameworkIfrSupportLib.h [new file with mode: 0644]

diff --git a/IntelFrameworkPkg/Include/Library/FrameworkIfrSupportLib.h b/IntelFrameworkPkg/Include/Library/FrameworkIfrSupportLib.h
new file mode 100644 (file)
index 0000000..d2a1ff5
--- /dev/null
@@ -0,0 +1,1270 @@
+/*++\r
+\r
+Copyright (c) 2006, 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
+Module Name:\r
+\r
+  IfrSupportLib.h\r
+\r
+Abstract:\r
+\r
+  The file contain all library function for Ifr Operations.\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
+\r
+Routine Description:\r
+\r
+  Add a string to the incoming buffer and return the token and offset data\r
+  \r
+Arguments:\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
+  EFI_OUT_OF_RESOURCES    - No enough buffer to allocate\r
+  \r
+  EFI_SUCCESS             - String successfully added to the incoming buffer\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+AddOpCode (\r
+  IN      VOID                *FormBuffer,\r
+  IN OUT  VOID                *OpCodeData\r
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Add op-code data to the FormBuffer\r
+  \r
+Arguments:\r
+\r
+  FormBuffer      - Form buffer to be inserted to\r
+  \r
+  OpCodeData      - Op-code data to be inserted\r
+  \r
+Returns: \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
+\r
+Routine Description:\r
+\r
+  Create a formset\r
+  \r
+Arguments:\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
+\r
+  EFI_OUT_OF_RESOURCES    - No enough buffer to allocate\r
+  \r
+  EFI_SUCCESS             - Formset successfully created\r
+\r
+--*/\r
+;\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
+Routine Description:\r
+\r
+  Create a form\r
+  \r
+Arguments:\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
+\r
+  EFI_SUCCESS     - Form successfully created\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+CreateSubTitle (\r
+  IN      CHAR16              *SubTitle,\r
+  IN OUT  VOID                *FormBuffer,\r
+  IN OUT  VOID                *StringBuffer\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
+Routine Description:\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
+\r
+  EFI_SUCCESS     - Text successfully created\r
+\r
+--*/\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
+  )\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
+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 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
+\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
+  )\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
+Routine Description:\r
+\r
+  Create a checkbox\r
+  \r
+Arguments:\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
+  \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
+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
+  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 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 a string\r
+  \r
+Arguments:\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
+\r
+--*/\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
+  )\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
+Routine Description:\r
+  Finds HII handle for given pack GUID previously registered with the HII.\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
+\r
+Returns:\r
+  Handle to the HII pack previously registered by the memory driver.\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+CreateSubTitleOpCode (\r
+  IN      STRING_REF          StringToken,\r
+  IN OUT  VOID                *FormBuffer\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
+  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
+\r
+  EFI_SUCCESS       - Text created to be a form\r
+\r
+--*/\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
+  )\r
+/*++\r
+\r
+Routine Description:\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
+\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
+\r
+  EFI_SUCCESS   - Hyperlink created to be a form\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\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
+  )\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
+  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
+  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
+\r
+  EFI_SUCCESS         - One-Of box created to be a form\r
+  \r
+  EFI_DEVICE_ERROR    - DataWidth > 2\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+CreateOrderedListOpCode (\r
+  IN      UINT16              QuestionId,\r
+  IN      UINT8               MaxEntries,\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
+  )\r
+/*++\r
+\r
+Routine Description:\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
+\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
+  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
+\r
+EFI_STATUS\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
+  )\r
+/*++\r
+\r
+Routine Description:\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
+  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
+\r
+  EFI_SUCCESS       - Checkbox created to be a form\r
+  \r
+  EFI_DEVICE_ERROR  - DataWidth > 1\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\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
+  )\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 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
+\r
+  EFI_SUCCESS       - The numeric created to be a form.\r
+  \r
+  EFI_DEVICE_ERROR  - DataWidth > 2\r
+\r
+--*/\r
+;\r
+\r
+EFI_STATUS\r
+CreateStringOpCode (\r
+  IN      UINT16              QuestionId,\r
+  IN      UINT8               DataWidth,\r
+  IN      STRING_REF          PromptToken,\r
+  IN      STRING_REF          HelpToken,\r
+  IN      UINT8               MinSize,\r
+  IN      UINT8               MaxSize,\r
+  IN      UINT8               Flags,\r
+  IN      UINT16              Key,\r
+  IN OUT  VOID                *FormBuffer\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
+EFI_STATUS\r
+ValidateDataFromHiiHandle (\r
+  IN      EFI_HII_HANDLE      HiiHandle,\r
+  OUT     BOOLEAN             *Results\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
+  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
+\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
+  )\r
+/*++\r
+\r
+Routine Description:\r
+\r
+  Finds a count of the variables/maps in the List.\r
+\r
+Arguments:\r
+\r
+  List - List of variables\r
+\r
+Returns: \r
+\r
+  Number of Map in the variable pack list.\r
+\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
+Routine Description:\r
+\r
+  type definition for the callback to be \r
+  used with EfiLibHiiVariablePackListForEachVar().\r
+\r
+Arguments:\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
+Returns: \r
+\r
+  VOID\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
+/*++\r
+\r
+Routine Description:\r
+\r
+  Will iterate all variable/maps as appearing \r
+  in List and for each, it will call the Callback.\r
+\r
+Arguments:\r
+\r
+  List     - List of variables\r
+  Callback - Routine to be called for each iterated variable.\r
+\r
+Returns: \r
+\r
+  VOID\r
+\r
+--*/\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
+\r
+Arguments:\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
+Returns:\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
+\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
+  Finds a variable form List given the \r
+  order number as appears in the List.\r
+\r
+Arguments:\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
+Returns:\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
+\r
+--*/\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
+\r
+Routine Description:\r
+\r
+  Finds a variable form EFI_HII_VARIABLE_PACK_LIST given name and GUID.\r
+\r
+Arguments:\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
+Returns:\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
+\r
+--*/\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
+  )\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
+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
+\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
+;\r
+\r
+#endif\r