]> git.proxmox.com Git - mirror_edk2.git/blob - UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.h
BaseTools/Capsule: Do not support -o with --dump-info
[mirror_edk2.git] / UefiCpuPkg / PiSmmCpuDxeSmm / CpuService.h
1 /** @file
2 Include file for SMM CPU Services protocol implementation.
3
4 Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR>
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #ifndef _CPU_SERVICE_H_
16 #define _CPU_SERVICE_H_
17
18 typedef enum {
19 SmmCpuNone,
20 SmmCpuAdd,
21 SmmCpuRemove,
22 SmmCpuSwitchBsp
23 } SMM_CPU_OPERATION;
24
25 //
26 // SMM CPU Service Protocol function prototypes.
27 //
28
29 /**
30 Gets processor information on the requested processor at the instant this call is made.
31
32 @param[in] This A pointer to the EFI_SMM_CPU_SERVICE_PROTOCOL instance.
33 @param[in] ProcessorNumber The handle number of processor.
34 @param[out] ProcessorInfoBuffer A pointer to the buffer where information for
35 the requested processor is deposited.
36
37 @retval EFI_SUCCESS Processor information was returned.
38 @retval EFI_INVALID_PARAMETER ProcessorInfoBuffer is NULL.
39 @retval EFI_INVALID_PARAMETER ProcessorNumber is invalid.
40 @retval EFI_NOT_FOUND The processor with the handle specified by
41 ProcessorNumber does not exist in the platform.
42
43 **/
44 EFI_STATUS
45 EFIAPI
46 SmmGetProcessorInfo (
47 IN CONST EFI_SMM_CPU_SERVICE_PROTOCOL *This,
48 IN UINTN ProcessorNumber,
49 OUT EFI_PROCESSOR_INFORMATION *ProcessorInfoBuffer
50 );
51
52 /**
53 This service switches the requested AP to be the BSP since the next SMI.
54
55 @param[in] This A pointer to the EFI_SMM_CPU_SERVICE_PROTOCOL instance.
56 @param[in] ProcessorNumber The handle number of AP that is to become the new BSP.
57
58 @retval EFI_SUCCESS BSP will be switched in next SMI.
59 @retval EFI_UNSUPPORTED Switching the BSP or a processor to be hot-removed is not supported.
60 @retval EFI_NOT_FOUND The processor with the handle specified by ProcessorNumber does not exist.
61 @retval EFI_INVALID_PARAMETER ProcessorNumber is invalid.
62 **/
63 EFI_STATUS
64 EFIAPI
65 SmmSwitchBsp (
66 IN CONST EFI_SMM_CPU_SERVICE_PROTOCOL *This,
67 IN UINTN ProcessorNumber
68 );
69
70 /**
71 Notify that a processor was hot-added.
72
73 @param[in] This A pointer to the EFI_SMM_CPU_SERVICE_PROTOCOL instance.
74 @param[in] ProcessorId Local APIC ID of the hot-added processor.
75 @param[out] ProcessorNumber The handle number of the hot-added processor.
76
77 @retval EFI_SUCCESS The hot-addition of the specified processors was successfully notified.
78 @retval EFI_UNSUPPORTED Hot addition of processor is not supported.
79 @retval EFI_NOT_FOUND The processor with the handle specified by ProcessorNumber does not exist.
80 @retval EFI_INVALID_PARAMETER ProcessorNumber is invalid.
81 @retval EFI_ALREADY_STARTED The processor is already online in the system.
82 **/
83 EFI_STATUS
84 EFIAPI
85 SmmAddProcessor (
86 IN CONST EFI_SMM_CPU_SERVICE_PROTOCOL *This,
87 IN UINT64 ProcessorId,
88 OUT UINTN *ProcessorNumber
89 );
90
91 /**
92 Notify that a processor was hot-removed.
93
94 @param[in] This A pointer to the EFI_SMM_CPU_SERVICE_PROTOCOL instance.
95 @param[in] ProcessorNumber The handle number of the hot-added processor.
96
97 @retval EFI_SUCCESS The hot-removal of the specified processors was successfully notified.
98 @retval EFI_UNSUPPORTED Hot removal of processor is not supported.
99 @retval EFI_UNSUPPORTED Hot removal of BSP is not supported.
100 @retval EFI_UNSUPPORTED Hot removal of a processor with pending hot-plug operation is not supported.
101 @retval EFI_INVALID_PARAMETER ProcessorNumber is invalid.
102 **/
103 EFI_STATUS
104 EFIAPI
105 SmmRemoveProcessor (
106 IN CONST EFI_SMM_CPU_SERVICE_PROTOCOL *This,
107 IN UINTN ProcessorNumber
108 );
109
110 /**
111 This return the handle number for the calling processor.
112
113 @param[in] This A pointer to the EFI_SMM_CPU_SERVICE_PROTOCOL instance.
114 @param[out] ProcessorNumber The handle number of currently executing processor.
115
116 @retval EFI_SUCCESS The current processor handle number was returned
117 in ProcessorNumber.
118 @retval EFI_INVALID_PARAMETER ProcessorNumber is NULL.
119
120 **/
121 EFI_STATUS
122 EFIAPI
123 SmmWhoAmI (
124 IN CONST EFI_SMM_CPU_SERVICE_PROTOCOL *This,
125 OUT UINTN *ProcessorNumber
126 );
127
128 /**
129 Register exception handler.
130
131 @param This A pointer to the SMM_CPU_SERVICE_PROTOCOL instance.
132 @param ExceptionType Defines which interrupt or exception to hook. Type EFI_EXCEPTION_TYPE and
133 the valid values for this parameter are defined in EFI_DEBUG_SUPPORT_PROTOCOL
134 of the UEFI 2.0 specification.
135 @param InterruptHandler A pointer to a function of type EFI_CPU_INTERRUPT_HANDLER
136 that is called when a processor interrupt occurs.
137 If this parameter is NULL, then the handler will be uninstalled.
138
139 @retval EFI_SUCCESS The handler for the processor interrupt was successfully installed or uninstalled.
140 @retval EFI_ALREADY_STARTED InterruptHandler is not NULL, and a handler for InterruptType was previously installed.
141 @retval EFI_INVALID_PARAMETER InterruptHandler is NULL, and a handler for InterruptType was not previously installed.
142 @retval EFI_UNSUPPORTED The interrupt specified by InterruptType is not supported.
143
144 **/
145 EFI_STATUS
146 EFIAPI
147 SmmRegisterExceptionHandler (
148 IN EFI_SMM_CPU_SERVICE_PROTOCOL *This,
149 IN EFI_EXCEPTION_TYPE ExceptionType,
150 IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler
151 );
152
153 //
154 // Internal function prototypes
155 //
156
157 /**
158 Update the SMM CPU list per the pending operation.
159
160 This function is called after return from SMI handlers.
161 **/
162 VOID
163 SmmCpuUpdate (
164 VOID
165 );
166
167 /**
168 Initialize SMM CPU Services.
169
170 It installs EFI SMM CPU Services Protocol.
171
172 @param ImageHandle The firmware allocated handle for the EFI image.
173
174 @retval EFI_SUCCESS EFI SMM CPU Services Protocol was installed successfully.
175 **/
176 EFI_STATUS
177 InitializeSmmCpuServices (
178 IN EFI_HANDLE Handle
179 );
180
181 #endif