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