Add Framework MP Services Protocol
[mirror_edk2.git] / IntelFrameworkPkg / Include / Protocol / FrameworkMpService.h
CommitLineData
b6d47a83 1/** @file\r
2 When installed, the Framework MP Services Protocol produces a collection of \r
3 services that are needed for MP management, such as initialization and management \r
4 of application processors. \r
5 \r
6 @par Note: \r
7 This protocol has been deprecated and has been replaced by the MP Services \r
8 Protocol from the UEFI Platform Initialization Specification 1.2, Volume 2:\r
9 Driver Execution Environment Core Interface.\r
10\r
11 The MP Services Protocol provides a generalized way of performing following tasks:\r
12 - Retrieving information of multi-processor environment and MP-related status of\r
13 specific processors.\r
14 - Dispatching user-provided function to APs.\r
15 - Maintain MP-related processor status.\r
16\r
17 The MP Services Protocol must be produced on any system with more than one logical\r
18 processor.\r
19\r
20 The Protocol is available only during boot time.\r
21\r
22 MP Services Protocol is hardware-independent. Most of the logic of this protocol\r
23 is architecturally neutral. It abstracts the multi-processor environment and \r
24 status of processors, and provides interfaces to retrieve information, maintain, \r
25 and dispatch.\r
26\r
27 MP Services Protocol may be consumed by ACPI module. The ACPI module may use this \r
28 protocol to retrieve data that are needed for an MP platform and report them to OS.\r
29 MP Services Protocol may also be used to program and configure processors, such \r
30 as MTRR synchronization for memory space attributes setting in DXE Services.\r
31 MP Services Protocol may be used by non-CPU DXE drivers to speed up platform boot \r
32 by taking advantage of the processing capabilities of the APs, for example, using \r
33 APs to help test system memory in parallel with other device initialization.\r
34 Diagnostics applications may also use this protocol for multi-processor.\r
35\r
36 Copyright (c) 1999 - 2002, 2009, Intel Corporation.<BR>\r
37 All rights reserved. This program and the accompanying materials\r
38 are licensed and made available under the terms and conditions of the BSD License\r
39 which accompanies this distribution. The full text of the license may be found at<BR>\r
40 http://opensource.org/licenses/bsd-license.php\r
41\r
42 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
43 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
44\r
45--*/\r
46\r
47#ifndef _FRAMEWORK_MP_SERVICE_PROTOCOL_H_\r
48#define _FRAMEWORK_MP_SERVICE_PROTOCOL_H_\r
49\r
50///\r
51/// Global ID for the FRAMEWORK_EFI_MP_SERVICES_PROTOCOL\r
52///\r
53#define FRAMEWORK_EFI_MP_SERVICES_PROTOCOL_GUID \\r
54 { \\r
55 0xf33261e7, 0x23cb, 0x11d5, {0xbd, 0x5c, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} \\r
56 }\r
57\r
58///\r
59/// Forward declaration for the EFI_MP_SERVICES_PROTOCOL\r
60///\r
61typedef struct _FRAMEWORK_EFI_MP_SERVICES_PROTOCOL FRAMEWORK_EFI_MP_SERVICES_PROTOCOL;\r
62\r
63///\r
64/// Fixed delivery mode that may be used as the DeliveryMode parameter in SendIpi() \r
65///\r
66#define DELIVERY_MODE_FIXED 0x0\r
67\r
68///\r
69/// Lowest priority delivery mode that may be used as the DeliveryMode parameter in SendIpi() \r
70///\r
71#define DELIVERY_MODE_LOWEST_PRIORITY 0x1\r
72\r
73///\r
74/// SMI delivery mode that may be used as the DeliveryMode parameter in SendIpi() \r
75///\r
76#define DELIVERY_MODE_SMI 0x2\r
77\r
78///\r
79/// Remote read delivery mode that may be used as the DeliveryMode parameter in SendIpi() \r
80///\r
81#define DELIVERY_MODE_REMOTE_READ 0x3\r
82\r
83///\r
84/// NMI delivery mode that may be used as the DeliveryMode parameter in SendIpi() \r
85///\r
86#define DELIVERY_MODE_NMI 0x4\r
87\r
88///\r
89/// INIT delivery mode that may be used as the DeliveryMode parameter in SendIpi() \r
90///\r
91#define DELIVERY_MODE_INIT 0x5\r
92\r
93///\r
94/// Startup IPI delivery mode that may be used as the DeliveryMode parameter in SendIpi() \r
95///\r
96#define DELIVERY_MODE_SIPI 0x6\r
97\r
98///\r
99/// The DeliveryMode parameter in SendIpi() bust be less than this maximum value\r
100///\r
101#define DELIVERY_MODE_MAX 0x7\r
102\r
103///\r
104/// IPF specific value for the state field of the Self Test State Parameter\r
105///\r
106#define EFI_MP_HEALTH_FLAGS_STATUS_HEALTHY 0x0\r
107\r
108///\r
109/// IPF specific value for the state field of the Self Test State Parameter\r
110///\r
111#define EFI_MP_HEALTH_FLAGS_STATUS_PERFORMANCE_RESTRICTED 0x1\r
112\r
113///\r
114/// IPF specific value for the state field of the Self Test State Parameter\r
115///\r
116#define EFI_MP_HEALTH_FLAGS_STATUS_FUNCTIONALLY_RESTRICTED 0x2\r
117\r
118typedef union {\r
119 ///\r
120 /// Bitfield structure for the IPF Self Test State Parameter \r
121 ///\r
122 struct {\r
123 UINT32 Status:2;\r
124 UINT32 Tested:1;\r
125 UINT32 Reserved1:13;\r
126 UINT32 VirtualMemoryUnavailable:1;\r
127 UINT32 Ia32ExecutionUnavailable:1;\r
128 UINT32 FloatingPointUnavailable:1;\r
129 UINT32 MiscFeaturesUnavailable:1;\r
130 UINT32 Reserved2:12;\r
131 } Bits;\r
132 ///\r
133 /// IA32 and X64 BIST data of the processor\r
134 ///\r
135 UINT32 Uint32;\r
136} EFI_MP_HEALTH_FLAGS;\r
137\r
138typedef struct {\r
139 ///\r
140 /// @par IA32, X64:\r
141 /// BIST (built-in self test) data of the processor.\r
142 ///\r
143 /// @par IPF:\r
144 /// Lower 32 bits of self test state parameter. For definition of self test \r
145 /// state parameter, please refer to Intel(R) Itanium(R) Architecture Software \r
146