2 This file declares UEFI PI Multi-processor PPI.
3 This PPI is installed by some platform or chipset-specific PEIM that abstracts
4 handling multiprocessor support.
6 Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>
7 SPDX-License-Identifier: BSD-2-Clause-Patent
9 @par Revision Reference:
10 This PPI is introduced in PI Version 1.4.
14 #ifndef __PEI_MP_SERVICES_PPI_H__
15 #define __PEI_MP_SERVICES_PPI_H__
17 #include <Protocol/MpService.h>
19 #define EFI_PEI_MP_SERVICES_PPI_GUID \
21 0xee16160a, 0xe8be, 0x47a6, { 0x82, 0xa, 0xc6, 0x90, 0xd, 0xb0, 0x25, 0xa } \
24 typedef struct _EFI_PEI_MP_SERVICES_PPI EFI_PEI_MP_SERVICES_PPI
;
27 Get the number of CPU's.
29 @param[in] PeiServices An indirect pointer to the PEI Services Table
30 published by the PEI Foundation.
31 @param[in] This Pointer to this instance of the PPI.
32 @param[out] NumberOfProcessors Pointer to the total number of logical processors in
33 the system, including the BSP and disabled APs.
34 @param[out] NumberOfEnabledProcessors
35 Number of processors in the system that are enabled.
37 @retval EFI_SUCCESS The number of logical processors and enabled
38 logical processors was retrieved.
39 @retval EFI_DEVICE_ERROR The calling processor is an AP.
40 @retval EFI_INVALID_PARAMETER NumberOfProcessors is NULL.
41 NumberOfEnabledProcessors is NULL.
45 (EFIAPI
*EFI_PEI_MP_SERVICES_GET_NUMBER_OF_PROCESSORS
) (
46 IN CONST EFI_PEI_SERVICES
**PeiServices
,
47 IN EFI_PEI_MP_SERVICES_PPI
*This
,
48 OUT UINTN
*NumberOfProcessors
,
49 OUT UINTN
*NumberOfEnabledProcessors
53 Get information on a specific CPU.
55 @param[in] PeiServices An indirect pointer to the PEI Services Table
56 published by the PEI Foundation.
57 @param[in] This Pointer to this instance of the PPI.
58 @param[in] ProcessorNumber Pointer to the total number of logical processors in
59 the system, including the BSP and disabled APs.
60 @param[out] ProcessorInfoBuffer Number of processors in the system that are enabled.
62 @retval EFI_SUCCESS Processor information was returned.
63 @retval EFI_DEVICE_ERROR The calling processor is an AP.
64 @retval EFI_INVALID_PARAMETER ProcessorInfoBuffer is NULL.
65 @retval EFI_NOT_FOUND The processor with the handle specified by
66 ProcessorNumber does not exist in the platform.
70 (EFIAPI
*EFI_PEI_MP_SERVICES_GET_PROCESSOR_INFO
) (
71 IN CONST EFI_PEI_SERVICES
**PeiServices
,
72 IN EFI_PEI_MP_SERVICES_PPI
*This
,
73 IN UINTN ProcessorNumber
,
74 OUT EFI_PROCESSOR_INFORMATION
*ProcessorInfoBuffer
78 Activate all of the application processors.
80 @param[in] PeiServices An indirect pointer to the PEI Services Table
81 published by the PEI Foundation.
82 @param[in] This A pointer to the EFI_PEI_MP_SERVICES_PPI instance.
83 @param[in] Procedure A pointer to the function to be run on enabled APs of
85 @param[in] SingleThread If TRUE, then all the enabled APs execute the function
86 specified by Procedure one by one, in ascending order
87 of processor handle number. If FALSE, then all the
88 enabled APs execute the function specified by Procedure
90 @param[in] TimeoutInMicroSeconds
91 Indicates the time limit in microseconds for APs to
92 return from Procedure, for blocking mode only. Zero
93 means infinity. If the timeout expires before all APs
94 return from Procedure, then Procedure on the failed APs
95 is terminated. All enabled APs are available for next
96 function assigned by EFI_PEI_MP_SERVICES_PPI.StartupAllAPs()
97 or EFI_PEI_MP_SERVICES_PPI.StartupThisAP(). If the
98 timeout expires in blocking mode, BSP returns
100 @param[in] ProcedureArgument The parameter passed into Procedure for all APs.
102 @retval EFI_SUCCESS In blocking mode, all APs have finished before the
104 @retval EFI_DEVICE_ERROR Caller processor is AP.
105 @retval EFI_NOT_STARTED No enabled APs exist in the system.
106 @retval EFI_NOT_READY Any enabled APs are busy.
107 @retval EFI_TIMEOUT In blocking mode, the timeout expired before all
108 enabled APs have finished.
109 @retval EFI_INVALID_PARAMETER Procedure is NULL.
113 (EFIAPI
*EFI_PEI_MP_SERVICES_STARTUP_ALL_APS
) (
114 IN CONST EFI_PEI_SERVICES
**PeiServices
,
115 IN EFI_PEI_MP_SERVICES_PPI
*This
,
116 IN EFI_AP_PROCEDURE Procedure
,
117 IN BOOLEAN SingleThread
,
118 IN UINTN TimeoutInMicroSeconds
,
119 IN VOID
*ProcedureArgument OPTIONAL
123 Activate a specific application processor.
125 @param[in] PeiServices An indirect pointer to the PEI Services Table
126 published by the PEI Foundation.
127 @param[in] This A pointer to the EFI_PEI_MP_SERVICES_PPI instance.
128 @param[in] Procedure A pointer to the function to be run on enabled APs of
130 @param[in] ProcessorNumber The handle number of the AP. The range is from 0 to the
131 total number of logical processors minus 1. The total
132 number of logical processors can be retrieved by
133 EFI_PEI_MP_SERVICES_PPI.GetNumberOfProcessors().
134 @param[in] TimeoutInMicroSeconds
135 Indicates the time limit in microseconds for APs to
136 return from Procedure, for blocking mode only. Zero
137 means infinity. If the timeout expires before all APs
138 return from Procedure, then Procedure on the failed APs
139 is terminated. All enabled APs are available for next
140 function assigned by EFI_PEI_MP_SERVICES_PPI.StartupAllAPs()
141 or EFI_PEI_MP_SERVICES_PPI.StartupThisAP(). If the
142 timeout expires in blocking mode, BSP returns
144 @param[in] ProcedureArgument The parameter passed into Procedure for all APs.
146 @retval EFI_SUCCESS In blocking mode, specified AP finished before the
148 @retval EFI_DEVICE_ERROR The calling processor is an AP.
149 @retval EFI_TIMEOUT In blocking mode, the timeout expired before the
150 specified AP has finished.
151 @retval EFI_NOT_FOUND The processor with the handle specified by
152 ProcessorNumber does not exist.
153 @retval EFI_INVALID_PARAMETER ProcessorNumber specifies the BSP or disabled AP.
154 @retval EFI_INVALID_PARAMETER Procedure is NULL.
158 (EFIAPI
*EFI_PEI_MP_SERVICES_STARTUP_THIS_AP
) (
159 IN CONST EFI_PEI_SERVICES
**PeiServices
,
160 IN EFI_PEI_MP_SERVICES_PPI
*This
,
161 IN EFI_AP_PROCEDURE Procedure
,
162 IN UINTN ProcessorNumber
,
163 IN UINTN TimeoutInMicroseconds
,
164 IN VOID
*ProcedureArgument OPTIONAL
168 Switch the boot strap processor.
170 @param[in] PeiServices An indirect pointer to the PEI Services Table
171 published by the PEI Foundation.
172 @param[in] This A pointer to the EFI_PEI_MP_SERVICES_PPI instance.
173 @param[in] ProcessorNumber The handle number of the AP. The range is from 0 to the
174 total number of logical processors minus 1. The total
175 number of logical processors can be retrieved by
176 EFI_PEI_MP_SERVICES_PPI.GetNumberOfProcessors().
177 @param[in] EnableOldBSP If TRUE, then the old BSP will be listed as an enabled
178 AP. Otherwise, it will be disabled.
180 @retval EFI_SUCCESS BSP successfully switched.
181 @retval EFI_UNSUPPORTED Switching the BSP cannot be completed prior to this
183 @retval EFI_UNSUPPORTED Switching the BSP is not supported.
184 @retval EFI_DEVICE_ERROR The calling processor is an AP.
185 @retval EFI_NOT_FOUND The processor with the handle specified by
186 ProcessorNumber does not exist.
187 @retval EFI_INVALID_PARAMETER ProcessorNumber specifies the current BSP or a disabled
189 @retval EFI_NOT_READY The specified AP is busy.
193 (EFIAPI
*EFI_PEI_MP_SERVICES_SWITCH_BSP
) (
194 IN CONST EFI_PEI_SERVICES
**PeiServices
,
195 IN EFI_PEI_MP_SERVICES_PPI
*This
,
196 IN UINTN ProcessorNumber
,
197 IN BOOLEAN EnableOldBSP
201 Enable or disable an application processor.
203 @param[in] PeiServices An indirect pointer to the PEI Services Table
204 published by the PEI Foundation.
205 @param[in] This A pointer to the EFI_PEI_MP_SERVICES_PPI instance.
206 @param[in] ProcessorNumber The handle number of the AP. The range is from 0 to the
207 total number of logical processors minus 1. The total
208 number of logical processors can be retrieved by
209 EFI_PEI_MP_SERVICES_PPI.GetNumberOfProcessors().
210 @param[in] EnableAP Specifies the new state for the processor for enabled,
212 @param[in] HealthFlag If not NULL, a pointer to a value that specifies the
213 new health status of the AP. This flag corresponds to
214 StatusFlag defined in EFI_PEI_MP_SERVICES_PPI.GetProcessorInfo().
215 Only the PROCESSOR_HEALTH_STATUS_BIT is used. All other
216 bits are ignored. If it is NULL, this parameter is
219 @retval EFI_SUCCESS The specified AP was enabled or disabled successfully.
220 @retval EFI_UNSUPPORTED Enabling or disabling an AP cannot be completed prior
221 to this service returning.
222 @retval EFI_UNSUPPORTED Enabling or disabling an AP is not supported.
223 @retval EFI_DEVICE_ERROR The calling processor is an AP.
224 @retval EFI_NOT_FOUND Processor with the handle specified by ProcessorNumber
226 @retval EFI_INVALID_PARAMETER ProcessorNumber specifies the BSP.
230 (EFIAPI
*EFI_PEI_MP_SERVICES_ENABLEDISABLEAP
) (
231 IN CONST EFI_PEI_SERVICES
**PeiServices
,
232 IN EFI_PEI_MP_SERVICES_PPI
*This
,
233 IN UINTN ProcessorNumber
,
235 IN UINT32
*HealthFlag OPTIONAL
239 Identify the currently executing processor.
241 @param[in] PeiServices An indirect pointer to the PEI Services Table
242 published by the PEI Foundation.
243 @param[in] This A pointer to the EFI_PEI_MP_SERVICES_PPI instance.
244 @param[out] ProcessorNumber The handle number of the AP. The range is from 0 to the
245 total number of logical processors minus 1. The total
246 number of logical processors can be retrieved by
247 EFI_PEI_MP_SERVICES_PPI.GetNumberOfProcessors().
249 @retval EFI_SUCCESS The current processor handle number was returned in
251 @retval EFI_INVALID_PARAMETER ProcessorNumber is NULL.
255 (EFIAPI
*EFI_PEI_MP_SERVICES_WHOAMI
) (
256 IN CONST EFI_PEI_SERVICES
**PeiServices
,
257 IN EFI_PEI_MP_SERVICES_PPI
*This
,
258 OUT UINTN
*ProcessorNumber
262 /// This PPI is installed by some platform or chipset-specific PEIM that abstracts
263 /// handling multiprocessor support.
265 struct _EFI_PEI_MP_SERVICES_PPI
{
266 EFI_PEI_MP_SERVICES_GET_NUMBER_OF_PROCESSORS GetNumberOfProcessors
;
267 EFI_PEI_MP_SERVICES_GET_PROCESSOR_INFO GetProcessorInfo
;
268 EFI_PEI_MP_SERVICES_STARTUP_ALL_APS StartupAllAPs
;
269 EFI_PEI_MP_SERVICES_STARTUP_THIS_AP StartupThisAP
;
270 EFI_PEI_MP_SERVICES_SWITCH_BSP SwitchBSP
;
271 EFI_PEI_MP_SERVICES_ENABLEDISABLEAP EnableDisableAP
;
272 EFI_PEI_MP_SERVICES_WHOAMI WhoAmI
;
275 extern EFI_GUID gEfiPeiMpServicesPpiGuid
;