EFI_STATUS \r
EFIAPI\r
PeiFvFindNextVolume (\r
- IN CONST EFI_PEI_SERVICES **PeiServices,\r
+ IN CONST EFI_PEI_SERVICES **PeiServices,\r
IN UINTN Instance,\r
IN OUT EFI_PEI_FV_HANDLE *VolumeHandle\r
)\r
{\r
- PEI_CORE_INSTANCE *Private;\r
+ PEI_CORE_INSTANCE *Private;\r
+ UINTN Index;\r
+ BOOLEAN Match;\r
+ EFI_HOB_FIRMWARE_VOLUME *FvHob;\r
\r
Private = PEI_CORE_INSTANCE_FROM_PS_THIS (PeiServices);\r
if (VolumeHandle == NULL) {\r
return EFI_INVALID_PARAMETER;\r
- } \r
+ }\r
+ \r
+ //\r
+ // Handle Framework FvHob and Install FvInfo Ppi for it.\r
+ //\r
+ if (FeaturePcdGet (PcdFrameworkFvHobCompatibilitySupport)) {\r
+ //\r
+ // Loop to search the wanted FirmwareVolume which supports FFS\r
+ //\r
+ FvHob = (EFI_HOB_FIRMWARE_VOLUME *)GetFirstHob (EFI_HOB_TYPE_FV);\r
+ while (FvHob != NULL) {\r
+ for (Index = 0, Match = FALSE; Index < Private->AllFvCount; Index++) {\r
+ if ((EFI_PEI_FV_HANDLE)(UINTN)FvHob->BaseAddress == Private->AllFv[Index]) {\r
+ Match = TRUE;\r
+ break;\r
+ }\r
+ }\r
+ //\r
+ // If Not Found, Install FvInfo Ppi for it.\r
+ //\r
+ if (!Match) {\r
+ PiLibInstallFvInfoPpi (\r
+ NULL,\r
+ (VOID *)(UINTN)FvHob->BaseAddress,\r
+ (UINT32)FvHob->Length,\r
+ NULL,\r
+ NULL\r
+ );\r
+ }\r
+ FvHob = (EFI_HOB_FIRMWARE_VOLUME *)GetNextHob (EFI_HOB_TYPE_FV, (VOID *)((UINTN)FvHob + FvHob->Header.HobLength)); \r
+ }\r
+ }\r
\r
if (Instance >= Private->AllFvCount) {\r
VolumeHandle = NULL;\r