]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Include/Protocol/DebugSupport.h
63f68cd97ddc7313ee9dc182da8c1a096c98902c
[mirror_edk2.git] / MdePkg / Include / Protocol / DebugSupport.h
1 /** @file
2 DebugSupport protocol and supporting definitions as defined in the UEFI2.0
3 specification.
4
5 The DebugSupport protocol is used by source level debuggers to abstract the
6 processor and handle context save and restore operations.
7
8 Copyright (c) 2006, Intel Corporation
9 All rights reserved. This program and the accompanying materials
10 are licensed and made available under the terms and conditions of the BSD License
11 which accompanies this distribution. The full text of the license may be found at
12 http://opensource.org/licenses/bsd-license.php
13
14 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
15 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16
17 **/
18
19 #ifndef __DEBUG_SUPPORT_H__
20 #define __DEBUG_SUPPORT_H__
21
22 #include <ProcessorBind.h>
23 #include <IndustryStandard/PeImage.h>
24
25 typedef struct _EFI_DEBUG_SUPPORT_PROTOCOL EFI_DEBUG_SUPPORT_PROTOCOL;
26
27 //
28 // Debug Support protocol {2755590C-6F3C-42FA-9EA4-A3BA543CDA25}
29 //
30 #define EFI_DEBUG_SUPPORT_PROTOCOL_GUID \
31 { \
32 0x2755590C, 0x6F3C, 0x42FA, {0x9E, 0xA4, 0xA3, 0xBA, 0x54, 0x3C, 0xDA, 0x25 } \
33 }
34
35 //
36 // Debug Support definitions
37 //
38 typedef INTN EFI_EXCEPTION_TYPE;
39
40 //
41 // IA-32 processor exception types
42 //
43 #define EXCEPT_IA32_DIVIDE_ERROR 0
44 #define EXCEPT_IA32_DEBUG 1
45 #define EXCEPT_IA32_NMI 2
46 #define EXCEPT_IA32_BREAKPOINT 3
47 #define EXCEPT_IA32_OVERFLOW 4
48 #define EXCEPT_IA32_BOUND 5
49 #define EXCEPT_IA32_INVALID_OPCODE 6
50 #define EXCEPT_IA32_DOUBLE_FAULT 8
51 #define EXCEPT_IA32_INVALID_TSS 10
52 #define EXCEPT_IA32_SEG_NOT_PRESENT 11
53 #define EXCEPT_IA32_STACK_FAULT 12
54 #define EXCEPT_IA32_GP_FAULT 13
55 #define EXCEPT_IA32_PAGE_FAULT 14
56 #define EXCEPT_IA32_FP_ERROR 16
57 #define EXCEPT_IA32_ALIGNMENT_CHECK 17
58 #define EXCEPT_IA32_MACHINE_CHECK 18
59 #define EXCEPT_IA32_SIMD 19
60
61 //
62 // IA-32 processor context definition
63 //
64 //
65 // FXSAVE_STATE
66 // FP / MMX / XMM registers (see fxrstor instruction definition)
67 //
68 typedef struct {
69 UINT16 Fcw;
70 UINT16 Fsw;
71 UINT16 Ftw;
72 UINT16 Opcode;
73 UINT32 Eip;
74 UINT16 Cs;
75 UINT16 Reserved1;
76 UINT32 DataOffset;
77 UINT16 Ds;
78 UINT8 Reserved2[10];
79 #if (EFI_SPECIFICATION_VERSION >= 0x00020000)
80 UINT8 St0Mm0[10], Reserved3[6];
81 UINT8 St1Mm1[10], Reserved4[6];
82 UINT8 St2Mm2[10], Reserved5[6];
83 UINT8 St3Mm3[10], Reserved6[6];
84 UINT8 St4Mm4[10], Reserved7[6];
85 UINT8 St5Mm5[10], Reserved8[6];
86 UINT8 St6Mm6[10], Reserved9[6];
87 UINT8 St7Mm7[10], Reserved10[6];
88 UINT8 Xmm0[16];
89 UINT8 Xmm1[16];
90 UINT8 Xmm2[16];
91 UINT8 Xmm3[16];
92 UINT8 Xmm4[16];
93 UINT8 Xmm5[16];
94 UINT8 Xmm6[16];
95 UINT8 Xmm7[16];
96 UINT8 Reserved11[14 * 16];
97 } EFI_FX_SAVE_STATE_IA32;
98 #else
99 UINT8 St0Mm0[10], Reserved3[6];
100 UINT8 St0Mm1[10], Reserved4[6];
101 UINT8 St0Mm2[10], Reserved5[6];
102 UINT8 St0Mm3[10], Reserved6[6];
103 UINT8 St0Mm4[10], Reserved7[6];
104 UINT8 St0Mm5[10], Reserved8[6];
105 UINT8 St0Mm6[10], Reserved9[6];
106 UINT8 St0Mm7[10], Reserved10[6];
107 UINT8 Reserved11[22 * 16];
108 } EFI_FX_SAVE_STATE;
109 #endif
110
111 typedef struct {
112 UINT32 ExceptionData;
113 #if (EFI_SPECIFICATION_VERSION >= 0x00020000)
114 EFI_FX_SAVE_STATE_IA32 FxSaveState;
115 #else
116 EFI_FX_SAVE_STATE FxSaveState;
117 #endif
118 UINT32 Dr0;
119 UINT32 Dr1;
120 UINT32 Dr2;
121 UINT32 Dr3;
122 UINT32 Dr6;
123 UINT32 Dr7;
124 UINT32 Cr0;
125 UINT32 Cr1; /* Reserved */
126 UINT32 Cr2;
127 UINT32 Cr3;
128 UINT32 Cr4;
129 UINT32 Eflags;
130 UINT32 Ldtr;
131 UINT32 Tr;
132 UINT32 Gdtr[2];
133 UINT32 Idtr[2];
134 UINT32 Eip;
135 UINT32 Gs;
136 UINT32 Fs;
137 UINT32 Es;
138 UINT32 Ds;
139 UINT32 Cs;
140 UINT32 Ss;
141 UINT32 Edi;
142 UINT32 Esi;
143 UINT32 Ebp;
144 UINT32 Esp;
145 UINT32 Ebx;
146 UINT32 Edx;
147 UINT32 Ecx;
148 UINT32 Eax;
149 } EFI_SYSTEM_CONTEXT_IA32;
150
151 //
152 // X64 processor exception types
153 //
154 #define EXCEPT_X64_DIVIDE_ERROR 0
155 #define EXCEPT_X64_DEBUG 1
156 #define EXCEPT_X64_NMI 2
157 #define EXCEPT_X64_BREAKPOINT 3
158 #define EXCEPT_X64_OVERFLOW 4
159 #define EXCEPT_X64_BOUND 5
160 #define EXCEPT_X64_INVALID_OPCODE 6
161 #define EXCEPT_X64_DOUBLE_FAULT 8
162 #define EXCEPT_X64_INVALID_TSS 10
163 #define EXCEPT_X64_SEG_NOT_PRESENT 11
164 #define EXCEPT_X64_STACK_FAULT 12
165 #define EXCEPT_X64_GP_FAULT 13
166 #define EXCEPT_X64_PAGE_FAULT 14
167 #define EXCEPT_X64_FP_ERROR 16
168 #define EXCEPT_X64_ALIGNMENT_CHECK 17
169 #define EXCEPT_X64_MACHINE_CHECK 18
170 #define EXCEPT_X64_SIMD 19
171
172 //
173 // X64 processor context definition
174 //
175 // FXSAVE_STATE
176 // FP / MMX / XMM registers (see fxrstor instruction definition)
177 //
178 typedef struct {
179 UINT16 Fcw;
180 UINT16 Fsw;
181 UINT16 Ftw;
182 UINT16 Opcode;
183 UINT64 Rip;
184 UINT64 DataOffset;
185 UINT8 Reserved1[8];
186 UINT8 St0Mm0[10], Reserved2[6];
187 UINT8 St1Mm1[10], Reserved3[6];
188 UINT8 St2Mm2[10], Reserved4[6];
189 UINT8 St3Mm3[10], Reserved5[6];
190 UINT8 St4Mm4[10], Reserved6[6];
191 UINT8 St5Mm5[10], Reserved7[6];
192 UINT8 St6Mm6[10], Reserved8[6];
193 UINT8 St7Mm7[10], Reserved9[6];
194 UINT8 Xmm0[16];
195 UINT8 Xmm1[16];
196 UINT8 Xmm2[16];
197 UINT8 Xmm3[16];
198 UINT8 Xmm4[16];
199 UINT8 Xmm5[16];
200 UINT8 Xmm6[16];
201 UINT8 Xmm7[16];
202 #if (EFI_SPECIFICATION_VERSION >= 0x00020000)
203 //
204 // NOTE: UEFI 2.0 spec definition as follows. It should be updated
205 // after spec update.
206 //
207 UINT8 Reserved11[14 * 16];
208 #else
209 UINT8 Xmm8[16];
210 UINT8 Xmm9[16];
211 UINT8 Xmm10[16];
212 UINT8 Xmm11[16];
213 UINT8 Xmm12[16];
214 UINT8 Xmm13[16];
215 UINT8 Xmm14[16];
216 UINT8 Xmm15[16];
217 UINT8 Reserved10[6 * 16];
218 #endif
219 } EFI_FX_SAVE_STATE_X64;
220
221 typedef struct {
222 UINT64 ExceptionData;
223 EFI_FX_SAVE_STATE_X64 FxSaveState;
224 UINT64 Dr0;
225 UINT64 Dr1;
226 UINT64 Dr2;
227 UINT64 Dr3;
228 UINT64 Dr6;
229 UINT64 Dr7;
230 UINT64 Cr0;
231 UINT64 Cr1; /* Reserved */
232 UINT64 Cr2;
233 UINT64 Cr3;
234 UINT64 Cr4;
235 UINT64 Cr8;
236 UINT64 Rflags;
237 UINT64 Ldtr;
238 UINT64 Tr;
239 UINT64 Gdtr[2];
240 UINT64 Idtr[2];
241 UINT64 Rip;
242 UINT64 Gs;
243 UINT64 Fs;
244 UINT64 Es;
245 UINT64 Ds;
246 UINT64 Cs;
247 UINT64 Ss;
248 UINT64 Rdi;
249 UINT64 Rsi;
250 UINT64 Rbp;
251 UINT64 Rsp;
252 UINT64 Rbx;
253 UINT64 Rdx;
254 UINT64 Rcx;
255 UINT64 Rax;
256 UINT64 R8;
257 UINT64 R9;
258 UINT64 R10;
259 UINT64 R11;
260 UINT64 R12;
261 UINT64 R13;
262 UINT64 R14;
263 UINT64 R15;
264 } EFI_SYSTEM_CONTEXT_X64;
265
266 //
267 // IPF processor exception types
268 //
269 #define EXCEPT_IPF_VHTP_TRANSLATION 0
270 #define EXCEPT_IPF_INSTRUCTION_TLB 1
271 #define EXCEPT_IPF_DATA_TLB 2
272 #define EXCEPT_IPF_ALT_INSTRUCTION_TLB 3
273 #define EXCEPT_IPF_ALT_DATA_TLB 4
274 #define EXCEPT_IPF_DATA_NESTED_TLB 5
275 #define EXCEPT_IPF_INSTRUCTION_KEY_MISSED 6
276 #define EXCEPT_IPF_DATA_KEY_MISSED 7
277 #define EXCEPT_IPF_DIRTY_BIT 8
278 #define EXCEPT_IPF_INSTRUCTION_ACCESS_BIT 9
279 #define EXCEPT_IPF_DATA_ACCESS_BIT 10
280 #define EXCEPT_IPF_BREAKPOINT 11
281 #define EXCEPT_IPF_EXTERNAL_INTERRUPT 12
282 //
283 // 13 - 19 reserved
284 //
285 #define EXCEPT_IPF_PAGE_NOT_PRESENT 20
286 #define EXCEPT_IPF_KEY_PERMISSION 21
287 #define EXCEPT_IPF_INSTRUCTION_ACCESS_RIGHTS 22
288 #define EXCEPT_IPF_DATA_ACCESS_RIGHTS 23
289 #define EXCEPT_IPF_GENERAL_EXCEPTION 24
290 #define EXCEPT_IPF_DISABLED_FP_REGISTER 25
291 #define EXCEPT_IPF_NAT_CONSUMPTION 26
292 #define EXCEPT_IPF_SPECULATION 27
293 //
294 // 28 reserved
295 //
296 #define EXCEPT_IPF_DEBUG 29
297 #define EXCEPT_IPF_UNALIGNED_REFERENCE 30
298 #define EXCEPT_IPF_UNSUPPORTED_DATA_REFERENCE 31
299 #define EXCEPT_IPF_FP_FAULT 32
300 #define EXCEPT_IPF_FP_TRAP 33
301 #define EXCEPT_IPF_LOWER_PRIVILEGE_TRANSFER_TRAP 34
302 #define EXCEPT_IPF_TAKEN_BRANCH 35
303 #define EXCEPT_IPF_SINGLE_STEP 36
304 //
305 // 37 - 44 reserved
306 //
307 #define EXCEPT_IPF_IA32_EXCEPTION 45
308 #define EXCEPT_IPF_IA32_INTERCEPT 46
309 #define EXCEPT_IPF_IA32_INTERRUPT 47
310
311 //
312 // IPF processor context definition
313 //
314 typedef struct {
315 //
316 // The first reserved field is necessary to preserve alignment for the correct
317 // bits in UNAT and to insure F2 is 16 byte aligned..
318 //
319 UINT64 Reserved;
320 UINT64 R1;
321 UINT64 R2;
322 UINT64 R3;
323 UINT64 R4;
324 UINT64 R5;
325 UINT64 R6;
326 UINT64 R7;
327 UINT64 R8;
328 UINT64 R9;
329 UINT64 R10;
330 UINT64 R11;
331 UINT64 R12;
332 UINT64 R13;
333 UINT64 R14;
334 UINT64 R15;
335 UINT64 R16;
336 UINT64 R17;
337 UINT64 R18;
338 UINT64 R19;
339 UINT64 R20;
340 UINT64 R21;
341 UINT64 R22;
342 UINT64 R23;
343 UINT64 R24;
344 UINT64 R25;
345 UINT64 R26;
346 UINT64 R27;
347 UINT64 R28;
348 UINT64 R29;
349 UINT64 R30;
350 UINT64 R31;
351
352 UINT64 F2[2];
353 UINT64 F3[2];
354 UINT64 F4[2];
355 UINT64 F5[2];
356 UINT64 F6[2];
357 UINT64 F7[2];
358 UINT64 F8[2];
359 UINT64 F9[2];
360 UINT64 F10[2];
361 UINT64 F11[2];
362 UINT64 F12[2];
363 UINT64 F13[2];
364 UINT64 F14[2];
365 UINT64 F15[2];
366 UINT64 F16[2];
367 UINT64 F17[2];
368 UINT64 F18[2];
369 UINT64 F19[2];
370 UINT64 F20[2];
371 UINT64 F21[2];
372 UINT64 F22[2];
373 UINT64 F23[2];
374 UINT64 F24[2];
375 UINT64 F25[2];
376 UINT64 F26[2];
377 UINT64 F27[2];
378 UINT64 F28[2];
379 UINT64 F29[2];
380 UINT64 F30[2];
381 UINT64 F31[2];
382
383 UINT64 Pr;
384
385 UINT64 B0;
386 UINT64 B1;
387 UINT64 B2;
388 UINT64 B3;
389 UINT64 B4;
390 UINT64 B5;
391 UINT64 B6;
392 UINT64 B7;
393
394 //
395 // application registers
396 //
397 UINT64 ArRsc;
398 UINT64 ArBsp;
399 UINT64 ArBspstore;
400 UINT64 ArRnat;
401
402 UINT64 ArFcr;
403
404 UINT64 ArEflag;
405 UINT64 ArCsd;
406 UINT64 ArSsd;
407 UINT64 ArCflg;
408 UINT64 ArFsr;
409 UINT64 ArFir;
410 UINT64 ArFdr;
411
412 UINT64 ArCcv;
413
414 UINT64 ArUnat;
415
416 UINT64 ArFpsr;
417
418 UINT64 ArPfs;
419 UINT64 ArLc;
420 UINT64 ArEc;
421
422 //
423 // control registers
424 //
425 UINT64 CrDcr;
426 UINT64 CrItm;
427 UINT64 CrIva;
428 UINT64 CrPta;
429 UINT64 CrIpsr;
430 UINT64 CrIsr;
431 UINT64 CrIip;
432 UINT64 CrIfa;
433 UINT64 CrItir;
434 UINT64 CrIipa;
435 UINT64 CrIfs;
436 UINT64 CrIim;
437 UINT64 CrIha;
438
439 //
440 // debug registers
441 //
442 UINT64 Dbr0;
443 UINT64 Dbr1;
444 UINT64 Dbr2;
445 UINT64 Dbr3;
446 UINT64 Dbr4;
447 UINT64 Dbr5;
448 UINT64 Dbr6;
449 UINT64 Dbr7;
450
451 UINT64 Ibr0;
452 UINT64 Ibr1;
453 UINT64 Ibr2;
454 UINT64 Ibr3;
455 UINT64 Ibr4;
456 UINT64 Ibr5;
457 UINT64 Ibr6;
458 UINT64 Ibr7;
459
460 //
461 // virtual registers - nat bits for R1-R31
462 //
463 UINT64 IntNat;
464
465 } EFI_SYSTEM_CONTEXT_IPF;
466
467 //
468 // EBC processor exception types
469 //
470 #define EXCEPT_EBC_UNDEFINED 0
471 #define EXCEPT_EBC_DIVIDE_ERROR 1
472 #define EXCEPT_EBC_DEBUG 2
473 #define EXCEPT_EBC_BREAKPOINT 3
474 #define EXCEPT_EBC_OVERFLOW 4
475 #define EXCEPT_EBC_INVALID_OPCODE 5 // opcode out of range
476 #define EXCEPT_EBC_STACK_FAULT 6
477 #define EXCEPT_EBC_ALIGNMENT_CHECK 7
478 #define EXCEPT_EBC_INSTRUCTION_ENCODING 8 // malformed instruction
479 #define EXCEPT_EBC_BAD_BREAK 9 // BREAK 0 or undefined BREAK
480 #define EXCEPT_EBC_STEP 10 // to support debug stepping
481 //
482 // For coding convenience, define the maximum valid EBC exception.
483 //
484 #define MAX_EBC_EXCEPTION EXCEPT_EBC_STEP
485
486 //
487 // EBC processor context definition
488 //
489 typedef struct {
490 UINT64 R0;
491 UINT64 R1;
492 UINT64 R2;
493 UINT64 R3;
494 UINT64 R4;
495 UINT64 R5;
496 UINT64 R6;
497 UINT64 R7;
498 UINT64 Flags;
499 UINT64 ControlFlags;
500 UINT64 Ip;
501 } EFI_SYSTEM_CONTEXT_EBC;
502
503 //
504 // Universal EFI_SYSTEM_CONTEXT definition
505 //
506 typedef union {
507 EFI_SYSTEM_CONTEXT_EBC *SystemContextEbc;
508 EFI_SYSTEM_CONTEXT_IA32 *SystemContextIa32;
509 EFI_SYSTEM_CONTEXT_X64 *SystemContextX64;
510 EFI_SYSTEM_CONTEXT_IPF *SystemContextIpf;
511 } EFI_SYSTEM_CONTEXT;
512
513 //
514 // DebugSupport callback function prototypes
515 //
516
517 /**
518 Registers and enables an exception callback function for the specified exception.
519
520 @param ExceptionType Exception types in EBC, IA-32, X64, or IPF
521 @param SystemContext Exception content.
522
523 **/
524 typedef
525 VOID
526 (*EFI_EXCEPTION_CALLBACK) (
527 IN EFI_EXCEPTION_TYPE ExceptionType,
528 IN OUT EFI_SYSTEM_CONTEXT SystemContext
529 );
530
531 /**
532 Registers and enables the on-target debug agent's periodic entry point.
533
534 @param SystemContext Exception content.
535
536 **/
537 typedef
538 VOID
539 (*EFI_PERIODIC_CALLBACK) (
540 IN OUT EFI_SYSTEM_CONTEXT SystemContext
541 );
542
543 //
544 // Machine type definition
545 //
546 typedef enum {
547 IsaIa32 = IMAGE_FILE_MACHINE_I386, // 0x014C
548 IsaX64 = IMAGE_FILE_MACHINE_X64, // 0x8664
549 IsaIpf = IMAGE_FILE_MACHINE_IA64, // 0x0200
550 IsaEbc = IMAGE_FILE_MACHINE_EBC // 0x0EBC
551 } EFI_INSTRUCTION_SET_ARCHITECTURE;
552
553
554 //
555 // DebugSupport member function definitions
556 //
557
558 /**
559 Returns the maximum value that may be used for the ProcessorIndex parameter in
560 RegisterPeriodicCallback() and RegisterExceptionCallback().
561
562 @param This A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance.
563 @param MaxProcessorIndex Pointer to a caller-allocated UINTN in which the maximum supported
564 processor index is returned.
565
566 @retval EFI_SUCCESS The function completed successfully.
567
568 **/
569 typedef
570 EFI_STATUS
571 (EFIAPI *EFI_GET_MAXIMUM_PROCESSOR_INDEX) (
572 IN EFI_DEBUG_SUPPORT_PROTOCOL *This,
573 OUT UINTN *MaxProcessorIndex
574 );
575
576 /**
577 Registers a function to be called back periodically in interrupt context.
578
579 @param This A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance.
580 @param ProcessorIndex Specifies which processor the callback function applies to.
581 @param PeriodicCallback A pointer to a function of type PERIODIC_CALLBACK that is the main
582 periodic entry point of the debug agent.
583
584 @retval EFI_SUCCESS The function completed successfully.
585 @retval EFI_ALREADY_STARTED Non-NULL PeriodicCallback parameter when a callback
586 function was previously registered.
587 @retval EFI_OUT_OF_RESOURCES System has insufficient memory resources to register new callback
588 function.
589
590 **/
591 typedef
592 EFI_STATUS
593 (EFIAPI *EFI_REGISTER_PERIODIC_CALLBACK) (
594 IN EFI_DEBUG_SUPPORT_PROTOCOL *This,
595 IN UINTN ProcessorIndex,
596 IN EFI_PERIODIC_CALLBACK PeriodicCallback
597 );
598
599 /**
600 Registers a function to be called when a given processor exception occurs.
601
602 @param This A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance.
603 @param ProcessorIndex Specifies which processor the callback function applies to.
604 @param PeriodicCallback A pointer to a function of type EXCEPTION_CALLBACK that is called
605 when the processor exception specified by ExceptionType occurs.
606 @param ExceptionType Specifies which processor exception to hook.
607
608 @retval EFI_SUCCESS The function completed successfully.
609 @retval EFI_ALREADY_STARTED Non-NULL PeriodicCallback parameter when a callback
610 function was previously registered.
611 @retval EFI_OUT_OF_RESOURCES System has insufficient memory resources to register new callback
612 function.
613
614 **/
615 typedef
616 EFI_STATUS
617 (EFIAPI *EFI_REGISTER_EXCEPTION_CALLBACK) (
618 IN EFI_DEBUG_SUPPORT_PROTOCOL *This,
619 IN UINTN ProcessorIndex,
620 IN EFI_EXCEPTION_CALLBACK ExceptionCallback,
621 IN EFI_EXCEPTION_TYPE ExceptionType
622 );
623
624 /**
625 Invalidates processor instruction cache for a memory range. Subsequent execution in this range
626 causes a fresh memory fetch to retrieve code to be executed.
627
628 @param This A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance.
629 @param ProcessorIndex Specifies which processor's instruction cache is to be invalidated.
630 @param Start Specifies the physical base of the memory range to be invalidated.
631 @param Length Specifies the minimum number of bytes in the processor's instruction
632 cache to invalidate.
633
634 @retval EFI_SUCCESS The function completed successfully.
635
636 **/
637 typedef
638 EFI_STATUS
639 (EFIAPI *EFI_INVALIDATE_INSTRUCTION_CACHE) (
640 IN EFI_DEBUG_SUPPORT_PROTOCOL *This,
641 IN UINTN ProcessorIndex,
642 IN VOID *Start,
643 IN UINT64 Length
644 );
645
646 //
647 // DebugSupport protocol definition
648 //
649 struct _EFI_DEBUG_SUPPORT_PROTOCOL {
650 EFI_INSTRUCTION_SET_ARCHITECTURE Isa;
651 EFI_GET_MAXIMUM_PROCESSOR_INDEX GetMaximumProcessorIndex;
652 EFI_REGISTER_PERIODIC_CALLBACK RegisterPeriodicCallback;
653 EFI_REGISTER_EXCEPTION_CALLBACK RegisterExceptionCallback;
654 EFI_INVALIDATE_INSTRUCTION_CACHE InvalidateInstructionCache;
655 };
656
657 extern EFI_GUID gEfiDebugSupportProtocolGuid;
658
659 #endif