UefiCpuPkg/MpInitLib: Add support for multiple HOBs to GetMpHandOffHob

Rename the function to GetNextMpHandOffHob(), add MP_HAND_OFF parameter.
When called with NULL pointer return the body of the first HOB, otherwise
return the next in the chain.

Also add the function prototype to the MpLib.h header file.

Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Message-Id: <20240222160106.686484-2-kraxel@redhat.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
Gerd Hoffmann 2024-02-22 17:01:01 +01:00 committed by mergify[bot]
parent 1f161a7915
commit a3ee1eea96
2 changed files with 28 additions and 10 deletions

View File

@ -1961,25 +1961,31 @@ SwitchApContext (
}
/**
Get pointer to MP_HAND_OFF GUIDed HOB.
Get pointer to next MP_HAND_OFF GUIDed HOB body.
@param[in] MpHandOff Previous HOB body. Pass NULL to get the first HOB.
@return The pointer to MP_HAND_OFF structure.
**/
MP_HAND_OFF *
GetMpHandOffHob (
VOID
GetNextMpHandOffHob (
IN CONST MP_HAND_OFF *MpHandOff
)
{
EFI_HOB_GUID_TYPE *GuidHob;
MP_HAND_OFF *MpHandOff;
MpHandOff = NULL;
GuidHob = GetFirstGuidHob (&mMpHandOffGuid);
if (GuidHob != NULL) {
MpHandOff = (MP_HAND_OFF *)GET_GUID_HOB_DATA (GuidHob);
if (MpHandOff == NULL) {
GuidHob = GetFirstGuidHob (&mMpHandOffGuid);
} else {
GuidHob = (VOID *)(((UINT8 *)MpHandOff) - sizeof (EFI_HOB_GUID_TYPE));
GuidHob = GetNextGuidHob (&mMpHandOffGuid, GET_NEXT_HOB (GuidHob));
}
return MpHandOff;
if (GuidHob == NULL) {
return NULL;
}
return (MP_HAND_OFF *)GET_GUID_HOB_DATA (GuidHob);
}
/**
@ -2020,7 +2026,7 @@ MpInitLibInitialize (
UINTN BackupBufferAddr;
UINTN ApIdtBase;
MpHandOff = GetMpHandOffHob ();
MpHandOff = GetNextMpHandOffHob (NULL);
if (MpHandOff == NULL) {
MaxLogicalProcessorNumber = PcdGet32 (PcdCpuMaxLogicalProcessorNumber);
} else {

View File

@ -485,6 +485,18 @@ SwitchApContext (
IN MP_HAND_OFF *MpHandOff
);
/**
Get pointer to next MP_HAND_OFF GUIDed HOB body.
@param[in] MpHandOff Previous HOB body. Pass NULL to get the first HOB.
@return The pointer to MP_HAND_OFF structure.
**/
MP_HAND_OFF *
GetNextMpHandOffHob (
IN CONST MP_HAND_OFF *MpHandOff
);
/**
Get available EfiBootServicesCode memory below 4GB by specified size.