mirror of https://github.com/acidanthera/audk.git
UefiCpuPkg/MpInitLib: Implementation of MpInitLibEnableDisableAP()
v4: 1. Simply the internal function MpInitLibEnableDisableAP()'s function header due to it is duplicated with MpInitLibEnableDisableAP(). v3: 1. Use CamelCase for mCheckAllAPsEvent, mStopCheckAllApsStatus. Cc: Michael Kinney <michael.d.kinney@intel.com> Cc: Feng Tian <feng.tian@intel.com> Cc: Giri P Mudusuru <giri.p.mudusuru@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jeff Fan <jeff.fan@intel.com> Reviewed-by: Michael Kinney <michael.d.kinney@intel.com> Tested-by: Laszlo Ersek <lersek@redhat.com> Tested-by: Michael Kinney <michael.d.kinney@intel.com>
This commit is contained in:
parent
41be0da59a
commit
e37109bcc7
|
@ -454,5 +454,23 @@ MpInitLibEnableDisableAP (
|
||||||
IN UINT32 *HealthFlag OPTIONAL
|
IN UINT32 *HealthFlag OPTIONAL
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return EFI_UNSUPPORTED;
|
EFI_STATUS Status;
|
||||||
|
BOOLEAN TempStopCheckState;
|
||||||
|
|
||||||
|
TempStopCheckState = FALSE;
|
||||||
|
//
|
||||||
|
// temporarily stop checkAllAPsStatus for initialize parameters.
|
||||||
|
//
|
||||||
|
if (!mStopCheckAllApsStatus) {
|
||||||
|
mStopCheckAllApsStatus = TRUE;
|
||||||
|
TempStopCheckState = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
Status = EnableDisableApWorker (ProcessorNumber, EnableAP, HealthFlag);
|
||||||
|
|
||||||
|
if (TempStopCheckState) {
|
||||||
|
mStopCheckAllApsStatus = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1238,6 +1238,62 @@ SwitchBSPWorker (
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Worker function to let the caller enable or disable an AP from this point onward.
|
||||||
|
This service may only be called from the BSP.
|
||||||
|
|
||||||
|
@param[in] ProcessorNumber The handle number of AP.
|
||||||
|
@param[in] EnableAP Specifies the new state for the processor for
|
||||||
|
enabled, FALSE for disabled.
|
||||||
|
@param[in] HealthFlag If not NULL, a pointer to a value that specifies
|
||||||
|
the new health status of the AP.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The specified AP was enabled or disabled successfully.
|
||||||
|
@retval others Failed to Enable/Disable AP.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EnableDisableApWorker (
|
||||||
|
IN UINTN ProcessorNumber,
|
||||||
|
IN BOOLEAN EnableAP,
|
||||||
|
IN UINT32 *HealthFlag OPTIONAL
|
||||||
|
)
|
||||||
|
{
|
||||||
|
CPU_MP_DATA *CpuMpData;
|
||||||
|
UINTN CallerNumber;
|
||||||
|
|
||||||
|
CpuMpData = GetCpuMpData ();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check whether caller processor is BSP
|
||||||
|
//
|
||||||
|
MpInitLibWhoAmI (&CallerNumber);
|
||||||
|
if (CallerNumber != CpuMpData->BspNumber) {
|
||||||
|
return EFI_DEVICE_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ProcessorNumber == CpuMpData->BspNumber) {
|
||||||
|
return EFI_INVALID_PARAMETER;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ProcessorNumber >= CpuMpData->CpuCount) {
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!EnableAP) {
|
||||||
|
SetApState (&CpuMpData->CpuData[ProcessorNumber], CpuStateDisabled);
|
||||||
|
} else {
|
||||||
|
SetApState (&CpuMpData->CpuData[ProcessorNumber], CpuStateIdle);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (HealthFlag != NULL) {
|
||||||
|
CpuMpData->CpuData[ProcessorNumber].CpuHealthy =
|
||||||
|
(BOOLEAN) ((*HealthFlag & PROCESSOR_HEALTH_STATUS_BIT) != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
This return the handle number for the calling processor. This service may be
|
This return the handle number for the calling processor. This service may be
|
||||||
called from the BSP and APs.
|
called from the BSP and APs.
|
||||||
|
|
|
@ -364,6 +364,27 @@ SwitchBSPWorker (
|
||||||
IN BOOLEAN EnableOldBSP
|
IN BOOLEAN EnableOldBSP
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Worker function to let the caller enable or disable an AP from this point onward.
|
||||||
|
This service may only be called from the BSP.
|
||||||
|
|
||||||
|
@param[in] ProcessorNumber The handle number of AP.
|
||||||
|
@param[in] EnableAP Specifies the new state for the processor for
|
||||||
|
enabled, FALSE for disabled.
|
||||||
|
@param[in] HealthFlag If not NULL, a pointer to a value that specifies
|
||||||
|
the new health status of the AP.
|
||||||
|
|
||||||
|
@retval EFI_SUCCESS The specified AP was enabled or disabled successfully.
|
||||||
|
@retval others Failed to Enable/Disable AP.
|
||||||
|
|
||||||
|
**/
|
||||||
|
EFI_STATUS
|
||||||
|
EnableDisableApWorker (
|
||||||
|
IN UINTN ProcessorNumber,
|
||||||
|
IN BOOLEAN EnableAP,
|
||||||
|
IN UINT32 *HealthFlag OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Get pointer to CPU MP Data structure from GUIDed HOB.
|
Get pointer to CPU MP Data structure from GUIDed HOB.
|
||||||
|
|
||||||
|
|
|
@ -604,7 +604,7 @@ MpInitLibEnableDisableAP (
|
||||||
IN UINT32 *HealthFlag OPTIONAL
|
IN UINT32 *HealthFlag OPTIONAL
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return EFI_UNSUPPORTED;
|
return EnableDisableApWorker (ProcessorNumber, EnableAP, HealthFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue