]> git.proxmox.com Git - mirror_edk2.git/blobdiff - EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/HiiDatabase.h
Bug fixes for FrameworkHiiToUefiHiiThunk;
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / FrameworkHiiToUefiHiiThunk / HiiDatabase.h
index 85822ab17afda7f49d1ae334e6f479f2819afa69..3a0f09f0c81528cc04a567f15cce3263aa86c0f4 100644 (file)
@@ -43,7 +43,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/UefiBootServicesTableLib.h>\r
 #include <Library/UefiRuntimeServicesTableLib.h>\r
-//#include <Library/FrameworkIfrSupportLib.h>\r
 #include <Library/HiiLib.h>\r
 #include <Library/ExtendedHiiLib.h>\r
 \r
@@ -52,15 +51,6 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 \r
 #include <MdeModuleHii.h>\r
 \r
-//\r
-// Macros\r
-//\r
-\r
-\r
-//\r
-// Typedef\r
-//\r
-\r
 #pragma pack (push, 1)\r
 typedef struct {\r
   UINT32                  BinaryLength;\r
@@ -68,8 +58,8 @@ typedef struct {
 } TIANO_AUTOGEN_PACKAGES_HEADER;\r
 #pragma pack (pop)\r
 \r
-#define EFI_HII_THUNK_PRIVATE_DATA_FROM_THIS(Record)   CR(Record, EFI_HII_THUNK_PRIVATE_DATA, Hii, EFI_HII_THUNK_DRIVER_DATA_SIGNATURE)\r
-#define EFI_HII_THUNK_DRIVER_DATA_SIGNATURE            EFI_SIGNATURE_32 ('H', 'i', 'I', 'T')\r
+#define HII_THUNK_PRIVATE_DATA_FROM_THIS(Record)  CR(Record, HII_THUNK_PRIVATE_DATA, Hii, HII_THUNK_PRIVATE_DATA_SIGNATURE)\r
+#define HII_THUNK_PRIVATE_DATA_SIGNATURE            EFI_SIGNATURE_32 ('H', 'i', 'I', 'T')\r
 typedef struct {\r
   UINTN                    Signature;\r
   EFI_HANDLE               Handle;\r
@@ -78,75 +68,139 @@ typedef struct {
   FRAMEWORK_EFI_HII_HANDLE StaticPureUefiHiiHandle;\r
 \r
   //\r
-  // This LIST_ENTRY is the list head which has HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY type \r
-  // as list entry.\r
+  // The head of link list for all HII_THUNK_CONTEXT.\r
   //\r
-  LIST_ENTRY               HiiThunkHandleMappingDBListHead;\r
+  LIST_ENTRY               ThunkContextListHead;\r
 \r
-  EFI_HANDLE               NewPackNotifyHandle;\r
   EFI_HANDLE               RemovePackNotifyHandle;\r
   EFI_HANDLE               AddPackNotifyHandle;\r
-} EFI_HII_THUNK_PRIVATE_DATA;\r
+} HII_THUNK_PRIVATE_DATA;\r
+\r
 \r
 \r
-#define HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY_FROM_LISTENTRY(Record) CR(Record, HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY, List, HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY_SIGNATURE)\r
-#define HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY_SIGNATURE            EFI_SIGNATURE_32 ('H', 'T', 'H', 'M')\r
+#define ONE_OF_OPTION_MAP_ENTRY_FROM_LINK(Record) CR(Record, ONE_OF_OPTION_MAP_ENTRY, Link, ONE_OF_OPTION_MAP_ENTRY_SIGNATURE)\r
+#define ONE_OF_OPTION_MAP_ENTRY_SIGNATURE            EFI_SIGNATURE_32 ('O', 'O', 'M', 'E')\r
 typedef struct {\r
-  LIST_ENTRY                List;\r
+  UINT32          Signature;\r
+  LIST_ENTRY      Link;\r
+\r
+  UINT16             FwKey;\r
+  EFI_IFR_TYPE_VALUE Value;\r
+  \r
+} ONE_OF_OPTION_MAP_ENTRY;\r
+\r
+\r
+\r
+#define ONE_OF_OPTION_MAP_FROM_LINK(Record) CR(Record, ONE_OF_OPTION_MAP, Link, ONE_OF_OPTION_MAP_SIGNATURE)\r
+#define ONE_OF_OPTION_MAP_SIGNATURE            EFI_SIGNATURE_32 ('O', 'O', 'O', 'M')\r
+typedef struct {\r
+  UINT32          Signature;\r
+  LIST_ENTRY      Link;       \r
+\r
+  UINT8           ValueType; //EFI_IFR_TYPE_NUM_* \r
+\r
+  EFI_QUESTION_ID     QuestionId;\r
+\r
+  LIST_ENTRY      OneOfOptionMapEntryListHead; //ONE_OF_OPTION_MAP_ENTRY\r
+} ONE_OF_OPTION_MAP;\r
+\r
+\r
+\r
+#define QUESTION_ID_MAP_ENTRY_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP_ENTRY, Link, QUESTION_ID_MAP_ENTRY_SIGNATURE)\r
+#define QUESTION_ID_MAP_ENTRY_SIGNATURE            EFI_SIGNATURE_32 ('Q', 'I', 'M', 'E')\r
+typedef struct {\r
+  UINT32            Signature;\r
+  LIST_ENTRY        Link;\r
+  UINT16            FwQId;\r
+  EFI_QUESTION_ID   UefiQid;\r
+} QUESTION_ID_MAP_ENTRY;\r
+\r
+\r
+\r
+#define QUESTION_ID_MAP_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP, Link, QUESTION_ID_MAP_SIGNATURE)\r
+#define QUESTION_ID_MAP_SIGNATURE            EFI_SIGNATURE_32 ('Q', 'I', 'M', 'P')\r
+typedef struct {\r
+  UINT32            Signature;\r
+  LIST_ENTRY        Link;\r
+  UINT16            VarStoreId;\r
+  UINTN             VarSize;\r
+  LIST_ENTRY        MapEntryListHead;\r
+} QUESTION_ID_MAP;\r
+\r
+\r
+\r
+#define HII_THUNK_CONTEXT_FROM_LINK(Record) CR(Record, HII_THUNK_CONTEXT, Link, HII_THUNK_CONTEXT_SIGNATURE)\r
+#define HII_THUNK_CONTEXT_SIGNATURE            EFI_SIGNATURE_32 ('H', 'T', 'H', 'M')\r
+typedef struct {\r
+  LIST_ENTRY                Link;\r
   UINT32                    Signature;\r
-  FRAMEWORK_EFI_HII_HANDLE  FrameworkHiiHandle;\r
+  FRAMEWORK_EFI_HII_HANDLE  FwHiiHandle;\r
   EFI_HII_HANDLE            UefiHiiHandle;\r
   EFI_HANDLE                UefiHiiDriverHandle;\r
 \r
-  BOOLEAN                   IsPackageListWithOnlyStringPackages;\r
+  UINTN                     IfrPackageCount;\r
+  UINTN                     StringPackageCount;\r
+\r
   //\r
   // The field below is only valid if IsPackageListWithOnlyStringPack is TRUE.\r
   // The HII 0.92 version of HII data implementation in EDK 1.03 and 1.04 make an the following assumption\r
   // in both HII Database implementation and all modules that registering packages:\r
-  // If a Package List has only IFR package and no String Package, the String Package containing the strings \r
-  // referenced by this IFR package is in another Package List\r
-  // registered with the HII database with the same EFI_HII_PACKAGES.GuidId.\r
-  //\r
-  //\r
-  // Only valid if IsPackageListWithSingleStringPack is TRUE.\r
-  // UEFI Package List Head Pointer, pointing to a allocated buffer containing the package\r
-  //\r
-  EFI_HII_PACKAGE_LIST_HEADER *UefiStringPackageListHeader; //Only valid if IsStringPack is TRUE.\r
-                                                            //This UEFI Package list only consists of a list of string packages.\r
-\r
+  // If a Package List has only IFR package and no String Package, the IFR package will reference \r
+  // String in another Package List registered with the HII database with the same EFI_HII_PACKAGES.GuidId.\r
+  // TagGuid is the used to record this GuidId.\r
   EFI_GUID                   TagGuid;\r
-  //\r
-  // TRUE if the package list identified by UefiHiiHandle imports String Packages from \r
-  // other package list with IsPackageListWithOnlyStringPackages is TRUE.\r
-  //\r
-  BOOLEAN                    DoesPackageListImportStringPackages;\r
+\r
+  LIST_ENTRY                 QuestionIdMapListHead; //QUESTION_ID_MAP\r
+\r
+  LIST_ENTRY                 OneOfOptionMapListHead; //ONE_OF_OPTION_MAP\r
+\r
+  UINT8                      *NvMapOverride;\r
+\r
+  UINT16                     FormSetClass;\r
+  UINT16                     FormSetSubClass;\r
+  STRING_REF                 FormSetTitle;\r
+  STRING_REF                 FormSetHelp;\r
   \r
-} HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY;\r
+} HII_THUNK_CONTEXT;\r
+\r
 \r
-#define HII_TRHUNK_BUFFER_STORAGE_KEY_SIGNATURE              EFI_SIGNATURE_32 ('H', 'T', 's', 'k')\r
-#define HII_TRHUNK_BUFFER_STORAGE_KEY_FROM_LIST_ENTRY(Record) CR(Record, HII_TRHUNK_BUFFER_STORAGE_KEY, List, HII_TRHUNK_BUFFER_STORAGE_KEY_SIGNATURE)\r
+\r
+#define BUFFER_STORAGE_ENTRY_SIGNATURE              EFI_SIGNATURE_32 ('H', 'T', 's', 'k')\r
+#define BUFFER_STORAGE_ENTRY_FROM_LINK(Record) CR(Record, BUFFER_STORAGE_ENTRY, Link, BUFFER_STORAGE_ENTRY_SIGNATURE)\r
 typedef struct {\r
-  LIST_ENTRY List;\r
+  LIST_ENTRY Link;\r
   UINT32     Signature;\r
   EFI_GUID   Guid;\r
   CHAR16     *Name;\r
   UINTN      Size;\r
   UINT16     VarStoreId;\r
-} HII_TRHUNK_BUFFER_STORAGE_KEY;\r
+} BUFFER_STORAGE_ENTRY;\r
+\r
 \r
-#define HII_TRHUNK_CONFIG_ACCESS_PROTOCOL_INSTANCE_SIGNATURE            EFI_SIGNATURE_32 ('H', 'T', 'c', 'a')\r
-#define HII_TRHUNK_CONFIG_ACCESS_PROTOCOL_INSTANCE_FROM_PROTOCOL(Record) CR(Record, HII_TRHUNK_CONFIG_ACCESS_PROTOCOL_INSTANCE, ConfigAccessProtocol, HII_TRHUNK_CONFIG_ACCESS_PROTOCOL_INSTANCE_SIGNATURE)\r
+\r
+#define CONFIG_ACCESS_PRIVATE_SIGNATURE            EFI_SIGNATURE_32 ('H', 'T', 'c', 'a')\r
+#define CONFIG_ACCESS_PRIVATE_FROM_PROTOCOL(Record) CR(Record, CONFIG_ACCESS_PRIVATE, ConfigAccessProtocol, CONFIG_ACCESS_PRIVATE_SIGNATURE)\r
 typedef struct {\r
   UINT32                         Signature;\r
   EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccessProtocol;\r
-  EFI_FORM_CALLBACK_PROTOCOL     *FrameworkFormCallbackProtocol;\r
-  LIST_ENTRY                     ConfigAccessBufferStorageListHead;\r
-} HII_TRHUNK_CONFIG_ACCESS_PROTOCOL_INSTANCE;\r
+  //\r
+  // Framework's callback\r
+  //\r
+  EFI_FORM_CALLBACK_PROTOCOL     *FormCallbackProtocol;\r
+\r
+  LIST_ENTRY                     BufferStorageListHead;\r
+\r
+  HII_THUNK_CONTEXT              *ThunkContext;\r
+} CONFIG_ACCESS_PRIVATE;\r
+\r
+\r
 \r
 #define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE            EFI_SIGNATURE_32 ('F', 'B', 'T', 'd')\r
+#define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_FROM_THIS(Record)   CR(Record, EFI_FORMBROWSER_THUNK_PRIVATE_DATA, FormBrowser, EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE)\r
 typedef struct {\r
   UINTN                     Signature;\r
   EFI_HANDLE                Handle;\r
+  HII_THUNK_PRIVATE_DATA    *ThunkPrivate;\r
   EFI_FORM_BROWSER_PROTOCOL FormBrowser;\r
 } EFI_FORMBROWSER_THUNK_PRIVATE_DATA;\r
 \r
@@ -155,13 +209,14 @@ typedef struct {
 // Extern Variables\r
 //\r
 extern CONST EFI_HII_DATABASE_PROTOCOL            *mHiiDatabase;\r
-extern CONST EFI_HII_FONT_PROTOCOL                *mHiiFontProtocol;\r
 extern CONST EFI_HII_IMAGE_PROTOCOL               *mHiiImageProtocol;\r
 extern CONST EFI_HII_STRING_PROTOCOL              *mHiiStringProtocol;\r
 extern CONST EFI_HII_CONFIG_ROUTING_PROTOCOL      *mHiiConfigRoutingProtocol;\r
+extern CONST EFI_FORM_BROWSER2_PROTOCOL           *mFormBrowser2Protocol;\r
 \r
-extern BOOLEAN                                    mInFrameworkHiiNewPack;\r
-extern BOOLEAN                                    mInFrameworkHiiRemovePack;\r
+extern HII_THUNK_PRIVATE_DATA                     *mHiiThunkPrivateData;\r
+\r
+extern BOOLEAN                                    mInFrameworkUpdatePakcage;\r
 \r
 \r
 //\r
@@ -392,6 +447,28 @@ ThunkCreatePopUp (
   ...\r
   );\r
 \r
+EFI_STATUS\r
+EFIAPI\r
+RemovePackNotify (\r
+  IN UINT8                              PackageType,\r
+  IN CONST EFI_GUID                     *PackageGuid,\r
+  IN CONST EFI_HII_PACKAGE_HEADER       *Package,\r
+  IN EFI_HII_HANDLE                     Handle,\r
+  IN EFI_HII_DATABASE_NOTIFY_TYPE       NotifyType\r
+  )\r
+;\r
+\r
+EFI_STATUS\r
+EFIAPI\r
+NewOrAddPackNotify (\r
+  IN UINT8                              PackageType,\r
+  IN CONST EFI_GUID                     *PackageGuid,\r
+  IN CONST EFI_HII_PACKAGE_HEADER       *Package,\r
+  IN EFI_HII_HANDLE                     Handle,\r
+  IN EFI_HII_DATABASE_NOTIFY_TYPE       NotifyType\r
+  )\r
+;\r
+\r
 #include "Utility.h"\r
 #include "ConfigAccess.h"\r
 \r