56 (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
57 &gEfiPeiDelayedDispatchPpiGuid,
62 EFI_PEI_PPI_DESCRIPTOR_NOTIFY_CALLBACK | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
63 &gEfiEndOfPeiSignalPpiGuid,
80 if (GuidHob ==
NULL) {
83 DEBUG ((DEBUG_ERROR,
"%a - Delayed Dispatch Hob not available.\n", __func__));
122 if ((Function ==
NULL) || (Delay >
FixedPcdGet32 (PcdDelayedDispatchMaxDelayUs)) || (This ==
NULL)) {
123 DEBUG ((DEBUG_ERROR,
"%a Invalid parameter. Function: %Lx, Delay: %u, This: %p\n", __func__, (UINT64)(
UINTN)Function, Delay, This));
124 Status = EFI_INVALID_PARAMETER;
130 if (DelayedDispatchTable ==
NULL) {
131 DEBUG ((DEBUG_ERROR,
"%a Unable to locate dispatch table\n", __func__));
132 Status = EFI_UNSUPPORTED;
137 if (DelayedDispatchTable->Count >=
PcdGet32 (PcdDelayedDispatchMaxEntries)) {
140 "%a DelayedDispatchTable->Count = %d. PcdDelayedDispatchMaxEntries (%d) is too small.\n",
142 DelayedDispatchTable->Count,
143 PcdGet32 (PcdDelayedDispatchMaxEntries)
145 ASSERT (DelayedDispatchTable->Count <
PcdGet32 (PcdDelayedDispatchMaxEntries));
146 Status = EFI_OUT_OF_RESOURCES;
150 Entry = &DelayedDispatchTable->Entry[DelayedDispatchTable->Count];
151 Entry->Function = Function;
152 Entry->Context = Context;
153 Status =
SafeUint64Add (GET_TIME_IN_US (), Delay, &Entry->DispatchTime);
154 if (EFI_ERROR (Status)) {
155 DEBUG ((DEBUG_ERROR,
"%a Delay overflow\n", __func__));
156 Status = EFI_INVALID_PARAMETER;
160 if (DelayedGroupId ==
NULL) {
163 CopyGuid (&Entry->DelayedGroupId, DelayedGroupId);
166 Entry->MicrosecondDelay = Delay;
167 DelayedDispatchTable->Count++;
169 DEBUG ((DEBUG_INFO,
"%a Adding dispatch Entry\n", __func__));
170 DEBUG ((DEBUG_INFO,
" Requested Delay = %d\n", Delay));
171 DEBUG ((DEBUG_INFO,
" Trigger Time = %d\n", Entry->DispatchTime));
172 DEBUG ((DEBUG_INFO,
" Context = 0x%016lx\n", Entry->Context));
173 DEBUG ((DEBUG_INFO,
" Function = %Lx\n", (UINT64)(
UINTN)Entry->Function));
174 DEBUG ((DEBUG_INFO,
" DelayedGroupId = %g\n", &Entry->DelayedGroupId));
207 UINT64 MaxDispatchTime;
209 BOOLEAN DelayedGroupIdPresent;
214 DelayedGroupIdPresent =
TRUE;
216 if (EFI_ERROR (Status)) {
217 DEBUG ((DEBUG_ERROR,
"%a Delay overflow\n", __func__));
221 while ((DelayedDispatchTable->Count > 0) && (DelayedGroupIdPresent)) {
222 DelayedGroupIdPresent =
FALSE;
223 DelayedDispatchTable->DispCount++;
226 TimeCurrent = GET_TIME_IN_US ();
227 if (TimeCurrent > MaxDispatchTime) {
228 DEBUG ((DEBUG_ERROR,
"%a - DelayedDispatch Completion timeout!\n", __func__));
229 ReportStatusCode ((EFI_ERROR_MAJOR | EFI_ERROR_CODE), (EFI_SOFTWARE_PEI_CORE | EFI_SW_EC_ABORTED));
231 DelayedDispatchTable->Count = 0;
236 for (Index1 = 0; Index1 < DelayedDispatchTable->Count;) {
237 Entry = &DelayedDispatchTable->Entry[Index1];
239 if (DelayedGroupId !=
NULL) {
240 if (
CompareGuid (DelayedGroupId, &Entry->DelayedGroupId)) {
241 DelayedGroupIdPresent =
TRUE;
245 TimeCurrent = GET_TIME_IN_US ();
246 if (TimeCurrent >= Entry->DispatchTime) {
250 "Delayed dispatch entry %d @ %p, Target=%d, Act=%d Disp=%d\n",
255 DelayedDispatchTable->DispCount
258 Entry->MicrosecondDelay = 0;
261 &Entry->MicrosecondDelay
263 DEBUG ((DEBUG_ERROR,
"Delayed dispatch Function returned delay=%d\n", Entry->MicrosecondDelay));
264 if (Entry->MicrosecondDelay == 0) {
266 DelayedDispatchTable->Count--;
269 if (Entry->MicrosecondDelay >
FixedPcdGet32 (PcdDelayedDispatchMaxDelayUs)) {
270 DEBUG ((DEBUG_ERROR,
"%a Illegal new delay %d requested\n", __func__, Entry->MicrosecondDelay));
272 Entry->MicrosecondDelay =
FixedPcdGet32 (PcdDelayedDispatchMaxDelayUs);
276 Status =
SafeUint64Add (GET_TIME_IN_US (), Entry->MicrosecondDelay, &Entry->DispatchTime);
277 if (EFI_ERROR (Status)) {
278 DEBUG ((DEBUG_ERROR,
"%a Delay overflow, this event will likely never be fired...\n", __func__));
279 Entry->DispatchTime = MAX_UINT64;
324 if (DelayedDispatchTable ==
NULL) {
325 DEBUG ((DEBUG_ERROR,
"%a Unable to locate dispatch table\n", __func__));
326 Status = EFI_UNSUPPORTED;
331 DEBUG ((DEBUG_ERROR,
"%a Delayed Group ID is a null GUID\n", __func__));
332 Status = EFI_UNSUPPORTED;
336 DEBUG ((DEBUG_INFO,
"Delayed dispatch on %g. Count=%d, DispatchCount=%d\n", &DelayedGroupId, DelayedDispatchTable->Count, DelayedDispatchTable->DispCount));
371 if (DelayedDispatchTable ==
NULL) {
372 DEBUG ((DEBUG_ERROR,
"%a Unable to locate dispatch table\n", __func__));
373 return EFI_UNSUPPORTED;
377 while (DelayedDispatchTable->Count > 0) {
381 DEBUG ((DEBUG_ERROR,
"%a Count of dispatch cycles is %d\n", __func__, DelayedDispatchTable->DispCount));
416 FvPpi = CoreFileHandle->FvPpi;
421 AprioriFileHandle =
NULL;
422 Private->CurrentFvFileHandles =
NULL;
428 if (CoreFileHandle->ScanFv) {
429 Private->CurrentFvFileHandles = CoreFileHandle->FvFileHandles;
433 TempFileHandles = Private->TempFileHandles;
434 TempFileGuid = Private->TempFileGuid;
443 if (!EFI_ERROR (Status)) {
444 if (PeimCount >= Private->TempPeimCount) {
451 if (TempFileHandles ==
NULL) {
452 ASSERT (TempFileHandles !=
NULL);
458 Private->TempFileHandles,
461 Private->TempFileHandles = TempFileHandles;
463 sizeof (
EFI_GUID) * (Private->TempPeimCount + TEMP_FILE_GROWTH_STEP)
465 if (TempFileGuid ==
NULL) {
466 ASSERT (TempFileGuid !=
NULL);
472 Private->TempFileGuid,
473 sizeof (
EFI_GUID) * Private->TempPeimCount
475 Private->TempFileGuid = TempFileGuid;
476 Private->TempPeimCount = Private->TempPeimCount + TEMP_FILE_GROWTH_STEP;
479 TempFileHandles[PeimCount++] = FileHandle;
481 }
while (!EFI_ERROR (Status));
485 "%a(): Found 0x%x PEI FFS files in the %dth FV\n",
488 Private->CurrentPeimFvCount
491 if (PeimCount == 0) {
495 CoreFileHandle->ScanFv =
TRUE;
502 CoreFileHandle->PeimCount = PeimCount;
504 ASSERT (CoreFileHandle->PeimState !=
NULL);
506 ASSERT (CoreFileHandle->FvFileHandles !=
NULL);
511 Private->AprioriCount = 0;
512 Status = FvPpi->FindFileByName (FvPpi, &gPeiAprioriFileNameGuid, &CoreFileHandle->FvHandle, &AprioriFileHandle);
513 if (!EFI_ERROR (Status) && (AprioriFileHandle !=
NULL)) {
517 Status = FvPpi->FindSectionByType (FvPpi, EFI_SECTION_RAW, AprioriFileHandle, (
VOID **)&Apriori);
518 if (!EFI_ERROR (Status)) {
522 Status = FvPpi->GetFileInfo (FvPpi, AprioriFileHandle, &
FileInfo);
524 Private->AprioriCount =
FileInfo.BufferSize;
525 if (IS_SECTION2 (
FileInfo.Buffer)) {
531 Private->AprioriCount /=
sizeof (
EFI_GUID);
533 for (Index = 0; Index < PeimCount; Index++) {
538 Status = FvPpi->GetFileInfo (FvPpi, TempFileHandles[Index], &
FileInfo);
548 for (Index2 = 0; Index2 < Private->AprioriCount; Index2++) {
549 Guid =
ScanGuid (TempFileGuid, PeimCount *
sizeof (
EFI_GUID), &Apriori[Index2]);
552 CoreFileHandle->FvFileHandles[Index++] = TempFileHandles[PeimIndex];
557 TempFileHandles[PeimIndex] =
NULL;
564 Private->AprioriCount = Index;
569 for (Index2 = 0; Index2 < PeimCount; Index2++) {
570 if (TempFileHandles[Index2] !=
NULL) {
571 CoreFileHandle->FvFileHandles[Index++] = TempFileHandles[Index2];
572 TempFileHandles[Index2] =
NULL;
576 ASSERT (Index == PeimCount);
586 CoreFileHandle->ScanFv =
TRUE;
587 Private->CurrentFvFileHandles = CoreFileHandle->FvFileHandles;
596#define MINIMUM_INITIAL_MEMORY_SIZE 0x10000
619 if ((PrivateData ==
NULL) || (ResourceHob ==
NULL)) {
626 for (Hob.Raw = PrivateData->HobList.Raw; !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob)) {
630 if (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_MEMORY_ALLOCATION) {
631 MemoryHob = Hob.MemoryAllocation;
661 UINT64 PeiMemorySize;
662 UINT64 TotalReservedMemorySize;
663 UINT64 MemoryRangeEnd;
676 CurrentResourceHob =
NULL;
678 NextResourceHob =
NULL;
680 TopLoadingAddress = 0;
682 CurrentHob.Raw = PrivateData->HobList.Raw;
683 PeiMemorySize = PrivateData->PhysicalMemoryLength;
688 TotalReservedMemorySize = MINIMUM_INITIAL_MEMORY_SIZE +
EFI_PAGES_TO_SIZE (
PcdGet32 (PcdLoadFixAddressRuntimeCodePageNumber));
693 TotalReservedMemorySize += PeiMemorySize;
695 DEBUG ((DEBUG_INFO,
"LOADING MODULE FIXED INFO: PcdLoadFixAddressRuntimeCodePageNumber= 0x%x.\n",
PcdGet32 (PcdLoadFixAddressRuntimeCodePageNumber)));
696 DEBUG ((DEBUG_INFO,
"LOADING MODULE FIXED INFO: PcdLoadFixAddressBootTimeCodePageNumber= 0x%x.\n",
PcdGet32 (PcdLoadFixAddressBootTimeCodePageNumber)));
697 DEBUG ((DEBUG_INFO,
"LOADING MODULE FIXED INFO: PcdLoadFixAddressPeiCodePageNumber= 0x%x.\n",
PcdGet32 (PcdLoadFixAddressPeiCodePageNumber)));
698 DEBUG ((DEBUG_INFO,
"LOADING MODULE FIXED INFO: Total Reserved Memory Size = 0x%lx.\n", TotalReservedMemorySize));
702 for (Hob.Raw = PrivateData->HobList.Raw; !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob)) {
706 if (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
707 ResourceHob = Hob.ResourceDescriptor;
711 if ((ResourceHob->
ResourceType != EFI_RESOURCE_SYSTEM_MEMORY) ||
717 for (NextHob.Raw = PrivateData->HobList.Raw; !END_OF_HOB_LIST (NextHob); NextHob.Raw = GET_NEXT_HOB (NextHob)) {
718 if (NextHob.Raw == Hob.Raw) {
725 if (GET_HOB_TYPE (NextHob) == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
726 NextResourceHob = NextHob.ResourceDescriptor;
731 if ((NextResourceHob->
ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) &&
754 GET_HOB_TYPE (NextHob) = EFI_HOB_TYPE_UNUSED;
766 for (Hob.Raw = PrivateData->HobList.Raw; !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob)) {
770 if (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_MEMORY_ALLOCATION) {
771 MemoryHob = Hob.MemoryAllocation;
772 for (NextHob.Raw = PrivateData->HobList.Raw; !END_OF_HOB_LIST (NextHob); NextHob.Raw = GET_NEXT_HOB (NextHob)) {
776 if (GET_HOB_TYPE (NextHob) == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
777 NextResourceHob = NextHob.ResourceDescriptor;
796 EFI_RESOURCE_SYSTEM_MEMORY,
805 EFI_RESOURCE_SYSTEM_MEMORY,
824 if ((INT64)
PcdGet64 (PcdLoadModuleAtFixAddressEnable) > 0 ) {
829 DEBUG ((DEBUG_INFO,
"LOADING MODULE FIXED INFO: Loading module at fixed absolute address.\n"));
833 if ((TopLoadingAddress & EFI_PAGE_MASK) != 0) {
834 DEBUG ((DEBUG_INFO,
"LOADING MODULE FIXED ERROR:Top Address 0x%lx is invalid since top address should be page align. \n", TopLoadingAddress));
841 for (Hob.Raw = PrivateData->HobList.Raw; !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob)) {
845 if (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
846 ResourceHob = Hob.ResourceDescriptor;
850 if ((ResourceHob->
ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) &&
856 if ((ResourceHob->
PhysicalStart + TotalReservedMemorySize < TopLoadingAddress) &&
860 CurrentResourceHob = ResourceHob;
868 if (CurrentResourceHob !=
NULL) {
869 DEBUG ((DEBUG_INFO,
"LOADING MODULE FIXED INFO:Top Address 0x%lx is valid \n", TopLoadingAddress));
870 TopLoadingAddress += MINIMUM_INITIAL_MEMORY_SIZE;
872 DEBUG ((DEBUG_INFO,
"LOADING MODULE FIXED ERROR:Top Address 0x%lx is invalid \n", TopLoadingAddress));
873 DEBUG ((DEBUG_INFO,
"LOADING MODULE FIXED ERROR:The recommended Top Address for the platform is: \n"));
877 for (Hob.Raw = PrivateData->HobList.Raw; !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob)) {
881 if (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
882 ResourceHob = Hob.ResourceDescriptor;
886 if ((ResourceHob->
ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) &&
896 (ResourceHob->
PhysicalStart + TotalReservedMemorySize -MINIMUM_INITIAL_MEMORY_SIZE),
918 for (Hob.Raw = PrivateData->HobList.Raw; !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob)) {
922 if (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_RESOURCE_DESCRIPTOR) {
923 ResourceHob = Hob.ResourceDescriptor;
927 if ((ResourceHob->
ResourceType == EFI_RESOURCE_SYSTEM_MEMORY) &&
935 CurrentResourceHob = ResourceHob;
943 if (CurrentResourceHob ==
NULL) {
944 DEBUG ((DEBUG_INFO,
"LOADING MODULE FIXED ERROR:The System Memory is too small\n"));
955 if (CurrentResourceHob !=
NULL) {
960 EFI_RESOURCE_SYSTEM_MEMORY,
962 EFI_RESOURCE_ATTRIBUTE_PRESENT |
963 EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
964 EFI_RESOURCE_ATTRIBUTE_TESTED |
965 EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
966 EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |
967 EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |
968 EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE
970 (TopLoadingAddress - TotalReservedMemorySize),
971 TotalReservedMemorySize
976 if (CurrentResourceHob->
PhysicalStart < TopLoadingAddress - TotalReservedMemorySize) {
978 EFI_RESOURCE_SYSTEM_MEMORY,
980 EFI_RESOURCE_ATTRIBUTE_PRESENT |
981 EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
982 EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
983 EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |
984 EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |
985 EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE
988 (TopLoadingAddress - TotalReservedMemorySize - CurrentResourceHob->
PhysicalStart)
994 EFI_RESOURCE_SYSTEM_MEMORY,
996 EFI_RESOURCE_ATTRIBUTE_PRESENT |
997 EFI_RESOURCE_ATTRIBUTE_INITIALIZED |
998 EFI_RESOURCE_ATTRIBUTE_UNCACHEABLE |
999 EFI_RESOURCE_ATTRIBUTE_WRITE_COMBINEABLE |
1000 EFI_RESOURCE_ATTRIBUTE_WRITE_THROUGH_CACHEABLE |
1001 EFI_RESOURCE_ATTRIBUTE_WRITE_BACK_CACHEABLE
1011 GET_HOB_TYPE (CurrentHob) = EFI_HOB_TYPE_UNUSED;
1017 PrivateData->LoadModuleAtFixAddressTopAddress = TopLoadingAddress - MINIMUM_INITIAL_MEMORY_SIZE;
1018 DEBUG ((DEBUG_INFO,
"LOADING MODULE FIXED INFO: Top address = 0x%lx\n", PrivateData->LoadModuleAtFixAddressTopAddress));
1022 PrivateData->PhysicalMemoryBegin = TopLoadingAddress - TotalReservedMemorySize;
1023 PrivateData->FreePhysicalMemoryTop = PrivateData->PhysicalMemoryBegin + PeiMemorySize;
1063 VOID *LoadFixPeiCodeBegin;
1066 UINT64 NewStackSize;
1070 BOOLEAN StackOffsetPositive;
1072 UINTN TemporaryRamSize;
1073 UINTN TemporaryStackSize;
1074 VOID *TemporaryStackBase;
1075 UINTN PeiTemporaryRamSize;
1076 VOID *PeiTemporaryRamBase;
1081 UINTN HeapTemporaryRamSize;
1090 if (Private->SwitchStackSignal) {
1096 UINT32 *StackPointer;
1099 for ( StackPointer = (UINT32 *)SecCoreData->StackBase;
1100 (StackPointer < (UINT32 *)((
UINTN)SecCoreData->StackBase + SecCoreData->StackSize)) \
1101 && (*StackPointer ==
PcdGet32 (PcdInitValueInTempStack));
1106 DEBUG ((DEBUG_INFO,
"Temp Stack : BaseAddress=0x%p Length=0x%X\n", SecCoreData->StackBase, (UINT32)SecCoreData->StackSize));
1107 DEBUG ((DEBUG_INFO,
"Temp Heap : BaseAddress=0x%p Length=0x%X\n", SecCoreData->PeiTemporaryRamBase, (UINT32)SecCoreData->PeiTemporaryRamSize));
1108 DEBUG ((DEBUG_INFO,
"Total temporary memory: %d bytes.\n", (UINT32)SecCoreData->TemporaryRamSize));
1111 " temporary memory stack ever used: %d bytes.\n",
1112 (UINT32)(SecCoreData->StackSize - ((
UINTN)StackPointer - (
UINTN)SecCoreData->StackBase))
1116 " temporary memory heap used for HobList: %d bytes.\n",
1117 (UINT32)((
UINTN)Private->HobList.HandoffInformationTable->EfiFreeMemoryBottom - (
UINTN)Private->HobList.Raw)
1121 " temporary memory heap occupied by memory pages: %d bytes.\n",
1122 (UINT32)(
UINTN)(Private->HobList.HandoffInformationTable->EfiMemoryTop - Private->HobList.HandoffInformationTable->EfiFreeMemoryTop)
1124 for (Hob.Raw = Private->HobList.Raw; !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob)) {
1125 if (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_MEMORY_ALLOCATION) {
1128 "Memory Allocation 0x%08x 0x%0lx - 0x%0lx\n", \
1138 if ((
PcdGet64 (PcdLoadModuleAtFixAddressEnable) != 0) && (Private->HobList.HandoffInformationTable->BootMode != BOOT_ON_S3_RESUME)) {
1148 DEBUG ((DEBUG_INFO,
"LOADING MODULE FIXED INFO: PeiCodeBegin = 0x%lX, PeiCodeTop= 0x%lX\n", (UINT64)(
UINTN)LoadFixPeiCodeBegin, (UINT64)((
UINTN)LoadFixPeiCodeBegin +
PcdGet32 (PcdLoadFixAddressPeiCodePageNumber) * EFI_PAGE_SIZE)));
1159 NewStackSize =
RShiftU64 (Private->PhysicalMemoryLength, 1);
1160 NewStackSize =
ALIGN_VALUE (NewStackSize, EFI_PAGE_SIZE);
1161 NewStackSize =
MIN (
PcdGet32 (PcdPeiCoreMaxPeiStackSize), NewStackSize);
1162 DEBUG ((DEBUG_INFO,
"Old Stack size %d, New stack size %d\n", (UINT32)SecCoreData->StackSize, (UINT32)NewStackSize));
1163 ASSERT (NewStackSize >= SecCoreData->StackSize);
1169 TopOfOldStack = (
UINTN)SecCoreData->StackBase + SecCoreData->StackSize;
1170 TopOfNewStack = Private->PhysicalMemoryBegin + NewStackSize;
1171 if (TopOfNewStack >= TopOfOldStack) {
1172 StackOffsetPositive =
TRUE;
1173 StackOffset = (
UINTN)(TopOfNewStack - TopOfOldStack);
1175 StackOffsetPositive =
FALSE;
1176 StackOffset = (
UINTN)(TopOfOldStack - TopOfNewStack);
1179 Private->StackOffsetPositive = StackOffsetPositive;
1180 Private->StackOffset = StackOffset;
1185 DEBUG ((DEBUG_INFO,
"Stack Hob: BaseAddress=0x%lX Length=0x%lX\n", TopOfNewStack - NewStackSize, NewStackSize));
1192 TemporaryRamSize = SecCoreData->TemporaryRamSize;
1193 TemporaryStackSize = SecCoreData->StackSize;
1194 TemporaryStackBase = SecCoreData->StackBase;
1195 PeiTemporaryRamSize = SecCoreData->PeiTemporaryRamSize;
1196 PeiTemporaryRamBase = SecCoreData->PeiTemporaryRamBase;
1202 &gEfiTemporaryRamSupportPpiGuid,
1205 (
VOID **)&TemporaryRamSupportPpi
1207 if (!EFI_ERROR (Status)) {
1211 BaseOfNewHeap = TopOfNewStack;
1212 if (BaseOfNewHeap >= (
UINTN)SecCoreData->PeiTemporaryRamBase) {
1213 Private->HeapOffsetPositive =
TRUE;
1214 Private->HeapOffset = (
UINTN)(BaseOfNewHeap - (
UINTN)SecCoreData->PeiTemporaryRamBase);
1216 Private->HeapOffsetPositive =
FALSE;
1217 Private->HeapOffset = (
UINTN)((
UINTN)SecCoreData->PeiTemporaryRamBase - BaseOfNewHeap);
1220 DEBUG ((DEBUG_INFO,
"Heap Offset = 0x%lX Stack Offset = 0x%lX\n", (UINT64)Private->HeapOffset, (UINT64)Private->StackOffset));
1225 if (StackOffsetPositive) {
1239 TemporaryRamSupportPpi->TemporaryRamMigration (
1271 BaseOfNewHeap = TopOfNewStack;
1272 HoleMemBase = TopOfNewStack;
1273 HoleMemSize = TemporaryRamSize - PeiTemporaryRamSize - TemporaryStackSize;
1274 if (HoleMemSize != 0) {
1278 BaseOfNewHeap =
ALIGN_VALUE (BaseOfNewHeap + HoleMemSize, 8);
1281 if (BaseOfNewHeap >= (
UINTN)SecCoreData->PeiTemporaryRamBase) {
1282 Private->HeapOffsetPositive =
TRUE;
1283 Private->HeapOffset = (
UINTN)(BaseOfNewHeap - (
UINTN)SecCoreData->PeiTemporaryRamBase);
1285 Private->HeapOffsetPositive =
FALSE;
1286 Private->HeapOffset = (
UINTN)((
UINTN)SecCoreData->PeiTemporaryRamBase - BaseOfNewHeap);
1289 DEBUG ((DEBUG_INFO,
"Heap Offset = 0x%lX Stack Offset = 0x%lX\n", (UINT64)Private->HeapOffset, (UINT64)Private->StackOffset));
1294 HeapTemporaryRamSize = (
UINTN)(Private->HobList.HandoffInformationTable->EfiFreeMemoryBottom - Private->HobList.HandoffInformationTable->EfiMemoryBottom);
1295 ASSERT (BaseOfNewHeap + HeapTemporaryRamSize <= Private->FreePhysicalMemoryTop);
1296 CopyMem ((UINT8 *)(
UINTN)BaseOfNewHeap, PeiTemporaryRamBase, HeapTemporaryRamSize);
1301 CopyMem ((UINT8 *)(
UINTN)(TopOfNewStack - TemporaryStackSize), TemporaryStackBase, TemporaryStackSize);
1306 if (HoleMemSize != 0) {
1310 if (PeiTemporaryRamBase < TemporaryStackBase) {
1312 TempSize1 = PeiTemporaryRamSize;
1314 TempSize2 = TemporaryStackSize;
1317 TempSize1 = TemporaryStackSize;
1319 TempSize2 = PeiTemporaryRamSize;
1322 if (TemporaryRamBase < TempBase1) {
1323 Private->HoleData[0].Base = TemporaryRamBase;
1324 Private->HoleData[0].Size = (
UINTN)(TempBase1 - TemporaryRamBase);
1327 if (TempBase1 + TempSize1 < TempBase2) {
1328 Private->HoleData[1].Base = TempBase1 + TempSize1;
1329 Private->HoleData[1].Size = (
UINTN)(TempBase2 - TempBase1 - TempSize1);
1332 if (TempBase2 + TempSize2 < TemporaryRamBase + TemporaryRamSize) {
1333 Private->HoleData[2].Base = TempBase2 + TempSize2;
1334 Private->HoleData[2].Size = (
UINTN)(TemporaryRamBase + TemporaryRamSize - TempBase2 - TempSize2);
1340 for (Index = 0; Index < HOLE_MAX_NUMBER; Index++) {
1341 if (Private->HoleData[Index].Size > 0) {
1342 if (HoleMemBase > Private->HoleData[Index].Base) {
1343 Private->HoleData[Index].OffsetPositive =
TRUE;
1344 Private->HoleData[Index].Offset = (
UINTN)(HoleMemBase - Private->HoleData[Index].Base);
1346 Private->HoleData[Index].OffsetPositive =
FALSE;
1347 Private->HoleData[Index].Offset = (
UINTN)(Private->HoleData[Index].Base - HoleMemBase);
1351 HoleMemBase = HoleMemBase + Private->HoleData[Index].Size;
1361 (
VOID *)SecCoreData,
1400 ASSERT (!IS_FFS_FILE2 (FileHeader));
1402 ImageAddress =
NULL;
1404 if (ImageAddress !=
NULL) {
1406 AsciiString = PeCoffLoaderGetPdbPointer (ImageAddress);
1407 for (Index = 0; AsciiString[Index] != 0; Index++) {
1408 if ((AsciiString[Index] ==
'\\') || (AsciiString[Index] ==
'/')) {
1409 AsciiString = AsciiString + Index + 1;
1411 }
else if (AsciiString[Index] ==
'.') {
1412 AsciiString[Index] = 0;
1416 DEBUG ((DEBUG_VERBOSE,
"%a", AsciiString));
1443 UINTN *NumberOfEntries;
1444 UINTN *CallbackEntry;
1448 while (Hob.Raw !=
NULL) {
1449 NumberOfEntries = GET_GUID_HOB_DATA (Hob);
1450 CallbackEntry = NumberOfEntries + 1;
1451 for (Index = 0; Index < *NumberOfEntries; Index++) {
1452 if (((
VOID *)CallbackEntry[Index]) !=
NULL) {
1453 if ((CallbackEntry[Index] >= OrgFvHandle) && (CallbackEntry[Index] < (OrgFvHandle + FvSize))) {
1456 "Migrating CallbackEntry[%Lu] from 0x%0*Lx to ",
1458 (
sizeof CallbackEntry[Index]) * 2,
1459 (UINT64)CallbackEntry[Index]
1461 if (OrgFvHandle > FvHandle) {
1462 CallbackEntry[Index] = CallbackEntry[Index] - (OrgFvHandle - FvHandle);
1464 CallbackEntry[Index] = CallbackEntry[Index] + (FvHandle - OrgFvHandle);
1470 (
sizeof CallbackEntry[Index]) * 2,
1471 (UINT64)CallbackEntry[Index]
1477 Hob.Raw = GET_NEXT_HOB (Hob);
1504 volatile UINTN FileIndex;
1508 if ((Private ==
NULL) || (FvIndex >= Private->FvCount)) {
1509 return EFI_INVALID_PARAMETER;
1512 if (Private->Fv[FvIndex].ScanFv) {
1513 for (FileIndex = 0; FileIndex < Private->Fv[FvIndex].PeimCount; FileIndex++) {
1514 if (Private->Fv[FvIndex].FvFileHandles[FileIndex] !=
NULL) {
1515 FileHandle = Private->Fv[FvIndex].FvFileHandles[FileIndex];
1519 DEBUG ((DEBUG_VERBOSE,
" Migrating FileHandle %2d ", FileIndex));
1520 Status =
MigratePeim (FileHandle, MigratedFileHandle);
1521 DEBUG ((DEBUG_VERBOSE,
"\n"));
1524 if (!EFI_ERROR (Status)) {
1525 Private->Fv[FvIndex].FvFileHandles[FileIndex] = MigratedFileHandle;
1526 if (FvIndex == Private->CurrentPeimFvCount) {
1527 Private->CurrentFvFileHandles[FileIndex] = MigratedFileHandle;
1557 volatile UINTN FvIndex;
1558 volatile UINTN FvChildIndex;
1559 UINTN ChildFvOffset;
1572 UINT32 FvMigrationFlags;
1576 ASSERT (Private->PeiMemoryInstalled);
1578 DEBUG ((DEBUG_VERBOSE,
"Beginning evacuation of content in temporary RAM.\n"));
1583 FvMigrationFlags = FLAGS_FV_RAW_DATA_COPY;
1592 PeiCoreFvHandle.FvHandle = (
EFI_PEI_FV_HANDLE)SecCoreData->BootFirmwareVolumeBase;
1595 if (Private->PeimDispatcherReenter) {
1599 for (FvIndex = 0; FvIndex < Private->FvCount; FvIndex++) {
1600 if (Private->Fv[FvIndex].FvHandle == PeiCoreFvHandle.FvHandle) {
1612 if (Hob.Raw !=
NULL) {
1613 MigrationInfo = GET_GUID_HOB_DATA (Hob);
1615 MigrationInfo =
NULL;
1618 for (FvIndex = 0; FvIndex < Private->FvCount; FvIndex++) {
1619 FvHeader = Private->Fv[FvIndex].FvHeader;
1620 ASSERT (FvHeader !=
NULL);
1621 ASSERT (FvIndex < Private->FvCount);
1623 DEBUG ((DEBUG_VERBOSE,
"FV[%02d] at 0x%x.\n", FvIndex, (
UINTN)FvHeader));
1631 if ((MigrationInfo ==
NULL) || (MigrationInfo->MigrateAll ==
TRUE)) {
1632 if (!Private->PeimDispatcherReenter) {
1640 for (Index = 0; Index < MigrationInfo->ToMigrateFvCount; Index++) {
1642 if (ToMigrateFvInfo->FvOrgBaseOnTempRam == (UINT32)(
UINTN)FvHeader) {
1646 FvMigrationFlags = ToMigrateFvInfo->FvMigrationFlags;
1651 if ((Index == MigrationInfo->ToMigrateFvCount) ||
1652 ((!Private->PeimDispatcherReenter) &&
1653 (((FvMigrationFlags & FLAGS_FV_MIGRATE_BEFORE_PEI_CORE_REENTRY) == 0) ||
1654 (FvHeader == PeiCoreFvHandle.FvHandle))))
1681 " Migrating FV[%d] from 0x%08X to 0x%08X\n",
1684 (
UINTN)MigratedFvHeader
1691 MigratedFvInfo.FvOrgBase = (UINT32)(
UINTN)FvHeader;
1692 MigratedFvInfo.FvNewBase = (UINT32)(
UINTN)MigratedFvHeader;
1693 MigratedFvInfo.FvDataBase = 0;
1694 MigratedFvInfo.FvLength = (UINT32)(
UINTN)FvHeader->FvLength;
1700 if ((FvMigrationFlags & FLAGS_FV_RAW_DATA_COPY) == FLAGS_FV_RAW_DATA_COPY) {
1712 MigratedFvInfo.FvDataBase = (UINT32)(
UINTN)RawDataFvHeader;
1715 BuildGuidDataHob (&gEdkiiMigratedFvInfoGuid, &MigratedFvInfo,
sizeof (MigratedFvInfo));
1720 for (FvChildIndex = FvIndex; FvChildIndex < Private->FvCount; FvChildIndex++) {
1721 ChildFvHeader = Private->Fv[FvChildIndex].FvHeader;
1724 (((
UINTN)ChildFvHeader + ChildFvHeader->
FvLength) < ((
UINTN)FvHeader) + FvHeader->FvLength)
1727 DEBUG ((DEBUG_VERBOSE,
" Child FV[%02d] is being migrated.\n", FvChildIndex));
1728 ChildFvOffset = (
UINTN)ChildFvHeader - (
UINTN)FvHeader;
1729 DEBUG ((DEBUG_VERBOSE,
" Child FV offset = 0x%x.\n", ChildFvOffset));
1731 Private->Fv[FvChildIndex].FvHeader = MigratedChildFvHeader;
1733 DEBUG ((DEBUG_VERBOSE,
" Child migrated FV header at 0x%x.\n", (
UINTN)MigratedChildFvHeader));
1740 (
UINTN)ChildFvHeader,
1741 (
UINTN)MigratedChildFvHeader,
1742 (
UINTN)ChildFvHeader->FvLength - 1
1746 (
UINTN)ChildFvHeader,
1747 (
UINTN)MigratedChildFvHeader,
1748 (
UINTN)ChildFvHeader->FvLength - 1
1755 Private->Fv[FvIndex].FvHeader = MigratedFvHeader;
1764 (
UINTN)MigratedFvHeader,
1765 (
UINTN)FvHeader->FvLength - 1
1770 (
UINTN)MigratedFvHeader,
1771 (
UINTN)FvHeader->FvLength - 1
1803 UINT32 AuthenticationState;
1806 UINTN SaveCurrentPeimCount;
1807 UINTN SaveCurrentFvCount;
1815 PeimEntryPoint =
NULL;
1816 PeimFileHandle =
NULL;
1819 if (Private->DelayedDispatchTable ==
NULL) {
1821 if (GuidHob !=
NULL) {
1825 Private->DelayedDispatchTable =
BuildGuidHob (&gEfiDelayedDispatchTableGuid, TableSize);
1826 if (Private->DelayedDispatchTable !=
NULL) {
1827 ZeroMem (Private->DelayedDispatchTable, TableSize);
1829 if (EFI_ERROR (Status)) {
1830 DEBUG ((DEBUG_ERROR,
"%a Failed to install Delayed Dispatch PPI: %r!\n", __func__, Status));
1834 if (EFI_ERROR (Status)) {
1835 DEBUG ((DEBUG_ERROR,
"%a Failed to notify Delayed Dispatch on End of Pei: %r!\n", __func__, Status));
1843 if ((Private->PeiMemoryInstalled) &&
1844 (
PcdGetBool (PcdMigrateTemporaryRamFirmwareVolumes) ||
1845 (Private->HobList.HandoffInformationTable->BootMode != BOOT_ON_S3_RESUME) ||
1853 SaveCurrentPeimCount = Private->CurrentPeimCount;
1854 SaveCurrentFvCount = Private->CurrentPeimFvCount;
1855 SaveCurrentFileHandle = Private->CurrentFileHandle;
1857 for (Index1 = 0; Index1 < Private->FvCount; Index1++) {
1858 for (Index2 = 0; Index2 < Private->Fv[Index1].PeimCount; Index2++) {
1859 if (Private->Fv[Index1].PeimState[Index2] == PEIM_STATE_REGISTER_FOR_SHADOW) {
1860 PeimFileHandle = Private->Fv[Index1].FvFileHandles[Index2];
1861 Private->CurrentFileHandle = PeimFileHandle;
1862 Private->CurrentPeimFvCount = Index1;
1863 Private->CurrentPeimCount = Index2;
1867 PEIM_STATE_REGISTER_FOR_SHADOW,
1869 &AuthenticationState
1875 Private->Fv[Index1].PeimState[Index2]++;
1895 Private->CurrentFileHandle = SaveCurrentFileHandle;
1896 Private->CurrentPeimFvCount = SaveCurrentFvCount;
1897 Private->CurrentPeimCount = SaveCurrentPeimCount;
1912 if (!Private->PeimDispatcherReenter) {
1913 Private->PeimNeedingDispatch =
FALSE;
1914 Private->PeimDispatchOnThisPass =
FALSE;
1916 Private->PeimDispatcherReenter =
FALSE;
1919 for (FvCount = Private->CurrentPeimFvCount; FvCount < Private->FvCount; FvCount++) {
1921 if (CoreFvHandle ==
NULL) {
1922 ASSERT (CoreFvHandle !=
NULL);
1929 if (CoreFvHandle->FvPpi ==
NULL) {
1933 Private->CurrentPeimFvCount = FvCount;
1935 if (Private->CurrentPeimCount == 0) {
1947 for (PeimCount = Private->CurrentPeimCount;
1948 PeimCount < Private->Fv[FvCount].PeimCount;
1951 Private->CurrentPeimCount = PeimCount;
1952 PeimFileHandle = Private->CurrentFileHandle = Private->CurrentFvFileHandles[PeimCount];
1954 if (Private->Fv[FvCount].PeimState[PeimCount] == PEIM_STATE_NOT_DISPATCHED) {
1956 Private->PeimNeedingDispatch =
TRUE;
1958 Status = CoreFvHandle->FvPpi->GetFileInfo (CoreFvHandle->FvPpi, PeimFileHandle, &FvFileInfo);
1960 if (FvFileInfo.
FileType == EFI_FV_FILETYPE_FIRMWARE_VOLUME_IMAGE) {
1964 Status =
ProcessFvFile (Private, &Private->Fv[FvCount], PeimFileHandle);
1969 Private->Fv[FvCount].PeimState[PeimCount]++;
1970 Private->PeimDispatchOnThisPass =
TRUE;
1977 Private->PeimNeedingDispatch =
TRUE;
1986 PEIM_STATE_NOT_DISPATCHED,
1988 &AuthenticationState
1999 (EFI_SOFTWARE_PEI_CORE | EFI_SW_PC_INIT_BEGIN),
2000 (
VOID *)(&PeimFileHandle),
2001 sizeof (PeimFileHandle)
2004 Status =
VerifyPeim (Private, CoreFvHandle->FvHandle, PeimFileHandle, AuthenticationState);
2005 if (Status != EFI_SECURITY_VIOLATION) {
2009 Private->Fv[FvCount].PeimState[PeimCount]++;
2015 Private->PeimDispatchOnThisPass =
TRUE;
2022 Private->PeimNeedingDispatch =
TRUE;
2027 (EFI_SOFTWARE_PEI_CORE | EFI_SW_PC_INIT_END),
2028 (
VOID *)(&PeimFileHandle),
2029 sizeof (PeimFileHandle)
2050 if ((Private->PeiMemoryInstalled) && (Private->Fv[FvCount].PeimState[PeimCount] == PEIM_STATE_REGISTER_FOR_SHADOW) && \
2051 (
PcdGetBool (PcdMigrateTemporaryRamFirmwareVolumes) ||
2052 (Private->HobList.HandoffInformationTable->BootMode != BOOT_ON_S3_RESUME) ||
2061 if ((Private->HobList.HandoffInformationTable->BootMode != BOOT_ON_S3_RESUME) && !
PcdGetBool (PcdShadowPeimOnBoot) &&
2062 !
PcdGetBool (PcdMigrateTemporaryRamFirmwareVolumes))
2070 PEIM_STATE_REGISTER_FOR_SHADOW,
2072 &AuthenticationState
2079 ASSERT (PeimEntryPoint !=
NULL);
2086 Private->Fv[FvCount].PeimState[PeimCount]++;
2098 if (Private->DelayedDispatchTable !=
NULL) {
2109 Private->CurrentFileHandle =
NULL;
2110 Private->CurrentPeimCount = 0;
2111 Private->CurrentFvFileHandles =
NULL;
2112 Private->AprioriCount = 0;
2119 Private->CurrentPeimFvCount = 0;
2131 }
while ((Private->PeimNeedingDispatch && Private->PeimDispatchOnThisPass) ||
2132 (Private->DelayedDispatchTable->Count > 0));
2155 if (OldCoreData ==
NULL) {
2156 PrivateData->PeimDispatcherReenter =
FALSE;
2190 if (EFI_ERROR (Status)) {
2191 DEBUG ((DEBUG_DISPATCH,
"Evaluate PEI DEPEX for FFS(Unknown)\n"));
2196 if (PeimCount < Private->AprioriCount) {
2200 DEBUG ((DEBUG_DISPATCH,
" RESULT = TRUE (Apriori)\n"));
2208 EFI_SECTION_PEI_DEPEX,
2213 if (EFI_ERROR (Status)) {
2217 DEBUG ((DEBUG_DISPATCH,
" RESULT = TRUE (No DEPEX)\n"));
2248 if (Private->CurrentFileHandle != FileHandle) {
2252 return EFI_NOT_FOUND;
2255 if (Private->
Fv[Private->CurrentPeimFvCount].PeimState[Private->CurrentPeimCount] >= PEIM_STATE_REGISTER_FOR_SHADOW) {
2259 return EFI_ALREADY_STARTED;
2262 Private->
Fv[Private->CurrentPeimFvCount].PeimState[Private->CurrentPeimCount] = PEIM_STATE_REGISTER_FOR_SHADOW;
VOID EFIAPI MigratePeiServicesTablePointer(VOID)
CONST EFI_PEI_SERVICES **EFIAPI GetPeiServicesTablePointer(VOID)
VOID *EFIAPI GetFirstGuidHob(IN CONST EFI_GUID *Guid)
VOID *EFIAPI BuildGuidDataHob(IN CONST EFI_GUID *Guid, IN VOID *Data, IN UINTN DataLength)
VOID EFIAPI BuildResourceDescriptorHob(IN EFI_RESOURCE_TYPE ResourceType, IN EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttribute, IN EFI_PHYSICAL_ADDRESS PhysicalStart, IN UINT64 NumberOfBytes)
VOID *EFIAPI BuildGuidHob(IN CONST EFI_GUID *Guid, IN UINTN DataLength)
VOID *EFIAPI GetNextGuidHob(IN CONST EFI_GUID *Guid, IN CONST VOID *HobStart)
VOID EFIAPI BuildStackHob(IN EFI_PHYSICAL_ADDRESS BaseAddress, IN UINT64 Length)
VOID EFIAPI SwitchStack(IN SWITCH_STACK_ENTRY_POINT EntryPoint, IN VOID *Context1 OPTIONAL, IN VOID *Context2 OPTIONAL, IN VOID *NewStack,...)
UINT64 EFIAPI RShiftU64(IN UINT64 Operand, IN UINTN Count)
VOID(EFIAPI * SWITCH_STACK_ENTRY_POINT)(IN VOID *Context1 OPTIONAL, IN VOID *Context2 OPTIONAL)
VOID *EFIAPI ScanGuid(IN CONST VOID *Buffer, IN UINTN Length, IN CONST GUID *Guid)
VOID *EFIAPI CopyMem(OUT VOID *DestinationBuffer, IN CONST VOID *SourceBuffer, IN UINTN Length)
BOOLEAN EFIAPI CompareGuid(IN CONST GUID *Guid1, IN CONST GUID *Guid2)
GUID *EFIAPI CopyGuid(OUT GUID *DestinationGuid, IN CONST GUID *SourceGuid)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
BOOLEAN EFIAPI IsZeroGuid(IN CONST GUID *Guid)
EFI_STATUS PeiLoadImage(IN CONST EFI_PEI_SERVICES **PeiServices, IN EFI_PEI_FILE_HANDLE FileHandle, IN UINT8 PeimState, OUT EFI_PHYSICAL_ADDRESS *EntryPoint, OUT UINT32 *AuthenticationState)
EFI_STATUS LoadAndRelocatePeCoffImageInPlace(IN VOID *Pe32Data, IN VOID *ImageAddress)
EFI_STATUS PeiGetPe32Data(IN EFI_PEI_FILE_HANDLE FileHandle, OUT VOID **Pe32Data)
EFI_STATUS EFIAPI ReportStatusCode(IN EFI_STATUS_CODE_TYPE Type, IN EFI_STATUS_CODE_VALUE Value)
VOID *EFIAPI AllocateZeroPool(IN UINTN AllocationSize)
EFI_STATUS EFIAPI PeiServicesFfsGetFileInfo(IN CONST EFI_PEI_FILE_HANDLE FileHandle, OUT EFI_FV_FILE_INFO *FileInfo)
EFI_STATUS EFIAPI PeiServicesFfsFindSectionData(IN EFI_SECTION_TYPE SectionType, IN EFI_PEI_FILE_HANDLE FileHandle, OUT VOID **SectionData)
EFI_STATUS EFIAPI PeiServicesLocatePpi(IN CONST EFI_GUID *Guid, IN UINTN Instance, IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor, IN OUT VOID **Ppi)
EFI_STATUS EFIAPI PeiServicesNotifyPpi(IN CONST EFI_PEI_NOTIFY_DESCRIPTOR *NotifyList)
EFI_STATUS EFIAPI PeiServicesAllocatePages(IN EFI_MEMORY_TYPE MemoryType, IN UINTN Pages, OUT EFI_PHYSICAL_ADDRESS *Memory)
EFI_STATUS EFIAPI PeiServicesInstallPpi(IN CONST EFI_PEI_PPI_DESCRIPTOR *PpiList)
BOOLEAN PeimDispatchReadiness(IN EFI_PEI_SERVICES **PeiServices, IN VOID *DependencyExpression)
VOID PeiDispatcher(IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData, IN PEI_CORE_INSTANCE *Private)
EFI_STATUS EFIAPI PeiDelayedDispatchRegister(IN EFI_DELAYED_DISPATCH_PPI *This, IN EFI_DELAYED_DISPATCH_FUNCTION Function, IN UINT64 Context, IN EFI_GUID *DelayedGroupId OPTIONAL, IN UINT32 Delay)
VOID InitializeDispatcherData(IN PEI_CORE_INSTANCE *PrivateData, IN PEI_CORE_INSTANCE *OldCoreData, IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData)
EFI_STATUS EFIAPI MigratePeim(IN EFI_PEI_FILE_HANDLE FileHandle, IN EFI_PEI_FILE_HANDLE MigratedFileHandle)
VOID ConvertStatusCodeCallbacks(IN UINTN OrgFvHandle, IN UINTN FvHandle, IN UINTN FvSize)
EFI_STATUS EFIAPI PeiDelayedDispatchOnEndOfPei(IN EFI_PEI_SERVICES **PeiServices, IN EFI_PEI_NOTIFY_DESCRIPTOR *NotifyDesc, IN VOID *Ppi)
VOID PeiLoadFixAddressHook(IN PEI_CORE_INSTANCE *PrivateData)
VOID DiscoverPeimsAndOrderWithApriori(IN PEI_CORE_INSTANCE *Private, IN PEI_CORE_FV_HANDLE *CoreFileHandle)
VOID EFIAPI PeiCoreEntry(IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData, IN PEI_CORE_INSTANCE *Private)
EFI_STATUS EFIAPI MigratePeimsInFv(IN PEI_CORE_INSTANCE *Private, IN UINTN FvIndex, IN UINTN OrgFvHandle, IN UINTN FvHandle)
BOOLEAN DelayedDispatchDispatcher(IN DELAYED_DISPATCH_TABLE *DelayedDispatchTable, IN EFI_GUID *DelayedGroupId OPTIONAL)
DELAYED_DISPATCH_TABLE * GetDelayedDispatchTable(VOID)
BOOLEAN PeiLoadFixAddressIsMemoryRangeAvailable(IN PEI_CORE_INSTANCE *PrivateData, IN EFI_HOB_RESOURCE_DESCRIPTOR *ResourceHob)
BOOLEAN DepexSatisfied(IN PEI_CORE_INSTANCE *Private, IN EFI_PEI_FILE_HANDLE FileHandle, IN UINTN PeimCount)
EFI_STATUS EFIAPI PeiDelayedDispatchWaitOnEvent(IN EFI_DELAYED_DISPATCH_PPI *This, IN EFI_GUID DelayedGroupId)
VOID PeiCheckAndSwitchStack(IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData, IN PEI_CORE_INSTANCE *Private)
EFI_STATUS EFIAPI PeiRegisterForShadow(IN EFI_PEI_FILE_HANDLE FileHandle)
EFI_STATUS EFIAPI EvacuateTempRam(IN PEI_CORE_INSTANCE *Private, IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData)
PEI_CORE_FV_HANDLE * FindNextCoreFvHandle(IN PEI_CORE_INSTANCE *Private, IN UINTN Instance)
VOID PeiReinitializeFv(IN PEI_CORE_INSTANCE *PrivateData)
VOID PeiInitializeFv(IN PEI_CORE_INSTANCE *PrivateData, IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData)
EFI_STATUS ProcessFvFile(IN PEI_CORE_INSTANCE *PrivateData, IN PEI_CORE_FV_HANDLE *ParentFvCoreHandle, IN EFI_PEI_FILE_HANDLE ParentFvFileHandle)
#define ALIGN_VALUE(Value, Alignment)
#define ASSERT_EFI_ERROR(StatusParameter)
#define DEBUG_CODE_BEGIN()
#define DEBUG(Expression)
#define REPORT_STATUS_CODE_WITH_EXTENDED_DATA(Type, Value, ExtendedData, ExtendedDataSize)
VOID(EFIAPI * EFI_DELAYED_DISPATCH_FUNCTION)(IN OUT UINT64 *Context, OUT UINT32 *NewDelay)
VOID ConvertFvHob(IN PEI_CORE_INSTANCE *PrivateData, IN UINTN OrgFvHandle, IN UINTN FvHandle)
VOID MigrateMemoryPages(IN PEI_CORE_INSTANCE *Private, IN BOOLEAN TemporaryRamMigrated)
#define PcdGet64(TokenName)
#define FixedPcdGet32(TokenName)
#define PcdGet32(TokenName)
#define PcdGetBool(TokenName)
EFI_STATUS EFIAPI PeiLocatePpi(IN CONST EFI_PEI_SERVICES **PeiServices, IN CONST EFI_GUID *Guid, IN UINTN Instance, IN OUT EFI_PEI_PPI_DESCRIPTOR **PpiDescriptor, IN OUT VOID **Ppi)
VOID ConvertPeiCorePpiPointers(IN PEI_CORE_INSTANCE *PrivateData, IN PEI_CORE_FV_HANDLE *CoreFvHandle)
VOID ProcessDispatchNotifyList(IN PEI_CORE_INSTANCE *PrivateData)
EFI_STATUS VerifyPeim(IN PEI_CORE_INSTANCE *PrivateData, IN EFI_PEI_FV_HANDLE VolumeHandle, IN EFI_PEI_FILE_HANDLE FileHandle, IN UINT32 AuthenticationStatus)
#define PEI_CORE_INTERNAL_FFS_FILE_DISPATCH_TYPE
VOID EFIAPI PeiCore(IN CONST EFI_SEC_PEI_HAND_OFF *SecCoreData, IN CONST EFI_PEI_PPI_DESCRIPTOR *PpiList, IN VOID *Data)
VOID ConvertPpiPointersFv(IN PEI_CORE_INSTANCE *PrivateData, IN UINTN OrgFvHandle, IN UINTN FvHandle, IN UINTN FvSize)
#define PEI_CORE_INSTANCE_FROM_PS_THIS(a)
EFI_STATUS(EFIAPI * EFI_PEIM_ENTRY_POINT2)(IN EFI_PEI_FILE_HANDLE FileHandle, IN CONST EFI_PEI_SERVICES **PeiServices)
VOID * EFI_PEI_FILE_HANDLE
#define EFI_PROGRESS_CODE
VOID *EFIAPI AllocatePool(IN UINTN AllocationSize)
VOID *EFIAPI AllocatePages(IN UINTN Pages)
EFI_FILE_INFO * FileInfo(IN EFI_FILE_HANDLE FHand)
RETURN_STATUS EFIAPI SafeUint64Add(IN UINT64 Augend, IN UINT64 Addend, OUT UINT64 *Result)
VOID EFIAPI Exit(IN EFI_STATUS Status)
UINT64 EFI_PHYSICAL_ADDRESS
#define EFI_PAGES_TO_SIZE(Pages)
#define EFI_SIZE_TO_PAGES(Size)
EFI_PHYSICAL_ADDRESS MemoryBaseAddress
EFI_MEMORY_TYPE MemoryType
EFI_HOB_MEMORY_ALLOCATION_HEADER AllocDescriptor
EFI_PHYSICAL_ADDRESS PhysicalStart
EFI_RESOURCE_TYPE ResourceType
EFI_RESOURCE_ATTRIBUTE_TYPE ResourceAttribute