mirror of
				https://gitlab.com/qemu-project/edk2.git
				synced 2025-10-30 07:56:39 +08:00 
			
		
		
		
	StandaloneMmPkg/MmIpl : Add EFI_HOB_HANDOFF_INFO_TABLE to MM HOB list
GetBootModeHob function need to add EFI_HOB_HANDOFF_INFO_TABLE in MM hob data base. Signed-off-by: Hongbin1 Zhang <hongbin1.zhang@intel.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Ray Ni <ray.ni@intel.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Jiaxin Wu <jiaxin.wu@intel.com> Cc: Wei6 Xu <wei6.xu@intel.com> Cc: Sami Mujawar <sami.mujawar@arm.com> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org> Cc: Supreeth Venkatesh <supreeth.venkatesh@arm.com>
This commit is contained in:
		| @ -1029,3 +1029,33 @@ CreateMmFoundationHobList ( | ||||
|   *FoundationHobSize = UsedSize; | ||||
|   return Status; | ||||
| } | ||||
|  | ||||
| /** | ||||
|  | ||||
|   Builds a Handoff Information Table HOB. | ||||
|  | ||||
|   @param Hob       - Pointer to handoff information table HOB. | ||||
|   @param HobEnd    - End of the HOB list. | ||||
|  | ||||
| **/ | ||||
| VOID | ||||
| CreateMmHobHandoffInfoTable ( | ||||
|   IN EFI_HOB_HANDOFF_INFO_TABLE  *Hob, | ||||
|   IN VOID                        *HobEnd | ||||
|   ) | ||||
| { | ||||
|   ASSERT ((Hob != NULL) && (HobEnd != NULL)); | ||||
|  | ||||
|   Hob->Header.HobType   = EFI_HOB_TYPE_HANDOFF; | ||||
|   Hob->Header.HobLength = (UINT16)sizeof (EFI_HOB_HANDOFF_INFO_TABLE); | ||||
|   Hob->Header.Reserved  = 0; | ||||
|  | ||||
|   Hob->Version  = EFI_HOB_HANDOFF_TABLE_VERSION; | ||||
|   Hob->BootMode = GetBootModeHob (); | ||||
|  | ||||
|   Hob->EfiMemoryTop        = 0; | ||||
|   Hob->EfiMemoryBottom     = 0; | ||||
|   Hob->EfiFreeMemoryTop    = 0; | ||||
|   Hob->EfiFreeMemoryBottom = 0; | ||||
|   Hob->EfiEndOfHobList     = (EFI_PHYSICAL_ADDRESS)(UINTN)HobEnd; | ||||
| } | ||||
|  | ||||
| @ -280,6 +280,8 @@ CreatMmHobList ( | ||||
|   UINTN                      BufferSize; | ||||
|   UINTN                      FoundationHobSize; | ||||
|   EFI_HOB_MEMORY_ALLOCATION  *MmProfileDataHob; | ||||
|   UINTN                      PhitHobSize; | ||||
|   VOID                       *HobEnd; | ||||
|  | ||||
|   // | ||||
|   // Get platform HOBs | ||||
| @ -336,10 +338,11 @@ CreatMmHobList ( | ||||
|   ASSERT (Status == RETURN_BUFFER_TOO_SMALL); | ||||
|   ASSERT (FoundationHobSize != 0); | ||||
|  | ||||
|   PhitHobSize = sizeof (EFI_HOB_HANDOFF_INFO_TABLE); | ||||
|   // | ||||
|   // Final result includes platform HOBs, foundation HOBs and a END node. | ||||
|   // Final result includes: PHIT HOB, Platform HOBs, Foundation HOBs and an END node. | ||||
|   // | ||||
|   *HobSize = PlatformHobSize + FoundationHobSize + sizeof (EFI_HOB_GENERIC_HEADER); | ||||
|   *HobSize = PhitHobSize + PlatformHobSize + FoundationHobSize + sizeof (EFI_HOB_GENERIC_HEADER); | ||||
|   HobList  = AllocatePages (EFI_SIZE_TO_PAGES (*HobSize)); | ||||
|   ASSERT (HobList != NULL); | ||||
|   if (HobList == NULL) { | ||||
| @ -347,17 +350,23 @@ CreatMmHobList ( | ||||
|     CpuDeadLoop (); | ||||
|   } | ||||
|  | ||||
|   HobEnd = (UINT8 *)(UINTN)HobList + PhitHobSize + PlatformHobSize + FoundationHobSize; | ||||
|   // | ||||
|   // Create MmHobHandoffInfoTable | ||||
|   // | ||||
|   CreateMmHobHandoffInfoTable (HobList, HobEnd); | ||||
|  | ||||
|   // | ||||
|   // Get platform HOBs | ||||
|   // | ||||
|   Status = CreateMmPlatformHob (HobList, &PlatformHobSize); | ||||
|   Status = CreateMmPlatformHob ((UINT8 *)HobList + PhitHobSize, &PlatformHobSize); | ||||
|   ASSERT_EFI_ERROR (Status); | ||||
|  | ||||
|   // | ||||
|   // Get foundation HOBs | ||||
|   // | ||||
|   Status = CreateMmFoundationHobList ( | ||||
|              (UINT8 *)HobList + PlatformHobSize, | ||||
|              (UINT8 *)HobList + PhitHobSize + PlatformHobSize, | ||||
|              &FoundationHobSize, | ||||
|              HobList, | ||||
|              PlatformHobSize, | ||||
| @ -375,7 +384,7 @@ CreatMmHobList ( | ||||
|   // | ||||
|   // Create MM HOB list end. | ||||
|   // | ||||
|   MmIplCreateHob ((UINT8 *)HobList + PlatformHobSize + FoundationHobSize, EFI_HOB_TYPE_END_OF_HOB_LIST, sizeof (EFI_HOB_GENERIC_HEADER)); | ||||
|   MmIplCreateHob (HobEnd, EFI_HOB_TYPE_END_OF_HOB_LIST, sizeof (EFI_HOB_GENERIC_HEADER)); | ||||
|  | ||||
|   return HobList; | ||||
| } | ||||
|  | ||||
| @ -143,4 +143,18 @@ BuildMmProfileDataHobInPeiHobList ( | ||||
|   VOID | ||||
|   ); | ||||
|  | ||||
| /** | ||||
|  | ||||
|   Builds a Handoff Information Table HOB. | ||||
|  | ||||
|   @param Hob       - Pointer to handoff information table HOB. | ||||
|   @param HobEnd    - End of the HOB list. | ||||
|  | ||||
| **/ | ||||
| VOID | ||||
| CreateMmHobHandoffInfoTable ( | ||||
|   IN EFI_HOB_HANDOFF_INFO_TABLE  *Hob, | ||||
|   IN VOID                        *HobEnd | ||||
|   ); | ||||
|  | ||||
| #endif | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Hongbin1 Zhang
					Hongbin1 Zhang