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
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
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
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
FORMSET_STORAGE *BufferStorage;\r
EFI_STATUS Status;\r
UINTN Size;\r
- UINTN StringSize;\r
EFI_STRING String;\r
\r
*NvMapAllocated = FALSE;\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
- 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
);\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
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
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
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 (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
//\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
IN EFI_STRING_ID Id\r
)\r
{\r
- CHAR16 *String;\r
-\r
- String = NULL;\r
- HiiLibGetStringFromHandle (gStringPackHandle, Id, &String);\r
-\r
- return String;\r
+ return HiiGetString (gStringPackHandle, Id, NULL);\r
}\r
+\r
/**\r
\r
Show progress bar with title above it. It only works in Graphics mode.\r
VOID\r
)\r
{\r
- EFI_STATUS Status;\r
- \r
//\r
// Initialize strings to HII database\r
//\r
- Status = HiiLibAddPackages (1, &gEfiHiiThunkProducerGuid, NULL, &gStringPackHandle, STRING_ARRAY_NAME);\r
- ASSERT_EFI_ERROR (Status);\r
-\r
+ gStringPackHandle = HiiAddPackages (\r
+ &gEfiHiiThunkProducerGuid,\r
+ NULL,\r
+ STRING_ARRAY_NAME,\r
+ NULL\r
+ );\r
+ ASSERT (gStringPackHandle != NULL);\r
}\r
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
{\r
EFI_STRING_ID NewStringId;\r
- EFI_STATUS Status;\r
-\r
\r
- NewStringId = 0;\r
- \r
- if (*StringId == 0) {\r
- //\r
- // Create a new string token.\r
- //\r
- if (Rfc3066AsciiLanguage == NULL) {\r
- //\r
- // For all languages in the package list.\r
- //\r
- Status = HiiLibNewString (ThunkContext->UefiHiiHandle, &NewStringId, NewString);\r
- } else {\r
- //\r
- // For specified language.\r
- //\r
- Status = mHiiStringProtocol->NewString (\r
- mHiiStringProtocol,\r
- ThunkContext->UefiHiiHandle,\r
- &NewStringId,\r
- Rfc3066AsciiLanguage,\r
- NULL,\r
- NewString,\r
- NULL\r
- );\r
- }\r
- } else {\r
- //\r
- // Update the existing string token.\r
- //\r
- if (Rfc3066AsciiLanguage == NULL) {\r
- //\r
- // For all languages in the package list.\r
- //\r
- Status = HiiLibSetString (ThunkContext->UefiHiiHandle, *StringId, NewString);\r
- } else {\r
- //\r
- // For specified language.\r
- //\r
- Status = mHiiStringProtocol->SetString (\r
- mHiiStringProtocol,\r
- ThunkContext->UefiHiiHandle,\r
- *StringId,\r
- Rfc3066AsciiLanguage,\r
- NewString,\r
- NULL\r
- );\r
- }\r
- }\r
- \r
- if (!EFI_ERROR (Status)) {\r
- if (*StringId == 0) {\r
- //\r
- // When creating new string, return the newly created String Token.\r
- //\r
- *StringId = NewStringId;\r
- }\r
- } else {\r
+ NewStringId = HiiSetString (ThunkContext->UefiHiiHandle, *StringId, NewString, Rfc3066AsciiLanguage);\r
+ *StringId = NewStringId;\r
+ if (NewStringId == 0) {\r
//\r
// Only EFI_INVALID_PARAMETER is defined in HII 0.92 specification.\r
//\r
- *StringId = 0;\r
+ return EFI_INVALID_PARAMETER;\r
+ } else {\r
+ return EFI_SUCCESS;\r
}\r
-\r
- return Status;\r
}\r
\r
/**\r
OUT EFI_STRING StringBuffer\r
)\r
{\r
- CHAR8 *Iso639AsciiLanguage;\r
HII_THUNK_PRIVATE_DATA *Private;\r
+ CHAR8 *Iso639AsciiLanguage;\r
CHAR8 *Rfc3066AsciiLanguage;\r
+ CHAR8 *SupportedLanguages;\r
+ CHAR8 *PlatformLanguage;\r
+ CHAR8 *BestLanguage;\r
EFI_HII_HANDLE UefiHiiHandle;\r
EFI_STATUS Status;\r
\r
}\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
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
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
#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
for (Index = 0; Index < MenuOption->MenuNumber; Index++) {\r
NewMenuEntry = BOpt_GetMenuEntry (MenuOption, Index);\r
\r
- HiiLibNewString (\r
- HiiHandle,\r
- &NewMenuEntry->DisplayStringToken,\r
- NewMenuEntry->DisplayString\r
- );\r
+ NewMenuEntry->DisplayStringToken = HiiSetString (\r
+ HiiHandle,\r
+ 0,\r
+ NewMenuEntry->DisplayString,\r
+ NULL\r
+ );\r
\r
if (NULL == NewMenuEntry->HelpString) {\r
NewMenuEntry->HelpStringToken = NewMenuEntry->DisplayStringToken;\r
} else {\r
- HiiLibNewString (\r
- HiiHandle,\r
- &NewMenuEntry->HelpStringToken,\r
- NewMenuEntry->HelpString\r
- );\r
+ NewMenuEntry->HelpStringToken = HiiSetString (\r
+ HiiHandle,\r
+ 0,\r
+ NewMenuEntry->HelpString,\r
+ NULL\r
+ );\r
}\r
}\r
\r
)\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
//\r
// Post our Boot Maint VFR binnary to the HII database.\r
//\r
- PackageList = HiiLibPreparePackageList (2, &mBootMaintGuid, BmBin, BdsDxeStrings);\r
- ASSERT (PackageList != NULL);\r
-\r
- Status = gHiiDatabase->NewPackageList (\r
- gHiiDatabase,\r
- PackageList,\r
- BmmCallbackInfo->BmmDriverHandle,\r
- &BmmCallbackInfo->BmmHiiHandle\r
- );\r
- FreePool (PackageList);\r
+ BmmCallbackInfo->BmmHiiHandle = HiiAddPackages (\r
+ &mBootMaintGuid,\r
+ BmmCallbackInfo->BmmDriverHandle,\r
+ BmBin,\r
+ BdsDxeStrings,\r
+ NULL\r
+ );\r
+ ASSERT (BmmCallbackInfo->BmmHiiHandle != NULL);\r
\r
//\r
// Post our File Explorer VFR binary to the HII database.\r
//\r
- PackageList = HiiLibPreparePackageList (2, &mFileExplorerGuid, FEBin, BdsDxeStrings);\r
- ASSERT (PackageList != NULL);\r
-\r
- Status = gHiiDatabase->NewPackageList (\r
- gHiiDatabase,\r
- PackageList,\r
- BmmCallbackInfo->FeDriverHandle,\r
- &BmmCallbackInfo->FeHiiHandle\r
- );\r
- FreePool (PackageList);\r
+ BmmCallbackInfo->FeHiiHandle = HiiAddPackages (\r
+ &mFileExplorerGuid,\r
+ BmmCallbackInfo->FeDriverHandle,\r
+ FEBin,\r
+ BdsDxeStrings,\r
+ NULL\r
+ );\r
+ ASSERT (BmmCallbackInfo->FeHiiHandle != NULL);\r
\r
//\r
// Allocate space for creation of Buffer\r
//\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
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 ((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
// Create the string for oneof tag\r
//\r
UnicodeSPrint (String, sizeof (String), TypeStr, Index);\r
- StrRef = 0;\r
- HiiLibNewString (CallbackData->BmmHiiHandle, &StrRef, String);\r
+ StrRef = HiiSetString (CallbackData->BmmHiiHandle, 0, String, NULL);\r
\r
UnicodeSPrint (String, sizeof (String), TypeStrHelp, Index);\r
- StrRefHelp = 0;\r
- HiiLibNewString (CallbackData->BmmHiiHandle, &StrRefHelp, String);\r
+ StrRefHelp = HiiSetString (CallbackData->BmmHiiHandle, 0, String, NULL);\r
\r
CreateOneOfOpCode (\r
(EFI_QUESTION_ID) (Key + Index),\r
CallbackData,\r
DriverOptionStrDepository\r
);\r
- HiiLibNewString (HiiHandle, &NewMenuEntry->DisplayStringToken, NewMenuEntry->DisplayString);\r
+ NewMenuEntry->DisplayStringToken = HiiSetString (HiiHandle, 0, NewMenuEntry->DisplayString, NULL);\r
\r
NewMenuEntry->HelpStringToken = GetStringTokenFromDepository (\r
CallbackData,\r
DriverOptionHelpStrDepository\r
);\r
- HiiLibNewString (HiiHandle, &NewMenuEntry->HelpStringToken, NewMenuEntry->HelpString);\r
+ NewMenuEntry->HelpStringToken = HiiSetString (HiiHandle, 0, NewMenuEntry->HelpString, NULL);\r
\r
if (OptionalDataExist) {\r
Ptr += (UINT8) GetDevicePathSize (CallbackData->LoadContext->FilePathList);\r
CallbackData,\r
BootOptionStrDepository\r
);\r
- HiiLibNewString (CallbackData->FeHiiHandle, &NewMenuEntry->DisplayStringToken, NewMenuEntry->DisplayString);\r
+ NewMenuEntry->DisplayStringToken = HiiSetString (CallbackData->FeHiiHandle, 0, NewMenuEntry->DisplayString, NULL);\r
\r
NewMenuEntry->HelpStringToken = GetStringTokenFromDepository (\r
CallbackData,\r
BootOptionHelpStrDepository\r
);\r
- HiiLibNewString (CallbackData->FeHiiHandle, &NewMenuEntry->HelpStringToken, NewMenuEntry->HelpString);\r
+ NewMenuEntry->HelpStringToken = HiiSetString (CallbackData->FeHiiHandle, 0, NewMenuEntry->HelpString, NULL);\r
\r
if (OptionalDataExist) {\r
Ptr += (UINT8) GetDevicePathSize (CallbackData->LoadContext->FilePathList);\r
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 Status;\r
- EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
\r
//\r
// Install Device Path Protocol and Config Access protocol to driver handle\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
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
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
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
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 Status;\r
- EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
\r
//\r
// Install Device Path Protocol and Config Access protocol to driver handle\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
EFI_STATUS Status;\r
UINTN Count;\r
UINTN Index;\r
- CHAR16 *String;\r
- UINTN StringLength;\r
+ EFI_STRING String;\r
EFI_HII_UPDATE_DATA UpdateData[MENU_ITEM_NUM];\r
EFI_STRING_ID Token;\r
EFI_STRING_ID TokenHelp;\r
EFI_HII_HANDLE *HiiHandles;\r
- UINTN HandleBufferLength;\r
- UINTN NumberOfHiiHandles;\r
EFI_HII_HANDLE HiiHandle;\r
UINT16 FormSetClass;\r
EFI_STRING_ID FormSetTitle;\r
EFI_STRING_ID FormSetHelp;\r
EFI_BROWSER_ACTION_REQUEST ActionRequest;\r
- EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
\r
HiiHandles = NULL;\r
- HandleBufferLength = 0;\r
\r
Status = EFI_SUCCESS;\r
gCallbackKey = 0;\r
//\r
// Get all the Hii handles\r
//\r
- Status = HiiLibGetHiiHandles (&HandleBufferLength, &HiiHandles);\r
- ASSERT_EFI_ERROR (Status && (HiiHandles != NULL));\r
+ HiiHandles = HiiGetHiiHandles (NULL);\r
+ ASSERT (HiiHandles != NULL);\r
\r
HiiHandle = gDeviceManagerPrivate.HiiHandle;\r
\r
- StringLength = 0x1000;\r
- String = AllocateZeroPool (StringLength);\r
- ASSERT (String != NULL);\r
-\r
//\r
// Search for formset of each class type\r
//\r
- NumberOfHiiHandles = HandleBufferLength / sizeof (EFI_HII_HANDLE);\r
- for (Index = 0; Index < NumberOfHiiHandles; Index++) {\r
+ for (Index = 0; HiiHandles[Index] != NULL; Index++) {\r
IfrLibExtractClassFromHiiHandle (HiiHandles[Index], &FormSetClass, &FormSetTitle, &FormSetHelp);\r
\r
if (FormSetClass == EFI_NON_DEVICE_CLASS) {\r
continue;\r
}\r
\r
- Token = 0;\r
- *String = 0;\r
- StringLength = 0x1000;\r
- HiiLibGetString (HiiHandles[Index], FormSetTitle, String, &StringLength);\r
- HiiLibNewString (HiiHandle, &Token, String);\r
+ String = HiiGetString (HiiHandles[Index], FormSetTitle, NULL);\r
+ ASSERT (String != NULL);\r
+ Token = HiiSetString (HiiHandle, 0, String, NULL);\r
+ FreePool (String);\r
\r
- TokenHelp = 0;\r
- *String = 0;\r
- StringLength = 0x1000;\r
- HiiLibGetString (HiiHandles[Index], FormSetHelp, String, &StringLength);\r
- HiiLibNewString (HiiHandle, &TokenHelp, String);\r
+ String = HiiGetString (HiiHandles[Index], FormSetHelp, NULL);\r
+ ASSERT (String != NULL);\r
+ TokenHelp = HiiSetString (HiiHandle, 0, String, NULL);\r
+ FreePool (String);\r
\r
for (Count = 0; Count < MENU_ITEM_NUM; Count++) {\r
if (FormSetClass & mDeviceManagerMenuItemTable[Count].Class) {\r
}\r
}\r
}\r
- FreePool (String);\r
\r
for (Index = 0; Index < MENU_ITEM_NUM; Index++) {\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
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
// 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
)\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
//\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
// 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
}\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
OUT CHAR16 **String\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STRING TmpString;\r
\r
- Status = HiiLibGetStringFromToken (ProducerGuid, Token, String);\r
- if (EFI_ERROR (Status)) {\r
+ TmpString = HiiGetPackageString (ProducerGuid, Token, NULL);\r
+ if (TmpString == NULL) {\r
*String = GetStringById (STRING_TOKEN (STR_MISSING_STRING));\r
+ } else {\r
+ *String = TmpString;\r
}\r
\r
return EFI_SUCCESS;\r
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
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
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
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
&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
\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
{\r
EFI_HII_HANDLE HiiHandle;\r
- EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
\r
- PackageList = HiiLibPreparePackageList (1, &mFontPackageGuid, &mFontBin);\r
- ASSERT (PackageList != NULL);\r
-\r
- gHiiDatabase->NewPackageList (gHiiDatabase, PackageList, mBdsImageHandle, &HiiHandle);\r
- FreePool (PackageList);\r
+ HiiHandle = HiiAddPackages (\r
+ &mFontPackageGuid,\r
+ mBdsImageHandle,\r
+ &mFontBin,\r
+ NULL\r
+ );\r
+ ASSERT (HiiHandle != NULL);\r
}\r
\r
/**\r
/**\r
Initialize HII global accessor for string support\r
\r
- @retval EFI_SUCCESS String support initialize success.\r
-\r
**/\r
-EFI_STATUS\r
+VOID\r
InitializeStringSupport (\r
VOID\r
)\r
{\r
- EFI_STATUS Status;\r
- EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
-\r
- Status = gBS->LocateProtocol (&gEfiHiiDatabaseProtocolGuid, NULL, (VOID **) &gHiiDatabase);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- PackageList = HiiLibPreparePackageList (1, &mBdsStringPackGuid, &BdsDxeStrings);\r
- ASSERT (PackageList != NULL);\r
-\r
- Status = gHiiDatabase->NewPackageList (\r
- gHiiDatabase,\r
- PackageList,\r
- mBdsImageHandle,\r
- &gStringPackHandle\r
- );\r
-\r
- FreePool (PackageList);\r
- return Status;\r
+ gStringPackHandle = HiiAddPackages (\r
+ &mBdsStringPackGuid,\r
+ mBdsImageHandle,\r
+ BdsDxeStrings,\r
+ NULL\r
+ );\r
+ ASSERT (gStringPackHandle != NULL);\r
}\r
\r
/**\r
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
Initialize HII global accessor for string support\r
\r
- @retval EFI_SUCCESS String support initialize success.\r
-\r
**/\r
-EFI_STATUS\r
+VOID\r
InitializeStringSupport (\r
VOID\r
);\r
// then the 'first refresh' string will be replaced by the 'refresh' string, and the two strings content are same after the replacement\r
//\r
NewStringToken = STRING_TOKEN (STR_FIRST_REFRESH);\r
- HiiLibGetStringFromHandle (Private->RegisteredHandle, STRING_TOKEN (STR_REFRESH), &NewString);\r
+ NewString = HiiGetString (Private->RegisteredHandle, STRING_TOKEN (STR_REFRESH), NULL);\r
ASSERT (NewString != NULL);\r
- Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, NewString);\r
- ASSERT_EFI_ERROR (Status);\r
+ if (HiiSetString (Private->RegisteredHandle, NewStringToken, NewString, NULL) == 0) {\r
+ ASSERT (FALSE);\r
+ }\r
FreePool (NewString);\r
\r
NewStringToken = STRING_TOKEN (STR_FIRST_REFRESH_HELP);\r
- HiiLibGetStringFromHandle (Private->RegisteredHandle, STRING_TOKEN (STR_REFRESH_HELP), &NewString);\r
+ NewString = HiiGetString (Private->RegisteredHandle, STRING_TOKEN (STR_REFRESH_HELP), NULL);\r
ASSERT (NewString != NULL);\r
- Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, NewString);\r
- ASSERT_EFI_ERROR (Status);\r
+ if (HiiSetString (Private->RegisteredHandle, NewStringToken, NewString, NULL) == 0) {\r
+ ASSERT (FALSE);\r
+ }\r
FreePool (NewString);\r
\r
//\r
}\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
//\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
mLastSavedDriverImageNum++;\r
}\r
StrCat (NewString, DriverName);\r
- NewStringToken = mDriverImageToken[Index];\r
- if (NewStringToken == 0) {\r
- Status = HiiLibNewString (Private->RegisteredHandle, &NewStringToken, NewString);\r
- } else {\r
- Status = HiiLibSetString (Private->RegisteredHandle, NewStringToken, NewString);\r
- }\r
+ NewStringToken = HiiSetString (Private->RegisteredHandle, mDriverImageToken[Index], NewString, NULL);\r
+ ASSERT (NewStringToken != 0);\r
mDriverImageToken[Index] = NewStringToken;\r
- ASSERT_EFI_ERROR (Status);\r
FreePool (NewString);\r
if (FreeDriverName) {\r
FreePool (DriverName);\r
NewString = AllocateZeroPool (StrSize (DriverName));\r
ASSERT (NewString != NULL); \r
StrCat (NewString, DriverName);\r
- NewStringHelpToken = mDriverImageFilePathToken[Index];\r
- if (NewStringHelpToken == 0) {\r
- Status = HiiLibNewString (Private->RegisteredHandle, &NewStringHelpToken, NewString);\r
- } else {\r
- Status = HiiLibSetString (Private->RegisteredHandle, NewStringHelpToken, NewString);\r
- }\r
+ NewStringHelpToken = HiiSetString (Private->RegisteredHandle, mDriverImageFilePathToken[Index], NewString, NULL);\r
+ ASSERT (NewStringHelpToken != 0);\r
mDriverImageFilePathToken[Index] = NewStringHelpToken;\r
- ASSERT_EFI_ERROR (Status);\r
FreePool (NewString);\r
FreePool (DriverName);\r
\r
// 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
// 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
// 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
EFI_STATUS Status;\r
- EFI_HII_DATABASE_PROTOCOL *HiiDatabase;\r
- EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
EFI_FORM_BROWSER2_PROTOCOL *FormBrowser2;\r
\r
- //\r
- // There should only be one HII protocol\r
- //\r
- Status = gBS->LocateProtocol (\r
- &gEfiHiiDatabaseProtocolGuid,\r
- NULL,\r
- (VOID **) &HiiDatabase\r
- );\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
//\r
// There should only be one Form Configuration protocol\r
//\r
//\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
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
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
// 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
- Assemble EFI_HII_PACKAGE_LIST according to the passed in packages.\r
-\r
- If GuidId is NULL, then ASSERT.\r
- If not enough resource to complete the operation, then ASSERT.\r
-\r
- @param NumberOfPackages Number of packages.\r
- @param GuidId Package GUID.\r
- @param ... Variable argument list for packages to be assembled.\r
-\r
- @return Pointer of EFI_HII_PACKAGE_LIST_HEADER.\r
-\r
-**/\r
-EFI_HII_PACKAGE_LIST_HEADER *\r
-EFIAPI\r
-HiiLibPreparePackageList (\r
- IN UINTN NumberOfPackages,\r
- IN CONST EFI_GUID *GuidId,\r
- ...\r
- )\r
-;\r
-\r
-/**\r
- This function allocates pool for an EFI_HII_PACKAGE_LIST structure\r
- with additional space that is big enough to host all packages described by the variable \r
- argument list of package pointers. The allocated structure is initialized using NumberOfPackages, \r
- GuidId, and the variable length argument list of package pointers.\r
-\r
- Then, EFI_HII_PACKAGE_LIST will be register to the default System HII Database. The\r
- Handle to the newly registered Package List is returned throught HiiHandle.\r
+ Registers a list of packages in the HII Database and returns the HII Handle\r
+ associated with that registration. If an HII Handle has already been registered\r
+ with the same PackageListGuid, then NULL is returned. If there are not enough \r
+ resources to perform the registration, then NULL is returned. If an empty list \r
+ of packages is passed in, then NULL is returned. If the size of the list of \r
+ package is 0, then NULL is returned.\r
\r
- If HiiHandle is NULL, then ASSERT.\r
+ The variable arguments are pointers which point to package header that defined \r
+ by UEFI VFR compiler and StringGather tool.\r
\r
- @param NumberOfPackages The number of HII packages to register.\r
- @param GuidId Package List GUID ID.\r
- @param DriverHandle Optional. If not NULL, the DriverHandle on which an instance of DEVICE_PATH_PROTOCOL is installed.\r
- This DriverHandle uniquely defines the device that the added packages are associated with.\r
- @param HiiHandle On output, the HiiHandle is update with the handle which can be used to retrieve the Package \r
- List later. If the functions failed to add the package to the default HII database, this value will\r
- be set to NULL.\r
- @param ... The variable argument list describing all HII Package.\r
+ #pragma pack (push, 1)\r
+ typedef struct {\r
+ UINT32 BinaryLength;\r
+ EFI_HII_PACKAGE_HEADER PackageHeader;\r
+ } EDKII_AUTOGEN_PACKAGES_HEADER;\r
+ #pragma pack (pop)\r
+ \r
+ @param[in] PackageListGuid The GUID of the package list.\r
+ @param[in] DeviceHandle If not NULL, the Device Handle on which \r
+ an instance of DEVICE_PATH_PROTOCOL is installed.\r
+ This Device Handle uniquely defines the device that \r
+ the added packages are associated with.\r
+ @param[in] ... The variable argument list that contains pointers \r
+ to packages terminated by a NULL.\r
\r
- @return EFI_SUCCESS If the packages are successfully added to the default HII database.\r
- @return EFI_OUT_OF_RESOURCE Not enough resource to complete the operation.\r
+ @retval NULL A HII Handle has already been registered in the HII Database with\r
+ the same PackageListGuid.\r
+ @retval NULL The HII Handle could not be created.\r
+ @retval NULL An empty list of packages was passed in.\r
+ @retval NULL All packages are empty.\r
+ @retval Other The HII Handle associated with the newly registered package list.\r
\r
**/\r
-EFI_STATUS\r
+EFI_HII_HANDLE\r
EFIAPI\r
-HiiLibAddPackages (\r
- IN UINTN NumberOfPackages,\r
- IN CONST EFI_GUID *GuidId,\r
- IN EFI_HANDLE DriverHandle, OPTIONAL\r
- OUT EFI_HII_HANDLE *HiiHandle,\r
+HiiAddPackages (\r
+ IN CONST EFI_GUID *PackageListGuid,\r
+ IN EFI_HANDLE DeviceHandle OPTIONAL,\r
...\r
)\r
;\r
\r
/**\r
- Removes a package list from the default HII database.\r
+ Removes a package list from the HII database.\r
\r
If HiiHandle is NULL, then ASSERT.\r
- If HiiHandle is not a valid EFI_HII_HANDLE in the default HII database, then ASSERT.\r
+ If HiiHandle is not a valid EFI_HII_HANDLE in the HII database, then ASSERT.\r
\r
- @param HiiHandle The handle that was previously registered to the data base that is requested for removal.\r
- List later.\r
+ @param[in] HiiHandle The handle that was previously registered in the HII database\r
\r
**/\r
VOID\r
EFIAPI\r
-HiiLibRemovePackages (\r
+HiiRemovePackages (\r
IN EFI_HII_HANDLE HiiHandle\r
)\r
;\r
\r
/**\r
- This function adds the string into String Package of each language\r
- supported by the package list.\r
-\r
- If String is NULL, then ASSERT.\r
- If StringId is NULL, the ASSERT.\r
- If PackageList could not be found in the default HII database, then ASSERT.\r
-\r
- @param PackageList Handle of the package list where this string will\r
- be added.\r
- @param StringId On return, contains the new strings id, which is\r
- unique within PackageList.\r
- @param String Points to the new null-terminated string.\r
-\r
- @retval EFI_SUCCESS The new string was added successfully.\r
- @retval EFI_OUT_OF_RESOURCES Could not add the string due to lack of resources.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibNewString (\r
- IN EFI_HII_HANDLE PackageList,\r
- OUT EFI_STRING_ID *StringId,\r
- IN CONST EFI_STRING String\r
- )\r
-;\r
-\r
-/**\r
- This function update the specified string in String Package of each language\r
- supported by the package list.\r
-\r
- If String is NULL, then ASSERT.\r
- If PackageList could not be found in the default HII database, then ASSERT.\r
- If StringId is not found in PackageList, then ASSERT.\r
-\r
- @param PackageList Handle of the package list where this string will\r
- be added.\r
- @param StringId Ths String Id to be updated.\r
- @param String Points to the new null-terminated string.\r
-\r
- @retval EFI_SUCCESS The new string was added successfully.\r
- @retval EFI_OUT_OF_RESOURCES Could not add the string due to lack of resources.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibSetString (\r
- IN EFI_HII_HANDLE PackageList,\r
- IN EFI_STRING_ID StringId,\r
- IN CONST EFI_STRING String\r
- )\r
-;\r
-\r
-/**\r
- This function try to retrieve string from String package of current language.\r
- If fails, it try to retrieve string from String package of first language it support.\r
-\r
- If StringSize is NULL, then ASSERT.\r
- If String is NULL and *StringSize is not 0, then ASSERT.\r
- If PackageList could not be found in the default HII database, then ASSERT.\r
- If StringId is not found in PackageList, then ASSERT.\r
-\r
- @param PackageList The package list in the HII database to search for\r
- the specified string.\r
- @param StringId The string's id, which is unique within\r
- PackageList.\r
- @param String Points to the new null-terminated string.\r
- @param StringSize On entry, points to the size of the buffer pointed\r
- to by String, in bytes. On return, points to the\r
- length of the string, in bytes.\r
-\r
- @retval EFI_SUCCESS The string was returned successfully.\r
- @retval EFI_NOT_FOUND The string specified by StringId is not available.\r
- @retval EFI_BUFFER_TOO_SMALL The buffer specified by StringLength is too small\r
- to hold the string.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibGetString (\r
- IN EFI_HII_HANDLE PackageList,\r
- IN EFI_STRING_ID StringId,\r
- OUT EFI_STRING String,\r
- IN OUT UINTN *StringSize\r
- )\r
-;\r
-\r
-/**\r
- Get string specified by StringId form the HiiHandle. The caller\r
- is responsible to free the *String.\r
-\r
- If String is NULL, then ASSERT.\r
- If HiiHandle could not be found in the default HII database, then ASSERT.\r
- If StringId is not found in PackageList, then ASSERT.\r
-\r
- @param HiiHandle The HII handle of package list.\r
- @param StringId The String ID.\r
- @param String The output string.\r
-\r
- @retval EFI_NOT_FOUND String is not found.\r
- @retval EFI_SUCCESS Operation is successful.\r
- @retval EFI_OUT_OF_RESOURCES There is not enought memory in the system.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibGetStringFromHandle (\r
- IN EFI_HII_HANDLE HiiHandle,\r
- IN EFI_STRING_ID StringId,\r
- OUT EFI_STRING *String\r
- )\r
-;\r
-\r
-/**\r
- Get the string given the StringId and String package Producer's Guid. The caller\r
- is responsible to free the *String.\r
-\r
- If PackageList with the matching ProducerGuid is not found, then ASSERT.\r
- If PackageList with the matching ProducerGuid is found but no String is\r
- specified by StringId is found, then ASSERT.\r
+ This function create a new string in String Package or updates an existing \r
+ string in a String Package. If StringId is 0, then a new string is added to\r
+ a String Package. If StringId is not zero, then a string in String Package is\r
+ updated. If SupportedLanguages is NULL, then the string is added or updated\r
+ for all the languages that the String Package supports. If SupportedLanguages\r
+ is not NULL, then the string is added or updated for the set of languages \r
+ specified by SupportedLanguages.\r
+ \r
+ If HiiHandle is NULL, then ASSERT().\r
+ If String is NULL, then ASSERT().\r
\r
- @param ProducerGuid The Guid of String package list.\r
- @param StringId The String ID.\r
- @param String The output string.\r
+ @param[in] HiiHandle A handle that was previously registered in the \r
+ HII Database.\r
+ @param[in] StringId If zero, then a new string is created in the \r
+ String Package associated with HiiHandle. If \r
+ non-zero, then the string specified by StringId \r
+ is updated in the String Package associated \r
+ with HiiHandle. \r
+ @param[in] String A pointer to the Null-terminated Unicode string \r
+ to add or update in the String Package associated \r
+ with HiiHandle.\r
+ @param[in] SupportedLanguages A pointer to a Null-terminated ASCII string of \r
+ language codes. If this parameter is NULL, then \r
+ String is added or updated in the String Package \r
+ associated with HiiHandle for all the languages \r
+ that the String Package supports. If this \r
+ parameter is not NULL, then then String is added \r
+ or updated in the String Package associated with \r
+ HiiHandle for the set oflanguages specified by \r
+ SupportedLanguages. The format of \r
+ SupportedLanguages must follow the language \r
+ format assumed the HII Database.\r
\r
- @retval EFI_SUCCESS Operation is successful.\r
- @retval EFI_OUT_OF_RESOURCES There is not enought memory in the system.\r
+ @retval 0 The string could not be added or updated in the String Package.\r
+ @retval Other The EFI_STRING_ID of the newly added or updated string.\r
\r
**/\r
-EFI_STATUS\r
+EFI_STRING_ID\r
EFIAPI\r
-HiiLibGetStringFromToken (\r
- IN EFI_GUID *ProducerGuid,\r
- IN EFI_STRING_ID StringId,\r
- OUT EFI_STRING *String\r
+HiiSetString (\r
+ IN EFI_HII_HANDLE HiiHandle,\r
+ IN EFI_STRING_ID StringId, OPTIONAL\r
+ IN CONST EFI_STRING String,\r
+ IN CONST CHAR8 *SupportedLanguages OPTIONAL\r
)\r
;\r
\r
/**\r
- Determines the handles that are currently active in the database.\r
- It's the caller's responsibility to free handle buffer.\r
-\r
- If HandleBufferLength is NULL, then ASSERT.\r
- If HiiHandleBuffer is NULL, then ASSERT.\r
+ Retrieves a string from a string package in a specific language. If the language\r
+ is not specified, then a string from a string package in the current platform \r
+ language is retrieved. If the string can not be retrieved using the specified \r
+ language or the current platform language, then the string is retrieved from \r
+ the string package in the first language the string package supports. The \r
+ returned string is allocated using AllocatePool(). The caller is responsible \r
+ for freeing the allocated buffer using FreePool().\r
+ \r
+ If HiiHandle is NULL, then ASSERT().\r
+ If StringId is 0, then ASSET.\r
\r
- @param HandleBufferLength On input, a pointer to the length of the handle\r
- buffer. On output, the length of the handle buffer\r
- that is required for the handles found.\r
- @param HiiHandleBuffer Pointer to an array of Hii Handles returned.\r
+ @param[in] HiiHandle A handle that was previously registered in the HII Database.\r
+ @param[in] StringId The identifier of the string to retrieved from the string \r
+ package associated with HiiHandle.\r
+ @param[in] Language The language of the string to retrieve. If this parameter \r
+ is NULL, then the current platform language is used. The \r
+ format of Language must follow the language format assumed \r
+ the HII Database.\r
\r
- @retval EFI_SUCCESS Get an array of Hii Handles successfully.\r
+ @retval NULL The string specified by StringId is not present in the string package.\r
+ @retval Other The string was returned.\r
\r
**/\r
-EFI_STATUS\r
+EFI_STRING\r
EFIAPI\r
-HiiLibGetHiiHandles (\r
- IN OUT UINTN *HandleBufferLength,\r
- OUT EFI_HII_HANDLE **HiiHandleBuffer\r
+HiiGetString (\r
+ IN EFI_HII_HANDLE HiiHandle,\r
+ IN EFI_STRING_ID StringId,\r
+ IN CONST CHAR8 *Language OPTIONAL\r
)\r
;\r
\r
/**\r
- Extract Hii package list GUID for given HII handle.\r
-\r
- If HiiHandle could not be found in the default HII database, then ASSERT.\r
- If Guid is NULL, then ASSERT.\r
+ Retrieves a string from a string package names by GUID in a specific language. \r
+ If the language is not specified, then a string from a string package in the \r
+ current platform language is retrieved. If the string can not be retrieved \r
+ using the specified language or the current platform language, then the string \r
+ is retrieved from the string package in the first language the string package \r
+ supports. The returned string is allocated using AllocatePool(). The caller \r
+ is responsible for freeing the allocated buffer using FreePool().\r
+ \r
+ If PackageListGuid is NULL, then ASSERT().\r
+ If StringId is 0, then ASSERT.\r
\r
- @param Handle Hii handle\r
- @param Guid Package list GUID\r
+ @param[in] PackageListGuid The GUID of a package list that was previously \r
+ registered in the HII Database.\r
+ @param[in] StringId The identifier of the string to retrieved from the \r
+ string package associated with PackageListGuid.\r
+ @param[in] Language The language of the string to retrieve. If this \r
+ parameter is NULL, then the current platform \r
+ language is used. The format of Language must \r
+ follow the language format assumed the HII Database.\r
\r
- @retval EFI_SUCCESS Successfully extract GUID from Hii database.\r
+ @retval NULL The package list specified by PackageListGuid is not present in the\r
+ HII Database.\r
+ @retval NULL The string specified by StringId is not present in the string package.\r
+ @retval Other The string was returned.\r
\r
**/\r
-EFI_STATUS\r
+EFI_STRING\r
EFIAPI\r
-HiiLibExtractGuidFromHiiHandle (\r
- IN EFI_HII_HANDLE Handle,\r
- OUT EFI_GUID *Guid\r
+HiiGetPackageString (\r
+ IN CONST EFI_GUID *PackageListGuid,\r
+ IN EFI_STRING_ID StringId,\r
+ IN CONST CHAR8 *Language OPTIONAL\r
)\r
;\r
\r
/**\r
- Find HII Handle in the default HII database associated with given Device Path.\r
-\r
- If DevicePath is NULL, then ASSERT.\r
+ Retrieves the array of all the HII Handles or the HII handle of a specific\r
+ package list in the HII Database.\r
+ This array is terminated with a NULL HII Handle.\r
+ This function allocates the returned array using AllocatePool().\r
+ The caller is responsible for freeing the array with FreePool().\r
\r
- @param DevicePath Device Path associated with the HII package list\r
- handle.\r
+ @param[in] PackageListGuid An optional parameter that is used to request \r
+ an HII Handle that is associatd with a specific\r
+ Package List GUID. If this parameter is NULL\r
+ then all the HII Handles in the HII Database\r
+ are returned. If this parameter is not NULL\r
+ then at most 1 HII Handle is returned.\r
\r
- @retval Handle HII package list Handle associated with the Device\r
- Path.\r
- @retval NULL Hii Package list handle is not found.\r
+ @retval NULL No HII handles were found in the HII database\r
+ @retval NULL The array of HII Handles could not be retrieved\r
+ @retval Other A pointer to the NULL terminated array of HII Handles\r
\r
**/\r
-EFI_HII_HANDLE\r
+EFI_HII_HANDLE *\r
EFIAPI\r
-HiiLibDevicePathToHiiHandle (\r
- IN EFI_DEVICE_PATH_PROTOCOL *DevicePath\r
+HiiGetHiiHandles (\r
+ IN CONST EFI_GUID *PackageListGuid OPTIONAL\r
)\r
;\r
\r
-\r
/**\r
Get next language from language code list (with separator ';').\r
\r
;\r
\r
/**\r
- This function returns the list of supported languages, in the format specified\r
- in UEFI specification Appendix M.\r
-\r
- If HiiHandle is not a valid Handle in the default HII database, then ASSERT.\r
-\r
- @param HiiHandle The HII package list handle.\r
-\r
- @retval !NULL The supported languages.\r
- @retval NULL If Supported Languages can not be retrived.\r
-\r
-**/\r
-CHAR8 *\r
-EFIAPI\r
-HiiLibGetSupportedLanguages (\r
- IN EFI_HII_HANDLE HiiHandle\r
- )\r
-;\r
-\r
-/**\r
- This function returns the list of supported 2nd languages, in the format specified\r
- in UEFI specification Appendix M.\r
-\r
- If HiiHandle is not a valid Handle in the default HII database, then ASSERT.\r
- If not enough resource to complete the operation, then ASSERT.\r
-\r
- @param HiiHandle The HII package list handle.\r
- @param FirstLanguage Pointer to language name buffer.\r
+ Retrieves a pointer to the a Null-terminated ASCII string containing the list \r
+ of languages that an HII handle in the HII Database supports. The returned \r
+ string is allocated using AllocatePool(). The caller is responsible for freeing\r
+ the returned string using FreePool(). The format of the returned string follows\r
+ the language format assumed the HII Database.\r
\r
- @return The supported languages.\r
-\r
-**/\r
-CHAR8 *\r
-EFIAPI\r
-HiiLibGetSupportedSecondaryLanguages (\r
- IN EFI_HII_HANDLE HiiHandle,\r
- IN CONST CHAR8 *FirstLanguage\r
- )\r
-;\r
-\r
-\r
-/**\r
- This function returns the number of supported languages on HiiHandle.\r
-\r
- If HiiHandle is not a valid Handle in the default HII database, then ASSERT.\r
- If not enough resource to complete the operation, then ASSERT.\r
+ If HiiHandle is NULL, then ASSERT().\r
\r
- @param HiiHandle The HII package list handle.\r
+ @param[in] HiiHandle A handle that was previously registered in the HII Database.\r
\r
- @return The number of supported languages.\r
+ @retval NULL HiiHandle is not registered in the HII database\r
+ @retval NULL There are not enough resources available to retrieve the suported \r
+ languages.\r
+ @retval NULL The list of suported languages could not be retrieved.\r
+ @retval Other A pointer to the Null-terminated ASCII string of supported languages.\r
\r
**/\r
-UINT16\r
+CHAR8 *\r
EFIAPI\r
-HiiLibGetSupportedLanguageNumber (\r
+HiiGetSupportedLanguages (\r
IN EFI_HII_HANDLE HiiHandle\r
)\r
;\r
\r
-/**\r
- Exports the contents of one or all package lists in the HII database into a buffer.\r
-\r
- If Handle is not NULL and not a valid EFI_HII_HANDLE registered in the database, \r
- then ASSERT.\r
- If PackageListHeader is NULL, then ASSERT.\r
- If PackageListSize is NULL, then ASSERT.\r
-\r
- @param Handle The HII Handle.\r
- @param PackageListHeader A pointer to a buffer that will contain the results of \r
- the export function.\r
- @param PackageListSize On output, the length of the buffer that is required for the exported data.\r
-\r
- @retval EFI_SUCCESS Package exported.\r
-\r
- @retval EFI_OUT_OF_RESOURCES Not enought memory to complete the operations.\r
-\r
-**/\r
-EFI_STATUS \r
-EFIAPI\r
-HiiLibExportPackageLists (\r
- IN EFI_HII_HANDLE Handle,\r
- OUT EFI_HII_PACKAGE_LIST_HEADER **PackageListHeader,\r
- OUT UINTN *PackageListSize\r
- )\r
-;\r
-\r
-/**\r
- \r
- This function returns a list of the package handles of the \r
- specified type that are currently active in the HII database. The \r
- pseudo-type EFI_HII_PACKAGE_TYPE_ALL will cause all package \r
- handles to be listed.\r
-\r
- If HandleBufferLength is NULL, then ASSERT.\r
- If HandleBuffer is NULL, the ASSERT.\r
- If PackageType is EFI_HII_PACKAGE_TYPE_GUID and PackageGuid is\r
- NULL, then ASSERT.\r
- If PackageType is not EFI_HII_PACKAGE_TYPE_GUID and PackageGuid is not\r
- NULL, then ASSERT.\r
- \r
- \r
- @param PackageType Specifies the package type of the packages\r
- to list or EFI_HII_PACKAGE_TYPE_ALL for\r
- all packages to be listed.\r
- \r
- @param PackageGuid If PackageType is\r
- EFI_HII_PACKAGE_TYPE_GUID, then this is\r
- the pointer to the GUID which must match\r
- the Guid field of\r
- EFI_HII_PACKAGE_GUID_HEADER. Otherwise, it\r
- must be NULL.\r
- \r
- @param HandleBufferLength On output, the length of the handle buffer\r
- that is required for the handles found.\r
-\r
- @param HandleBuffer On output, an array of EFI_HII_HANDLE instances returned.\r
- The caller is responcible to free this pointer allocated.\r
-\r
- @retval EFI_SUCCESS The matching handles are outputed successfully.\r
- HandleBufferLength is updated with the actual length.\r
- @retval EFI_OUT_OF_RESOURCES Not enough resource to complete the operation.\r
- @retval EFI_NOT_FOUND No matching handle could not be found in database.\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibListPackageLists (\r
- IN UINT8 PackageType,\r
- IN CONST EFI_GUID *PackageGuid,\r
- IN OUT UINTN *HandleBufferLength,\r
- OUT EFI_HII_HANDLE **Handle\r
- )\r
-;\r
-\r
/**\r
Convert language code from RFC3066 to ISO639-2.\r
\r
\r
\r
/**\r
- This function returns the list of supported languages, in the format specified\r
- in UEFI specification Appendix M.\r
-\r
- If HiiHandle is not a valid Handle in the default HII database, then ASSERT.\r
+ Retrieves a pointer to the a Null-terminated ASCII string containing the list \r
+ of languages that an HII handle in the HII Database supports. The returned \r
+ string is allocated using AllocatePool(). The caller is responsible for freeing\r
+ the returned string using FreePool(). The format of the returned string follows\r
+ the language format assumed the HII Database.\r
+ \r
+ If HiiHandle is NULL, then ASSERT().\r
\r
- @param HiiHandle The HII package list handle.\r
+ @param[in] HiiHandle A handle that was previously registered in the HII Database.\r
\r
- @retval !NULL The supported languages.\r
- @retval NULL If Supported Languages can not be retrived.\r
+ @retval NULL HiiHandle is not registered in the HII database\r
+ @retval NULL There are not enough resources available to retrieve the suported \r
+ languages.\r
+ @retval NULL The list of suported languages could not be retrieved.\r
+ @retval Other A pointer to the Null-terminated ASCII string of supported languages.\r
\r
**/\r
CHAR8 *\r
EFIAPI\r
-HiiLibGetSupportedLanguages (\r
+HiiGetSupportedLanguages (\r
IN EFI_HII_HANDLE HiiHandle\r
)\r
{\r
EFI_STATUS Status;\r
- UINTN BufferSize;\r
- CHAR8 *LanguageString;\r
+ UINTN LanguageSize;\r
+ CHAR8 TempSupportedLanguages;\r
+ CHAR8 *SupportedLanguages;\r
+\r
+ ASSERT (HiiHandle != NULL);\r
\r
- ASSERT (IsHiiHandleRegistered (HiiHandle));\r
//\r
- // Collect current supported Languages for given HII handle\r
- // First try allocate 4K buffer to store the current supported languages.\r
+ // Retrieve the size required for the supported languages buffer.\r
//\r
- BufferSize = 0x1000;\r
- LanguageString = AllocateZeroPool (BufferSize);\r
- if (LanguageString == NULL) {\r
- return NULL;\r
- }\r
-\r
- Status = gHiiString->GetLanguages (gHiiString, HiiHandle, LanguageString, &BufferSize);\r
- \r
- if (Status == EFI_BUFFER_TOO_SMALL) {\r
- FreePool (LanguageString);\r
- LanguageString = AllocateZeroPool (BufferSize);\r
- if (LanguageString == NULL) {\r
- return NULL;\r
- }\r
-\r
- Status = gHiiString->GetLanguages (gHiiString, HiiHandle, LanguageString, &BufferSize);\r
- }\r
-\r
- if (EFI_ERROR (Status)) {\r
- LanguageString = NULL;\r
- }\r
-\r
- return LanguageString;\r
-}\r
-\r
-\r
-/**\r
- This function returns the number of supported languages on HiiHandle.\r
-\r
- If HiiHandle is not a valid Handle in the default HII database, then ASSERT.\r
- If not enough resource to complete the operation, then ASSERT.\r
-\r
- @param HiiHandle The HII package list handle.\r
-\r
- @return The number of supported languages.\r
-\r
-**/\r
-UINT16\r
-EFIAPI\r
-HiiLibGetSupportedLanguageNumber (\r
- IN EFI_HII_HANDLE HiiHandle\r
- )\r
-{\r
- CHAR8 *Languages;\r
- CHAR8 *LanguageString;\r
- UINT16 LangNumber;\r
- CHAR8 *Lang;\r
-\r
- Languages = HiiLibGetSupportedLanguages (HiiHandle);\r
- if (Languages == NULL) {\r
- return 0;\r
- }\r
-\r
- LangNumber = 0;\r
- Lang = AllocatePool (AsciiStrSize (Languages));\r
- if (Lang != NULL) {\r
- LanguageString = Languages;\r
- while (*LanguageString != 0) {\r
- HiiLibGetNextLanguage (&LanguageString, Lang);\r
- LangNumber++;\r
- }\r
+ LanguageSize = 0;\r
+ Status = gHiiString->GetLanguages (gHiiString, HiiHandle, &TempSupportedLanguages, &LanguageSize);\r
\r
- FreePool (Lang);\r
- }\r
- FreePool (Languages);\r
-\r
- return LangNumber;\r
-}\r
-\r
-/**\r
- This function returns the list of supported 2nd languages, in the format specified\r
- in UEFI specification Appendix M.\r
-\r
- If HiiHandle is not a valid Handle in the default HII database, then ASSERT.\r
- If not enough resource to complete the operation, then ASSERT.\r
-\r
- @param HiiHandle The HII package list handle.\r
- @param FirstLanguage Pointer to language name buffer.\r
- \r
- @return The supported languages.\r
-\r
-**/\r
-CHAR8 *\r
-EFIAPI\r
-HiiLibGetSupportedSecondaryLanguages (\r
- IN EFI_HII_HANDLE HiiHandle,\r
- IN CONST CHAR8 *FirstLanguage\r
- )\r
-{\r
- EFI_STATUS Status;\r
- UINTN BufferSize;\r
- CHAR8 *LanguageString;\r
-\r
- ASSERT (HiiHandle != NULL);\r
- ASSERT (IsHiiHandleRegistered (HiiHandle));\r
//\r
- // Collect current supported 2nd Languages for given HII handle\r
- // First try allocate 4K buffer to store the current supported 2nd languages.\r
+ // If GetLanguages() returns EFI_SUCCESS for a zero size, \r
+ // then there are no supported languages registered for HiiHandle. If GetLanguages() \r
+ // returns an error other than EFI_BUFFER_TOO_SMALL, then HiiHandle is not present\r
+ // in the HII Database\r
//\r
- BufferSize = 0x1000;\r
- LanguageString = AllocateZeroPool (BufferSize);\r
- if (LanguageString == NULL) {\r
+ if (Status != EFI_BUFFER_TOO_SMALL) {\r
+ //\r
+ // Return NULL if the size can not be retrieved, or if HiiHandle is not in the HII Database\r
+ //\r
return NULL;\r
}\r
\r
- Status = gHiiString->GetSecondaryLanguages (gHiiString, HiiHandle, FirstLanguage, LanguageString, &BufferSize);\r
- \r
- if (Status == EFI_BUFFER_TOO_SMALL) {\r
- FreePool (LanguageString);\r
- LanguageString = AllocateZeroPool (BufferSize);\r
- if (LanguageString == NULL) {\r
- return NULL;\r
- }\r
-\r
- Status = gHiiString->GetSecondaryLanguages (gHiiString, HiiHandle, FirstLanguage, LanguageString, &BufferSize);\r
+ //\r
+ // Allocate the supported languages buffer.\r
+ //\r
+ SupportedLanguages = AllocateZeroPool (LanguageSize);\r
+ if (SupportedLanguages == NULL) {\r
+ //\r
+ // Return NULL if allocation fails.\r
+ //\r
+ return NULL;\r
}\r
\r
+ //\r
+ // Retrieve the supported languages string\r
+ //\r
+ Status = gHiiString->GetLanguages (gHiiString, HiiHandle, SupportedLanguages, &LanguageSize);\r
if (EFI_ERROR (Status)) {\r
- LanguageString = NULL;\r
+ //\r
+ // Free the buffer and return NULL if the supported languages can not be retrieved.\r
+ //\r
+ FreePool (SupportedLanguages);\r
+ return NULL;\r
}\r
\r
- return LanguageString;\r
+ //\r
+ // Return the Null-terminated ASCII string of supported languages\r
+ //\r
+ return SupportedLanguages;\r
}\r
\r
-\r
-\r
//\r
GLOBAL_REMOVE_IF_UNREFERENCED CONST CHAR16 mConfigHdrTemplate[] = L"GUID=00000000000000000000000000000000&NAME=0000&PATH=00";\r
\r
+EFI_FORM_BROWSER2_PROTOCOL *mUefiFormBrowser2 = NULL;\r
+\r
//\r
-// Form Browser2 Protocol\r
+// Template used to mark the end of a list of packages \r
//\r
-EFI_FORM_BROWSER2_PROTOCOL *mUefiFormBrowser2 = NULL;\r
+GLOBAL_REMOVE_IF_UNREFERENCED CONST EFI_HII_PACKAGE_HEADER mEndOfPakageList = {\r
+ sizeof (EFI_HII_PACKAGE_HEADER),\r
+ EFI_HII_PACKAGE_END\r
+};\r
\r
/**\r
- This funciton build the package list based on the package number,\r
- the GUID of the package list and the list of pointer which point to\r
- package header that defined by UEFI VFR compiler and StringGather\r
- tool.\r
+ Registers a list of packages in the HII Database and returns the HII Handle\r
+ associated with that registration. If an HII Handle has already been registered\r
+ with the same PackageListGuid, then NULL is returned. If there are not enough \r
+ resources to perform the registration, then NULL is returned. If an empty list \r
+ of packages is passed in, then NULL is returned. If the size of the list of \r
+ package is 0, then NULL is returned.\r
+\r
+ The variable arguments are pointers which point to package header that defined \r
+ by UEFI VFR compiler and StringGather tool.\r
\r
#pragma pack (push, 1)\r
typedef struct {\r
EFI_HII_PACKAGE_HEADER PackageHeader;\r
} EDKII_AUTOGEN_PACKAGES_HEADER;\r
#pragma pack (pop)\r
-\r
- If there is not enough resource for the new package list,\r
- the function will ASSERT.\r
-\r
- @param NumberOfPackages The number of packages be \r
- @param GuidId The GUID for the package list to be generated.\r
- @param Marker The variable argument list. Each entry represent a specific package header that is\r
- generated by VFR compiler and StrGather tool. The first 4 bytes is a UINT32 value\r
- that indicate the overall length of the package.\r
-\r
- @return The pointer to the package list header.\r
+ \r
+ @param[in] PackageListGuid The GUID of the package list.\r
+ @param[in] DeviceHandle If not NULL, the Device Handle on which \r
+ an instance of DEVICE_PATH_PROTOCOL is installed.\r
+ This Device Handle uniquely defines the device that \r
+ the added packages are associated with.\r
+ @param[in] ... The variable argument list that contains pointers \r
+ to packages terminated by a NULL.\r
+\r
+ @retval NULL A HII Handle has already been registered in the HII Database with\r
+ the same PackageListGuid.\r
+ @retval NULL The HII Handle could not be created.\r
+ @retval NULL An empty list of packages was passed in.\r
+ @retval NULL All packages are empty.\r
+ @retval Other The HII Handle associated with the newly registered package list.\r
\r
**/\r
-EFI_HII_PACKAGE_LIST_HEADER *\r
-InternalHiiLibPreparePackages (\r
- IN UINTN NumberOfPackages,\r
- IN CONST EFI_GUID *GuidId,\r
- IN VA_LIST Marker\r
+EFI_HII_HANDLE\r
+EFIAPI\r
+HiiAddPackages (\r
+ IN CONST EFI_GUID *PackageListGuid,\r
+ IN EFI_HANDLE DeviceHandle OPTIONAL,\r
+ ...\r
)\r
{\r
- EFI_HII_PACKAGE_LIST_HEADER *PackageListHeader;\r
- UINT8 *PackageListData;\r
- UINT32 PackageListLength;\r
- UINT32 PackageLength;\r
- EFI_HII_PACKAGE_HEADER PackageHeader;\r
- UINT8 *PackageArray;\r
- UINTN Index;\r
- VA_LIST MarkerBackup;\r
-\r
- PackageListLength = sizeof (EFI_HII_PACKAGE_LIST_HEADER);\r
+ EFI_STATUS Status;\r
+ EFI_HII_HANDLE *HiiHandleBuffer;\r
+ VA_LIST Args;\r
+ UINT32 *Package;\r
+ EFI_HII_PACKAGE_LIST_HEADER *PackageListHeader;\r
+ EFI_HII_HANDLE HiiHandle;\r
+ UINT32 Length;\r
+ UINT8 *Data;\r
\r
- MarkerBackup = Marker;\r
+ ASSERT (PackageListGuid != NULL);\r
\r
//\r
- // Count the length of the final package list.\r
+ // Check to see if an HII Handle has already been registered with the same \r
+ // PackageListGuid\r
//\r
- for (Index = 0; Index < NumberOfPackages; Index++) {\r
- CopyMem (&PackageLength, VA_ARG (Marker, VOID *), sizeof (UINT32));\r
- //\r
- // Do not count the BinaryLength field.\r
- //\r
- PackageListLength += (PackageLength - sizeof (UINT32));\r
+ HiiHandleBuffer = HiiGetHiiHandles (PackageListGuid);\r
+ if (HiiHandleBuffer != NULL) {\r
+ FreePool (HiiHandleBuffer);\r
+ return NULL;\r
}\r
\r
//\r
- // Include the length of EFI_HII_PACKAGE_END\r
+ // Calculate the length of all the packages in the variable argument list\r
//\r
- PackageListLength += sizeof (EFI_HII_PACKAGE_HEADER);\r
- PackageListHeader = AllocateZeroPool (PackageListLength);\r
- ASSERT (PackageListHeader != NULL);\r
- \r
- CopyGuid (&PackageListHeader->PackageListGuid, GuidId);\r
- PackageListHeader->PackageLength = PackageListLength;\r
-\r
- PackageListData = ((UINT8 *) PackageListHeader) + sizeof (EFI_HII_PACKAGE_LIST_HEADER);\r
+ for (Length = 0, VA_START (Args, DeviceHandle); (Package = VA_ARG (Args, UINT32 *)) != NULL; ) {\r
+ Length += (ReadUnaligned32 (Package) - sizeof (UINT32));\r
+ }\r
+ VA_END (Args);\r
\r
- Marker = MarkerBackup;\r
//\r
- // Prepare the final package list.\r
+ // If there are no packages in the variable argument list or all the packages \r
+ // are empty, then return a NULL HII Handle\r
//\r
- for (Index = 0; Index < NumberOfPackages; Index++) {\r
- PackageArray = (UINT8 *) VA_ARG (Marker, VOID *);\r
- //\r
- // CopyMem is used for UINT32 to cover the unaligned address access.\r
- //\r
- CopyMem (&PackageLength, PackageArray, sizeof (UINT32));\r
- PackageLength -= sizeof (UINT32);\r
- PackageArray += sizeof (UINT32);\r
- CopyMem (PackageListData, PackageArray, PackageLength);\r
- PackageListData += PackageLength;\r
+ if (Length == 0) {\r
+ return NULL;\r
}\r
\r
//\r
- // Append EFI_HII_PACKAGE_END\r
+ // Add the length of the Package List Header and the terminating Package Header \r
//\r
- PackageHeader.Type = EFI_HII_PACKAGE_END;\r
- PackageHeader.Length = sizeof (EFI_HII_PACKAGE_HEADER);\r
- CopyMem (PackageListData, &PackageHeader, PackageHeader.Length);\r
-\r
- return PackageListHeader;\r
-}\r
-\r
-/**\r
- Assemble EFI_HII_PACKAGE_LIST according to the passed in packages.\r
-\r
- If GuidId is NULL, then ASSERT.\r
- If not enough resource to complete the operation, then ASSERT.\r
-\r
- @param NumberOfPackages Number of packages.\r
- @param GuidId Package GUID.\r
- @param ... Variable argument list for packages to be assembled.\r
+ Length += sizeof (EFI_HII_PACKAGE_LIST_HEADER) + sizeof (EFI_HII_PACKAGE_HEADER);\r
\r
- @return Pointer of EFI_HII_PACKAGE_LIST_HEADER.\r
-\r
-**/\r
-EFI_HII_PACKAGE_LIST_HEADER *\r
-EFIAPI\r
-HiiLibPreparePackageList (\r
- IN UINTN NumberOfPackages,\r
- IN CONST EFI_GUID *GuidId,\r
- ...\r
- )\r
-{\r
- EFI_HII_PACKAGE_LIST_HEADER *PackageListHeader;\r
- VA_LIST Marker;\r
-\r
- ASSERT (GuidId != NULL);\r
-\r
- VA_START (Marker, GuidId);\r
- PackageListHeader = InternalHiiLibPreparePackages (NumberOfPackages, GuidId, Marker);\r
- VA_END (Marker);\r
-\r
- return PackageListHeader;\r
-}\r
-\r
-\r
-/**\r
- This function allocates pool for an EFI_HII_PACKAGE_LIST structure\r
- with additional space that is big enough to host all packages described by the variable \r
- argument list of package pointers. The allocated structure is initialized using NumberOfPackages, \r
- GuidId, and the variable length argument list of package pointers.\r
-\r
- Then, EFI_HII_PACKAGE_LIST will be register to the default System HII Database. The\r
- Handle to the newly registered Package List is returned through HiiHandle.\r
-\r
- If HiiHandle is NULL, then ASSERT.\r
+ //\r
+ // Allocate the storage for the entire Package List\r
+ //\r
+ PackageListHeader = AllocateZeroPool (Length);\r
\r
- @param NumberOfPackages The number of HII packages to register.\r
- @param GuidId Package List GUID ID.\r
- @param DriverHandle Optional. If not NULL, the DriverHandle on which an instance of DEVICE_PATH_PROTOCOL is installed.\r
- This DriverHandle uniquely defines the device that the added packages are associated with.\r
- @param HiiHandle On output, the HiiHandle is update with the handle which can be used to retrieve the Package \r
- List later. If the functions failed to add the package to the default HII database, this value will\r
- be set to NULL.\r
- @param ... The variable argument list describing all HII Package.\r
+ //\r
+ // If the Packahge List can not be allocated, then return a NULL HII Handle\r
+ //\r
+ if (PackageListHeader == NULL) {\r
+ return NULL;\r
+ }\r
\r
- @return EFI_SUCCESS If the packages are successfully added to the default HII database.\r
- @return EFI_OUT_OF_RESOURCE Not enough resource to complete the operation.\r
+ //\r
+ // Fill in the GUID and Length of the Package List Header\r
+ //\r
+ CopyGuid (&PackageListHeader->PackageListGuid, PackageListGuid);\r
+ PackageListHeader->PackageLength = Length;\r
\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibAddPackages (\r
- IN UINTN NumberOfPackages,\r
- IN CONST EFI_GUID *GuidId,\r
- IN EFI_HANDLE DriverHandle, OPTIONAL\r
- OUT EFI_HII_HANDLE *HiiHandle,\r
- ...\r
- )\r
-{\r
- VA_LIST Args;\r
- EFI_HII_PACKAGE_LIST_HEADER *PackageListHeader;\r
- EFI_STATUS Status;\r
+ //\r
+ // Initialize a pointer to the beginning if the Package List data\r
+ //\r
+ Data = (UINT8 *)(PackageListHeader + 1);\r
\r
- ASSERT (HiiHandle != NULL);\r
+ //\r
+ // Copy the data from each package in the variable argument list\r
+ //\r
+ for (VA_START (Args, DeviceHandle); (Package = VA_ARG (Args, UINT32 *)) != NULL; ) {\r
+ Length = ReadUnaligned32 (Package) - sizeof (UINT32);\r
+ CopyMem (Data, Package + 1, Length);\r
+ Data += Length;\r
+ }\r
+ VA_END (Args);\r
\r
- VA_START (Args, HiiHandle);\r
- PackageListHeader = InternalHiiLibPreparePackages (NumberOfPackages, GuidId, Args);\r
+ //\r
+ // Append a package of type EFI_HII_PACKAGE_END to mark the end of the package list\r
+ //\r
+ CopyMem (Data, &mEndOfPakageList, sizeof (mEndOfPakageList));\r
\r
- Status = gHiiDatabase->NewPackageList (gHiiDatabase, PackageListHeader, DriverHandle, HiiHandle);\r
- if (HiiHandle != NULL) {\r
- if (EFI_ERROR (Status)) {\r
- *HiiHandle = NULL;\r
- }\r
+ //\r
+ // Register the package list with the HII Database\r
+ //\r
+ Status = gHiiDatabase->NewPackageList (\r
+ gHiiDatabase, \r
+ PackageListHeader, \r
+ DeviceHandle, \r
+ &HiiHandle\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ HiiHandle = NULL;\r
}\r
\r
+ //\r
+ // Free the allocated package list\r
+ //\r
FreePool (PackageListHeader);\r
- VA_END (Args);\r
- \r
- return Status;\r
+\r
+ //\r
+ // Return the new HII Handle\r
+ //\r
+ return HiiHandle;\r
}\r
\r
/**\r
- Removes a package list from the default HII database.\r
+ Removes a package list from the HII database.\r
\r
If HiiHandle is NULL, then ASSERT.\r
- If HiiHandle is not a valid EFI_HII_HANDLE in the default HII database, then ASSERT.\r
+ If HiiHandle is not a valid EFI_HII_HANDLE in the HII database, then ASSERT.\r
\r
- @param HiiHandle The handle that was previously registered to the data base that is requested for removal.\r
- List later.\r
+ @param[in] HiiHandle The handle that was previously registered in the HII database\r
\r
**/\r
VOID\r
EFIAPI\r
-HiiLibRemovePackages (\r
+HiiRemovePackages (\r
IN EFI_HII_HANDLE HiiHandle\r
)\r
{\r
EFI_STATUS Status;\r
- ASSERT (IsHiiHandleRegistered (HiiHandle));\r
\r
+ ASSERT (HiiHandle != NULL);\r
Status = gHiiDatabase->RemovePackageList (gHiiDatabase, HiiHandle);\r
ASSERT_EFI_ERROR (Status);\r
}\r
\r
\r
/**\r
- Determines the handles that are currently active in the database.\r
- It's the caller's responsibility to free handle buffer.\r
-\r
- If HandleBufferLength is NULL, then ASSERT.\r
- If HiiHandleBuffer is NULL, then ASSERT.\r
-\r
- @param HandleBufferLength On input, a pointer to the length of the handle\r
- buffer. On output, the length of the handle buffer\r
- that is required for the handles found.\r
- @param HiiHandleBuffer Pointer to an array of Hii Handles returned.\r
-\r
- @retval EFI_SUCCESS Get an array of Hii Handles successfully.\r
+ Retrieves the array of all the HII Handles or the HII handle of a specific\r
+ package list in the HII Database.\r
+ This array is terminated with a NULL HII Handle.\r
+ This function allocates the returned array using AllocatePool().\r
+ The caller is responsible for freeing the array with FreePool().\r
+\r
+ @param[in] PackageListGuid An optional parameter that is used to request \r
+ an HII Handle that is associatd with a specific\r
+ Package List GUID. If this parameter is NULL\r
+ then all the HII Handles in the HII Database\r
+ are returned. If this parameter is not NULL\r
+ then at most 1 HII Handle is returned.\r
+\r
+ @retval NULL No HII handles were found in the HII database\r
+ @retval NULL The array of HII Handles could not be retrieved\r
+ @retval Other A pointer to the NULL terminated array of HII Handles\r
\r
**/\r
-EFI_STATUS\r
+EFI_HII_HANDLE *\r
EFIAPI\r
-HiiLibGetHiiHandles (\r
- IN OUT UINTN *HandleBufferLength,\r
- OUT EFI_HII_HANDLE **HiiHandleBuffer\r
+HiiGetHiiHandles (\r
+ IN CONST EFI_GUID *PackageListGuid OPTIONAL\r
)\r
{\r
- EFI_STATUS Status;\r
+ EFI_STATUS Status;\r
+ UINTN HandleBufferLength;\r
+ EFI_HII_HANDLE TempHiiHandleBuffer;\r
+ EFI_HII_HANDLE *HiiHandleBuffer;\r
+ EFI_GUID Guid;\r
+ UINTN Index;\r
+\r
+ //\r
+ // Retrieve the size required for the buffer of all HII handles.\r
+ //\r
+ HandleBufferLength = 0;\r
+ Status = gHiiDatabase->ListPackageLists (\r
+ gHiiDatabase,\r
+ EFI_HII_PACKAGE_TYPE_ALL,\r
+ NULL,\r
+ &HandleBufferLength,\r
+ &TempHiiHandleBuffer\r
+ );\r
\r
- ASSERT (HandleBufferLength != NULL);\r
- ASSERT (HiiHandleBuffer != NULL);\r
+ //\r
+ // If ListPackageLists() returns EFI_SUCCESS for a zero size, \r
+ // then there are no HII handles in the HII database. If ListPackageLists() \r
+ // returns an error other than EFI_BUFFER_TOO_SMALL, then there are no HII \r
+ // handles in the HII database.\r
+ //\r
+ if (Status != EFI_BUFFER_TOO_SMALL) {\r
+ //\r
+ // Return NULL if the size can not be retrieved, or if there are no HII \r
+ // handles in the HII Database\r
+ //\r
+ return NULL;\r
+ }\r
\r
- *HandleBufferLength = 0;\r
- *HiiHandleBuffer = NULL;\r
+ //\r
+ // Allocate the array of HII handles to hold all the HII Handles and a NULL terminator\r
+ //\r
+ HiiHandleBuffer = AllocateZeroPool (HandleBufferLength + sizeof (EFI_HII_HANDLE));\r
+ if (HiiHandleBuffer == NULL) {\r
+ //\r
+ // Return NULL if allocation fails.\r
+ //\r
+ return NULL;\r
+ }\r
\r
//\r
- // Try to find the actual buffer size for HiiHandle Buffer.\r
+ // Retrieve the array of HII Handles in the HII Database\r
//\r
Status = gHiiDatabase->ListPackageLists (\r
- gHiiDatabase,\r
- EFI_HII_PACKAGE_TYPE_ALL,\r
- NULL,\r
- HandleBufferLength,\r
- *HiiHandleBuffer\r
- );\r
- \r
- if (Status == EFI_BUFFER_TOO_SMALL) {\r
- *HiiHandleBuffer = AllocateZeroPool (*HandleBufferLength);\r
- ASSERT (*HiiHandleBuffer != NULL);\r
- Status = gHiiDatabase->ListPackageLists (\r
- gHiiDatabase,\r
- EFI_HII_PACKAGE_TYPE_ALL,\r
- NULL,\r
- HandleBufferLength,\r
- *HiiHandleBuffer\r
- );\r
-\r
- if (EFI_ERROR (Status)) {\r
- FreePool (*HiiHandleBuffer);\r
- *HiiHandleBuffer = NULL;\r
- }\r
+ gHiiDatabase,\r
+ EFI_HII_PACKAGE_TYPE_ALL,\r
+ NULL,\r
+ &HandleBufferLength,\r
+ HiiHandleBuffer\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ //\r
+ // Free the buffer and return NULL if the HII handles can not be retrieved.\r
+ //\r
+ FreePool (HiiHandleBuffer);\r
+ return NULL;\r
}\r
\r
- return Status;\r
+ if (PackageListGuid == NULL) {\r
+ //\r
+ // Return the NULL terminated array of HII handles in the HII Database\r
+ //\r
+ return HiiHandleBuffer;\r
+ } else {\r
+ for (Index = 0; HiiHandleBuffer[Index] != NULL; Index++) {\r
+ Status = InternalHiiExtractGuidFromHiiHandle (HiiHandleBuffer[Index], &Guid);\r
+ ASSERT_EFI_ERROR (Status);\r
+ if (CompareGuid (&Guid, PackageListGuid)) {\r
+ HiiHandleBuffer[0] = HiiHandleBuffer[Index];\r
+ HiiHandleBuffer[1] = NULL;\r
+ return HiiHandleBuffer;\r
+ }\r
+ }\r
+ FreePool (HiiHandleBuffer);\r
+ return NULL;\r
+ }\r
}\r
\r
/**\r
Extract Hii package list GUID for given HII handle.\r
\r
- If HiiHandle could not be found in the default HII database, then ASSERT.\r
+ If HiiHandle could not be found in the HII database, then ASSERT.\r
If Guid is NULL, then ASSERT.\r
\r
@param Handle Hii handle\r
**/\r
EFI_STATUS\r
EFIAPI\r
-HiiLibExtractGuidFromHiiHandle (\r
+InternalHiiExtractGuidFromHiiHandle (\r
IN EFI_HII_HANDLE Handle,\r
OUT EFI_GUID *Guid\r
)\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
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
return EFI_SUCCESS;\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
-EFI_STATUS\r
+EFI_STRING_ID\r
EFIAPI\r
-HiiLibNewString (\r
- IN EFI_HII_HANDLE PackageList,\r
- OUT EFI_STRING_ID *StringId,\r
- IN CONST EFI_STRING String\r
+HiiSetString (\r
+ IN EFI_HII_HANDLE HiiHandle,\r
+ IN EFI_STRING_ID StringId, OPTIONAL\r
+ IN CONST EFI_STRING String,\r
+ IN CONST CHAR8 *SupportedLanguages OPTIONAL\r
)\r
{\r
- EFI_STATUS Status;\r
- CHAR8 *Languages;\r
- CHAR8 *LangStrings;\r
- CHAR8 *Lang;\r
+ EFI_STATUS Status;\r
+ CHAR8 *AllocatedLanguages;\r
+ CHAR8 *Supported;\r
+ CHAR8 *Language;\r
+ EFI_STRING_ID NewStringId;\r
\r
+ ASSERT (HiiHandle != NULL);\r
ASSERT (String != NULL);\r
- ASSERT (StringId != NULL);\r
\r
- Status = EFI_SUCCESS;\r
+ if (SupportedLanguages == NULL) {\r
+ //\r
+ // Retrieve the languages that the package specified by HiiHandle supports\r
+ //\r
+ AllocatedLanguages = HiiGetSupportedLanguages (HiiHandle);\r
+ } else {\r
+ //\r
+ // Allocate a copy of the SupportLanguages string that passed in\r
+ //\r
+ AllocatedLanguages = AllocateCopyPool (AsciiStrLen (SupportedLanguages), SupportedLanguages);\r
+ }\r
\r
- Languages = HiiLibGetSupportedLanguages (PackageList);\r
- ASSERT (Languages != NULL);\r
//\r
- // Allocate working buffer to contain substring of Languages.\r
+ // If there are not enough resources for the supported languages string, then return a StringId of 0\r
//\r
- Lang = AllocatePool (AsciiStrSize (Languages));\r
- ASSERT (Lang != NULL);\r
+ if (AllocatedLanguages == NULL) {\r
+ return (EFI_STRING_ID)(0);\r
+ }\r
\r
- LangStrings = Languages;\r
- while (*LangStrings != 0) {\r
- HiiLibGetNextLanguage (&LangStrings, Lang);\r
+ NewStringId = 0;\r
+ Status = EFI_INVALID_PARAMETER;\r
+ //\r
+ // Loop through each language that the string supports\r
+ //\r
+ for (Supported = AllocatedLanguages; *Supported != '\0'; ) {\r
+ //\r
+ // Cache a pointer to the beginning of the current language in the list of languages\r
+ //\r
+ Language = Supported;\r
\r
//\r
- // For each language supported by the package,\r
- // a string token is created.\r
+ // Search for the next language seperator and replace it with a Null-terminator\r
//\r
- Status = gHiiString->NewString (\r
- gHiiString,\r
- PackageList,\r
- StringId,\r
- Lang,\r
- NULL,\r
- String,\r
- NULL\r
- );\r
- if (EFI_ERROR (Status)) {\r
- break;\r
+ for (; *Supported != 0 && *Supported != ';'; Supported++);\r
+ if (*Supported != 0) {\r
+ *(Supported++) = '\0';\r
}\r
- }\r
-\r
- FreePool (Lang);\r
- FreePool (Languages);\r
-\r
- return Status;\r
- \r
-}\r
-\r
\r
-/**\r
- This function update the specified string in String Package of each language\r
- supported by the package list.\r
-\r
- If String is NULL, then ASSERT.\r
- If PackageList could not be found in the default HII database, then ASSERT.\r
- If StringId is not found in PackageList, then ASSERT.\r
-\r
- @param PackageList Handle of the package list where this string will\r
- be added.\r
- @param StringId Ths String Id to be updated.\r
- @param String Points to the new null-terminated string.\r
-\r
- @retval EFI_SUCCESS The new string was added successfully.\r
- @retval EFI_OUT_OF_RESOURCES Could not add the string due to lack of resources.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibSetString (\r
- IN EFI_HII_HANDLE PackageList,\r
- IN EFI_STRING_ID StringId,\r
- IN CONST EFI_STRING String\r
- )\r
-{\r
- EFI_STATUS Status;\r
- CHAR8 *Languages;\r
- CHAR8 *LangStrings;\r
- CHAR8 *Lang;\r
-\r
- ASSERT (IsHiiHandleRegistered (PackageList));\r
-\r
- Status = EFI_SUCCESS;\r
-\r
- Languages = HiiLibGetSupportedLanguages (PackageList);\r
- ASSERT (Languages != NULL);\r
-\r
- //\r
- // Allocate working buffer to contain substring of Languages.\r
- //\r
- Lang = AllocatePool (AsciiStrSize (Languages));\r
- ASSERT (Lang != NULL);\r
-\r
- LangStrings = Languages;\r
- while (*LangStrings != 0) {\r
- HiiLibGetNextLanguage (&LangStrings, Lang);\r
+ //\r
+ // If StringId is 0, then call NewString(). Otherwise, call SetString()\r
+ //\r
+ if (StringId == (EFI_STRING_ID)(0)) {\r
+ Status = gHiiString->NewString (gHiiString, HiiHandle, &NewStringId, Language, NULL, String, NULL);\r
+ } else {\r
+ Status = gHiiString->SetString (gHiiString, HiiHandle, StringId, Language, String, NULL);\r
+ }\r
\r
//\r
- // For each language supported by the package,\r
- // the string is updated.\r
+ // If there was an error, then break out of the loop and return a StringId of 0\r
//\r
- Status = gHiiString->SetString (\r
- gHiiString,\r
- PackageList,\r
- StringId,\r
- Lang,\r
- String,\r
- NULL\r
- );\r
if (EFI_ERROR (Status)) {\r
break;\r
}\r
}\r
\r
- FreePool (Lang);\r
- FreePool (Languages);\r
-\r
- return Status;\r
+ //\r
+ // Free the buffer of supported languages\r
+ //\r
+ FreePool (AllocatedLanguages);\r
+\r
+ if (EFI_ERROR (Status)) {\r
+ return (EFI_STRING_ID)(0);\r
+ } else if (StringId == (EFI_STRING_ID)(0)) {\r
+ return NewStringId;\r
+ } else {\r
+ return StringId;\r
+ }\r
}\r
\r
\r
/**\r
- Get the string given the StringId and String package Producer's Guid. The caller\r
- is responsible to free the *String.\r
-\r
- If PackageList with the matching ProducerGuid is not found, then ASSERT.\r
- If PackageList with the matching ProducerGuid is found but no String is\r
- specified by StringId is found, then ASSERT.\r
-\r
- @param ProducerGuid The Guid of String package list.\r
- @param StringId The String ID.\r
- @param String The output string.\r
-\r
- @retval EFI_SUCCESS Operation is successful.\r
- @retval EFI_OUT_OF_RESOURCES There is not enought memory in the system.\r
+ Retrieves a string from a string package names by GUID in a specific language. \r
+ If the language is not specified, then a string from a string package in the \r
+ current platform language is retrieved. If the string can not be retrieved \r
+ using the specified language or the current platform language, then the string \r
+ is retrieved from the string package in the first language the string package \r
+ supports. The returned string is allocated using AllocatePool(). The caller \r
+ is responsible for freeing the allocated buffer using FreePool().\r
+ \r
+ If PackageListGuid is NULL, then ASSERT().\r
+ If StringId is 0, then ASSERT.\r
+\r
+ @param[in] PackageListGuid The GUID of a package list that was previously \r
+ registered in the HII Database.\r
+ @param[in] StringId The identifier of the string to retrieved from the \r
+ string package associated with PackageListGuid.\r
+ @param[in] Language The language of the string to retrieve. If this \r
+ parameter is NULL, then the current platform \r
+ language is used. The format of Language must \r
+ follow the language format assumed the HII Database.\r
+\r
+ @retval NULL The package list specified by PackageListGuid is not present in the\r
+ HII Database.\r
+ @retval NULL The string specified by StringId is not present in the string package.\r
+ @retval Other The string was returned.\r
\r
**/\r
-EFI_STATUS\r
+EFI_STRING\r
EFIAPI\r
-HiiLibGetStringFromToken (\r
- IN EFI_GUID *ProducerGuid,\r
- IN EFI_STRING_ID StringId,\r
- OUT EFI_STRING *String\r
+HiiGetPackageString (\r
+ IN CONST EFI_GUID *PackageListGuid,\r
+ IN EFI_STRING_ID StringId,\r
+ IN CONST CHAR8 *Language OPTIONAL\r
)\r
{\r
- EFI_STATUS Status;\r
- UINTN Index;\r
- UINTN HandleBufferLen;\r
- EFI_HII_HANDLE *HiiHandleBuffer;\r
- EFI_GUID Guid;\r
+ EFI_HANDLE *HiiHandleBuffer;\r
+ EFI_HANDLE HiiHandle;\r
\r
- Status = HiiLibGetHiiHandles (&HandleBufferLen, &HiiHandleBuffer);\r
- if (HiiHandleBuffer == NULL) {\r
- return EFI_NOT_FOUND;\r
- }\r
- for (Index = 0; Index < (HandleBufferLen / sizeof (EFI_HII_HANDLE)); Index++) {\r
- Status = HiiLibExtractGuidFromHiiHandle (HiiHandleBuffer[Index], &Guid);\r
- if (EFI_ERROR(Status)) {\r
- return Status;\r
- }\r
- if (CompareGuid (&Guid, ProducerGuid)) {\r
- break;\r
- }\r
- }\r
+ ASSERT (PackageListGuid != NULL);\r
\r
- if (Index >= (HandleBufferLen / sizeof (EFI_HII_HANDLE))) {\r
- //\r
- // If PackageList with the matching ProducerGuid is not found, then ASSERT.\r
- //\r
- ASSERT (FALSE);\r
- Status = EFI_NOT_FOUND;\r
- goto Out;\r
+ HiiHandleBuffer = HiiGetHiiHandles (PackageListGuid);\r
+ if (HiiHandleBuffer == NULL) {\r
+ return NULL;\r
}\r
\r
- Status = HiiLibGetStringFromHandle (HiiHandleBuffer[Index], StringId, String);\r
-\r
-Out:\r
+ HiiHandle = HiiHandleBuffer[0];\r
FreePool (HiiHandleBuffer);\r
\r
- return Status;\r
+ return HiiGetString (HiiHandle, StringId, Language);\r
}\r
\r
/**\r
- This function try to retrieve string from String package of current language.\r
- If fails, it try to retrieve string from String package of first language it support.\r
-\r
- If StringSize is NULL, then ASSERT.\r
- If String is NULL and *StringSize is not 0, then ASSERT.\r
- If PackageList could not be found in the default HII database, then ASSERT.\r
- If StringId is not found in PackageList, then ASSERT.\r
-\r
- @param PackageList The package list in the HII database to search for\r
- the specified string.\r
- @param StringId The string's id, which is unique within\r
- PackageList.\r
- @param String Points to the new null-terminated string.\r
- @param StringSize On entry, points to the size of the buffer pointed\r
- to by String, in bytes. On return, points to the\r
- length of the string, in bytes.\r
-\r
- @retval EFI_SUCCESS The string was returned successfully.\r
- @retval EFI_NOT_FOUND The string specified by StringId is not available.\r
- @retval EFI_BUFFER_TOO_SMALL The buffer specified by StringLength is too small\r
- to hold the string.\r
+ Retrieves a string from a string package in a specific language. If the language\r
+ is not specified, then a string from a string package in the current platform \r
+ language is retrieved. If the string can not be retrieved using the specified \r
+ language or the current platform language, then the string is retrieved from \r
+ the string package in the first language the string package supports. The \r
+ returned string is allocated using AllocatePool(). The caller is responsible \r
+ for freeing the allocated buffer using FreePool().\r
+ \r
+ If HiiHandle is NULL, then ASSERT().\r
+ If StringId is 0, then ASSET.\r
+\r
+ @param[in] HiiHandle A handle that was previously registered in the HII Database.\r
+ @param[in] StringId The identifier of the string to retrieved from the string \r
+ package associated with HiiHandle.\r
+ @param[in] Language The language of the string to retrieve. If this parameter \r
+ is NULL, then the current platform language is used. The \r
+ format of Language must follow the language format assumed \r
+ the HII Database.\r
+\r
+ @retval NULL The string specified by StringId is not present in the string package.\r
+ @retval Other The string was returned.\r
\r
**/\r
-EFI_STATUS\r
+EFI_STRING\r
EFIAPI\r
-HiiLibGetString (\r
- IN EFI_HII_HANDLE PackageList,\r
- IN EFI_STRING_ID StringId,\r
- OUT EFI_STRING String,\r
- IN OUT UINTN *StringSize\r
+HiiGetString (\r
+ IN EFI_HII_HANDLE HiiHandle,\r
+ IN EFI_STRING_ID StringId,\r
+ IN CONST CHAR8 *Language OPTIONAL\r
)\r
{\r
EFI_STATUS Status;\r
- CHAR8 *Languages;\r
- CHAR8 *CurrentLang;\r
+ UINTN StringSize;\r
+ CHAR16 TempString;\r
+ EFI_STRING String;\r
+ CHAR8 *SupportedLanguages;\r
+ CHAR8 *PlatformLanguage;\r
CHAR8 *BestLanguage;\r
\r
- ASSERT (StringSize != NULL);\r
- ASSERT (!(*StringSize != 0 && String == NULL));\r
- ASSERT (IsHiiHandleRegistered (PackageList));\r
+ ASSERT (HiiHandle != NULL);\r
+ ASSERT (StringId != 0);\r
\r
- Languages = HiiLibGetSupportedLanguages (PackageList);\r
- ASSERT (Languages != NULL);\r
+ //\r
+ // Initialize all allocated buffers to NULL\r
+ // \r
+ SupportedLanguages = NULL;\r
+ PlatformLanguage = NULL;\r
+ BestLanguage = NULL;\r
+ String = NULL;\r
\r
- CurrentLang = GetEfiGlobalVariable (L"PlatformLang");\r
- \r
- Status = EFI_NOT_FOUND;\r
- BestLanguage = GetBestLanguage (\r
- Languages,\r
- FALSE,\r
- (CurrentLang != NULL) ? CurrentLang : "",\r
- (CHAR8 *) PcdGetPtr (PcdUefiVariableDefaultPlatformLang),\r
- Languages,\r
- NULL\r
- );\r
- if (BestLanguage != NULL ) {\r
- Status = gHiiString->GetString (\r
- gHiiString,\r
- BestLanguage,\r
- PackageList,\r
- StringId,\r
- String,\r
- StringSize,\r
- NULL\r
- );\r
- FreePool (BestLanguage);\r
- }\r
- if (CurrentLang != NULL) {\r
- FreePool (CurrentLang);\r
+ //\r
+ // Get the languages that the package specified by HiiHandle supports\r
+ //\r
+ SupportedLanguages = HiiGetSupportedLanguages (HiiHandle);\r
+ if (SupportedLanguages == NULL) {\r
+ goto Error;\r
}\r
- FreePool (Languages);\r
-\r
- return Status;\r
-}\r
\r
+ //\r
+ // Get the current platform language setting\r
+ //\r
+ PlatformLanguage = GetEfiGlobalVariable (L"PlatformLang");\r
\r
-/**\r
- Get string specified by StringId form the HiiHandle. The caller\r
- is responsible to free the *String.\r
-\r
- If String is NULL, then ASSERT.\r
- If HiiHandle could not be found in the default HII database, then ASSERT.\r
- If StringId is not found in PackageList, then ASSERT.\r
-\r
- @param HiiHandle The HII handle of package list.\r
- @param StringId The String ID.\r
- @param String The output string.\r
+ //\r
+ // If Languag is NULL, then set it to an empty string, so it will be \r
+ // skipped by GetBestLanguage()\r
+ //\r
+ if (Language == NULL) {\r
+ Language = "";\r
+ }\r
\r
- @retval EFI_NOT_FOUND String is not found.\r
- @retval EFI_SUCCESS Operation is successful.\r
- @retval EFI_OUT_OF_RESOURCES There is not enought memory in the system.\r
+ //\r
+ // Get the best matching language from SupportedLanguages\r
+ //\r
+ BestLanguage = GetBestLanguage (\r
+ SupportedLanguages, \r
+ FALSE, // RFC 4646 mode\r
+ Language, // Highest priority \r
+ PlatformLanguage != NULL ? PlatformLanguage : "", // Next highest priority\r
+ SupportedLanguages, // Lowest priority \r
+ NULL\r
+ );\r
+ if (BestLanguage == NULL) {\r
+ goto Error;\r
+ }\r
\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-HiiLibGetStringFromHandle (\r
- IN EFI_HII_HANDLE HiiHandle,\r
- IN EFI_STRING_ID StringId,\r
- OUT EFI_STRING *String\r
- )\r
-{\r
- EFI_STATUS Status;\r
- UINTN StringSize;\r
+ //\r
+ // Retrieve the size of the string in the string package for the BestLanguage\r
+ //\r
+ StringSize = 0;\r
+ Status = gHiiString->GetString (\r
+ gHiiString,\r
+ BestLanguage,\r
+ HiiHandle,\r
+ StringId,\r
+ &TempString,\r
+ &StringSize,\r
+ NULL\r
+ );\r
+ //\r
+ // If GetString() returns EFI_SUCCESS for a zero size, \r
+ // then there are no supported languages registered for HiiHandle. If GetString() \r
+ // returns an error other than EFI_BUFFER_TOO_SMALL, then HiiHandle is not present\r
+ // in the HII Database\r
+ //\r
+ if (Status != EFI_BUFFER_TOO_SMALL) {\r
+ goto Error;\r
+ }\r
\r
- ASSERT (String != NULL);\r
+ //\r
+ // Allocate a buffer for the return string\r
+ //\r
+ String = AllocateZeroPool (StringSize);\r
+ if (String == NULL) {\r
+ goto Error;\r
+ }\r
\r
- StringSize = HII_LIB_DEFAULT_STRING_SIZE;\r
- *String = AllocateZeroPool (StringSize);\r
- if (*String == NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
+ //\r
+ // Retrieve the string from the string package\r
+ //\r
+ Status = gHiiString->GetString (\r
+ gHiiString,\r
+ BestLanguage,\r
+ HiiHandle,\r
+ StringId,\r
+ String,\r
+ &StringSize,\r
+ NULL\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ //\r
+ // Free the buffer and return NULL if the supported languages can not be retrieved.\r
+ //\r
+ FreePool (String);\r
+ String = NULL;\r
}\r
\r
- Status = HiiLibGetString (HiiHandle, StringId, *String, &StringSize);\r
- if (Status == EFI_BUFFER_TOO_SMALL) {\r
- FreePool (*String);\r
- *String = AllocateZeroPool (StringSize);\r
- if (*String == NULL) {\r
- return EFI_OUT_OF_RESOURCES;\r
- }\r
- Status = HiiLibGetString (HiiHandle, StringId, *String, &StringSize);\r
+Error:\r
+ //\r
+ // Free allocated buffers\r
+ //\r
+ if (SupportedLanguages != NULL) {\r
+ FreePool (SupportedLanguages);\r
+ }\r
+ if (PlatformLanguage != NULL) {\r
+ FreePool (PlatformLanguage);\r
+ }\r
+ if (BestLanguage != NULL) {\r
+ FreePool (BestLanguage);\r
}\r
\r
- return Status;\r
+ //\r
+ // Return the Null-terminated Unicode string\r
+ //\r
+ return String;\r
}\r
\r
-\r
-\r
/**\r
Convert language code from RFC3066 to ISO639-2.\r
\r
extern CONST EFI_HII_STRING_PROTOCOL *mHiiStringProt;\r
\r
/**\r
- This function check if the Hii Handle is a valid handle registered\r
- in the HII database.\r
+ Extract Hii package list GUID for given HII handle.\r
\r
- @param HiiHandle The HII Handle.\r
+ If HiiHandle could not be found in the HII database, then ASSERT.\r
+ If Guid is NULL, then ASSERT.\r
+\r
+ @param Handle Hii handle\r
+ @param Guid Package list GUID\r
+\r
+ @retval EFI_SUCCESS Successfully extract GUID from Hii database.\r
\r
- @retval TRUE If it is a valid HII handle.\r
- @retval FALSE If it is a invalid HII handle.\r
**/\r
-BOOLEAN\r
-IsHiiHandleRegistered (\r
- EFI_HII_HANDLE HiiHandle\r
- );\r
+EFI_STATUS\r
+EFIAPI\r
+InternalHiiExtractGuidFromHiiHandle (\r
+ IN EFI_HII_HANDLE Handle,\r
+ OUT EFI_GUID *Guid\r
+ )\r
+;\r
\r
#endif\r
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
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
// 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
//\r
// Get user input password\r
//\r
- BufferSize = 21 * sizeof (CHAR16);\r
- Password = AllocateZeroPool (BufferSize);\r
- ASSERT (Password != NULL);\r
-\r
- Status = HiiLibGetString (PrivateData->HiiHandle[0], StringId, Password, &BufferSize);\r
- if (EFI_ERROR (Status)) {\r
+ Password = HiiGetString (PrivateData->HiiHandle[0], StringId, NULL);\r
+ if (Password == NULL) {\r
+ return EFI_NOT_READY;\r
+ }\r
+ if (StrLen (Password) > 20) {\r
FreePool (Password);\r
- return Status;\r
+ return EFI_NOT_READY;\r
}\r
\r
//\r
// Validate old password\r
//\r
- EncodedPassword = AllocateCopyPool (21 * sizeof (CHAR16), Password);\r
+ EncodedPassword = AllocateZeroPool (21 * sizeof (CHAR16));\r
ASSERT (EncodedPassword != NULL);\r
+ StrnCpy (EncodedPassword, Password, 21);\r
EncodePassword (EncodedPassword, 20 * sizeof (CHAR16));\r
if (CompareMem (EncodedPassword, PrivateData->Configuration.WhatIsThePassword2, 20 * sizeof (CHAR16)) != 0) {\r
//\r
{\r
EFI_STATUS Status;\r
CHAR16 *Password;\r
+ CHAR16 *TempPassword;\r
UINTN PasswordSize;\r
DRIVER_SAMPLE_CONFIGURATION *Configuration;\r
UINTN BufferSize;\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
- Status = HiiLibGetString (PrivateData->HiiHandle[0], StringId, Password, &BufferSize);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ \r
+ TempPassword = HiiGetString (PrivateData->HiiHandle[0], StringId, NULL);\r
+ if (TempPassword == NULL) {\r
+ return EFI_NOT_READY;\r
+ }\r
+ if (StrLen (TempPassword) > PasswordSize / sizeof (CHAR16)) {\r
+ FreePool (TempPassword);\r
+ return EFI_NOT_READY;\r
}\r
+ StrnCpy (Password, TempPassword, PasswordSize / sizeof (CHAR16));\r
+ FreePool (TempPassword);\r
\r
//\r
// Retrive uncommitted data from Browser\r
{\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
//\r
// Publish our HII data\r
//\r
- PackageList = HiiLibPreparePackageList (\r
- 2,\r
- &mFormSetGuid,\r
- DriverSampleStrings,\r
- VfrBin\r
- );\r
- if (PackageList == NULL) {\r
+ HiiHandle[0] = HiiAddPackages (\r
+ &mFormSetGuid,\r
+ DriverHandle[0],\r
+ DriverSampleStrings,\r
+ VfrBin,\r
+ NULL\r
+ );\r
+ if (HiiHandle[0] == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- Status = HiiDatabase->NewPackageList (\r
- HiiDatabase,\r
- PackageList,\r
- DriverHandle[0],\r
- &HiiHandle[0]\r
- );\r
- FreePool (PackageList);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
PrivateData->HiiHandle[0] = HiiHandle[0];\r
\r
//\r
\r
PrivateData->DriverHandle[1] = DriverHandle[1];\r
\r
- PackageList = HiiLibPreparePackageList (\r
- 2,\r
- &mInventoryGuid,\r
- DriverSampleStrings,\r
- InventoryBin\r
- );\r
- if (PackageList == NULL) {\r
+ HiiHandle[1] = HiiAddPackages (\r
+ &mInventoryGuid,\r
+ DriverHandle[1],\r
+ DriverSampleStrings,\r
+ InventoryBin,\r
+ NULL\r
+ );\r
+ if (HiiHandle[1] == NULL) {\r
return EFI_OUT_OF_RESOURCES;\r
}\r
\r
- Status = HiiDatabase->NewPackageList (\r
- HiiDatabase,\r
- PackageList,\r
- DriverHandle[1],\r
- &HiiHandle[1]\r
- );\r
- FreePool (PackageList);\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
PrivateData->HiiHandle[1] = HiiHandle[1];\r
\r
//\r
//\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
#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
\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
\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
\r
\r
[LibraryClasses]\r
+ BaseLib\r
MemoryAllocationLib\r
UefiBootServicesTableLib\r
UefiDriverEntryPoint\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
// Compose the Port string and create a new EFI_STRING_ID.\r
//\r
UnicodeSPrint (PortString, 128, L"Port %s", ConfigFormEntry->MacString);\r
- HiiLibNewString (mCallbackInfo->RegisteredHandle, &ConfigFormEntry->PortTitleToken, PortString);\r
+ ConfigFormEntry->PortTitleToken = HiiSetString (mCallbackInfo->RegisteredHandle, 0, PortString, NULL);\r
\r
//\r
// Compose the help string of this port and create a new EFI_STRING_ID.\r
//\r
UnicodeSPrint (PortString, 128, L"Set the iSCSI parameters on port %s", ConfigFormEntry->MacString);\r
- HiiLibNewString (mCallbackInfo->RegisteredHandle, &ConfigFormEntry->PortTitleHelpToken, PortString);\r
+ ConfigFormEntry->PortTitleHelpToken = HiiSetString (mCallbackInfo->RegisteredHandle, 0, PortString, NULL);\r
\r
InsertTailList (&mIScsiConfigFormList, &ConfigFormEntry->Link);\r
mNumberOfIScsiDevices++;\r
{\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
//\r
// Publish our HII data\r
//\r
- PackageList = HiiLibPreparePackageList (2, &mVendorGuid, IScsiDxeStrings, IScsiConfigDxeBin);\r
- ASSERT (PackageList != NULL);\r
- \r
- Status = HiiDatabase->NewPackageList (\r
- HiiDatabase,\r
- PackageList,\r
- CallbackInfo->DriverHandle,\r
- &CallbackInfo->RegisteredHandle\r
- );\r
- FreePool (PackageList);\r
- if (EFI_ERROR (Status)) {\r
+ CallbackInfo->RegisteredHandle = HiiAddPackages (\r
+ &mVendorGuid,\r
+ CallbackInfo->DriverHandle,\r
+ IScsiDxeStrings,\r
+ IScsiConfigDxeBin,\r
+ NULL\r
+ );\r
+ if (CallbackInfo->RegisteredHandle == NULL) {\r
FreePool(CallbackInfo);\r
- return Status;\r
+ return EFI_OUT_OF_RESOURCES;\r
}\r
\r
mCallbackInfo = CallbackInfo;\r
{\r
CHAR16 Str[MAXIMUM_VALUE_CHARACTERS];\r
EFI_STRING_ID Id;\r
- EFI_STATUS Status;\r
\r
ASSERT (Statement != NULL);\r
ASSERT (Statement->Operand == EFI_IFR_NUMERIC_OP);\r
\r
UnicodeValueToString (Str, 0, Statement->VarStoreInfo.VarName, MAXIMUM_VALUE_CHARACTERS - 1);\r
- \r
- Status = HiiLibNewString (FormSet->HiiHandle, &Id, Str);\r
\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
+ Id = HiiSetString (FormSet->HiiHandle, 0, Str, NULL);\r
+ if (Id == 0) {\r
+ return EFI_OUT_OF_RESOURCES;\r
}\r
\r
Statement->VarStoreInfo.VarName = Id;\r
)\r
{\r
EFI_STATUS Status;\r
- EFI_HII_PACKAGE_LIST_HEADER *PackageList;\r
\r
//\r
// Locate required Hii relative protocols\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
EFI_STRING_ID StringId;\r
- EFI_STATUS Status;\r
\r
- StringId = 0;\r
- Status = HiiLibNewString (HiiHandle, &StringId, String);\r
- ASSERT_EFI_ERROR (Status);\r
+ StringId = HiiSetString (HiiHandle, 0, String, NULL);\r
+ ASSERT (StringId != 0);\r
\r
return StringId;\r
}\r
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
IN EFI_HII_HANDLE HiiHandle\r
)\r
{\r
- EFI_STATUS Status;\r
- CHAR16 *String;\r
- UINTN BufferLength;\r
+ EFI_STRING String;\r
\r
- //\r
- // Set default string size assumption at no more than 256 bytes\r
- //\r
- BufferLength = 0x100;\r
- String = AllocateZeroPool (BufferLength);\r
+ String = HiiGetString (HiiHandle, Token, NULL);\r
ASSERT (String != NULL);\r
-\r
- Status = HiiLibGetString (HiiHandle, Token, String, &BufferLength);\r
-\r
- if (Status == EFI_BUFFER_TOO_SMALL) {\r
- FreePool (String);\r
- String = AllocateZeroPool (BufferLength);\r
- ASSERT (String != NULL);\r
-\r
- Status = HiiLibGetString (HiiHandle, Token, String, &BufferLength);\r
- }\r
- ASSERT_EFI_ERROR (Status);\r
-\r
- return String;\r
+ return (CHAR16 *) String;\r
}\r
\r
\r
#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
DebugLib\r
PrintLib\r
HiiLib\r
- \r
+ DevicePathLib\r
+\r
[Guids]\r
gEfiIfrTianoGuid ## CONSUMES ## GUID\r
gEfiIfrFrameworkGuid ## CONSUMES ## GUID\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
\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
//\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
// Add our default strings to the HII database. They will be modified later.\r
//\r
- HiiLibAddPackages (1, &gEfiMiscSubClassGuid, NULL, &HiiHandle, MiscSubclassStrings);\r
-\r
- if (EFI_ERROR (Status)) {\r
+ HiiHandle = HiiAddPackages (\r
+ &gEfiMiscSubClassGuid,\r
+ NULL,\r
+ MiscSubclassStrings,\r
+ NULL\r
+ );\r
+ if (HiiHandle == NULL) {\r
DEBUG ((EFI_D_ERROR, "Could not log default strings to Hii. %r\n", Status));\r
- return Status;\r
+ return EFI_OUT_OF_RESOURCES;\r
}\r
//\r
//\r
//\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
// Add our default strings to the HII database. They will be modified later.\r
//\r
- HiiLibAddPackages (1, &gEfiMiscSubClassGuid, NULL, &HiiHandle, MiscSubclassStrings);\r
-\r
- if (EFI_ERROR (EfiStatus)) {\r
+ HiiHandle = HiiAddPackages (\r
+ &gEfiMiscSubClassGuid,\r
+ NULL,\r
+ MiscSubclassStrings,\r
+ NULL\r
+ );\r
+ if (HiiHandle == NULL) {\r
DEBUG ((EFI_D_ERROR, "Could not log default strings to Hii. %r\n", EfiStatus));\r
- return EfiStatus;\r
+ return EFI_OUT_OF_RESOURCES;\r
}\r
+\r
//\r
//\r
//\r