50 (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
51 &gEfiTemporaryRamSupportPpiGuid,
52 &mTemporaryRamSupportPpi
78 IN EFI_SECTION_TYPE SectionType,
93 EndOfSections = EndOfSection + SizeOfSections;
95 if (EndOfSection == EndOfSections) {
99 CurrentAddress = (EndOfSection + 3) & ~(3ULL);
100 if (CurrentAddress >= EndOfSections) {
101 return EFI_VOLUME_CORRUPTED;
107 if (Size <
sizeof (*Section)) {
108 return EFI_VOLUME_CORRUPTED;
111 EndOfSection = CurrentAddress + Size;
112 if (EndOfSection > EndOfSections) {
113 return EFI_VOLUME_CORRUPTED;
119 if (Section->Type == SectionType) {
121 *FoundSection = Section;
129 return EFI_NOT_FOUND;
150 IN EFI_SECTION_TYPE SectionType,
180 IN EFI_FV_FILETYPE FileType,
181 IN EFI_SECTION_TYPE SectionType,
192 if (Fv->Signature != EFI_FVH_SIGNATURE) {
193 DEBUG ((DEBUG_ERROR,
"FV at %p does not have FV header signature\n", Fv));
194 return EFI_VOLUME_CORRUPTED;
198 EndOfFirmwareVolume = CurrentAddress + Fv->FvLength;
203 for (EndOfFile = CurrentAddress + Fv->HeaderLength; ; ) {
204 CurrentAddress = (EndOfFile + 7) & ~(7ULL);
205 if (CurrentAddress > EndOfFirmwareVolume) {
206 return EFI_VOLUME_CORRUPTED;
210 Size = *(UINT32 *)File->
Size & 0xffffff;
212 return EFI_VOLUME_CORRUPTED;
215 EndOfFile = CurrentAddress + Size;
216 if (EndOfFile > EndOfFirmwareVolume) {
217 return EFI_VOLUME_CORRUPTED;
223 if (File->
Type != FileType) {
233 if (!EFI_ERROR (Status) ||
234 (Status == EFI_VOLUME_CORRUPTED))
263 EFI_FV_FILETYPE_PEI_CORE,
267 if (EFI_ERROR (Status)) {
270 EFI_FV_FILETYPE_PEI_CORE,
274 if (EFI_ERROR (Status)) {
275 DEBUG ((DEBUG_ERROR,
"Unable to find PEI Core image\n"));
316 Status = PeCoffLoaderGetEntryPoint ((
VOID *)(
UINTN)PeiCoreImageBase, (
VOID **)PeiCoreEntryPoint);
317 if (EFI_ERROR (Status)) {
318 *PeiCoreEntryPoint = 0;
351 DEBUG ((DEBUG_INFO,
"Find Pei EntryPoint=%p\n", PeiCoreEntryPoint));
356 DEBUG ((DEBUG_INFO,
"SecStartupPhase2 %p\n", PeiCoreEntryPoint));
376SecCoreStartupWithStack (
378 IN VOID *TopOfCurrentStack
384 DEBUG ((DEBUG_INFO,
"Entering C environment\n"));
390 "SecCoreStartupWithStack (0x%lx, 0x%lx)\n",
392 (
UINTN)TopOfCurrentStack
414 (
UINTN)TopOfCurrentStack
436 "&SecCoreData.BootFirmwareVolumeBase=%lx SecCoreData.BootFirmwareVolumeBase=%lx\n",
442 "&SecCoreData.BootFirmwareVolumeSize=%lx SecCoreData.BootFirmwareVolumeSize=%lx\n",
478 BASE_LIBRARY_JUMP_BUFFER JumpBuffer;
482 "TemporaryRamMigration (0x%Lx, 0x%Lx, 0x%Lx)\n",
488 OldHeap = (
VOID *)(
UINTN)TemporaryMemoryBase;
489 NewHeap = (
VOID *)((
UINTN)PermanentMemoryBase + (CopySize >> 1));
491 OldStack = (
VOID *)((
UINTN)TemporaryMemoryBase + (CopySize >> 1));
492 NewStack = (
VOID *)(
UINTN)PermanentMemoryBase;
497 CopyMem (NewHeap, OldHeap, CopySize >> 1);
502 CopyMem (NewStack, OldStack, CopySize >> 1);
506 if (
SetJump (&JumpBuffer) == 0) {
507 JumpBuffer.SP = JumpBuffer.SP - (
UINTN)OldStack + (
UINTN)NewStack;
VOID EFIAPI ProcessLibraryConstructorList(IN EFI_HANDLE ImageHandle, IN EFI_MM_SYSTEM_TABLE *MmSystemTable)
RETURNS_TWICE UINTN EFIAPI SetJump(OUT BASE_LIBRARY_JUMP_BUFFER *JumpBuffer)
VOID EFIAPI CpuDeadLoop(VOID)
VOID EFIAPI LongJump(IN BASE_LIBRARY_JUMP_BUFFER *JumpBuffer, IN UINTN Value)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
VOID EFIAPI InitializeDebugAgent(IN UINT32 InitFlag, IN VOID *Context OPTIONAL, IN DEBUG_AGENT_CONTINUE Function OPTIONAL)
#define DEBUG(Expression)
STATIC VOID EFIAPI SecStartupPhase2(IN VOID *Context)
STATIC EFI_STATUS FindPeiCoreImageBaseInFv(IN EFI_FIRMWARE_VOLUME_HEADER *Fv, OUT EFI_PHYSICAL_ADDRESS *PeiCoreImageBase)
STATIC EFI_STATUS FindFfsSectionInstance(IN VOID *Sections, IN UINTN SizeOfSections, IN EFI_SECTION_TYPE SectionType, IN UINTN Instance, OUT EFI_COMMON_SECTION_HEADER **FoundSection)
STATIC VOID FindAndReportEntryPoints(IN EFI_FIRMWARE_VOLUME_HEADER **BootFirmwareVolumePtr, OUT EFI_PEI_CORE_ENTRY_POINT *PeiCoreEntryPoint)
STATIC EFI_STATUS EFIAPI TemporaryRamMigration(IN CONST EFI_PEI_SERVICES **PeiServices, IN EFI_PHYSICAL_ADDRESS TemporaryMemoryBase, IN EFI_PHYSICAL_ADDRESS PermanentMemoryBase, IN UINTN CopySize)
STATIC EFI_STATUS FindFfsFileAndSection(IN EFI_FIRMWARE_VOLUME_HEADER *Fv, IN EFI_FV_FILETYPE FileType, IN EFI_SECTION_TYPE SectionType, OUT EFI_COMMON_SECTION_HEADER **FoundSection)
STATIC EFI_STATUS FindFfsSectionInSections(IN VOID *Sections, IN UINTN SizeOfSections, IN EFI_SECTION_TYPE SectionType, OUT EFI_COMMON_SECTION_HEADER **FoundSection)
#define FixedPcdGet32(TokenName)
#define FixedPcdGet64(TokenName)
#define SECTION_SIZE(SectionHeaderPtr)
VOID(EFIAPI * EFI_PEI_CORE_ENTRY_POINT)(IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData, IN CONST EFI_PEI_PPI_DESCRIPTOR *PpiList)
struct _EFI_SEC_PEI_HAND_OFF EFI_SEC_PEI_HAND_OFF
UINT64 EFI_PHYSICAL_ADDRESS
UINTN PeiTemporaryRamSize
VOID * BootFirmwareVolumeBase
UINTN BootFirmwareVolumeSize
VOID * PeiTemporaryRamBase
PHYSICAL_ADDRESS ImageAddress