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