Private->FreePhysicalMemoryTop = NewMemPagesBase;\r
}\r
\r
+/**\r
+ Removes any FV HOBs whose base address is not in PEI installed memory.\r
+\r
+ @param[in] Private Pointer to PeiCore's private data structure.\r
+\r
+**/\r
+VOID\r
+RemoveFvHobsInTemporaryMemory (\r
+ IN PEI_CORE_INSTANCE *Private\r
+ )\r
+{\r
+ EFI_PEI_HOB_POINTERS Hob;\r
+ EFI_HOB_FIRMWARE_VOLUME *FirmwareVolumeHob;\r
+\r
+ DEBUG ((DEBUG_INFO, "Removing FVs in FV HOB not already migrated to permanent memory.\n"));\r
+\r
+ for (Hob.Raw = GetHobList (); !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob)) {\r
+ if (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_FV || GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_FV2 || GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_FV3) {\r
+ FirmwareVolumeHob = Hob.FirmwareVolume;\r
+ DEBUG ((DEBUG_INFO, " Found FV HOB.\n"));\r
+ DEBUG ((\r
+ DEBUG_INFO,\r
+ " BA=%016lx L=%016lx\n",\r
+ FirmwareVolumeHob->BaseAddress,\r
+ FirmwareVolumeHob->Length\r
+ ));\r
+ if (\r
+ !(\r
+ ((EFI_PHYSICAL_ADDRESS) (UINTN) FirmwareVolumeHob->BaseAddress >= Private->PhysicalMemoryBegin) &&\r
+ (((EFI_PHYSICAL_ADDRESS) (UINTN) FirmwareVolumeHob->BaseAddress + (FirmwareVolumeHob->Length - 1)) < Private->FreePhysicalMemoryTop)\r
+ )\r
+ ) {\r
+ DEBUG ((DEBUG_INFO, " Removing FV HOB to an FV in T-RAM (was not migrated).\n"));\r
+ Hob.Header->HobType = EFI_HOB_TYPE_UNUSED;\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+/**\r
+ Migrate the base address in firmware volume allocation HOBs\r
+ from temporary memory to PEI installed memory.\r
+\r
+ @param[in] PrivateData Pointer to PeiCore's private data structure.\r
+ @param[in] OrgFvHandle Address of FV Handle in temporary memory.\r
+ @param[in] FvHandle Address of FV Handle in permanent memory.\r
+\r
+**/\r
+VOID\r
+ConvertFvHob (\r
+ IN PEI_CORE_INSTANCE *PrivateData,\r
+ IN UINTN OrgFvHandle,\r
+ IN UINTN FvHandle\r
+ )\r
+{\r
+ EFI_PEI_HOB_POINTERS Hob;\r
+ EFI_HOB_FIRMWARE_VOLUME *FirmwareVolumeHob;\r
+ EFI_HOB_FIRMWARE_VOLUME2 *FirmwareVolume2Hob;\r
+ EFI_HOB_FIRMWARE_VOLUME3 *FirmwareVolume3Hob;\r
+\r
+ DEBUG ((DEBUG_INFO, "Converting FVs in FV HOB.\n"));\r
+\r
+ for (Hob.Raw = GetHobList (); !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob)) {\r
+ if (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_FV) {\r
+ FirmwareVolumeHob = Hob.FirmwareVolume;\r
+ if (FirmwareVolumeHob->BaseAddress == OrgFvHandle) {\r
+ FirmwareVolumeHob->BaseAddress = FvHandle;\r
+ }\r
+ } else if (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_FV2) {\r
+ FirmwareVolume2Hob = Hob.FirmwareVolume2;\r
+ if (FirmwareVolume2Hob->BaseAddress == OrgFvHandle) {\r
+ FirmwareVolume2Hob->BaseAddress = FvHandle;\r
+ }\r
+ } else if (GET_HOB_TYPE (Hob) == EFI_HOB_TYPE_FV3) {\r
+ FirmwareVolume3Hob = Hob.FirmwareVolume3;\r
+ if (FirmwareVolume3Hob->BaseAddress == OrgFvHandle) {\r
+ FirmwareVolume3Hob->BaseAddress = FvHandle;\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
/**\r
Migrate MemoryBaseAddress in memory allocation HOBs\r
from the temporary memory to PEI installed memory.\r