Apriori file in one FV.\r
\r
\r
- @param Private - Pointer to the private data passed in from caller\r
- @param VolumeHandle - Fv handle.\r
+ @param Private Pointer to the private data passed in from caller\r
+ @param CoreFileHandle The instance of PEI_CORE_FV_HANDLE.\r
\r
**/\r
VOID\r
DiscoverPeimsAndOrderWithApriori (\r
IN PEI_CORE_INSTANCE *Private,\r
- IN EFI_PEI_FV_HANDLE VolumeHandle\r
+ IN PEI_CORE_FV_HANDLE *CoreFileHandle\r
)\r
{\r
EFI_STATUS Status;\r
EFI_GUID *Guid;\r
EFI_PEI_FV_HANDLE TempFileHandles[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)];\r
EFI_GUID FileGuid[FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv)];\r
-\r
+ EFI_PEI_FIRMWARE_VOLUME_PPI *FvPpi;\r
+ EFI_FV_FILE_INFO FileInfo;\r
+ \r
+ FvPpi = CoreFileHandle->FvPpi;\r
+ \r
//\r
// Walk the FV and find all the PEIMs and the Apriori file.\r
//\r
// Go ahead to scan this Fv, and cache FileHandles within it.\r
//\r
for (PeimCount = 0; PeimCount < FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv); PeimCount++) {\r
- Status = PeiFindFileEx (\r
- VolumeHandle,\r
- NULL,\r
- PEI_CORE_INTERNAL_FFS_FILE_DISPATCH_TYPE,\r
- &FileHandle,\r
- &AprioriFileHandle\r
- );\r
+ Status = FvPpi->FindFileByType (FvPpi, PEI_CORE_INTERNAL_FFS_FILE_DISPATCH_TYPE, CoreFileHandle->FvHandle, &FileHandle);\r
if (Status != EFI_SUCCESS) {\r
break;\r
}\r
//\r
ASSERT (PeimCount < FixedPcdGet32 (PcdPeiCoreMaxPeimPerFv));\r
\r
+ //\r
+ // Get Apriori File handle\r
+ //\r
Private->AprioriCount = 0;\r
- if (AprioriFileHandle != NULL) {\r
+ Status = FvPpi->FindFileByName (FvPpi, &gPeiAprioriFileNameGuid, &CoreFileHandle->FvHandle, &AprioriFileHandle);\r
+ if (!EFI_ERROR(Status) && AprioriFileHandle != NULL) {\r
//\r
// Read the Apriori file\r
//\r
- Status = PeiServicesFfsFindSectionData (EFI_SECTION_RAW, AprioriFileHandle, (VOID **) &Apriori);\r
+ Status = FvPpi->FindSectionByType (FvPpi, EFI_SECTION_RAW, AprioriFileHandle, (VOID **) &Apriori);\r
if (!EFI_ERROR (Status)) {\r
//\r
// Calculate the number of PEIMs in the A Priori list\r
//\r
- Private->AprioriCount = *(UINT32 *)(((EFI_FFS_FILE_HEADER *)AprioriFileHandle)->Size) & 0x00FFFFFF;\r
+ Status = FvPpi->GetFileInfo (FvPpi, AprioriFileHandle, &FileInfo);\r
+ ASSERT_EFI_ERROR (Status);\r
+ Private->AprioriCount = FileInfo.BufferSize & 0x00FFFFFF;\r
Private->AprioriCount -= sizeof (EFI_FFS_FILE_HEADER) - sizeof (EFI_COMMON_SECTION_HEADER);\r
Private->AprioriCount /= sizeof (EFI_GUID);\r
\r
// Make an array of file name guids that matches the FileHandle array so we can convert\r
// quickly from file name to file handle\r
//\r
- CopyMem (&FileGuid[Index], &((EFI_FFS_FILE_HEADER *)Private->CurrentFvFileHandles[Index])->Name,sizeof(EFI_GUID));\r
+ Status = FvPpi->GetFileInfo (FvPpi, Private->CurrentFvFileHandles[Index], &FileInfo);\r
+ CopyMem (&FileGuid[Index], &FileInfo.FileName, sizeof(EFI_GUID));\r
}\r
\r
//\r
//\r
// Find the PEI Core in the BFV\r
//\r
- Status = PeiFindFileEx (\r
- (EFI_PEI_FV_HANDLE)PrivateInMem->Fv[0].FvHeader,\r
- NULL,\r
- EFI_FV_FILETYPE_PEI_CORE,\r
- &PeiCoreFileHandle,\r
- NULL\r
- );\r
+ Status = PrivateInMem->Fv[0].FvPpi->FindFileByType (\r
+ PrivateInMem->Fv[0].FvPpi,\r
+ EFI_FV_FILETYPE_PEI_CORE,\r
+ PrivateInMem->Fv[0].FvHandle,\r
+ &PeiCoreFileHandle\r
+ );\r
ASSERT_EFI_ERROR (Status);\r
\r
//\r
UINT32 Index1;\r
UINT32 Index2;\r
CONST EFI_PEI_SERVICES **PeiServices;\r
- EFI_PEI_FV_HANDLE VolumeHandle;\r
EFI_PEI_FILE_HANDLE PeimFileHandle;\r
UINTN FvCount;\r
UINTN PeimCount;\r
EFI_FV_FILE_INFO FvFileInfo;\r
UINTN OldCheckingTop;\r
UINTN OldCheckingBottom;\r
-\r
+ PEI_CORE_FV_HANDLE *CoreFvHandle;\r
\r
PeiServices = (CONST EFI_PEI_SERVICES **) &Private->PS;\r
PeimEntryPoint = NULL;\r
}\r
\r
for (FvCount = Private->CurrentPeimFvCount; FvCount < Private->FvCount; FvCount++) {\r
- Private->CurrentPeimFvCount = FvCount;\r
+ CoreFvHandle = FindNextCoreFvHandle (Private, FvCount);\r
+ ASSERT (CoreFvHandle != NULL);\r
+ \r
//\r
- // Get this Fv Handle by PeiService FvFindNextVolume.\r
+ // If the FV has corresponding EFI_PEI_FIRMWARE_VOLUME_PPI instance, then dispatch it.\r
//\r
- PeiFvFindNextVolume (PeiServices, FvCount, &VolumeHandle);\r
+ if (CoreFvHandle->FvPpi == NULL) {\r
+ continue;\r
+ }\r
+ \r
+ Private->CurrentPeimFvCount = FvCount;\r
\r
if (Private->CurrentPeimCount == 0) {\r
//\r
// reorder all PEIMs to ensure the PEIMs in Apriori file to get\r
// dispatch at first.\r
//\r
- DiscoverPeimsAndOrderWithApriori (Private, VolumeHandle);\r
+ DiscoverPeimsAndOrderWithApriori (Private, CoreFvHandle);\r
}\r
\r
//\r
if (!DepexSatisfied (Private, PeimFileHandle, PeimCount)) {\r
Private->PeimNeedingDispatch = TRUE;\r
} else {\r
- Status = PeiFfsGetFileInfo (PeimFileHandle, &FvFileInfo);\r
+ Status = CoreFvHandle->FvPpi->GetFileInfo (CoreFvHandle->FvPpi, PeimFileHandle, &FvFileInfo);\r
ASSERT_EFI_ERROR (Status);\r
if (FvFileInfo.FileType == EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE) {\r
//\r
// For Fv type file, Produce new FV PPI and FV hob\r
//\r
- Status = ProcessFvFile (PeiServices, VolumeHandle, PeimFileHandle, &AuthenticationState);\r
+ Status = ProcessFvFile (&Private->Fv[FvCount], PeimFileHandle);\r
+ AuthenticationState = 0;\r
} else {\r
//\r
// For PEIM driver, Load its entry point\r
sizeof (ExtendedData)\r
);\r
\r
- Status = VerifyPeim (Private, VolumeHandle, PeimFileHandle);\r
+ Status = VerifyPeim (Private, CoreFvHandle->FvHandle, PeimFileHandle);\r
if (Status != EFI_SECURITY_VIOLATION && (AuthenticationState == 0)) {\r
//\r
// PEIM_STATE_NOT_DISPATCHED move to PEIM_STATE_DISPATCHED\r
return EFI_SUCCESS;\r
}\r
\r
+\r