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