]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/SetupBrowserDxe/Setup.h
Update the copyright notice format
[mirror_edk2.git] / MdeModulePkg / Universal / SetupBrowserDxe / Setup.h
index b3912b7862440b5755f9da90d83d0f47c3dc06b7..51d6b882b75902aef89837243e7758bda8396735 100644 (file)
@@ -1,8 +1,8 @@
 /** @file\r
-Private MACRO, structure and function definitions for Setup Browser module. \r
+Private MACRO, structure and function definitions for Setup Browser module.\r
 \r
-Copyright (c) 2007, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
+Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>\r
+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
@@ -28,9 +28,11 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Protocol/HiiConfigRouting.h>\r
 #include <Protocol/HiiDatabase.h>\r
 #include <Protocol/HiiString.h>\r
-#include <Protocol/ConsoleControl.h>\r
+#include <Protocol/UserManager.h>\r
 \r
-#include <MdeModuleHii.h>\r
+#include <Guid/MdeModuleHii.h>\r
+#include <Guid/HiiPlatformSetupFormset.h>\r
+#include <Guid/HiiFormMapMethodGuid.h>\r
 \r
 #include <Library/PrintLib.h>\r
 #include <Library/DebugLib.h>\r
@@ -40,11 +42,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Library/UefiBootServicesTableLib.h>\r
 #include <Library/BaseLib.h>\r
 #include <Library/MemoryAllocationLib.h>\r
-#include <Library/IfrSupportLib.h>\r
-#include <Library/ExtendedIfrSupportLib.h>\r
 #include <Library/HiiLib.h>\r
-#include <Library/ExtendedHiiLib.h>\r
 #include <Library/PcdLib.h>\r
+#include <Library/DevicePathLib.h>\r
 \r
 #include "Colors.h"\r
 \r
@@ -73,10 +73,8 @@ extern UINT8  SetupBrowserStrings[];
 // Definition for function key setting\r
 //\r
 #define NONE_FUNCTION_KEY_SETTING     0\r
-#define DEFAULT_FUNCTION_KEY_SETTING  (FUNCTION_ONE | FUNCTION_TWO | FUNCTION_NINE | FUNCTION_TEN)\r
+#define DEFAULT_FUNCTION_KEY_SETTING  (FUNCTION_NINE | FUNCTION_TEN)\r
 \r
-#define FUNCTION_ONE                  (1 << 0)\r
-#define FUNCTION_TWO                  (1 << 1)\r
 #define FUNCTION_NINE                 (1 << 2)\r
 #define FUNCTION_TEN                  (1 << 3)\r
 \r
@@ -153,13 +151,11 @@ typedef struct {
 //\r
 #define EXPRESSION_STACK_SIZE_INCREMENT    0x100\r
 \r
+#define EFI_SPECIFICATION_MAJOR_VERSION    0x2\r
+#define EFI_SPECIFICATION_MINOR_VERSION    0x1\r
+#define EFI_SPECIFICATION_ERRATA_VERSION   0x0\r
+#define EFI_IFR_SPECIFICATION_VERSION  (UINT16)((EFI_SPECIFICATION_MAJOR_VERSION << 8) | (EFI_SPECIFICATION_MINOR_VERSION << 4) | EFI_SPECIFICATION_ERRATA_VERSION)\r
 \r
-#define EFI_SPECIFICATION_ERRATA_VERSION   0\r
-\r
-#define EFI_IFR_SPECIFICATION_VERSION  \\r
-        ((((EFI_SPECIFICATION_VERSION) >> 8) & 0xff00) | \\r
-         (((EFI_SPECIFICATION_VERSION) & 0xf) << 4) | \\r
-         ((EFI_SPECIFICATION_ERRATA_VERSION) & 0xf))\r
 \r
 #define SETUP_DRIVER_SIGNATURE SIGNATURE_32 ('F', 'B', 'D', 'V')\r
 typedef struct {\r
@@ -188,6 +184,8 @@ typedef struct {
 #define EFI_HII_EXPRESSION_DISABLE_IF        4\r
 #define EFI_HII_EXPRESSION_VALUE             5\r
 #define EFI_HII_EXPRESSION_RULE              6\r
+#define EFI_HII_EXPRESSION_READ              7\r
+#define EFI_HII_EXPRESSION_WRITE             8\r
 \r
 #define EFI_HII_VARSTORE_BUFFER              0\r
 #define EFI_HII_VARSTORE_NAME_VALUE          1\r
@@ -196,6 +194,9 @@ typedef struct {
 #define FORM_INCONSISTENT_VALIDATION         0\r
 #define FORM_NO_SUBMIT_VALIDATION            1\r
 \r
+#define FORMSET_CLASS_PLATFORM_SETUP         0x0001\r
+#define FORMSET_CLASS_FRONT_PAGE             0x0002\r
+\r
 typedef struct {\r
   UINT8               Type;\r
   EFI_IFR_TYPE_VALUE  Value;\r
@@ -241,6 +242,11 @@ typedef struct {
 \r
 #define FORMSET_STORAGE_FROM_LINK(a)  CR (a, FORMSET_STORAGE, Link, FORMSET_STORAGE_SIGNATURE)\r
 \r
+typedef union {\r
+  EFI_STRING_ID         VarName;\r
+  UINT16                VarOffset;\r
+} VAR_STORE_INFO;\r
+\r
 #define EXPRESSION_OPCODE_SIGNATURE  SIGNATURE_32 ('E', 'X', 'O', 'P')\r
 \r
 typedef struct {\r
@@ -255,14 +261,21 @@ typedef struct {
 \r
   EFI_HII_VALUE     Value;       // For EFI_IFR_EQ_ID_VAL, EFI_IFR_UINT64, EFI_IFR_UINT32, EFI_IFR_UINT16, EFI_IFR_UINT8, EFI_IFR_STRING_REF1\r
 \r
-  EFI_QUESTION_ID   QuestionId;  // For EFI_IFR_EQ_ID_ID, EFI_IFR_EQ_ID_LIST, EFI_IFR_QUESTION_REF1\r
+  EFI_QUESTION_ID   QuestionId;  // For EFI_IFR_EQ_ID_ID, EFI_IFR_EQ_ID_VAL_LIST, EFI_IFR_QUESTION_REF1\r
   EFI_QUESTION_ID   QuestionId2;\r
 \r
-  UINT16            ListLength;  // For EFI_IFR_EQ_ID_LIST\r
+  UINT16            ListLength;  // For EFI_IFR_EQ_ID_VAL_LIST\r
   UINT16            *ValueList;\r
 \r
   EFI_STRING_ID     DevicePath;  // For EFI_IFR_QUESTION_REF3_2, EFI_IFR_QUESTION_REF3_3\r
   EFI_GUID          Guid;\r
+\r
+  FORMSET_STORAGE   *VarStorage; // For EFI_IFR_SET, EFI_IFR_GET\r
+  VAR_STORE_INFO    VarStoreInfo;// For EFI_IFR_SET, EFI_IFR_GET\r
+  UINT8             ValueType;   // For EFI_IFR_SET, EFI_IFR_GET\r
+  UINT8             ValueWidth;  // For EFI_IFR_SET, EFI_IFR_GET\r
+  CHAR16            *ValueName;  // For EFI_IFR_SET, EFI_IFR_GET\r
+  LIST_ENTRY        MapExpressionList;   // nested expressions inside of Map opcode.\r
 } EXPRESSION_OPCODE;\r
 \r
 #define EXPRESSION_OPCODE_FROM_LINK(a)  CR (a, EXPRESSION_OPCODE, Link, EXPRESSION_OPCODE_SIGNATURE)\r
@@ -316,6 +329,7 @@ typedef struct {
 #define QUESTION_OPTION_FROM_LINK(a)  CR (a, QUESTION_OPTION, Link, QUESTION_OPTION_SIGNATURE)\r
 \r
 #define FORM_BROWSER_STATEMENT_SIGNATURE  SIGNATURE_32 ('F', 'S', 'T', 'A')\r
+\r
 typedef struct {\r
   UINTN                 Signature;\r
   LIST_ENTRY            Link;\r
@@ -335,10 +349,7 @@ typedef struct {
   EFI_QUESTION_ID       QuestionId;       // The value of zero is reserved\r
   EFI_VARSTORE_ID       VarStoreId;       // A value of zero indicates no variable storage\r
   FORMSET_STORAGE       *Storage;\r
-  union {\r
-    EFI_STRING_ID       VarName;\r
-    UINT16              VarOffset;\r
-  }  VarStoreInfo;\r
+  VAR_STORE_INFO        VarStoreInfo;\r
   UINT16                StorageWidth;\r
   UINT8                 QuestionFlags;\r
   CHAR16                *VariableName;    // Name/Value or EFI Variable name\r
@@ -346,6 +357,7 @@ typedef struct {
 \r
   EFI_HII_VALUE         HiiValue;         // Edit copy for checkbox, numberic, oneof\r
   UINT8                 *BufferValue;     // Edit copy for string, password, orderedlist\r
+  UINT8                 ValueType;        // Data type for orderedlist value array\r
 \r
   //\r
   // OpCode specific members\r
@@ -382,24 +394,30 @@ typedef struct {
   LIST_ENTRY            NoSubmitListHead;    // nested nosubmit expression list (FORM_EXPRESSION)\r
   FORM_EXPRESSION       *GrayOutExpression;  // nesting inside of GrayOutIf\r
   FORM_EXPRESSION       *SuppressExpression; // nesting inside of SuppressIf\r
+  FORM_EXPRESSION       *DisableExpression;  // nesting inside of DisableIf\r
 \r
+  FORM_EXPRESSION       *ReadExpression;     // nested EFI_IFR_READ, provide this question value by read expression.\r
+  FORM_EXPRESSION       *WriteExpression;    // nested EFI_IFR_WRITE, evaluate write expression after this question value is set.\r
 } FORM_BROWSER_STATEMENT;\r
 \r
 #define FORM_BROWSER_STATEMENT_FROM_LINK(a)  CR (a, FORM_BROWSER_STATEMENT, Link, FORM_BROWSER_STATEMENT_SIGNATURE)\r
 \r
 #define FORM_BROWSER_FORM_SIGNATURE  SIGNATURE_32 ('F', 'F', 'R', 'M')\r
+#define STANDARD_MAP_FORM_TYPE 0x01\r
 \r
 typedef struct {\r
   UINTN             Signature;\r
   LIST_ENTRY        Link;\r
 \r
-  UINT16            FormId;\r
-  EFI_STRING_ID     FormTitle;\r
+  UINT16            FormId;               // FormId of normal form or formmap form.\r
+  EFI_STRING_ID     FormTitle;            // FormTile of normal form, or FormMapMethod title of formmap form.\r
+  UINT16            FormType;             // Specific form type for the different form.\r
 \r
   EFI_IMAGE_ID      ImageId;\r
 \r
   LIST_ENTRY        ExpressionListHead;   // List of Expressions (FORM_EXPRESSION)\r
   LIST_ENTRY        StatementListHead;    // List of Statements and Questions (FORM_BROWSER_STATEMENT)\r
+  FORM_EXPRESSION   *SuppressExpression;  // nesting inside of SuppressIf\r
 } FORM_BROWSER_FORM;\r
 \r
 #define FORM_BROWSER_FORM_FROM_LINK(a)  CR (a, FORM_BROWSER_FORM, Link, FORM_BROWSER_FORM_SIGNATURE)\r
@@ -428,8 +446,10 @@ typedef struct {
   EFI_GUID                        Guid;\r
   EFI_STRING_ID                   FormSetTitle;\r
   EFI_STRING_ID                   Help;\r
-  UINT16                          Class;\r
-  UINT16                          SubClass;\r
+  UINT8                           NumberOfClassGuid;\r
+  EFI_GUID                        ClassGuid[3];         // Up to three ClassGuid\r
+  UINT16                          Class;                // Tiano extended Class code\r
+  UINT16                          SubClass;             // Tiano extended Subclass code\r
   EFI_IMAGE_ID                    ImageId;\r
 \r
   FORM_BROWSER_STATEMENT          *StatementBuffer;     // Buffer for all Statements and Questions\r
@@ -438,15 +458,75 @@ typedef struct {
   LIST_ENTRY                      StorageListHead;      // Storage list (FORMSET_STORAGE)\r
   LIST_ENTRY                      DefaultStoreListHead; // DefaultStore list (FORMSET_DEFAULTSTORE)\r
   LIST_ENTRY                      FormListHead;         // Form list (FORM_BROWSER_FORM)\r
+  LIST_ENTRY                      ExpressionListHead;   // List of Expressions (FORM_EXPRESSION)\r
 } FORM_BROWSER_FORMSET;\r
 \r
+#define BROWSER_CONTEXT_SIGNATURE  SIGNATURE_32 ('B', 'C', 'T', 'X')\r
+\r
+typedef struct {\r
+  UINTN                 Signature;\r
+  LIST_ENTRY            Link;\r
+\r
+  //\r
+  // Globals defined in Setup.c\r
+  //\r
+  BANNER_DATA           *BannerData;\r
+  UINTN                 ClassOfVfr;\r
+  UINTN                 FunctionKeySetting;\r
+  BOOLEAN               ResetRequired;\r
+  BOOLEAN               NvUpdateRequired;\r
+  UINT16                Direction;\r
+  EFI_SCREEN_DESCRIPTOR ScreenDimensions;\r
+  CHAR16                *FunctionNineString;\r
+  CHAR16                *FunctionTenString;\r
+  CHAR16                *EnterString;\r
+  CHAR16                *EnterCommitString;\r
+  CHAR16                *EnterEscapeString;\r
+  CHAR16                *EscapeString;\r
+  CHAR16                *SaveFailed;\r
+  CHAR16                *MoveHighlight;\r
+  CHAR16                *MakeSelection;\r
+  CHAR16                *DecNumericInput;\r
+  CHAR16                *HexNumericInput;\r
+  CHAR16                *ToggleCheckBox;\r
+  CHAR16                *PromptForData;\r
+  CHAR16                *PromptForPassword;\r
+  CHAR16                *PromptForNewPassword;\r
+  CHAR16                *ConfirmPassword;\r
+  CHAR16                *ConfirmError;\r
+  CHAR16                *PassowordInvalid;\r
+  CHAR16                *PressEnter;\r
+  CHAR16                *EmptyString;\r
+  CHAR16                *AreYouSure;\r
+  CHAR16                *YesResponse;\r
+  CHAR16                *NoResponse;\r
+  CHAR16                *MiniString;\r
+  CHAR16                *PlusString;\r
+  CHAR16                *MinusString;\r
+  CHAR16                *AdjustNumber;\r
+  CHAR16                *SaveChanges;\r
+  CHAR16                *OptionMismatch;\r
+  CHAR16                *FormSuppress;\r
+  CHAR16                PromptBlockWidth;\r
+  CHAR16                OptionBlockWidth;\r
+  CHAR16                HelpBlockWidth;\r
+  FORM_BROWSER_FORMSET  *OldFormSet;\r
+\r
+  //\r
+  // Globals defined in Ui.c\r
+  //\r
+  LIST_ENTRY           MenuOption;\r
+  VOID                 *MenuRefreshHead;\r
+} BROWSER_CONTEXT;\r
+\r
+#define BROWSER_CONTEXT_FROM_LINK(a)  CR (a, BROWSER_CONTEXT, Link, BROWSER_CONTEXT_SIGNATURE)\r
 \r
 extern EFI_HII_DATABASE_PROTOCOL         *mHiiDatabase;\r
 extern EFI_HII_STRING_PROTOCOL           *mHiiString;\r
 extern EFI_HII_CONFIG_ROUTING_PROTOCOL   *mHiiConfigRouting;\r
 \r
-extern BANNER_DATA           *BannerData;\r
-extern EFI_HII_HANDLE        FrontPageHandle;\r
+extern BANNER_DATA           *gBannerData;\r
+extern EFI_HII_HANDLE        gFrontPageHandle;\r
 extern UINTN                 gClassOfVfr;\r
 extern UINTN                 gFunctionKeySetting;\r
 extern BOOLEAN               gResetRequired;\r
@@ -454,14 +534,12 @@ extern BOOLEAN               gNvUpdateRequired;
 extern EFI_HII_HANDLE        gHiiHandle;\r
 extern UINT16                gDirection;\r
 extern EFI_SCREEN_DESCRIPTOR gScreenDimensions;\r
-extern BOOLEAN               gUpArrow;\r
-extern BOOLEAN               gDownArrow;\r
+\r
+extern FORM_BROWSER_FORMSET  *gOldFormSet;\r
 \r
 //\r
 // Browser Global Strings\r
 //\r
-extern CHAR16            *gFunctionOneString;\r
-extern CHAR16            *gFunctionTwoString;\r
 extern CHAR16            *gFunctionNineString;\r
 extern CHAR16            *gFunctionTenString;\r
 extern CHAR16            *gEnterString;\r
@@ -491,6 +569,7 @@ extern CHAR16            *gMinusString;
 extern CHAR16            *gAdjustNumber;\r
 extern CHAR16            *gSaveChanges;\r
 extern CHAR16            *gOptionMismatch;\r
+extern CHAR16            *gFormSuppress;\r
 \r
 extern CHAR16            gPromptBlockWidth;\r
 extern CHAR16            gOptionBlockWidth;\r
@@ -499,6 +578,7 @@ extern CHAR16            gHelpBlockWidth;
 extern EFI_GUID          gZeroGuid;\r
 extern EFI_GUID          gTianoHiiIfrGuid;\r
 \r
+#include "Ui.h"\r
 //\r
 // Global Procedure Defines\r
 //\r
@@ -729,6 +809,42 @@ CreateDialog (
   ...\r
   );\r
 \r
+/**\r
+  Get Value for given Name from a NameValue Storage.\r
+\r
+  @param  Storage                The NameValue Storage.\r
+  @param  Name                   The Name.\r
+  @param  Value                  The retured Value.\r
+\r
+  @retval EFI_SUCCESS            Value found for given Name.\r
+  @retval EFI_NOT_FOUND          No such Name found in NameValue storage.\r
+\r
+**/\r
+EFI_STATUS\r
+GetValueByName (\r
+  IN FORMSET_STORAGE         *Storage,\r
+  IN CHAR16                  *Name,\r
+  IN OUT CHAR16              **Value\r
+  );\r
+\r
+/**\r
+  Set Value of given Name in a NameValue Storage.\r
+\r
+  @param  Storage                The NameValue Storage.\r
+  @param  Name                   The Name.\r
+  @param  Value                  The Value to set.\r
+\r
+  @retval EFI_SUCCESS            Value found for given Name.\r
+  @retval EFI_NOT_FOUND          No such Name found in NameValue storage.\r
+\r
+**/\r
+EFI_STATUS\r
+SetValueByName (\r
+  IN FORMSET_STORAGE         *Storage,\r
+  IN CHAR16                  *Name,\r
+  IN CHAR16                  *Value\r
+  );\r
+\r
 /**\r
   Get Question's current Value.\r
 \r
@@ -876,6 +992,9 @@ ExtractFormDefault (
 /**\r
   Initialize Question's Edit copy from Storage.\r
 \r
+  @param  Selection              Selection contains the information about \r
+                                 the Selection, form and formset to be displayed.\r
+                                 Selection action may be updated in retrieve callback.\r
   @param  FormSet                FormSet data structure.\r
   @param  Form                   Form data structure.\r
 \r
@@ -884,8 +1003,26 @@ ExtractFormDefault (
 **/\r
 EFI_STATUS\r
 LoadFormConfig (\r
-  IN FORM_BROWSER_FORMSET             *FormSet,\r
-  IN FORM_BROWSER_FORM                *Form\r
+  IN OUT UI_MENU_SELECTION    *Selection,\r
+  IN FORM_BROWSER_FORMSET     *FormSet,\r
+  IN FORM_BROWSER_FORM        *Form\r
+  );\r
+\r
+/**\r
+  Initialize Question's Edit copy from Storage for the whole Formset.\r
+\r
+  @param  Selection              Selection contains the information about \r
+                                 the Selection, form and formset to be displayed.\r
+                                 Selection action may be updated in retrieve callback.\r
+  @param  FormSet                FormSet data structure.\r
+\r
+  @retval EFI_SUCCESS            The function completed successfully.\r
+\r
+**/\r
+EFI_STATUS\r
+LoadFormSetConfig (\r
+  IN OUT UI_MENU_SELECTION    *Selection,\r
+  IN     FORM_BROWSER_FORMSET *FormSet\r
   );\r
 \r
 /**\r
@@ -960,6 +1097,26 @@ GetIfrBinaryData (
   OUT UINT8            **BinaryData\r
   );\r
 \r
+/**\r
+  Save globals used by previous call to SendForm(). SendForm() may be called from \r
+  HiiConfigAccess.Callback(), this will cause SendForm() be reentried.\r
+  So, save globals of previous call to SendForm() and restore them upon exit.\r
+\r
+**/\r
+VOID\r
+SaveBrowserContext (\r
+  VOID\r
+  );\r
+\r
+/**\r
+  Restore globals used by previous call to SendForm().\r
+\r
+**/\r
+VOID\r
+RestoreBrowserContext (\r
+  VOID\r
+  );\r
+\r
 /**\r
   This is the routine which an external caller uses to direct the browser\r
   where to obtain it's information.\r
@@ -979,7 +1136,7 @@ GetIfrBinaryData (
                          ScreenDimenions - This allows the browser to be called so that it occupies a\r
                          portion of the physical screen instead of dynamically determining the screen dimensions.\r
                          ActionRequest   - Points to the action recommended by the form.\r
-  @param ScreenDimensions Points to recommended form dimensions, including any non-content area, in \r
+  @param ScreenDimensions Points to recommended form dimensions, including any non-content area, in\r
                           characters.\r
   @param ActionRequest       Points to the action recommended by the form.\r
 \r