diff --git a/StandaloneMmPkg/Library/StandaloneMmCoreHobLib/StandaloneMmCoreHobLib.c b/StandaloneMmPkg/Library/StandaloneMmCoreHobLib/StandaloneMmCoreHobLib.c index 3c5baa1e5b..2a8526b684 100644 --- a/StandaloneMmPkg/Library/StandaloneMmCoreHobLib/StandaloneMmCoreHobLib.c +++ b/StandaloneMmPkg/Library/StandaloneMmCoreHobLib/StandaloneMmCoreHobLib.c @@ -296,3 +296,73 @@ BuildMemoryAllocationHob ( // ASSERT (FALSE); } + +/** + Returns the next instance of the memory allocation HOB with the matched GUID from + the starting HOB. + + This function searches the first instance of a HOB from the starting HOB pointer. + Such HOB should satisfy two conditions: + Its HOB type is EFI_HOB_TYPE_MEMORY_ALLOCATION and its GUID Name equals to input Guid. + If there does not exist such HOB from the starting HOB pointer, it will return NULL. + + If Guid is NULL, then ASSERT(). + If HobStart is NULL, then ASSERT(). + + @param Guid The GUID to match with in the HOB list. + @param HobStart The starting HOB pointer to search from. + + @retval !NULL The next instance of the Memory Allocation HOB with matched GUID from the starting HOB. + @retval NULL NULL is returned if the matching Memory Allocation HOB is not found. + +**/ +VOID * +EFIAPI +GetNextMemoryAllocationGuidHob ( + IN CONST EFI_GUID *Guid, + IN CONST VOID *HobStart + ) +{ + EFI_PEI_HOB_POINTERS Hob; + + ASSERT (Guid != NULL); + ASSERT (HobStart != NULL); + + for (Hob.Raw = (UINT8 *)HobStart; (Hob.Raw = GetNextHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, Hob.Raw)) != NULL; + Hob.Raw = GET_NEXT_HOB (Hob)) + { + if (CompareGuid (&Hob.MemoryAllocation->AllocDescriptor.Name, Guid)) { + return Hob.Raw; + } + } + + return NULL; +} + +/** + Search the HOB list for the Memory Allocation HOB with a matching base address + and set the Name GUID. If there does not exist such Memory Allocation HOB in the + HOB list, it will return NULL. + + If Guid is NULL, then ASSERT(). + + @param BaseAddress BaseAddress of Memory Allocation HOB to set Name to Guid. + @param Guid Pointer to the GUID to set in the matching Memory Allocation GUID. + + @retval !NULL The instance of the tagged Memory Allocation HOB with matched base address. + @retval NULL NULL is returned if the matching Memory Allocation HOB is not found. + +**/ +VOID * +EFIAPI +TagMemoryAllocationHobWithGuid ( + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN CONST EFI_GUID *Guid + ) +{ + // + // HOB is read only for MM phase + // + ASSERT (FALSE); + return NULL; +} diff --git a/StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.c b/StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.c index 7b51631354..b89c629955 100644 --- a/StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.c +++ b/StandaloneMmPkg/Library/StandaloneMmHobLib/StandaloneMmHobLib.c @@ -582,3 +582,73 @@ BuildStackHob ( { ASSERT (FALSE); } + +/** + Returns the next instance of the memory allocation HOB with the matched GUID from + the starting HOB. + + This function searches the first instance of a HOB from the starting HOB pointer. + Such HOB should satisfy two conditions: + Its HOB type is EFI_HOB_TYPE_MEMORY_ALLOCATION and its GUID Name equals to input Guid. + If there does not exist such HOB from the starting HOB pointer, it will return NULL. + + If Guid is NULL, then ASSERT(). + If HobStart is NULL, then ASSERT(). + + @param Guid The GUID to match with in the HOB list. + @param HobStart The starting HOB pointer to search from. + + @retval !NULL The next instance of the Memory Allocation HOB with matched GUID from the starting HOB. + @retval NULL NULL is returned if the matching Memory Allocation HOB is not found. + +**/ +VOID * +EFIAPI +GetNextMemoryAllocationGuidHob ( + IN CONST EFI_GUID *Guid, + IN CONST VOID *HobStart + ) +{ + EFI_PEI_HOB_POINTERS Hob; + + ASSERT (Guid != NULL); + ASSERT (HobStart != NULL); + + for (Hob.Raw = (UINT8 *)HobStart; (Hob.Raw = GetNextHob (EFI_HOB_TYPE_MEMORY_ALLOCATION, Hob.Raw)) != NULL; + Hob.Raw = GET_NEXT_HOB (Hob)) + { + if (CompareGuid (&Hob.MemoryAllocation->AllocDescriptor.Name, Guid)) { + return Hob.Raw; + } + } + + return NULL; +} + +/** + Search the HOB list for the Memory Allocation HOB with a matching base address + and set the Name GUID. If there does not exist such Memory Allocation HOB in the + HOB list, it will return NULL. + + If Guid is NULL, then ASSERT(). + + @param BaseAddress BaseAddress of Memory Allocation HOB to set Name to Guid. + @param Guid Pointer to the GUID to set in the matching Memory Allocation GUID. + + @retval !NULL The instance of the tagged Memory Allocation HOB with matched base address. + @retval NULL NULL is returned if the matching Memory Allocation HOB is not found. + +**/ +VOID * +EFIAPI +TagMemoryAllocationHobWithGuid ( + IN EFI_PHYSICAL_ADDRESS BaseAddress, + IN CONST EFI_GUID *Guid + ) +{ + // + // HOB is read only for Standalone MM drivers + // + ASSERT (FALSE); + return NULL; +}