mirror of https://github.com/acidanthera/audk.git
Fix K8 issues in HiiDataBase
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8325 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
d7dfd027aa
commit
8567300ae4
|
@ -921,16 +921,17 @@ InternalHiiGetValueOfNumber (
|
|||
}
|
||||
|
||||
/**
|
||||
This function shares the same logic to parse ConfigAltResp string
|
||||
for setting default value and validating current setting.
|
||||
This internal function parses IFR data to validate current setting.
|
||||
|
||||
@param ConfigResp
|
||||
@param HiiPackageList
|
||||
@param PackageListLength
|
||||
@param VarGuid
|
||||
@param VarName
|
||||
@param ConfigResp ConfigResp string contains the current setting.
|
||||
@param HiiPackageList Point to Hii package list.
|
||||
@param PackageListLength The length of the pacakge.
|
||||
@param VarGuid Guid of the buffer storage.
|
||||
@param VarName Name of the buffer storage.
|
||||
|
||||
@retval EFI_SUCCESS
|
||||
@retval EFI_SUCCESS The current setting is valid.
|
||||
@retval EFI_OUT_OF_RESOURCES The memory is not enough.
|
||||
@retval EFI_INVALID_PARAMETER The config string or the Hii package is invalid.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
|
@ -1247,6 +1248,13 @@ InternalHiiValidateCurrentSetting (
|
|||
// Check whether current value is the one of option.
|
||||
//
|
||||
|
||||
//
|
||||
// OneOf question is not in IFR Form. This IFR form is not valid.
|
||||
//
|
||||
if (IfrVarStore == NULL) {
|
||||
Status = EFI_INVALID_PARAMETER;
|
||||
goto Done;
|
||||
}
|
||||
//
|
||||
// Check whether this question is for the requested varstore.
|
||||
//
|
||||
|
@ -1298,6 +1306,13 @@ InternalHiiValidateCurrentSetting (
|
|||
// Check the current value is in the numeric range.
|
||||
//
|
||||
|
||||
//
|
||||
// Numeric question is not in IFR Form. This IFR form is not valid.
|
||||
//
|
||||
if (IfrVarStore == NULL) {
|
||||
Status = EFI_INVALID_PARAMETER;
|
||||
goto Done;
|
||||
}
|
||||
//
|
||||
// Check whether this question is for the requested varstore.
|
||||
//
|
||||
|
@ -1381,6 +1396,14 @@ InternalHiiValidateCurrentSetting (
|
|||
// Check value is BOOLEAN type, only 0 and 1 is valid.
|
||||
//
|
||||
|
||||
//
|
||||
// CheckBox question is not in IFR Form. This IFR form is not valid.
|
||||
//
|
||||
if (IfrVarStore == NULL) {
|
||||
Status = EFI_INVALID_PARAMETER;
|
||||
goto Done;
|
||||
}
|
||||
|
||||
//
|
||||
// Check whether this question is for the requested varstore.
|
||||
//
|
||||
|
@ -1428,6 +1451,14 @@ InternalHiiValidateCurrentSetting (
|
|||
// Check current string length is less than maxsize
|
||||
//
|
||||
|
||||
//
|
||||
// CheckBox question is not in IFR Form. This IFR form is not valid.
|
||||
//
|
||||
if (IfrVarStore == NULL) {
|
||||
Status = EFI_INVALID_PARAMETER;
|
||||
goto Done;
|
||||
}
|
||||
|
||||
//
|
||||
// Check whether this question is for the requested varstore.
|
||||
//
|
||||
|
@ -1558,8 +1589,8 @@ Done:
|
|||
}
|
||||
|
||||
/**
|
||||
This function shares the same logic to parse ConfigAltResp string
|
||||
for setting default value and validating current setting.
|
||||
This function parses the input ConfigRequest string and its matched IFR code
|
||||
string for setting default value and validating current setting.
|
||||
|
||||
1. For setting default action, Reset the default value specified by DefaultId
|
||||
to the driver configuration got by Request string.
|
||||
|
|
|
@ -577,6 +577,10 @@ MergeDefaultString (
|
|||
SizeAltCfgResp + StrSize (StringPtrDefault),
|
||||
(VOID *) (*AltCfgResp)
|
||||
);
|
||||
if (*AltCfgResp == NULL) {
|
||||
FreePool (AltConfigHdr);
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
StrCat (*AltCfgResp, StringPtrDefault);
|
||||
break;
|
||||
} else {
|
||||
|
@ -599,6 +603,7 @@ MergeDefaultString (
|
|||
StringPtrDefault = StrStr (StringPtrDefault + 1, AltConfigHdr);
|
||||
}
|
||||
|
||||
FreePool (AltConfigHdr);
|
||||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
|
@ -796,7 +801,7 @@ ParseIfrData (
|
|||
IN EFI_STRING ConfigHdr,
|
||||
IN IFR_BLOCK_DATA *RequestBlockArray,
|
||||
IN OUT IFR_VARSTORAGE_DATA *VarStorageData,
|
||||
OUT IFR_DEFAULT_DATA **PIfrDefaultIdArray
|
||||
OUT IFR_DEFAULT_DATA *DefaultIdArray
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
|
@ -810,7 +815,6 @@ ParseIfrData (
|
|||
EFI_IFR_CHECKBOX *IfrCheckBox;
|
||||
EFI_IFR_PASSWORD *IfrPassword;
|
||||
EFI_IFR_STRING *IfrString;
|
||||
IFR_DEFAULT_DATA *DefaultIdArray;
|
||||
IFR_DEFAULT_DATA *DefaultData;
|
||||
IFR_BLOCK_DATA *BlockData;
|
||||
CHAR16 *VarStoreName;
|
||||
|
@ -823,9 +827,6 @@ ParseIfrData (
|
|||
EFI_STRING TempStr;
|
||||
UINTN LengthString;
|
||||
|
||||
//
|
||||
// Initialize DefaultIdArray to store the map between DeaultId and DefaultName
|
||||
//
|
||||
LengthString = 0;
|
||||
Status = EFI_SUCCESS;
|
||||
GuidStr = NULL;
|
||||
|
@ -833,11 +834,6 @@ ParseIfrData (
|
|||
TempStr = NULL;
|
||||
BlockData = NULL;
|
||||
DefaultData = NULL;
|
||||
DefaultIdArray = (IFR_DEFAULT_DATA *) AllocateZeroPool (sizeof (IFR_DEFAULT_DATA));
|
||||
if (DefaultIdArray == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
}
|
||||
InitializeListHead (&DefaultIdArray->Entry);
|
||||
|
||||
//
|
||||
// Go through the form package to parse OpCode one by one.
|
||||
|
@ -935,6 +931,13 @@ ParseIfrData (
|
|||
// Numeric and OneOf has the same opcode structure.
|
||||
//
|
||||
|
||||
//
|
||||
// Numeric and OneOf question is not in IFR Form. This IFR form is not valid.
|
||||
//
|
||||
if (VarStorageData->Size == 0) {
|
||||
Status = EFI_INVALID_PARAMETER;
|
||||
goto Done;
|
||||
}
|
||||
//
|
||||
// Check whether this question is for the requested varstore.
|
||||
//
|
||||
|
@ -993,6 +996,13 @@ ParseIfrData (
|
|||
// no default value and default id, how to define its default value?
|
||||
//
|
||||
|
||||
//
|
||||
// OrderedList question is not in IFR Form. This IFR form is not valid.
|
||||
//
|
||||
if (VarStorageData->Size == 0) {
|
||||
Status = EFI_INVALID_PARAMETER;
|
||||
goto Done;
|
||||
}
|
||||
//
|
||||
// Check whether this question is for the requested varstore.
|
||||
//
|
||||
|
@ -1056,6 +1066,13 @@ ParseIfrData (
|
|||
// default id by DeaultOption DefaultId can override CheckBox Flags and Default value.
|
||||
//
|
||||
|
||||
//
|
||||
// CheckBox question is not in IFR Form. This IFR form is not valid.
|
||||
//
|
||||
if (VarStorageData->Size == 0) {
|
||||
Status = EFI_INVALID_PARAMETER;
|
||||
goto Done;
|
||||
}
|
||||
//
|
||||
// Check whether this question is for the requested varstore.
|
||||
//
|
||||
|
@ -1170,6 +1187,13 @@ ParseIfrData (
|
|||
// no default value, only block array
|
||||
//
|
||||
|
||||
//
|
||||
// String question is not in IFR Form. This IFR form is not valid.
|
||||
//
|
||||
if (VarStorageData->Size == 0) {
|
||||
Status = EFI_INVALID_PARAMETER;
|
||||
goto Done;
|
||||
}
|
||||
//
|
||||
// Check whether this question is for the requested varstore.
|
||||
//
|
||||
|
@ -1234,6 +1258,13 @@ ParseIfrData (
|
|||
// no default value, only block array
|
||||
//
|
||||
|
||||
//
|
||||
// Password question is not in IFR Form. This IFR form is not valid.
|
||||
//
|
||||
if (VarStorageData->Size == 0) {
|
||||
Status = EFI_INVALID_PARAMETER;
|
||||
goto Done;
|
||||
}
|
||||
//
|
||||
// Check whether this question is for the requested varstore.
|
||||
//
|
||||
|
@ -1424,7 +1455,7 @@ ParseIfrData (
|
|||
break;
|
||||
case EFI_IFR_END_OP:
|
||||
//
|
||||
// End Opcode is for Var.
|
||||
// End Opcode is for Var question.
|
||||
//
|
||||
if (BlockData != NULL && BlockData->Scope > 0) {
|
||||
BlockData->Scope--;
|
||||
|
@ -1441,11 +1472,6 @@ ParseIfrData (
|
|||
}
|
||||
|
||||
Done:
|
||||
//
|
||||
// Set the defualt ID array.
|
||||
//
|
||||
*PIfrDefaultIdArray = DefaultIdArray;
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
@ -1456,7 +1482,7 @@ Done:
|
|||
When Request points to NULL string, the request string and default value string
|
||||
for each varstore in form package will return.
|
||||
|
||||
@param HiiHandle Hii Handle which Hii Packages are registered.
|
||||
@param DataBaseRecord The DataBaseRecord instance contains the found Hii handle and package.
|
||||
@param DevicePath Device Path which Hii Config Access Protocol is registered.
|
||||
@param Request Pointer to a null-terminated Unicode string in
|
||||
<ConfigRequest> format. When it doesn't contain
|
||||
|
@ -1486,24 +1512,22 @@ Done:
|
|||
EFI_STATUS
|
||||
EFIAPI
|
||||
GetFullStringFromHiiFormPackages (
|
||||
IN EFI_HII_HANDLE HiiHandle,
|
||||
IN HII_DATABASE_RECORD *DataBaseRecord,
|
||||
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||||
IN OUT EFI_STRING *Request,
|
||||
IN OUT EFI_STRING *AltCfgResp
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
EFI_HII_PACKAGE_LIST_HEADER *HiiPackageList;
|
||||
UINT32 PackageListLength;
|
||||
UINTN BufferSize;
|
||||
UINT8 *HiiFormPackage;
|
||||
UINTN PackageSize;
|
||||
UINTN ResultSize;
|
||||
IFR_BLOCK_DATA *RequestBlockArray;
|
||||
IFR_BLOCK_DATA *BlockData;
|
||||
IFR_BLOCK_DATA *NextBlockData;
|
||||
IFR_DEFAULT_DATA *DefaultValueData;
|
||||
IFR_DEFAULT_DATA *DefaultId;
|
||||
IFR_DEFAULT_DATA *DefaultIdArray;
|
||||
EFI_HII_PACKAGE_HEADER PacakgeHeader;
|
||||
UINT32 PackageOffset;
|
||||
IFR_VARSTORAGE_DATA *VarStorageData;
|
||||
EFI_STRING DefaultAltCfgResp;
|
||||
EFI_STRING FullConfigRequest;
|
||||
|
@ -1524,63 +1548,60 @@ GetFullStringFromHiiFormPackages (
|
|||
// Initialize the local variables.
|
||||
//
|
||||
RequestBlockArray = NULL;
|
||||
DefaultIdArray = NULL;
|
||||
VarStorageData = NULL;
|
||||
DefaultAltCfgResp = NULL;
|
||||
FullConfigRequest = NULL;
|
||||
ConfigHdr = NULL;
|
||||
DefaultIdArray = NULL;
|
||||
GuidStr = NULL;
|
||||
NameStr = NULL;
|
||||
PathStr = NULL;
|
||||
HiiFormPackage = NULL;
|
||||
ResultSize = 0;
|
||||
PackageSize = 0;
|
||||
|
||||
//
|
||||
// 1. Get HiiPackage by HiiHandle
|
||||
// 0. Get Hii Form Package by HiiHandle
|
||||
//
|
||||
BufferSize = 0;
|
||||
HiiPackageList = NULL;
|
||||
Status = HiiExportPackageLists (&mPrivate.HiiDatabase, HiiHandle, &BufferSize, HiiPackageList);
|
||||
|
||||
//
|
||||
// The return status should always be EFI_BUFFER_TOO_SMALL as input buffer's size is 0.
|
||||
//
|
||||
if (Status != EFI_BUFFER_TOO_SMALL) {
|
||||
Status = ExportFormPackages (
|
||||
&mPrivate,
|
||||
DataBaseRecord->Handle,
|
||||
DataBaseRecord->PackageList,
|
||||
0,
|
||||
PackageSize,
|
||||
HiiFormPackage,
|
||||
&ResultSize
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
return Status;
|
||||
}
|
||||
|
||||
HiiPackageList = AllocatePool (BufferSize);
|
||||
if (HiiPackageList == NULL) {
|
||||
return EFI_OUT_OF_RESOURCES;
|
||||
HiiFormPackage = AllocatePool (ResultSize);
|
||||
if (HiiFormPackage == NULL) {
|
||||
Status = EFI_OUT_OF_RESOURCES;
|
||||
goto Done;
|
||||
}
|
||||
|
||||
//
|
||||
// Get PackageList on HiiHandle
|
||||
// Get HiiFormPackage by HiiHandle
|
||||
//
|
||||
Status = HiiExportPackageLists (&mPrivate.HiiDatabase, HiiHandle, &BufferSize, HiiPackageList);
|
||||
PackageSize = ResultSize;
|
||||
ResultSize = 0;
|
||||
Status = ExportFormPackages (
|
||||
&mPrivate,
|
||||
DataBaseRecord->Handle,
|
||||
DataBaseRecord->PackageList,
|
||||
0,
|
||||
PackageSize,
|
||||
HiiFormPackage,
|
||||
&ResultSize
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Done;
|
||||
}
|
||||
|
||||
//
|
||||
// 2. Parse FormPackage to get BlockArray and DefaultId Array for the request BlockArray.
|
||||
// 1) Request is NULL.
|
||||
// 2) Request is not NULL. And it doesn't contain any BlockArray.
|
||||
// 3) Request is not NULL. And it containts BlockArray.
|
||||
//
|
||||
|
||||
//
|
||||
// Initialize VarStorageData to store the var store Block and Default value information.
|
||||
//
|
||||
VarStorageData = (IFR_VARSTORAGE_DATA *) AllocateZeroPool (sizeof (IFR_VARSTORAGE_DATA));
|
||||
if (VarStorageData == NULL) {
|
||||
Status = EFI_OUT_OF_RESOURCES;
|
||||
goto Done;
|
||||
}
|
||||
|
||||
InitializeListHead (&VarStorageData->Entry);
|
||||
InitializeListHead (&VarStorageData->BlockEntry);
|
||||
|
||||
//
|
||||
// Gte the request block array by Request String
|
||||
// 1. Get the request block array by Request String when Request string containts the block array.
|
||||
//
|
||||
StringPtr = NULL;
|
||||
if (*Request != NULL) {
|
||||
|
@ -1695,39 +1716,36 @@ GetFullStringFromHiiFormPackages (
|
|||
}
|
||||
|
||||
//
|
||||
// Get the form package
|
||||
// 2. Parse FormPackage to get BlockArray and DefaultId Array for the request BlockArray.
|
||||
//
|
||||
PackageOffset = sizeof (EFI_HII_PACKAGE_LIST_HEADER);
|
||||
PackageListLength = ReadUnaligned32 (&HiiPackageList->PackageLength);
|
||||
while (PackageOffset < PackageListLength) {
|
||||
CopyMem (&PacakgeHeader, (UINT8 *) HiiPackageList + PackageOffset, sizeof (PacakgeHeader));
|
||||
|
||||
if (PacakgeHeader.Type == EFI_HII_PACKAGE_FORMS) {
|
||||
//
|
||||
// Reset VarStorageData
|
||||
//
|
||||
VarStorageData->Size = 0;
|
||||
VarStorageData->VarStoreId = 0;
|
||||
if (VarStorageData->Name != NULL) {
|
||||
FreePool (VarStorageData->Name);
|
||||
VarStorageData->Name = NULL;
|
||||
}
|
||||
//
|
||||
// Initialize DefaultIdArray to store the map between DeaultId and DefaultName
|
||||
//
|
||||
DefaultIdArray = (IFR_DEFAULT_DATA *) AllocateZeroPool (sizeof (IFR_DEFAULT_DATA));
|
||||
if (DefaultIdArray == NULL) {
|
||||
Status = EFI_OUT_OF_RESOURCES;
|
||||
goto Done;
|
||||
}
|
||||
InitializeListHead (&DefaultIdArray->Entry);
|
||||
|
||||
//
|
||||
// Parse the opcode in form package
|
||||
//
|
||||
Status = ParseIfrData ((UINT8 *) HiiPackageList + PackageOffset, PacakgeHeader.Length, *Request, RequestBlockArray, VarStorageData, &DefaultIdArray);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Done;
|
||||
}
|
||||
//
|
||||
// Initialize VarStorageData to store the var store Block and Default value information.
|
||||
//
|
||||
VarStorageData = (IFR_VARSTORAGE_DATA *) AllocateZeroPool (sizeof (IFR_VARSTORAGE_DATA));
|
||||
if (VarStorageData == NULL) {
|
||||
Status = EFI_OUT_OF_RESOURCES;
|
||||
goto Done;
|
||||
}
|
||||
InitializeListHead (&VarStorageData->Entry);
|
||||
InitializeListHead (&VarStorageData->BlockEntry);
|
||||
|
||||
//
|
||||
// Only one form is in a pacakge list.
|
||||
//
|
||||
break;
|
||||
}
|
||||
|
||||
PackageOffset += PacakgeHeader.Length;
|
||||
//
|
||||
// Parse the opcode in form pacakge to get the default setting.
|
||||
//
|
||||
Status = ParseIfrData (HiiFormPackage, (UINT32) PackageSize, *Request, RequestBlockArray, VarStorageData, DefaultIdArray);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Done;
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -2011,8 +2029,8 @@ Done:
|
|||
//
|
||||
// Free Pacakge data
|
||||
//
|
||||
if (HiiPackageList != NULL) {
|
||||
FreePool (HiiPackageList);
|
||||
if (HiiFormPackage != NULL) {
|
||||
FreePool (HiiFormPackage);
|
||||
}
|
||||
|
||||
return Status;
|
||||
|
@ -2158,6 +2176,7 @@ HiiConfigRoutingExtractConfig (
|
|||
//
|
||||
DriverHandle = NULL;
|
||||
HiiHandle = NULL;
|
||||
Database = NULL;
|
||||
DevicePathLength = GetDevicePathSize (DevicePath);
|
||||
for (Link = Private->DatabaseList.ForwardLink;
|
||||
Link != &Private->DatabaseList;
|
||||
|
@ -2208,7 +2227,7 @@ HiiConfigRoutingExtractConfig (
|
|||
//
|
||||
// Get the full request string from IFR when HiiPackage is registered to HiiHandle
|
||||
//
|
||||
Status = GetFullStringFromHiiFormPackages (HiiHandle, DevicePath, &ConfigRequest, &DefaultResults);
|
||||
Status = GetFullStringFromHiiFormPackages (Database, DevicePath, &ConfigRequest, &DefaultResults);
|
||||
if (EFI_ERROR (Status)) {
|
||||
goto Done;
|
||||
}
|
||||
|
@ -2257,7 +2276,7 @@ HiiConfigRoutingExtractConfig (
|
|||
//
|
||||
if (HiiHandle != NULL) {
|
||||
if (DefaultResults == NULL) {
|
||||
Status = GetFullStringFromHiiFormPackages (HiiHandle, DevicePath, &ConfigRequest, &AccessResults);
|
||||
Status = GetFullStringFromHiiFormPackages (Database, DevicePath, &ConfigRequest, &AccessResults);
|
||||
} else {
|
||||
Status = MergeDefaultString (&AccessResults, DefaultResults);
|
||||
}
|
||||
|
@ -2425,6 +2444,7 @@ HiiConfigRoutingExportConfig (
|
|||
HiiHandle = NULL;
|
||||
ConfigRequest = NULL;
|
||||
DefaultResults = NULL;
|
||||
Database = NULL;
|
||||
DevicePath = DevicePathFromHandle (ConfigAccessHandles[Index]);
|
||||
DevicePathLength = GetDevicePathSize (DevicePath);
|
||||
if (DevicePath != NULL) {
|
||||
|
@ -2452,7 +2472,7 @@ HiiConfigRoutingExportConfig (
|
|||
// Update AccessResults by getting default setting from IFR when HiiPackage is registered to HiiHandle
|
||||
//
|
||||
if (HiiHandle != NULL && DevicePath != NULL) {
|
||||
Status = GetFullStringFromHiiFormPackages (HiiHandle, DevicePath, &ConfigRequest, &DefaultResults);
|
||||
Status = GetFullStringFromHiiFormPackages (Database, DevicePath, &ConfigRequest, &DefaultResults);
|
||||
}
|
||||
//
|
||||
// Can't parse IFR data to get the request string and default string.
|
||||
|
@ -2473,8 +2493,10 @@ HiiConfigRoutingExportConfig (
|
|||
// Merge the default sting from IFR code into the got setting from driver.
|
||||
//
|
||||
if (DefaultResults != NULL) {
|
||||
MergeDefaultString (&AccessResults, DefaultResults);
|
||||
Status = MergeDefaultString (&AccessResults, DefaultResults);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
FreePool (DefaultResults);
|
||||
DefaultResults = NULL;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
|
@ -484,6 +484,34 @@ FindGlyphBlock (
|
|||
OUT UINTN *GlyphBufferLen OPTIONAL
|
||||
);
|
||||
|
||||
/**
|
||||
This function exports Form packages to a buffer.
|
||||
This is a internal function.
|
||||
|
||||
@param Private Hii database private structure.
|
||||
@param Handle Identification of a package list.
|
||||
@param PackageList Pointer to a package list which will be exported.
|
||||
@param UsedSize The length of buffer be used.
|
||||
@param BufferSize Length of the Buffer.
|
||||
@param Buffer Allocated space for storing exported data.
|
||||
@param ResultSize The size of the already exported content of this
|
||||
package list.
|
||||
|
||||
@retval EFI_SUCCESS Form Packages are exported successfully.
|
||||
@retval EFI_INVALID_PARAMETER Any input parameter is invalid.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
ExportFormPackages (
|
||||
IN HII_DATABASE_PRIVATE_DATA *Private,
|
||||
IN EFI_HII_HANDLE Handle,
|
||||
IN HII_DATABASE_PACKAGE_LIST_INSTANCE *PackageList,
|
||||
IN UINTN UsedSize,
|
||||
IN UINTN BufferSize,
|
||||
IN OUT VOID *Buffer,
|
||||
IN OUT UINTN *ResultSize
|
||||
);
|
||||
|
||||
//
|
||||
// EFI_HII_FONT_PROTOCOL protocol interfaces
|
||||
//
|
||||
|
|
Loading…
Reference in New Issue