X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdeModulePkg%2FCore%2FPei%2FMemory%2FMemoryServices.c;fp=MdeModulePkg%2FCore%2FPei%2FMemory%2FMemoryServices.c;h=3b2e15699fc3bf467cf7e60705b538ec2c193e98;hp=53c9eaceb05d8b733e5f1a2fd81a857bb32c79a0;hb=1436aea4d5707e672672a11bda72be2c63c936c3;hpb=7c7184e201a90a1d2376e615e55e3f4074731468 diff --git a/MdeModulePkg/Core/Pei/Memory/MemoryServices.c b/MdeModulePkg/Core/Pei/Memory/MemoryServices.c index 53c9eaceb0..3b2e15699f 100644 --- a/MdeModulePkg/Core/Pei/Memory/MemoryServices.c +++ b/MdeModulePkg/Core/Pei/Memory/MemoryServices.c @@ -27,22 +27,20 @@ InitializeMemoryServices ( IN PEI_CORE_INSTANCE *OldCoreData ) { - - PrivateData->SwitchStackSignal = FALSE; + PrivateData->SwitchStackSignal = FALSE; // // First entering PeiCore, following code will initialized some field // in PeiCore's private data according to hand off data from SEC core. // if (OldCoreData == NULL) { - PrivateData->PeiMemoryInstalled = FALSE; PrivateData->HobList.Raw = SecCoreData->PeiTemporaryRamBase; PeiCoreBuildHobHandoffInfoTable ( BOOT_WITH_FULL_CONFIGURATION, - (EFI_PHYSICAL_ADDRESS) (UINTN) SecCoreData->PeiTemporaryRamBase, - (UINTN) SecCoreData->PeiTemporaryRamSize + (EFI_PHYSICAL_ADDRESS)(UINTN)SecCoreData->PeiTemporaryRamBase, + (UINTN)SecCoreData->PeiTemporaryRamSize ); // @@ -78,7 +76,7 @@ PeiInstallPeiMemory ( IN UINT64 MemoryLength ) { - PEI_CORE_INSTANCE *PrivateData; + PEI_CORE_INSTANCE *PrivateData; DEBUG ((DEBUG_INFO, "PeiInstallPeiMemory MemoryBegin 0x%LX, MemoryLength 0x%LX\n", MemoryBegin, MemoryLength)); PrivateData = PEI_CORE_INSTANCE_FROM_PS_THIS (PeiServices); @@ -98,7 +96,7 @@ PeiInstallPeiMemory ( PrivateData->PhysicalMemoryLength = MemoryLength; PrivateData->FreePhysicalMemoryTop = MemoryBegin + MemoryLength; - PrivateData->SwitchStackSignal = TRUE; + PrivateData->SwitchStackSignal = TRUE; return EFI_SUCCESS; } @@ -113,25 +111,26 @@ PeiInstallPeiMemory ( **/ VOID MigrateMemoryPages ( - IN PEI_CORE_INSTANCE *Private, - IN BOOLEAN TemporaryRamMigrated + IN PEI_CORE_INSTANCE *Private, + IN BOOLEAN TemporaryRamMigrated ) { - EFI_PHYSICAL_ADDRESS NewMemPagesBase; - EFI_PHYSICAL_ADDRESS MemPagesBase; + EFI_PHYSICAL_ADDRESS NewMemPagesBase; + EFI_PHYSICAL_ADDRESS MemPagesBase; - Private->MemoryPages.Size = (UINTN) (Private->HobList.HandoffInformationTable->EfiMemoryTop - - Private->HobList.HandoffInformationTable->EfiFreeMemoryTop); + Private->MemoryPages.Size = (UINTN)(Private->HobList.HandoffInformationTable->EfiMemoryTop - + Private->HobList.HandoffInformationTable->EfiFreeMemoryTop); if (Private->MemoryPages.Size == 0) { // // No any memory page allocated in pre-memory phase. // return; } + Private->MemoryPages.Base = Private->HobList.HandoffInformationTable->EfiFreeMemoryTop; ASSERT (Private->MemoryPages.Size <= Private->FreePhysicalMemoryTop); - NewMemPagesBase = Private->FreePhysicalMemoryTop - Private->MemoryPages.Size; + NewMemPagesBase = Private->FreePhysicalMemoryTop - Private->MemoryPages.Size; NewMemPagesBase &= ~(UINT64)EFI_PAGE_MASK; ASSERT (NewMemPagesBase >= Private->PhysicalMemoryBegin); // @@ -148,6 +147,7 @@ MigrateMemoryPages ( } else { MemPagesBase -= Private->HeapOffset; } + CopyMem ((VOID *)(UINTN)NewMemPagesBase, (VOID *)(UINTN)MemPagesBase, Private->MemoryPages.Size); } else { CopyMem ((VOID *)(UINTN)NewMemPagesBase, (VOID *)(UINTN)Private->MemoryPages.Base, Private->MemoryPages.Size); @@ -155,13 +155,13 @@ MigrateMemoryPages ( if (NewMemPagesBase >= Private->MemoryPages.Base) { Private->MemoryPages.OffsetPositive = TRUE; - Private->MemoryPages.Offset = (UINTN)(NewMemPagesBase - Private->MemoryPages.Base); + Private->MemoryPages.Offset = (UINTN)(NewMemPagesBase - Private->MemoryPages.Base); } else { Private->MemoryPages.OffsetPositive = FALSE; - Private->MemoryPages.Offset = (UINTN)(Private->MemoryPages.Base - NewMemPagesBase); + Private->MemoryPages.Offset = (UINTN)(Private->MemoryPages.Base - NewMemPagesBase); } - DEBUG ((DEBUG_INFO, "Pages Offset = 0x%lX\n", (UINT64) Private->MemoryPages.Offset)); + DEBUG ((DEBUG_INFO, "Pages Offset = 0x%lX\n", (UINT64)Private->MemoryPages.Offset)); Private->FreePhysicalMemoryTop = NewMemPagesBase; } @@ -174,30 +174,31 @@ MigrateMemoryPages ( **/ VOID RemoveFvHobsInTemporaryMemory ( - IN PEI_CORE_INSTANCE *Private + IN PEI_CORE_INSTANCE *Private ) { - EFI_PEI_HOB_POINTERS Hob; - EFI_HOB_FIRMWARE_VOLUME *FirmwareVolumeHob; + EFI_PEI_HOB_POINTERS Hob; + EFI_HOB_FIRMWARE_VOLUME *FirmwareVolumeHob; DEBUG ((DEBUG_INFO, "Removing FVs in FV HOB not already migrated to permanent memory.\n")); for (Hob.Raw = GetHobList (); !END_OF_HOB_LIST (Hob); Hob.Raw = GET_NEXT_HOB (Hob)) { - 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) { + 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)) { FirmwareVolumeHob = Hob.FirmwareVolume; DEBUG ((DEBUG_INFO, " Found FV HOB.\n")); DEBUG (( - DEBUG_INFO, - " BA=%016lx L=%016lx\n", - FirmwareVolumeHob->BaseAddress, - FirmwareVolumeHob->Length - )); + DEBUG_INFO, + " BA=%016lx L=%016lx\n", + FirmwareVolumeHob->BaseAddress, + FirmwareVolumeHob->Length + )); if ( - !( - ((EFI_PHYSICAL_ADDRESS) (UINTN) FirmwareVolumeHob->BaseAddress >= Private->PhysicalMemoryBegin) && - (((EFI_PHYSICAL_ADDRESS) (UINTN) FirmwareVolumeHob->BaseAddress + (FirmwareVolumeHob->Length - 1)) < Private->FreePhysicalMemoryTop) + !( + ((EFI_PHYSICAL_ADDRESS)(UINTN)FirmwareVolumeHob->BaseAddress >= Private->PhysicalMemoryBegin) && + (((EFI_PHYSICAL_ADDRESS)(UINTN)FirmwareVolumeHob->BaseAddress + (FirmwareVolumeHob->Length - 1)) < Private->FreePhysicalMemoryTop) + ) ) - ) { + { DEBUG ((DEBUG_INFO, " Removing FV HOB to an FV in T-RAM (was not migrated).\n")); Hob.Header->HobType = EFI_HOB_TYPE_UNUSED; } @@ -216,15 +217,15 @@ RemoveFvHobsInTemporaryMemory ( **/ VOID ConvertFvHob ( - IN PEI_CORE_INSTANCE *PrivateData, - IN UINTN OrgFvHandle, - IN UINTN FvHandle + IN PEI_CORE_INSTANCE *PrivateData, + IN UINTN OrgFvHandle, + IN UINTN FvHandle ) { - EFI_PEI_HOB_POINTERS Hob; - EFI_HOB_FIRMWARE_VOLUME *FirmwareVolumeHob; - EFI_HOB_FIRMWARE_VOLUME2 *FirmwareVolume2Hob; - EFI_HOB_FIRMWARE_VOLUME3 *FirmwareVolume3Hob; + EFI_PEI_HOB_POINTERS Hob; + EFI_HOB_FIRMWARE_VOLUME *FirmwareVolumeHob; + EFI_HOB_FIRMWARE_VOLUME2 *FirmwareVolume2Hob; + EFI_HOB_FIRMWARE_VOLUME3 *FirmwareVolume3Hob; DEBUG ((DEBUG_INFO, "Converting FVs in FV HOB.\n")); @@ -257,13 +258,13 @@ ConvertFvHob ( **/ VOID ConvertMemoryAllocationHobs ( - IN PEI_CORE_INSTANCE *PrivateData + IN PEI_CORE_INSTANCE *PrivateData ) { - EFI_PEI_HOB_POINTERS Hob; - EFI_HOB_MEMORY_ALLOCATION *MemoryAllocationHob; - EFI_PHYSICAL_ADDRESS OldMemPagesBase; - UINTN OldMemPagesSize; + EFI_PEI_HOB_POINTERS Hob; + EFI_HOB_MEMORY_ALLOCATION *MemoryAllocationHob; + EFI_PHYSICAL_ADDRESS OldMemPagesBase; + UINTN OldMemPagesSize; if (PrivateData->MemoryPages.Size == 0) { // @@ -276,12 +277,13 @@ ConvertMemoryAllocationHobs ( OldMemPagesSize = PrivateData->MemoryPages.Size; MemoryAllocationHob = NULL; - Hob.Raw = GetFirstHob (EFI_HOB_TYPE_MEMORY_ALLOCATION); + Hob.Raw = GetFirstHob (EFI_HOB_TYPE_MEMORY_ALLOCATION); while (Hob.Raw != NULL) { - MemoryAllocationHob = (EFI_HOB_MEMORY_ALLOCATION *) Hob.Raw; + MemoryAllocationHob = (EFI_HOB_MEMORY_ALLOCATION *)Hob.Raw; if ((MemoryAllocationHob->AllocDescriptor.MemoryBaseAddress >= OldMemPagesBase) && (MemoryAllocationHob->AllocDescriptor.MemoryBaseAddress < (OldMemPagesBase + OldMemPagesSize)) - ) { + ) + { if (PrivateData->MemoryPages.OffsetPositive) { MemoryAllocationHob->AllocDescriptor.MemoryBaseAddress += PrivateData->MemoryPages.Offset; } else { @@ -306,22 +308,22 @@ ConvertMemoryAllocationHobs ( **/ VOID InternalBuildMemoryAllocationHob ( - IN EFI_PHYSICAL_ADDRESS BaseAddress, - IN UINT64 Length, - IN EFI_MEMORY_TYPE MemoryType + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN UINT64 Length, + IN EFI_MEMORY_TYPE MemoryType ) { - EFI_PEI_HOB_POINTERS Hob; - EFI_HOB_MEMORY_ALLOCATION *MemoryAllocationHob; + EFI_PEI_HOB_POINTERS Hob; + EFI_HOB_MEMORY_ALLOCATION *MemoryAllocationHob; // // Search unused(freed) memory allocation HOB. // MemoryAllocationHob = NULL; - Hob.Raw = GetFirstHob (EFI_HOB_TYPE_UNUSED); + Hob.Raw = GetFirstHob (EFI_HOB_TYPE_UNUSED); while (Hob.Raw != NULL) { if (Hob.Header->HobLength == sizeof (EFI_HOB_MEMORY_ALLOCATION)) { - MemoryAllocationHob = (EFI_HOB_MEMORY_ALLOCATION *) Hob.Raw; + MemoryAllocationHob = (EFI_HOB_MEMORY_ALLOCATION *)Hob.Raw; break; } @@ -370,14 +372,15 @@ InternalBuildMemoryAllocationHob ( **/ VOID UpdateOrSplitMemoryAllocationHob ( - IN OUT EFI_HOB_MEMORY_ALLOCATION *MemoryAllocationHob, - IN EFI_PHYSICAL_ADDRESS Memory, - IN UINT64 Bytes, - IN EFI_MEMORY_TYPE MemoryType + IN OUT EFI_HOB_MEMORY_ALLOCATION *MemoryAllocationHob, + IN EFI_PHYSICAL_ADDRESS Memory, + IN UINT64 Bytes, + IN EFI_MEMORY_TYPE MemoryType ) { if ((Memory + Bytes) < - (MemoryAllocationHob->AllocDescriptor.MemoryBaseAddress + MemoryAllocationHob->AllocDescriptor.MemoryLength)) { + (MemoryAllocationHob->AllocDescriptor.MemoryBaseAddress + MemoryAllocationHob->AllocDescriptor.MemoryLength)) + { // // Last pages need to be split out. // @@ -403,8 +406,8 @@ UpdateOrSplitMemoryAllocationHob ( // Update the memory allocation HOB. // MemoryAllocationHob->AllocDescriptor.MemoryBaseAddress = Memory; - MemoryAllocationHob->AllocDescriptor.MemoryLength = Bytes; - MemoryAllocationHob->AllocDescriptor.MemoryType = MemoryType; + MemoryAllocationHob->AllocDescriptor.MemoryLength = Bytes; + MemoryAllocationHob->AllocDescriptor.MemoryType = MemoryType; } /** @@ -419,34 +422,34 @@ MergeFreeMemoryInMemoryAllocationHob ( VOID ) { - EFI_PEI_HOB_POINTERS Hob; - EFI_PEI_HOB_POINTERS Hob2; - EFI_HOB_MEMORY_ALLOCATION *MemoryHob; - EFI_HOB_MEMORY_ALLOCATION *MemoryHob2; - UINT64 Start; - UINT64 End; - BOOLEAN Merged; + EFI_PEI_HOB_POINTERS Hob; + EFI_PEI_HOB_POINTERS Hob2; + EFI_HOB_MEMORY_ALLOCATION *MemoryHob; + EFI_HOB_MEMORY_ALLOCATION *MemoryHob2; + UINT64 Start; + UINT64 End; + BOOLEAN Merged; Merged = FALSE; Hob.Raw = GetFirstHob (EFI_HOB_TYPE_MEMORY_ALLOCATION); while (Hob.Raw != NULL) { if (Hob.MemoryAllocation->AllocDescriptor.MemoryType == EfiConventionalMemory) { - MemoryHob = (EFI_HOB_MEMORY_ALLOCATION *) Hob.Raw; - Start = MemoryHob->AllocDescriptor.MemoryBaseAddress; - End = MemoryHob->AllocDescriptor.MemoryBaseAddress + MemoryHob->AllocDescriptor.MemoryLength; + MemoryHob = (EFI_HOB_MEMORY_ALLOCATION *)Hob.Raw; + Start = MemoryHob->AllocDescriptor.MemoryBaseAddress; + End = MemoryHob->AllocDescriptor.MemoryBaseAddress + MemoryHob->AllocDescriptor.MemoryLength; Hob2.Raw = GET_NEXT_HOB (Hob); Hob2.Raw = GetNextHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, Hob.Raw); while (Hob2.Raw != NULL) { if (Hob2.MemoryAllocation->AllocDescriptor.MemoryType == EfiConventionalMemory) { - MemoryHob2 = (EFI_HOB_MEMORY_ALLOCATION *) Hob2.Raw; + MemoryHob2 = (EFI_HOB_MEMORY_ALLOCATION *)Hob2.Raw; if (Start == (MemoryHob2->AllocDescriptor.MemoryBaseAddress + MemoryHob2->AllocDescriptor.MemoryLength)) { // // Merge adjacent two free memory ranges. // MemoryHob2->AllocDescriptor.MemoryLength += MemoryHob->AllocDescriptor.MemoryLength; - Merged = TRUE; + Merged = TRUE; // // Mark MemoryHob to be unused(freed). // @@ -457,8 +460,8 @@ MergeFreeMemoryInMemoryAllocationHob ( // Merge adjacent two free memory ranges. // MemoryHob2->AllocDescriptor.MemoryBaseAddress = MemoryHob->AllocDescriptor.MemoryBaseAddress; - MemoryHob2->AllocDescriptor.MemoryLength += MemoryHob->AllocDescriptor.MemoryLength; - Merged = TRUE; + MemoryHob2->AllocDescriptor.MemoryLength += MemoryHob->AllocDescriptor.MemoryLength; + Merged = TRUE; // // Mark MemoryHob to be unused(freed). // @@ -466,10 +469,12 @@ MergeFreeMemoryInMemoryAllocationHob ( break; } } + Hob2.Raw = GET_NEXT_HOB (Hob2); Hob2.Raw = GetNextHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, Hob2.Raw); } } + Hob.Raw = GET_NEXT_HOB (Hob); Hob.Raw = GetNextHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, Hob.Raw); } @@ -492,41 +497,44 @@ MergeFreeMemoryInMemoryAllocationHob ( **/ EFI_STATUS FindFreeMemoryFromMemoryAllocationHob ( - IN EFI_MEMORY_TYPE MemoryType, - IN UINTN Pages, - IN UINTN Granularity, - OUT EFI_PHYSICAL_ADDRESS *Memory + IN EFI_MEMORY_TYPE MemoryType, + IN UINTN Pages, + IN UINTN Granularity, + OUT EFI_PHYSICAL_ADDRESS *Memory ) { - EFI_PEI_HOB_POINTERS Hob; - EFI_HOB_MEMORY_ALLOCATION *MemoryAllocationHob; - UINT64 Bytes; - EFI_PHYSICAL_ADDRESS BaseAddress; + EFI_PEI_HOB_POINTERS Hob; + EFI_HOB_MEMORY_ALLOCATION *MemoryAllocationHob; + UINT64 Bytes; + EFI_PHYSICAL_ADDRESS BaseAddress; Bytes = LShiftU64 (Pages, EFI_PAGE_SHIFT); - BaseAddress = 0; + BaseAddress = 0; MemoryAllocationHob = NULL; - Hob.Raw = GetFirstHob (EFI_HOB_TYPE_MEMORY_ALLOCATION); + Hob.Raw = GetFirstHob (EFI_HOB_TYPE_MEMORY_ALLOCATION); while (Hob.Raw != NULL) { if ((Hob.MemoryAllocation->AllocDescriptor.MemoryType == EfiConventionalMemory) && - (Hob.MemoryAllocation->AllocDescriptor.MemoryLength >= Bytes)) { + (Hob.MemoryAllocation->AllocDescriptor.MemoryLength >= Bytes)) + { // // Found one memory allocation HOB with big enough free memory. // - MemoryAllocationHob = (EFI_HOB_MEMORY_ALLOCATION *) Hob.Raw; - BaseAddress = MemoryAllocationHob->AllocDescriptor.MemoryBaseAddress + - MemoryAllocationHob->AllocDescriptor.MemoryLength - Bytes; + MemoryAllocationHob = (EFI_HOB_MEMORY_ALLOCATION *)Hob.Raw; + BaseAddress = MemoryAllocationHob->AllocDescriptor.MemoryBaseAddress + + MemoryAllocationHob->AllocDescriptor.MemoryLength - Bytes; // // Make sure the granularity could be satisfied. // - BaseAddress &= ~((EFI_PHYSICAL_ADDRESS) Granularity - 1); + BaseAddress &= ~((EFI_PHYSICAL_ADDRESS)Granularity - 1); if (BaseAddress >= MemoryAllocationHob->AllocDescriptor.MemoryBaseAddress) { break; } - BaseAddress = 0; + + BaseAddress = 0; MemoryAllocationHob = NULL; } + // // Continue to find. // @@ -545,6 +553,7 @@ FindFreeMemoryFromMemoryAllocationHob ( // return FindFreeMemoryFromMemoryAllocationHob (MemoryType, Pages, Granularity, Memory); } + return EFI_NOT_FOUND; } } @@ -574,20 +583,20 @@ FindFreeMemoryFromMemoryAllocationHob ( EFI_STATUS EFIAPI PeiAllocatePages ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN EFI_MEMORY_TYPE MemoryType, - IN UINTN Pages, - OUT EFI_PHYSICAL_ADDRESS *Memory + IN CONST EFI_PEI_SERVICES **PeiServices, + IN EFI_MEMORY_TYPE MemoryType, + IN UINTN Pages, + OUT EFI_PHYSICAL_ADDRESS *Memory ) { - EFI_STATUS Status; - PEI_CORE_INSTANCE *PrivateData; - EFI_PEI_HOB_POINTERS Hob; - EFI_PHYSICAL_ADDRESS *FreeMemoryTop; - EFI_PHYSICAL_ADDRESS *FreeMemoryBottom; - UINTN RemainingPages; - UINTN Granularity; - UINTN Padding; + EFI_STATUS Status; + PEI_CORE_INSTANCE *PrivateData; + EFI_PEI_HOB_POINTERS Hob; + EFI_PHYSICAL_ADDRESS *FreeMemoryTop; + EFI_PHYSICAL_ADDRESS *FreeMemoryBottom; + UINTN RemainingPages; + UINTN Granularity; + UINTN Padding; if ((MemoryType != EfiLoaderCode) && (MemoryType != EfiLoaderData) && @@ -597,7 +606,8 @@ PeiAllocatePages ( (MemoryType != EfiBootServicesData) && (MemoryType != EfiACPIReclaimMemory) && (MemoryType != EfiReservedMemoryType) && - (MemoryType != EfiACPIMemoryNVS)) { + (MemoryType != EfiACPIMemoryNVS)) + { return EFI_INVALID_PARAMETER; } @@ -613,16 +623,19 @@ PeiAllocatePages ( return EFI_NOT_AVAILABLE_YET; } - if (RUNTIME_PAGE_ALLOCATION_GRANULARITY > DEFAULT_PAGE_ALLOCATION_GRANULARITY && - (MemoryType == EfiACPIReclaimMemory || - MemoryType == EfiACPIMemoryNVS || - MemoryType == EfiRuntimeServicesCode || - MemoryType == EfiRuntimeServicesData)) { - + if ((RUNTIME_PAGE_ALLOCATION_GRANULARITY > DEFAULT_PAGE_ALLOCATION_GRANULARITY) && + ((MemoryType == EfiACPIReclaimMemory) || + (MemoryType == EfiACPIMemoryNVS) || + (MemoryType == EfiRuntimeServicesCode) || + (MemoryType == EfiRuntimeServicesData))) + { Granularity = RUNTIME_PAGE_ALLOCATION_GRANULARITY; - DEBUG ((DEBUG_INFO, "AllocatePages: aligning allocation to %d KB\n", - Granularity / SIZE_1KB)); + DEBUG (( + DEBUG_INFO, + "AllocatePages: aligning allocation to %d KB\n", + Granularity / SIZE_1KB + )); } if (!PrivateData->PeiMemoryInstalled && PrivateData->SwitchStackSignal) { @@ -630,11 +643,11 @@ PeiAllocatePages ( // When PeiInstallMemory is called but temporary memory has *not* been moved to permanent memory, // the AllocatePage will depend on the field of PEI_CORE_INSTANCE structure. // - FreeMemoryTop = &(PrivateData->FreePhysicalMemoryTop); - FreeMemoryBottom = &(PrivateData->PhysicalMemoryBegin); + FreeMemoryTop = &(PrivateData->FreePhysicalMemoryTop); + FreeMemoryBottom = &(PrivateData->PhysicalMemoryBegin); } else { - FreeMemoryTop = &(Hob.HandoffInformationTable->EfiFreeMemoryTop); - FreeMemoryBottom = &(Hob.HandoffInformationTable->EfiFreeMemoryBottom); + FreeMemoryTop = &(Hob.HandoffInformationTable->EfiFreeMemoryTop); + FreeMemoryBottom = &(Hob.HandoffInformationTable->EfiFreeMemoryBottom); } // @@ -642,7 +655,7 @@ PeiAllocatePages ( // If not aligned, make the allocation aligned. // Padding = *(FreeMemoryTop) & (Granularity - 1); - if ((UINTN) (*FreeMemoryTop - *FreeMemoryBottom) < Padding) { + if ((UINTN)(*FreeMemoryTop - *FreeMemoryBottom) < Padding) { DEBUG ((DEBUG_ERROR, "AllocatePages failed: Out of space after padding.\n")); return EFI_OUT_OF_RESOURCES; } @@ -676,9 +689,10 @@ PeiAllocatePages ( if (!EFI_ERROR (Status)) { return Status; } - DEBUG ((DEBUG_ERROR, "AllocatePages failed: No 0x%lx Pages is available.\n", (UINT64) Pages)); - DEBUG ((DEBUG_ERROR, "There is only left 0x%lx pages memory resource to be allocated.\n", (UINT64) RemainingPages)); - return EFI_OUT_OF_RESOURCES; + + DEBUG ((DEBUG_ERROR, "AllocatePages failed: No 0x%lx Pages is available.\n", (UINT64)Pages)); + DEBUG ((DEBUG_ERROR, "There is only left 0x%lx pages memory resource to be allocated.\n", (UINT64)RemainingPages)); + return EFI_OUT_OF_RESOURCES; } else { // // Update the PHIT to reflect the memory usage @@ -713,13 +727,13 @@ PeiAllocatePages ( **/ VOID FreeMemoryAllocationHob ( - IN PEI_CORE_INSTANCE *PrivateData, - IN OUT EFI_HOB_MEMORY_ALLOCATION *MemoryAllocationHobToFree + IN PEI_CORE_INSTANCE *PrivateData, + IN OUT EFI_HOB_MEMORY_ALLOCATION *MemoryAllocationHobToFree ) { - EFI_PEI_HOB_POINTERS Hob; - EFI_PHYSICAL_ADDRESS *FreeMemoryTop; - EFI_HOB_MEMORY_ALLOCATION *MemoryAllocationHob; + EFI_PEI_HOB_POINTERS Hob; + EFI_PHYSICAL_ADDRESS *FreeMemoryTop; + EFI_HOB_MEMORY_ALLOCATION *MemoryAllocationHob; Hob.Raw = PrivateData->HobList.Raw; @@ -744,20 +758,23 @@ FreeMemoryAllocationHob ( MemoryAllocationHobToFree->Header.HobType = EFI_HOB_TYPE_UNUSED; MemoryAllocationHob = NULL; - Hob.Raw = GetFirstHob (EFI_HOB_TYPE_MEMORY_ALLOCATION); + Hob.Raw = GetFirstHob (EFI_HOB_TYPE_MEMORY_ALLOCATION); while (Hob.Raw != NULL) { if ((Hob.MemoryAllocation->AllocDescriptor.MemoryType == EfiConventionalMemory) && - (Hob.MemoryAllocation->AllocDescriptor.MemoryBaseAddress == *FreeMemoryTop)) { + (Hob.MemoryAllocation->AllocDescriptor.MemoryBaseAddress == *FreeMemoryTop)) + { // // Found memory allocation HOB that has EfiConventionalMemory MemoryType and // MemoryBaseAddress == new *FreeMemoryTop. // - MemoryAllocationHob = (EFI_HOB_MEMORY_ALLOCATION *) Hob.Raw; + MemoryAllocationHob = (EFI_HOB_MEMORY_ALLOCATION *)Hob.Raw; break; } + Hob.Raw = GET_NEXT_HOB (Hob); Hob.Raw = GetNextHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, Hob.Raw); } + // // Free memory allocation HOB iteratively. // @@ -783,23 +800,23 @@ FreeMemoryAllocationHob ( EFI_STATUS EFIAPI PeiFreePages ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN EFI_PHYSICAL_ADDRESS Memory, - IN UINTN Pages + IN CONST EFI_PEI_SERVICES **PeiServices, + IN EFI_PHYSICAL_ADDRESS Memory, + IN UINTN Pages ) { - PEI_CORE_INSTANCE *PrivateData; - UINT64 Bytes; - UINT64 Start; - UINT64 End; - EFI_PEI_HOB_POINTERS Hob; - EFI_HOB_MEMORY_ALLOCATION *MemoryAllocationHob; + PEI_CORE_INSTANCE *PrivateData; + UINT64 Bytes; + UINT64 Start; + UINT64 End; + EFI_PEI_HOB_POINTERS Hob; + EFI_HOB_MEMORY_ALLOCATION *MemoryAllocationHob; Bytes = LShiftU64 (Pages, EFI_PAGE_SHIFT); Start = Memory; - End = Start + Bytes - 1; + End = Start + Bytes - 1; - if (Pages == 0 || ((Start & EFI_PAGE_MASK) != 0) || (Start >= End)) { + if ((Pages == 0) || ((Start & EFI_PAGE_MASK) != 0) || (Start >= End)) { return EFI_INVALID_PARAMETER; } @@ -814,17 +831,19 @@ PeiFreePages ( } MemoryAllocationHob = NULL; - Hob.Raw = GetFirstHob (EFI_HOB_TYPE_MEMORY_ALLOCATION); + Hob.Raw = GetFirstHob (EFI_HOB_TYPE_MEMORY_ALLOCATION); while (Hob.Raw != NULL) { if ((Hob.MemoryAllocation->AllocDescriptor.MemoryType != EfiConventionalMemory) && (Memory >= Hob.MemoryAllocation->AllocDescriptor.MemoryBaseAddress) && - ((Memory + Bytes) <= (Hob.MemoryAllocation->AllocDescriptor.MemoryBaseAddress + Hob.MemoryAllocation->AllocDescriptor.MemoryLength))) { + ((Memory + Bytes) <= (Hob.MemoryAllocation->AllocDescriptor.MemoryBaseAddress + Hob.MemoryAllocation->AllocDescriptor.MemoryLength))) + { // // Found the memory allocation HOB that includes the memory pages to be freed. // - MemoryAllocationHob = (EFI_HOB_MEMORY_ALLOCATION *) Hob.Raw; + MemoryAllocationHob = (EFI_HOB_MEMORY_ALLOCATION *)Hob.Raw; break; } + Hob.Raw = GET_NEXT_HOB (Hob); Hob.Raw = GetNextHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, Hob.Raw); } @@ -857,13 +876,13 @@ PeiFreePages ( EFI_STATUS EFIAPI PeiAllocatePool ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN UINTN Size, - OUT VOID **Buffer + IN CONST EFI_PEI_SERVICES **PeiServices, + IN UINTN Size, + OUT VOID **Buffer ) { - EFI_STATUS Status; - EFI_HOB_MEMORY_POOL *Hob; + EFI_STATUS Status; + EFI_HOB_MEMORY_POOL *Hob; // // If some "post-memory" PEIM wishes to allocate larger pool,