APs to help test system memory in parallel with other device initialization.\r
Diagnostics applications may also use this protocol for multi-processor.\r
\r
- Copyright (c) 1999 - 2002, 2009, Intel Corporation.<BR>\r
- All rights reserved. This program and the accompanying materials\r
- are licensed and made available under the terms and conditions of the BSD License\r
- which accompanies this distribution. The full text of the license may be found at<BR>\r
- http://opensource.org/licenses/bsd-license.php\r
+Copyright (c) 1999 - 2010, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials are licensed and made available under \r
+the terms and conditions of the BSD License that accompanies this distribution. \r
+The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php. \r
+ \r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
-\r
---*/\r
+**/\r
\r
#ifndef _FRAMEWORK_MP_SERVICE_PROTOCOL_H_\r
#define _FRAMEWORK_MP_SERVICE_PROTOCOL_H_\r
\r
+#include <FrameworkDxe.h>\r
+\r
///\r
-/// Global ID for the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
+/// Global ID for the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL.\r
///\r
#define FRAMEWORK_EFI_MP_SERVICES_PROTOCOL_GUID \\r
{ \\r
}\r
\r
///\r
-/// Forward declaration for the EFI_MP_SERVICES_PROTOCOL\r
+/// Forward declaration for the EFI_MP_SERVICES_PROTOCOL.\r
///\r
typedef struct _FRAMEWORK_EFI_MP_SERVICES_PROTOCOL FRAMEWORK_EFI_MP_SERVICES_PROTOCOL;\r
\r
///\r
-/// Fixed delivery mode that may be used as the DeliveryMode parameter in SendIpi() \r
+/// Fixed delivery mode that may be used as the DeliveryMode parameter in SendIpi().\r
///\r
#define DELIVERY_MODE_FIXED 0x0\r
\r
///\r
-/// Lowest priority delivery mode that may be used as the DeliveryMode parameter in SendIpi() \r
+/// Lowest priority delivery mode that may be used as the DeliveryMode parameter in SendIpi(). \r
///\r
#define DELIVERY_MODE_LOWEST_PRIORITY 0x1\r
\r
///\r
-/// SMI delivery mode that may be used as the DeliveryMode parameter in SendIpi() \r
+/// SMI delivery mode that may be used as the DeliveryMode parameter in SendIpi(). \r
///\r
#define DELIVERY_MODE_SMI 0x2\r
\r
///\r
-/// Remote read delivery mode that may be used as the DeliveryMode parameter in SendIpi() \r
+/// Remote read delivery mode that may be used as the DeliveryMode parameter in SendIpi(). \r
///\r
#define DELIVERY_MODE_REMOTE_READ 0x3\r
\r
///\r
-/// NMI delivery mode that may be used as the DeliveryMode parameter in SendIpi() \r
+/// NMI delivery mode that may be used as the DeliveryMode parameter in SendIpi(). \r
///\r
#define DELIVERY_MODE_NMI 0x4\r
\r
///\r
-/// INIT delivery mode that may be used as the DeliveryMode parameter in SendIpi() \r
+/// INIT delivery mode that may be used as the DeliveryMode parameter in SendIpi(). \r
///\r
#define DELIVERY_MODE_INIT 0x5\r
\r
///\r
-/// Startup IPI delivery mode that may be used as the DeliveryMode parameter in SendIpi() \r
+/// Startup IPI delivery mode that may be used as the DeliveryMode parameter in SendIpi().\r
///\r
#define DELIVERY_MODE_SIPI 0x6\r
\r
///\r
-/// The DeliveryMode parameter in SendIpi() bust be less than this maximum value\r
+/// The DeliveryMode parameter in SendIpi() must be less than this maximum value.\r
///\r
#define DELIVERY_MODE_MAX 0x7\r
\r
///\r
-/// IPF specific value for the state field of the Self Test State Parameter\r
+/// IPF specific value for the state field of the Self Test State Parameter.\r
///\r
#define EFI_MP_HEALTH_FLAGS_STATUS_HEALTHY 0x0\r
\r
///\r
-/// IPF specific value for the state field of the Self Test State Parameter\r
+/// IPF specific value for the state field of the Self Test State Parameter.\r
///\r
#define EFI_MP_HEALTH_FLAGS_STATUS_PERFORMANCE_RESTRICTED 0x1\r
\r
///\r
-/// IPF specific value for the state field of the Self Test State Parameter\r
+/// IPF specific value for the state field of the Self Test State Parameter.\r
///\r
#define EFI_MP_HEALTH_FLAGS_STATUS_FUNCTIONALLY_RESTRICTED 0x2\r
\r
typedef union {\r
///\r
- /// Bitfield structure for the IPF Self Test State Parameter \r
+ /// Bitfield structure for the IPF Self Test State Parameter. \r
///\r
struct {\r
UINT32 Status:2;\r
UINT32 Reserved2:12;\r
} Bits;\r
///\r
- /// IA32 and X64 BIST data of the processor\r
+ /// IA32 and X64 BIST data of the processor.\r
///\r
UINT32 Uint32;\r
} EFI_MP_HEALTH_FLAGS;\r
typedef struct {\r
///\r
/// @par IA32, X64:\r
- /// BIST (built-in self test) data of the processor.\r
+ /// BIST (built-in self-test) data of the processor.\r
///\r
/// @par IPF:\r
- /// Lower 32 bits of self test state parameter. For definition of self test \r
+ /// Lower 32 bits of the self-test state parameter. For definition of self-test \r
/// state parameter, please refer to Intel(R) Itanium(R) Architecture Software \r
- /// Developer\92s Manual, Volume 2: System Architecture.\r
+ /// Developer's Manual, Volume 2: System Architecture.\r
///\r
EFI_MP_HEALTH_FLAGS Flags;\r
///\r
} EFI_MP_HEALTH;\r
\r
typedef enum {\r
- EfiCpuAP = 0, ///< The CPU is an AP (Application Processor)\r
- EfiCpuBSP, ///< The CPU is the BSP (Boot-Strap Processor)\r
+ EfiCpuAP = 0, ///< The CPU is an AP (Application Processor).\r
+ EfiCpuBSP, ///< The CPU is the BSP (Boot-Strap Processor).\r
EfiCpuDesignationMaximum\r
} EFI_CPU_DESIGNATION;\r
\r
///\r
/// @par IPF:\r
/// Bit format of this field is the same as the definition of self-test state \r
- /// parameter, in Intel® Itanium® Architecture Software Developer\92s Manual, \r
+ /// parameter, in Intel(R) Itanium(R) Architecture Software Developer's Manual, \r
/// Volume 2: System Architecture.\r
///\r
EFI_MP_HEALTH Health;\r
- Rendezvous interrupt number (IPF-specific)\r
- Length of the rendezvous procedure.\r
\r
- @param[in] This Pointer to the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
+ @param[in] This The pointer to the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
instance.\r
- @param[out] NumberOfCPUs Pointer to the total number of logical processors \r
+ @param[out] NumberOfCPUs The pointer to the total number of logical processors \r
in the system, including the BSP and disabled \r
APs. If NULL, this parameter is ignored.\r
@param[out] MaximumNumberOfCPUs Pointer to the maximum number of processors \r
supported by the system. If NULL, this \r
parameter is ignored.\r
- @param[out] NumberOfEnabledCPUs Pointer to the number of enabled logical \r
+ @param[out] NumberOfEnabledCPUs The pointer to the number of enabled logical \r
processors that exist in system, including \r
the BSP. If NULL, this parameter is ignored.\r
@param[out] RendezvousIntNumber This parameter is only meaningful for IPF.\r
If NULL, this parameter is ignored.\r
- IPF: Pointer to the rendezvous interrupt \r
number that is used for AP wake-up.\r
- @param[out] RendezvousProcLength Pointer to the length of rendezvous procedure. \r
+ @param[out] RendezvousProcLength The pointer to the length of rendezvous procedure. \r
- IA32, X64: The returned value is 0x1000. \r
If NULL, this parameter is ignored.\r
- IPF: The returned value is zero.\r
\r
- @retval EFI_SUCCESS Multiprocessor general information successfully retrieved.\r
+ @retval EFI_SUCCESS Multiprocessor general information was successfully retrieved.\r
\r
**/\r
typedef\r
EFI_STATUS\r
-(EFIAPI *FRAMEWORK_EFI_MP_SERVICES_GET_GENERAL_MP_INFO)(\r
+(EFIAPI *EFI_MP_SERVICES_GET_GENERAL_MP_INFO)(\r
IN FRAMEWORK_EFI_MP_SERVICES_PROTOCOL *This,\r
OUT UINTN *NumberOfCPUs OPTIONAL,\r
OUT UINTN *MaximumNumberOfCPUs OPTIONAL,\r
slot numbers is all considered platform-related information and will not be \r
presented here. \r
\r
- @param[in] This Pointer to the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
+ @param[in] This The pointer to the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
instance.\r
@param[in] ProcessorNumber The handle number of the processor. The range\r
is from 0 to the total number of logical \r
If the size of ProcessorContextBuffer is \r
sufficient, the value is not changed from \r
input.\r
- @param[out] ProcessorContextBuffer Pointer to the buffer where the data of \r
+ @param[out] ProcessorContextBuffer The pointer to the buffer where the data of \r
requested processor will be deposited. \r
The buffer is allocated by caller. \r
\r
- @retval EFI_SUCCESS Processor information successfully returned.\r
+ @retval EFI_SUCCESS Processor information was successfully returned.\r
@retval EFI_BUFFER_TOO_SMALL The size of ProcessorContextBuffer is too small. \r
- Value pointed by BufferLength has been updated \r
+ The value pointed by BufferLength has been updated \r
to size in bytes that is needed.\r
@retval EFI_INVALID_PARAMETER IA32, X64:BufferLength is NULL.\r
@retval EFI_INVALID_PARAMETER IA32, X64:ProcessorContextBuffer is NULL.\r
@retval EFI_INVALID_PARAMETER IA32, X64:Processor with the handle specified by \r
- ProcessorNumber does not exist\r
+ ProcessorNumber does not exist.\r
@retval EFI_NOT_FOUND IPF: Processor with the handle specified by \r
- ProcessorNumber does not exist\r
+ ProcessorNumber does not exist.\r
\r
**/\r
typedef\r
EFI_STATUS\r
-(EFIAPI *FRAMEWORK_EFI_MP_SERVICES_GET_PROCESSOR_CONTEXT)(\r
+(EFIAPI *EFI_MP_SERVICES_GET_PROCESSOR_CONTEXT)(\r
IN FRAMEWORK_EFI_MP_SERVICES_PROTOCOL *This,\r
IN UINTN ProcessorNumber,\r
IN OUT UINTN *BufferLength,\r
controlled exclusive code. EFI services and protocols may not be called by APs \r
unless otherwise specified.\r
\r
- @param[in] This Pointer to the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
+ @param[in] This The pointer to the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
instance.\r
@param[in] Procedure A pointer to the function to be run on enabled \r
APs of the system. \r
If the value is not zero, the BSP waits \r
until all APs finish or timeout expires. \r
If timeout expires, EFI_TIMEOUT is returned,\r
- and the BSP will then check APs\92 status \r
+ and the BSP will then check APs?status \r
periodically, with time interval of 16 \r
microseconds.\r
- IPF:\r
If the value is non-zero, the BSP waits \r
until dispatched AP finishes and then \r
dispatch the next.\r
- @param[in] ProcedureArgument Pointer to the optional parameter of the \r
+ @param[in] ProcedureArgument The pointer to the optional parameter of the \r
function specified by Procedure.\r
@param[out] FailedCPUList List of APs that did not finish.\r
- IA32, X64:\r
before the timeout expires.\r
@retval EFI_SUCCESS IA32, X64: Only 1 logical processor exists \r
in system.\r
- @retval EFI_INVALID_PARAMETER IA32, X64: Procedure is NULL.\r
+ @retval EFI_INVALID_PARAMETER IA32, X64: Procedure is NULL.\r
@retval EFI_TIMEOUT IA32, X64: The timeout expires before all \r
dispatched APs have finished.\r
@retval EFI_SUCCESS IPF: This function always returns EFI_SUCCESS.\r
the caller. The caller can request the BSP to either wait for the AP or just \r
proceed with the next task.\r
\r
- @param[in] This Pointer to the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
+ @param[in] This The pointer to the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
instance.\r
@param[in] Procedure A pointer to the function to be run on the \r
designated AP. \r
If the value is not zero, the BSP waits until \r
the AP finishes or timeout expires. If timeout \r
expires, EFI_TIMEOUT is returned, and the \r
- BSP will then check the AP\92s status periodically, \r
+ BSP will then check the AP's status periodically, \r
with time interval of 16 microseconds.\r
- IPF:\r
If WaitEvent is NULL, this parameter is ignored.\r
time interval. If the value is zero, the length \r
of time interval is 10ms. If the value is \r
non-zero, the BSP waits until the AP finishes.\r
- @param[in] ProcedureArgument Pointer to the optional parameter of the \r
+ @param[in] ProcedureArgument The pointer to the optional parameter of the \r
function specified by Procedure.\r
\r
@retval EFI_SUCCESS Specified AP has finished before the timeout \r
from where the old one left off. This call can only be performed by the \r
current BSP.\r
\r
- @param[in] This Pointer to the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
+ @param[in] This The pointer to the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
instance.\r
@param[in] ProcessorNumber The handle number of AP. The range is from 0 to \r
the total number of logical processors minus 1. \r
enabled AP. Otherwise, it will be disabled.\r
\r
@retval EFI_SUCCESS BSP successfully switched.\r
- @retval EFI_INVALID_PARAMETER Processor with the handle specified by \r
+ @retval EFI_INVALID_PARAMETER The processor with the handle specified by \r
ProcessorNumber does not exist.\r
@retval EFI_INVALID_PARAMETER ProcessorNumber specifies the BSP.\r
@retval EFI_NOT_READY IA32, X64: Specified AP is busy or disabled.\r
This service sends an IPI to a specified AP. Caller can specify vector number \r
and delivery mode of the interrupt.\r
\r
- @param[in] This Pointer to the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
+ @param[in] This The pointer to the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
instance.\r
@param[in] ProcessorNumber The handle number of AP. The range is from 0 to \r
the total number of logical processors minus 1. \r
The total number of logical processors can be \r
retrieved by GetGeneralMPInfo().\r
- @param[in] VectorNumber Vector number of the interrupt.\r
- @param[in] DeliveryMode Delivery mode of the interrupt.\r
+ @param[in] VectorNumber The vector number of the interrupt.\r
+ @param[in] DeliveryMode The delivery mode of the interrupt.\r
\r
- @retval EFI_SUCCESS IPI is successfully sent.\r
+ @retval EFI_SUCCESS IPI was successfully sent.\r
@retval EFI_INVALID_PARAMETER ProcessorNumber specifies the BSP.\r
@retval EFI_INVALID_PARAMETER IA32, X64: Processor with the handle specified \r
by ProcessorNumber does not exist.\r
**/\r
typedef\r
EFI_STATUS\r
-(EFIAPI *FRAMEWORK_EFI_MP_SERVICES_SEND_IPI)(\r
+(EFIAPI *EFI_MP_SERVICES_SEND_IPI)(\r
IN FRAMEWORK_EFI_MP_SERVICES_PROTOCOL *This,\r
IN UINTN ProcessorNumber,\r
IN UINTN VectorNumber,\r
specify the health status of the AP by Health. It is usually used to update the \r
health status of the processor after some processor test.\r
\r
- @param[in] This Pointer to the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
+ @param[in] This The pointer to the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
instance.\r
@param[in] ProcessorNumber The handle number of AP. The range is from 0 to \r
the total number of logical processors minus 1. \r
processors can be retrieved by GetGeneralMPInfo(). This service may be called \r
from the BSP and APs.\r
\r
- @param[in] This Pointer to the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
+ @param[in] This The pointer to the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
instance.\r
@param[out] ProcessorNumber A pointer to the handle number of AP. The range is \r
from 0 to the total number of logical processors \r
);\r
\r
///\r
-/// Framework MP Services Protocol structure\r
+/// Framework MP Services Protocol structure.\r
///\r
-typedef struct _FRAMEWORK_EFI_MP_SERVICES_PROTOCOL {\r
- FRAMEWORK_EFI_MP_SERVICES_GET_GENERAL_MP_INFO GetGeneralMPInfo;\r
- FRAMEWORK_EFI_MP_SERVICES_GET_PROCESSOR_CONTEXT GetProcessorContext;\r
+struct _FRAMEWORK_EFI_MP_SERVICES_PROTOCOL {\r
+ EFI_MP_SERVICES_GET_GENERAL_MP_INFO GetGeneralMPInfo;\r
+ EFI_MP_SERVICES_GET_PROCESSOR_CONTEXT GetProcessorContext;\r
FRAMEWORK_EFI_MP_SERVICES_STARTUP_ALL_APS StartupAllAPs;\r
FRAMEWORK_EFI_MP_SERVICES_STARTUP_THIS_AP StartupThisAP;\r
FRAMEWORK_EFI_MP_SERVICES_SWITCH_BSP SwitchBSP;\r
- FRAMEWORK_EFI_MP_SERVICES_SEND_IPI SendIPI;\r
+ EFI_MP_SERVICES_SEND_IPI SendIPI;\r
FRAMEWORK_EFI_MP_SERVICES_ENABLEDISABLEAP EnableDisableAP;\r
FRAMEWORK_EFI_MP_SERVICES_WHOAMI WhoAmI;\r
};\r