\r
CONST EFI_HII_DATABASE_PROTOCOL *mHiiDatabaseProt;\r
CONST EFI_HII_STRING_PROTOCOL *mHiiStringProt;\r
+BOOLEAN mHiiProtocolsInitialized = FALSE;\r
+\r
\r
/**\r
- The constructor function of Hii Library.\r
- \r
- The constructor function caches the value of default HII protocol instances.\r
\r
- @param ImageHandle The firmware allocated handle for the EFI image.\r
- @param SystemTable A pointer to the EFI System Table.\r
- \r
- @retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.\r
+ This function locate Hii relative protocols for later usage.\r
+\r
+ @param VOID\r
+\r
+ @retval VOID\r
\r
**/\r
-EFI_STATUS\r
-EFIAPI\r
-UefiHiiLibConstructor (\r
- IN EFI_HANDLE ImageHandle,\r
- IN EFI_SYSTEM_TABLE *SystemTable\r
+VOID\r
+LocateHiiProtocols (\r
+ VOID\r
)\r
{\r
- EFI_STATUS Status;\r
- \r
- Status = gBS->LocateProtocol (\r
- &gEfiHiiDatabaseProtocolGuid,\r
- NULL,\r
- (VOID **) &mHiiDatabaseProt\r
- );\r
+ EFI_STATUS Status;\r
+\r
+ if (mHiiProtocolsInitialized) {\r
+ return;\r
+ }\r
+\r
+ Status = gBS->LocateProtocol (&gEfiHiiDatabaseProtocolGuid, NULL, (VOID **) &mHiiDatabaseProt);\r
ASSERT_EFI_ERROR (Status);\r
- ASSERT (mHiiDatabaseProt != NULL);\r
\r
- Status = gBS->LocateProtocol (\r
- &gEfiHiiStringProtocolGuid,\r
- NULL,\r
- (VOID **) &mHiiStringProt\r
- );\r
+ Status = gBS->LocateProtocol (&gEfiHiiStringProtocolGuid, NULL, (VOID **) &mHiiStringProt);\r
ASSERT_EFI_ERROR (Status);\r
- ASSERT (mHiiStringProt != NULL);\r
\r
- return EFI_SUCCESS;\r
+ mHiiProtocolsInitialized = TRUE;\r
}\r
\r
\r
\r
ASSERT (HiiHandle != NULL);\r
\r
+ LocateHiiProtocols ();\r
+\r
VA_START (Args, HiiHandle);\r
PackageListHeader = InternalHiiLibPreparePackages (NumberOfPackages, GuidId, Args);\r
\r
)\r
{\r
EFI_STATUS Status;\r
-\r
ASSERT (HiiHandle != NULL);\r
+\r
+ LocateHiiProtocols ();\r
+\r
Status = mHiiDatabaseProt->RemovePackageList (mHiiDatabaseProt, HiiHandle);\r
ASSERT_EFI_ERROR (Status);\r
}\r
\r
BufferLength = 0;\r
\r
+ LocateHiiProtocols ();\r
+\r
//\r
// Try to find the actual buffer size for HiiHandle Buffer.\r
//\r
//\r
BufferSize = 0;\r
HiiPackageList = NULL;\r
+\r
+ LocateHiiProtocols ();\r
+\r
Status = mHiiDatabaseProt->ExportPackageLists (mHiiDatabaseProt, Handle, &BufferSize, HiiPackageList);\r
ASSERT (Status != EFI_NOT_FOUND);\r
\r
return NULL;\r
}\r
\r
+ LocateHiiProtocols ();\r
+\r
//\r
// Retrieve all Hii Handles from HII database\r
//\r
\r
HiiPackageList = NULL;\r
BufferSize = 0;\r
+\r
+ LocateHiiProtocols ();\r
+\r
Status = mHiiDatabaseProt->ExportPackageLists (\r
mHiiDatabaseProt,\r
HiiHandle,\r