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
|
||||
)
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
/**
|
||||
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
|
||||
called from the BSP and APs.
|
||||
|
|
|
@ -364,6 +364,27 @@ SwitchBSPWorker (
|
|||
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.
|
||||
|
||||
|
|
|
@ -604,7 +604,7 @@ MpInitLibEnableDisableAP (
|
|||
IN UINT32 *HealthFlag OPTIONAL
|
||||
)
|
||||
{
|
||||
return EFI_UNSUPPORTED;
|
||||
return EnableDisableApWorker (ProcessorNumber, EnableAP, HealthFlag);
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue