]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/HiiLib/HiiLib.c
Merged in the following trackers from EDK:
[mirror_edk2.git] / MdePkg / Library / HiiLib / HiiLib.c
index 1f59fa4fa5a447566cb6c47eaafbee00aaf9ed10..940536620cfc69b683afb856c2af2915769eb8ee 100644 (file)
 \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
@@ -151,6 +143,8 @@ HiiLibAddPackages (
 \r
   ASSERT (HiiHandle != NULL);\r
 \r
+  LocateHiiProtocols ();\r
+\r
   VA_START (Args, HiiHandle);\r
   PackageListHeader = InternalHiiLibPreparePackages (NumberOfPackages, GuidId, Args);\r
 \r
@@ -174,8 +168,10 @@ HiiLibRemovePackages (
   )\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
@@ -196,6 +192,8 @@ HiiLibGetHiiHandles (
 \r
   BufferLength = 0;\r
 \r
+  LocateHiiProtocols ();\r
+\r
   //\r
   // Try to find the actual buffer size for HiiHandle Buffer.\r
   //\r
@@ -245,6 +243,9 @@ HiiLibExtractGuidFromHiiHandle (
   //\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
@@ -326,6 +327,8 @@ HiiLibDevicePathToHiiHandle (
     return NULL;\r
   }\r
 \r
+  LocateHiiProtocols ();\r
+\r
   //\r
   // Retrieve all Hii Handles from HII database\r
   //\r
@@ -392,6 +395,9 @@ IsHiiHandleRegistered (
 \r
   HiiPackageList = NULL;\r
   BufferSize = 0;\r
+\r
+  LocateHiiProtocols ();\r
+\r
   Status = mHiiDatabaseProt->ExportPackageLists (\r
              mHiiDatabaseProt,\r
              HiiHandle,\r