REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1973
Produce new EDKII_PEI_MP_SERVICES2_PPI service.
It includes all APIs existed in EFI_PEI_MP_SERVICES_PPI
and add new API EDKII_PEI_MP_SERVICES_STARTUP_ALL_CPUS.
Cc: Ray Ni <ray.ni@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Chandana Kumar <chandana.c.kumar@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Signed-off-by: Eric Dong <eric.dong@intel.com>
---
UefiCpuPkg/CpuMpPei/CpuMpPei.c | 73 +++++++++++++++++++++++++++++---
UefiCpuPkg/CpuMpPei/CpuMpPei.h | 35 ++++++++++++++-
UefiCpuPkg/CpuMpPei/CpuMpPei.inf | 1 +
3 files changed, 102 insertions(+), 7 deletions(-)
diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.c b/UefiCpuPkg/CpuMpPei/CpuMpPei.c
index 926541c937..5ed2297770 100644
--- a/UefiCpuPkg/CpuMpPei/CpuMpPei.c
+++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.c
@@ -1,7 +1,7 @@
/** @file
CPU PEI Module installs CPU Multiple Processor PPI.
- Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -21,10 +21,31 @@ EFI_PEI_MP_SERVICES_PPI mMpServicesPpi = {
PeiWhoAmI,
};
-EFI_PEI_PPI_DESCRIPTOR mPeiCpuMpPpiDesc = {
- (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
- &gEfiPeiMpServicesPpiGuid,
- &mMpServicesPpi
+//
+// CPU MP2 PPI to be installed
+//
+EDKII_PEI_MP_SERVICES2_PPI mMpServices2Ppi = {
+ PeiGetNumberOfProcessors,
+ PeiGetProcessorInfo,
+ PeiStartupAllAPs,
+ PeiStartupThisAP,
+ PeiSwitchBSP,
+ PeiEnableDisableAP,
+ PeiWhoAmI,
+ PeiStartupAllCPUs
+};
+
+EFI_PEI_PPI_DESCRIPTOR mPeiCpuMpPpiList[] = {
+ {
+ EFI_PEI_PPI_DESCRIPTOR_PPI,
+ &gEdkiiPeiMpServices2PpiGuid,
+ &mMpServices2Ppi
+ },
+ {
+ (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
+ &gEfiPeiMpServicesPpiGuid,
+ &mMpServicesPpi
+ }
};
/**
@@ -402,6 +423,46 @@ PeiWhoAmI (
return MpInitLibWhoAmI (ProcessorNumber);
}
+/**
+ This service executes a caller provided function on all enabled CPUs. CPUs can
+ run either simultaneously or one at a time in sequence. This service may only
+ be called from the BSP.
+
+ @param[in] This A pointer to the EDKII_PEI_MP_SERVICES2_PPI instance.
+ @param[in] Procedure A pointer to the function to be run on enabled APs of
+ the system.
+ @param[in] TimeoutInMicroSeconds
+ Indicates the time limit in microseconds for APs to
+ return from Procedure, for blocking mode only. Zero
+ means infinity. If the timeout expires in blocking
+ mode, BSP returns EFI_TIMEOUT.
+ @param[in] ProcedureArgument The parameter passed into Procedure for all CPUs.
+
+ @retval EFI_SUCCESS In blocking mode, all APs have finished before the
+ timeout expired.
+ @retval EFI_DEVICE_ERROR Caller processor is AP.
+ @retval EFI_NOT_READY Any enabled APs are busy.
+ @retval EFI_TIMEOUT In blocking mode, the timeout expired before all
+ enabled APs have finished.
+ @retval EFI_INVALID_PARAMETER Procedure is NULL.
+**/
+EFI_STATUS
+EFIAPI
+PeiStartupAllCPUs (
+ IN EDKII_PEI_MP_SERVICES2_PPI *This,
+ IN EFI_AP_PROCEDURE Procedure,
+ IN UINTN TimeoutInMicroSeconds,
+ IN VOID *ProcedureArgument OPTIONAL
+ )
+{
+ return MpInitLibStartupAllCPUs (
+ Procedure,
+ TimeoutInMicroSeconds,
+ ProcedureArgument,
+ NULL
+ );
+}
+
/**
Get GDT register value.
@@ -667,7 +728,7 @@ InitializeCpuMpWorker (
//
// Install CPU MP PPI
//
- Status = PeiServicesInstallPpi(&mPeiCpuMpPpiDesc);
+ Status = PeiServicesInstallPpi(mPeiCpuMpPpiList);
ASSERT_EFI_ERROR (Status);
return Status;
diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.h b/UefiCpuPkg/CpuMpPei/CpuMpPei.h
index a5d8a755b2..b385c5088b 100644
--- a/UefiCpuPkg/CpuMpPei/CpuMpPei.h
+++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.h
@@ -1,7 +1,7 @@
/** @file
Definitions to install Multiple Processor PPI.
- Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2015 - 2019, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -15,6 +15,7 @@
#include <Ppi/SecPlatformInformation.h>
#include <Ppi/SecPlatformInformation2.h>
#include <Ppi/EndOfPeiPhase.h>
+#include <Ppi/EdkiiMpServices2.h>
#include <Library/BaseLib.h>
#include <Library/DebugLib.h>
@@ -431,6 +432,38 @@ MemoryDiscoveredPpiNotifyCallback (
IN VOID *Ppi
);
+/**
+ This service executes a caller provided function on all enabled CPUs. CPUs can
+ run either simultaneously or one at a time in sequence. This service may only
+ be called from the BSP.
+
+ @param[in] This A pointer to the EDKII_PEI_MP_SERVICES2_PPI instance.
+ @param[in] Procedure A pointer to the function to be run on enabled APs of
+ the system.
+ @param[in] TimeoutInMicroSeconds
+ Indicates the time limit in microseconds for APs to
+ return from Procedure, for blocking mode only. Zero
+ means infinity. If the timeout expires in blocking
+ mode, BSP returns EFI_TIMEOUT.
+ @param[in] ProcedureArgument The parameter passed into Procedure for all CPUs.
+
+ @retval EFI_SUCCESS In blocking mode, all APs have finished before the
+ timeout expired.
+ @retval EFI_DEVICE_ERROR Caller processor is AP.
+ @retval EFI_NOT_READY Any enabled APs are busy.
+ @retval EFI_TIMEOUT In blocking mode, the timeout expired before all
+ enabled APs have finished.
+ @retval EFI_INVALID_PARAMETER Procedure is NULL.
+**/
+EFI_STATUS
+EFIAPI
+PeiStartupAllCPUs (
+ IN EDKII_PEI_MP_SERVICES2_PPI *This,
+ IN EFI_AP_PROCEDURE Procedure,
+ IN UINTN TimeoutInMicroSeconds,
+ IN VOID *ProcedureArgument OPTIONAL
+ );
+
extern EFI_PEI_NOTIFY_DESCRIPTOR mPostMemNotifyList[];
#endif
diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.inf b/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
index 4fc4ea77ba..e42ba824e4 100644
--- a/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
+++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
@@ -54,6 +54,7 @@
gEfiSecPlatformInformation2PpiGuid
gEfiVectorHandoffInfoPpiGuid ## SOMETIMES_CONSUMES
gEfiPeiMemoryDiscoveredPpiGuid ## CONSUMES
+ gEdkiiPeiMpServices2PpiGuid ## PRODUCES
[Pcd]
gEfiMdeModulePkgTokenSpaceGuid.PcdPteMemoryEncryptionAddressOrMask ## CONSUMES
--
2.21.0.windows.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#44020): https://edk2.groups.io/g/devel/message/44020
Mute This Topic: https://groups.io/mt/32524460/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
If FailedCpuList isn't cared by the new PPI service, can we remove the FailedCpuList parameter from the MpInitLib library API?
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Dong,
> Eric
> Sent: Friday, July 19, 2019 3:28 PM
> To: devel@edk2.groups.io
> Cc: Ni, Ray <ray.ni@intel.com>; Laszlo Ersek <lersek@redhat.com>; Kumar,
> Chandana C <chandana.c.kumar@intel.com>; Zeng, Star
> <star.zeng@intel.com>
> Subject: [edk2-devel] [Patch 4/5] UefiCpuPkg/CpuMpPei: Produce
> EDKII_PEI_MP_SERVICES2_PPI.
>
> REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1973
>
> Produce new EDKII_PEI_MP_SERVICES2_PPI service.
>
> It includes all APIs existed in EFI_PEI_MP_SERVICES_PPI and add new API
> EDKII_PEI_MP_SERVICES_STARTUP_ALL_CPUS.
>
> Cc: Ray Ni <ray.ni@intel.com>
> Cc: Laszlo Ersek <lersek@redhat.com>
> Cc: Chandana Kumar <chandana.c.kumar@intel.com>
> Cc: Star Zeng <star.zeng@intel.com>
> Signed-off-by: Eric Dong <eric.dong@intel.com>
> ---
> UefiCpuPkg/CpuMpPei/CpuMpPei.c | 73
> +++++++++++++++++++++++++++++---
> UefiCpuPkg/CpuMpPei/CpuMpPei.h | 35 ++++++++++++++-
> UefiCpuPkg/CpuMpPei/CpuMpPei.inf | 1 +
> 3 files changed, 102 insertions(+), 7 deletions(-)
>
> diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.c
> b/UefiCpuPkg/CpuMpPei/CpuMpPei.c index 926541c937..5ed2297770 100644
> --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.c
> +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.c
> @@ -1,7 +1,7 @@
> /** @file
> CPU PEI Module installs CPU Multiple Processor PPI.
>
> - Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
> + Copyright (c) 2015 - 2019, Intel Corporation. All rights
> + reserved.<BR>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> **/
> @@ -21,10 +21,31 @@ EFI_PEI_MP_SERVICES_PPI mMpServicesPpi =
> {
> PeiWhoAmI,
> };
>
> -EFI_PEI_PPI_DESCRIPTOR mPeiCpuMpPpiDesc = {
> - (EFI_PEI_PPI_DESCRIPTOR_PPI |
> EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
> - &gEfiPeiMpServicesPpiGuid,
> - &mMpServicesPpi
> +//
> +// CPU MP2 PPI to be installed
> +//
> +EDKII_PEI_MP_SERVICES2_PPI mMpServices2Ppi = {
> + PeiGetNumberOfProcessors,
> + PeiGetProcessorInfo,
> + PeiStartupAllAPs,
> + PeiStartupThisAP,
> + PeiSwitchBSP,
> + PeiEnableDisableAP,
> + PeiWhoAmI,
> + PeiStartupAllCPUs
> +};
> +
> +EFI_PEI_PPI_DESCRIPTOR mPeiCpuMpPpiList[] = {
> + {
> + EFI_PEI_PPI_DESCRIPTOR_PPI,
> + &gEdkiiPeiMpServices2PpiGuid,
> + &mMpServices2Ppi
> + },
> + {
> + (EFI_PEI_PPI_DESCRIPTOR_PPI |
> EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
> + &gEfiPeiMpServicesPpiGuid,
> + &mMpServicesPpi
> + }
> };
>
> /**
> @@ -402,6 +423,46 @@ PeiWhoAmI (
> return MpInitLibWhoAmI (ProcessorNumber); }
>
> +/**
> + This service executes a caller provided function on all enabled CPUs.
> +CPUs can
> + run either simultaneously or one at a time in sequence. This service
> +may only
> + be called from the BSP.
> +
> + @param[in] This A pointer to the EDKII_PEI_MP_SERVICES2_PPI
> instance.
> + @param[in] Procedure A pointer to the function to be run on
> enabled APs of
> + the system.
> + @param[in] TimeoutInMicroSeconds
> + Indicates the time limit in microseconds for APs to
> + return from Procedure, for blocking mode only. Zero
> + means infinity. If the timeout expires in blocking
> + mode, BSP returns EFI_TIMEOUT.
> + @param[in] ProcedureArgument The parameter passed into Procedure
> for all CPUs.
> +
> + @retval EFI_SUCCESS In blocking mode, all APs have finished before
> the
> + timeout expired.
> + @retval EFI_DEVICE_ERROR Caller processor is AP.
> + @retval EFI_NOT_READY Any enabled APs are busy.
> + @retval EFI_TIMEOUT In blocking mode, the timeout expired before
> all
> + enabled APs have finished.
> + @retval EFI_INVALID_PARAMETER Procedure is NULL.
> +**/
> +EFI_STATUS
> +EFIAPI
> +PeiStartupAllCPUs (
> + IN EDKII_PEI_MP_SERVICES2_PPI *This,
> + IN EFI_AP_PROCEDURE Procedure,
> + IN UINTN TimeoutInMicroSeconds,
> + IN VOID *ProcedureArgument OPTIONAL
> + )
> +{
> + return MpInitLibStartupAllCPUs (
> + Procedure,
> + TimeoutInMicroSeconds,
> + ProcedureArgument,
> + NULL
> + );
> +}
> +
> /**
> Get GDT register value.
>
> @@ -667,7 +728,7 @@ InitializeCpuMpWorker (
> //
> // Install CPU MP PPI
> //
> - Status = PeiServicesInstallPpi(&mPeiCpuMpPpiDesc);
> + Status = PeiServicesInstallPpi(mPeiCpuMpPpiList);
> ASSERT_EFI_ERROR (Status);
>
> return Status;
> diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.h
> b/UefiCpuPkg/CpuMpPei/CpuMpPei.h index a5d8a755b2..b385c5088b
> 100644
> --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.h
> +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.h
> @@ -1,7 +1,7 @@
> /** @file
> Definitions to install Multiple Processor PPI.
>
> - Copyright (c) 2015 - 2018, Intel Corporation. All rights reserved.<BR>
> + Copyright (c) 2015 - 2019, Intel Corporation. All rights
> + reserved.<BR>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> **/
> @@ -15,6 +15,7 @@
> #include <Ppi/SecPlatformInformation.h> #include
> <Ppi/SecPlatformInformation2.h> #include <Ppi/EndOfPeiPhase.h>
> +#include <Ppi/EdkiiMpServices2.h>
>
> #include <Library/BaseLib.h>
> #include <Library/DebugLib.h>
> @@ -431,6 +432,38 @@ MemoryDiscoveredPpiNotifyCallback (
> IN VOID *Ppi
> );
>
> +/**
> + This service executes a caller provided function on all enabled CPUs.
> +CPUs can
> + run either simultaneously or one at a time in sequence. This service
> +may only
> + be called from the BSP.
> +
> + @param[in] This A pointer to the EDKII_PEI_MP_SERVICES2_PPI
> instance.
> + @param[in] Procedure A pointer to the function to be run on
> enabled APs of
> + the system.
> + @param[in] TimeoutInMicroSeconds
> + Indicates the time limit in microseconds for APs to
> + return from Procedure, for blocking mode only. Zero
> + means infinity. If the timeout expires in blocking
> + mode, BSP returns EFI_TIMEOUT.
> + @param[in] ProcedureArgument The parameter passed into Procedure
> for all CPUs.
> +
> + @retval EFI_SUCCESS In blocking mode, all APs have finished before
> the
> + timeout expired.
> + @retval EFI_DEVICE_ERROR Caller processor is AP.
> + @retval EFI_NOT_READY Any enabled APs are busy.
> + @retval EFI_TIMEOUT In blocking mode, the timeout expired before
> all
> + enabled APs have finished.
> + @retval EFI_INVALID_PARAMETER Procedure is NULL.
> +**/
> +EFI_STATUS
> +EFIAPI
> +PeiStartupAllCPUs (
> + IN EDKII_PEI_MP_SERVICES2_PPI *This,
> + IN EFI_AP_PROCEDURE Procedure,
> + IN UINTN TimeoutInMicroSeconds,
> + IN VOID *ProcedureArgument OPTIONAL
> + );
> +
> extern EFI_PEI_NOTIFY_DESCRIPTOR mPostMemNotifyList[];
>
> #endif
> diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
> b/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
> index 4fc4ea77ba..e42ba824e4 100644
> --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
> +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
> @@ -54,6 +54,7 @@
> gEfiSecPlatformInformation2PpiGuid
> gEfiVectorHandoffInfoPpiGuid ## SOMETIMES_CONSUMES
> gEfiPeiMemoryDiscoveredPpiGuid ## CONSUMES
> + gEdkiiPeiMpServices2PpiGuid ## PRODUCES
>
> [Pcd]
>
> gEfiMdeModulePkgTokenSpaceGuid.PcdPteMemoryEncryptionAddressOrM
> ask ## CONSUMES
> --
> 2.21.0.windows.1
>
>
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#44026): https://edk2.groups.io/g/devel/message/44026
Mute This Topic: https://groups.io/mt/32524460/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
Ray,
Agree, will remove this parameter in next version change.
Thanks,
Eric
> -----Original Message-----
> From: Ni, Ray
> Sent: Friday, July 19, 2019 4:03 PM
> To: devel@edk2.groups.io; Dong, Eric <eric.dong@intel.com>
> Cc: Laszlo Ersek <lersek@redhat.com>; Kumar, Chandana C
> <chandana.c.kumar@intel.com>; Zeng, Star <star.zeng@intel.com>
> Subject: RE: [edk2-devel] [Patch 4/5] UefiCpuPkg/CpuMpPei: Produce
> EDKII_PEI_MP_SERVICES2_PPI.
>
> If FailedCpuList isn't cared by the new PPI service, can we remove the
> FailedCpuList parameter from the MpInitLib library API?
>
> > -----Original Message-----
> > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Dong,
> > Eric
> > Sent: Friday, July 19, 2019 3:28 PM
> > To: devel@edk2.groups.io
> > Cc: Ni, Ray <ray.ni@intel.com>; Laszlo Ersek <lersek@redhat.com>;
> > Kumar, Chandana C <chandana.c.kumar@intel.com>; Zeng, Star
> > <star.zeng@intel.com>
> > Subject: [edk2-devel] [Patch 4/5] UefiCpuPkg/CpuMpPei: Produce
> > EDKII_PEI_MP_SERVICES2_PPI.
> >
> > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1973
> >
> > Produce new EDKII_PEI_MP_SERVICES2_PPI service.
> >
> > It includes all APIs existed in EFI_PEI_MP_SERVICES_PPI and add new
> > API EDKII_PEI_MP_SERVICES_STARTUP_ALL_CPUS.
> >
> > Cc: Ray Ni <ray.ni@intel.com>
> > Cc: Laszlo Ersek <lersek@redhat.com>
> > Cc: Chandana Kumar <chandana.c.kumar@intel.com>
> > Cc: Star Zeng <star.zeng@intel.com>
> > Signed-off-by: Eric Dong <eric.dong@intel.com>
> > ---
> > UefiCpuPkg/CpuMpPei/CpuMpPei.c | 73
> > +++++++++++++++++++++++++++++---
> > UefiCpuPkg/CpuMpPei/CpuMpPei.h | 35 ++++++++++++++-
> > UefiCpuPkg/CpuMpPei/CpuMpPei.inf | 1 +
> > 3 files changed, 102 insertions(+), 7 deletions(-)
> >
> > diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.c
> > b/UefiCpuPkg/CpuMpPei/CpuMpPei.c index 926541c937..5ed2297770
> 100644
> > --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.c
> > +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.c
> > @@ -1,7 +1,7 @@
> > /** @file
> > CPU PEI Module installs CPU Multiple Processor PPI.
> >
> > - Copyright (c) 2015 - 2018, Intel Corporation. All rights
> > reserved.<BR>
> > + Copyright (c) 2015 - 2019, Intel Corporation. All rights
> > + reserved.<BR>
> > SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > **/
> > @@ -21,10 +21,31 @@ EFI_PEI_MP_SERVICES_PPI mMpServicesPpi
> =
> > {
> > PeiWhoAmI,
> > };
> >
> > -EFI_PEI_PPI_DESCRIPTOR mPeiCpuMpPpiDesc = {
> > - (EFI_PEI_PPI_DESCRIPTOR_PPI |
> > EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
> > - &gEfiPeiMpServicesPpiGuid,
> > - &mMpServicesPpi
> > +//
> > +// CPU MP2 PPI to be installed
> > +//
> > +EDKII_PEI_MP_SERVICES2_PPI mMpServices2Ppi = {
> > + PeiGetNumberOfProcessors,
> > + PeiGetProcessorInfo,
> > + PeiStartupAllAPs,
> > + PeiStartupThisAP,
> > + PeiSwitchBSP,
> > + PeiEnableDisableAP,
> > + PeiWhoAmI,
> > + PeiStartupAllCPUs
> > +};
> > +
> > +EFI_PEI_PPI_DESCRIPTOR mPeiCpuMpPpiList[] = {
> > + {
> > + EFI_PEI_PPI_DESCRIPTOR_PPI,
> > + &gEdkiiPeiMpServices2PpiGuid,
> > + &mMpServices2Ppi
> > + },
> > + {
> > + (EFI_PEI_PPI_DESCRIPTOR_PPI |
> > EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
> > + &gEfiPeiMpServicesPpiGuid,
> > + &mMpServicesPpi
> > + }
> > };
> >
> > /**
> > @@ -402,6 +423,46 @@ PeiWhoAmI (
> > return MpInitLibWhoAmI (ProcessorNumber); }
> >
> > +/**
> > + This service executes a caller provided function on all enabled CPUs.
> > +CPUs can
> > + run either simultaneously or one at a time in sequence. This
> > +service may only
> > + be called from the BSP.
> > +
> > + @param[in] This A pointer to the EDKII_PEI_MP_SERVICES2_PPI
> > instance.
> > + @param[in] Procedure A pointer to the function to be run on
> > enabled APs of
> > + the system.
> > + @param[in] TimeoutInMicroSeconds
> > + Indicates the time limit in microseconds for APs to
> > + return from Procedure, for blocking mode only. Zero
> > + means infinity. If the timeout expires in blocking
> > + mode, BSP returns EFI_TIMEOUT.
> > + @param[in] ProcedureArgument The parameter passed into Procedure
> > for all CPUs.
> > +
> > + @retval EFI_SUCCESS In blocking mode, all APs have finished
> before
> > the
> > + timeout expired.
> > + @retval EFI_DEVICE_ERROR Caller processor is AP.
> > + @retval EFI_NOT_READY Any enabled APs are busy.
> > + @retval EFI_TIMEOUT In blocking mode, the timeout expired
> before
> > all
> > + enabled APs have finished.
> > + @retval EFI_INVALID_PARAMETER Procedure is NULL.
> > +**/
> > +EFI_STATUS
> > +EFIAPI
> > +PeiStartupAllCPUs (
> > + IN EDKII_PEI_MP_SERVICES2_PPI *This,
> > + IN EFI_AP_PROCEDURE Procedure,
> > + IN UINTN TimeoutInMicroSeconds,
> > + IN VOID *ProcedureArgument OPTIONAL
> > + )
> > +{
> > + return MpInitLibStartupAllCPUs (
> > + Procedure,
> > + TimeoutInMicroSeconds,
> > + ProcedureArgument,
> > + NULL
> > + );
> > +}
> > +
> > /**
> > Get GDT register value.
> >
> > @@ -667,7 +728,7 @@ InitializeCpuMpWorker (
> > //
> > // Install CPU MP PPI
> > //
> > - Status = PeiServicesInstallPpi(&mPeiCpuMpPpiDesc);
> > + Status = PeiServicesInstallPpi(mPeiCpuMpPpiList);
> > ASSERT_EFI_ERROR (Status);
> >
> > return Status;
> > diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.h
> > b/UefiCpuPkg/CpuMpPei/CpuMpPei.h index a5d8a755b2..b385c5088b
> > 100644
> > --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.h
> > +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.h
> > @@ -1,7 +1,7 @@
> > /** @file
> > Definitions to install Multiple Processor PPI.
> >
> > - Copyright (c) 2015 - 2018, Intel Corporation. All rights
> > reserved.<BR>
> > + Copyright (c) 2015 - 2019, Intel Corporation. All rights
> > + reserved.<BR>
> > SPDX-License-Identifier: BSD-2-Clause-Patent
> >
> > **/
> > @@ -15,6 +15,7 @@
> > #include <Ppi/SecPlatformInformation.h> #include
> > <Ppi/SecPlatformInformation2.h> #include <Ppi/EndOfPeiPhase.h>
> > +#include <Ppi/EdkiiMpServices2.h>
> >
> > #include <Library/BaseLib.h>
> > #include <Library/DebugLib.h>
> > @@ -431,6 +432,38 @@ MemoryDiscoveredPpiNotifyCallback (
> > IN VOID *Ppi
> > );
> >
> > +/**
> > + This service executes a caller provided function on all enabled CPUs.
> > +CPUs can
> > + run either simultaneously or one at a time in sequence. This
> > +service may only
> > + be called from the BSP.
> > +
> > + @param[in] This A pointer to the EDKII_PEI_MP_SERVICES2_PPI
> > instance.
> > + @param[in] Procedure A pointer to the function to be run on
> > enabled APs of
> > + the system.
> > + @param[in] TimeoutInMicroSeconds
> > + Indicates the time limit in microseconds for APs to
> > + return from Procedure, for blocking mode only. Zero
> > + means infinity. If the timeout expires in blocking
> > + mode, BSP returns EFI_TIMEOUT.
> > + @param[in] ProcedureArgument The parameter passed into Procedure
> > for all CPUs.
> > +
> > + @retval EFI_SUCCESS In blocking mode, all APs have finished
> before
> > the
> > + timeout expired.
> > + @retval EFI_DEVICE_ERROR Caller processor is AP.
> > + @retval EFI_NOT_READY Any enabled APs are busy.
> > + @retval EFI_TIMEOUT In blocking mode, the timeout expired
> before
> > all
> > + enabled APs have finished.
> > + @retval EFI_INVALID_PARAMETER Procedure is NULL.
> > +**/
> > +EFI_STATUS
> > +EFIAPI
> > +PeiStartupAllCPUs (
> > + IN EDKII_PEI_MP_SERVICES2_PPI *This,
> > + IN EFI_AP_PROCEDURE Procedure,
> > + IN UINTN TimeoutInMicroSeconds,
> > + IN VOID *ProcedureArgument OPTIONAL
> > + );
> > +
> > extern EFI_PEI_NOTIFY_DESCRIPTOR mPostMemNotifyList[];
> >
> > #endif
> > diff --git a/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
> > b/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
> > index 4fc4ea77ba..e42ba824e4 100644
> > --- a/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
> > +++ b/UefiCpuPkg/CpuMpPei/CpuMpPei.inf
> > @@ -54,6 +54,7 @@
> > gEfiSecPlatformInformation2PpiGuid
> > gEfiVectorHandoffInfoPpiGuid ## SOMETIMES_CONSUMES
> > gEfiPeiMemoryDiscoveredPpiGuid ## CONSUMES
> > + gEdkiiPeiMpServices2PpiGuid ## PRODUCES
> >
> > [Pcd]
> >
> >
> gEfiMdeModulePkgTokenSpaceGuid.PcdPteMemoryEncryptionAddressOrM
> > ask ## CONSUMES
> > --
> > 2.21.0.windows.1
> >
> >
> >
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#44071): https://edk2.groups.io/g/devel/message/44071
Mute This Topic: https://groups.io/mt/32524460/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
© 2016 - 2026 Red Hat, Inc.