]>
Commit | Line | Data |
---|---|---|
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 | |
61 | typedef 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 | |
118 | typedef 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 | |
138 | typedef 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 | |
1910fbaf | 146 | /// Developer's Manual, Volume 2: System Architecture.\r |
b6d47a83 | 147 | ///\r |
148 | EFI_MP_HEALTH_FLAGS Flags;\r | |
149 | ///\r | |
150 | /// @par IA32, X64:\r | |
151 | /// Not used.\r | |
152 | ///\r | |
153 | /// @par IPF:\r | |
154 | /// Higher 32 bits of self test state parameter.\r | |
155 | ///\r | |
156 | UINT32 TestStatus;\r | |
157 | } EFI_MP_HEALTH;\r | |
158 | \r | |
159 | typedef enum {\r | |
160 | EfiCpuAP = 0, ///< The CPU is an AP (Application Processor)\r | |
161 | EfiCpuBSP, ///< The CPU is the BSP (Boot-Strap Processor)\r | |
162 | EfiCpuDesignationMaximum\r | |
163 | } EFI_CPU_DESIGNATION;\r | |
164 | \r | |
165 | typedef struct {\r | |
166 | ///\r | |
167 | /// @par IA32, X64:\r | |
168 | /// The lower 8 bits contains local APIC ID, and higher bits are reserved.\r | |
169 | ///\r | |
170 | /// @par IPF:\r | |
171 | /// The lower 16 bits contains id/eid as physical address of local SAPIC \r | |
172 | /// unit, and higher bits are reserved.\r | |
173 | ///\r | |
174 | UINT32 ApicID;\r | |
175 | ///\r | |
176 | /// This field indicates whether the processor is enabled. If the value is \r | |
177 | /// TRUE, then the processor is enabled. Otherwise, it is disabled.\r | |
178 | ///\r | |
179 | BOOLEAN Enabled;\r | |
180 | ///\r | |
181 | /// This field indicates whether the processor is playing the role of BSP.\r | |
182 | /// If the value is EfiCpuAP, then the processor is AP. If the value is \r | |
183 | /// EfiCpuBSP, then the processor is BSP.\r | |
184 | ///\r | |
185 | EFI_CPU_DESIGNATION Designation;\r | |
186 | ///\r | |
187 | /// @par IA32, X64:\r | |
188 | /// The Flags field of this EFI_MP_HEALTH data structure holds BIST (built-in \r | |
189 | /// self test) data of the processor. The TestStatus field is not used, and \r | |
190 | /// the value is always zero.\r | |
191 | ///\r | |
192 | /// @par IPF:\r | |
193 | /// Bit format of this field is the same as the definition of self-test state \r | |
108854b2 | 194 | Content-type: text/html ]>