summaryrefslogtreecommitdiff
path: root/MdeModulePkg
diff options
context:
space:
mode:
authorlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2008-08-21 07:51:03 +0000
committerlgao4 <lgao4@6f19259b-4bc3-4df7-8a09-765794883524>2008-08-21 07:51:03 +0000
commit2a00326e8ef1250690dc3e5c877d6ba49271935e (patch)
tree21dc0f0c90c0e0c75a1c73e7d98934053d8506fb /MdeModulePkg
parentbb8fb476e11177584a77f0a25daf1ceadcd926c2 (diff)
downloadedk2-2a00326e8ef1250690dc3e5c877d6ba49271935e.zip
edk2-2a00326e8ef1250690dc3e5c877d6ba49271935e.tar.gz
edk2-2a00326e8ef1250690dc3e5c877d6ba49271935e.tar.bz2
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
Diffstat (limited to 'MdeModulePkg')
-rw-r--r--MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c5
-rw-r--r--MdeModulePkg/Core/Pei/FwVol/FwVol.c40
-rw-r--r--MdeModulePkg/Core/Pei/PeiMain.inf2
-rw-r--r--MdeModulePkg/MdeModulePkg.dec22
4 files changed, 48 insertions, 21 deletions
diff --git a/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c b/MdeModulePkg/Core/Pei/Dispatcher/Dispatcher.c
index f016f17..b83f000 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 a841a7e..cf0cfe7 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 7a94f53..35c8b97 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 da75dec..792b7f2 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.