1) Add in IfrParser so that the FrameworkHii->GetDefaultImage can scan UEFI IFR opcodes and get the default value embedded in the IFR.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5119 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
qwang12
2008-04-24 07:08:46 +00:00
parent c7ec71b4ed
commit 59336178ac
20 changed files with 5774 additions and 63 deletions

View File

@@ -86,8 +86,8 @@ LibExportPackageLists (
Size = 0;
PackageListHdr = NULL;
Status = mUefiHiiDatabaseProtocol->ExportPackageLists (
mUefiHiiDatabaseProtocol,
Status = mHiiDatabase->ExportPackageLists (
mHiiDatabase,
UefiHiiHandle,
&Size,
PackageListHdr
@@ -100,8 +100,8 @@ LibExportPackageLists (
if (PackageListHeader == NULL) {
return EFI_OUT_OF_RESOURCES;
} else {
Status = mUefiHiiDatabaseProtocol->ExportPackageLists (
mUefiHiiDatabaseProtocol,
Status = mHiiDatabase->ExportPackageLists (
mHiiDatabase,
UefiHiiHandle,
&Size,
PackageListHdr
@@ -140,8 +140,8 @@ InsertStringPackagesToIfrPackageList (
)
{
EFI_STATUS Status;
Status = mUefiHiiDatabaseProtocol->UpdatePackageList (
mUefiHiiDatabaseProtocol,
Status = mHiiDatabase->UpdatePackageList (
mHiiDatabase,
UefiHiiHandle,
StringPackageListHeader
);
@@ -253,23 +253,21 @@ PrepareUefiPackageListFromFrameworkHiiPackages (
return PackageListHeader;
}
EFI_GUID *
UefiGeneratePackageListGuidId (
IN CONST EFI_HII_PACKAGES * Packages
VOID
GenerateGuidId (
IN CONST EFI_GUID * InGuid,
OUT EFI_GUID * OutGuid
)
{
EFI_GUID *Guid;
UINT64 MonotonicCount;
Guid = AllocateCopyPool (sizeof (EFI_GUID), Packages->GuidId);
CopyMem (OutGuid, InGuid, sizeof (EFI_GUID));
gBS->GetNextMonotonicCount (&MonotonicCount);
//
// Use Monotonic Count as a psedo random number generator.
//
*((UINT64 *) Guid) = *((UINT64 *) Guid) + MonotonicCount;
return Guid;
*((UINT64 *) OutGuid) = *((UINT64 *) OutGuid) + MonotonicCount;
}
EFI_STATUS
@@ -310,6 +308,9 @@ FindAndAddStringPackageToIfrPackageList(
}
CONST EFI_GUID mAGuid =
{ 0x14f95e01, 0xd562, 0x432e, { 0x84, 0x4a, 0x95, 0xa4, 0x39, 0x5, 0x10, 0x7e } };
EFI_STATUS
UefiRegisterPackageList(
EFI_HII_THUNK_PRIVATE_DATA *Private,
@@ -322,20 +323,35 @@ UefiRegisterPackageList(
UINTN IfrPackNum;
EFI_HII_PACKAGE_LIST_HEADER *UefiPackageListHeader;
HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY *HandleMappingEntry;
EFI_GUID *GuidId;
EFI_GUID GuidId;
EFI_HANDLE UefiHiiDriverHandle;
GuidId = NULL;
UefiHiiDriverHandle = NULL;
Status = GetIfrAndStringPackNum (Packages, &IfrPackNum, &StringPackNum);
ASSERT_EFI_ERROR (Status);
//
// Thunk Layer only handle the following combinations of IfrPack, StringPkg and FontPack
//
if (IfrPackNum > 1) {
return EFI_UNSUPPORTED;
}
HandleMappingEntry = AllocateZeroPool (sizeof (*HandleMappingEntry));
ASSERT (HandleMappingEntry != NULL);
HandleMappingEntry->Signature = HII_TRHUNK_HANDLE_MAPPING_DATABASE_ENTRY_SIGNATURE;
HandleMappingEntry->FrameworkHiiHandle = Private->StaticHiiHandle++;
//
// Packages->GuidId may be NULL. In such case, caller of FramworkHii->NewPack is registering
// package with StringPack and IfrPack.
//
if (Packages->GuidId == NULL) {
Packages->GuidId = &GuidId;
GenerateGuidId (&mAGuid, Packages->GuidId);
}
CopyGuid (&HandleMappingEntry->TagGuid, Packages->GuidId);
if ((StringPackNum == 0) && (IfrPackNum != 0)) {
@@ -344,7 +360,7 @@ UefiRegisterPackageList(
// In Framework HII implementation, Packages->GuidId is used as an identifier to associate
// a PackageList with only IFR to a Package list the with String package.
//
GuidId = UefiGeneratePackageListGuidId (Packages);
GenerateGuidId (Packages->GuidId, &GuidId);
}
//
@@ -354,9 +370,9 @@ UefiRegisterPackageList(
if (IfrPackNum != 0) {
InstallDefaultUefiConfigAccessProtocol (Packages, &UefiHiiDriverHandle, HandleMappingEntry);
}
UefiPackageListHeader = PrepareUefiPackageListFromFrameworkHiiPackages (Packages, GuidId);
Status = mUefiHiiDatabaseProtocol->NewPackageList (
mUefiHiiDatabaseProtocol,
UefiPackageListHeader = PrepareUefiPackageListFromFrameworkHiiPackages (Packages, &GuidId);
Status = mHiiDatabase->NewPackageList (
mHiiDatabase,
UefiPackageListHeader,
UefiHiiDriverHandle,
&HandleMappingEntry->UefiHiiHandle
@@ -413,7 +429,6 @@ Done:
}
FreePool (UefiPackageListHeader);
SafeFreePool (GuidId);
return Status;
}
@@ -493,8 +508,8 @@ Returns:
HandleMapEntry = FrameworkHiiHandleToMapDatabaseEntry (Private, Handle);
if (HandleMapEntry->UefiHiiHandle != NULL) {
Status = mUefiHiiDatabaseProtocol->RemovePackageList (
mUefiHiiDatabaseProtocol,
Status = mHiiDatabase->RemovePackageList (
mHiiDatabase,
HandleMapEntry->UefiHiiHandle
);
ASSERT_EFI_ERROR (Status);