efidebug.h revision 1.1.1.2 1 1.1 jakllsch /* $NetBSD: efidebug.h,v 1.1.1.2 2018/08/16 18:17:47 jmcneill Exp $ */
2 1.1 jakllsch
3 1.1 jakllsch #ifndef _EFI_DEBUG_H
4 1.1 jakllsch #define _EFI_DEBUG_H
5 1.1 jakllsch
6 1.1 jakllsch /*++
7 1.1 jakllsch
8 1.1 jakllsch Copyright (c) 1998 Intel Corporation
9 1.1 jakllsch
10 1.1 jakllsch Module Name:
11 1.1 jakllsch
12 1.1 jakllsch efidebug.h
13 1.1 jakllsch
14 1.1 jakllsch Abstract:
15 1.1 jakllsch
16 1.1 jakllsch EFI library debug functions
17 1.1 jakllsch
18 1.1 jakllsch
19 1.1 jakllsch
20 1.1 jakllsch Revision History
21 1.1 jakllsch
22 1.1 jakllsch --*/
23 1.1 jakllsch
24 1.1 jakllsch extern UINTN EFIDebug;
25 1.1 jakllsch
26 1.1 jakllsch #if EFI_DEBUG
27 1.1 jakllsch
28 1.1 jakllsch #define DBGASSERT(a) DbgAssert(__FILE__, __LINE__, #a)
29 1.1 jakllsch #define DEBUG(a) DbgPrint a
30 1.1 jakllsch
31 1.1 jakllsch #else
32 1.1 jakllsch
33 1.1 jakllsch #define DBGASSERT(a)
34 1.1 jakllsch #define DEBUG(a)
35 1.1 jakllsch
36 1.1 jakllsch #endif
37 1.1 jakllsch
38 1.1 jakllsch #if EFI_DEBUG_CLEAR_MEMORY
39 1.1 jakllsch
40 1.1 jakllsch #define DBGSETMEM(a,l) SetMem(a,l,(CHAR8)BAD_POINTER)
41 1.1 jakllsch
42 1.1 jakllsch #else
43 1.1 jakllsch
44 1.1 jakllsch #define DBGSETMEM(a,l)
45 1.1 jakllsch
46 1.1 jakllsch #endif
47 1.1 jakllsch
48 1.1 jakllsch #define D_INIT 0x00000001 // Initialization style messages
49 1.1 jakllsch #define D_WARN 0x00000002 // Warnings
50 1.1 jakllsch #define D_LOAD 0x00000004 // Load events
51 1.1 jakllsch #define D_FS 0x00000008 // EFI File system
52 1.1 jakllsch #define D_POOL 0x00000010 // Alloc & Free's
53 1.1 jakllsch #define D_PAGE 0x00000020 // Alloc & Free's
54 1.1 jakllsch #define D_INFO 0x00000040 // Verbose
55 1.1 jakllsch #define D_VAR 0x00000100 // Variable
56 1.1 jakllsch #define D_PARSE 0x00000200 // Command parsing
57 1.1 jakllsch #define D_BM 0x00000400 // Boot manager
58 1.1 jakllsch #define D_BLKIO 0x00001000 // BlkIo Driver
59 1.1 jakllsch #define D_BLKIO_ULTRA 0x00002000 // BlkIo Driver
60 1.1 jakllsch #define D_NET 0x00004000 // SNI Driver
61 1.1 jakllsch #define D_NET_ULTRA 0x00008000 // SNI Driver
62 1.1 jakllsch #define D_TXTIN 0x00010000 // Simple Input Driver
63 1.1 jakllsch #define D_TXTOUT 0x00020000 // Simple Text Output Driver
64 1.1 jakllsch #define D_ERROR_ATA 0x00040000 // ATA error messages
65 1.1 jakllsch #define D_ERROR 0x80000000 // Error
66 1.1 jakllsch
67 1.1 jakllsch #define D_RESERVED 0x7fffC880 // Bits not reserved above
68 1.1 jakllsch
69 1.1 jakllsch //
70 1.1 jakllsch // Current Debug level of the system, value of EFIDebug
71 1.1 jakllsch //
72 1.1 jakllsch //#define EFI_DBUG_MASK (D_ERROR | D_WARN | D_LOAD | D_BLKIO | D_INIT)
73 1.1 jakllsch #define EFI_DBUG_MASK (D_ERROR)
74 1.1 jakllsch
75 1.1 jakllsch //
76 1.1 jakllsch //
77 1.1 jakllsch //
78 1.1 jakllsch
79 1.1 jakllsch #if EFI_DEBUG
80 1.1 jakllsch
81 1.1 jakllsch #define ASSERT(a) if(!(a)) DBGASSERT(a)
82 1.1 jakllsch #define ASSERT_LOCKED(l) if(!(l)->Lock) DBGASSERT(l not locked)
83 1.1 jakllsch #define ASSERT_STRUCT(p,t) DBGASSERT(t not structure), p
84 1.1 jakllsch
85 1.1 jakllsch #else
86 1.1 jakllsch
87 1.1 jakllsch #define ASSERT(a)
88 1.1 jakllsch #define ASSERT_LOCKED(l)
89 1.1 jakllsch #define ASSERT_STRUCT(p,t)
90 1.1 jakllsch
91 1.1 jakllsch #endif
92 1.1 jakllsch
93 1.1 jakllsch //
94 1.1 jakllsch // Prototypes
95 1.1 jakllsch //
96 1.1 jakllsch
97 1.1 jakllsch INTN
98 1.1 jakllsch DbgAssert (
99 1.1.1.2 jmcneill CONST CHAR8 *file,
100 1.1.1.2 jmcneill INTN lineno,
101 1.1.1.2 jmcneill CONST CHAR8 *string
102 1.1 jakllsch );
103 1.1 jakllsch
104 1.1 jakllsch INTN
105 1.1 jakllsch DbgPrint (
106 1.1.1.2 jmcneill INTN mask,
107 1.1.1.2 jmcneill CONST CHAR8 *format,
108 1.1 jakllsch ...
109 1.1 jakllsch );
110 1.1 jakllsch
111 1.1.1.2 jmcneill //
112 1.1.1.2 jmcneill // Instruction Set Architectures definitions for debuggers
113 1.1.1.2 jmcneill //
114 1.1.1.2 jmcneill
115 1.1.1.2 jmcneill typedef INTN EFI_EXCEPTION_TYPE;
116 1.1.1.2 jmcneill
117 1.1.1.2 jmcneill // IA32
118 1.1.1.2 jmcneill #define EXCEPT_IA32_DIVIDE_ERROR 0
119 1.1.1.2 jmcneill #define EXCEPT_IA32_DEBUG 1
120 1.1.1.2 jmcneill #define EXCEPT_IA32_NMI 2
121 1.1.1.2 jmcneill #define EXCEPT_IA32_BREAKPOINT 3
122 1.1.1.2 jmcneill #define EXCEPT_IA32_OVERFLOW 4
123 1.1.1.2 jmcneill #define EXCEPT_IA32_BOUND 5
124 1.1.1.2 jmcneill #define EXCEPT_IA32_INVALID_OPCODE 6
125 1.1.1.2 jmcneill #define EXCEPT_IA32_DOUBLE_FAULT 8
126 1.1.1.2 jmcneill #define EXCEPT_IA32_INVALID_TSS 10
127 1.1.1.2 jmcneill #define EXCEPT_IA32_SEG_NOT_PRESENT 11
128 1.1.1.2 jmcneill #define EXCEPT_IA32_STACK_FAULT 12
129 1.1.1.2 jmcneill #define EXCEPT_IA32_GP_FAULT 13
130 1.1.1.2 jmcneill #define EXCEPT_IA32_PAGE_FAULT 14
131 1.1.1.2 jmcneill #define EXCEPT_IA32_FP_ERROR 16
132 1.1.1.2 jmcneill #define EXCEPT_IA32_ALIGNMENT_CHECK 17
133 1.1.1.2 jmcneill #define EXCEPT_IA32_MACHINE_CHECK 18
134 1.1.1.2 jmcneill #define EXCEPT_IA32_SIMD 19
135 1.1.1.2 jmcneill
136 1.1.1.2 jmcneill typedef struct {
137 1.1.1.2 jmcneill UINT16 Fcw;
138 1.1.1.2 jmcneill UINT16 Fsw;
139 1.1.1.2 jmcneill UINT16 Ftw;
140 1.1.1.2 jmcneill UINT16 Opcode;
141 1.1.1.2 jmcneill UINT32 Eip;
142 1.1.1.2 jmcneill UINT16 Cs;
143 1.1.1.2 jmcneill UINT16 Reserved1;
144 1.1.1.2 jmcneill UINT32 DataOffset;
145 1.1.1.2 jmcneill UINT16 Ds;
146 1.1.1.2 jmcneill UINT8 Reserved2[10];
147 1.1.1.2 jmcneill UINT8 St0Mm0[10], Reserved3[6];
148 1.1.1.2 jmcneill UINT8 St1Mm1[10], Reserved4[6];
149 1.1.1.2 jmcneill UINT8 St2Mm2[10], Reserved5[6];
150 1.1.1.2 jmcneill UINT8 St3Mm3[10], Reserved6[6];
151 1.1.1.2 jmcneill UINT8 St4Mm4[10], Reserved7[6];
152 1.1.1.2 jmcneill UINT8 St5Mm5[10], Reserved8[6];
153 1.1.1.2 jmcneill UINT8 St6Mm6[10], Reserved9[6];
154 1.1.1.2 jmcneill UINT8 St7Mm7[10], Reserved10[6];
155 1.1.1.2 jmcneill UINT8 Xmm0[16];
156 1.1.1.2 jmcneill UINT8 Xmm1[16];
157 1.1.1.2 jmcneill UINT8 Xmm2[16];
158 1.1.1.2 jmcneill UINT8 Xmm3[16];
159 1.1.1.2 jmcneill UINT8 Xmm4[16];
160 1.1.1.2 jmcneill UINT8 Xmm5[16];
161 1.1.1.2 jmcneill UINT8 Xmm6[16];
162 1.1.1.2 jmcneill UINT8 Xmm7[16];
163 1.1.1.2 jmcneill UINT8 Reserved11[14 * 16];
164 1.1.1.2 jmcneill } EFI_FX_SAVE_STATE_IA32;
165 1.1.1.2 jmcneill
166 1.1.1.2 jmcneill typedef struct {
167 1.1.1.2 jmcneill UINT32 ExceptionData;
168 1.1.1.2 jmcneill EFI_FX_SAVE_STATE_IA32 FxSaveState;
169 1.1.1.2 jmcneill UINT32 Dr0;
170 1.1.1.2 jmcneill UINT32 Dr1;
171 1.1.1.2 jmcneill UINT32 Dr2;
172 1.1.1.2 jmcneill UINT32 Dr3;
173 1.1.1.2 jmcneill UINT32 Dr6;
174 1.1.1.2 jmcneill UINT32 Dr7;
175 1.1.1.2 jmcneill UINT32 Cr0;
176 1.1.1.2 jmcneill UINT32 Cr1;
177 1.1.1.2 jmcneill UINT32 Cr2;
178 1.1.1.2 jmcneill UINT32 Cr3;
179 1.1.1.2 jmcneill UINT32 Cr4;
180 1.1.1.2 jmcneill UINT32 Eflags;
181 1.1.1.2 jmcneill UINT32 Ldtr;
182 1.1.1.2 jmcneill UINT32 Tr;
183 1.1.1.2 jmcneill UINT32 Gdtr[2];
184 1.1.1.2 jmcneill UINT32 Idtr[2];
185 1.1.1.2 jmcneill UINT32 Eip;
186 1.1.1.2 jmcneill UINT32 Gs;
187 1.1.1.2 jmcneill UINT32 Fs;
188 1.1.1.2 jmcneill UINT32 Es;
189 1.1.1.2 jmcneill UINT32 Ds;
190 1.1.1.2 jmcneill UINT32 Cs;
191 1.1.1.2 jmcneill UINT32 Ss;
192 1.1.1.2 jmcneill UINT32 Edi;
193 1.1.1.2 jmcneill UINT32 Esi;
194 1.1.1.2 jmcneill UINT32 Ebp;
195 1.1.1.2 jmcneill UINT32 Esp;
196 1.1.1.2 jmcneill UINT32 Ebx;
197 1.1.1.2 jmcneill UINT32 Edx;
198 1.1.1.2 jmcneill UINT32 Ecx;
199 1.1.1.2 jmcneill UINT32 Eax;
200 1.1.1.2 jmcneill } EFI_SYSTEM_CONTEXT_IA32;
201 1.1.1.2 jmcneill
202 1.1.1.2 jmcneill // X64
203 1.1.1.2 jmcneill #define EXCEPT_X64_DIVIDE_ERROR 0
204 1.1.1.2 jmcneill #define EXCEPT_X64_DEBUG 1
205 1.1.1.2 jmcneill #define EXCEPT_X64_NMI 2
206 1.1.1.2 jmcneill #define EXCEPT_X64_BREAKPOINT 3
207 1.1.1.2 jmcneill #define EXCEPT_X64_OVERFLOW 4
208 1.1.1.2 jmcneill #define EXCEPT_X64_BOUND 5
209 1.1.1.2 jmcneill #define EXCEPT_X64_INVALID_OPCODE 6
210 1.1.1.2 jmcneill #define EXCEPT_X64_DOUBLE_FAULT 8
211 1.1.1.2 jmcneill #define EXCEPT_X64_INVALID_TSS 10
212 1.1.1.2 jmcneill #define EXCEPT_X64_SEG_NOT_PRESENT 11
213 1.1.1.2 jmcneill #define EXCEPT_X64_STACK_FAULT 12
214 1.1.1.2 jmcneill #define EXCEPT_X64_GP_FAULT 13
215 1.1.1.2 jmcneill #define EXCEPT_X64_PAGE_FAULT 14
216 1.1.1.2 jmcneill #define EXCEPT_X64_FP_ERROR 16
217 1.1.1.2 jmcneill #define EXCEPT_X64_ALIGNMENT_CHECK 17
218 1.1.1.2 jmcneill #define EXCEPT_X64_MACHINE_CHECK 18
219 1.1.1.2 jmcneill #define EXCEPT_X64_SIMD 19
220 1.1.1.2 jmcneill
221 1.1.1.2 jmcneill typedef struct {
222 1.1.1.2 jmcneill UINT16 Fcw;
223 1.1.1.2 jmcneill UINT16 Fsw;
224 1.1.1.2 jmcneill UINT16 Ftw;
225 1.1.1.2 jmcneill UINT16 Opcode;
226 1.1.1.2 jmcneill UINT64 Rip;
227 1.1.1.2 jmcneill UINT64 DataOffset;
228 1.1.1.2 jmcneill UINT8 Reserved1[8];
229 1.1.1.2 jmcneill UINT8 St0Mm0[10], Reserved2[6];
230 1.1.1.2 jmcneill UINT8 St1Mm1[10], Reserved3[6];
231 1.1.1.2 jmcneill UINT8 St2Mm2[10], Reserved4[6];
232 1.1.1.2 jmcneill UINT8 St3Mm3[10], Reserved5[6];
233 1.1.1.2 jmcneill UINT8 St4Mm4[10], Reserved6[6];
234 1.1.1.2 jmcneill UINT8 St5Mm5[10], Reserved7[6];
235 1.1.1.2 jmcneill UINT8 St6Mm6[10], Reserved8[6];
236 1.1.1.2 jmcneill UINT8 St7Mm7[10], Reserved9[6];
237 1.1.1.2 jmcneill UINT8 Xmm0[16];
238 1.1.1.2 jmcneill UINT8 Xmm1[16];
239 1.1.1.2 jmcneill UINT8 Xmm2[16];
240 1.1.1.2 jmcneill UINT8 Xmm3[16];
241 1.1.1.2 jmcneill UINT8 Xmm4[16];
242 1.1.1.2 jmcneill UINT8 Xmm5[16];
243 1.1.1.2 jmcneill UINT8 Xmm6[16];
244 1.1.1.2 jmcneill UINT8 Xmm7[16];
245 1.1.1.2 jmcneill UINT8 Reserved11[14 * 16];
246 1.1.1.2 jmcneill } EFI_FX_SAVE_STATE_X64;
247 1.1.1.2 jmcneill
248 1.1.1.2 jmcneill typedef struct {
249 1.1.1.2 jmcneill UINT64 ExceptionData;
250 1.1.1.2 jmcneill EFI_FX_SAVE_STATE_X64 FxSaveState;
251 1.1.1.2 jmcneill UINT64 Dr0;
252 1.1.1.2 jmcneill UINT64 Dr1;
253 1.1.1.2 jmcneill UINT64 Dr2;
254 1.1.1.2 jmcneill UINT64 Dr3;
255 1.1.1.2 jmcneill UINT64 Dr6;
256 1.1.1.2 jmcneill UINT64 Dr7;
257 1.1.1.2 jmcneill UINT64 Cr0;
258 1.1.1.2 jmcneill UINT64 Cr1;
259 1.1.1.2 jmcneill UINT64 Cr2;
260 1.1.1.2 jmcneill UINT64 Cr3;
261 1.1.1.2 jmcneill UINT64 Cr4;
262 1.1.1.2 jmcneill UINT64 Cr8;
263 1.1.1.2 jmcneill UINT64 Rflags;
264 1.1.1.2 jmcneill UINT64 Ldtr;
265 1.1.1.2 jmcneill UINT64 Tr;
266 1.1.1.2 jmcneill UINT64 Gdtr[2];
267 1.1.1.2 jmcneill UINT64 Idtr[2];
268 1.1.1.2 jmcneill UINT64 Rip;
269 1.1.1.2 jmcneill UINT64 Gs;
270 1.1.1.2 jmcneill UINT64 Fs;
271 1.1.1.2 jmcneill UINT64 Es;
272 1.1.1.2 jmcneill UINT64 Ds;
273 1.1.1.2 jmcneill UINT64 Cs;
274 1.1.1.2 jmcneill UINT64 Ss;
275 1.1.1.2 jmcneill UINT64 Rdi;
276 1.1.1.2 jmcneill UINT64 Rsi;
277 1.1.1.2 jmcneill UINT64 Rbp;
278 1.1.1.2 jmcneill UINT64 Rsp;
279 1.1.1.2 jmcneill UINT64 Rbx;
280 1.1.1.2 jmcneill UINT64 Rdx;
281 1.1.1.2 jmcneill UINT64 Rcx;
282 1.1.1.2 jmcneill UINT64 Rax;
283 1.1.1.2 jmcneill UINT64 R8;
284 1.1.1.2 jmcneill UINT64 R9;
285 1.1.1.2 jmcneill UINT64 R10;
286 1.1.1.2 jmcneill UINT64 R11;
287 1.1.1.2 jmcneill UINT64 R12;
288 1.1.1.2 jmcneill UINT64 R13;
289 1.1.1.2 jmcneill UINT64 R14;
290 1.1.1.2 jmcneill UINT64 R15;
291 1.1.1.2 jmcneill } EFI_SYSTEM_CONTEXT_X64;
292 1.1.1.2 jmcneill
293 1.1.1.2 jmcneill /// IA64
294 1.1.1.2 jmcneill #define EXCEPT_IPF_VHTP_TRANSLATION 0
295 1.1.1.2 jmcneill #define EXCEPT_IPF_INSTRUCTION_TLB 1
296 1.1.1.2 jmcneill #define EXCEPT_IPF_DATA_TLB 2
297 1.1.1.2 jmcneill #define EXCEPT_IPF_ALT_INSTRUCTION_TLB 3
298 1.1.1.2 jmcneill #define EXCEPT_IPF_ALT_DATA_TLB 4
299 1.1.1.2 jmcneill #define EXCEPT_IPF_DATA_NESTED_TLB 5
300 1.1.1.2 jmcneill #define EXCEPT_IPF_INSTRUCTION_KEY_MISSED 6
301 1.1.1.2 jmcneill #define EXCEPT_IPF_DATA_KEY_MISSED 7
302 1.1.1.2 jmcneill #define EXCEPT_IPF_DIRTY_BIT 8
303 1.1.1.2 jmcneill #define EXCEPT_IPF_INSTRUCTION_ACCESS_BIT 9
304 1.1.1.2 jmcneill #define EXCEPT_IPF_DATA_ACCESS_BIT 10
305 1.1.1.2 jmcneill #define EXCEPT_IPF_BREAKPOINT 11
306 1.1.1.2 jmcneill #define EXCEPT_IPF_EXTERNAL_INTERRUPT 12
307 1.1.1.2 jmcneill #define EXCEPT_IPF_PAGE_NOT_PRESENT 20
308 1.1.1.2 jmcneill #define EXCEPT_IPF_KEY_PERMISSION 21
309 1.1.1.2 jmcneill #define EXCEPT_IPF_INSTRUCTION_ACCESS_RIGHTS 22
310 1.1.1.2 jmcneill #define EXCEPT_IPF_DATA_ACCESS_RIGHTS 23
311 1.1.1.2 jmcneill #define EXCEPT_IPF_GENERAL_EXCEPTION 24
312 1.1.1.2 jmcneill #define EXCEPT_IPF_DISABLED_FP_REGISTER 25
313 1.1.1.2 jmcneill #define EXCEPT_IPF_NAT_CONSUMPTION 26
314 1.1.1.2 jmcneill #define EXCEPT_IPF_SPECULATION 27
315 1.1.1.2 jmcneill #define EXCEPT_IPF_DEBUG 29
316 1.1.1.2 jmcneill #define EXCEPT_IPF_UNALIGNED_REFERENCE 30
317 1.1.1.2 jmcneill #define EXCEPT_IPF_UNSUPPORTED_DATA_REFERENCE 31
318 1.1.1.2 jmcneill #define EXCEPT_IPF_FP_FAULT 32
319 1.1.1.2 jmcneill #define EXCEPT_IPF_FP_TRAP 33
320 1.1.1.2 jmcneill #define EXCEPT_IPF_LOWER_PRIVILEGE_TRANSFER_TRAP 34
321 1.1.1.2 jmcneill #define EXCEPT_IPF_TAKEN_BRANCH 35
322 1.1.1.2 jmcneill #define EXCEPT_IPF_SINGLE_STEP 36
323 1.1.1.2 jmcneill #define EXCEPT_IPF_IA32_EXCEPTION 45
324 1.1.1.2 jmcneill #define EXCEPT_IPF_IA32_INTERCEPT 46
325 1.1.1.2 jmcneill #define EXCEPT_IPF_IA32_INTERRUPT 47
326 1.1.1.2 jmcneill
327 1.1.1.2 jmcneill typedef struct {
328 1.1.1.2 jmcneill UINT64 Reserved;
329 1.1.1.2 jmcneill UINT64 R1;
330 1.1.1.2 jmcneill UINT64 R2;
331 1.1.1.2 jmcneill UINT64 R3;
332 1.1.1.2 jmcneill UINT64 R4;
333 1.1.1.2 jmcneill UINT64 R5;
334 1.1.1.2 jmcneill UINT64 R6;
335 1.1.1.2 jmcneill UINT64 R7;
336 1.1.1.2 jmcneill UINT64 R8;
337 1.1.1.2 jmcneill UINT64 R9;
338 1.1.1.2 jmcneill UINT64 R10;
339 1.1.1.2 jmcneill UINT64 R11;
340 1.1.1.2 jmcneill UINT64 R12;
341 1.1.1.2 jmcneill UINT64 R13;
342 1.1.1.2 jmcneill UINT64 R14;
343 1.1.1.2 jmcneill UINT64 R15;
344 1.1.1.2 jmcneill UINT64 R16;
345 1.1.1.2 jmcneill UINT64 R17;
346 1.1.1.2 jmcneill UINT64 R18;
347 1.1.1.2 jmcneill UINT64 R19;
348 1.1.1.2 jmcneill UINT64 R20;
349 1.1.1.2 jmcneill UINT64 R21;
350 1.1.1.2 jmcneill UINT64 R22;
351 1.1.1.2 jmcneill UINT64 R23;
352 1.1.1.2 jmcneill UINT64 R24;
353 1.1.1.2 jmcneill UINT64 R25;
354 1.1.1.2 jmcneill UINT64 R26;
355 1.1.1.2 jmcneill UINT64 R27;
356 1.1.1.2 jmcneill UINT64 R28;
357 1.1.1.2 jmcneill UINT64 R29;
358 1.1.1.2 jmcneill UINT64 R30;
359 1.1.1.2 jmcneill UINT64 R31;
360 1.1.1.2 jmcneill UINT64 F2[2];
361 1.1.1.2 jmcneill UINT64 F3[2];
362 1.1.1.2 jmcneill UINT64 F4[2];
363 1.1.1.2 jmcneill UINT64 F5[2];
364 1.1.1.2 jmcneill UINT64 F6[2];
365 1.1.1.2 jmcneill UINT64 F7[2];
366 1.1.1.2 jmcneill UINT64 F8[2];
367 1.1.1.2 jmcneill UINT64 F9[2];
368 1.1.1.2 jmcneill UINT64 F10[2];
369 1.1.1.2 jmcneill UINT64 F11[2];
370 1.1.1.2 jmcneill UINT64 F12[2];
371 1.1.1.2 jmcneill UINT64 F13[2];
372 1.1.1.2 jmcneill UINT64 F14[2];
373 1.1.1.2 jmcneill UINT64 F15[2];
374 1.1.1.2 jmcneill UINT64 F16[2];
375 1.1.1.2 jmcneill UINT64 F17[2];
376 1.1.1.2 jmcneill UINT64 F18[2];
377 1.1.1.2 jmcneill UINT64 F19[2];
378 1.1.1.2 jmcneill UINT64 F20[2];
379 1.1.1.2 jmcneill UINT64 F21[2];
380 1.1.1.2 jmcneill UINT64 F22[2];
381 1.1.1.2 jmcneill UINT64 F23[2];
382 1.1.1.2 jmcneill UINT64 F24[2];
383 1.1.1.2 jmcneill UINT64 F25[2];
384 1.1.1.2 jmcneill UINT64 F26[2];
385 1.1.1.2 jmcneill UINT64 F27[2];
386 1.1.1.2 jmcneill UINT64 F28[2];
387 1.1.1.2 jmcneill UINT64 F29[2];
388 1.1.1.2 jmcneill UINT64 F30[2];
389 1.1.1.2 jmcneill UINT64 F31[2];
390 1.1.1.2 jmcneill UINT64 Pr;
391 1.1.1.2 jmcneill UINT64 B0;
392 1.1.1.2 jmcneill UINT64 B1;
393 1.1.1.2 jmcneill UINT64 B2;
394 1.1.1.2 jmcneill UINT64 B3;
395 1.1.1.2 jmcneill UINT64 B4;
396 1.1.1.2 jmcneill UINT64 B5;
397 1.1.1.2 jmcneill UINT64 B6;
398 1.1.1.2 jmcneill UINT64 B7;
399 1.1.1.2 jmcneill UINT64 ArRsc;
400 1.1.1.2 jmcneill UINT64 ArBsp;
401 1.1.1.2 jmcneill UINT64 ArBspstore;
402 1.1.1.2 jmcneill UINT64 ArRnat;
403 1.1.1.2 jmcneill UINT64 ArFcr;
404 1.1.1.2 jmcneill UINT64 ArEflag;
405 1.1.1.2 jmcneill UINT64 ArCsd;
406 1.1.1.2 jmcneill UINT64 ArSsd;
407 1.1.1.2 jmcneill UINT64 ArCflg;
408 1.1.1.2 jmcneill UINT64 ArFsr;
409 1.1.1.2 jmcneill UINT64 ArFir;
410 1.1.1.2 jmcneill UINT64 ArFdr;
411 1.1.1.2 jmcneill UINT64 ArCcv;
412 1.1.1.2 jmcneill UINT64 ArUnat;
413 1.1.1.2 jmcneill UINT64 ArFpsr;
414 1.1.1.2 jmcneill UINT64 ArPfs;
415 1.1.1.2 jmcneill UINT64 ArLc;
416 1.1.1.2 jmcneill UINT64 ArEc;
417 1.1.1.2 jmcneill UINT64 CrDcr;
418 1.1.1.2 jmcneill UINT64 CrItm;
419 1.1.1.2 jmcneill UINT64 CrIva;
420 1.1.1.2 jmcneill UINT64 CrPta;
421 1.1.1.2 jmcneill UINT64 CrIpsr;
422 1.1.1.2 jmcneill UINT64 CrIsr;
423 1.1.1.2 jmcneill UINT64 CrIip;
424 1.1.1.2 jmcneill UINT64 CrIfa;
425 1.1.1.2 jmcneill UINT64 CrItir;
426 1.1.1.2 jmcneill UINT64 CrIipa;
427 1.1.1.2 jmcneill UINT64 CrIfs;
428 1.1.1.2 jmcneill UINT64 CrIim;
429 1.1.1.2 jmcneill UINT64 CrIha;
430 1.1.1.2 jmcneill UINT64 Dbr0;
431 1.1.1.2 jmcneill UINT64 Dbr1;
432 1.1.1.2 jmcneill UINT64 Dbr2;
433 1.1.1.2 jmcneill UINT64 Dbr3;
434 1.1.1.2 jmcneill UINT64 Dbr4;
435 1.1.1.2 jmcneill UINT64 Dbr5;
436 1.1.1.2 jmcneill UINT64 Dbr6;
437 1.1.1.2 jmcneill UINT64 Dbr7;
438 1.1.1.2 jmcneill UINT64 Ibr0;
439 1.1.1.2 jmcneill UINT64 Ibr1;
440 1.1.1.2 jmcneill UINT64 Ibr2;
441 1.1.1.2 jmcneill UINT64 Ibr3;
442 1.1.1.2 jmcneill UINT64 Ibr4;
443 1.1.1.2 jmcneill UINT64 Ibr5;
444 1.1.1.2 jmcneill UINT64 Ibr6;
445 1.1.1.2 jmcneill UINT64 Ibr7;
446 1.1.1.2 jmcneill UINT64 IntNat;
447 1.1.1.2 jmcneill } EFI_SYSTEM_CONTEXT_IPF;
448 1.1.1.2 jmcneill
449 1.1.1.2 jmcneill // EBC
450 1.1.1.2 jmcneill #define EXCEPT_EBC_UNDEFINED 0
451 1.1.1.2 jmcneill #define EXCEPT_EBC_DIVIDE_ERROR 1
452 1.1.1.2 jmcneill #define EXCEPT_EBC_DEBUG 2
453 1.1.1.2 jmcneill #define EXCEPT_EBC_BREAKPOINT 3
454 1.1.1.2 jmcneill #define EXCEPT_EBC_OVERFLOW 4
455 1.1.1.2 jmcneill #define EXCEPT_EBC_INVALID_OPCODE 5
456 1.1.1.2 jmcneill #define EXCEPT_EBC_STACK_FAULT 6
457 1.1.1.2 jmcneill #define EXCEPT_EBC_ALIGNMENT_CHECK 7
458 1.1.1.2 jmcneill #define EXCEPT_EBC_INSTRUCTION_ENCODING 8
459 1.1.1.2 jmcneill #define EXCEPT_EBC_BAD_BREAK 9
460 1.1.1.2 jmcneill #define EXCEPT_EBC_STEP 10
461 1.1.1.2 jmcneill #define MAX_EBC_EXCEPTION EXCEPT_EBC_STEP
462 1.1.1.2 jmcneill
463 1.1.1.2 jmcneill typedef struct {
464 1.1.1.2 jmcneill UINT64 R0;
465 1.1.1.2 jmcneill UINT64 R1;
466 1.1.1.2 jmcneill UINT64 R2;
467 1.1.1.2 jmcneill UINT64 R3;
468 1.1.1.2 jmcneill UINT64 R4;
469 1.1.1.2 jmcneill UINT64 R5;
470 1.1.1.2 jmcneill UINT64 R6;
471 1.1.1.2 jmcneill UINT64 R7;
472 1.1.1.2 jmcneill UINT64 Flags;
473 1.1.1.2 jmcneill UINT64 ControlFlags;
474 1.1.1.2 jmcneill UINT64 Ip;
475 1.1.1.2 jmcneill } EFI_SYSTEM_CONTEXT_EBC;
476 1.1.1.2 jmcneill
477 1.1.1.2 jmcneill // ARM
478 1.1.1.2 jmcneill #define EXCEPT_ARM_RESET 0
479 1.1.1.2 jmcneill #define EXCEPT_ARM_UNDEFINED_INSTRUCTION 1
480 1.1.1.2 jmcneill #define EXCEPT_ARM_SOFTWARE_INTERRUPT 2
481 1.1.1.2 jmcneill #define EXCEPT_ARM_PREFETCH_ABORT 3
482 1.1.1.2 jmcneill #define EXCEPT_ARM_DATA_ABORT 4
483 1.1.1.2 jmcneill #define EXCEPT_ARM_RESERVED 5
484 1.1.1.2 jmcneill #define EXCEPT_ARM_IRQ 6
485 1.1.1.2 jmcneill #define EXCEPT_ARM_FIQ 7
486 1.1.1.2 jmcneill #define MAX_ARM_EXCEPTION EXCEPT_ARM_FIQ
487 1.1.1.2 jmcneill
488 1.1.1.2 jmcneill typedef struct {
489 1.1.1.2 jmcneill UINT32 R0;
490 1.1.1.2 jmcneill UINT32 R1;
491 1.1.1.2 jmcneill UINT32 R2;
492 1.1.1.2 jmcneill UINT32 R3;
493 1.1.1.2 jmcneill UINT32 R4;
494 1.1.1.2 jmcneill UINT32 R5;
495 1.1.1.2 jmcneill UINT32 R6;
496 1.1.1.2 jmcneill UINT32 R7;
497 1.1.1.2 jmcneill UINT32 R8;
498 1.1.1.2 jmcneill UINT32 R9;
499 1.1.1.2 jmcneill UINT32 R10;
500 1.1.1.2 jmcneill UINT32 R11;
501 1.1.1.2 jmcneill UINT32 R12;
502 1.1.1.2 jmcneill UINT32 SP;
503 1.1.1.2 jmcneill UINT32 LR;
504 1.1.1.2 jmcneill UINT32 PC;
505 1.1.1.2 jmcneill UINT32 CPSR;
506 1.1.1.2 jmcneill UINT32 DFSR;
507 1.1.1.2 jmcneill UINT32 DFAR;
508 1.1.1.2 jmcneill UINT32 IFSR;
509 1.1.1.2 jmcneill UINT32 IFAR;
510 1.1.1.2 jmcneill } EFI_SYSTEM_CONTEXT_ARM;
511 1.1.1.2 jmcneill
512 1.1.1.2 jmcneill
513 1.1.1.2 jmcneill typedef union {
514 1.1.1.2 jmcneill EFI_SYSTEM_CONTEXT_EBC *SystemContextEbc;
515 1.1.1.2 jmcneill EFI_SYSTEM_CONTEXT_IA32 *SystemContextIa32;
516 1.1.1.2 jmcneill EFI_SYSTEM_CONTEXT_X64 *SystemContextX64;
517 1.1.1.2 jmcneill EFI_SYSTEM_CONTEXT_IPF *SystemContextIpf;
518 1.1.1.2 jmcneill EFI_SYSTEM_CONTEXT_ARM *SystemContextArm;
519 1.1.1.2 jmcneill } EFI_SYSTEM_CONTEXT;
520 1.1.1.2 jmcneill
521 1.1.1.2 jmcneill typedef
522 1.1.1.2 jmcneill VOID
523 1.1.1.2 jmcneill (EFIAPI *EFI_EXCEPTION_CALLBACK)(
524 1.1.1.2 jmcneill IN EFI_EXCEPTION_TYPE ExceptionType,
525 1.1.1.2 jmcneill IN OUT EFI_SYSTEM_CONTEXT SystemContext);
526 1.1.1.2 jmcneill
527 1.1.1.2 jmcneill typedef
528 1.1.1.2 jmcneill VOID
529 1.1.1.2 jmcneill (EFIAPI *EFI_PERIODIC_CALLBACK)(
530 1.1.1.2 jmcneill IN OUT EFI_SYSTEM_CONTEXT SystemContext);
531 1.1 jakllsch
532 1.1.1.2 jmcneill typedef enum {
533 1.1.1.2 jmcneill IsaIa32 = EFI_IMAGE_MACHINE_IA32,
534 1.1.1.2 jmcneill IsaX64 = EFI_IMAGE_MACHINE_X64,
535 1.1.1.2 jmcneill IsaIpf = EFI_IMAGE_MACHINE_IA64,
536 1.1.1.2 jmcneill IsaEbc = EFI_IMAGE_MACHINE_EBC,
537 1.1.1.2 jmcneill IsaArm = EFI_IMAGE_MACHINE_ARMTHUMB_MIXED,
538 1.1.1.2 jmcneill // IsaArm64 = EFI_IMAGE_MACHINE_AARCH64
539 1.1.1.2 jmcneill } EFI_INSTRUCTION_SET_ARCHITECTURE;
540 1.1.1.2 jmcneill
541 1.1.1.2 jmcneill //
542 1.1.1.2 jmcneill // DEBUG_IMAGE_INFO
543 1.1.1.2 jmcneill //
544 1.1.1.2 jmcneill
545 1.1.1.2 jmcneill #define EFI_DEBUG_IMAGE_INFO_TABLE_GUID \
546 1.1.1.2 jmcneill { 0x49152e77, 0x1ada, 0x4764, {0xb7, 0xa2, 0x7a, 0xfe, 0xfe, 0xd9, 0x5e, 0x8b} }
547 1.1.1.2 jmcneill
548 1.1.1.2 jmcneill #define EFI_DEBUG_IMAGE_INFO_UPDATE_IN_PROGRESS 0x01
549 1.1.1.2 jmcneill #define EFI_DEBUG_IMAGE_INFO_TABLE_MODIFIED 0x02
550 1.1.1.2 jmcneill #define EFI_DEBUG_IMAGE_INFO_INITIAL_SIZE (EFI_PAGE_SIZE / sizeof (UINTN))
551 1.1.1.2 jmcneill #define EFI_DEBUG_IMAGE_INFO_TYPE_NORMAL 0x01
552 1.1.1.2 jmcneill
553 1.1.1.2 jmcneill typedef struct {
554 1.1.1.2 jmcneill UINT64 Signature;
555 1.1.1.2 jmcneill EFI_PHYSICAL_ADDRESS EfiSystemTableBase;
556 1.1.1.2 jmcneill UINT32 Crc32;
557 1.1.1.2 jmcneill } EFI_SYSTEM_TABLE_POINTER;
558 1.1.1.2 jmcneill
559 1.1.1.2 jmcneill typedef struct {
560 1.1.1.2 jmcneill UINT32 ImageInfoType;
561 1.1.1.2 jmcneill EFI_LOADED_IMAGE_PROTOCOL *LoadedImageProtocolInstance;
562 1.1.1.2 jmcneill EFI_HANDLE *ImageHandle;
563 1.1.1.2 jmcneill } EFI_DEBUG_IMAGE_INFO_NORMAL;
564 1.1.1.2 jmcneill
565 1.1.1.2 jmcneill typedef union {
566 1.1.1.2 jmcneill UINT32 *ImageInfoType;
567 1.1.1.2 jmcneill EFI_DEBUG_IMAGE_INFO_NORMAL *NormalImage;
568 1.1.1.2 jmcneill } EFI_DEBUG_IMAGE_INFO;
569 1.1.1.2 jmcneill
570 1.1.1.2 jmcneill typedef struct {
571 1.1.1.2 jmcneill volatile UINT32 UpdateStatus;
572 1.1.1.2 jmcneill UINT32 TableSize;
573 1.1.1.2 jmcneill EFI_DEBUG_IMAGE_INFO *EfiDebugImageInfoTable;
574 1.1.1.2 jmcneill } EFI_DEBUG_IMAGE_INFO_TABLE_HEADER;
575 1.1.1.2 jmcneill
576 1.1.1.2 jmcneill //
577 1.1.1.2 jmcneill // EFI_DEBUGGER_PROTOCOL
578 1.1.1.2 jmcneill //
579 1.1.1.2 jmcneill
580 1.1.1.2 jmcneill #define EFI_DEBUG_SUPPORT_PROTOCOL_GUID \
581 1.1.1.2 jmcneill { 0x2755590c, 0x6f3c, 0x42fa, {0x9e, 0xa4, 0xa3, 0xba, 0x54, 0x3c, 0xda, 0x25} }
582 1.1.1.2 jmcneill
583 1.1.1.2 jmcneill INTERFACE_DECL(_EFI_DEBUG_SUPPORT_PROTOCOL);
584 1.1.1.2 jmcneill
585 1.1.1.2 jmcneill typedef
586 1.1.1.2 jmcneill EFI_STATUS
587 1.1.1.2 jmcneill (EFIAPI *EFI_GET_MAXIMUM_PROCESSOR_INDEX)(
588 1.1.1.2 jmcneill IN struct _EFI_DEBUG_SUPPORT_PROTOCOL *This,
589 1.1.1.2 jmcneill OUT UINTN *MaxProcessorIndex);
590 1.1.1.2 jmcneill
591 1.1.1.2 jmcneill typedef
592 1.1.1.2 jmcneill EFI_STATUS
593 1.1.1.2 jmcneill (EFIAPI *EFI_REGISTER_PERIODIC_CALLBACK)(
594 1.1.1.2 jmcneill IN struct _EFI_DEBUG_SUPPORT_PROTOCOL *This,
595 1.1.1.2 jmcneill IN UINTN ProcessorIndex,
596 1.1.1.2 jmcneill IN EFI_PERIODIC_CALLBACK PeriodicCallback);
597 1.1.1.2 jmcneill
598 1.1.1.2 jmcneill typedef
599 1.1.1.2 jmcneill EFI_STATUS
600 1.1.1.2 jmcneill (EFIAPI *EFI_REGISTER_EXCEPTION_CALLBACK)(
601 1.1.1.2 jmcneill IN struct _EFI_DEBUG_SUPPORT_PROTOCOL *This,
602 1.1.1.2 jmcneill IN UINTN ProcessorIndex,
603 1.1.1.2 jmcneill IN EFI_EXCEPTION_CALLBACK ExceptionCallback,
604 1.1.1.2 jmcneill IN EFI_EXCEPTION_TYPE ExceptionType);
605 1.1.1.2 jmcneill
606 1.1.1.2 jmcneill typedef
607 1.1.1.2 jmcneill EFI_STATUS
608 1.1.1.2 jmcneill (EFIAPI *EFI_INVALIDATE_INSTRUCTION_CACHE)(
609 1.1.1.2 jmcneill IN struct _EFI_DEBUG_SUPPORT_PROTOCOL *This,
610 1.1.1.2 jmcneill IN UINTN ProcessorIndex,
611 1.1.1.2 jmcneill IN VOID *Start,
612 1.1.1.2 jmcneill IN UINT64 Length);
613 1.1.1.2 jmcneill
614 1.1.1.2 jmcneill typedef struct _EFI_DEBUG_SUPPORT_PROTOCOL {
615 1.1.1.2 jmcneill EFI_INSTRUCTION_SET_ARCHITECTURE Isa;
616 1.1.1.2 jmcneill EFI_GET_MAXIMUM_PROCESSOR_INDEX GetMaximumProcessorIndex;
617 1.1.1.2 jmcneill EFI_REGISTER_PERIODIC_CALLBACK RegisterPeriodicCallback;
618 1.1.1.2 jmcneill EFI_REGISTER_EXCEPTION_CALLBACK RegisterExceptionCallback;
619 1.1.1.2 jmcneill EFI_INVALIDATE_INSTRUCTION_CACHE InvalidateInstructionCache;
620 1.1.1.2 jmcneill } EFI_DEBUG_SUPPORT_PROTOCOL;
621 1.1.1.2 jmcneill
622 1.1.1.2 jmcneill #endif
623