From 2a00326e8ef1250690dc3e5c877d6ba49271935e Mon Sep 17 00:00:00 2001 From: lgao4 Date: Thu, 21 Aug 2008 07:51:03 +0000 Subject: [PATCH] Add compatibility logic to handle framework fvhob and install FvInfo ppi. And remove the unused Pcd from MdeModulePkg.dec. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5704 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c | 5 ++- MdeModulePkg/Core/Pei/FwVol/FwVol.c | 40 +++++++++++++++++-- MdeModulePkg/Core/Pei/PeiMain.inf | 2 + MdeModulePkg/MdeModulePkg.dec | 22 +++------- 4 files changed, 48 insertions(+), 21 deletions(-) diff --git a/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c b/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c index f016f171a4..b83f0006e4 100644 --- a/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c +++ b/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c @@ -347,7 +347,10 @@ PeiDispatcher ( for (FvCount = Private->CurrentPeimFvCount; FvCount < Private->FvCount; FvCount++) { Private->CurrentPeimFvCount = FvCount; - VolumeHandle = Private->Fv[FvCount].FvHeader; + // + // Get this Fv Handle by PeiService FvFindNextVolume. + // + PeiFvFindNextVolume (PeiServices, FvCount, &VolumeHandle); if (Private->CurrentPeimCount == 0) { // diff --git a/MdeModulePkg/Core/Pei/FwVol/FwVol.c b/MdeModulePkg/Core/Pei/FwVol/FwVol.c index a841a7eb24..cf0cfe78c5 100644 --- a/MdeModulePkg/Core/Pei/FwVol/FwVol.c +++ b/MdeModulePkg/Core/Pei/FwVol/FwVol.c @@ -612,17 +612,51 @@ PeiFfsFindNextFile ( EFI_STATUS EFIAPI PeiFvFindNextVolume ( - IN CONST EFI_PEI_SERVICES **PeiServices, + IN CONST EFI_PEI_SERVICES **PeiServices, IN UINTN Instance, IN OUT EFI_PEI_FV_HANDLE *VolumeHandle ) { - PEI_CORE_INSTANCE *Private; + PEI_CORE_INSTANCE *Private; + UINTN Index; + BOOLEAN Match; + EFI_HOB_FIRMWARE_VOLUME *FvHob; Private = PEI_CORE_INSTANCE_FROM_PS_THIS (PeiServices); if (VolumeHandle == NULL) { return EFI_INVALID_PARAMETER; - } + } + + // + // Handle Framework FvHob and Install FvInfo Ppi for it. + // + if (FeaturePcdGet (PcdFrameworkFvHobCompatibilitySupport)) { + // + // Loop to search the wanted FirmwareVolume which supports FFS + // + FvHob = (EFI_HOB_FIRMWARE_VOLUME *)GetFirstHob (EFI_HOB_TYPE_FV); + while (FvHob != NULL) { + for (Index = 0, Match = FALSE; Index < Private->AllFvCount; Index++) { + if ((EFI_PEI_FV_HANDLE)(UINTN)FvHob->BaseAddress == Private->AllFv[Index]) { + Match = TRUE; + break; + } + } + // + // If Not Found, Install FvInfo Ppi for it. + // + if (!Match) { + PiLibInstallFvInfoPpi ( + NULL, + (VOID *)(UINTN)FvHob->BaseAddress, + (UINT32)FvHob->Length, + NULL, + NULL + ); + } + FvHob = (EFI_HOB_FIRMWARE_VOLUME *)GetNextHob (EFI_HOB_TYPE_FV, (VOID *)((UINTN)FvHob + FvHob->Header.HobLength)); + } + } if (Instance >= Private->AllFvCount) { VolumeHandle = NULL; diff --git a/MdeModulePkg/Core/Pei/PeiMain.inf b/MdeModulePkg/Core/Pei/PeiMain.inf index 7a94f53184..35c8b973c0 100644 --- a/MdeModulePkg/Core/Pei/PeiMain.inf +++ b/MdeModulePkg/Core/Pei/PeiMain.inf @@ -95,3 +95,5 @@ [FeaturePcd.common] gEfiMdeModulePkgTokenSpaceGuid.PcdPeiCoreImageLoaderSearchTeSectionFirst + gEfiMdeModulePkgTokenSpaceGuid.PcdFrameworkFvHobCompatibilitySupport + \ No newline at end of file diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec index da75dec76b..792b7f29b5 100644 --- a/MdeModulePkg/MdeModulePkg.dec +++ b/MdeModulePkg/MdeModulePkg.dec @@ -236,19 +236,7 @@ ## This feature flag can be used to enable or disable the PCD service PEIM to handle DynamicEX PCD. gEfiMdeModulePkgTokenSpaceGuid.PcdPeiPcdDatabaseExEnabled|TRUE|BOOLEAN|0x00010033 - - ## If this feature is enabled, then the DXE IPL must support decompressing files compressed with the EFI Compression algorithm. - # This feature flag is deprecated. - gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSupportEfiDecompress|TRUE|BOOLEAN|0x00010034 - - ## If this feature is enabled, then the DXE IPL must support decompressing files compressed with the Tiano Compression algorithm. - # This feature flag is deprecated. - gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSupportTianoDecompress|TRUE|BOOLEAN|0x00010035 - - ## If this feature is enabled, then the DXE IPL must support decompressing files compressed with the Custom Compression algorithm. - # This feature flag is deprecated. - gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplSupportCustomDecompress|TRUE|BOOLEAN|0x00010036 - + ## If TRUE, then the Device Path To Text Protocol should be produced by the platform. # It can be disabled to save size. gEfiMdeModulePkgTokenSpaceGuid.PcdDevicePathSupportDevicePathToText|TRUE|BOOLEAN|0x00010037 @@ -256,10 +244,7 @@ ## If TRUE, then the Device Path From Text Protocol should be produced by the platform. # It can be disabled to save size. gEfiMdeModulePkgTokenSpaceGuid.PcdDevicePathSupportDevicePathFromText|TRUE|BOOLEAN|0x00010038 - - ## If this feature is enabled, DXE IPL will build a series of HOBs to share code with DXE Core. - gEfiMdeModulePkgTokenSpaceGuid.PcdDxeIplBuildShareCodeHobs|FALSE|BOOLEAN|0x0001003c - + ## If this PCD is set as TRUE, the code specific to NT emulator will be endabled. gEfiMdeModulePkgTokenSpaceGuid.PcdNtEmulatorEnable|FALSE|BOOLEAN|0x0001003e @@ -303,6 +288,9 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdDisableDefaultKeyboardLayoutInUsbKbDriver|FALSE|BOOLEAN|0x00010200 gEfiMdeModulePkgTokenSpaceGuid.PcdFrameworkHiiCompatibilitySupport|TRUE|BOOLEAN|0x00012008 + + ## IF TRUE, the PeiCore will handle the framework FvHob and install FvInfo PPI for it. + gEfiMdeModulePkgTokenSpaceGuid.PcdFrameworkFvHobCompatibilitySupport|FALSE|BOOLEAN|0x00012009 [PcdsFixedAtBuild.common] ## Dynamic type PCD can be registered callback function for Pcd setting action. -- 2.39.2