]> git.proxmox.com Git - mirror_edk2.git/blob - UefiCpuPkg/Library/CpuExceptionHandlerLib/CpuExceptionCommon.h
Fix comments format issue.
[mirror_edk2.git] / UefiCpuPkg / Library / CpuExceptionHandlerLib / CpuExceptionCommon.h
1 /** @file
2 Common header file for CPU Exception Handler Library.
3
4 Copyright (c) 2012 - 2013, 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_EXCEPTION_COMMON_H_
16 #define _CPU_EXCEPTION_COMMON_H_
17
18 #include <Ppi/VectorHandoffInfo.h>
19 #include <Protocol/Cpu.h>
20 #include <Library/BaseLib.h>
21 #include <Library/SerialPortLib.h>
22 #include <Library/PrintLib.h>
23 #include <Library/LocalApicLib.h>
24 #include <Library/PeCoffGetEntryPointLib.h>
25 #include <Library/BaseMemoryLib.h>
26 #include <Library/SynchronizationLib.h>
27
28 #define CPU_EXCEPTION_NUM 32
29 #define CPU_INTERRUPT_NUM 256
30 #define HOOKAFTER_STUB_SIZE 16
31
32 #include "ArchInterruptDefs.h"
33
34 //
35 // Record exception handler information
36 //
37 typedef struct {
38 UINTN ExceptionStart;
39 UINTN ExceptionStubHeaderSize;
40 UINTN HookAfterStubHeaderStart;
41 } EXCEPTION_HANDLER_TEMPLATE_MAP;
42
43 extern CONST UINT32 mErrorCodeFlag;
44 extern CONST UINTN mImageAlignSize;
45 extern CONST UINTN mDoFarReturnFlag;
46 extern RESERVED_VECTORS_DATA *mReservedVectors;
47
48 /**
49 Return address map of exception handler template so that C code can generate
50 exception tables.
51
52 @param AddressMap Pointer to a buffer where the address map is returned.
53 **/
54 VOID
55 EFIAPI
56 AsmGetTemplateAddressMap (
57 OUT EXCEPTION_HANDLER_TEMPLATE_MAP *AddressMap
58 );
59
60 /**
61 Return address map of exception handler template so that C code can generate
62 exception tables.
63
64 @param IdtEntry Pointer to IDT entry to be updated.
65 @param InterruptHandler IDT handler value.
66
67 **/
68 VOID
69 ArchUpdateIdtEntry (
70 IN IA32_IDT_GATE_DESCRIPTOR *IdtEntry,
71 IN UINTN InterruptHandler
72 );
73
74 /**
75 Read IDT handler value from IDT entry.
76
77 @param IdtEntry Pointer to IDT entry to be read.
78
79 **/
80 UINTN
81 ArchGetIdtHandler (
82 IN IA32_IDT_GATE_DESCRIPTOR *IdtEntry
83 );
84
85 /**
86 Prints a message to the serial port.
87
88 @param Format Format string for the message to print.
89 @param ... Variable argument list whose contents are accessed
90 based on the format string specified by Format.
91
92 **/
93 VOID
94 EFIAPI
95 InternalPrintMessage (
96 IN CONST CHAR8 *Format,
97 ...
98 );
99
100 /**
101 Find and display image base address and return image base and its entry point.
102
103 @param CurrentEip Current instruction pointer.
104 @param EntryPoint Return module entry point if module header is found.
105
106 @return !0 Image base address.
107 @return 0 Image header cannot be found.
108 **/
109 UINTN
110 FindModuleImageBase (
111 IN UINTN CurrentEip,
112 OUT UINTN *EntryPoint
113 );
114
115 /**
116 Display CPU information.
117
118 @param ExceptionType Exception type.
119 @param SystemContext Pointer to EFI_SYSTEM_CONTEXT.
120 **/
121 VOID
122 DumpCpuContent (
123 IN EFI_EXCEPTION_TYPE ExceptionType,
124 IN EFI_SYSTEM_CONTEXT SystemContext
125 );
126
127 /**
128 Internal worker function to initialize exception handler.
129
130 @param[in] VectorInfo Pointer to reserved vector list.
131
132 @retval EFI_SUCCESS CPU Exception Entries have been successfully initialized
133 with default exception handlers.
134 @retval EFI_INVALID_PARAMETER VectorInfo includes the invalid content if VectorInfo is not NULL.
135 @retval EFI_UNSUPPORTED This function is not supported.
136
137 **/
138 EFI_STATUS
139 InitializeCpuExceptionHandlersWorker (
140 IN EFI_VECTOR_HANDOFF_INFO *VectorInfo OPTIONAL
141 );
142
143 /**
144 Registers a function to be called from the processor interrupt handler.
145
146 @param[in] InterruptType Defines which interrupt or exception to hook.
147 @param[in] InterruptHandler A pointer to a function of type EFI_CPU_INTERRUPT_HANDLER that is called
148 when a processor interrupt occurs. If this parameter is NULL, then the handler
149 will be uninstalled.
150
151 @retval EFI_SUCCESS The handler for the processor interrupt was successfully installed or uninstalled.
152 @retval EFI_ALREADY_STARTED InterruptHandler is not NULL, and a handler for InterruptType was
153 previously installed.
154 @retval EFI_INVALID_PARAMETER InterruptHandler is NULL, and a handler for InterruptType was not
155 previously installed.
156 @retval EFI_UNSUPPORTED The interrupt specified by InterruptType is not supported,
157 or this function is not supported.
158 **/
159 EFI_STATUS
160 RegisterCpuInterruptHandlerWorker (
161 IN EFI_EXCEPTION_TYPE InterruptType,
162 IN EFI_CPU_INTERRUPT_HANDLER InterruptHandler
163 );
164
165 /**
166 Internal worker function to update IDT entries accordling to vector attributes.
167
168 @param[in] IdtTable Pointer to IDT table.
169 @param[in] TemplateMap Pointer to a buffer where the address map is returned.
170 @param[in] IdtEntryCount IDT entries number to be updated.
171
172 **/
173 VOID
174 UpdateIdtTable (
175 IN IA32_IDT_GATE_DESCRIPTOR *IdtTable,
176 IN EXCEPTION_HANDLER_TEMPLATE_MAP *TemplateMap,
177 IN UINTN IdtEntryCount
178 );
179
180 /**
181 Save CPU exception context when handling EFI_VECTOR_HANDOFF_HOOK_AFTER case.
182
183 @param[in] ExceptionType Exception type.
184 @param[in] SystemContext Pointer to EFI_SYSTEM_CONTEXT.
185
186 **/
187 VOID
188 ArchSaveExceptionContext (
189 IN UINTN ExceptionType,
190 IN EFI_SYSTEM_CONTEXT SystemContext
191 );
192
193 /**
194 Restore CPU exception context when handling EFI_VECTOR_HANDOFF_HOOK_AFTER case.
195
196 @param[in] ExceptionType Exception type.
197 @param[in] SystemContext Pointer to EFI_SYSTEM_CONTEXT.
198
199 **/
200 VOID
201 ArchRestoreExceptionContext (
202 IN UINTN ExceptionType,
203 IN EFI_SYSTEM_CONTEXT SystemContext
204 );
205
206 /**
207 Fix up the vector number in the vector code.
208
209 @param[in] VectorBase Base address of the vector handler.
210 @param[in] VectorNum Index of vector.
211
212 **/
213 VOID
214 EFIAPI
215 AsmVectorNumFixup (
216 IN VOID *VectorBase,
217 IN UINT8 VectorNum
218 );
219
220 /**
221 Read and save reserved vector information
222
223 @param[in] VectorInfo Pointer to reserved vector list.
224 @param[out] ReservedVector Pointer to reserved vector data buffer.
225 @param[in] VectorCount Vector number to be updated.
226
227 @return EFI_SUCCESS Read and save vector info successfully.
228 @retval EFI_INVALID_PARAMETER VectorInfo includes the invalid content if VectorInfo is not NULL.
229
230 **/
231 EFI_STATUS
232 ReadAndVerifyVectorInfo (
233 IN EFI_VECTOR_HANDOFF_INFO *VectorInfo,
234 OUT RESERVED_VECTORS_DATA *ReservedVector,
235 IN UINTN VectorCount
236 );
237
238 #endif
239