]> git.proxmox.com Git - mirror_edk2.git/commitdiff
HII Library Class interface refine.
authorrsun3 <rsun3@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 14 Apr 2009 10:47:19 +0000 (10:47 +0000)
committerrsun3 <rsun3@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 14 Apr 2009 10:47:19 +0000 (10:47 +0000)
The "HiiLib" prefix for all HII Library API function names changed to "Hii".

Remove:
  HiiLibPreparePackageList(), replaced by HiiAddPackages()
  HiiLibNewString(), replaced by HiiSetString()
  HiiLibGetStringFromHandle(), replaced by HiiGetString()
  HiiLibGetStringFromToken(), replaced by HiiGetPackageString()
  HiiLibExtractGuidFromHiiHandle()
  HiiLibDevicePathToHiiHandle()
  HiiLibGetSupportedSecondaryLanguages()
  HiiLibGetSupportedLanguageNumber()
  HiiLibExportPackageLists()
  HiiLibListPackageLists()

Interface change:
  HiiAddPackages()
  HiiSetString()
  HiiGetString()
  HiiGetHiiHandles()

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8083 6f19259b-4bc3-4df7-8a09-765794883524

40 files changed:
DuetPkg/DataHubGenDxe/DataHubGen.c
EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/ConfigAccess.c
EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/HiiDatabase.c
EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/Package.c
EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/SetupBrowser.c
EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/Strings.c
EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/Utility.c
EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/Utility.h
IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/BootMaint.c
IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/UpdatePage.c
IntelFrameworkModulePkg/Universal/BdsDxe/BootMaint/Variable.c
IntelFrameworkModulePkg/Universal/BdsDxe/BootMngr/BootManager.c
IntelFrameworkModulePkg/Universal/BdsDxe/BootMngr/BootManager.h
IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManager.c
IntelFrameworkModulePkg/Universal/BdsDxe/DeviceMngr/DeviceManager.h
IntelFrameworkModulePkg/Universal/BdsDxe/FrontPage.c
IntelFrameworkModulePkg/Universal/BdsDxe/Language.c
IntelFrameworkModulePkg/Universal/BdsDxe/String.c
IntelFrameworkModulePkg/Universal/BdsDxe/String.h
MdeModulePkg/Application/PlatOverMngr/PlatOverMngr.c
MdeModulePkg/Bus/Usb/UsbKbDxe/KeyBoard.c
MdeModulePkg/Include/Library/HiiLib.h
MdeModulePkg/Library/UefiHiiLib/HiiLanguage.c
MdeModulePkg/Library/UefiHiiLib/HiiLib.c
MdeModulePkg/Library/UefiHiiLib/HiiString.c
MdeModulePkg/Library/UefiHiiLib/InternalHiiLib.h
MdeModulePkg/Universal/Console/GraphicsConsoleDxe/GraphicsConsole.c
MdeModulePkg/Universal/DriverSampleDxe/DriverSample.c
MdeModulePkg/Universal/DriverSampleDxe/DriverSample.h
MdeModulePkg/Universal/DriverSampleDxe/DriverSampleDxe.inf
MdeModulePkg/Universal/Network/IScsiDxe/IScsiConfig.c
MdeModulePkg/Universal/SetupBrowserDxe/IfrParse.c
MdeModulePkg/Universal/SetupBrowserDxe/Setup.c
MdeModulePkg/Universal/SetupBrowserDxe/Setup.h
MdeModulePkg/Universal/SetupBrowserDxe/SetupBrowserDxe.inf
MdeModulePkg/Universal/SetupBrowserDxe/Ui.c
Nt32Pkg/CpuRuntimeDxe/Cpu.c
Nt32Pkg/MiscSubClassPlatformDxe/MiscSubclassDriverEntryPoint.c
UnixPkg/CpuRuntimeDxe/Cpu.c
UnixPkg/MiscSubClassPlatformDxe/MiscSubclassDriverEntryPoint.c

index 6d6770444d84ab8b8b602dae0482f29b09947219..937425fb8f7aa5a18335b209f59708e12243eeda 100644 (file)
@@ -104,9 +104,8 @@ InstallProcessorDataHub (
   ASSERT (UString != NULL);\r
   AsciiStrToUnicodeStr (AString, UString);\r
 \r
-  Status = HiiLibNewString (gStringHandle, &Token, UString);\r
-\r
-  if (EFI_ERROR (Status)) {\r
+  Token = HiiSetString (gStringHandle, 0, UString, NULL);\r
+  if (Token == 0) {\r
     gBS->FreePool (UString);\r
     return ;\r
   }\r
@@ -232,9 +231,8 @@ InstallMiscDataHub (
   CopyMem (UString, FIRMWARE_BIOS_VERSIONE, sizeof(FIRMWARE_BIOS_VERSIONE));\r
   AsciiStrToUnicodeStr (AString, UString + sizeof(FIRMWARE_BIOS_VERSIONE) / sizeof(CHAR16) - 1);\r
 \r
-  Status = HiiLibNewString (gStringHandle, &Token, UString);\r
-\r
-  if (EFI_ERROR (Status)) {\r
+  Token = HiiSetString (gStringHandle, 0, UString, NULL);\r
+  if (Token == 0) {\r
     gBS->FreePool (UString);\r
     return ;\r
   }\r
@@ -281,9 +279,8 @@ InstallMiscDataHub (
   CopyMem (UString, FIRMWARE_PRODUCT_NAME, sizeof(FIRMWARE_PRODUCT_NAME));\r
   AsciiStrToUnicodeStr (AString, UString + sizeof(FIRMWARE_PRODUCT_NAME) / sizeof(CHAR16) - 1);\r
 \r
-  Status = HiiLibNewString (gStringHandle, &Token, UString);\r
-\r
-  if (EFI_ERROR (Status)) {\r
+  Token = HiiSetString (gStringHandle, 0, UString, NULL);\r
+  if (Token == 0) {\r
     gBS->FreePool (UString);\r
     return ;\r
   }\r
@@ -345,7 +342,13 @@ DataHubGenEntrypoint (
     return Status;\r
   }\r
   \r
-  HiiLibAddPackages (1, &gEfiMiscProducerGuid, NULL, &gStringHandle, DataHubGenDxeStrings);\r
+  gStringHandle = HiiAddPackages (\r
+                    &gEfiMiscProducerGuid,\r
+                    NULL,\r
+                    DataHubGenDxeStrings,\r
+                    NULL\r
+                    );\r
+  ASSERT (gStringHandle != NULL);\r
 \r
   InstallProcessorDataHub (Smbios);\r
   InstallCacheDataHub     (Smbios);\r
index 117d6ea636ebd000f05920020a05e410061294de..ac6f2ac24419fc7a70e001d570f387f9f6295e92 100644 (file)
@@ -674,7 +674,6 @@ CreateIfrDataArray (
   FORMSET_STORAGE                  *BufferStorage;\r
   EFI_STATUS                        Status;\r
   UINTN                             Size;\r
-  UINTN                             StringSize;\r
   EFI_STRING                        String;\r
 \r
   *NvMapAllocated = FALSE;\r
@@ -691,17 +690,10 @@ CreateIfrDataArray (
       break;\r
 \r
     case EFI_IFR_TYPE_STRING:\r
-      StringSize = 0;\r
-      Status = HiiLibGetString (ConfigAccess->ThunkContext->UefiHiiHandle, Value->string, String, &StringSize);\r
-      ASSERT (Status == EFI_BUFFER_TOO_SMALL);\r
-\r
-      String = AllocateZeroPool (StringSize);\r
+      String = HiiGetString (ConfigAccess->ThunkContext->UefiHiiHandle, Value->string, NULL);\r
       ASSERT (String != NULL);\r
 \r
-      Status = HiiLibGetString (ConfigAccess->ThunkContext->UefiHiiHandle, Value->string, String, &StringSize);\r
-      ASSERT_EFI_ERROR (Status);\r
-\r
-      Size = StringSize;\r
+      Size = StrSize (String);\r
       break;\r
       \r
     default:\r
index 7882227fafb10ffbeca9df840f8925fdde425cb9..5a3df71aab52d25e68777d72dbddc08659644495 100644 (file)
@@ -156,7 +156,7 @@ InitializeHiiDatabase (
                   );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
-  Status = HiiLibListPackageLists (EFI_HII_PACKAGE_STRINGS, NULL, &BufferLength, &Buffer);\r
+  Status = ListPackageLists (EFI_HII_PACKAGE_STRINGS, NULL, &BufferLength, &Buffer);\r
   if (Status == EFI_SUCCESS) {\r
     for (Index = 0; Index < BufferLength / sizeof (EFI_HII_HANDLE); Index++) {\r
       ThunkContext = CreateThunkContextForUefiHiiHandle (Buffer[Index]);\r
@@ -403,7 +403,7 @@ HiiGetPrimaryLanguages (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  LangCodes3066 = HiiLibGetSupportedLanguages (UefiHiiHandle);\r
+  LangCodes3066 = HiiGetSupportedLanguages (UefiHiiHandle);\r
 \r
   if (LangCodes3066 == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -437,6 +437,61 @@ Done:
   return Status;\r
 }\r
 \r
+/**\r
+  This function returns the list of supported 2nd languages, in the format specified\r
+  in UEFI specification Appendix M.\r
+\r
+  If HiiHandle is not a valid Handle in the HII database, then ASSERT.\r
+  If not enough resource to complete the operation, then ASSERT.\r
+\r
+  @param  HiiHandle              The HII package list handle.\r
+  @param  FirstLanguage          Pointer to language name buffer.\r
+  \r
+  @return The supported languages.\r
+\r
+**/\r
+CHAR8 *\r
+EFIAPI\r
+HiiGetSupportedSecondaryLanguages (\r
+  IN EFI_HII_HANDLE           HiiHandle,\r
+  IN CONST CHAR8              *FirstLanguage\r
+  )\r
+{\r
+  EFI_STATUS  Status;\r
+  UINTN       BufferSize;\r
+  CHAR8       *LanguageString;\r
+\r
+  ASSERT (HiiHandle != NULL);\r
+\r
+  //\r
+  // Collect current supported 2nd Languages for given HII handle\r
+  // First try allocate 4K buffer to store the current supported 2nd languages.\r
+  //\r
+  BufferSize = 0x1000;\r
+  LanguageString = AllocateZeroPool (BufferSize);\r
+  if (LanguageString == NULL) {\r
+    return NULL;\r
+  }\r
+\r
+  Status = mHiiStringProtocol->GetSecondaryLanguages (mHiiStringProtocol, HiiHandle, FirstLanguage, LanguageString, &BufferSize);\r
+  ASSERT (Status != EFI_NOT_FOUND);\r
+  \r
+  if (Status == EFI_BUFFER_TOO_SMALL) {\r
+    FreePool (LanguageString);\r
+    LanguageString = AllocateZeroPool (BufferSize);\r
+    if (LanguageString == NULL) {\r
+      return NULL;\r
+    }\r
+\r
+    Status = mHiiStringProtocol->GetSecondaryLanguages (mHiiStringProtocol, HiiHandle, FirstLanguage, LanguageString, &BufferSize);\r
+  }\r
+\r
+  if (EFI_ERROR (Status)) {\r
+    LanguageString = NULL;\r
+  }\r
+\r
+  return LanguageString;\r
+}\r
 \r
 /**\r
   Allows a program to determine which secondary languages are supported on a given handle for a given primary language\r
@@ -499,7 +554,7 @@ HiiGetSecondaryLanguages (
   PrimaryLang3066 = ConvertIso639LanguageToRfc3066Language (PrimaryLang639);\r
   ASSERT_EFI_ERROR (PrimaryLang3066 != NULL);\r
 \r
-  SecLangCodes3066 = HiiLibGetSupportedSecondaryLanguages (UefiHiiHandle, PrimaryLang3066);\r
+  SecLangCodes3066 = HiiGetSupportedSecondaryLanguages (UefiHiiHandle, PrimaryLang3066);\r
 \r
   if (SecLangCodes3066 == NULL) {\r
     Status =  EFI_INVALID_PARAMETER;\r
index 3187a941601a826e4d0ffcc5d93fdec422a74100..5b326721ba512a9ec73980b40c8b8a19adbce5d8 100644 (file)
@@ -401,7 +401,7 @@ FindStringPackAndUpdatePackListWithOnlyIfrPack (
 \r
     if (ThunkContext != IfrThunkContext) {\r
       if (CompareGuid (&IfrThunkContext->TagGuid, &ThunkContext->TagGuid) && (ThunkContext->IfrPackageCount == 0)) {\r
-        Status = HiiLibExportPackageLists (ThunkContext->UefiHiiHandle, &StringPackageListHeader, &Size);\r
+        Status = ExportPackageLists (ThunkContext->UefiHiiHandle, &StringPackageListHeader, &Size);\r
         ASSERT_EFI_ERROR (Status);\r
 \r
         IfrThunkContext->StringPackageCount = GetPackageCountByType (StringPackageListHeader, EFI_HII_PACKAGE_STRINGS);\r
@@ -861,7 +861,7 @@ RemovePackNotify (
   //\r
   if (ThunkContext != NULL) {\r
     if (!ThunkContext->ByFrameworkHiiNewPack) {\r
-      Status = HiiLibExportPackageLists (Handle, &HiiPackageList, &BufferSize);\r
+      Status = ExportPackageLists (Handle, &HiiPackageList, &BufferSize);\r
       ASSERT_EFI_ERROR (Status);\r
 \r
       if (GetPackageCountByType (HiiPackageList, EFI_HII_PACKAGE_STRINGS) == 1) {\r
index 7c4b27f077229df8f6a2ace5bc72e98df4010088..807e8396d032948453e85dfee94a6feba19f169e 100644 (file)
@@ -40,13 +40,9 @@ GetStringById (
   IN  EFI_STRING_ID   Id\r
   )\r
 {\r
-  CHAR16 *String;\r
-\r
-  String = NULL;\r
-  HiiLibGetStringFromHandle (gStringPackHandle, Id, &String);\r
-\r
-  return String;\r
+  return HiiGetString (gStringPackHandle, Id, NULL);\r
 }\r
+\r
 /**\r
 \r
   Show progress bar with title above it. It only works in Graphics mode.\r
@@ -544,12 +540,14 @@ InitSetBrowserStrings (
   VOID\r
   )\r
 {\r
-  EFI_STATUS Status;\r
-  \r
   //\r
   // Initialize strings to HII database\r
   //\r
-  Status = HiiLibAddPackages (1, &gEfiHiiThunkProducerGuid, NULL, &gStringPackHandle, STRING_ARRAY_NAME);\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
+  gStringPackHandle = HiiAddPackages (\r
+                        &gEfiHiiThunkProducerGuid,\r
+                        NULL,\r
+                        STRING_ARRAY_NAME,\r
+                        NULL\r
+                        );\r
+  ASSERT (gStringPackHandle != NULL);\r
 }\r
index d9cc39eb8d54d6f829479199c211ecdb94114ca5..05a885cc8ffc0ad14fc7d38d9bf0464f7f8c1f5a 100644 (file)
@@ -65,7 +65,7 @@ ConvertIso639ToRfc3066 (
                          If all glyphs in the string are available, the index is the index of the terminator \r
                          of the string. \r
   @param GlyphBufferSize A pointer to a value. On output, if the function returns EFI_SUCCESS, \r
-                         it contains the amount of memory that is required to store the string¡¯s glyph equivalent.\r
+                         it contains the amount of memory that is required to store the string? glyph equivalent.\r
 \r
   @retval EFI_UNSUPPORTED  The function performs nothing and return EFI_UNSUPPORTED.\r
 **/\r
@@ -148,73 +148,17 @@ UpdateString (
   )\r
 {\r
   EFI_STRING_ID                             NewStringId;\r
-  EFI_STATUS                                Status;\r
-\r
 \r
-  NewStringId = 0;\r
-  \r
-  if (*StringId == 0) {\r
-    //\r
-    // Create a new string token.\r
-    //\r
-    if (Rfc3066AsciiLanguage == NULL) {\r
-      //\r
-      // For all languages in the package list.\r
-      //\r
-      Status = HiiLibNewString (ThunkContext->UefiHiiHandle, &NewStringId, NewString);\r
-    } else {\r
-      //\r
-      // For specified language.\r
-      //\r
-      Status = mHiiStringProtocol->NewString (\r
-                                     mHiiStringProtocol,\r
-                                     ThunkContext->UefiHiiHandle,\r
-                                     &NewStringId,\r
-                                     Rfc3066AsciiLanguage,\r
-                                     NULL,\r
-                                     NewString,\r
-                                     NULL\r
-                                     );\r
-    }\r
-  } else {\r
-    //\r
-    // Update the existing string token.\r
-    //\r
-    if (Rfc3066AsciiLanguage == NULL) {\r
-      //\r
-      // For all languages in the package list.\r
-      //\r
-      Status = HiiLibSetString (ThunkContext->UefiHiiHandle, *StringId, NewString);\r
-    } else {\r
-      //\r
-      // For specified language.\r
-      //\r
-      Status = mHiiStringProtocol->SetString (\r
-                                   mHiiStringProtocol,\r
-                                   ThunkContext->UefiHiiHandle,\r
-                                   *StringId,\r
-                                   Rfc3066AsciiLanguage,\r
-                                   NewString,\r
-                                   NULL\r
-                                   );\r
-    }\r
-  }\r
-  \r
-  if (!EFI_ERROR (Status)) {\r
-    if (*StringId == 0) {\r
-      //\r
-      // When creating new string, return the newly created String Token.\r
-      //\r
-      *StringId = NewStringId;\r
-    }\r
-  } else {\r
+  NewStringId = HiiSetString (ThunkContext->UefiHiiHandle, *StringId, NewString, Rfc3066AsciiLanguage);\r
+  *StringId = NewStringId;\r
+  if (NewStringId == 0) {\r
     //\r
     // Only EFI_INVALID_PARAMETER is defined in HII 0.92 specification.\r
     //\r
-    *StringId = 0;\r
+    return EFI_INVALID_PARAMETER;\r
+  } else {\r
+    return EFI_SUCCESS;\r
   }\r
-\r
-  return Status;\r
 }\r
 \r
 /**\r
@@ -388,9 +332,12 @@ HiiThunkGetString (
   OUT    EFI_STRING                 StringBuffer\r
   )\r
 {\r
-  CHAR8                                 *Iso639AsciiLanguage;\r
   HII_THUNK_PRIVATE_DATA                *Private;\r
+  CHAR8                                 *Iso639AsciiLanguage;\r
   CHAR8                                 *Rfc3066AsciiLanguage;\r
+  CHAR8                                 *SupportedLanguages;\r
+  CHAR8                                 *PlatformLanguage;\r
+  CHAR8                                 *BestLanguage;\r
   EFI_HII_HANDLE                        UefiHiiHandle;\r
   EFI_STATUS                            Status;\r
 \r
@@ -427,7 +374,51 @@ HiiThunkGetString (
   }\r
 \r
   if (Rfc3066AsciiLanguage == NULL) {\r
-    Status =  HiiLibGetString (UefiHiiHandle, Token, StringBuffer, BufferLengthTemp);\r
+    //\r
+    // Get the languages that the package specified by HiiHandle supports\r
+    //\r
+    SupportedLanguages = HiiGetSupportedLanguages (UefiHiiHandle);\r
+    if (SupportedLanguages == NULL) {\r
+      goto Error2;\r
+    }\r
+\r
+    //\r
+    // Get the current platform language setting\r
+    //\r
+    PlatformLanguage = GetEfiGlobalVariable (L"PlatformLang");\r
+    if (PlatformLanguage == NULL) {\r
+      goto Error1;\r
+    }\r
+\r
+    //\r
+    // Get the best matching language from SupportedLanguages\r
+    //\r
+    BestLanguage = GetBestLanguage (\r
+                     SupportedLanguages, \r
+                     FALSE,                // RFC 4646 mode\r
+                     PlatformLanguage,     // Next highest priority\r
+                     SupportedLanguages,   // Lowest priority \r
+                     NULL\r
+                     );\r
+    if (BestLanguage == NULL) {\r
+      FreePool (PlatformLanguage);\r
+Error1:\r
+      FreePool (SupportedLanguages);\r
+Error2:\r
+      Status = EFI_INVALID_PARAMETER;\r
+      goto Done;\r
+    }\r
+\r
+    Status = mHiiStringProtocol->GetString (\r
+                                 mHiiStringProtocol,\r
+                                 BestLanguage,\r
+                                 UefiHiiHandle,\r
+                                 Token,\r
+                                 StringBuffer,\r
+                                 BufferLengthTemp,\r
+                                 NULL\r
+                                 );\r
+    FreePool (BestLanguage);\r
   } else {\r
     Status = mHiiStringProtocol->GetString (\r
                                  mHiiStringProtocol,\r
index 0ad0668f728e6d1cb1f725b61cf67b505663a951..e74830de56b124c5bce82df42a6d62009d8d7955 100644 (file)
@@ -21,6 +21,220 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 CONST EFI_GUID  gZeroGuid = {0, 0, 0, {0, 0, 0, 0, 0, 0, 0, 0}};\r
 CONST CHAR16 FrameworkReservedVarstoreName[] = FRAMEWORK_RESERVED_VARSTORE_NAME;\r
 \r
+/**\r
+  \r
+  This function returns a list of the package handles of the   \r
+  specified type that are currently active in the HII database. The   \r
+  pseudo-type EFI_HII_PACKAGE_TYPE_ALL will cause all package   \r
+  handles to be listed.\r
+\r
+  If HandleBufferLength is NULL, then ASSERT.\r
+  If HandleBuffer is NULL, the ASSERT.\r
+  If PackageType is EFI_HII_PACKAGE_TYPE_GUID and PackageGuid is\r
+  NULL, then ASSERT.\r
+  If PackageType is not EFI_HII_PACKAGE_TYPE_GUID and PackageGuid is not\r
+  NULL, then ASSERT.\r
+  \r
+  \r
+  @param PackageType          Specifies the package type of the packages\r
+                              to list or EFI_HII_PACKAGE_TYPE_ALL for\r
+                              all packages to be listed.\r
+  \r
+  @param PackageGuid          If PackageType is\r
+                              EFI_HII_PACKAGE_TYPE_GUID, then this is\r
+                              the pointer to the GUID which must match\r
+                              the Guid field of\r
+                              EFI_HII_PACKAGE_GUID_HEADER. Otherwise, it\r
+                              must be NULL.\r
+  \r
+  @param HandleBufferLength   On output, the length of the handle buffer\r
+                              that is required for the handles found.\r
+\r
+  @param HandleBuffer         On output, an array of EFI_HII_HANDLE  instances returned.\r
+                              The caller is responcible to free this pointer allocated.\r
+\r
+  @retval EFI_SUCCESS           The matching handles are outputed successfully.\r
+                                HandleBufferLength is updated with the actual length.\r
+  @retval EFI_OUT_OF_RESOURCES  Not enough resource to complete the operation.\r
+  @retval EFI_NOT_FOUND         No matching handle could not be found in database.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ListPackageLists (\r
+  IN        UINT8                     PackageType,\r
+  IN CONST  EFI_GUID                  *PackageGuid,\r
+  IN OUT    UINTN                     *HandleBufferLength,\r
+  OUT       EFI_HII_HANDLE            **HandleBuffer\r
+  )\r
+{\r
+  EFI_STATUS          Status;\r
+  \r
+  ASSERT (HandleBufferLength != NULL);\r
+  ASSERT (HandleBuffer != NULL);\r
+  \r
+  *HandleBufferLength = 0;\r
+  *HandleBuffer       = NULL;\r
+\r
+  if (PackageType == EFI_HII_PACKAGE_TYPE_GUID) {\r
+    ASSERT (PackageGuid != NULL);\r
+  } else {\r
+    ASSERT (PackageGuid == NULL);\r
+  }\r
+\r
+  Status = mHiiDatabase->ListPackageLists (\r
+                           mHiiDatabase,\r
+                           PackageType,\r
+                           PackageGuid,\r
+                           HandleBufferLength,\r
+                           *HandleBuffer\r
+                           );\r
+  if (EFI_ERROR (Status) && (Status != EFI_BUFFER_TOO_SMALL)) {\r
+    //\r
+    // No packages is registered to UEFI HII Database, just return.\r
+    // \r
+    //\r
+    return Status;\r
+  }\r
+\r
+  *HandleBuffer = AllocateZeroPool (*HandleBufferLength);\r
+  \r
+  if (*HandleBuffer == NULL) {\r
+    return EFI_OUT_OF_RESOURCES;\r
+  }\r
+  \r
+  return mHiiDatabase->ListPackageLists (\r
+                         mHiiDatabase,\r
+                         PackageType,\r
+                         PackageGuid,\r
+                         HandleBufferLength,\r
+                         *HandleBuffer\r
+                         );\r
+  \r
+}\r
+\r
+/**\r
+  Exports the contents of one or all package lists in the HII database into a buffer.\r
+\r
+  If Handle is not NULL and not a valid EFI_HII_HANDLE registered in the database, \r
+  then ASSERT.\r
+  If PackageListHeader is NULL, then ASSERT.\r
+  If PackageListSize is NULL, then ASSERT.\r
+\r
+  @param  Handle                 The HII Handle.\r
+  @param  PackageListHeader      A pointer to a buffer that will contain the results of \r
+                                 the export function.\r
+  @param  PackageListSize        On output, the length of the buffer that is required for the exported data.\r
+\r
+  @retval EFI_SUCCESS            Package exported.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES   Not enought memory to complete the operations.\r
+\r
+**/\r
+EFI_STATUS \r
+EFIAPI\r
+ExportPackageLists (\r
+  IN EFI_HII_HANDLE                    Handle,\r
+  OUT EFI_HII_PACKAGE_LIST_HEADER      **PackageListHeader,\r
+  OUT UINTN                            *PackageListSize\r
+  )\r
+{\r
+  EFI_STATUS                       Status;\r
+  UINTN                            Size;\r
+  EFI_HII_PACKAGE_LIST_HEADER      *PackageListHdr;\r
+\r
+  ASSERT (PackageListSize != NULL);\r
+  ASSERT (PackageListHeader != NULL);\r
+\r
+  Size = 0;\r
+  PackageListHdr = NULL;\r
+  Status = mHiiDatabase->ExportPackageLists (\r
+                           mHiiDatabase,\r
+                           Handle,\r
+                           &Size,\r
+                           PackageListHdr\r
+                           );\r
+  ASSERT_EFI_ERROR (Status != EFI_BUFFER_TOO_SMALL);\r
+  \r
+  if (Status == EFI_BUFFER_TOO_SMALL) {\r
+    PackageListHdr = AllocateZeroPool (Size);\r
+    \r
+    if (PackageListHeader == NULL) {\r
+      return EFI_OUT_OF_RESOURCES;\r
+    } else {\r
+      Status = mHiiDatabase->ExportPackageLists (\r
+                               mHiiDatabase,\r
+                               Handle,\r
+                               &Size,\r
+                               PackageListHdr\r
+                               );\r
+    }\r
+  }\r
+\r
+  if (!EFI_ERROR (Status)) {\r
+    *PackageListHeader = PackageListHdr;\r
+    *PackageListSize   = Size;\r
+  } else {\r
+    FreePool (PackageListHdr);\r
+  }\r
+\r
+  return Status;\r
+}\r
+\r
+/**\r
+  Extract Hii package list GUID for given HII handle.\r
+\r
+  If HiiHandle could not be found in the HII database, then ASSERT.\r
+  If Guid is NULL, then ASSERT.\r
+\r
+  @param  Handle              Hii handle\r
+  @param  Guid                Package list GUID\r
+\r
+  @retval EFI_SUCCESS            Successfully extract GUID from Hii database.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ExtractGuidFromHiiHandle (\r
+  IN      EFI_HII_HANDLE      Handle,\r
+  OUT     EFI_GUID            *Guid\r
+  )\r
+{\r
+  EFI_STATUS                   Status;\r
+  UINTN                        BufferSize;\r
+  EFI_HII_PACKAGE_LIST_HEADER  *HiiPackageList;\r
+\r
+  ASSERT (Guid != NULL);\r
+  ASSERT (Handle != NULL);\r
+\r
+  //\r
+  // Get HII PackageList\r
+  //\r
+  BufferSize = 0;\r
+  HiiPackageList = NULL;\r
+\r
+  Status = mHiiDatabase->ExportPackageLists (mHiiDatabase, Handle, &BufferSize, HiiPackageList);\r
+  ASSERT (Status != EFI_NOT_FOUND);\r
+  \r
+  if (Status == EFI_BUFFER_TOO_SMALL) {\r
+    HiiPackageList = AllocatePool (BufferSize);\r
+    ASSERT (HiiPackageList != NULL);\r
+\r
+    Status = mHiiDatabase->ExportPackageLists (mHiiDatabase, Handle, &BufferSize, HiiPackageList);\r
+  }\r
+  if (EFI_ERROR (Status)) {\r
+    FreePool (HiiPackageList);\r
+    return Status;\r
+  }\r
+\r
+  //\r
+  // Extract GUID\r
+  //\r
+  CopyGuid (Guid, &HiiPackageList->PackageListGuid);\r
+\r
+  FreePool (HiiPackageList);\r
+\r
+  return EFI_SUCCESS;\r
+}\r
 \r
 /**\r
   Find the corressponding UEFI HII Handle from a Framework HII Handle given.\r
@@ -202,7 +416,7 @@ CreateThunkContextForUefiHiiHandle (
   \r
   ThunkContext->UefiHiiHandle = UefiHiiHandle;\r
   \r
-  Status = HiiLibExtractGuidFromHiiHandle (UefiHiiHandle, &PackageGuid);\r
+  Status = ExtractGuidFromHiiHandle (UefiHiiHandle, &PackageGuid);\r
   ASSERT_EFI_ERROR (Status);\r
   \r
   CopyGuid(&ThunkContext->TagGuid, &PackageGuid);\r
index 99642fd5b91b4525bc7cd42221a0972f6ce1bdde..087eafaaa8efb870e8b2665a0f9df6b59a25b934 100644 (file)
@@ -16,6 +16,100 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #ifndef _HII_THUNK_UTILITY_H\r
 #define _HII_THUNK_UTILITY_H\r
 \r
+/**\r
+  \r
+  This function returns a list of the package handles of the   \r
+  specified type that are currently active in the HII database. The   \r
+  pseudo-type EFI_HII_PACKAGE_TYPE_ALL will cause all package   \r
+  handles to be listed.\r
+\r
+  If HandleBufferLength is NULL, then ASSERT.\r
+  If HandleBuffer is NULL, the ASSERT.\r
+  If PackageType is EFI_HII_PACKAGE_TYPE_GUID and PackageGuid is\r
+  NULL, then ASSERT.\r
+  If PackageType is not EFI_HII_PACKAGE_TYPE_GUID and PackageGuid is not\r
+  NULL, then ASSERT.\r
+  \r
+  \r
+  @param PackageType          Specifies the package type of the packages\r
+                              to list or EFI_HII_PACKAGE_TYPE_ALL for\r
+                              all packages to be listed.\r
+  \r
+  @param PackageGuid          If PackageType is\r
+                              EFI_HII_PACKAGE_TYPE_GUID, then this is\r
+                              the pointer to the GUID which must match\r
+                              the Guid field of\r
+                              EFI_HII_PACKAGE_GUID_HEADER. Otherwise, it\r
+                              must be NULL.\r
+  \r
+  @param HandleBufferLength   On output, the length of the handle buffer\r
+                              that is required for the handles found.\r
+\r
+  @param HandleBuffer         On output, an array of EFI_HII_HANDLE  instances returned.\r
+                              The caller is responcible to free this pointer allocated.\r
+\r
+  @retval EFI_SUCCESS           The matching handles are outputed successfully.\r
+                                HandleBufferLength is updated with the actual length.\r
+  @retval EFI_OUT_OF_RESOURCES  Not enough resource to complete the operation.\r
+  @retval EFI_NOT_FOUND         No matching handle could not be found in database.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ListPackageLists (\r
+  IN        UINT8                     PackageType,\r
+  IN CONST  EFI_GUID                  *PackageGuid,\r
+  IN OUT    UINTN                     *HandleBufferLength,\r
+  OUT       EFI_HII_HANDLE            **HandleBuffer\r
+  )\r
+;\r
+\r
+/**\r
+  Exports the contents of one or all package lists in the HII database into a buffer.\r
+\r
+  If Handle is not NULL and not a valid EFI_HII_HANDLE registered in the database, \r
+  then ASSERT.\r
+  If PackageListHeader is NULL, then ASSERT.\r
+  If PackageListSize is NULL, then ASSERT.\r
+\r
+  @param  Handle                 The HII Handle.\r
+  @param  PackageListHeader      A pointer to a buffer that will contain the results of \r
+                                 the export function.\r
+  @param  PackageListSize        On output, the length of the buffer that is required for the exported data.\r
+\r
+  @retval EFI_SUCCESS            Package exported.\r
+\r
+  @retval EFI_OUT_OF_RESOURCES   Not enought memory to complete the operations.\r
+\r
+**/\r
+EFI_STATUS \r
+EFIAPI\r
+ExportPackageLists (\r
+  IN EFI_HII_HANDLE                    Handle,\r
+  OUT EFI_HII_PACKAGE_LIST_HEADER      **PackageListHeader,\r
+  OUT UINTN                            *PackageListSize\r
+  )\r
+;\r
+\r
+/**\r
+  Extract Hii package list GUID for given HII handle.\r
+\r
+  If HiiHandle could not be found in the HII database, then ASSERT.\r
+  If Guid is NULL, then ASSERT.\r
+\r
+  @param  Handle              Hii handle\r
+  @param  Guid                Package list GUID\r
+\r
+  @retval EFI_SUCCESS            Successfully extract GUID from Hii database.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+ExtractGuidFromHiiHandle (\r
+  IN      EFI_HII_HANDLE      Handle,\r
+  OUT     EFI_GUID            *Guid\r
+  )\r
+;\r
+\r
 /**\r
   Find the UefiHiiHandle based on a Framework HII Handle returned by\r
   the HII Thunk to Framework HII code.\r
index 3f5bbc40c2138de67df62d7ec125b97b21ded0d1..57dd2db9c553f366193ce3ed4477be04b36a6f7d 100644 (file)
@@ -128,20 +128,22 @@ CreateMenuStringToken (
   for (Index = 0; Index < MenuOption->MenuNumber; Index++) {\r
     NewMenuEntry = BOpt_GetMenuEntry (MenuOption, Index);\r
 \r
-    HiiLibNewString (\r
-      HiiHandle,\r
-      &NewMenuEntry->DisplayStringToken,\r
-      NewMenuEntry->DisplayString\r
-      );\r
+    NewMenuEntry->DisplayStringToken = HiiSetString (\r
+                                         HiiHandle,\r
+                                         0,\r
+                                         NewMenuEntry->DisplayString,\r
+                                         NULL\r
+                                         );\r
 \r
     if (NULL == NewMenuEntry->HelpString) {\r
       NewMenuEntry->HelpStringToken = NewMenuEntry->DisplayStringToken;\r
     } else {\r
-      HiiLibNewString (\r
-        HiiHandle,\r
-        &NewMenuEntry->HelpStringToken,\r
-        NewMenuEntry->HelpString\r
-        );\r
+      NewMenuEntry->HelpStringToken = HiiSetString (\r
+                                        HiiHandle,\r
+                                        0,\r
+                                        NewMenuEntry->HelpString,\r
+                                        NULL\r
+                                        );\r
     }\r
   }\r
 \r
@@ -848,7 +850,6 @@ InitializeBM (
   )\r
 {\r
   EFI_LEGACY_BIOS_PROTOCOL    *LegacyBios;\r
-  EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
   BMM_CALLBACK_DATA           *BmmCallbackInfo;\r
   EFI_STATUS                  Status;\r
   UINT8                       *Ptr;\r
@@ -931,30 +932,26 @@ InitializeBM (
   //\r
   // Post our Boot Maint VFR binnary to the HII database.\r
   //\r
-  PackageList = HiiLibPreparePackageList (2, &mBootMaintGuid, BmBin, BdsDxeStrings);\r
-  ASSERT (PackageList != NULL);\r
-\r
-  Status = gHiiDatabase->NewPackageList (\r
-                           gHiiDatabase,\r
-                           PackageList,\r
-                           BmmCallbackInfo->BmmDriverHandle,\r
-                           &BmmCallbackInfo->BmmHiiHandle\r
-                           );\r
-  FreePool (PackageList);\r
+  BmmCallbackInfo->BmmHiiHandle = HiiAddPackages (\r
+                                    &mBootMaintGuid,\r
+                                    BmmCallbackInfo->BmmDriverHandle,\r
+                                    BmBin,\r
+                                    BdsDxeStrings,\r
+                                    NULL\r
+                                    );\r
+  ASSERT (BmmCallbackInfo->BmmHiiHandle != NULL);\r
 \r
   //\r
   // Post our File Explorer VFR binary to the HII database.\r
   //\r
-  PackageList = HiiLibPreparePackageList (2, &mFileExplorerGuid, FEBin, BdsDxeStrings);\r
-  ASSERT (PackageList != NULL);\r
-\r
-  Status = gHiiDatabase->NewPackageList (\r
-                           gHiiDatabase,\r
-                           PackageList,\r
-                           BmmCallbackInfo->FeDriverHandle,\r
-                           &BmmCallbackInfo->FeHiiHandle\r
-                           );\r
-  FreePool (PackageList);\r
+  BmmCallbackInfo->FeHiiHandle = HiiAddPackages (\r
+                                   &mFileExplorerGuid,\r
+                                   BmmCallbackInfo->FeDriverHandle,\r
+                                   FEBin,\r
+                                   BdsDxeStrings,\r
+                                   NULL\r
+                                   );\r
+  ASSERT (BmmCallbackInfo->FeHiiHandle != NULL);\r
 \r
   //\r
   // Allocate space for creation of Buffer\r
@@ -1057,8 +1054,8 @@ InitializeBM (
   //\r
   // Remove our IFR data from HII database\r
   //\r
-  gHiiDatabase->RemovePackageList (gHiiDatabase, BmmCallbackInfo->BmmHiiHandle);\r
-  gHiiDatabase->RemovePackageList (gHiiDatabase, BmmCallbackInfo->FeHiiHandle);\r
+  HiiRemovePackages (BmmCallbackInfo->BmmHiiHandle);\r
+  HiiRemovePackages (BmmCallbackInfo->FeHiiHandle);\r
 \r
   CleanUpStringDepository ();\r
 \r
@@ -1192,7 +1189,7 @@ GetStringTokenFromDepository (
     //\r
     NextListNode = AllocateZeroPool (sizeof (STRING_LIST_NODE));\r
     ASSERT (NextListNode != NULL);\r
-    HiiLibNewString (CallbackData->BmmHiiHandle, &(NextListNode->StringToken), L" ");\r
+    NextListNode->StringToken = HiiSetString (CallbackData->BmmHiiHandle, 0, L" ", NULL);\r
     ASSERT (NextListNode->StringToken != 0);\r
 \r
     StringDepository->TotalNodeNumber++;\r
index 6831289addd20b009cf24cf60024a5a2f1c61def..3d23da1ac3c2d2505b6fb81df82466ab3507fa35 100644 (file)
@@ -752,7 +752,7 @@ UpdateConModePage (
     ASSERT ((StrLen (ModeString)  + TempStringLen) < (sizeof (ModeString) / sizeof (ModeString[0])));\r
     StrCat (ModeString, RowString);\r
 \r
-    HiiLibNewString (CallbackData->BmmHiiHandle, &ModeToken[Index], ModeString);\r
+    ModeToken[Index] = HiiSetString (CallbackData->BmmHiiHandle, 0, ModeString, NULL);\r
 \r
     IfrOptionList[Index].StringToken  = ModeToken[Index];\r
     IfrOptionList[Index].Value.u16    = (UINT16) Mode;\r
@@ -1246,12 +1246,10 @@ UpdateSetLegacyDeviceOrderPage (
       // Create the string for oneof tag\r
       //\r
       UnicodeSPrint (String, sizeof (String), TypeStr, Index);\r
-      StrRef = 0;\r
-      HiiLibNewString (CallbackData->BmmHiiHandle, &StrRef, String);\r
+      StrRef = HiiSetString (CallbackData->BmmHiiHandle, 0, String, NULL);\r
 \r
       UnicodeSPrint (String, sizeof (String), TypeStrHelp, Index);\r
-      StrRefHelp = 0;\r
-      HiiLibNewString (CallbackData->BmmHiiHandle, &StrRefHelp, String);\r
+      StrRefHelp = HiiSetString (CallbackData->BmmHiiHandle, 0, String, NULL);\r
 \r
       CreateOneOfOpCode (\r
         (EFI_QUESTION_ID) (Key + Index),\r
index 489827f9de92ecb85a0837db9442e33e44284af6..6bdcee41d5673d7cbc80c7e942ca118e4eda6c45 100644 (file)
@@ -642,13 +642,13 @@ Var_UpdateDriverOption (
                                       CallbackData,\r
                                       DriverOptionStrDepository\r
                                       );\r
-  HiiLibNewString (HiiHandle, &NewMenuEntry->DisplayStringToken, NewMenuEntry->DisplayString);\r
+  NewMenuEntry->DisplayStringToken = HiiSetString (HiiHandle, 0, NewMenuEntry->DisplayString, NULL);\r
 \r
   NewMenuEntry->HelpStringToken = GetStringTokenFromDepository (\r
                                     CallbackData,\r
                                     DriverOptionHelpStrDepository\r
                                     );\r
-  HiiLibNewString (HiiHandle, &NewMenuEntry->HelpStringToken, NewMenuEntry->HelpString);\r
+  NewMenuEntry->HelpStringToken = HiiSetString (HiiHandle, 0, NewMenuEntry->HelpString, NULL);\r
 \r
   if (OptionalDataExist) {\r
     Ptr += (UINT8) GetDevicePathSize (CallbackData->LoadContext->FilePathList);\r
@@ -814,13 +814,13 @@ Var_UpdateBootOption (
                                       CallbackData,\r
                                       BootOptionStrDepository\r
                                       );\r
-  HiiLibNewString (CallbackData->FeHiiHandle, &NewMenuEntry->DisplayStringToken, NewMenuEntry->DisplayString);\r
+  NewMenuEntry->DisplayStringToken = HiiSetString (CallbackData->FeHiiHandle, 0, NewMenuEntry->DisplayString, NULL);\r
 \r
   NewMenuEntry->HelpStringToken = GetStringTokenFromDepository (\r
                                     CallbackData,\r
                                     BootOptionHelpStrDepository\r
                                     );\r
-  HiiLibNewString (CallbackData->FeHiiHandle, &NewMenuEntry->HelpStringToken, NewMenuEntry->HelpString);\r
+  NewMenuEntry->HelpStringToken = HiiSetString (CallbackData->FeHiiHandle, 0, NewMenuEntry->HelpString, NULL);\r
 \r
   if (OptionalDataExist) {\r
     Ptr += (UINT8) GetDevicePathSize (CallbackData->LoadContext->FilePathList);\r
index 615c189d8daf1bd644b20c1075aec4028aa447df..4918b25b13e0168767a0ab0517850c8746ddc3df 100644 (file)
@@ -129,7 +129,8 @@ BootManagerCallback (
   Registers HII packages for the Boot Manger to HII Database.\r
   It also registers the browser call back function.\r
 \r
-  @return Status of gBS->InstallMultipleProtocolInterfaces() and gHiiDatabase->NewPackageList()\r
+  @retval  EFI_SUCCESS           HII packages for the Boot Manager were registered successfully.\r
+  @retval  EFI_OUT_OF_RESOURCES  HII packages for the Boot Manager failed to be registered.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -138,7 +139,6 @@ InitializeBootManager (
   )\r
 {\r
   EFI_STATUS                  Status;\r
-  EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
 \r
   //\r
   // Install Device Path Protocol and Config Access protocol to driver handle\r
@@ -156,17 +156,18 @@ InitializeBootManager (
   //\r
   // Publish our HII data\r
   //\r
-  PackageList = HiiLibPreparePackageList (2, &mBootManagerGuid, BootManagerVfrBin, BdsDxeStrings);\r
-  ASSERT (PackageList != NULL);\r
-\r
-  Status = gHiiDatabase->NewPackageList (\r
-                           gHiiDatabase,\r
-                           PackageList,\r
-                           gBootManagerPrivate.DriverHandle,\r
-                           &gBootManagerPrivate.HiiHandle\r
-                           );\r
-  FreePool (PackageList);\r
-\r
+  gBootManagerPrivate.HiiHandle = HiiAddPackages (\r
+                                    &mBootManagerGuid,\r
+                                    gBootManagerPrivate.DriverHandle,\r
+                                    BootManagerVfrBin,\r
+                                    BdsDxeStrings,\r
+                                    NULL\r
+                                    );\r
+  if (gBootManagerPrivate.HiiHandle == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+  } else {\r
+    Status = EFI_SUCCESS;\r
+  }\r
   return Status;\r
 }\r
 \r
@@ -244,7 +245,7 @@ CallBootManager (
       continue;\r
     }\r
 \r
-    HiiLibNewString (HiiHandle, &Token, Option->Description);\r
+    Token = HiiSetString (HiiHandle, 0, Option->Description, NULL);\r
 \r
     TempStr = DevicePathToStr (Option->DevicePath);\r
     TempSize = StrSize (TempStr);\r
@@ -253,7 +254,7 @@ CallBootManager (
     StrCat (HelpString, L"Device Path : ");\r
     StrCat (HelpString, TempStr);\r
 \r
-    HiiLibNewString (HiiHandle, &HelpToken, HelpString);\r
+    HelpToken = HiiSetString (HiiHandle, 0, HelpString, NULL);\r
 \r
     CreateActionOpCode (\r
       mKeyInput,\r
index d7566f4ccf53e23951bbabde4ce718ac3c026aca..90b7b2850df575fbdb0623509d3697ea81e9cd5a 100644 (file)
@@ -86,7 +86,9 @@ BootManagerCallback (
   Registers HII packages for the Boot Manger to HII Database.\r
   It also registers the browser call back function.\r
 \r
-  @return Status of gBS->InstallMultipleProtocolInterfaces() and gHiiDatabase->NewPackageList()\r
+  @retval  EFI_SUCCESS           HII packages for the Boot Manager were registered successfully.\r
+  @retval  EFI_OUT_OF_RESOURCES  HII packages for the Boot Manager failed to be registered.\r
+\r
 **/\r
 EFI_STATUS\r
 InitializeBootManager (\r
index 9264734ddc607c04a321e1b8391d028ac9ef5042..920a0506306851ee3ec2fab8d396a04eb7a83511 100644 (file)
@@ -112,8 +112,8 @@ DeviceManagerCallback (
 \r
   This function registers HII packages to HII database.\r
 \r
-  @retval EFI_SUCCESS This function complete successfully.\r
-  @return Other value if failed to register HII packages.\r
+  @retval  EFI_SUCCESS           HII packages for the Device Manager were registered successfully.\r
+  @retval  EFI_OUT_OF_RESOURCES  HII packages for the Device Manager failed to be registered.\r
 \r
 **/\r
 EFI_STATUS\r
@@ -122,7 +122,6 @@ InitializeDeviceManager (
   )\r
 {\r
   EFI_STATUS                  Status;\r
-  EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
 \r
   //\r
   // Install Device Path Protocol and Config Access protocol to driver handle\r
@@ -140,17 +139,18 @@ InitializeDeviceManager (
   //\r
   // Publish our HII data\r
   //\r
-  PackageList = HiiLibPreparePackageList (2, &mDeviceManagerGuid, DeviceManagerVfrBin, BdsDxeStrings);\r
-  ASSERT (PackageList != NULL);\r
-\r
-  Status = gHiiDatabase->NewPackageList (\r
-                           gHiiDatabase,\r
-                           PackageList,\r
-                           gDeviceManagerPrivate.DriverHandle,\r
-                           &gDeviceManagerPrivate.HiiHandle\r
-                           );\r
-  FreePool (PackageList);\r
-\r
+  gDeviceManagerPrivate.HiiHandle = HiiAddPackages (\r
+                                      &mDeviceManagerGuid,\r
+                                      gDeviceManagerPrivate.DriverHandle,\r
+                                      DeviceManagerVfrBin,\r
+                                      BdsDxeStrings,\r
+                                      NULL\r
+                                      );\r
+  if (gDeviceManagerPrivate.HiiHandle == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+  } else {\r
+    Status = EFI_SUCCESS;\r
+  }\r
   return Status;\r
 }\r
 \r
@@ -174,23 +174,18 @@ CallDeviceManager (
   EFI_STATUS                  Status;\r
   UINTN                       Count;\r
   UINTN                       Index;\r
-  CHAR16                      *String;\r
-  UINTN                       StringLength;\r
+  EFI_STRING                  String;\r
   EFI_HII_UPDATE_DATA         UpdateData[MENU_ITEM_NUM];\r
   EFI_STRING_ID               Token;\r
   EFI_STRING_ID               TokenHelp;\r
   EFI_HII_HANDLE              *HiiHandles;\r
-  UINTN                       HandleBufferLength;\r
-  UINTN                       NumberOfHiiHandles;\r
   EFI_HII_HANDLE              HiiHandle;\r
   UINT16                      FormSetClass;\r
   EFI_STRING_ID               FormSetTitle;\r
   EFI_STRING_ID               FormSetHelp;\r
   EFI_BROWSER_ACTION_REQUEST  ActionRequest;\r
-  EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
 \r
   HiiHandles          = NULL;\r
-  HandleBufferLength  = 0;\r
 \r
   Status        = EFI_SUCCESS;\r
   gCallbackKey  = 0;\r
@@ -221,37 +216,30 @@ CallDeviceManager (
   //\r
   // Get all the Hii handles\r
   //\r
-  Status = HiiLibGetHiiHandles (&HandleBufferLength, &HiiHandles);\r
-  ASSERT_EFI_ERROR (Status && (HiiHandles != NULL));\r
+  HiiHandles = HiiGetHiiHandles (NULL);\r
+  ASSERT (HiiHandles != NULL);\r
 \r
   HiiHandle = gDeviceManagerPrivate.HiiHandle;\r
 \r
-  StringLength  = 0x1000;\r
-  String        = AllocateZeroPool (StringLength);\r
-  ASSERT (String != NULL);\r
-\r
   //\r
   // Search for formset of each class type\r
   //\r
-  NumberOfHiiHandles = HandleBufferLength / sizeof (EFI_HII_HANDLE);\r
-  for (Index = 0; Index < NumberOfHiiHandles; Index++) {\r
+  for (Index = 0; HiiHandles[Index] != NULL; Index++) {\r
     IfrLibExtractClassFromHiiHandle (HiiHandles[Index], &FormSetClass, &FormSetTitle, &FormSetHelp);\r
 \r
     if (FormSetClass == EFI_NON_DEVICE_CLASS) {\r
       continue;\r
     }\r
 \r
-    Token = 0;\r
-    *String = 0;\r
-    StringLength = 0x1000;\r
-    HiiLibGetString (HiiHandles[Index], FormSetTitle, String, &StringLength);\r
-    HiiLibNewString (HiiHandle, &Token, String);\r
+    String = HiiGetString (HiiHandles[Index], FormSetTitle, NULL);\r
+    ASSERT (String != NULL);\r
+    Token = HiiSetString (HiiHandle, 0, String, NULL);\r
+    FreePool (String);\r
 \r
-    TokenHelp = 0;\r
-    *String = 0;\r
-    StringLength = 0x1000;\r
-    HiiLibGetString (HiiHandles[Index], FormSetHelp, String, &StringLength);\r
-    HiiLibNewString (HiiHandle, &TokenHelp, String);\r
+    String = HiiGetString (HiiHandles[Index], FormSetHelp, NULL);\r
+    ASSERT (String != NULL);\r
+    TokenHelp = HiiSetString (HiiHandle, 0, String, NULL);\r
+    FreePool (String);\r
 \r
     for (Count = 0; Count < MENU_ITEM_NUM; Count++) {\r
       if (FormSetClass & mDeviceManagerMenuItemTable[Count].Class) {\r
@@ -266,7 +254,6 @@ CallDeviceManager (
       }\r
     }\r
   }\r
-  FreePool (String);\r
 \r
   for (Index = 0; Index < MENU_ITEM_NUM; Index++) {\r
     //\r
@@ -327,16 +314,20 @@ CallDeviceManager (
   //\r
   // Cleanup dynamic created strings in HII database by reinstall the packagelist\r
   //\r
-  gHiiDatabase->RemovePackageList (gHiiDatabase, HiiHandle);\r
-  PackageList = HiiLibPreparePackageList (2, &mDeviceManagerGuid, DeviceManagerVfrBin, BdsDxeStrings);\r
-  ASSERT (PackageList != NULL);\r
-  Status = gHiiDatabase->NewPackageList (\r
-                           gHiiDatabase,\r
-                           PackageList,\r
-                           gDeviceManagerPrivate.DriverHandle,\r
-                           &gDeviceManagerPrivate.HiiHandle\r
-                           );\r
-  FreePool (PackageList);\r
+  HiiRemovePackages (HiiHandle);\r
+\r
+  gDeviceManagerPrivate.HiiHandle = HiiAddPackages (\r
+                                      &mDeviceManagerGuid,\r
+                                      gDeviceManagerPrivate.DriverHandle,\r
+                                      DeviceManagerVfrBin,\r
+                                      BdsDxeStrings,\r
+                                      NULL\r
+                                      );\r
+  if (gDeviceManagerPrivate.HiiHandle == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
+  } else {\r
+    Status = EFI_SUCCESS;\r
+  }\r
 \r
   for (Index = 0; Index < MENU_ITEM_NUM; Index++) {\r
     FreePool (UpdateData[Index].Data);\r
index 23809dd924c0cb3ca5b5309a25fdadf50545d1b7..ef39ca142ec5239c7a822d420944a07759a52048 100644 (file)
@@ -104,8 +104,8 @@ DeviceManagerCallback (
 \r
   This function registers HII packages to HII database.\r
 \r
-  @retval EFI_SUCCESS This function complete successfully.\r
-  @return Other value if failed to register HII packages.\r
+  @retval  EFI_SUCCESS           HII packages for the Device Manager were registered successfully.\r
+  @retval  EFI_OUT_OF_RESOURCES  HII packages for the Device Manager failed to be registered.\r
 \r
 **/\r
 EFI_STATUS\r
index fbfac0817801455d74aad8f519e3547d1da5dbf1..bda75e15ca7058bd2a8f89e397e1f2ce34a7e9c9 100644 (file)
@@ -183,7 +183,7 @@ FrontPageCallback (
     //\r
     // Collect the languages from what our current Language support is based on our VFR\r
     //\r
-    LanguageString = HiiLibGetSupportedLanguages (gFrontPagePrivate.HiiHandle);\r
+    LanguageString = HiiGetSupportedLanguages (gFrontPagePrivate.HiiHandle);\r
     ASSERT (LanguageString != NULL);\r
     //\r
     // Allocate working buffer for RFC 4646 language in supported LanguageString.\r
@@ -297,7 +297,6 @@ InitializeFrontPage (
   )\r
 {\r
   EFI_STATUS                  Status;\r
-  EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
   EFI_HII_UPDATE_DATA         UpdateData;\r
   IFR_OPTION                  *OptionList;\r
   CHAR8                       *LanguageString;\r
@@ -364,18 +363,15 @@ InitializeFrontPage (
     //\r
     // Publish our HII data\r
     //\r
-    PackageList = HiiLibPreparePackageList (2, &mFrontPageGuid, FrontPageVfrBin, BdsDxeStrings);\r
-    ASSERT (PackageList != NULL);\r
-\r
-    Status = gHiiDatabase->NewPackageList (\r
-                             gHiiDatabase,\r
-                             PackageList,\r
-                             gFrontPagePrivate.DriverHandle,\r
-                             &gFrontPagePrivate.HiiHandle\r
-                             );\r
-    FreePool (PackageList);\r
-    if (EFI_ERROR (Status)) {\r
-      return Status;\r
+    gFrontPagePrivate.HiiHandle = HiiAddPackages (\r
+                                    &mFrontPageGuid,\r
+                                    gFrontPagePrivate.DriverHandle,\r
+                                    FrontPageVfrBin,\r
+                                    BdsDxeStrings,\r
+                                    NULL\r
+                                    );\r
+    if (gFrontPagePrivate.HiiHandle == NULL) {\r
+      return EFI_OUT_OF_RESOURCES;\r
     }\r
   }\r
 \r
@@ -394,7 +390,7 @@ InitializeFrontPage (
   // Collect the languages from what our current Language support is based on our VFR\r
   //\r
   HiiHandle = gFrontPagePrivate.HiiHandle;\r
-  LanguageString = HiiLibGetSupportedLanguages (HiiHandle);\r
+  LanguageString = HiiGetSupportedLanguages (HiiHandle);\r
   ASSERT (LanguageString != NULL);\r
   //\r
   // Allocate working buffer for RFC 4646 language in supported LanguageString.\r
@@ -455,8 +451,7 @@ InitializeFrontPage (
       }\r
       ASSERT_EFI_ERROR (Status);\r
 \r
-      Token = 0;\r
-      Status = HiiLibNewString (HiiHandle, &Token, StringBuffer);\r
+      Token = HiiSetString (HiiHandle, 0, StringBuffer, NULL);\r
       FreePool (StringBuffer);\r
     } else {\r
       Token = gFrontPagePrivate.LanguageToken[OptionCount];\r
@@ -578,11 +573,13 @@ GetProducerString (
   OUT     CHAR16                    **String\r
   )\r
 {\r
-  EFI_STATUS      Status;\r
+  EFI_STRING      TmpString;\r
 \r
-  Status = HiiLibGetStringFromToken (ProducerGuid, Token, String);\r
-  if (EFI_ERROR (Status)) {\r
+  TmpString = HiiGetPackageString (ProducerGuid, Token, NULL);\r
+  if (TmpString == NULL) {\r
     *String = GetStringById (STRING_TOKEN (STR_MISSING_STRING));\r
+  } else {\r
+    *String = TmpString;\r
   }\r
 \r
   return EFI_SUCCESS;\r
@@ -698,7 +695,7 @@ UpdateFrontPageStrings (
         BiosVendor = (EFI_MISC_BIOS_VENDOR_DATA *) (DataHeader + 1);\r
         GetProducerString (&Record->ProducerName, BiosVendor->BiosVersion, &NewString);\r
         TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_BIOS_VERSION);\r
-        HiiLibSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString);\r
+        HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
         FreePool (NewString);\r
         Find[0] = TRUE;\r
       }\r
@@ -709,7 +706,7 @@ UpdateFrontPageStrings (
         SystemManufacturer = (EFI_MISC_SYSTEM_MANUFACTURER_DATA *) (DataHeader + 1);\r
         GetProducerString (&Record->ProducerName, SystemManufacturer->SystemProductName, &NewString);\r
         TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_COMPUTER_MODEL);\r
-        HiiLibSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString);\r
+        HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
         FreePool (NewString);\r
         Find[1] = TRUE;\r
       }\r
@@ -720,7 +717,7 @@ UpdateFrontPageStrings (
         ProcessorVersion = (EFI_PROCESSOR_VERSION_DATA *) (DataHeader + 1);\r
         GetProducerString (&Record->ProducerName, *ProcessorVersion, &NewString);\r
         TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_CPU_MODEL);\r
-        HiiLibSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString);\r
+        HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
         FreePool (NewString);\r
         Find[2] = TRUE;\r
       }\r
@@ -731,7 +728,7 @@ UpdateFrontPageStrings (
         ProcessorFrequency = (EFI_PROCESSOR_CORE_FREQUENCY_DATA *) (DataHeader + 1);\r
         ConvertProcessorToString (ProcessorFrequency, &NewString);\r
         TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_CPU_SPEED);\r
-        HiiLibSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString);\r
+        HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
         FreePool (NewString);\r
         Find[3] = TRUE;\r
       }\r
@@ -745,7 +742,7 @@ UpdateFrontPageStrings (
           &NewString\r
           );\r
         TokenToUpdate = STRING_TOKEN (STR_FRONT_PAGE_MEMORY_SIZE);\r
-        HiiLibSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString);\r
+        HiiSetString (gFrontPagePrivate.HiiHandle, TokenToUpdate, NewString, NULL);\r
         FreePool (NewString);\r
         Find[4] = TRUE;\r
       }\r
index c9e19c5ff05ace4c27ca33d39ab51961642e7ddb..fe3f0e0064d94c942d01b47a507fcbb618cec1cc 100644 (file)
@@ -24,7 +24,7 @@ EFI_GUID  mFontPackageGuid = {
 \r
 typedef struct {\r
   ///\r
-  /// This 4-bytes total array length is required by HiiLibPreparePackageList()\r
+  /// This 4-bytes total array length is required by HiiAddPackages()\r
   ///\r
   UINT32                 Length;\r
 \r
@@ -260,13 +260,14 @@ ExportFonts (
   )\r
 {\r
   EFI_HII_HANDLE               HiiHandle;\r
-  EFI_HII_PACKAGE_LIST_HEADER  *PackageList;\r
 \r
-  PackageList = HiiLibPreparePackageList (1, &mFontPackageGuid, &mFontBin);\r
-  ASSERT (PackageList != NULL);\r
-\r
-  gHiiDatabase->NewPackageList (gHiiDatabase, PackageList, mBdsImageHandle, &HiiHandle);\r
-  FreePool (PackageList);\r
+  HiiHandle = HiiAddPackages (\r
+                &mFontPackageGuid,\r
+                mBdsImageHandle,\r
+                &mFontBin,\r
+                NULL\r
+                );\r
+  ASSERT (HiiHandle != NULL);\r
 }\r
 \r
 /**\r
index a509a85df11131603eff7f1d947d678186e23a8a..ccabd3239dd7064646c6c6436a604c4a21a98bae 100644 (file)
@@ -25,34 +25,19 @@ EFI_GUID mBdsStringPackGuid = {
 /**\r
   Initialize HII global accessor for string support\r
 \r
-  @retval  EFI_SUCCESS  String support initialize success.\r
-\r
 **/\r
-EFI_STATUS\r
+VOID\r
 InitializeStringSupport (\r
   VOID\r
   )\r
 {\r
-  EFI_STATUS                   Status;\r
-  EFI_HII_PACKAGE_LIST_HEADER  *PackageList;\r
-\r
-  Status = gBS->LocateProtocol (&gEfiHiiDatabaseProtocolGuid, NULL, (VOID **) &gHiiDatabase);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
-  PackageList = HiiLibPreparePackageList (1, &mBdsStringPackGuid, &BdsDxeStrings);\r
-  ASSERT (PackageList != NULL);\r
-\r
-  Status = gHiiDatabase->NewPackageList (\r
-                           gHiiDatabase,\r
-                           PackageList,\r
-                           mBdsImageHandle,\r
-                           &gStringPackHandle\r
-                           );\r
-\r
-  FreePool (PackageList);\r
-  return Status;\r
+  gStringPackHandle = HiiAddPackages (\r
+                         &mBdsStringPackGuid,\r
+                         mBdsImageHandle,\r
+                         BdsDxeStrings,\r
+                         NULL\r
+                         );\r
+  ASSERT (gStringPackHandle != NULL);\r
 }\r
 \r
 /**\r
@@ -70,10 +55,5 @@ GetStringById (
   IN  EFI_STRING_ID   Id\r
   )\r
 {\r
-  CHAR16 *String;\r
-\r
-  String = NULL;\r
-  HiiLibGetStringFromHandle (gStringPackHandle, Id, &String);\r
-\r
-  return String;\r
+  return HiiGetString (gStringPackHandle, Id, NULL);\r
 }\r
index 81a7a6035acea3459c695e007c971d82a96b8c71..4b8efa4345c5b1c019144c46b916eb8b1f1a285f 100644 (file)
@@ -52,10 +52,8 @@ GetStringById (
 /**\r
   Initialize HII global accessor for string support\r
 \r
-  @retval  EFI_SUCCESS  String support initialize success.\r
-\r
 **/\r
-EFI_STATUS\r
+VOID\r
 InitializeStringSupport (\r
   VOID\r
   );\r
index 64a26c66657529c73c69011a5cb8f7e9094b7499..018917fd0aec687acc3cb45f8a39f3cba627946b 100644 (file)
@@ -409,17 +409,19 @@ UpdateDeviceSelectPage (
   // then the 'first refresh' string will be replaced by the 'refresh' string, and the two strings content are same after the replacement\r
   //\r
   NewStringToken = STRING_TOKEN (STR_FIRST_REFRESH);\r
-  HiiLibGetStringFromHandle (Private->RegisteredHandle, STRING_TOKEN (STR_REFRESH), &NewString);\r
+  NewString = HiiGetString (Private->RegisteredHandle, STRING_TOKEN (STR_REFRESH), NULL);\r
   ASSERT (NewString != NULL);\r
-  Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, NewString);\r
-  ASSERT_EFI_ERROR (Status);\r
+  if (HiiSetString (Private->RegisteredHandle, NewStringToken, NewString, NULL) == 0) {\r
+    ASSERT (FALSE);\r
+  }\r
   FreePool (NewString);\r
 \r
   NewStringToken = STRING_TOKEN (STR_FIRST_REFRESH_HELP);\r
-  HiiLibGetStringFromHandle (Private->RegisteredHandle, STRING_TOKEN (STR_REFRESH_HELP), &NewString);\r
+  NewString = HiiGetString (Private->RegisteredHandle, STRING_TOKEN (STR_REFRESH_HELP), NULL);\r
   ASSERT (NewString != NULL);\r
-  Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, NewString);\r
-  ASSERT_EFI_ERROR (Status);\r
+  if (HiiSetString (Private->RegisteredHandle, NewStringToken, NewString, NULL) == 0) {\r
+    ASSERT (FALSE);\r
+  }\r
   FreePool (NewString);\r
 \r
   //\r
@@ -504,13 +506,8 @@ UpdateDeviceSelectPage (
     }\r
     StrCat (NewString, ControllerName);\r
 \r
-    NewStringToken = mControllerToken[Index];\r
-    if (NewStringToken == 0) {\r
-      Status = HiiLibNewString (Private->RegisteredHandle, &NewStringToken, NewString);\r
-    } else {\r
-      Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, NewString);\r
-    }\r
-    ASSERT_EFI_ERROR (Status);\r
+    NewStringToken = HiiSetString (Private->RegisteredHandle, mControllerToken[Index], NewString, NULL);\r
+    ASSERT (NewStringToken != 0);\r
     FreePool (NewString);\r
     //\r
     // Save the device path string toke for next access use\r
@@ -799,7 +796,7 @@ UpdateBindingDriverSelectPage (
       //\r
       // give a default name\r
       //\r
-      HiiLibGetStringFromHandle (Private->RegisteredHandle, STRING_TOKEN (STR_DRIVER_DEFAULT_NAME), &DriverName);\r
+      DriverName = HiiGetString (Private->RegisteredHandle, STRING_TOKEN (STR_DRIVER_DEFAULT_NAME), NULL);\r
       ASSERT (DriverName != NULL);\r
       FreeDriverName = TRUE;  // the DriverName string need to free pool\r
     }\r
@@ -821,14 +818,9 @@ UpdateBindingDriverSelectPage (
       mLastSavedDriverImageNum++;\r
     }\r
     StrCat (NewString, DriverName);\r
-    NewStringToken = mDriverImageToken[Index];\r
-    if (NewStringToken == 0) {\r
-      Status = HiiLibNewString (Private->RegisteredHandle, &NewStringToken, NewString);\r
-    } else {\r
-      Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, NewString);\r
-    }\r
+    NewStringToken = HiiSetString (Private->RegisteredHandle, mDriverImageToken[Index], NewString, NULL);\r
+    ASSERT (NewStringToken != 0);\r
     mDriverImageToken[Index] = NewStringToken;\r
-    ASSERT_EFI_ERROR (Status);\r
     FreePool (NewString);\r
     if (FreeDriverName) {\r
       FreePool (DriverName);\r
@@ -842,14 +834,9 @@ UpdateBindingDriverSelectPage (
     NewString = AllocateZeroPool (StrSize (DriverName));\r
     ASSERT (NewString != NULL); \r
     StrCat (NewString, DriverName);\r
-    NewStringHelpToken = mDriverImageFilePathToken[Index];\r
-    if (NewStringHelpToken == 0) {\r
-      Status = HiiLibNewString (Private->RegisteredHandle, &NewStringHelpToken, NewString);\r
-    } else {\r
-      Status = HiiLibSetString (Private->RegisteredHandle, NewStringHelpToken, NewString);\r
-    }\r
+    NewStringHelpToken = HiiSetString (Private->RegisteredHandle, mDriverImageFilePathToken[Index], NewString, NULL);\r
+    ASSERT (NewStringHelpToken != 0);\r
     mDriverImageFilePathToken[Index] = NewStringHelpToken;\r
-    ASSERT_EFI_ERROR (Status);\r
     FreePool (NewString);\r
     FreePool (DriverName);\r
 \r
@@ -1304,8 +1291,9 @@ PlatOverMngrCallback (
     // Update page title string\r
     //\r
     NewStringToken = STRING_TOKEN (STR_TITLE);\r
-    Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, L"First, Select the controller by device path");\r
-    ASSERT_EFI_ERROR (Status);\r
+    if (HiiSetString (Private->RegisteredHandle, NewStringToken, L"First, Select the controller by device path", NULL) == 0) {\r
+      ASSERT (FALSE);\r
+    }\r
   }\r
 \r
   if (((KeyValue >= KEY_VALUE_DEVICE_OFFSET) && (KeyValue < KEY_VALUE_DEVICE_MAX)) || (KeyValue == KEY_VALUE_ORDER_GOTO_PREVIOUS)) {\r
@@ -1317,8 +1305,9 @@ PlatOverMngrCallback (
     // Update page title string\r
     //\r
     NewStringToken = STRING_TOKEN (STR_TITLE);\r
-    Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, L"Second, Select drivers for the previous selected controller");\r
-    ASSERT_EFI_ERROR (Status);\r
+    if (HiiSetString (Private->RegisteredHandle, NewStringToken, L"Second, Select drivers for the previous selected controller", NULL) == 0) {\r
+      ASSERT (FALSE);\r
+    }\r
   }\r
 \r
   if (KeyValue == KEY_VALUE_DRIVER_GOTO_ORDER) {\r
@@ -1327,8 +1316,9 @@ PlatOverMngrCallback (
     // Update page title string\r
     //\r
     NewStringToken = STRING_TOKEN (STR_TITLE);\r
-    Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, L"Finally, Set the priority order for the drivers and save them");\r
-    ASSERT_EFI_ERROR (Status);\r
+    if (HiiSetString (Private->RegisteredHandle, NewStringToken, L"Finally, Set the priority order for the drivers and save them", NULL) == 0) {\r
+      ASSERT (FALSE);\r
+    }\r
   }\r
 \r
   if (KeyValue == KEY_VALUE_ORDER_SAVE_AND_EXIT) {\r
@@ -1383,22 +1373,8 @@ PlatOverMngrInit (
   )\r
 {\r
   EFI_STATUS                  Status;\r
-  EFI_HII_DATABASE_PROTOCOL   *HiiDatabase;\r
-  EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
   EFI_FORM_BROWSER2_PROTOCOL  *FormBrowser2;\r
   \r
-  //\r
-  // There should only be one HII protocol\r
-  //\r
-  Status = gBS->LocateProtocol (\r
-                  &gEfiHiiDatabaseProtocolGuid,\r
-                  NULL,\r
-                  (VOID **) &HiiDatabase\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
-\r
   //\r
   // There should only be one Form Configuration protocol\r
   //\r
@@ -1439,23 +1415,15 @@ PlatOverMngrInit (
   //\r
   // Publish our HII data\r
   //\r
-  PackageList = HiiLibPreparePackageList (\r
-                  2,\r
-                  &mPlatformOverridesManagerGuid,\r
-                  VfrBin,\r
-                  PlatOverMngrStrings\r
-                  );\r
-  ASSERT (PackageList != NULL);\r
-\r
-  Status = HiiDatabase->NewPackageList (\r
-                           HiiDatabase,\r
-                           PackageList,\r
-                           mCallbackInfo->DriverHandle,\r
-                           &mCallbackInfo->RegisteredHandle\r
-                           );\r
-  FreePool (PackageList);\r
-\r
-  if (EFI_ERROR (Status)) {\r
+  mCallbackInfo->RegisteredHandle = HiiAddPackages (\r
+                                     &mPlatformOverridesManagerGuid,\r
+                                     mCallbackInfo->DriverHandle,\r
+                                     VfrBin,\r
+                                     PlatOverMngrStrings,\r
+                                     NULL\r
+                                     );\r
+  if (mCallbackInfo->RegisteredHandle == NULL) {\r
+    Status = EFI_OUT_OF_RESOURCES;\r
     goto Finish;\r
   }\r
 \r
@@ -1494,11 +1462,8 @@ PlatOverMngrInit (
                            NULL\r
                            );\r
 \r
-  HiiDatabase->RemovePackageList (HiiDatabase, mCallbackInfo->RegisteredHandle);\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    goto Finish;\r
-  }\r
+  HiiRemovePackages (mCallbackInfo->RegisteredHandle);\r
+  Status = EFI_SUCCESS;\r
 \r
 Finish:\r
   if (mCallbackInfo->DriverHandle != NULL) {\r
index 7a8ee00d3c69bb083ff149e1d3c9ef3952ca2e65..32ea3cfb8a4af858f5c7eea3678b91c5393c1279 100644 (file)
@@ -318,7 +318,6 @@ InstallDefaultKeyboardLayout (
   EFI_STATUS                   Status;\r
   EFI_HII_DATABASE_PROTOCOL    *HiiDatabase;\r
   EFI_HII_HANDLE               HiiHandle;\r
-  EFI_HII_PACKAGE_LIST_HEADER  *PackageList;\r
 \r
   //\r
   // Locate Hii database protocol\r
@@ -335,13 +334,14 @@ InstallDefaultKeyboardLayout (
   //\r
   // Install Keyboard Layout package to HII database\r
   //\r
-  PackageList = HiiLibPreparePackageList (1, &mUsbKeyboardLayoutPackageGuid, &mUsbKeyboardLayoutBin);\r
-  ASSERT (PackageList != NULL);\r
-\r
-  Status = HiiDatabase->NewPackageList (HiiDatabase, PackageList, UsbKeyboardDevice->ControllerHandle, &HiiHandle);\r
-  FreePool (PackageList);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
+  HiiHandle = HiiAddPackages (\r
+                &mUsbKeyboardLayoutPackageGuid,\r
+                UsbKeyboardDevice->ControllerHandle,\r
+                &mUsbKeyboardLayoutBin,\r
+                NULL\r
+                );\r
+  if (HiiHandle == NULL) {\r
+    return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
   //\r
index 37b59bf3760e2dc63841302d5a09230ba11cfd2e..730f450fc5ac102ae59879b36206207082696a3a 100644 (file)
 \r
 \r
 /**\r
-  Assemble EFI_HII_PACKAGE_LIST according to the passed in packages.\r
-\r
-  If GuidId is NULL, then ASSERT.\r
-  If not enough resource to complete the operation, then ASSERT.\r
-\r
-  @param  NumberOfPackages       Number of packages.\r
-  @param  GuidId                 Package GUID.\r
-  @param  ...                    Variable argument list for packages to be assembled.\r
-\r
-  @return Pointer of EFI_HII_PACKAGE_LIST_HEADER.\r
-\r
-**/\r
-EFI_HII_PACKAGE_LIST_HEADER *\r
-EFIAPI\r
-HiiLibPreparePackageList (\r
-  IN UINTN                    NumberOfPackages,\r
-  IN CONST EFI_GUID                 *GuidId,\r
-  ...\r
-  )\r
-;\r
-\r
-/**\r
-  This function allocates pool for an EFI_HII_PACKAGE_LIST structure\r
-  with additional space that is big enough to host all packages described by the variable \r
-  argument list of package pointers.  The allocated structure is initialized using NumberOfPackages, \r
-  GuidId,  and the variable length argument list of package pointers.\r
-\r
-  Then, EFI_HII_PACKAGE_LIST will be register to the default System HII Database. The\r
-  Handle to the newly registered Package List is returned throught HiiHandle.\r
+  Registers a list of packages in the HII Database and returns the HII Handle\r
+  associated with that registration.  If an HII Handle has already been registered\r
+  with the same PackageListGuid, then NULL is returned.  If there are not enough \r
+  resources to perform the registration, then NULL is returned.  If an empty list \r
+  of packages is passed in, then NULL is returned.  If the size of the list of \r
+  package is 0, then NULL is returned.\r
 \r
-  If HiiHandle is NULL, then ASSERT.\r
+  The variable arguments are pointers which point to package header that defined \r
+  by UEFI VFR compiler and StringGather tool.\r
 \r
-  @param  NumberOfPackages    The number of HII packages to register.\r
-  @param  GuidId              Package List GUID ID.\r
-  @param  DriverHandle        Optional. If not NULL, the DriverHandle on which an instance of DEVICE_PATH_PROTOCOL is installed.\r
-                              This DriverHandle uniquely defines the device that the added packages are associated with.\r
-  @param  HiiHandle           On output, the HiiHandle is update with the handle which can be used to retrieve the Package \r
-                              List later. If the functions failed to add the package to the default HII database, this value will\r
-                              be set to NULL.\r
-  @param  ...                 The variable argument list describing all HII Package.\r
+  #pragma pack (push, 1)\r
+  typedef struct {\r
+    UINT32                  BinaryLength;\r
+    EFI_HII_PACKAGE_HEADER  PackageHeader;\r
+  } EDKII_AUTOGEN_PACKAGES_HEADER;\r
+  #pragma pack (pop)\r
+  \r
+  @param[in]  PackageListGuid  The GUID of the package list.\r
+  @param[in]  DeviceHandle     If not NULL, the Device Handle on which \r
+                               an instance of DEVICE_PATH_PROTOCOL is installed.\r
+                               This Device Handle uniquely defines the device that \r
+                               the added packages are associated with.\r
+  @param[in]  ...              The variable argument list that contains pointers \r
+                               to packages terminated by a NULL.\r
 \r
-  @return  EFI_SUCCESS         If the packages are successfully added to the default HII database.\r
-  @return  EFI_OUT_OF_RESOURCE Not enough resource to complete the operation.\r
+  @retval NULL   A HII Handle has already been registered in the HII Database with\r
+                 the same PackageListGuid.\r
+  @retval NULL   The HII Handle could not be created.\r
+  @retval NULL   An empty list of packages was passed in.\r
+  @retval NULL   All packages are empty.\r
+  @retval Other  The HII Handle associated with the newly registered package list.\r
 \r
 **/\r
-EFI_STATUS\r
+EFI_HII_HANDLE\r
 EFIAPI\r
-HiiLibAddPackages (\r
-  IN       UINTN               NumberOfPackages,\r
-  IN CONST EFI_GUID            *GuidId,\r
-  IN       EFI_HANDLE          DriverHandle, OPTIONAL\r
-  OUT      EFI_HII_HANDLE      *HiiHandle,\r
+HiiAddPackages (\r
+  IN CONST EFI_GUID    *PackageListGuid,\r
+  IN       EFI_HANDLE  DeviceHandle  OPTIONAL,\r
   ...\r
   )\r
 ;\r
 \r
 /**\r
-  Removes a package list from the default HII database.\r
+  Removes a package list from the HII database.\r
 \r
   If HiiHandle is NULL, then ASSERT.\r
-  If HiiHandle is not a valid EFI_HII_HANDLE in the default HII database, then ASSERT.\r
+  If HiiHandle is not a valid EFI_HII_HANDLE in the HII database, then ASSERT.\r
 \r
-  @param  HiiHandle                The handle that was previously registered to the data base that is requested for removal.\r
-                                             List later.\r
+  @param[in]  HiiHandle   The handle that was previously registered in the HII database\r
 \r
 **/\r
 VOID\r
 EFIAPI\r
-HiiLibRemovePackages (\r
+HiiRemovePackages (\r
   IN      EFI_HII_HANDLE      HiiHandle\r
   )\r
 ;\r
 \r
 /**\r
-  This function adds the string into String Package of each language\r
-  supported by the package list.\r
-\r
-  If String is NULL, then ASSERT.\r
-  If StringId is NULL, the ASSERT.\r
-  If PackageList could not be found in the default HII database, then ASSERT.\r
-\r
-  @param  PackageList            Handle of the package list where this string will\r
-                                            be added.\r
-  @param  StringId               On return, contains the new strings id, which is\r
-                                          unique within PackageList.\r
-  @param  String                 Points to the new null-terminated string.\r
-\r
-  @retval EFI_SUCCESS             The new string was added successfully.\r
-  @retval EFI_OUT_OF_RESOURCES   Could not add the string due to lack of resources.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibNewString (\r
-  IN  EFI_HII_HANDLE                  PackageList,\r
-  OUT EFI_STRING_ID                   *StringId,\r
-  IN  CONST EFI_STRING                String\r
-  )\r
-;\r
-\r
-/**\r
-  This function update the specified string in String Package of each language\r
-  supported by the package list.\r
-\r
-  If String is NULL, then ASSERT.\r
-  If PackageList could not be found in the default HII database, then ASSERT.\r
-  If StringId is not found in PackageList, then ASSERT.\r
-\r
-  @param  PackageList            Handle of the package list where this string will\r
-                                            be added.\r
-  @param  StringId               Ths String Id to be updated.\r
-  @param  String                 Points to the new null-terminated string.\r
-\r
-  @retval EFI_SUCCESS            The new string was added successfully.\r
-  @retval EFI_OUT_OF_RESOURCES   Could not add the string due to lack of resources.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibSetString (\r
-  IN  EFI_HII_HANDLE                  PackageList,\r
-  IN  EFI_STRING_ID                   StringId,\r
-  IN  CONST EFI_STRING                String\r
-  )\r
-;\r
-\r
-/**\r
-  This function try to retrieve string from String package of current language.\r
-  If fails, it try to retrieve string from String package of first language it support.\r
-\r
-  If StringSize is NULL, then ASSERT.\r
-  If String is NULL and *StringSize is not 0, then ASSERT.\r
-  If PackageList could not be found in the default HII database, then ASSERT.\r
-  If StringId is not found in PackageList, then ASSERT.\r
-\r
-  @param  PackageList     The package list in the HII database to search for\r
-                                     the specified string.\r
-  @param  StringId          The string's id, which is unique within\r
-                                      PackageList.\r
-  @param  String             Points to the new null-terminated string.\r
-  @param  StringSize       On entry, points to the size of the buffer pointed\r
-                                 to by String, in bytes. On return, points to the\r
-                                 length of the string, in bytes.\r
-\r
-  @retval EFI_SUCCESS            The string was returned successfully.\r
-  @retval EFI_NOT_FOUND          The string specified by StringId is not available.\r
-  @retval EFI_BUFFER_TOO_SMALL   The buffer specified by StringLength is too small\r
-                                 to hold the string.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibGetString (\r
-  IN  EFI_HII_HANDLE                  PackageList,\r
-  IN  EFI_STRING_ID                   StringId,\r
-  OUT EFI_STRING                      String,\r
-  IN  OUT UINTN                       *StringSize\r
-  )\r
-;\r
-\r
-/**\r
-  Get string specified by StringId form the HiiHandle. The caller\r
-  is responsible to free the *String.\r
-\r
-  If String is NULL, then ASSERT.\r
-  If HiiHandle could not be found in the default HII database, then ASSERT.\r
-  If StringId is not found in PackageList, then ASSERT.\r
-\r
-  @param  HiiHandle              The HII handle of package list.\r
-  @param  StringId               The String ID.\r
-  @param  String                 The output string.\r
-\r
-  @retval EFI_NOT_FOUND          String is not found.\r
-  @retval EFI_SUCCESS            Operation is successful.\r
-  @retval EFI_OUT_OF_RESOURCES   There is not enought memory in the system.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibGetStringFromHandle (\r
-  IN  EFI_HII_HANDLE                  HiiHandle,\r
-  IN  EFI_STRING_ID                   StringId,\r
-  OUT EFI_STRING                      *String\r
-  )\r
-;\r
-\r
-/**\r
-  Get the string given the StringId and String package Producer's Guid. The caller\r
-  is responsible to free the *String.\r
-\r
-  If PackageList with the matching ProducerGuid is not found, then ASSERT.\r
-  If PackageList with the matching ProducerGuid is found but no String is\r
-  specified by StringId is found, then ASSERT.\r
+  This function create a new string in String Package or updates an existing \r
+  string in a String Package.  If StringId is 0, then a new string is added to\r
+  a String Package.  If StringId is not zero, then a string in String Package is\r
+  updated.  If SupportedLanguages is NULL, then the string is added or updated\r
+  for all the languages that the String Package supports.  If SupportedLanguages\r
+  is not NULL, then the string is added or updated for the set of languages \r
+  specified by SupportedLanguages.\r
+    \r
+  If HiiHandle is NULL, then ASSERT().\r
+  If String is NULL, then ASSERT().\r
 \r
-  @param  ProducerGuid           The Guid of String package list.\r
-  @param  StringId               The String ID.\r
-  @param  String                 The output string.\r
+  @param[in]  HiiHandle           A handle that was previously registered in the \r
+                                  HII Database.\r
+  @param[in]  StringId            If zero, then a new string is created in the \r
+                                  String Package associated with HiiHandle.  If \r
+                                  non-zero, then the string specified by StringId \r
+                                  is updated in the String Package  associated \r
+                                  with HiiHandle. \r
+  @param[in]  String              A pointer to the Null-terminated Unicode string \r
+                                  to add or update in the String Package associated \r
+                                  with HiiHandle.\r
+  @param[in]  SupportedLanguages  A pointer to a Null-terminated ASCII string of \r
+                                  language codes.  If this parameter is NULL, then \r
+                                  String is added or updated in the String Package \r
+                                  associated with HiiHandle for all the languages \r
+                                  that the String Package supports.  If this \r
+                                  parameter is not NULL, then then String is added \r
+                                  or updated in the String Package associated with \r
+                                  HiiHandle for the set oflanguages specified by \r
+                                  SupportedLanguages.  The format of \r
+                                  SupportedLanguages must follow the language \r
+                                  format assumed the HII Database.\r
 \r
-  @retval EFI_SUCCESS            Operation is successful.\r
-  @retval EFI_OUT_OF_RESOURCES   There is not enought memory in the system.\r
+  @retval 0      The string could not be added or updated in the String Package.\r
+  @retval Other  The EFI_STRING_ID of the newly added or updated string.\r
 \r
 **/\r
-EFI_STATUS\r
+EFI_STRING_ID\r
 EFIAPI\r
-HiiLibGetStringFromToken (\r
-  IN  EFI_GUID                        *ProducerGuid,\r
-  IN  EFI_STRING_ID                   StringId,\r
-  OUT EFI_STRING                      *String\r
+HiiSetString (\r
+  IN EFI_HII_HANDLE    HiiHandle,\r
+  IN EFI_STRING_ID     StringId,            OPTIONAL\r
+  IN CONST EFI_STRING  String,\r
+  IN CONST CHAR8       *SupportedLanguages  OPTIONAL\r
   )\r
 ;\r
 \r
 /**\r
-  Determines the handles that are currently active in the database.\r
-  It's the caller's responsibility to free handle buffer.\r
-\r
-  If HandleBufferLength is NULL, then ASSERT.\r
-  If HiiHandleBuffer is NULL, then ASSERT.\r
+  Retrieves a string from a string package in a specific language.  If the language\r
+  is not specified, then a string from a string package in the current platform \r
+  language is retrieved.  If the string can not be retrieved using the specified \r
+  language or the current platform language, then the string is retrieved from \r
+  the string package in the first language the string package supports.  The \r
+  returned string is allocated using AllocatePool().  The caller is responsible \r
+  for freeing the allocated buffer using FreePool().\r
+  \r
+  If HiiHandle is NULL, then ASSERT().\r
+  If StringId is 0, then ASSET.\r
 \r
-  @param  HandleBufferLength     On input, a pointer to the length of the handle\r
-                                 buffer. On output, the length of the handle buffer\r
-                                 that is required for the handles found.\r
-  @param  HiiHandleBuffer        Pointer to an array of Hii Handles returned.\r
+  @param[in]  HiiHandle  A handle that was previously registered in the HII Database.\r
+  @param[in]  StringId   The identifier of the string to retrieved from the string \r
+                         package associated with HiiHandle.\r
+  @param[in]  Language   The language of the string to retrieve.  If this parameter \r
+                         is NULL, then the current platform language is used.  The \r
+                         format of Language must follow the language format assumed \r
+                         the HII Database.\r
 \r
-  @retval EFI_SUCCESS            Get an array of Hii Handles successfully.\r
+  @retval NULL   The string specified by StringId is not present in the string package.\r
+  @retval Other  The string was returned.\r
 \r
 **/\r
-EFI_STATUS\r
+EFI_STRING\r
 EFIAPI\r
-HiiLibGetHiiHandles (\r
-  IN OUT UINTN                     *HandleBufferLength,\r
-  OUT    EFI_HII_HANDLE            **HiiHandleBuffer\r
+HiiGetString (\r
+  IN EFI_HII_HANDLE  HiiHandle,\r
+  IN EFI_STRING_ID   StringId,\r
+  IN CONST CHAR8     *Language  OPTIONAL\r
   )\r
 ;\r
 \r
 /**\r
-  Extract Hii package list GUID for given HII handle.\r
-\r
-  If HiiHandle could not be found in the default HII database, then ASSERT.\r
-  If Guid is NULL, then ASSERT.\r
+  Retrieves a string from a string package names by GUID in a specific language.  \r
+  If the language is not specified, then a string from a string package in the \r
+  current platform  language is retrieved.  If the string can not be retrieved \r
+  using the specified language or the current platform language, then the string \r
+  is retrieved from the string package in the first language the string package \r
+  supports.  The returned string is allocated using AllocatePool().  The caller \r
+  is responsible for freeing the allocated buffer using FreePool().\r
+  \r
+  If PackageListGuid is NULL, then ASSERT().\r
+  If StringId is 0, then ASSERT.\r
 \r
-  @param  Handle              Hii handle\r
-  @param  Guid                Package list GUID\r
+  @param[in]  PackageListGuid  The GUID of a package list that was previously \r
+                               registered in the HII Database.\r
+  @param[in]  StringId         The identifier of the string to retrieved from the \r
+                               string package associated with PackageListGuid.\r
+  @param[in]  Language         The language of the string to retrieve.  If this \r
+                               parameter is NULL, then the current platform \r
+                               language is used.  The format of Language must \r
+                               follow the language format assumed the HII Database.\r
 \r
-  @retval EFI_SUCCESS            Successfully extract GUID from Hii database.\r
+  @retval NULL   The package list specified by PackageListGuid is not present in the\r
+                 HII Database.\r
+  @retval NULL   The string specified by StringId is not present in the string package.\r
+  @retval Other  The string was returned.\r
 \r
 **/\r
-EFI_STATUS\r
+EFI_STRING\r
 EFIAPI\r
-HiiLibExtractGuidFromHiiHandle (\r
-  IN      EFI_HII_HANDLE      Handle,\r
-  OUT     EFI_GUID            *Guid\r
+HiiGetPackageString (\r
+  IN CONST EFI_GUID  *PackageListGuid,\r
+  IN EFI_STRING_ID   StringId,\r
+  IN CONST CHAR8     *Language  OPTIONAL\r
   )\r
 ;\r
 \r
 /**\r
-  Find HII Handle in the default HII database associated with given Device Path.\r
-\r
-  If DevicePath is NULL, then ASSERT.\r
+  Retrieves the array of all the HII Handles or the HII handle of a specific\r
+  package list in the HII Database.\r
+  This array is terminated with a NULL HII Handle.\r
+  This function allocates the returned array using AllocatePool().\r
+  The caller is responsible for freeing the array with FreePool().\r
 \r
-  @param  DevicePath             Device Path associated with the HII package list\r
-                                 handle.\r
+  @param[in]  PackageListGuid  An optional parameter that is used to request \r
+                               an HII Handle that is associatd with a specific\r
+                               Package List GUID.  If this parameter is NULL\r
+                               then all the HII Handles in the HII Database\r
+                               are returned.  If this parameter is not NULL\r
+                               then at most 1 HII Handle is returned.\r
 \r
-  @retval Handle                 HII package list Handle associated with the Device\r
-                                        Path.\r
-  @retval NULL                   Hii Package list handle is not found.\r
+  @retval NULL   No HII handles were found in the HII database\r
+  @retval NULL   The array of HII Handles could not be retrieved\r
+  @retval Other  A pointer to the NULL terminated array of HII Handles\r
 \r
 **/\r
-EFI_HII_HANDLE\r
+EFI_HII_HANDLE *\r
 EFIAPI\r
-HiiLibDevicePathToHiiHandle (\r
-  IN EFI_DEVICE_PATH_PROTOCOL   *DevicePath\r
+HiiGetHiiHandles (\r
+  IN CONST EFI_GUID  *PackageListGuid  OPTIONAL\r
   )\r
 ;\r
 \r
-\r
 /**\r
   Get next language from language code list (with separator ';').\r
 \r
@@ -313,138 +239,30 @@ HiiLibGetNextLanguage (
 ;\r
 \r
 /**\r
-  This function returns the list of supported languages, in the format specified\r
-  in UEFI specification Appendix M.\r
-\r
-  If HiiHandle is not a valid Handle in the default HII database, then ASSERT.\r
-\r
-  @param  HiiHandle              The HII package list handle.\r
-\r
-  @retval   !NULL  The supported languages.\r
-  @retval   NULL    If Supported Languages can not be retrived.\r
-\r
-**/\r
-CHAR8 *\r
-EFIAPI\r
-HiiLibGetSupportedLanguages (\r
-  IN EFI_HII_HANDLE           HiiHandle\r
-  )\r
-;\r
-\r
-/**\r
-  This function returns the list of supported 2nd languages, in the format specified\r
-  in UEFI specification Appendix M.\r
-\r
-  If HiiHandle is not a valid Handle in the default HII database, then ASSERT.\r
-  If not enough resource to complete the operation, then ASSERT.\r
-\r
-  @param  HiiHandle              The HII package list handle.\r
-  @param  FirstLanguage          Pointer to language name buffer.\r
+  Retrieves a pointer to the a Null-terminated ASCII string containing the list \r
+  of languages that an HII handle in the HII Database supports.  The returned \r
+  string is allocated using AllocatePool().  The caller is responsible for freeing\r
+  the returned string using FreePool().  The format of the returned string follows\r
+  the language format assumed the HII Database.\r
   \r
-  @return The supported languages.\r
-\r
-**/\r
-CHAR8 *\r
-EFIAPI\r
-HiiLibGetSupportedSecondaryLanguages (\r
-  IN EFI_HII_HANDLE           HiiHandle,\r
-  IN CONST CHAR8              *FirstLanguage\r
-  )\r
-;\r
-\r
-\r
-/**\r
-  This function returns the number of supported languages on HiiHandle.\r
-\r
-  If HiiHandle is not a valid Handle in the default HII database, then ASSERT.\r
-  If not enough resource to complete the operation, then ASSERT.\r
+  If HiiHandle is NULL, then ASSERT().\r
 \r
-  @param  HiiHandle              The HII package list handle.\r
+  @param[in]  HiiHandle  A handle that was previously registered in the HII Database.\r
 \r
-  @return The  number of supported languages.\r
+  @retval NULL   HiiHandle is not registered in the HII database\r
+  @retval NULL   There are not enough resources available to retrieve the suported \r
+                 languages.\r
+  @retval NULL   The list of suported languages could not be retrieved.\r
+  @retval Other  A pointer to the Null-terminated ASCII string of supported languages.\r
 \r
 **/\r
-UINT16\r
+CHAR8 *\r
 EFIAPI\r
-HiiLibGetSupportedLanguageNumber (\r
+HiiGetSupportedLanguages (\r
   IN EFI_HII_HANDLE           HiiHandle\r
   )\r
 ;\r
 \r
-/**\r
-  Exports the contents of one or all package lists in the HII database into a buffer.\r
-\r
-  If Handle is not NULL and not a valid EFI_HII_HANDLE registered in the database, \r
-  then ASSERT.\r
-  If PackageListHeader is NULL, then ASSERT.\r
-  If PackageListSize is NULL, then ASSERT.\r
-\r
-  @param  Handle                 The HII Handle.\r
-  @param  PackageListHeader      A pointer to a buffer that will contain the results of \r
-                                 the export function.\r
-  @param  PackageListSize        On output, the length of the buffer that is required for the exported data.\r
-\r
-  @retval EFI_SUCCESS            Package exported.\r
-\r
-  @retval EFI_OUT_OF_RESOURCES   Not enought memory to complete the operations.\r
-\r
-**/\r
-EFI_STATUS \r
-EFIAPI\r
-HiiLibExportPackageLists (\r
-  IN EFI_HII_HANDLE                    Handle,\r
-  OUT EFI_HII_PACKAGE_LIST_HEADER      **PackageListHeader,\r
-  OUT UINTN                            *PackageListSize\r
-  )\r
-;\r
-\r
-/**\r
-  \r
-  This function returns a list of the package handles of the   \r
-  specified type that are currently active in the HII database. The   \r
-  pseudo-type EFI_HII_PACKAGE_TYPE_ALL will cause all package   \r
-  handles to be listed.\r
-\r
-  If HandleBufferLength is NULL, then ASSERT.\r
-  If HandleBuffer is NULL, the ASSERT.\r
-  If PackageType is EFI_HII_PACKAGE_TYPE_GUID and PackageGuid is\r
-  NULL, then ASSERT.\r
-  If PackageType is not EFI_HII_PACKAGE_TYPE_GUID and PackageGuid is not\r
-  NULL, then ASSERT.\r
-  \r
-  \r
-  @param PackageType          Specifies the package type of the packages\r
-                              to list or EFI_HII_PACKAGE_TYPE_ALL for\r
-                              all packages to be listed.\r
-  \r
-  @param PackageGuid          If PackageType is\r
-                              EFI_HII_PACKAGE_TYPE_GUID, then this is\r
-                              the pointer to the GUID which must match\r
-                              the Guid field of\r
-                              EFI_HII_PACKAGE_GUID_HEADER. Otherwise, it\r
-                              must be NULL.\r
-  \r
-  @param HandleBufferLength   On output, the length of the handle buffer\r
-                              that is required for the handles found.\r
-\r
-  @param HandleBuffer         On output, an array of EFI_HII_HANDLE  instances returned.\r
-                              The caller is responcible to free this pointer allocated.\r
-\r
-  @retval EFI_SUCCESS           The matching handles are outputed successfully.\r
-                                HandleBufferLength is updated with the actual length.\r
-  @retval EFI_OUT_OF_RESOURCES  Not enough resource to complete the operation.\r
-  @retval EFI_NOT_FOUND         No matching handle could not be found in database.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibListPackageLists (\r
-  IN        UINT8                     PackageType,\r
-  IN CONST  EFI_GUID                  *PackageGuid,\r
-  IN OUT    UINTN                     *HandleBufferLength,\r
-  OUT       EFI_HII_HANDLE            **Handle\r
-  )\r
-;\r
-\r
 /**\r
   Convert language code from RFC3066 to ISO639-2.\r
 \r
index 21173296ba90a7158be4c8005d0c03fd95fdf30b..45e178c44646ddb7e36cef6a659b4cc17547d56e 100644 (file)
@@ -58,155 +58,81 @@ HiiLibGetNextLanguage (
 \r
 \r
 /**\r
-  This function returns the list of supported languages, in the format specified\r
-  in UEFI specification Appendix M.\r
-\r
-  If HiiHandle is not a valid Handle in the default HII database, then ASSERT.\r
+  Retrieves a pointer to the a Null-terminated ASCII string containing the list \r
+  of languages that an HII handle in the HII Database supports.  The returned \r
+  string is allocated using AllocatePool().  The caller is responsible for freeing\r
+  the returned string using FreePool().  The format of the returned string follows\r
+  the language format assumed the HII Database.\r
+  \r
+  If HiiHandle is NULL, then ASSERT().\r
 \r
-  @param  HiiHandle              The HII package list handle.\r
+  @param[in]  HiiHandle  A handle that was previously registered in the HII Database.\r
 \r
-  @retval   !NULL  The supported languages.\r
-  @retval   NULL    If Supported Languages can not be retrived.\r
+  @retval NULL   HiiHandle is not registered in the HII database\r
+  @retval NULL   There are not enough resources available to retrieve the suported \r
+                 languages.\r
+  @retval NULL   The list of suported languages could not be retrieved.\r
+  @retval Other  A pointer to the Null-terminated ASCII string of supported languages.\r
 \r
 **/\r
 CHAR8 *\r
 EFIAPI\r
-HiiLibGetSupportedLanguages (\r
+HiiGetSupportedLanguages (\r
   IN EFI_HII_HANDLE           HiiHandle\r
   )\r
 {\r
   EFI_STATUS  Status;\r
-  UINTN       BufferSize;\r
-  CHAR8       *LanguageString;\r
+  UINTN       LanguageSize;\r
+  CHAR8       TempSupportedLanguages;\r
+  CHAR8       *SupportedLanguages;\r
+\r
+  ASSERT (HiiHandle != NULL);\r
 \r
-  ASSERT (IsHiiHandleRegistered (HiiHandle));\r
   //\r
-  // Collect current supported Languages for given HII handle\r
-  // First try allocate 4K buffer to store the current supported languages.\r
+  // Retrieve the size required for the supported languages buffer.\r
   //\r
-  BufferSize = 0x1000;\r
-  LanguageString = AllocateZeroPool (BufferSize);\r
-  if (LanguageString == NULL) {\r
-    return NULL;\r
-  }\r
-\r
-  Status = gHiiString->GetLanguages (gHiiString, HiiHandle, LanguageString, &BufferSize);\r
-  \r
-  if (Status == EFI_BUFFER_TOO_SMALL) {\r
-    FreePool (LanguageString);\r
-    LanguageString = AllocateZeroPool (BufferSize);\r
-    if (LanguageString == NULL) {\r
-      return NULL;\r
-    }\r
-\r
-    Status = gHiiString->GetLanguages (gHiiString, HiiHandle, LanguageString, &BufferSize);\r
-  }\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    LanguageString = NULL;\r
-  }\r
-\r
-  return LanguageString;\r
-}\r
-\r
-\r
-/**\r
-  This function returns the number of supported languages on HiiHandle.\r
-\r
-  If HiiHandle is not a valid Handle in the default HII database, then ASSERT.\r
-  If not enough resource to complete the operation, then ASSERT.\r
-\r
-  @param  HiiHandle              The HII package list handle.\r
-\r
-  @return The  number of supported languages.\r
-\r
-**/\r
-UINT16\r
-EFIAPI\r
-HiiLibGetSupportedLanguageNumber (\r
-  IN EFI_HII_HANDLE           HiiHandle\r
-  )\r
-{\r
-  CHAR8   *Languages;\r
-  CHAR8   *LanguageString;\r
-  UINT16  LangNumber;\r
-  CHAR8   *Lang;\r
-\r
-  Languages = HiiLibGetSupportedLanguages (HiiHandle);\r
-  if (Languages == NULL) {\r
-    return 0;\r
-  }\r
-\r
-  LangNumber = 0;\r
-  Lang = AllocatePool (AsciiStrSize (Languages));\r
-  if (Lang != NULL) {\r
-    LanguageString = Languages;\r
-    while (*LanguageString != 0) {\r
-      HiiLibGetNextLanguage (&LanguageString, Lang);\r
-      LangNumber++;\r
-    }\r
+  LanguageSize = 0;\r
+  Status = gHiiString->GetLanguages (gHiiString, HiiHandle, &TempSupportedLanguages, &LanguageSize);\r
 \r
-    FreePool (Lang);\r
-  }\r
-  FreePool (Languages);\r
-\r
-  return LangNumber;\r
-}\r
-\r
-/**\r
-  This function returns the list of supported 2nd languages, in the format specified\r
-  in UEFI specification Appendix M.\r
-\r
-  If HiiHandle is not a valid Handle in the default HII database, then ASSERT.\r
-  If not enough resource to complete the operation, then ASSERT.\r
-\r
-  @param  HiiHandle              The HII package list handle.\r
-  @param  FirstLanguage          Pointer to language name buffer.\r
-  \r
-  @return The supported languages.\r
-\r
-**/\r
-CHAR8 *\r
-EFIAPI\r
-HiiLibGetSupportedSecondaryLanguages (\r
-  IN EFI_HII_HANDLE           HiiHandle,\r
-  IN CONST CHAR8              *FirstLanguage\r
-  )\r
-{\r
-  EFI_STATUS  Status;\r
-  UINTN       BufferSize;\r
-  CHAR8       *LanguageString;\r
-\r
-  ASSERT (HiiHandle != NULL);\r
-  ASSERT (IsHiiHandleRegistered (HiiHandle));\r
   //\r
-  // Collect current supported 2nd Languages for given HII handle\r
-  // First try allocate 4K buffer to store the current supported 2nd languages.\r
+  // If GetLanguages() returns EFI_SUCCESS for a zero size, \r
+  // then there are no supported languages registered for HiiHandle.  If GetLanguages() \r
+  // returns an error other than EFI_BUFFER_TOO_SMALL, then HiiHandle is not present\r
+  // in the HII Database\r
   //\r
-  BufferSize = 0x1000;\r
-  LanguageString = AllocateZeroPool (BufferSize);\r
-  if (LanguageString == NULL) {\r
+  if (Status != EFI_BUFFER_TOO_SMALL) {\r
+    //\r
+    // Return NULL if the size can not be retrieved, or if HiiHandle is not in the HII Database\r
+    //\r
     return NULL;\r
   }\r
 \r
-  Status = gHiiString->GetSecondaryLanguages (gHiiString, HiiHandle, FirstLanguage, LanguageString, &BufferSize);\r
-  \r
-  if (Status == EFI_BUFFER_TOO_SMALL) {\r
-    FreePool (LanguageString);\r
-    LanguageString = AllocateZeroPool (BufferSize);\r
-    if (LanguageString == NULL) {\r
-      return NULL;\r
-    }\r
-\r
-    Status = gHiiString->GetSecondaryLanguages (gHiiString, HiiHandle, FirstLanguage, LanguageString, &BufferSize);\r
+  //\r
+  // Allocate the supported languages buffer.\r
+  //\r
+  SupportedLanguages = AllocateZeroPool (LanguageSize);\r
+  if (SupportedLanguages == NULL) {\r
+    //\r
+    // Return NULL if allocation fails.\r
+    //\r
+    return NULL;\r
   }\r
 \r
+  //\r
+  // Retrieve the supported languages string\r
+  //\r
+  Status = gHiiString->GetLanguages (gHiiString, HiiHandle, SupportedLanguages, &LanguageSize);\r
   if (EFI_ERROR (Status)) {\r
-    LanguageString = NULL;\r
+    //\r
+    // Free the buffer and return NULL if the supported languages can not be retrieved.\r
+    //\r
+    FreePool (SupportedLanguages);\r
+    return NULL;\r
   }\r
 \r
-  return LanguageString;\r
+  //\r
+  // Return the Null-terminated ASCII string of supported languages\r
+  //\r
+  return SupportedLanguages;\r
 }\r
 \r
-\r
-\r
index 384bab4ed6f3d80bb83b9e683c62c1200d008e6b..e337b234754434a7eb5c73ed3dcbff1b403c12ab 100644 (file)
 //\r
 GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR16 mConfigHdrTemplate[] = L"GUID=00000000000000000000000000000000&NAME=0000&PATH=00";\r
 \r
+EFI_FORM_BROWSER2_PROTOCOL  *mUefiFormBrowser2 = NULL;\r
+\r
 //\r
-// Form Browser2 Protocol\r
+// Template used to mark the end of a list of packages \r
 //\r
-EFI_FORM_BROWSER2_PROTOCOL  *mUefiFormBrowser2 = NULL;\r
+GLOBAL_REMOVE_IF_UNREFERENCED CONST EFI_HII_PACKAGE_HEADER  mEndOfPakageList = {\r
+  sizeof (EFI_HII_PACKAGE_HEADER),\r
+  EFI_HII_PACKAGE_END\r
+};\r
 \r
 /**\r
-  This funciton build the package list based on the package number,\r
-  the GUID of the package list and the list of pointer which point to\r
-  package header that defined by UEFI VFR compiler and StringGather\r
-  tool.\r
+  Registers a list of packages in the HII Database and returns the HII Handle\r
+  associated with that registration.  If an HII Handle has already been registered\r
+  with the same PackageListGuid, then NULL is returned.  If there are not enough \r
+  resources to perform the registration, then NULL is returned.  If an empty list \r
+  of packages is passed in, then NULL is returned.  If the size of the list of \r
+  package is 0, then NULL is returned.\r
+\r
+  The variable arguments are pointers which point to package header that defined \r
+  by UEFI VFR compiler and StringGather tool.\r
 \r
   #pragma pack (push, 1)\r
   typedef struct {\r
@@ -36,267 +46,269 @@ EFI_FORM_BROWSER2_PROTOCOL  *mUefiFormBrowser2 = NULL;
     EFI_HII_PACKAGE_HEADER  PackageHeader;\r
   } EDKII_AUTOGEN_PACKAGES_HEADER;\r
   #pragma pack (pop)\r
-\r
-  If there is not enough resource for the new package list,\r
-  the function will ASSERT.\r
-\r
-  @param NumberOfPackages The number of packages be \r
-  @param GuidId          The GUID for the package list to be generated.\r
-  @param Marker          The variable argument list. Each entry represent a specific package header that is\r
-                         generated by VFR compiler and StrGather tool. The first 4 bytes is a UINT32 value\r
-                         that indicate the overall length of the package.\r
-\r
-  @return The pointer to the package list header.\r
+  \r
+  @param[in]  PackageListGuid  The GUID of the package list.\r
+  @param[in]  DeviceHandle     If not NULL, the Device Handle on which \r
+                               an instance of DEVICE_PATH_PROTOCOL is installed.\r
+                               This Device Handle uniquely defines the device that \r
+                               the added packages are associated with.\r
+  @param[in]  ...              The variable argument list that contains pointers \r
+                               to packages terminated by a NULL.\r
+\r
+  @retval NULL   A HII Handle has already been registered in the HII Database with\r
+                 the same PackageListGuid.\r
+  @retval NULL   The HII Handle could not be created.\r
+  @retval NULL   An empty list of packages was passed in.\r
+  @retval NULL   All packages are empty.\r
+  @retval Other  The HII Handle associated with the newly registered package list.\r
 \r
 **/\r
-EFI_HII_PACKAGE_LIST_HEADER *\r
-InternalHiiLibPreparePackages (\r
-  IN UINTN           NumberOfPackages,\r
-  IN CONST EFI_GUID  *GuidId,\r
-  IN VA_LIST         Marker\r
+EFI_HII_HANDLE\r
+EFIAPI\r
+HiiAddPackages (\r
+  IN CONST EFI_GUID    *PackageListGuid,\r
+  IN       EFI_HANDLE  DeviceHandle  OPTIONAL,\r
+  ...\r
   )\r
 {\r
-  EFI_HII_PACKAGE_LIST_HEADER *PackageListHeader;\r
-  UINT8                       *PackageListData;\r
-  UINT32                      PackageListLength;\r
-  UINT32                      PackageLength;\r
-  EFI_HII_PACKAGE_HEADER      PackageHeader;\r
-  UINT8                       *PackageArray;\r
-  UINTN                       Index;\r
-  VA_LIST                     MarkerBackup;\r
-\r
-  PackageListLength = sizeof (EFI_HII_PACKAGE_LIST_HEADER);\r
+  EFI_STATUS                   Status;\r
+  EFI_HII_HANDLE               *HiiHandleBuffer;\r
+  VA_LIST                      Args;\r
+  UINT32                       *Package;\r
+  EFI_HII_PACKAGE_LIST_HEADER  *PackageListHeader;\r
+  EFI_HII_HANDLE               HiiHandle;\r
+  UINT32                       Length;\r
+  UINT8                        *Data;\r
 \r
-  MarkerBackup = Marker;\r
+  ASSERT (PackageListGuid != NULL);\r
 \r
   //\r
-  // Count the length of the final package list.\r
+  // Check to see if an HII Handle has already been registered with the same \r
+  // PackageListGuid\r
   //\r
-  for (Index = 0; Index < NumberOfPackages; Index++) {\r
-    CopyMem (&PackageLength, VA_ARG (Marker, VOID *), sizeof (UINT32));\r
-    //\r
-    // Do not count the BinaryLength field.\r
-    //\r
-    PackageListLength += (PackageLength - sizeof (UINT32));\r
+  HiiHandleBuffer = HiiGetHiiHandles (PackageListGuid);\r
+  if (HiiHandleBuffer != NULL) {\r
+    FreePool (HiiHandleBuffer);\r
+    return NULL;\r
   }\r
 \r
   //\r
-  // Include the length of EFI_HII_PACKAGE_END\r
+  // Calculate the length of all the packages in the variable argument list\r
   //\r
-  PackageListLength += sizeof (EFI_HII_PACKAGE_HEADER);\r
-  PackageListHeader = AllocateZeroPool (PackageListLength);\r
-  ASSERT (PackageListHeader != NULL);\r
-  \r
-  CopyGuid (&PackageListHeader->PackageListGuid, GuidId);\r
-  PackageListHeader->PackageLength = PackageListLength;\r
-\r
-  PackageListData = ((UINT8 *) PackageListHeader) + sizeof (EFI_HII_PACKAGE_LIST_HEADER);\r
+  for (Length = 0, VA_START (Args, DeviceHandle); (Package = VA_ARG (Args, UINT32 *)) != NULL; ) {\r
+    Length += (ReadUnaligned32 (Package) - sizeof (UINT32));\r
+  }\r
+  VA_END (Args);\r
 \r
-  Marker = MarkerBackup;\r
   //\r
-  // Prepare the final package list.\r
+  // If there are no packages in the variable argument list or all the packages \r
+  // are empty, then return a NULL HII Handle\r
   //\r
-  for (Index = 0; Index < NumberOfPackages; Index++) {\r
-    PackageArray = (UINT8 *) VA_ARG (Marker, VOID *);\r
-    //\r
-    // CopyMem is used for UINT32 to cover the unaligned address access.\r
-    //\r
-    CopyMem (&PackageLength, PackageArray, sizeof (UINT32));\r
-    PackageLength  -= sizeof (UINT32);\r
-    PackageArray += sizeof (UINT32);\r
-    CopyMem (PackageListData, PackageArray, PackageLength);\r
-    PackageListData += PackageLength;\r
+  if (Length == 0) {\r
+    return NULL;\r
   }\r
 \r
   //\r
-  // Append EFI_HII_PACKAGE_END\r
+  // Add the length of the Package List Header and the terminating Package Header \r
   //\r
-  PackageHeader.Type = EFI_HII_PACKAGE_END;\r
-  PackageHeader.Length = sizeof (EFI_HII_PACKAGE_HEADER);\r
-  CopyMem (PackageListData, &PackageHeader, PackageHeader.Length);\r
-\r
-  return PackageListHeader;\r
-}\r
-\r
-/**\r
-  Assemble EFI_HII_PACKAGE_LIST according to the passed in packages.\r
-\r
-  If GuidId is NULL, then ASSERT.\r
-  If not enough resource to complete the operation, then ASSERT.\r
-\r
-  @param  NumberOfPackages       Number of packages.\r
-  @param  GuidId                 Package GUID.\r
-  @param  ...                    Variable argument list for packages to be assembled.\r
+  Length += sizeof (EFI_HII_PACKAGE_LIST_HEADER) + sizeof (EFI_HII_PACKAGE_HEADER);\r
 \r
-  @return Pointer of EFI_HII_PACKAGE_LIST_HEADER.\r
-\r
-**/\r
-EFI_HII_PACKAGE_LIST_HEADER *\r
-EFIAPI\r
-HiiLibPreparePackageList (\r
-  IN UINTN                    NumberOfPackages,\r
-  IN CONST EFI_GUID           *GuidId,\r
-  ...\r
-  )\r
-{\r
-  EFI_HII_PACKAGE_LIST_HEADER *PackageListHeader;\r
-  VA_LIST                     Marker;\r
-\r
-  ASSERT (GuidId != NULL);\r
-\r
-  VA_START (Marker, GuidId);\r
-  PackageListHeader = InternalHiiLibPreparePackages (NumberOfPackages, GuidId, Marker);\r
-  VA_END (Marker);\r
-\r
-  return PackageListHeader;\r
-}\r
-\r
-\r
-/**\r
-  This function allocates pool for an EFI_HII_PACKAGE_LIST structure\r
-  with additional space that is big enough to host all packages described by the variable \r
-  argument list of package pointers.  The allocated structure is initialized using NumberOfPackages, \r
-  GuidId,  and the variable length argument list of package pointers.\r
-\r
-  Then, EFI_HII_PACKAGE_LIST will be register to the default System HII Database. The\r
-  Handle to the newly registered Package List is returned through HiiHandle.\r
-\r
-  If HiiHandle is NULL, then ASSERT.\r
+  //\r
+  // Allocate the storage for the entire Package List\r
+  //\r
+  PackageListHeader = AllocateZeroPool (Length);\r
 \r
-  @param  NumberOfPackages    The number of HII packages to register.\r
-  @param  GuidId              Package List GUID ID.\r
-  @param  DriverHandle        Optional. If not NULL, the DriverHandle on which an instance of DEVICE_PATH_PROTOCOL is installed.\r
-                              This DriverHandle uniquely defines the device that the added packages are associated with.\r
-  @param  HiiHandle           On output, the HiiHandle is update with the handle which can be used to retrieve the Package \r
-                              List later. If the functions failed to add the package to the default HII database, this value will\r
-                              be set to NULL.\r
-  @param  ...                 The variable argument list describing all HII Package.\r
+  //\r
+  // If the Packahge List can not be allocated, then return a NULL HII Handle\r
+  //\r
+  if (PackageListHeader == NULL) {\r
+    return NULL;\r
+  }\r
 \r
-  @return  EFI_SUCCESS         If the packages are successfully added to the default HII database.\r
-  @return  EFI_OUT_OF_RESOURCE Not enough resource to complete the operation.\r
+  //\r
+  // Fill in the GUID and Length of the Package List Header\r
+  //\r
+  CopyGuid (&PackageListHeader->PackageListGuid, PackageListGuid);\r
+  PackageListHeader->PackageLength = Length;\r
 \r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibAddPackages (\r
-  IN       UINTN               NumberOfPackages,\r
-  IN CONST EFI_GUID            *GuidId,\r
-  IN       EFI_HANDLE          DriverHandle, OPTIONAL\r
-  OUT      EFI_HII_HANDLE      *HiiHandle,\r
-  ...\r
-  )\r
-{\r
-  VA_LIST                   Args;\r
-  EFI_HII_PACKAGE_LIST_HEADER *PackageListHeader;\r
-  EFI_STATUS                Status;\r
+  //\r
+  // Initialize a pointer to the beginning if the Package List data\r
+  //\r
+  Data = (UINT8 *)(PackageListHeader + 1);\r
 \r
-  ASSERT (HiiHandle != NULL);\r
+  //\r
+  // Copy the data from each package in the variable argument list\r
+  //\r
+  for (VA_START (Args, DeviceHandle); (Package = VA_ARG (Args, UINT32 *)) != NULL; ) {\r
+    Length = ReadUnaligned32 (Package) - sizeof (UINT32);\r
+    CopyMem (Data, Package + 1, Length);\r
+    Data += Length;\r
+  }\r
+  VA_END (Args);\r
 \r
-  VA_START (Args, HiiHandle);\r
-  PackageListHeader = InternalHiiLibPreparePackages (NumberOfPackages, GuidId, Args);\r
+  //\r
+  // Append a package of type EFI_HII_PACKAGE_END to mark the end of the package list\r
+  //\r
+  CopyMem (Data, &mEndOfPakageList, sizeof (mEndOfPakageList));\r
 \r
-  Status      = gHiiDatabase->NewPackageList (gHiiDatabase, PackageListHeader, DriverHandle, HiiHandle);\r
-  if (HiiHandle != NULL) {\r
-    if (EFI_ERROR (Status)) {\r
-      *HiiHandle = NULL;\r
-    }\r
+  //\r
+  // Register the package list with the HII Database\r
+  //\r
+  Status = gHiiDatabase->NewPackageList (\r
+                           gHiiDatabase, \r
+                           PackageListHeader, \r
+                           DeviceHandle, \r
+                           &HiiHandle\r
+                           );\r
+  if (EFI_ERROR (Status)) {\r
+    HiiHandle = NULL;\r
   }\r
 \r
+  //\r
+  // Free the allocated package list\r
+  //\r
   FreePool (PackageListHeader);\r
-  VA_END (Args);\r
-  \r
-  return Status;\r
+\r
+  //\r
+  // Return the new HII Handle\r
+  //\r
+  return HiiHandle;\r
 }\r
 \r
 /**\r
-  Removes a package list from the default HII database.\r
+  Removes a package list from the HII database.\r
 \r
   If HiiHandle is NULL, then ASSERT.\r
-  If HiiHandle is not a valid EFI_HII_HANDLE in the default HII database, then ASSERT.\r
+  If HiiHandle is not a valid EFI_HII_HANDLE in the HII database, then ASSERT.\r
 \r
-  @param  HiiHandle                The handle that was previously registered to the data base that is requested for removal.\r
-                                             List later.\r
+  @param[in]  HiiHandle   The handle that was previously registered in the HII database\r
 \r
 **/\r
 VOID\r
 EFIAPI\r
-HiiLibRemovePackages (\r
+HiiRemovePackages (\r
   IN      EFI_HII_HANDLE      HiiHandle\r
   )\r
 {\r
   EFI_STATUS Status;\r
-  ASSERT (IsHiiHandleRegistered (HiiHandle));\r
 \r
+  ASSERT (HiiHandle != NULL);\r
   Status = gHiiDatabase->RemovePackageList (gHiiDatabase, HiiHandle);\r
   ASSERT_EFI_ERROR (Status);\r
 }\r
 \r
 \r
 /**\r
-  Determines the handles that are currently active in the database.\r
-  It's the caller's responsibility to free handle buffer.\r
-\r
-  If HandleBufferLength is NULL, then ASSERT.\r
-  If HiiHandleBuffer is NULL, then ASSERT.\r
-\r
-  @param  HandleBufferLength     On input, a pointer to the length of the handle\r
-                                 buffer. On output, the length of the handle buffer\r
-                                 that is required for the handles found.\r
-  @param  HiiHandleBuffer        Pointer to an array of Hii Handles returned.\r
-\r
-  @retval EFI_SUCCESS            Get an array of Hii Handles successfully.\r
+  Retrieves the array of all the HII Handles or the HII handle of a specific\r
+  package list in the HII Database.\r
+  This array is terminated with a NULL HII Handle.\r
+  This function allocates the returned array using AllocatePool().\r
+  The caller is responsible for freeing the array with FreePool().\r
+\r
+  @param[in]  PackageListGuid  An optional parameter that is used to request \r
+                               an HII Handle that is associatd with a specific\r
+                               Package List GUID.  If this parameter is NULL\r
+                               then all the HII Handles in the HII Database\r
+                               are returned.  If this parameter is not NULL\r
+                               then at most 1 HII Handle is returned.\r
+\r
+  @retval NULL   No HII handles were found in the HII database\r
+  @retval NULL   The array of HII Handles could not be retrieved\r
+  @retval Other  A pointer to the NULL terminated array of HII Handles\r
 \r
 **/\r
-EFI_STATUS\r
+EFI_HII_HANDLE *\r
 EFIAPI\r
-HiiLibGetHiiHandles (\r
-  IN OUT UINTN                     *HandleBufferLength,\r
-  OUT    EFI_HII_HANDLE            **HiiHandleBuffer\r
+HiiGetHiiHandles (\r
+  IN CONST EFI_GUID  *PackageListGuid  OPTIONAL\r
   )\r
 {\r
-  EFI_STATUS  Status;\r
+  EFI_STATUS      Status;\r
+  UINTN           HandleBufferLength;\r
+  EFI_HII_HANDLE  TempHiiHandleBuffer;\r
+  EFI_HII_HANDLE  *HiiHandleBuffer;\r
+  EFI_GUID        Guid;\r
+  UINTN           Index;\r
+\r
+  //\r
+  // Retrieve the size required for the buffer of all HII handles.\r
+  //\r
+  HandleBufferLength = 0;\r
+  Status = gHiiDatabase->ListPackageLists (\r
+                           gHiiDatabase,\r
+                           EFI_HII_PACKAGE_TYPE_ALL,\r
+                           NULL,\r
+                           &HandleBufferLength,\r
+                           &TempHiiHandleBuffer\r
+                           );\r
 \r
-  ASSERT (HandleBufferLength != NULL);\r
-  ASSERT (HiiHandleBuffer != NULL);\r
+  //\r
+  // If ListPackageLists() returns EFI_SUCCESS for a zero size, \r
+  // then there are no HII handles in the HII database.  If ListPackageLists() \r
+  // returns an error other than EFI_BUFFER_TOO_SMALL, then there are no HII \r
+  // handles in the HII database.\r
+  //\r
+  if (Status != EFI_BUFFER_TOO_SMALL) {\r
+    //\r
+    // Return NULL if the size can not be retrieved, or if there are no HII \r
+    // handles in the HII Database\r
+    //\r
+    return NULL;\r
+  }\r
 \r
-  *HandleBufferLength = 0;\r
-  *HiiHandleBuffer = NULL;\r
+  //\r
+  // Allocate the array of HII handles to hold all the HII Handles and a NULL terminator\r
+  //\r
+  HiiHandleBuffer = AllocateZeroPool (HandleBufferLength + sizeof (EFI_HII_HANDLE));\r
+  if (HiiHandleBuffer == NULL) {\r
+    //\r
+    // Return NULL if allocation fails.\r
+    //\r
+    return NULL;\r
+  }\r
 \r
   //\r
-  // Try to find the actual buffer size for HiiHandle Buffer.\r
+  // Retrieve the array of HII Handles in the HII Database\r
   //\r
   Status = gHiiDatabase->ListPackageLists (\r
-                                 gHiiDatabase,\r
-                                 EFI_HII_PACKAGE_TYPE_ALL,\r
-                                 NULL,\r
-                                 HandleBufferLength,\r
-                                 *HiiHandleBuffer\r
-                                 );\r
-  \r
-  if (Status == EFI_BUFFER_TOO_SMALL) {\r
-      *HiiHandleBuffer = AllocateZeroPool (*HandleBufferLength);\r
-      ASSERT (*HiiHandleBuffer != NULL);\r
-      Status = gHiiDatabase->ListPackageLists (\r
-                                     gHiiDatabase,\r
-                                     EFI_HII_PACKAGE_TYPE_ALL,\r
-                                     NULL,\r
-                                     HandleBufferLength,\r
-                                     *HiiHandleBuffer\r
-                                     );\r
-\r
-      if (EFI_ERROR (Status)) {\r
-        FreePool (*HiiHandleBuffer);\r
-        *HiiHandleBuffer = NULL;\r
-      }\r
+                           gHiiDatabase,\r
+                           EFI_HII_PACKAGE_TYPE_ALL,\r
+                           NULL,\r
+                           &HandleBufferLength,\r
+                           HiiHandleBuffer\r
+                           );\r
+  if (EFI_ERROR (Status)) {\r
+    //\r
+    // Free the buffer and return NULL if the HII handles can not be retrieved.\r
+    //\r
+    FreePool (HiiHandleBuffer);\r
+    return NULL;\r
   }\r
 \r
-  return Status;\r
+  if (PackageListGuid == NULL) {\r
+    //\r
+    // Return the NULL terminated array of HII handles in the HII Database\r
+    //\r
+    return HiiHandleBuffer;\r
+  } else {\r
+    for (Index = 0; HiiHandleBuffer[Index] != NULL; Index++) {\r
+      Status = InternalHiiExtractGuidFromHiiHandle (HiiHandleBuffer[Index], &Guid);\r
+      ASSERT_EFI_ERROR (Status);\r
+      if (CompareGuid (&Guid, PackageListGuid)) {\r
+        HiiHandleBuffer[0] = HiiHandleBuffer[Index];\r
+        HiiHandleBuffer[1] = NULL;\r
+        return HiiHandleBuffer;\r
+      }\r
+    }\r
+    FreePool (HiiHandleBuffer);\r
+    return NULL;\r
+  }\r
 }\r
 \r
 /**\r
   Extract Hii package list GUID for given HII handle.\r
 \r
-  If HiiHandle could not be found in the default HII database, then ASSERT.\r
+  If HiiHandle could not be found in the HII database, then ASSERT.\r
   If Guid is NULL, then ASSERT.\r
 \r
   @param  Handle              Hii handle\r
@@ -307,7 +319,7 @@ HiiLibGetHiiHandles (
 **/\r
 EFI_STATUS\r
 EFIAPI\r
-HiiLibExtractGuidFromHiiHandle (\r
+InternalHiiExtractGuidFromHiiHandle (\r
   IN      EFI_HII_HANDLE      Handle,\r
   OUT     EFI_GUID            *Guid\r
   )\r
@@ -317,7 +329,7 @@ HiiLibExtractGuidFromHiiHandle (
   EFI_HII_PACKAGE_LIST_HEADER  *HiiPackageList;\r
 \r
   ASSERT (Guid != NULL);\r
-  ASSERT (IsHiiHandleRegistered (Handle));\r
+  ASSERT (Handle != NULL);\r
 \r
   //\r
   // Get HII PackageList\r
@@ -349,326 +361,6 @@ HiiLibExtractGuidFromHiiHandle (
   return EFI_SUCCESS;\r
 }\r
 \r
-/**\r
-  Find HII Handle in the default HII database associated with given Device Path.\r
-\r
-  If DevicePath is NULL, then ASSERT.\r
-\r
-  @param  DevicePath             Device Path associated with the HII package list\r
-                                 handle.\r
-\r
-  @retval Handle                 HII package list Handle associated with the Device\r
-                                        Path.\r
-  @retval NULL                   Hii Package list handle is not found.\r
-\r
-**/\r
-EFI_HII_HANDLE\r
-EFIAPI\r
-HiiLibDevicePathToHiiHandle (\r
-  IN EFI_DEVICE_PATH_PROTOCOL   *DevicePath\r
-  )\r
-{\r
-  EFI_STATUS                  Status;\r
-  EFI_DEVICE_PATH_PROTOCOL    *TmpDevicePath;\r
-  UINTN                       BufferSize;\r
-  UINTN                       HandleCount;\r
-  UINTN                       Index;\r
-  EFI_HANDLE                  *Handles;\r
-  EFI_HANDLE                  Handle;\r
-  UINTN                       Size;\r
-  EFI_HANDLE                  DriverHandle;\r
-  EFI_HII_HANDLE              *HiiHandles;\r
-  EFI_HII_HANDLE              HiiHandle;\r
-\r
-  ASSERT (DevicePath != NULL);\r
-\r
-  //\r
-  // Locate Device Path Protocol handle buffer\r
-  //\r
-  Status = gBS->LocateHandleBuffer (\r
-                  ByProtocol,\r
-                  &gEfiDevicePathProtocolGuid,\r
-                  NULL,\r
-                  &HandleCount,\r
-                  &Handles\r
-                  );\r
-  if (EFI_ERROR (Status)) {\r
-    return NULL;\r
-  }\r
-\r
-  //\r
-  // Search Driver Handle by Device Path\r
-  //\r
-  DriverHandle = NULL;\r
-  BufferSize = GetDevicePathSize (DevicePath);\r
-  for(Index = 0; Index < HandleCount; Index++) {\r
-    Handle = Handles[Index];\r
-    gBS->HandleProtocol (Handle, &gEfiDevicePathProtocolGuid, (VOID **) &TmpDevicePath);\r
-\r
-    //\r
-    // Check whether DevicePath match\r
-    //\r
-    Size = GetDevicePathSize (TmpDevicePath);\r
-    if ((Size == BufferSize) && CompareMem (DevicePath, TmpDevicePath, Size) == 0) {\r
-      DriverHandle = Handle;\r
-      break;\r
-    }\r
-  }\r
-  FreePool (Handles);\r
-\r
-  if (DriverHandle == NULL) {\r
-    return NULL;\r
-  }\r
-\r
-  //\r
-  // Retrieve all Hii Handles from HII database\r
-  //\r
-  BufferSize = 0x1000;\r
-  HiiHandles = AllocatePool (BufferSize);\r
-  ASSERT (HiiHandles != NULL);\r
-  Status = gHiiDatabase->ListPackageLists (\r
-                          gHiiDatabase,\r
-                          EFI_HII_PACKAGE_TYPE_ALL,\r
-                          NULL,\r
-                          &BufferSize,\r
-                          HiiHandles\r
-                          );\r
-  if (Status == EFI_BUFFER_TOO_SMALL) {\r
-    FreePool (HiiHandles);\r
-    HiiHandles = AllocatePool (BufferSize);\r
-    ASSERT (HiiHandles != NULL);\r
-\r
-    Status = gHiiDatabase->ListPackageLists (\r
-                            gHiiDatabase,\r
-                            EFI_HII_PACKAGE_TYPE_ALL,\r
-                            NULL,\r
-                            &BufferSize,\r
-                            HiiHandles\r
-                            );\r
-  }\r
-\r
-  if (EFI_ERROR (Status)) {\r
-    FreePool (HiiHandles);\r
-    return NULL;\r
-  }\r
-\r
-  //\r
-  // Search Hii Handle by Driver Handle\r
-  //\r
-  HiiHandle = NULL;\r
-  HandleCount = BufferSize / sizeof (EFI_HII_HANDLE);\r
-  for (Index = 0; Index < HandleCount; Index++) {\r
-    Status = gHiiDatabase->GetPackageListHandle (\r
-                            gHiiDatabase,\r
-                            HiiHandles[Index],\r
-                            &Handle\r
-                            );\r
-    if (!EFI_ERROR (Status) && (Handle == DriverHandle)) {\r
-      HiiHandle = HiiHandles[Index];\r
-      break;\r
-    }\r
-  }\r
-\r
-  FreePool (HiiHandles);\r
-  return HiiHandle;\r
-}\r
-\r
-/**\r
-  Exports the contents of one or all package lists in the HII database into a buffer.\r
-\r
-  If Handle is not NULL and not a valid EFI_HII_HANDLE registered in the database, \r
-  then ASSERT.\r
-  If PackageListHeader is NULL, then ASSERT.\r
-  If PackageListSize is NULL, then ASSERT.\r
-\r
-  @param  Handle                 The HII Handle.\r
-  @param  PackageListHeader      A pointer to a buffer that will contain the results of \r
-                                 the export function.\r
-  @param  PackageListSize        On output, the length of the buffer that is required for the exported data.\r
-\r
-  @retval EFI_SUCCESS            Package exported.\r
-\r
-  @retval EFI_OUT_OF_RESOURCES   Not enought memory to complete the operations.\r
-\r
-**/\r
-EFI_STATUS \r
-EFIAPI\r
-HiiLibExportPackageLists (\r
-  IN EFI_HII_HANDLE                    Handle,\r
-  OUT EFI_HII_PACKAGE_LIST_HEADER      **PackageListHeader,\r
-  OUT UINTN                            *PackageListSize\r
-  )\r
-{\r
-  EFI_STATUS                       Status;\r
-  UINTN                            Size;\r
-  EFI_HII_PACKAGE_LIST_HEADER      *PackageListHdr;\r
-\r
-  ASSERT (PackageListSize != NULL);\r
-  ASSERT (PackageListHeader != NULL);\r
-\r
-  if (Handle != NULL) {\r
-    ASSERT (IsHiiHandleRegistered (Handle));\r
-  }\r
-\r
-  Size = 0;\r
-  PackageListHdr = NULL;\r
-  Status = gHiiDatabase->ExportPackageLists (\r
-                                      gHiiDatabase,\r
-                                      Handle,\r
-                                      &Size,\r
-                                      PackageListHdr\r
-                                      );\r
-  ASSERT_EFI_ERROR (Status != EFI_BUFFER_TOO_SMALL);\r
-  \r
-  if (Status == EFI_BUFFER_TOO_SMALL) {\r
-    PackageListHdr = AllocateZeroPool (Size);\r
-    \r
-    if (PackageListHeader == NULL) {\r
-      return EFI_OUT_OF_RESOURCES;\r
-    } else {\r
-      Status = gHiiDatabase->ExportPackageLists (\r
-                                          gHiiDatabase,\r
-                                          Handle,\r
-                                          &Size,\r
-                                          PackageListHdr\r
-                                           );\r
-    }\r
-  }\r
-\r
-  if (!EFI_ERROR (Status)) {\r
-    *PackageListHeader = PackageListHdr;\r
-    *PackageListSize   = Size;\r
-  } else {\r
-    FreePool (PackageListHdr);\r
-  }\r
-\r
-  return Status;\r
-}\r
-\r
-/**\r
-  \r
-  This function returns a list of the package handles of the   \r
-  specified type that are currently active in the HII database. The   \r
-  pseudo-type EFI_HII_PACKAGE_TYPE_ALL will cause all package   \r
-  handles to be listed.\r
-\r
-  If HandleBufferLength is NULL, then ASSERT.\r
-  If HandleBuffer is NULL, the ASSERT.\r
-  If PackageType is EFI_HII_PACKAGE_TYPE_GUID and PackageGuid is\r
-  NULL, then ASSERT.\r
-  If PackageType is not EFI_HII_PACKAGE_TYPE_GUID and PackageGuid is not\r
-  NULL, then ASSERT.\r
-  \r
-  \r
-  @param PackageType          Specifies the package type of the packages\r
-                              to list or EFI_HII_PACKAGE_TYPE_ALL for\r
-                              all packages to be listed.\r
-  \r
-  @param PackageGuid          If PackageType is\r
-                              EFI_HII_PACKAGE_TYPE_GUID, then this is\r
-                              the pointer to the GUID which must match\r
-                              the Guid field of\r
-                              EFI_HII_PACKAGE_GUID_HEADER. Otherwise, it\r
-                              must be NULL.\r
-  \r
-  @param HandleBufferLength   On output, the length of the handle buffer\r
-                              that is required for the handles found.\r
-\r
-  @param HandleBuffer         On output, an array of EFI_HII_HANDLE  instances returned.\r
-                              The caller is responcible to free this pointer allocated.\r
-\r
-  @retval EFI_SUCCESS           The matching handles are outputed successfully.\r
-                                HandleBufferLength is updated with the actual length.\r
-  @retval EFI_OUT_OF_RESOURCES  Not enough resource to complete the operation.\r
-  @retval EFI_NOT_FOUND         No matching handle could not be found in database.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibListPackageLists (\r
-  IN        UINT8                     PackageType,\r
-  IN CONST  EFI_GUID                  *PackageGuid,\r
-  IN OUT    UINTN                     *HandleBufferLength,\r
-  OUT       EFI_HII_HANDLE            **HandleBuffer\r
-  )\r
-{\r
-  EFI_STATUS          Status;\r
-  \r
-  ASSERT (HandleBufferLength != NULL);\r
-  ASSERT (HandleBuffer != NULL);\r
-  \r
-  *HandleBufferLength = 0;\r
-  *HandleBuffer       = NULL;\r
-\r
-  if (PackageType == EFI_HII_PACKAGE_TYPE_GUID) {\r
-    ASSERT (PackageGuid != NULL);\r
-  } else {\r
-    ASSERT (PackageGuid == NULL);\r
-  }\r
-\r
-  Status = gHiiDatabase->ListPackageLists (\r
-                            gHiiDatabase,\r
-                            PackageType,\r
-                            PackageGuid,\r
-                            HandleBufferLength,\r
-                            *HandleBuffer\r
-                            );\r
-  if (EFI_ERROR (Status) && (Status != EFI_BUFFER_TOO_SMALL)) {\r
-    //\r
-    // No packages is registered to UEFI HII Database, just return.\r
-    // \r
-    //\r
-    return Status;\r
-  }\r
-\r
-  *HandleBuffer = AllocateZeroPool (*HandleBufferLength);\r
-  \r
-  if (*HandleBuffer == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
-  }\r
-  \r
-  return gHiiDatabase->ListPackageLists (\r
-                            gHiiDatabase,\r
-                            PackageType,\r
-                            PackageGuid,\r
-                            HandleBufferLength,\r
-                            *HandleBuffer\r
-                            );\r
-  \r
-}\r
-/**\r
-  This function check if the Hii Handle is a valid handle registered\r
-  in the HII database.\r
-\r
-  @param HiiHandle The HII Handle.\r
-\r
-  @retval TRUE If it is a valid HII handle.\r
-  @retval FALSE If it is a invalid HII handle.\r
-**/\r
-BOOLEAN\r
-IsHiiHandleRegistered (\r
-  EFI_HII_HANDLE    HiiHandle\r
-  )\r
-{\r
-  EFI_STATUS                   Status;\r
-  UINTN                        BufferSize;\r
-  EFI_HII_PACKAGE_LIST_HEADER  *HiiPackageList;\r
-\r
-  ASSERT (HiiHandle != NULL);\r
-\r
-  HiiPackageList = NULL;\r
-  BufferSize = 0;\r
-\r
-  Status = gHiiDatabase->ExportPackageLists (\r
-             gHiiDatabase,\r
-             HiiHandle,\r
-             &BufferSize,\r
-             HiiPackageList\r
-             );\r
-\r
-  return (BOOLEAN) (Status == EFI_BUFFER_TOO_SMALL);\r
-}\r
-\r
-\r
 /**\r
   Converts all hex dtring characters in range ['A'..'F'] to ['a'..'f'] for \r
   hex digits that appear between a '=' and a '&' in a config string.\r
@@ -2916,3 +2608,4 @@ HiiIfrLibExtractDefault(
 \r
   return EFI_SUCCESS;\r
 }\r
+\r
index 7d8ca5e11720664a8c1f670d9db2d7ce16ba9514..2c317e5de355c1501ba2ac1b4eab0f282396fe45 100644 (file)
@@ -163,339 +163,340 @@ zulzu\
 \r
 \r
 /**\r
-  This function adds the string into String Package of each language\r
-  supported by the package list.\r
-\r
-  If String is NULL, then ASSERT.\r
-  If StringId is NULL, the ASSERT.\r
-  If PackageList could not be found in the default HII database, then ASSERT.\r
-\r
-  @param  PackageList            Handle of the package list where this string will\r
-                                            be added.\r
-  @param  StringId               On return, contains the new strings id, which is\r
-                                          unique within PackageList.\r
-  @param  String                 Points to the new null-terminated string.\r
-\r
-  @retval EFI_SUCCESS             The new string was added successfully.\r
-  @retval EFI_OUT_OF_RESOURCES   Could not add the string due to lack of resources.\r
+  This function create a new string in String Package or updates an existing \r
+  string in a String Package.  If StringId is 0, then a new string is added to\r
+  a String Package.  If StringId is not zero, then a string in String Package is\r
+  updated.  If SupportedLanguages is NULL, then the string is added or updated\r
+  for all the languages that the String Package supports.  If SupportedLanguages\r
+  is not NULL, then the string is added or updated for the set of languages \r
+  specified by SupportedLanguages.\r
+    \r
+  If HiiHandle is NULL, then ASSERT().\r
+  If String is NULL, then ASSERT().\r
+\r
+  @param[in]  HiiHandle           A handle that was previously registered in the \r
+                                  HII Database.\r
+  @param[in]  StringId            If zero, then a new string is created in the \r
+                                  String Package associated with HiiHandle.  If \r
+                                  non-zero, then the string specified by StringId \r
+                                  is updated in the String Package  associated \r
+                                  with HiiHandle. \r
+  @param[in]  String              A pointer to the Null-terminated Unicode string \r
+                                  to add or update in the String Package associated \r
+                                  with HiiHandle.\r
+  @param[in]  SupportedLanguages  A pointer to a Null-terminated ASCII string of \r
+                                  language codes.  If this parameter is NULL, then \r
+                                  String is added or updated in the String Package \r
+                                  associated with HiiHandle for all the languages \r
+                                  that the String Package supports.  If this \r
+                                  parameter is not NULL, then then String is added \r
+                                  or updated in the String Package associated with \r
+                                  HiiHandle for the set oflanguages specified by \r
+                                  SupportedLanguages.  The format of \r
+                                  SupportedLanguages must follow the language \r
+                                  format assumed the HII Database.\r
+\r
+  @retval 0      The string could not be added or updated in the String Package.\r
+  @retval Other  The EFI_STRING_ID of the newly added or updated string.\r
 \r
 **/\r
-EFI_STATUS\r
+EFI_STRING_ID\r
 EFIAPI\r
-HiiLibNewString (\r
-  IN  EFI_HII_HANDLE                  PackageList,\r
-  OUT EFI_STRING_ID                   *StringId,\r
-  IN  CONST EFI_STRING                String\r
+HiiSetString (\r
+  IN EFI_HII_HANDLE    HiiHandle,\r
+  IN EFI_STRING_ID     StringId,            OPTIONAL\r
+  IN CONST EFI_STRING  String,\r
+  IN CONST CHAR8       *SupportedLanguages  OPTIONAL\r
   )\r
 {\r
-  EFI_STATUS  Status;\r
-  CHAR8       *Languages;\r
-  CHAR8       *LangStrings;\r
-  CHAR8       *Lang;\r
+  EFI_STATUS     Status;\r
+  CHAR8          *AllocatedLanguages;\r
+  CHAR8          *Supported;\r
+  CHAR8          *Language;\r
+  EFI_STRING_ID  NewStringId;\r
 \r
+  ASSERT (HiiHandle != NULL);\r
   ASSERT (String != NULL);\r
-  ASSERT (StringId != NULL);\r
 \r
-  Status = EFI_SUCCESS;\r
+  if (SupportedLanguages == NULL) {\r
+    //\r
+    // Retrieve the languages that the package specified by HiiHandle supports\r
+    //\r
+    AllocatedLanguages = HiiGetSupportedLanguages (HiiHandle);\r
+  } else {\r
+    //\r
+    // Allocate a copy of the SupportLanguages string that passed in\r
+    //\r
+    AllocatedLanguages = AllocateCopyPool (AsciiStrLen (SupportedLanguages), SupportedLanguages);\r
+  }\r
 \r
-  Languages = HiiLibGetSupportedLanguages (PackageList);\r
-  ASSERT (Languages != NULL);\r
   //\r
-  // Allocate working buffer to contain substring of Languages.\r
+  // If there are not enough resources for the supported languages string, then return a StringId of 0\r
   //\r
-  Lang = AllocatePool (AsciiStrSize (Languages));\r
-  ASSERT (Lang != NULL);\r
+  if (AllocatedLanguages == NULL) {\r
+    return (EFI_STRING_ID)(0);\r
+  }\r
 \r
-  LangStrings = Languages;\r
-  while (*LangStrings != 0) {\r
-    HiiLibGetNextLanguage (&LangStrings, Lang);\r
+  NewStringId = 0;\r
+  Status = EFI_INVALID_PARAMETER;\r
+  //\r
+  // Loop through each language that the string supports\r
+  //\r
+  for (Supported = AllocatedLanguages; *Supported != '\0'; ) {\r
+    //\r
+    // Cache a pointer to the beginning of the current language in the list of languages\r
+    //\r
+    Language = Supported;\r
 \r
     //\r
-    // For each language supported by the package,\r
-    // a string token is created.\r
+    // Search for the next language seperator and replace it with a Null-terminator\r
     //\r
-    Status = gHiiString->NewString (\r
-                                 gHiiString,\r
-                                 PackageList,\r
-                                 StringId,\r
-                                 Lang,\r
-                                 NULL,\r
-                                 String,\r
-                                 NULL\r
-                                 );\r
-    if (EFI_ERROR (Status)) {\r
-      break;\r
+    for (; *Supported != 0 && *Supported != ';'; Supported++);\r
+    if (*Supported != 0) {\r
+      *(Supported++) = '\0';\r
     }\r
-  }\r
-\r
-  FreePool (Lang);\r
-  FreePool (Languages);\r
-\r
-  return Status;\r
-  \r
-}\r
-\r
 \r
-/**\r
-  This function update the specified string in String Package of each language\r
-  supported by the package list.\r
-\r
-  If String is NULL, then ASSERT.\r
-  If PackageList could not be found in the default HII database, then ASSERT.\r
-  If StringId is not found in PackageList, then ASSERT.\r
-\r
-  @param  PackageList            Handle of the package list where this string will\r
-                                            be added.\r
-  @param  StringId               Ths String Id to be updated.\r
-  @param  String                 Points to the new null-terminated string.\r
-\r
-  @retval EFI_SUCCESS            The new string was added successfully.\r
-  @retval EFI_OUT_OF_RESOURCES   Could not add the string due to lack of resources.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibSetString (\r
-  IN  EFI_HII_HANDLE                  PackageList,\r
-  IN  EFI_STRING_ID                   StringId,\r
-  IN  CONST EFI_STRING                String\r
-  )\r
-{\r
-  EFI_STATUS  Status;\r
-  CHAR8       *Languages;\r
-  CHAR8       *LangStrings;\r
-  CHAR8       *Lang;\r
-\r
-  ASSERT (IsHiiHandleRegistered (PackageList));\r
-\r
-  Status = EFI_SUCCESS;\r
-\r
-  Languages = HiiLibGetSupportedLanguages (PackageList);\r
-  ASSERT (Languages != NULL);\r
-\r
-  //\r
-  // Allocate working buffer to contain substring of Languages.\r
-  //\r
-  Lang = AllocatePool (AsciiStrSize (Languages));\r
-  ASSERT (Lang != NULL);\r
-\r
-  LangStrings = Languages;\r
-  while (*LangStrings != 0) {\r
-    HiiLibGetNextLanguage (&LangStrings, Lang);\r
+    //\r
+    // If StringId is 0, then call NewString().  Otherwise, call SetString()\r
+    //\r
+    if (StringId == (EFI_STRING_ID)(0)) {\r
+      Status = gHiiString->NewString (gHiiString, HiiHandle, &NewStringId, Language, NULL, String, NULL);\r
+    } else {\r
+      Status = gHiiString->SetString (gHiiString, HiiHandle, StringId, Language, String, NULL);\r
+    }\r
 \r
     //\r
-    // For each language supported by the package,\r
-    // the string is updated.\r
+    // If there was an error, then break out of the loop and return a StringId of 0\r
     //\r
-    Status = gHiiString->SetString (\r
-                                 gHiiString,\r
-                                 PackageList,\r
-                                 StringId,\r
-                                 Lang,\r
-                                 String,\r
-                                 NULL\r
-                                 );\r
     if (EFI_ERROR (Status)) {\r
       break;\r
     }\r
   }\r
 \r
-  FreePool (Lang);\r
-  FreePool (Languages);\r
-\r
-  return Status;\r
+  //\r
+  // Free the buffer of supported languages\r
+  //\r
+  FreePool (AllocatedLanguages);\r
+\r
+  if (EFI_ERROR (Status)) {\r
+    return (EFI_STRING_ID)(0);\r
+  } else if (StringId == (EFI_STRING_ID)(0)) {\r
+    return NewStringId;\r
+  } else {\r
+    return StringId;\r
+  }\r
 }\r
 \r
 \r
 /**\r
-  Get the string given the StringId and String package Producer's Guid. The caller\r
-  is responsible to free the *String.\r
-\r
-  If PackageList with the matching ProducerGuid is not found, then ASSERT.\r
-  If PackageList with the matching ProducerGuid is found but no String is\r
-  specified by StringId is found, then ASSERT.\r
-\r
-  @param  ProducerGuid           The Guid of String package list.\r
-  @param  StringId               The String ID.\r
-  @param  String                 The output string.\r
-\r
-  @retval EFI_SUCCESS            Operation is successful.\r
-  @retval EFI_OUT_OF_RESOURCES   There is not enought memory in the system.\r
+  Retrieves a string from a string package names by GUID in a specific language.  \r
+  If the language is not specified, then a string from a string package in the \r
+  current platform  language is retrieved.  If the string can not be retrieved \r
+  using the specified language or the current platform language, then the string \r
+  is retrieved from the string package in the first language the string package \r
+  supports.  The returned string is allocated using AllocatePool().  The caller \r
+  is responsible for freeing the allocated buffer using FreePool().\r
+  \r
+  If PackageListGuid is NULL, then ASSERT().\r
+  If StringId is 0, then ASSERT.\r
+\r
+  @param[in]  PackageListGuid  The GUID of a package list that was previously \r
+                               registered in the HII Database.\r
+  @param[in]  StringId         The identifier of the string to retrieved from the \r
+                               string package associated with PackageListGuid.\r
+  @param[in]  Language         The language of the string to retrieve.  If this \r
+                               parameter is NULL, then the current platform \r
+                               language is used.  The format of Language must \r
+                               follow the language format assumed the HII Database.\r
+\r
+  @retval NULL   The package list specified by PackageListGuid is not present in the\r
+                 HII Database.\r
+  @retval NULL   The string specified by StringId is not present in the string package.\r
+  @retval Other  The string was returned.\r
 \r
 **/\r
-EFI_STATUS\r
+EFI_STRING\r
 EFIAPI\r
-HiiLibGetStringFromToken (\r
-  IN  EFI_GUID                        *ProducerGuid,\r
-  IN  EFI_STRING_ID                   StringId,\r
-  OUT EFI_STRING                      *String\r
+HiiGetPackageString (\r
+  IN CONST EFI_GUID  *PackageListGuid,\r
+  IN EFI_STRING_ID   StringId,\r
+  IN CONST CHAR8     *Language  OPTIONAL\r
   )\r
 {\r
-  EFI_STATUS      Status;\r
-  UINTN           Index;\r
-  UINTN           HandleBufferLen;\r
-  EFI_HII_HANDLE  *HiiHandleBuffer;\r
-  EFI_GUID        Guid;\r
+  EFI_HANDLE  *HiiHandleBuffer;\r
+  EFI_HANDLE  HiiHandle;\r
 \r
-  Status = HiiLibGetHiiHandles (&HandleBufferLen, &HiiHandleBuffer);\r
-  if (HiiHandleBuffer == NULL) {\r
-    return EFI_NOT_FOUND;\r
-  }\r
-  for (Index = 0; Index < (HandleBufferLen / sizeof (EFI_HII_HANDLE)); Index++) {\r
-    Status = HiiLibExtractGuidFromHiiHandle (HiiHandleBuffer[Index], &Guid);\r
-    if (EFI_ERROR(Status)) {\r
-      return Status;\r
-    }\r
-    if (CompareGuid (&Guid, ProducerGuid)) {\r
-      break;\r
-    }\r
-  }\r
+  ASSERT (PackageListGuid != NULL);\r
 \r
-  if (Index >= (HandleBufferLen / sizeof (EFI_HII_HANDLE))) {\r
-    //\r
-    // If PackageList with the matching ProducerGuid is not found, then ASSERT.\r
-    //\r
-    ASSERT (FALSE);\r
-    Status = EFI_NOT_FOUND;\r
-    goto Out;\r
+  HiiHandleBuffer = HiiGetHiiHandles (PackageListGuid);\r
+  if (HiiHandleBuffer == NULL) {\r
+    return NULL;\r
   }\r
 \r
-  Status = HiiLibGetStringFromHandle (HiiHandleBuffer[Index], StringId, String);\r
-\r
-Out:\r
+  HiiHandle = HiiHandleBuffer[0];\r
   FreePool (HiiHandleBuffer);\r
 \r
-  return Status;\r
+  return HiiGetString (HiiHandle, StringId, Language);\r
 }\r
 \r
 /**\r
-  This function try to retrieve string from String package of current language.\r
-  If fails, it try to retrieve string from String package of first language it support.\r
-\r
-  If StringSize is NULL, then ASSERT.\r
-  If String is NULL and *StringSize is not 0, then ASSERT.\r
-  If PackageList could not be found in the default HII database, then ASSERT.\r
-  If StringId is not found in PackageList, then ASSERT.\r
-\r
-  @param  PackageList     The package list in the HII database to search for\r
-                                     the specified string.\r
-  @param  StringId          The string's id, which is unique within\r
-                                      PackageList.\r
-  @param  String             Points to the new null-terminated string.\r
-  @param  StringSize       On entry, points to the size of the buffer pointed\r
-                                 to by String, in bytes. On return, points to the\r
-                                 length of the string, in bytes.\r
-\r
-  @retval EFI_SUCCESS            The string was returned successfully.\r
-  @retval EFI_NOT_FOUND          The string specified by StringId is not available.\r
-  @retval EFI_BUFFER_TOO_SMALL   The buffer specified by StringLength is too small\r
-                                 to hold the string.\r
+  Retrieves a string from a string package in a specific language.  If the language\r
+  is not specified, then a string from a string package in the current platform \r
+  language is retrieved.  If the string can not be retrieved using the specified \r
+  language or the current platform language, then the string is retrieved from \r
+  the string package in the first language the string package supports.  The \r
+  returned string is allocated using AllocatePool().  The caller is responsible \r
+  for freeing the allocated buffer using FreePool().\r
+  \r
+  If HiiHandle is NULL, then ASSERT().\r
+  If StringId is 0, then ASSET.\r
+\r
+  @param[in]  HiiHandle  A handle that was previously registered in the HII Database.\r
+  @param[in]  StringId   The identifier of the string to retrieved from the string \r
+                         package associated with HiiHandle.\r
+  @param[in]  Language   The language of the string to retrieve.  If this parameter \r
+                         is NULL, then the current platform language is used.  The \r
+                         format of Language must follow the language format assumed \r
+                         the HII Database.\r
+\r
+  @retval NULL   The string specified by StringId is not present in the string package.\r
+  @retval Other  The string was returned.\r
 \r
 **/\r
-EFI_STATUS\r
+EFI_STRING\r
 EFIAPI\r
-HiiLibGetString (\r
-  IN  EFI_HII_HANDLE                  PackageList,\r
-  IN  EFI_STRING_ID                   StringId,\r
-  OUT EFI_STRING                      String,\r
-  IN  OUT UINTN                       *StringSize\r
+HiiGetString (\r
+  IN EFI_HII_HANDLE  HiiHandle,\r
+  IN EFI_STRING_ID   StringId,\r
+  IN CONST CHAR8     *Language  OPTIONAL\r
   )\r
 {\r
   EFI_STATUS  Status;\r
-  CHAR8       *Languages;\r
-  CHAR8       *CurrentLang;\r
+  UINTN       StringSize;\r
+  CHAR16      TempString;\r
+  EFI_STRING  String;\r
+  CHAR8       *SupportedLanguages;\r
+  CHAR8       *PlatformLanguage;\r
   CHAR8       *BestLanguage;\r
 \r
-  ASSERT (StringSize != NULL);\r
-  ASSERT (!(*StringSize != 0 && String == NULL));\r
-  ASSERT (IsHiiHandleRegistered (PackageList));\r
+  ASSERT (HiiHandle != NULL);\r
+  ASSERT (StringId != 0);\r
 \r
-  Languages = HiiLibGetSupportedLanguages (PackageList);\r
-  ASSERT (Languages != NULL);\r
+  //\r
+  // Initialize all allocated buffers to NULL\r
+  // \r
+  SupportedLanguages = NULL;\r
+  PlatformLanguage   = NULL;\r
+  BestLanguage       = NULL;\r
+  String             = NULL;\r
 \r
-  CurrentLang = GetEfiGlobalVariable (L"PlatformLang");\r
-  \r
-  Status = EFI_NOT_FOUND;\r
-  BestLanguage = GetBestLanguage (\r
-                   Languages,\r
-                   FALSE,\r
-                   (CurrentLang != NULL) ? CurrentLang : "",\r
-                   (CHAR8 *) PcdGetPtr (PcdUefiVariableDefaultPlatformLang),\r
-                   Languages,\r
-                   NULL\r
-                   );\r
-  if (BestLanguage != NULL ) {\r
-     Status = gHiiString->GetString (\r
-                               gHiiString,\r
-                               BestLanguage,\r
-                               PackageList,\r
-                               StringId,\r
-                               String,\r
-                               StringSize,\r
-                               NULL\r
-                               );\r
-     FreePool (BestLanguage);\r
-  }\r
-  if (CurrentLang != NULL) {\r
-    FreePool (CurrentLang);\r
+  //\r
+  // Get the languages that the package specified by HiiHandle supports\r
+  //\r
+  SupportedLanguages = HiiGetSupportedLanguages (HiiHandle);\r
+  if (SupportedLanguages == NULL) {\r
+    goto Error;\r
   }\r
-  FreePool (Languages);\r
-\r
-  return Status;\r
-}\r
 \r
+  //\r
+  // Get the current platform language setting\r
+  //\r
+  PlatformLanguage = GetEfiGlobalVariable (L"PlatformLang");\r
 \r
-/**\r
-  Get string specified by StringId form the HiiHandle. The caller\r
-  is responsible to free the *String.\r
-\r
-  If String is NULL, then ASSERT.\r
-  If HiiHandle could not be found in the default HII database, then ASSERT.\r
-  If StringId is not found in PackageList, then ASSERT.\r
-\r
-  @param  HiiHandle              The HII handle of package list.\r
-  @param  StringId               The String ID.\r
-  @param  String                 The output string.\r
+  //\r
+  // If Languag is NULL, then set it to an empty string, so it will be \r
+  // skipped by GetBestLanguage()\r
+  //\r
+  if (Language == NULL) {\r
+    Language = "";\r
+  }\r
 \r
-  @retval EFI_NOT_FOUND          String is not found.\r
-  @retval EFI_SUCCESS            Operation is successful.\r
-  @retval EFI_OUT_OF_RESOURCES   There is not enought memory in the system.\r
+  //\r
+  // Get the best matching language from SupportedLanguages\r
+  //\r
+  BestLanguage = GetBestLanguage (\r
+                   SupportedLanguages, \r
+                   FALSE,                                             // RFC 4646 mode\r
+                   Language,                                          // Highest priority \r
+                   PlatformLanguage != NULL ? PlatformLanguage : "",  // Next highest priority\r
+                   SupportedLanguages,                                // Lowest priority \r
+                   NULL\r
+                   );\r
+  if (BestLanguage == NULL) {\r
+    goto Error;\r
+  }\r
 \r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibGetStringFromHandle (\r
-  IN  EFI_HII_HANDLE                  HiiHandle,\r
-  IN  EFI_STRING_ID                   StringId,\r
-  OUT EFI_STRING                      *String\r
-  )\r
-{\r
-  EFI_STATUS                          Status;\r
-  UINTN                               StringSize;\r
+  //\r
+  // Retrieve the size of the string in the string package for the BestLanguage\r
+  //\r
+  StringSize = 0;\r
+  Status = gHiiString->GetString (\r
+                         gHiiString,\r
+                         BestLanguage,\r
+                         HiiHandle,\r
+                         StringId,\r
+                         &TempString,\r
+                         &StringSize,\r
+                         NULL\r
+                         );\r
+  //\r
+  // If GetString() returns EFI_SUCCESS for a zero size, \r
+  // then there are no supported languages registered for HiiHandle.  If GetString() \r
+  // returns an error other than EFI_BUFFER_TOO_SMALL, then HiiHandle is not present\r
+  // in the HII Database\r
+  //\r
+  if (Status != EFI_BUFFER_TOO_SMALL) {\r
+    goto Error;\r
+  }\r
 \r
-  ASSERT (String != NULL);\r
+  //\r
+  // Allocate a buffer for the return string\r
+  //\r
+  String = AllocateZeroPool (StringSize);\r
+  if (String == NULL) {\r
+    goto Error;\r
+  }\r
 \r
-  StringSize = HII_LIB_DEFAULT_STRING_SIZE;\r
-  *String    = AllocateZeroPool (StringSize);\r
-  if (*String == NULL) {\r
-    return EFI_OUT_OF_RESOURCES;\r
+  //\r
+  // Retrieve the string from the string package\r
+  //\r
+  Status = gHiiString->GetString (\r
+                         gHiiString,\r
+                         BestLanguage,\r
+                         HiiHandle,\r
+                         StringId,\r
+                         String,\r
+                         &StringSize,\r
+                         NULL\r
+                         );\r
+  if (EFI_ERROR (Status)) {\r
+    //\r
+    // Free the buffer and return NULL if the supported languages can not be retrieved.\r
+    //\r
+    FreePool (String);\r
+    String = NULL;\r
   }\r
 \r
-  Status = HiiLibGetString (HiiHandle, StringId, *String, &StringSize);\r
-  if (Status == EFI_BUFFER_TOO_SMALL) {\r
-    FreePool (*String);\r
-    *String = AllocateZeroPool (StringSize);\r
-    if (*String == NULL) {\r
-      return EFI_OUT_OF_RESOURCES;\r
-    }\r
-    Status = HiiLibGetString (HiiHandle, StringId, *String, &StringSize);\r
+Error:\r
+  //\r
+  // Free allocated buffers\r
+  //\r
+  if (SupportedLanguages != NULL) {\r
+    FreePool (SupportedLanguages);\r
+  }\r
+  if (PlatformLanguage != NULL) {\r
+    FreePool (PlatformLanguage);\r
+  }\r
+  if (BestLanguage != NULL) {\r
+    FreePool (BestLanguage);\r
   }\r
 \r
-  return Status;\r
+  //\r
+  // Return the Null-terminated Unicode string\r
+  //\r
+  return String;\r
 }\r
 \r
-\r
-\r
 /**\r
   Convert language code from RFC3066 to ISO639-2.\r
 \r
index e1446351d7b36e0c0178956e9cb9ae699db53a4a..c3fd834ec5be1e9f7ac3d564cc7ce50861b224ab 100644 (file)
@@ -48,17 +48,23 @@ extern CONST EFI_HII_DATABASE_PROTOCOL         *mHiiDatabaseProt;
 extern CONST EFI_HII_STRING_PROTOCOL           *mHiiStringProt;\r
 \r
 /**\r
-  This function check if the Hii Handle is a valid handle registered\r
-  in the HII database.\r
+  Extract Hii package list GUID for given HII handle.\r
 \r
-  @param HiiHandle The HII Handle.\r
+  If HiiHandle could not be found in the HII database, then ASSERT.\r
+  If Guid is NULL, then ASSERT.\r
+\r
+  @param  Handle              Hii handle\r
+  @param  Guid                Package list GUID\r
+\r
+  @retval EFI_SUCCESS            Successfully extract GUID from Hii database.\r
 \r
-  @retval TRUE If it is a valid HII handle.\r
-  @retval FALSE If it is a invalid HII handle.\r
 **/\r
-BOOLEAN\r
-IsHiiHandleRegistered (\r
-  EFI_HII_HANDLE    HiiHandle\r
-  );\r
+EFI_STATUS\r
+EFIAPI\r
+InternalHiiExtractGuidFromHiiHandle (\r
+  IN      EFI_HII_HANDLE      Handle,\r
+  OUT     EFI_GUID            *Guid\r
+  )\r
+;\r
 \r
 #endif\r
index 4de8009bdfefd5d132b927871c7ac656f1299ce2..3d2e3f3f2ab2959ce2d53a3bf950f55f4de68115 100644 (file)
@@ -1857,7 +1857,6 @@ RegisterFontPackage (
   EFI_STATUS                           Status;\r
   EFI_HII_SIMPLE_FONT_PACKAGE_HDR      *SimplifiedFont;\r
   UINT32                               PackageLength;\r
-  EFI_HII_PACKAGE_LIST_HEADER          *PackageList;\r
   UINT8                                *Package;\r
   UINT8                                *Location;\r
   EFI_HII_DATABASE_PROTOCOL            *HiiDatabase;\r
@@ -1873,7 +1872,7 @@ RegisterFontPackage (
   ASSERT_EFI_ERROR (Status);\r
 \r
   //\r
-  // Add 4 bytes to the header for entire length for HiiLibPreparePackageList use only.\r
+  // Add 4 bytes to the header for entire length for HiiAddPackages use only.\r
   //\r
   //    +--------------------------------+ <-- Package\r
   //    |                                |\r
@@ -1905,10 +1904,13 @@ RegisterFontPackage (
   //\r
   // Add this simplified font package to a package list then install it.\r
   //\r
-  PackageList = HiiLibPreparePackageList (1, &mFontPackageListGuid, Package);\r
-  Status = HiiDatabase->NewPackageList (HiiDatabase, PackageList, NULL, &mHiiHandle);\r
-  ASSERT_EFI_ERROR (Status);\r
-  FreePool (PackageList);\r
+  mHiiHandle = HiiAddPackages (\r
+                 &mFontPackageListGuid,\r
+                 NULL,\r
+                 Package,\r
+                 NULL\r
+                 );\r
+  ASSERT (mHiiHandle != NULL);\r
   FreePool (Package);\r
 }\r
 \r
index 409c8e4740a32e81690df657e3548659af3f637e..573374f59bf949421f0d8f54c19306191519496a 100644 (file)
@@ -170,21 +170,21 @@ ValidatePassword (
   //\r
   // Get user input password\r
   //\r
-  BufferSize = 21 * sizeof (CHAR16);\r
-  Password = AllocateZeroPool (BufferSize);\r
-  ASSERT (Password != NULL);\r
-\r
-  Status = HiiLibGetString (PrivateData->HiiHandle[0], StringId, Password, &BufferSize);\r
-  if (EFI_ERROR (Status)) {\r
+  Password = HiiGetString (PrivateData->HiiHandle[0], StringId, NULL);\r
+  if (Password == NULL) {\r
+    return EFI_NOT_READY;\r
+  }\r
+  if (StrLen (Password) > 20) {\r
     FreePool (Password);\r
-    return Status;\r
+    return EFI_NOT_READY;\r
   }\r
 \r
   //\r
   // Validate old password\r
   //\r
-  EncodedPassword = AllocateCopyPool (21 * sizeof (CHAR16), Password);\r
+  EncodedPassword = AllocateZeroPool (21 * sizeof (CHAR16));\r
   ASSERT (EncodedPassword != NULL);\r
+  StrnCpy (EncodedPassword, Password, 21);\r
   EncodePassword (EncodedPassword, 20 * sizeof (CHAR16));\r
   if (CompareMem (EncodedPassword, PrivateData->Configuration.WhatIsThePassword2, 20 * sizeof (CHAR16)) != 0) {\r
     //\r
@@ -219,6 +219,7 @@ SetPassword (
 {\r
   EFI_STATUS                      Status;\r
   CHAR16                          *Password;\r
+  CHAR16                          *TempPassword;\r
   UINTN                           PasswordSize;\r
   DRIVER_SAMPLE_CONFIGURATION     *Configuration;\r
   UINTN                           BufferSize;\r
@@ -242,13 +243,19 @@ SetPassword (
   // Get user input password\r
   //\r
   Password = &PrivateData->Configuration.WhatIsThePassword2[0];\r
-  PasswordSize = sizeof (PrivateData->Configuration.WhatIsThePassword2);\r
-  \r
+  PasswordSize = sizeof (PrivateData->Configuration.WhatIsThePassword2); \r
   ZeroMem (Password, PasswordSize);\r
-  Status = HiiLibGetString (PrivateData->HiiHandle[0], StringId, Password, &BufferSize);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
+  \r
+  TempPassword = HiiGetString (PrivateData->HiiHandle[0], StringId, NULL);\r
+  if (TempPassword == NULL) {\r
+    return EFI_NOT_READY;\r
+  }\r
+  if (StrLen (TempPassword) > PasswordSize / sizeof (CHAR16)) {\r
+    FreePool (TempPassword);\r
+    return EFI_NOT_READY;\r
   }\r
+  StrnCpy (Password, TempPassword, PasswordSize / sizeof (CHAR16));\r
+  FreePool (TempPassword);\r
 \r
   //\r
   // Retrive uncommitted data from Browser\r
@@ -786,7 +793,6 @@ DriverSampleInit (
 {\r
   EFI_STATUS                      Status;\r
   EFI_STATUS                      SavedStatus;\r
-  EFI_HII_PACKAGE_LIST_HEADER     *PackageList;\r
   EFI_HII_HANDLE                  HiiHandle[2];\r
   EFI_SCREEN_DESCRIPTOR           Screen;\r
   EFI_HII_DATABASE_PROTOCOL       *HiiDatabase;\r
@@ -878,26 +884,17 @@ DriverSampleInit (
   //\r
   // Publish our HII data\r
   //\r
-  PackageList = HiiLibPreparePackageList (\r
-                  2,\r
-                  &mFormSetGuid,\r
-                  DriverSampleStrings,\r
-                  VfrBin\r
-                  );\r
-  if (PackageList == NULL) {\r
+  HiiHandle[0] = HiiAddPackages (\r
+                   &mFormSetGuid,\r
+                   DriverHandle[0],\r
+                   DriverSampleStrings,\r
+                   VfrBin,\r
+                   NULL\r
+                   );\r
+  if (HiiHandle[0] == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
-  Status = HiiDatabase->NewPackageList (\r
-                          HiiDatabase,\r
-                          PackageList,\r
-                          DriverHandle[0],\r
-                          &HiiHandle[0]\r
-                          );\r
-  FreePool (PackageList);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
   PrivateData->HiiHandle[0] = HiiHandle[0];\r
 \r
   //\r
@@ -913,26 +910,17 @@ DriverSampleInit (
 \r
   PrivateData->DriverHandle[1] = DriverHandle[1];\r
 \r
-  PackageList = HiiLibPreparePackageList (\r
-                  2,\r
-                  &mInventoryGuid,\r
-                  DriverSampleStrings,\r
-                  InventoryBin\r
-                  );\r
-  if (PackageList == NULL) {\r
+  HiiHandle[1] = HiiAddPackages (\r
+                   &mInventoryGuid,\r
+                   DriverHandle[1],\r
+                   DriverSampleStrings,\r
+                   InventoryBin,\r
+                   NULL\r
+                   );\r
+  if (HiiHandle[1] == NULL) {\r
     return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
-  Status = HiiDatabase->NewPackageList (\r
-                          HiiDatabase,\r
-                          PackageList,\r
-                          DriverHandle[1],\r
-                          &HiiHandle[1]\r
-                          );\r
-  FreePool (PackageList);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
-  }\r
   PrivateData->HiiHandle[1] = HiiHandle[1];\r
 \r
   //\r
@@ -941,9 +929,8 @@ DriverSampleInit (
   //\r
   NewString = L"700 Mhz";\r
 \r
-  Status = HiiLibSetString (HiiHandle[0], STRING_TOKEN (STR_CPU_STRING2), NewString);\r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
+  if (HiiSetString (HiiHandle[0], STRING_TOKEN (STR_CPU_STRING2), NewString, NULL) == 0) {\r
+    return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
   //\r
index 3317e4fdc2740a063f00b1600b7f41944b475440..ded33121ecedd73d3be9578b053a17782ad2f738 100644 (file)
@@ -34,6 +34,7 @@ Revision History
 \r
 #include <Guid/MdeModuleHii.h>\r
 #include <Library/DebugLib.h>\r
+#include <Library/BaseLib.h>\r
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/UefiRuntimeServicesTableLib.h>\r
 #include <Library/UefiDriverEntryPoint.h>\r
@@ -53,7 +54,7 @@ extern UINT8 VfrMyIfrNVDataBlockName[];
 \r
 //\r
 // This is the generated IFR binary data for each formset defined in VFR.\r
-// This data array is ready to be used as input of HiiLibPreparePackageList() to\r
+// This data array is ready to be used as input of HiiAddPackages() to\r
 // create a packagelist (which contains Form packages, String packages, etc).\r
 //\r
 extern UINT8  VfrBin[];\r
@@ -61,7 +62,7 @@ extern UINT8  InventoryBin[];
 \r
 //\r
 // This is the generated String package data for all .UNI files.\r
-// This data array is ready to be used as input of HiiLibPreparePackageList() to\r
+// This data array is ready to be used as input of HiiAddPackages() to\r
 // create a packagelist (which contains Form packages, String packages, etc).\r
 //\r
 extern UINT8  DriverSampleStrings[];\r
index 3ed56e934e18f02d60ad38353dbb33157542da13..657d0ca78e11042e03fc58e11da12ac18e124422 100644 (file)
@@ -46,6 +46,7 @@
 \r
 \r
 [LibraryClasses]\r
+  BaseLib\r
   MemoryAllocationLib\r
   UefiBootServicesTableLib\r
   UefiDriverEntryPoint\r
index 76068e573e7c4d367c808a85d9fb9793b6287047..0025f24bc1c9703947f2c6ab2bea9c66b55f0aa0 100644 (file)
@@ -715,7 +715,7 @@ IScsiFormCallback (
 \r
       UnicodeSPrint (PortString, (UINTN) 128, L"Port %s", ConfigFormEntry->MacString);\r
       DeviceFormTitleToken = (EFI_STRING_ID) STR_ISCSI_DEVICE_FORM_TITLE;\r
-      HiiLibSetString (Private->RegisteredHandle, DeviceFormTitleToken, PortString);\r
+      HiiSetString (Private->RegisteredHandle, DeviceFormTitleToken, PortString, NULL);\r
 \r
       IScsiConvertDeviceConfigDataToIfrNvData (ConfigFormEntry, IfrNvData);\r
 \r
@@ -840,13 +840,13 @@ IScsiConfigUpdateForm (
       // Compose the Port string and create a new EFI_STRING_ID.\r
       //\r
       UnicodeSPrint (PortString, 128, L"Port %s", ConfigFormEntry->MacString);\r
-      HiiLibNewString (mCallbackInfo->RegisteredHandle, &ConfigFormEntry->PortTitleToken, PortString);\r
+      ConfigFormEntry->PortTitleToken = HiiSetString (mCallbackInfo->RegisteredHandle, 0, PortString, NULL);\r
 \r
       //\r
       // Compose the help string of this port and create a new EFI_STRING_ID.\r
       //\r
       UnicodeSPrint (PortString, 128, L"Set the iSCSI parameters on port %s", ConfigFormEntry->MacString);\r
-      HiiLibNewString (mCallbackInfo->RegisteredHandle, &ConfigFormEntry->PortTitleHelpToken, PortString);\r
+      ConfigFormEntry->PortTitleHelpToken = HiiSetString (mCallbackInfo->RegisteredHandle, 0, PortString, NULL);\r
 \r
       InsertTailList (&mIScsiConfigFormList, &ConfigFormEntry->Link);\r
       mNumberOfIScsiDevices++;\r
@@ -931,7 +931,6 @@ IScsiConfigFormInit (
 {\r
   EFI_STATUS                  Status;\r
   EFI_HII_DATABASE_PROTOCOL   *HiiDatabase;\r
-  EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
   ISCSI_FORM_CALLBACK_INFO    *CallbackInfo;\r
 \r
   Status = gBS->LocateProtocol (&gEfiHiiDatabaseProtocolGuid, NULL, (VOID **)&HiiDatabase);\r
@@ -974,19 +973,16 @@ IScsiConfigFormInit (
   //\r
   // Publish our HII data\r
   //\r
-  PackageList = HiiLibPreparePackageList (2, &mVendorGuid, IScsiDxeStrings, IScsiConfigDxeBin);\r
-  ASSERT (PackageList != NULL);\r
-  \r
-  Status = HiiDatabase->NewPackageList (\r
-                           HiiDatabase,\r
-                           PackageList,\r
-                           CallbackInfo->DriverHandle,\r
-                           &CallbackInfo->RegisteredHandle\r
-                           );\r
-  FreePool (PackageList);\r
-  if (EFI_ERROR (Status)) {\r
+  CallbackInfo->RegisteredHandle = HiiAddPackages (\r
+                                     &mVendorGuid,\r
+                                     CallbackInfo->DriverHandle,\r
+                                     IScsiDxeStrings,\r
+                                     IScsiConfigDxeBin,\r
+                                     NULL\r
+                                     );\r
+  if (CallbackInfo->RegisteredHandle == NULL) {\r
     FreePool(CallbackInfo);\r
-    return Status;\r
+    return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
   mCallbackInfo = CallbackInfo;\r
index e612d4f8550645dea7eaa6e8977f8468e82c1ebd..02f555625566c53dae7e0c48de833e494a86348a 100644 (file)
@@ -108,17 +108,15 @@ UpdateCheckBoxStringToken (
 {\r
   CHAR16                  Str[MAXIMUM_VALUE_CHARACTERS];\r
   EFI_STRING_ID           Id;\r
-  EFI_STATUS              Status;\r
 \r
   ASSERT (Statement != NULL);\r
   ASSERT (Statement->Operand == EFI_IFR_NUMERIC_OP);\r
   \r
   UnicodeValueToString (Str, 0, Statement->VarStoreInfo.VarName, MAXIMUM_VALUE_CHARACTERS - 1);\r
-  \r
-  Status = HiiLibNewString (FormSet->HiiHandle, &Id, Str);\r
 \r
-  if (EFI_ERROR (Status)) {\r
-    return Status;\r
+  Id = HiiSetString (FormSet->HiiHandle, 0, Str, NULL);\r
+  if (Id == 0) {\r
+    return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
   Statement->VarStoreInfo.VarName = Id;\r
index 26acccd153aa2d53d32133672a326457d2294426..f5963ce2fe23f39b9b3019a9597314eb6240d2d9 100644 (file)
@@ -525,7 +525,6 @@ InitializeSetup (
   )\r
 {\r
   EFI_STATUS                  Status;\r
-  EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
 \r
   //\r
   // Locate required Hii relative protocols\r
@@ -554,15 +553,13 @@ InitializeSetup (
   //\r
   // Publish our HII data\r
   //\r
-  PackageList = HiiLibPreparePackageList (1, &gSetupBrowserGuid, SetupBrowserStrings);\r
-  ASSERT (PackageList != NULL);\r
-  Status = mHiiDatabase->NewPackageList (\r
-                           mHiiDatabase,\r
-                           PackageList,\r
-                           ImageHandle,\r
-                           &gHiiHandle\r
-                           );\r
-  ASSERT_EFI_ERROR (Status);\r
+  gHiiHandle = HiiAddPackages (\r
+                 &gSetupBrowserGuid,\r
+                 ImageHandle,\r
+                 SetupBrowserStrings,\r
+                 NULL\r
+                 );\r
+  ASSERT (gHiiHandle != NULL);\r
 \r
   //\r
   // Initialize Driver private data\r
@@ -603,11 +600,9 @@ NewString (
   )\r
 {\r
   EFI_STRING_ID  StringId;\r
-  EFI_STATUS     Status;\r
 \r
-  StringId = 0;\r
-  Status = HiiLibNewString (HiiHandle, &StringId, String);\r
-  ASSERT_EFI_ERROR (Status);\r
+  StringId = HiiSetString (HiiHandle, 0, String, NULL);\r
+  ASSERT (StringId != 0);\r
 \r
   return StringId;\r
 }\r
@@ -631,7 +626,8 @@ DeleteString (
   CHAR16  NullChar;\r
 \r
   NullChar = CHAR_NULL;\r
-  return HiiLibSetString (HiiHandle, StringId, &NullChar);\r
+  HiiSetString (HiiHandle, StringId, &NullChar, NULL);\r
+  return EFI_SUCCESS;\r
 }\r
 \r
 \r
@@ -651,29 +647,11 @@ GetToken (
   IN  EFI_HII_HANDLE               HiiHandle\r
   )\r
 {\r
-  EFI_STATUS  Status;\r
-  CHAR16      *String;\r
-  UINTN       BufferLength;\r
+  EFI_STRING  String;\r
 \r
-  //\r
-  // Set default string size assumption at no more than 256 bytes\r
-  //\r
-  BufferLength = 0x100;\r
-  String = AllocateZeroPool (BufferLength);\r
+  String = HiiGetString (HiiHandle, Token, NULL);\r
   ASSERT (String != NULL);\r
-\r
-  Status = HiiLibGetString (HiiHandle, Token, String, &BufferLength);\r
-\r
-  if (Status == EFI_BUFFER_TOO_SMALL) {\r
-    FreePool (String);\r
-    String = AllocateZeroPool (BufferLength);\r
-    ASSERT (String != NULL);\r
-\r
-    Status = HiiLibGetString (HiiHandle, Token, String, &BufferLength);\r
-  }\r
-  ASSERT_EFI_ERROR (Status);\r
-\r
-  return String;\r
+  return (CHAR16 *) String;\r
 }\r
 \r
 \r
index b19d1ba5b9ea450272e3a9cbaf7e7c8cdab53148..b352482f461428508edab67ea689a654d174fe20 100644 (file)
@@ -41,6 +41,7 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
 #include <Library/MemoryAllocationLib.h>\r
 #include <Library/HiiLib.h>\r
 #include <Library/PcdLib.h>\r
+#include <Library/DevicePathLib.h>\r
 \r
 #include "Colors.h"\r
 \r
index bd4ba108be911fed0e7df7f554d3a948ab29d17c..77951ee79f2ef1a3e72e48ba12a57f059e6a44ce 100644 (file)
@@ -59,7 +59,8 @@
   DebugLib\r
   PrintLib\r
   HiiLib\r
-  \r
+  DevicePathLib\r
+\r
 [Guids]\r
   gEfiIfrTianoGuid                              ## CONSUMES  ## GUID\r
   gEfiIfrFrameworkGuid                          ## CONSUMES  ## GUID\r
index 42074ca32b2c69b055055680ccd8908a85a04fa5..4d2fc8871aaf7dd3f6831cea115ebac5971889bd 100644 (file)
@@ -1448,6 +1448,102 @@ AdjustDateAndTimePosition (
   return PadLineNumber;\r
 }\r
 \r
+/**\r
+  Find HII Handle in the HII database associated with given Device Path.\r
+\r
+  If DevicePath is NULL, then ASSERT.\r
+\r
+  @param  DevicePath             Device Path associated with the HII package list\r
+                                 handle.\r
+\r
+  @retval Handle                 HII package list Handle associated with the Device\r
+                                        Path.\r
+  @retval NULL                   Hii Package list handle is not found.\r
+\r
+**/\r
+EFI_HII_HANDLE\r
+EFIAPI\r
+DevicePathToHiiHandle (\r
+  IN EFI_DEVICE_PATH_PROTOCOL   *DevicePath\r
+  )\r
+{\r
+  EFI_STATUS                  Status;\r
+  EFI_DEVICE_PATH_PROTOCOL    *TmpDevicePath;\r
+  UINTN                       BufferSize;\r
+  UINTN                       HandleCount;\r
+  UINTN                       Index;\r
+  EFI_HANDLE                  Handle;\r
+  EFI_HANDLE                  DriverHandle;\r
+  EFI_HII_HANDLE              *HiiHandles;\r
+  EFI_HII_HANDLE              HiiHandle;\r
+\r
+  ASSERT (DevicePath != NULL);\r
+\r
+  TmpDevicePath = DevicePath;\r
+  //\r
+  // Locate Device Path Protocol handle buffer\r
+  //\r
+  Status = gBS->LocateDevicePath (\r
+                  &gEfiDevicePathProtocolGuid,\r
+                  &TmpDevicePath,\r
+                  &DriverHandle\r
+                  );\r
+  if (EFI_ERROR (Status) || !IsDevicePathEnd (TmpDevicePath)) {\r
+    return NULL;\r
+  }\r
+\r
+  //\r
+  // Retrieve all HII Handles from HII database\r
+  //\r
+  BufferSize = 0x1000;\r
+  HiiHandles = AllocatePool (BufferSize);\r
+  ASSERT (HiiHandles != NULL);\r
+  Status = mHiiDatabase->ListPackageLists (\r
+                           mHiiDatabase,\r
+                           EFI_HII_PACKAGE_TYPE_ALL,\r
+                           NULL,\r
+                           &BufferSize,\r
+                           HiiHandles\r
+                           );\r
+  if (Status == EFI_BUFFER_TOO_SMALL) {\r
+    FreePool (HiiHandles);\r
+    HiiHandles = AllocatePool (BufferSize);\r
+    ASSERT (HiiHandles != NULL);\r
+\r
+    Status = mHiiDatabase->ListPackageLists (\r
+                             mHiiDatabase,\r
+                             EFI_HII_PACKAGE_TYPE_ALL,\r
+                             NULL,\r
+                             &BufferSize,\r
+                             HiiHandles\r
+                             );\r
+  }\r
+\r
+  if (EFI_ERROR (Status)) {\r
+    FreePool (HiiHandles);\r
+    return NULL;\r
+  }\r
+\r
+  //\r
+  // Search Hii Handle by Driver Handle\r
+  //\r
+  HiiHandle = NULL;\r
+  HandleCount = BufferSize / sizeof (EFI_HII_HANDLE);\r
+  for (Index = 0; Index < HandleCount; Index++) {\r
+    Status = mHiiDatabase->GetPackageListHandle (\r
+                             mHiiDatabase,\r
+                             HiiHandles[Index],\r
+                             &Handle\r
+                             );\r
+    if (!EFI_ERROR (Status) && (Handle == DriverHandle)) {\r
+      HiiHandle = HiiHandles[Index];\r
+      break;\r
+    }\r
+  }\r
+\r
+  FreePool (HiiHandles);\r
+  return HiiHandle;\r
+}\r
 \r
 /**\r
   Display menu and wait for user to select one menu option, then return it.\r
@@ -2382,7 +2478,7 @@ UiDisplayMenu (
             }\r
           }\r
 \r
-          Selection->Handle = HiiLibDevicePathToHiiHandle (DevicePath);\r
+          Selection->Handle = DevicePathToHiiHandle (DevicePath);\r
           if (Selection->Handle == NULL) {\r
             //\r
             // If target Hii Handle not found, exit\r
index 9cc2aea86bb09b5ad319dd51922d6bfc1112df9f..d8d63d3da9408f7d813d7f16e96f2437e4f32a4f 100644 (file)
@@ -437,8 +437,13 @@ Returns:
   //\r
   // Initialize strings to HII database\r
   //\r
-  HiiLibAddPackages (1, &gEfiProcessorProducerGuid, NULL, &HiiHandle, CpuStrings);\r
-  \r
+  HiiHandle = HiiAddPackages (\r
+                &gEfiProcessorProducerGuid,\r
+                NULL,\r
+                CpuStrings,\r
+                NULL\r
+                );\r
+  ASSERT (HiiHandle != NULL);\r
 \r
   CopyMem (RecordBuffer.Raw, &mCpuDataRecordHeader, HeaderSize);\r
 \r
index 43846977571a6d89d331a5436ecdc9ff9e6626e3..8c2bcc19ea0c2436efdef66035ea38f50526b6b6 100644 (file)
@@ -180,11 +180,15 @@ Returns:
   //\r
   // Add our default strings to the HII database. They will be modified later.\r
   //\r
-  HiiLibAddPackages (1, &gEfiMiscSubClassGuid, NULL, &HiiHandle, MiscSubclassStrings);\r
-\r
-  if (EFI_ERROR (Status)) {\r
+  HiiHandle = HiiAddPackages (\r
+                &gEfiMiscSubClassGuid,\r
+                NULL,\r
+                MiscSubclassStrings,\r
+                NULL\r
+                );\r
+  if (HiiHandle == NULL) {\r
     DEBUG ((EFI_D_ERROR, "Could not log default strings to Hii.  %r\n", Status));\r
-    return Status;\r
+    return EFI_OUT_OF_RESOURCES;\r
   }\r
   //\r
   //\r
index aef2c30ccd3caf01b18f51e20eac92120efb2eec..f2541ee9940de08896aa8bd4af026177eb7dc541 100644 (file)
@@ -451,8 +451,13 @@ Returns:
   //\r
   // Initialize strings to HII database\r
   //\r
-  HiiLibAddPackages (1, &gEfiProcessorProducerGuid, NULL, &HiiHandle, CpuStrings);\r
-  \r
+  HiiHandle = HiiAddPackages (\r
+                &gEfiProcessorProducerGuid,\r
+                NULL,\r
+                CpuStrings,\r
+                NULL\r
+                );\r
+  ASSERT (HiiHandle != NULL);\r
 \r
   CopyMem (RecordBuffer.Raw, &mCpuDataRecordHeader, HeaderSize);\r
 \r
index de8d8ef6f0091009e36cec5309801bdfd97aaa26..553289668f82305fdea5946b97373bb4102c0c12 100644 (file)
@@ -181,12 +181,17 @@ Returns:
   //\r
   // Add our default strings to the HII database. They will be modified later.\r
   //\r
-  HiiLibAddPackages (1, &gEfiMiscSubClassGuid, NULL, &HiiHandle, MiscSubclassStrings);\r
-\r
-  if (EFI_ERROR (EfiStatus)) {\r
+  HiiHandle = HiiAddPackages (\r
+                &gEfiMiscSubClassGuid,\r
+                NULL,\r
+                MiscSubclassStrings,\r
+                NULL\r
+                );\r
+  if (HiiHandle == NULL) {\r
     DEBUG ((EFI_D_ERROR, "Could not log default strings to Hii.  %r\n", EfiStatus));\r
-    return EfiStatus;\r
+    return EFI_OUT_OF_RESOURCES;\r
   }\r
+\r
   //\r
   //\r
   //\r