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