mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-31 01:24:12 +02:00
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:
parent
d00afc4ef8
commit
55a9663bde
@ -402,6 +402,43 @@ HiiLibGetSupportedLanguageNumber (
|
|||||||
)
|
)
|
||||||
;
|
;
|
||||||
|
|
||||||
|
/**
|
||||||
|
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
|
||||||
|
EFIAPI
|
||||||
|
HiiLibListPackageLists (
|
||||||
|
IN UINT8 PackageType,
|
||||||
|
IN CONST EFI_GUID *PackageGuid,
|
||||||
|
IN OUT UINTN *HandleBufferLength,
|
||||||
|
OUT EFI_HII_HANDLE **Handle
|
||||||
|
)
|
||||||
|
;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Convert language code from RFC3066 to ISO639-2.
|
Convert language code from RFC3066 to ISO639-2.
|
||||||
|
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -505,6 +505,130 @@ HiiLibDevicePathToHiiHandle (
|
|||||||
return HiiHandle;
|
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
|
This function check if the Hii Handle is a valid handle registered
|
||||||
in the HII database.
|
in the HII database.
|
||||||
|
@ -36,11 +36,10 @@ GLOBAL_REMOVE_IF_UNREFERENCED CONST UINT16 mFakeConfigHdr[] = L"GUID=00000000000
|
|||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
IfrLibCreatePopUp (
|
IfrLibCreatePopUp2 (
|
||||||
IN UINTN NumberOfLines,
|
IN UINTN NumberOfLines,
|
||||||
OUT EFI_INPUT_KEY *KeyValue,
|
OUT EFI_INPUT_KEY *KeyValue,
|
||||||
IN CHAR16 *String,
|
IN VA_LIST Marker
|
||||||
...
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
@ -54,7 +53,6 @@ IfrLibCreatePopUp (
|
|||||||
UINTN BottomRow;
|
UINTN BottomRow;
|
||||||
UINTN DimensionsWidth;
|
UINTN DimensionsWidth;
|
||||||
UINTN DimensionsHeight;
|
UINTN DimensionsHeight;
|
||||||
VA_LIST Marker;
|
|
||||||
EFI_INPUT_KEY Key;
|
EFI_INPUT_KEY Key;
|
||||||
UINTN LargestString;
|
UINTN LargestString;
|
||||||
CHAR16 *StackString;
|
CHAR16 *StackString;
|
||||||
@ -66,7 +64,10 @@ IfrLibCreatePopUp (
|
|||||||
EFI_EVENT WaitList[2];
|
EFI_EVENT WaitList[2];
|
||||||
UINTN CurrentAttribute;
|
UINTN CurrentAttribute;
|
||||||
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut;
|
EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut;
|
||||||
|
CHAR16 *String;
|
||||||
|
|
||||||
|
String = VA_ARG (Marker, CHAR16 *);
|
||||||
|
|
||||||
if ((KeyValue == NULL) || (String == NULL)) {
|
if ((KeyValue == NULL) || (String == NULL)) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
@ -95,7 +96,6 @@ IfrLibCreatePopUp (
|
|||||||
LargestString = StrLen (String);
|
LargestString = StrLen (String);
|
||||||
StringArray[0] = String;
|
StringArray[0] = String;
|
||||||
|
|
||||||
VA_START (Marker, String);
|
|
||||||
for (Index = 1; Index < NumberOfLines; Index++) {
|
for (Index = 1; Index < NumberOfLines; Index++) {
|
||||||
StackString = VA_ARG (Marker, CHAR16 *);
|
StackString = VA_ARG (Marker, CHAR16 *);
|
||||||
|
|
||||||
@ -109,7 +109,6 @@ IfrLibCreatePopUp (
|
|||||||
LargestString = StringLen;
|
LargestString = StringLen;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
VA_END (Marker);
|
|
||||||
|
|
||||||
if ((LargestString + 2) > DimensionsWidth) {
|
if ((LargestString + 2) > DimensionsWidth) {
|
||||||
LargestString = DimensionsWidth - 2;
|
LargestString = DimensionsWidth - 2;
|
||||||
@ -212,10 +211,44 @@ IfrLibCreatePopUp (
|
|||||||
ConOut->SetAttribute (ConOut, CurrentAttribute);
|
ConOut->SetAttribute (ConOut, CurrentAttribute);
|
||||||
ConOut->EnableCursor (ConOut, TRUE);
|
ConOut->EnableCursor (ConOut, TRUE);
|
||||||
|
|
||||||
|
return Status;}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Draw a dialog and return the selected key.
|
||||||
|
|
||||||
|
@param NumberOfLines The number of lines for the dialog box
|
||||||
|
@param KeyValue The EFI_KEY value returned if HotKey is TRUE..
|
||||||
|
@param String Pointer to the first string in the list
|
||||||
|
@param ... A series of (quantity == NumberOfLines - 1) text
|
||||||
|
strings which will be used to construct the dialog
|
||||||
|
box
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS Displayed dialog and received user interaction
|
||||||
|
@retval EFI_INVALID_PARAMETER One of the parameters was invalid.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EFIAPI
|
||||||
|
IfrLibCreatePopUp (
|
||||||
|
IN UINTN NumberOfLines,
|
||||||
|
OUT EFI_INPUT_KEY *KeyValue,
|
||||||
|
IN CHAR16 *String,
|
||||||
|
...
|
||||||
|
)
|
||||||
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
|
VA_LIST Marker;
|
||||||
|
|
||||||
|
VA_START (Marker, KeyValue);
|
||||||
|
|
||||||
|
Status = IfrLibCreatePopUp2 (NumberOfLines, KeyValue, Marker);
|
||||||
|
|
||||||
|
VA_END (Marker);
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Swap bytes in the buffer. This is a internal function.
|
Swap bytes in the buffer. This is a internal function.
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user