]> 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
   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
     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
   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
     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
   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
     gBS->FreePool (UString);\r
     return ;\r
   }\r
@@ -345,7 +342,13 @@ DataHubGenEntrypoint (
     return Status;\r
   }\r
   \r
     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
 \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
   FORMSET_STORAGE                  *BufferStorage;\r
   EFI_STATUS                        Status;\r
   UINTN                             Size;\r
-  UINTN                             StringSize;\r
   EFI_STRING                        String;\r
 \r
   *NvMapAllocated = FALSE;\r
   EFI_STRING                        String;\r
 \r
   *NvMapAllocated = FALSE;\r
@@ -691,17 +690,10 @@ CreateIfrDataArray (
       break;\r
 \r
     case EFI_IFR_TYPE_STRING:\r
       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
       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
       break;\r
       \r
     default:\r
index 7882227fafb10ffbeca9df840f8925fdde425cb9..5a3df71aab52d25e68777d72dbddc08659644495 100644 (file)
@@ -156,7 +156,7 @@ InitializeHiiDatabase (
                   );\r
   ASSERT_EFI_ERROR (Status);\r
 \r
                   );\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
   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
     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
 \r
   if (LangCodes3066 == NULL) {\r
     return EFI_INVALID_PARAMETER;\r
@@ -437,6 +437,61 @@ Done:
   return Status;\r
 }\r
 \r
   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
 \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
   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
 \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
 \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
         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
   //\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
       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
   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
 \r
   Show progress bar with title above it. It only works in Graphics mode.\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
   VOID\r
   )\r
 {\r
-  EFI_STATUS Status;\r
-  \r
   //\r
   // Initialize strings to HII database\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
 }\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
                          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
 \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
   )\r
 {\r
   EFI_STRING_ID                             NewStringId;\r
-  EFI_STATUS                                Status;\r
-\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
     //\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
-\r
-  return Status;\r
 }\r
 \r
 /**\r
 }\r
 \r
 /**\r
@@ -388,9 +332,12 @@ HiiThunkGetString (
   OUT    EFI_STRING                 StringBuffer\r
   )\r
 {\r
   OUT    EFI_STRING                 StringBuffer\r
   )\r
 {\r
-  CHAR8                                 *Iso639AsciiLanguage;\r
   HII_THUNK_PRIVATE_DATA                *Private;\r
   HII_THUNK_PRIVATE_DATA                *Private;\r
+  CHAR8                                 *Iso639AsciiLanguage;\r
   CHAR8                                 *Rfc3066AsciiLanguage;\r
   CHAR8                                 *Rfc3066AsciiLanguage;\r
+  CHAR8                                 *SupportedLanguages;\r
+  CHAR8                                 *PlatformLanguage;\r
+  CHAR8                                 *BestLanguage;\r
   EFI_HII_HANDLE                        UefiHiiHandle;\r
   EFI_STATUS                            Status;\r
 \r
   EFI_HII_HANDLE                        UefiHiiHandle;\r
   EFI_STATUS                            Status;\r
 \r
@@ -427,7 +374,51 @@ HiiThunkGetString (
   }\r
 \r
   if (Rfc3066AsciiLanguage == NULL) {\r
   }\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
   } 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
 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
 \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
   \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
   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
 #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
 /**\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
   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
 \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
     }\r
   }\r
 \r
@@ -848,7 +850,6 @@ InitializeBM (
   )\r
 {\r
   EFI_LEGACY_BIOS_PROTOCOL    *LegacyBios;\r
   )\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
   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
   //\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
 \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
 \r
   //\r
   // Allocate space for creation of Buffer\r
@@ -1057,8 +1054,8 @@ InitializeBM (
   //\r
   // Remove our IFR data from HII database\r
   //\r
   //\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
 \r
   CleanUpStringDepository ();\r
 \r
@@ -1192,7 +1189,7 @@ GetStringTokenFromDepository (
     //\r
     NextListNode = AllocateZeroPool (sizeof (STRING_LIST_NODE));\r
     ASSERT (NextListNode != NULL);\r
     //\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
     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
     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
 \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
       // 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
 \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
 \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
                                       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
 \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
 \r
   if (OptionalDataExist) {\r
     Ptr += (UINT8) GetDevicePathSize (CallbackData->LoadContext->FilePathList);\r
@@ -814,13 +814,13 @@ Var_UpdateBootOption (
                                       CallbackData,\r
                                       BootOptionStrDepository\r
                                       );\r
                                       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
 \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
 \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
   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
 \r
 **/\r
 EFI_STATUS\r
@@ -138,7 +139,6 @@ InitializeBootManager (
   )\r
 {\r
   EFI_STATUS                  Status;\r
   )\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
 \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
   //\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
   return Status;\r
 }\r
 \r
@@ -244,7 +245,7 @@ CallBootManager (
       continue;\r
     }\r
 \r
       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
 \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
     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
 \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
   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
 **/\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
 \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
 \r
 **/\r
 EFI_STATUS\r
@@ -122,7 +122,6 @@ InitializeDeviceManager (
   )\r
 {\r
   EFI_STATUS                  Status;\r
   )\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
 \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
   //\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
   return Status;\r
 }\r
 \r
@@ -174,23 +174,18 @@ CallDeviceManager (
   EFI_STATUS                  Status;\r
   UINTN                       Count;\r
   UINTN                       Index;\r
   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
   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_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
 \r
   HiiHandles          = NULL;\r
-  HandleBufferLength  = 0;\r
 \r
   Status        = EFI_SUCCESS;\r
   gCallbackKey  = 0;\r
 \r
   Status        = EFI_SUCCESS;\r
   gCallbackKey  = 0;\r
@@ -221,37 +216,30 @@ CallDeviceManager (
   //\r
   // Get all the Hii handles\r
   //\r
   //\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
 \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
   //\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
     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
 \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
 \r
     for (Count = 0; Count < MENU_ITEM_NUM; Count++) {\r
       if (FormSetClass & mDeviceManagerMenuItemTable[Count].Class) {\r
@@ -266,7 +254,6 @@ CallDeviceManager (
       }\r
     }\r
   }\r
       }\r
     }\r
   }\r
-  FreePool (String);\r
 \r
   for (Index = 0; Index < MENU_ITEM_NUM; Index++) {\r
     //\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
   //\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
 \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
 \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
 \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
     //\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
     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
   )\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
   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
     //\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
     }\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
   // 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
   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
       }\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
       FreePool (StringBuffer);\r
     } else {\r
       Token = gFrontPagePrivate.LanguageToken[OptionCount];\r
@@ -578,11 +573,13 @@ GetProducerString (
   OUT     CHAR16                    **String\r
   )\r
 {\r
   OUT     CHAR16                    **String\r
   )\r
 {\r
-  EFI_STATUS      Status;\r
+  EFI_STRING      TmpString;\r
 \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
     *String = GetStringById (STRING_TOKEN (STR_MISSING_STRING));\r
+  } else {\r
+    *String = TmpString;\r
   }\r
 \r
   return EFI_SUCCESS;\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
         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
         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
         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
         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
         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
         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
         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
         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
           &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
         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
 \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
   ///\r
   UINT32                 Length;\r
 \r
@@ -260,13 +260,14 @@ ExportFonts (
   )\r
 {\r
   EFI_HII_HANDLE               HiiHandle;\r
   )\r
 {\r
   EFI_HII_HANDLE               HiiHandle;\r
-  EFI_HII_PACKAGE_LIST_HEADER  *PackageList;\r
 \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
 }\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
 /**\r
   Initialize HII global accessor for string support\r
 \r
-  @retval  EFI_SUCCESS  String support initialize success.\r
-\r
 **/\r
 **/\r
-EFI_STATUS\r
+VOID\r
 InitializeStringSupport (\r
   VOID\r
   )\r
 {\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
 }\r
 \r
 /**\r
@@ -70,10 +55,5 @@ GetStringById (
   IN  EFI_STRING_ID   Id\r
   )\r
 {\r
   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
index 81a7a6035acea3459c695e007c971d82a96b8c71..4b8efa4345c5b1c019144c46b916eb8b1f1a285f 100644 (file)
@@ -52,10 +52,8 @@ GetStringById (
 /**\r
   Initialize HII global accessor for string support\r
 \r
 /**\r
   Initialize HII global accessor for string support\r
 \r
-  @retval  EFI_SUCCESS  String support initialize success.\r
-\r
 **/\r
 **/\r
-EFI_STATUS\r
+VOID\r
 InitializeStringSupport (\r
   VOID\r
   );\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
   // 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
   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
   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
   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
   FreePool (NewString);\r
 \r
   //\r
@@ -504,13 +506,8 @@ UpdateDeviceSelectPage (
     }\r
     StrCat (NewString, ControllerName);\r
 \r
     }\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
     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
       //\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
       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
       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
     mDriverImageToken[Index] = NewStringToken;\r
-    ASSERT_EFI_ERROR (Status);\r
     FreePool (NewString);\r
     if (FreeDriverName) {\r
       FreePool (DriverName);\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
     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
     mDriverImageFilePathToken[Index] = NewStringHelpToken;\r
-    ASSERT_EFI_ERROR (Status);\r
     FreePool (NewString);\r
     FreePool (DriverName);\r
 \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
     // 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
   }\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
     // 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
   }\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
     // 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
   }\r
 \r
   if (KeyValue == KEY_VALUE_ORDER_SAVE_AND_EXIT) {\r
@@ -1383,22 +1373,8 @@ PlatOverMngrInit (
   )\r
 {\r
   EFI_STATUS                  Status;\r
   )\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
   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
   //\r
   // There should only be one Form Configuration protocol\r
   //\r
@@ -1439,23 +1415,15 @@ PlatOverMngrInit (
   //\r
   // Publish our HII data\r
   //\r
   //\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
     goto Finish;\r
   }\r
 \r
@@ -1494,11 +1462,8 @@ PlatOverMngrInit (
                            NULL\r
                            );\r
 \r
                            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
 \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_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
 \r
   //\r
   // Locate Hii database protocol\r
@@ -335,13 +334,14 @@ InstallDefaultKeyboardLayout (
   //\r
   // Install Keyboard Layout package to HII database\r
   //\r
   //\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
   }\r
 \r
   //\r
index 37b59bf3760e2dc63841302d5a09230ba11cfd2e..730f450fc5ac102ae59879b36206207082696a3a 100644 (file)
 \r
 \r
 /**\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
-\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
 \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
 \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
 \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
 \r
 **/\r
-EFI_STATUS\r
+EFI_HII_HANDLE\r
 EFIAPI\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
   ...\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
 \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
 \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
 \r
 **/\r
 VOID\r
 EFIAPI\r
-HiiLibRemovePackages (\r
+HiiRemovePackages (\r
   IN      EFI_HII_HANDLE      HiiHandle\r
   )\r
 ;\r
 \r
 /**\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
 \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
 \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
 \r
 **/\r
-EFI_STATUS\r
+EFI_STRING_ID\r
 EFIAPI\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
   )\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
 \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
 \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
 \r
 **/\r
-EFI_STATUS\r
+EFI_STRING\r
 EFIAPI\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
   )\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
 \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
 \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
 \r
 **/\r
-EFI_STATUS\r
+EFI_STRING\r
 EFIAPI\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
   )\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
 \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
 \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
 \r
 **/\r
-EFI_HII_HANDLE\r
+EFI_HII_HANDLE *\r
 EFIAPI\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
 \r
-\r
 /**\r
   Get next language from language code list (with separator ';').\r
 \r
 /**\r
   Get next language from language code list (with separator ';').\r
 \r
@@ -313,138 +239,30 @@ HiiLibGetNextLanguage (
 ;\r
 \r
 /**\r
 ;\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
   \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
 \r
-  @param  HiiHandle              The HII package list handle.\r
+  @param[in]  HiiHandle  A handle that was previously registered in the HII Database.\r
 \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
 \r
 **/\r
-UINT16\r
+CHAR8 *\r
 EFIAPI\r
 EFIAPI\r
-HiiLibGetSupportedLanguageNumber (\r
+HiiGetSupportedLanguages (\r
   IN EFI_HII_HANDLE           HiiHandle\r
   )\r
 ;\r
 \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
 /**\r
   Convert language code from RFC3066 to ISO639-2.\r
 \r
index 21173296ba90a7158be4c8005d0c03fd95fdf30b..45e178c44646ddb7e36cef6a659b4cc17547d56e 100644 (file)
@@ -58,155 +58,81 @@ HiiLibGetNextLanguage (
 \r
 \r
 /**\r
 \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
 \r
-  @param  HiiHandle              The HII package list handle.\r
+  @param[in]  HiiHandle  A handle that was previously registered in the HII Database.\r
 \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
 \r
 **/\r
 CHAR8 *\r
 EFIAPI\r
-HiiLibGetSupportedLanguages (\r
+HiiGetSupportedLanguages (\r
   IN EFI_HII_HANDLE           HiiHandle\r
   )\r
 {\r
   EFI_STATUS  Status;\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
 \r
-  ASSERT (IsHiiHandleRegistered (HiiHandle));\r
   //\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
   //\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
 \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
   //\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
   //\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
     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
 \r
+  //\r
+  // Retrieve the supported languages string\r
+  //\r
+  Status = gHiiString->GetLanguages (gHiiString, HiiHandle, SupportedLanguages, &LanguageSize);\r
   if (EFI_ERROR (Status)) {\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
   }\r
 \r
-  return LanguageString;\r
+  //\r
+  // Return the Null-terminated ASCII string of supported languages\r
+  //\r
+  return SupportedLanguages;\r
 }\r
 \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
 //\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
 //\r
-// Form Browser2 Protocol\r
+// Template used to mark the end of a list of packages \r
 //\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
 \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
 \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
     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
 \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
   )\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
 \r
-  MarkerBackup = Marker;\r
+  ASSERT (PackageListGuid != NULL);\r
 \r
   //\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
   //\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
   }\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
   //\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
 \r
-  Marker = MarkerBackup;\r
   //\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
   //\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
   }\r
 \r
   //\r
-  // Append EFI_HII_PACKAGE_END\r
+  // Add the length of the Package List Header and the terminating Package Header \r
   //\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
 \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
 \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
 \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
-**/\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
 \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
 \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
 \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
 \r
+  //\r
+  // Free the allocated package list\r
+  //\r
   FreePool (PackageListHeader);\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
 }\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
 \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
 \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
 \r
 **/\r
 VOID\r
 EFIAPI\r
-HiiLibRemovePackages (\r
+HiiRemovePackages (\r
   IN      EFI_HII_HANDLE      HiiHandle\r
   )\r
 {\r
   EFI_STATUS Status;\r
   IN      EFI_HII_HANDLE      HiiHandle\r
   )\r
 {\r
   EFI_STATUS Status;\r
-  ASSERT (IsHiiHandleRegistered (HiiHandle));\r
 \r
 \r
+  ASSERT (HiiHandle != NULL);\r
   Status = gHiiDatabase->RemovePackageList (gHiiDatabase, HiiHandle);\r
   ASSERT_EFI_ERROR (Status);\r
 }\r
 \r
 \r
 /**\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
 \r
 **/\r
-EFI_STATUS\r
+EFI_HII_HANDLE *\r
 EFIAPI\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
   )\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
 \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
 \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
 \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
   //\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
   }\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
 }\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
   If Guid is NULL, then ASSERT.\r
 \r
   @param  Handle              Hii handle\r
@@ -307,7 +319,7 @@ HiiLibGetHiiHandles (
 **/\r
 EFI_STATUS\r
 EFIAPI\r
 **/\r
 EFI_STATUS\r
 EFIAPI\r
-HiiLibExtractGuidFromHiiHandle (\r
+InternalHiiExtractGuidFromHiiHandle (\r
   IN      EFI_HII_HANDLE      Handle,\r
   OUT     EFI_GUID            *Guid\r
   )\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
   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
 \r
   //\r
   // Get HII PackageList\r
@@ -349,326 +361,6 @@ HiiLibExtractGuidFromHiiHandle (
   return EFI_SUCCESS;\r
 }\r
 \r
   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
 /**\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
   return EFI_SUCCESS;\r
 }\r
+\r
index 7d8ca5e11720664a8c1f670d9db2d7ce16ba9514..2c317e5de355c1501ba2ac1b4eab0f282396fe45 100644 (file)
@@ -163,339 +163,340 @@ zulzu\
 \r
 \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
+  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
 \r
 **/\r
-EFI_STATUS\r
+EFI_STRING_ID\r
 EFIAPI\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
   )\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
 \r
+  ASSERT (HiiHandle != NULL);\r
   ASSERT (String != NULL);\r
   ASSERT (String != NULL);\r
-  ASSERT (StringId != NULL);\r
 \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
 \r
-  Languages = HiiLibGetSupportedLanguages (PackageList);\r
-  ASSERT (Languages != NULL);\r
   //\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
   //\r
-  Lang = AllocatePool (AsciiStrSize (Languages));\r
-  ASSERT (Lang != NULL);\r
+  if (AllocatedLanguages == NULL) {\r
+    return (EFI_STRING_ID)(0);\r
+  }\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
 \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
     //\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
-\r
-  FreePool (Lang);\r
-  FreePool (Languages);\r
-\r
-  return Status;\r
-  \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
 \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
     //\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
     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
 }\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
 \r
 **/\r
-EFI_STATUS\r
+EFI_STRING\r
 EFIAPI\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
   )\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
 \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
 \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
   }\r
 \r
-  Status = HiiLibGetStringFromHandle (HiiHandleBuffer[Index], StringId, String);\r
-\r
-Out:\r
+  HiiHandle = HiiHandleBuffer[0];\r
   FreePool (HiiHandleBuffer);\r
 \r
   FreePool (HiiHandleBuffer);\r
 \r
-  return Status;\r
+  return HiiGetString (HiiHandle, StringId, Language);\r
 }\r
 \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
+  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
 \r
 **/\r
-EFI_STATUS\r
+EFI_STRING\r
 EFIAPI\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
   )\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
   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
 \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
 \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
   }\r
-  FreePool (Languages);\r
-\r
-  return Status;\r
-}\r
 \r
 \r
+  //\r
+  // Get the current platform language setting\r
+  //\r
+  PlatformLanguage = GetEfiGlobalVariable (L"PlatformLang");\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
+  // 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
 \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
-**/\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
 \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
 \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
   }\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
   }\r
 \r
-  return Status;\r
+  //\r
+  // Return the Null-terminated Unicode string\r
+  //\r
+  return String;\r
 }\r
 \r
 }\r
 \r
-\r
-\r
 /**\r
   Convert language code from RFC3066 to ISO639-2.\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
 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
 \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
 \r
-  @retval TRUE If it is a valid HII handle.\r
-  @retval FALSE If it is a invalid HII handle.\r
 **/\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
 \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_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
   UINT8                                *Package;\r
   UINT8                                *Location;\r
   EFI_HII_DATABASE_PROTOCOL            *HiiDatabase;\r
@@ -1873,7 +1872,7 @@ RegisterFontPackage (
   ASSERT_EFI_ERROR (Status);\r
 \r
   //\r
   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
   //\r
   //    +--------------------------------+ <-- Package\r
   //    |                                |\r
@@ -1905,10 +1904,13 @@ RegisterFontPackage (
   //\r
   // Add this simplified font package to a package list then install it.\r
   //\r
   //\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
   FreePool (Package);\r
 }\r
 \r
index 409c8e4740a32e81690df657e3548659af3f637e..573374f59bf949421f0d8f54c19306191519496a 100644 (file)
@@ -170,21 +170,21 @@ ValidatePassword (
   //\r
   // Get user input password\r
   //\r
   //\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
     FreePool (Password);\r
-    return Status;\r
+    return EFI_NOT_READY;\r
   }\r
 \r
   //\r
   // Validate old password\r
   //\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
   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
   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
 {\r
   EFI_STATUS                      Status;\r
   CHAR16                          *Password;\r
+  CHAR16                          *TempPassword;\r
   UINTN                           PasswordSize;\r
   DRIVER_SAMPLE_CONFIGURATION     *Configuration;\r
   UINTN                           BufferSize;\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
   // 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
   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
   }\r
+  StrnCpy (Password, TempPassword, PasswordSize / sizeof (CHAR16));\r
+  FreePool (TempPassword);\r
 \r
   //\r
   // Retrive uncommitted data from Browser\r
 \r
   //\r
   // Retrive uncommitted data from Browser\r
@@ -786,7 +793,6 @@ DriverSampleInit (
 {\r
   EFI_STATUS                      Status;\r
   EFI_STATUS                      SavedStatus;\r
 {\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
   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
   //\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
     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
   PrivateData->HiiHandle[0] = HiiHandle[0];\r
 \r
   //\r
@@ -913,26 +910,17 @@ DriverSampleInit (
 \r
   PrivateData->DriverHandle[1] = DriverHandle[1];\r
 \r
 \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
     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
   PrivateData->HiiHandle[1] = HiiHandle[1];\r
 \r
   //\r
@@ -941,9 +929,8 @@ DriverSampleInit (
   //\r
   NewString = L"700 Mhz";\r
 \r
   //\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
   }\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
 \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
 #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
 \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
 // 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
 \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
 // 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
 \r
 \r
 [LibraryClasses]\r
+  BaseLib\r
   MemoryAllocationLib\r
   UefiBootServicesTableLib\r
   UefiDriverEntryPoint\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
 \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
 \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
       // 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
 \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
 \r
       InsertTailList (&mIScsiConfigFormList, &ConfigFormEntry->Link);\r
       mNumberOfIScsiDevices++;\r
@@ -931,7 +931,6 @@ IScsiConfigFormInit (
 {\r
   EFI_STATUS                  Status;\r
   EFI_HII_DATABASE_PROTOCOL   *HiiDatabase;\r
 {\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
   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
   //\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
     FreePool(CallbackInfo);\r
-    return Status;\r
+    return EFI_OUT_OF_RESOURCES;\r
   }\r
 \r
   mCallbackInfo = CallbackInfo;\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
 {\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
   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
 \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
   }\r
 \r
   Statement->VarStoreInfo.VarName = Id;\r
index 26acccd153aa2d53d32133672a326457d2294426..f5963ce2fe23f39b9b3019a9597314eb6240d2d9 100644 (file)
@@ -525,7 +525,6 @@ InitializeSetup (
   )\r
 {\r
   EFI_STATUS                  Status;\r
   )\r
 {\r
   EFI_STATUS                  Status;\r
-  EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
 \r
   //\r
   // Locate required Hii relative protocols\r
 \r
   //\r
   // Locate required Hii relative protocols\r
@@ -554,15 +553,13 @@ InitializeSetup (
   //\r
   // Publish our HII data\r
   //\r
   //\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
 \r
   //\r
   // Initialize Driver private data\r
@@ -603,11 +600,9 @@ NewString (
   )\r
 {\r
   EFI_STRING_ID  StringId;\r
   )\r
 {\r
   EFI_STRING_ID  StringId;\r
-  EFI_STATUS     Status;\r
 \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
 \r
   return StringId;\r
 }\r
@@ -631,7 +626,8 @@ DeleteString (
   CHAR16  NullChar;\r
 \r
   NullChar = CHAR_NULL;\r
   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
 }\r
 \r
 \r
@@ -651,29 +647,11 @@ GetToken (
   IN  EFI_HII_HANDLE               HiiHandle\r
   )\r
 {\r
   IN  EFI_HII_HANDLE               HiiHandle\r
   )\r
 {\r
-  EFI_STATUS  Status;\r
-  CHAR16      *String;\r
-  UINTN       BufferLength;\r
+  EFI_STRING  String;\r
 \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
   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
 }\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/MemoryAllocationLib.h>\r
 #include <Library/HiiLib.h>\r
 #include <Library/PcdLib.h>\r
+#include <Library/DevicePathLib.h>\r
 \r
 #include "Colors.h"\r
 \r
 \r
 #include "Colors.h"\r
 \r
index bd4ba108be911fed0e7df7f554d3a948ab29d17c..77951ee79f2ef1a3e72e48ba12a57f059e6a44ce 100644 (file)
@@ -59,7 +59,8 @@
   DebugLib\r
   PrintLib\r
   HiiLib\r
   DebugLib\r
   PrintLib\r
   HiiLib\r
-  \r
+  DevicePathLib\r
+\r
 [Guids]\r
   gEfiIfrTianoGuid                              ## CONSUMES  ## GUID\r
   gEfiIfrFrameworkGuid                          ## CONSUMES  ## GUID\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
   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
 \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
             }\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
           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
   //\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
 \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
   //\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
     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
   }\r
   //\r
   //\r
index aef2c30ccd3caf01b18f51e20eac92120efb2eec..f2541ee9940de08896aa8bd4af026177eb7dc541 100644 (file)
@@ -451,8 +451,13 @@ Returns:
   //\r
   // Initialize strings to HII database\r
   //\r
   //\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
 \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
   //\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
     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
   //\r
   //\r
   //\r
   //\r