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