Add IfrLibCreatePopUp2 and HiiLibExportPackageLists.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5663 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -505,6 +505,130 @@ HiiLibDevicePathToHiiHandle (
|
||||
return HiiHandle;
|
||||
}
|
||||
|
||||
/**
|
||||
Exports the contents of one or all package lists in the HII database into a buffer.
|
||||
|
||||
If Handle is not NULL and not a valid EFI_HII_HANDLE registered in the database,
|
||||
then ASSERT.
|
||||
If PackageListHeader is NULL, then ASSERT.
|
||||
If PackageListSize is NULL, then ASSERT.
|
||||
|
||||
@param Handle The HII Handle.
|
||||
@param PackageListHeader A pointer to a buffer that will contain the results of
|
||||
the export function.
|
||||
@param PackageListSize On output, the length of the buffer that is required for the exported data.
|
||||
|
||||
@retval EFI_SUCCESS Package exported.
|
||||
|
||||
@retval EFI_OUT_OF_RESOURCES Not enought memory to complete the operations.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
HiiLibExportPackageLists (
|
||||
IN EFI_HII_HANDLE Handle,
|
||||
OUT EFI_HII_PACKAGE_LIST_HEADER **PackageListHeader,
|
||||
OUT UINTN *PackageListSize
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
UINTN Size;
|
||||
EFI_HII_PACKAGE_LIST_HEADER *PackageListHdr;
|
||||
|
||||
ASSERT (PackageListSize != NULL);
|
||||
ASSERT (PackageListHeader != NULL);
|
||||
|
||||
LocateHiiProtocols ();
|
||||
|
||||
if (Handle != NULL) {
|
||||
ASSERT (IsHiiHandleRegistered (Handle));
|
||||
}
|
||||
|
||||
Size = 0;
|
||||
PackageListHdr = NULL;
|
||||
Status = mHiiDatabaseProt->ExportPackageLists (
|
||||
mHiiDatabaseProt,
|
||||
Handle,
|
||||
&Size,
|
||||
PackageListHdr
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status != EFI_BUFFER_TOO_SMALL);
|
||||
|
||||
if (Status == EFI_BUFFER_TOO_SMALL) {
|
||||
PackageListHdr = AllocateZeroPool (Size);
|
||||
|
||||
if (PackageListHeader == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
} else {
|
||||
Status = mHiiDatabaseProt->ExportPackageLists (
|
||||
mHiiDatabaseProt,
|
||||
Handle,
|
||||
&Size,
|
||||
PackageListHdr
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if (!EFI_ERROR (Status)) {
|
||||
*PackageListHeader = PackageListHdr;
|
||||
*PackageListSize = Size;
|
||||
} else {
|
||||
FreePool (PackageListHdr);
|
||||
}
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
HiiLibListPackageLists (
|
||||
IN UINT8 PackageType,
|
||||
IN CONST EFI_GUID *PackageGuid,
|
||||
IN OUT UINTN *HandleBufferLength,
|
||||
OUT EFI_HII_HANDLE **HandleBuffer
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
||||
ASSERT (HandleBufferLength != NULL);
|
||||
ASSERT (HandleBuffer != NULL);
|
||||
|
||||
*HandleBufferLength = 0;
|
||||
*HandleBuffer = NULL;
|
||||
|
||||
LocateHiiProtocols ();
|
||||
|
||||
Status = mHiiDatabaseProt->ListPackageLists (
|
||||
mHiiDatabaseProt,
|
||||
PackageType,
|
||||
PackageGuid,
|
||||
HandleBufferLength,
|
||||
*HandleBuffer
|
||||
);
|
||||
if (EFI_ERROR (Status) && (Status != EFI_BUFFER_TOO_SMALL)) {
|
||||
//
|
||||
// No packages is registered to UEFI HII Database, just return EFI_SUCCESS.
|
||||
//
|
||||
//
|
||||
return Status;
|
||||
}
|
||||
|
||||
*HandleBuffer = AllocateZeroPool (*HandleBufferLength);
|
||||
|
||||
if (*HandleBuffer == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
|
||||
return mHiiDatabaseProt->ListPackageLists (
|
||||
mHiiDatabaseProt,
|
||||
PackageType,
|
||||
PackageGuid,
|
||||
HandleBufferLength,
|
||||
*HandleBuffer
|
||||
);
|
||||
|
||||
}
|
||||
/**
|
||||
This function check if the Hii Handle is a valid handle registered
|
||||
in the HII database.
|
||||
|
Reference in New Issue
Block a user