#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
\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
} 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
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
// 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
...\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