mirror of https://github.com/acidanthera/audk.git
Temporarily rollback the change from 5625 though 5628 for more investigation.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5629 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
1bd90a4c47
commit
14941e689f
|
@ -100,7 +100,7 @@ DiscoverPeimsAndOrderWithApriori (
|
||||||
Private->AprioriCount -= sizeof (EFI_FFS_FILE_HEADER) - sizeof (EFI_COMMON_SECTION_HEADER);
|
Private->AprioriCount -= sizeof (EFI_FFS_FILE_HEADER) - sizeof (EFI_COMMON_SECTION_HEADER);
|
||||||
Private->AprioriCount /= sizeof (EFI_GUID);
|
Private->AprioriCount /= sizeof (EFI_GUID);
|
||||||
|
|
||||||
ZeroMem (FileGuid, sizeof (FileGuid));
|
SetMem (FileGuid, sizeof (FileGuid), 0);
|
||||||
for (Index = 0; Index < PeimCount; Index++) {
|
for (Index = 0; Index < PeimCount; Index++) {
|
||||||
//
|
//
|
||||||
// Make an array of file name guids that matches the FileHandle array so we can convert
|
// Make an array of file name guids that matches the FileHandle array so we can convert
|
||||||
|
@ -178,7 +178,6 @@ DiscoverPeimsAndOrderWithApriori (
|
||||||
@param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
|
@param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
|
||||||
@param PrivateInMem PeiCore's private data structure
|
@param PrivateInMem PeiCore's private data structure
|
||||||
|
|
||||||
@return PeiCore function address after shadowing.
|
|
||||||
**/
|
**/
|
||||||
VOID*
|
VOID*
|
||||||
ShadowPeiCore(
|
ShadowPeiCore(
|
||||||
|
@ -216,10 +215,6 @@ ShadowPeiCore(
|
||||||
);
|
);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
//
|
|
||||||
// Compute the PeiCore's function address after shaowed PeiCore.
|
|
||||||
// _ModuleEntryPoint is PeiCore main function entry
|
|
||||||
//
|
|
||||||
return (VOID*) ((UINTN) EntryPoint + (UINTN) PeiCore - (UINTN) _ModuleEntryPoint);
|
return (VOID*) ((UINTN) EntryPoint + (UINTN) PeiCore - (UINTN) _ModuleEntryPoint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -252,6 +247,8 @@ PeiDispatcher (
|
||||||
UINT32 AuthenticationState;
|
UINT32 AuthenticationState;
|
||||||
EFI_PHYSICAL_ADDRESS EntryPoint;
|
EFI_PHYSICAL_ADDRESS EntryPoint;
|
||||||
EFI_PEIM_ENTRY_POINT2 PeimEntryPoint;
|
EFI_PEIM_ENTRY_POINT2 PeimEntryPoint;
|
||||||
|
BOOLEAN PeimNeedingDispatch;
|
||||||
|
BOOLEAN PeimDispatchOnThisPass;
|
||||||
UINTN SaveCurrentPeimCount;
|
UINTN SaveCurrentPeimCount;
|
||||||
UINTN SaveCurrentFvCount;
|
UINTN SaveCurrentFvCount;
|
||||||
EFI_PEI_FILE_HANDLE SaveCurrentFileHandle;
|
EFI_PEI_FILE_HANDLE SaveCurrentFileHandle;
|
||||||
|
@ -335,16 +332,9 @@ PeiDispatcher (
|
||||||
// satisfied, this dipatcher should run only once.
|
// satisfied, this dipatcher should run only once.
|
||||||
//
|
//
|
||||||
do {
|
do {
|
||||||
//
|
PeimNeedingDispatch = FALSE;
|
||||||
// In case that reenter PeiCore happens, the last pass record is still available.
|
PeimDispatchOnThisPass = FALSE;
|
||||||
//
|
|
||||||
if (!Private->PeimDispatcherReenter) {
|
|
||||||
Private->PeimNeedingDispatch = FALSE;
|
|
||||||
Private->PeimDispatchOnThisPass = FALSE;
|
|
||||||
} else {
|
|
||||||
Private->PeimDispatcherReenter = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (FvCount = Private->CurrentPeimFvCount; FvCount < Private->FvCount; FvCount++) {
|
for (FvCount = Private->CurrentPeimFvCount; FvCount < Private->FvCount; FvCount++) {
|
||||||
Private->CurrentPeimFvCount = FvCount;
|
Private->CurrentPeimFvCount = FvCount;
|
||||||
VolumeHandle = Private->Fv[FvCount].FvHeader;
|
VolumeHandle = Private->Fv[FvCount].FvHeader;
|
||||||
|
@ -369,7 +359,7 @@ PeiDispatcher (
|
||||||
|
|
||||||
if (Private->Fv[FvCount].PeimState[PeimCount] == PEIM_STATE_NOT_DISPATCHED) {
|
if (Private->Fv[FvCount].PeimState[PeimCount] == PEIM_STATE_NOT_DISPATCHED) {
|
||||||
if (!DepexSatisfied (Private, PeimFileHandle, PeimCount)) {
|
if (!DepexSatisfied (Private, PeimFileHandle, PeimCount)) {
|
||||||
Private->PeimNeedingDispatch = TRUE;
|
PeimNeedingDispatch = TRUE;
|
||||||
} else {
|
} else {
|
||||||
Status = PeiFfsGetFileInfo (PeimFileHandle, &FvFileInfo);
|
Status = PeiFfsGetFileInfo (PeimFileHandle, &FvFileInfo);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
@ -421,7 +411,7 @@ PeiDispatcher (
|
||||||
PeimEntryPoint (PeimFileHandle, (const EFI_PEI_SERVICES **) PeiServices);
|
PeimEntryPoint (PeimFileHandle, (const EFI_PEI_SERVICES **) PeiServices);
|
||||||
}
|
}
|
||||||
|
|
||||||
Private->PeimDispatchOnThisPass = TRUE;
|
PeimDispatchOnThisPass = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
REPORT_STATUS_CODE_WITH_EXTENDED_DATA (
|
REPORT_STATUS_CODE_WITH_EXTENDED_DATA (
|
||||||
|
@ -591,10 +581,10 @@ PeiDispatcher (
|
||||||
PrivateInMem->PeiMemoryInstalled = TRUE;
|
PrivateInMem->PeiMemoryInstalled = TRUE;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Indicate that PeiCore reenter
|
// Restart scan of all PEIMs on next pass
|
||||||
//
|
//
|
||||||
Private->PeimDispatcherReenter = TRUE;
|
PrivateInMem->CurrentPeimCount = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Shadow PEI Core. When permanent memory is avaiable, shadow
|
// Shadow PEI Core. When permanent memory is avaiable, shadow
|
||||||
// PEI Core and PEIMs to get high performance.
|
// PEI Core and PEIMs to get high performance.
|
||||||
|
@ -678,7 +668,7 @@ PeiDispatcher (
|
||||||
// pass. If we did not dispatch a PEIM there is no point in trying again
|
// pass. If we did not dispatch a PEIM there is no point in trying again
|
||||||
// as it will fail the next time too (nothing has changed).
|
// as it will fail the next time too (nothing has changed).
|
||||||
//
|
//
|
||||||
} while (Private->PeimNeedingDispatch && Private->PeimDispatchOnThisPass);
|
} while (PeimNeedingDispatch && PeimDispatchOnThisPass);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -703,7 +693,6 @@ InitializeDispatcherData (
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
if (OldCoreData == NULL) {
|
if (OldCoreData == NULL) {
|
||||||
PrivateData->PeimDispatcherReenter = FALSE;
|
|
||||||
PeiInitializeFv (PrivateData, SecCoreData);
|
PeiInitializeFv (PrivateData, SecCoreData);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -809,11 +798,9 @@ PeiRegisterForShadow (
|
||||||
@param AuthenticationState Pointer to attestation authentication state of image.
|
@param AuthenticationState Pointer to attestation authentication state of image.
|
||||||
|
|
||||||
|
|
||||||
@retval EFI_NOT_FOUND FV image can't be found.
|
@retval EFI_NOT_FOUND FV image can't be found.
|
||||||
@retval EFI_SUCCESS Successfully to process it.
|
@retval EFI_SUCCESS Successfully to process it.
|
||||||
@retval EFI_OUT_OF_RESOURCES Can not allocate page when aligning FV image
|
|
||||||
@retval Others Can not find EFI_SECTION_FIRMWARE_VOLUME_IMAGE section
|
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
ProcessFvFile (
|
ProcessFvFile (
|
||||||
|
@ -827,7 +814,7 @@ ProcessFvFile (
|
||||||
EFI_FV_INFO FvImageInfo;
|
EFI_FV_INFO FvImageInfo;
|
||||||
UINT32 FvAlignment;
|
UINT32 FvAlignment;
|
||||||
VOID *FvBuffer;
|
VOID *FvBuffer;
|
||||||
EFI_PEI_HOB_POINTERS HobPtr;
|
EFI_PEI_HOB_POINTERS HobFv2;
|
||||||
|
|
||||||
FvBuffer = NULL;
|
FvBuffer = NULL;
|
||||||
*AuthenticationState = 0;
|
*AuthenticationState = 0;
|
||||||
|
@ -836,15 +823,15 @@ ProcessFvFile (
|
||||||
// Check if this EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE file has already
|
// Check if this EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE file has already
|
||||||
// been extracted.
|
// been extracted.
|
||||||
//
|
//
|
||||||
HobPtr.Raw = GetHobList ();
|
HobFv2.Raw = GetHobList ();
|
||||||
while ((HobPtr.Raw = GetNextHob (EFI_HOB_TYPE_FV2, HobPtr.Raw)) != NULL) {
|
while ((HobFv2.Raw = GetNextHob (EFI_HOB_TYPE_FV2, HobFv2.Raw)) != NULL) {
|
||||||
if (CompareGuid (&(((EFI_FFS_FILE_HEADER *)FvFileHandle)->Name), &HobPtr.FirmwareVolume2->FileName)) {
|
if (CompareGuid (&(((EFI_FFS_FILE_HEADER *)FvFileHandle)->Name), &HobFv2.FirmwareVolume2->FileName)) {
|
||||||
//
|
//
|
||||||
// this FILE has been dispatched, it will not be dispatched again.
|
// this FILE has been dispatched, it will not be dispatched again.
|
||||||
//
|
//
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
HobPtr.Raw = GET_NEXT_HOB (HobPtr);
|
HobFv2.Raw = GET_NEXT_HOB (HobFv2);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -860,13 +847,11 @@ ProcessFvFile (
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Collect FvImage Info.
|
// Collect FvImage Info.
|
||||||
//
|
//
|
||||||
Status = PeiFfsGetVolumeInfo (FvImageHandle, &FvImageInfo);
|
Status = PeiFfsGetVolumeInfo (FvImageHandle, &FvImageInfo);
|
||||||
ASSERT_EFI_ERROR (Status);
|
ASSERT_EFI_ERROR (Status);
|
||||||
|
|
||||||
//
|
//
|
||||||
// FvAlignment must be more than 8 bytes required by FvHeader structure.
|
// FvAlignment must be more than 8 bytes required by FvHeader structure.
|
||||||
//
|
//
|
||||||
|
@ -874,7 +859,6 @@ ProcessFvFile (
|
||||||
if (FvAlignment < 8) {
|
if (FvAlignment < 8) {
|
||||||
FvAlignment = 8;
|
FvAlignment = 8;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check FvImage
|
// Check FvImage
|
||||||
//
|
//
|
||||||
|
@ -902,24 +886,12 @@ ProcessFvFile (
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Inform the extracted FvImage to Fv HOB consumer phase, i.e. DXE phase
|
// Inform HOB consumer phase, i.e. DXE core, the existance of this FV
|
||||||
// based on its parent Fvimage is informed or not.
|
|
||||||
// If FvHob of its parent fvimage is built, the extracted FvImage will be built also.
|
|
||||||
// Or, the extracted FvImage will not be built.
|
|
||||||
//
|
//
|
||||||
HobPtr.Raw = GetHobList ();
|
BuildFvHob (
|
||||||
while ((HobPtr.Raw = GetNextHob (EFI_HOB_TYPE_FV, HobPtr.Raw)) != NULL) {
|
(EFI_PHYSICAL_ADDRESS) (UINTN) FvImageInfo.FvStart,
|
||||||
if (((EFI_PHYSICAL_ADDRESS) (UINTN)FvFileHandle > HobPtr.FirmwareVolume->BaseAddress) &&
|
FvImageInfo.FvSize
|
||||||
((EFI_PHYSICAL_ADDRESS) (UINTN)FvFileHandle < HobPtr.FirmwareVolume->BaseAddress + HobPtr.FirmwareVolume->Length)) {
|
);
|
||||||
BuildFvHob (
|
|
||||||
(EFI_PHYSICAL_ADDRESS) (UINTN) FvImageInfo.FvStart,
|
|
||||||
FvImageInfo.FvSize
|
|
||||||
);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
HobPtr.Raw = GET_NEXT_HOB (HobPtr);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Makes the encapsulated volume show up in DXE phase to skip processing of
|
// Makes the encapsulated volume show up in DXE phase to skip processing of
|
||||||
// encapsulated file again.
|
// encapsulated file again.
|
||||||
|
|
|
@ -18,7 +18,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
|
|
||||||
Initialize the memory services.
|
Initialize the memory services.
|
||||||
|
|
||||||
@param PrivateData Points to PeiCore's private instance data.
|
|
||||||
|
@param PrivateData Add parameter description
|
||||||
@param SecCoreData Points to a data structure containing information about the PEI core's operating
|
@param SecCoreData Points to a data structure containing information about the PEI core's operating
|
||||||
environment, such as the size and location of temporary RAM, the stack location and
|
environment, such as the size and location of temporary RAM, the stack location and
|
||||||
the BFV location.
|
the BFV location.
|
||||||
|
@ -75,13 +76,9 @@ InitializeMemoryServices (
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
||||||
This function registers the found memory configuration with the PEI Foundation.
|
Install the permanent memory is now available.
|
||||||
|
Creates HOB (PHIT and Stack).
|
||||||
|
|
||||||
The usage model is that the PEIM that discovers the permanent memory shall invoke this service.
|
|
||||||
This routine will hold discoveried memory information into PeiCore's private data,
|
|
||||||
and set SwitchStackSignal flag. After PEIM who discovery memory is dispatched,
|
|
||||||
PeiDispatcher will migrate temporary memory to permenement memory.
|
|
||||||
|
|
||||||
@param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
|
@param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
|
||||||
@param MemoryBegin Start of memory address.
|
@param MemoryBegin Start of memory address.
|
||||||
@param MemoryLength Length of memory.
|
@param MemoryLength Length of memory.
|
||||||
|
@ -123,6 +120,7 @@ PeiInstallPeiMemory (
|
||||||
@param Memory Pointer of memory allocated.
|
@param Memory Pointer of memory allocated.
|
||||||
|
|
||||||
@retval EFI_SUCCESS The allocation was successful
|
@retval EFI_SUCCESS The allocation was successful
|
||||||
|
@retval EFI_INVALID_PARAMETER Only AllocateAnyAddress is supported.
|
||||||
@retval EFI_NOT_AVAILABLE_YET Called with permanent memory not available
|
@retval EFI_NOT_AVAILABLE_YET Called with permanent memory not available
|
||||||
@retval EFI_OUT_OF_RESOURCES There is not enough HOB heap to satisfy the requirement
|
@retval EFI_OUT_OF_RESOURCES There is not enough HOB heap to satisfy the requirement
|
||||||
to allocate the number of pages.
|
to allocate the number of pages.
|
||||||
|
@ -131,14 +129,15 @@ PeiInstallPeiMemory (
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
PeiAllocatePages (
|
PeiAllocatePages (
|
||||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||||
IN EFI_MEMORY_TYPE MemoryType,
|
IN EFI_MEMORY_TYPE MemoryType,
|
||||||
IN UINTN Pages,
|
IN UINTN Pages,
|
||||||
OUT EFI_PHYSICAL_ADDRESS *Memory
|
OUT EFI_PHYSICAL_ADDRESS *Memory
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
PEI_CORE_INSTANCE *PrivateData;
|
PEI_CORE_INSTANCE *PrivateData;
|
||||||
EFI_PEI_HOB_POINTERS Hob;
|
EFI_PEI_HOB_POINTERS Hob;
|
||||||
|
EFI_PHYSICAL_ADDRESS Offset;
|
||||||
EFI_PHYSICAL_ADDRESS *FreeMemoryTop;
|
EFI_PHYSICAL_ADDRESS *FreeMemoryTop;
|
||||||
EFI_PHYSICAL_ADDRESS *FreeMemoryBottom;
|
EFI_PHYSICAL_ADDRESS *FreeMemoryBottom;
|
||||||
|
|
||||||
|
@ -151,7 +150,7 @@ PeiAllocatePages (
|
||||||
if (!PrivateData->PeiMemoryInstalled) {
|
if (!PrivateData->PeiMemoryInstalled) {
|
||||||
//
|
//
|
||||||
// When PeiInstallMemory is called but CAR has *not* been moved to temporary memory,
|
// When PeiInstallMemory is called but CAR has *not* been moved to temporary memory,
|
||||||
// the AllocatePage will dependent on the field of PEI_CORE_INSTANCE structure.
|
// the AllocatePage will dependent the field of PEI_CORE_INSTANCE structure.
|
||||||
//
|
//
|
||||||
if (!PrivateData->SwitchStackSignal) {
|
if (!PrivateData->SwitchStackSignal) {
|
||||||
return EFI_NOT_AVAILABLE_YET;
|
return EFI_NOT_AVAILABLE_YET;
|
||||||
|
@ -165,9 +164,16 @@ PeiAllocatePages (
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check to see if on 4k boundary, If not aligned, make the allocation aligned.
|
// Check to see if on 4k boundary
|
||||||
//
|
//
|
||||||
*(FreeMemoryTop) -= *(FreeMemoryTop) & 0xFFF;
|
Offset = *(FreeMemoryTop) & 0xFFF;
|
||||||
|
|
||||||
|
//
|
||||||
|
// If not aligned, make the allocation aligned.
|
||||||
|
//
|
||||||
|
if (Offset != 0) {
|
||||||
|
*(FreeMemoryTop) -= Offset;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Verify that there is sufficient memory to satisfy the allocation
|
// Verify that there is sufficient memory to satisfy the allocation
|
||||||
|
@ -204,14 +210,12 @@ PeiAllocatePages (
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
||||||
Pool allocation service. Before permenent memory is discoveried, the pool will
|
Memory allocation service on the CAR.
|
||||||
be allocated the heap in the CAR. Genenrally, the size of heap in temporary
|
|
||||||
memory does not exceed to 64K, so the biggest pool size could be allocated is
|
|
||||||
64K.
|
|
||||||
|
|
||||||
@param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
|
|
||||||
@param Size Amount of memory required
|
@param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
|
||||||
@param Buffer Address of pointer to the buffer
|
@param Size Amount of memory required
|
||||||
|
@param Buffer Address of pointer to the buffer
|
||||||
|
|
||||||
@retval EFI_SUCCESS The allocation was successful
|
@retval EFI_SUCCESS The allocation was successful
|
||||||
@retval EFI_OUT_OF_RESOURCES There is not enough heap to satisfy the requirement
|
@retval EFI_OUT_OF_RESOURCES There is not enough heap to satisfy the requirement
|
||||||
|
@ -221,30 +225,26 @@ PeiAllocatePages (
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
PeiAllocatePool (
|
PeiAllocatePool (
|
||||||
IN CONST EFI_PEI_SERVICES **PeiServices,
|
IN CONST EFI_PEI_SERVICES **PeiServices,
|
||||||
IN UINTN Size,
|
IN UINTN Size,
|
||||||
OUT VOID **Buffer
|
OUT VOID **Buffer
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
EFI_HOB_MEMORY_POOL *Hob;
|
EFI_HOB_MEMORY_POOL *Hob;
|
||||||
|
|
||||||
//
|
//
|
||||||
// If some "post-memory" PEIM wishes to allocate larger pool,
|
// If some "post-memory" PEIM wishes to allocate larger pool,
|
||||||
// it should use AllocatePages service instead.
|
// it should use AllocatePages service instead.
|
||||||
//
|
//
|
||||||
|
ASSERT (Size < 0x10000 - sizeof (EFI_HOB_MEMORY_POOL));
|
||||||
//
|
Status = PeiServicesCreateHob (
|
||||||
// Generally, the size of heap in temporary memory does not exceed to 64K,
|
|
||||||
// so the maxmium size of pool is 0x10000 - sizeof (EFI_HOB_MEMORY_POOL)
|
|
||||||
//
|
|
||||||
ASSERT (Size < 0x10000 - sizeof (EFI_HOB_MEMORY_POOL));
|
|
||||||
Status = PeiServicesCreateHob (
|
|
||||||
EFI_HOB_TYPE_MEMORY_POOL,
|
EFI_HOB_TYPE_MEMORY_POOL,
|
||||||
(UINT16)(sizeof (EFI_HOB_MEMORY_POOL) + Size),
|
(UINT16)(sizeof (EFI_HOB_MEMORY_POOL) + Size),
|
||||||
(VOID **)&Hob
|
(VOID **)&Hob
|
||||||
);
|
);
|
||||||
*Buffer = Hob+1;
|
*Buffer = Hob+1;
|
||||||
|
|
||||||
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
|
@ -137,9 +137,6 @@ typedef struct{
|
||||||
UINTN CurrentPeimFvCount;
|
UINTN CurrentPeimFvCount;
|
||||||
UINTN CurrentPeimCount;
|
UINTN CurrentPeimCount;
|
||||||
EFI_PEI_FILE_HANDLE CurrentFileHandle;
|
EFI_PEI_FILE_HANDLE CurrentFileHandle;
|
||||||
BOOLEAN PeimNeedingDispatch;
|
|
||||||
BOOLEAN PeimDispatchOnThisPass;
|
|
||||||
BOOLEAN PeimDispatcherReenter;
|
|
||||||
UINTN AllFvCount;
|
UINTN AllFvCount;
|
||||||
EFI_PEI_FV_HANDLE AllFv[FixedPcdGet32 (PcdPeiCoreMaxFvSupported)];
|
EFI_PEI_FV_HANDLE AllFv[FixedPcdGet32 (PcdPeiCoreMaxFvSupported)];
|
||||||
EFI_PEI_HOB_POINTERS HobList;
|
EFI_PEI_HOB_POINTERS HobList;
|
||||||
|
|
|
@ -21,7 +21,8 @@ STATIC EFI_PEI_PPI_DESCRIPTOR mMemoryDiscoveredPpi = {
|
||||||
};
|
};
|
||||||
|
|
||||||
///
|
///
|
||||||
/// Pei service instance
|
/// Pei Core Module Variables
|
||||||
|
///
|
||||||
///
|
///
|
||||||
STATIC EFI_PEI_SERVICES gPs = {
|
STATIC EFI_PEI_SERVICES gPs = {
|
||||||
{
|
{
|
||||||
|
@ -66,10 +67,11 @@ STATIC EFI_PEI_SERVICES gPs = {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
||||||
This routine is invoked by main entry of PeiMain module during transition
|
The entry routine to Pei Core, invoked by PeiMain during transition
|
||||||
from SEC to PEI. After switching stack in the PEI core, it will restart
|
from SEC to PEI. After switching stack in the PEI core, it will restart
|
||||||
with the old core data.
|
with the old core data.
|
||||||
|
|
||||||
|
|
||||||
@param SecCoreData Points to a data structure containing information about the PEI core's operating
|
@param SecCoreData Points to a data structure containing information about the PEI core's operating
|
||||||
environment, such as the size and location of temporary RAM, the stack location and
|
environment, such as the size and location of temporary RAM, the stack location and
|
||||||
the BFV location.
|
the BFV location.
|
||||||
|
@ -81,7 +83,6 @@ STATIC EFI_PEI_SERVICES gPs = {
|
||||||
calls and/or code in these early PPIs
|
calls and/or code in these early PPIs
|
||||||
@param Data Pointer to old core data that is used to initialize the
|
@param Data Pointer to old core data that is used to initialize the
|
||||||
core's data areas.
|
core's data areas.
|
||||||
If NULL, it is first PeiCore entering.
|
|
||||||
|
|
||||||
@retval EFI_NOT_FOUND Never reach
|
@retval EFI_NOT_FOUND Never reach
|
||||||
|
|
||||||
|
@ -97,13 +98,13 @@ PeiCore (
|
||||||
PEI_CORE_INSTANCE PrivateData;
|
PEI_CORE_INSTANCE PrivateData;
|
||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
PEI_CORE_TEMP_POINTERS TempPtr;
|
PEI_CORE_TEMP_POINTERS TempPtr;
|
||||||
UINT64 Tick;
|
UINT64 mTick;
|
||||||
PEI_CORE_INSTANCE *OldCoreData;
|
PEI_CORE_INSTANCE *OldCoreData;
|
||||||
EFI_PEI_CPU_IO_PPI *CpuIo;
|
EFI_PEI_CPU_IO_PPI *CpuIo;
|
||||||
EFI_PEI_PCI_CFG2_PPI *PciCfg;
|
EFI_PEI_PCI_CFG2_PPI *PciCfg;
|
||||||
PEICORE_FUNCTION_POINTER ShadowedPeiCore;
|
PEICORE_FUNCTION_POINTER ShadowedPeiCore;
|
||||||
|
|
||||||
Tick = 0;
|
mTick = 0;
|
||||||
OldCoreData = (PEI_CORE_INSTANCE *) Data;
|
OldCoreData = (PEI_CORE_INSTANCE *) Data;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -112,17 +113,16 @@ PeiCore (
|
||||||
//
|
//
|
||||||
if (PerformanceMeasurementEnabled()) {
|
if (PerformanceMeasurementEnabled()) {
|
||||||
if (OldCoreData == NULL) {
|
if (OldCoreData == NULL) {
|
||||||
Tick = GetPerformanceCounter ();
|
mTick = GetPerformanceCounter ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// PeiCore has been shadowed to memory for first entering, so
|
||||||
|
// just jump to PeiCore in memory here.
|
||||||
|
//
|
||||||
if (OldCoreData != NULL) {
|
if (OldCoreData != NULL) {
|
||||||
ShadowedPeiCore = (PEICORE_FUNCTION_POINTER) (UINTN) OldCoreData->ShadowedPeiCore;
|
ShadowedPeiCore = (PEICORE_FUNCTION_POINTER) (UINTN) OldCoreData->ShadowedPeiCore;
|
||||||
|
|
||||||
//
|
|
||||||
// PeiCore has been shadowed to memory for first entering, so
|
|
||||||
// just jump to PeiCore in memory here.
|
|
||||||
//
|
|
||||||
if (ShadowedPeiCore != NULL) {
|
if (ShadowedPeiCore != NULL) {
|
||||||
OldCoreData->ShadowedPeiCore = NULL;
|
OldCoreData->ShadowedPeiCore = NULL;
|
||||||
ShadowedPeiCore (
|
ShadowedPeiCore (
|
||||||
|
@ -142,10 +142,6 @@ PeiCore (
|
||||||
PrivateData.ServiceTableShadow.CpuIo = CpuIo;
|
PrivateData.ServiceTableShadow.CpuIo = CpuIo;
|
||||||
PrivateData.ServiceTableShadow.PciCfg = PciCfg;
|
PrivateData.ServiceTableShadow.PciCfg = PciCfg;
|
||||||
} else {
|
} else {
|
||||||
//
|
|
||||||
// If OldCoreData is NULL, means current is first Peicore's entering.
|
|
||||||
//
|
|
||||||
|
|
||||||
ZeroMem (&PrivateData, sizeof (PEI_CORE_INSTANCE));
|
ZeroMem (&PrivateData, sizeof (PEI_CORE_INSTANCE));
|
||||||
PrivateData.Signature = PEI_CORE_HANDLE_SIGNATURE;
|
PrivateData.Signature = PEI_CORE_HANDLE_SIGNATURE;
|
||||||
CopyMem (&PrivateData.ServiceTableShadow, &gPs, sizeof (gPs));
|
CopyMem (&PrivateData.ServiceTableShadow, &gPs, sizeof (gPs));
|
||||||
|
@ -190,11 +186,11 @@ PeiCore (
|
||||||
FixedPcdGet32 (PcdStatusCodeValuePeiCoreEntry)
|
FixedPcdGet32 (PcdStatusCodeValuePeiCoreEntry)
|
||||||
);
|
);
|
||||||
|
|
||||||
PERF_START (NULL,"PEI", NULL, Tick);
|
PERF_START (NULL,"PEI", NULL, mTick);
|
||||||
//
|
//
|
||||||
// If first pass, start performance measurement.
|
// If first pass, start performance measurement.
|
||||||
//
|
//
|
||||||
PERF_START (NULL,"PreMem", NULL, Tick);
|
PERF_START (NULL,"PreMem", NULL, mTick);
|
||||||
|
|
||||||
//
|
//
|
||||||
// If SEC provided any PPI services to PEI, install them.
|
// If SEC provided any PPI services to PEI, install them.
|
||||||
|
|
|
@ -62,8 +62,7 @@ InitializeSecurityServices (
|
||||||
/**
|
/**
|
||||||
|
|
||||||
Provide a callback for when the security PPI is installed.
|
Provide a callback for when the security PPI is installed.
|
||||||
This routine will cache installed security PPI into PeiCore's private data.
|
|
||||||
|
|
||||||
@param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
|
@param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation.
|
||||||
@param NotifyDescriptor The descriptor for the notification event.
|
@param NotifyDescriptor The descriptor for the notification event.
|
||||||
@param Ppi Pointer to the PPI in question.
|
@param Ppi Pointer to the PPI in question.
|
||||||
|
@ -106,7 +105,7 @@ SecurityPpiNotifyCallback (
|
||||||
|
|
||||||
@retval EFI_SUCCESS Image is OK
|
@retval EFI_SUCCESS Image is OK
|
||||||
@retval EFI_SECURITY_VIOLATION Image is illegal
|
@retval EFI_SECURITY_VIOLATION Image is illegal
|
||||||
@retval EFI_NOT_FOUND If security PPI is not installed.
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
VerifyPeim (
|
VerifyPeim (
|
||||||
|
@ -149,9 +148,10 @@ VerifyPeim (
|
||||||
/**
|
/**
|
||||||
Verify a Firmware volume.
|
Verify a Firmware volume.
|
||||||
|
|
||||||
@param CurrentFvAddress Pointer to the current Firmware Volume under consideration
|
@param CurrentFvAddress - Pointer to the current Firmware Volume under consideration
|
||||||
|
|
||||||
@retval EFI_SUCCESS Firmware Volume is legal
|
@retval EFI_SUCCESS Firmware Volume is legal
|
||||||
|
@retval EFI_SECURITY_VIOLATION Firmware Volume fails integrity test
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
|
|
Loading…
Reference in New Issue