3 Copyright (c) 2004 - 2006, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 DebugSupport protocol and supporting definitions as defined in the EFI 1.1
21 The DebugSupport protocol is used by source level debuggers to abstract the
22 processor and handle context save and restore operations.
26 #ifndef _DEBUG_SUPPORT_H_
27 #define _DEBUG_SUPPORT_H_
32 // Debug Support protocol {2755590C-6F3C-42FA-9EA4-A3BA543CDA25}
34 #define EFI_DEBUG_SUPPORT_PROTOCOL_GUID \
36 0x2755590C, 0x6F3C, 0x42FA, 0x9E, 0xA4, 0xA3, 0xBA, 0x54, 0x3C, 0xDA, 0x25 \
40 // Debug Support definitions
42 typedef INTN EFI_EXCEPTION_TYPE
;
45 // IA-32 processor exception types
47 #define EXCEPT_IA32_DIVIDE_ERROR 0
48 #define EXCEPT_IA32_DEBUG 1
49 #define EXCEPT_IA32_NMI 2
50 #define EXCEPT_IA32_BREAKPOINT 3
51 #define EXCEPT_IA32_OVERFLOW 4
52 #define EXCEPT_IA32_BOUND 5
53 #define EXCEPT_IA32_INVALID_OPCODE 6
54 #define EXCEPT_IA32_DOUBLE_FAULT 8
55 #define EXCEPT_IA32_INVALID_TSS 10
56 #define EXCEPT_IA32_SEG_NOT_PRESENT 11
57 #define EXCEPT_IA32_STACK_FAULT 12
58 #define EXCEPT_IA32_GP_FAULT 13
59 #define EXCEPT_IA32_PAGE_FAULT 14
60 #define EXCEPT_IA32_FP_ERROR 16
61 #define EXCEPT_IA32_ALIGNMENT_CHECK 17
62 #define EXCEPT_IA32_MACHINE_CHECK 18
63 #define EXCEPT_IA32_SIMD 19
66 // IA-32 processor context definition
70 // FP / MMX / XMM registers (see fxrstor instruction definition)
83 #if (EFI_SPECIFICATION_VERSION >= 0x00020000)
84 UINT8 St0Mm0
[10], Reserved3
[6];
85 UINT8 St1Mm1
[10], Reserved4
[6];
86 UINT8 St2Mm2
[10], Reserved5
[6];
87 UINT8 St3Mm3
[10], Reserved6
[6];
88 UINT8 St4Mm4
[10], Reserved7
[6];
89 UINT8 St5Mm5
[10], Reserved8
[6];
90 UINT8 St6Mm6
[10], Reserved9
[6];
91 UINT8 St7Mm7
[10], Reserved10
[6];
100 UINT8 Reserved11
[14 * 16];
101 } EFI_FX_SAVE_STATE_IA32
;
103 UINT8 St0Mm0
[10], Reserved3
[6];
104 UINT8 St0Mm1
[10], Reserved4
[6];
105 UINT8 St0Mm2
[10], Reserved5
[6];
106 UINT8 St0Mm3
[10], Reserved6
[6];
107 UINT8 St0Mm4
[10], Reserved7
[6];
108 UINT8 St0Mm5
[10], Reserved8
[6];
109 UINT8 St0Mm6
[10], Reserved9
[6];
110 UINT8 St0Mm7
[10], Reserved10
[6];
111 UINT8 Reserved11
[22 * 16];
116 UINT32 ExceptionData
;
117 #if (EFI_SPECIFICATION_VERSION >= 0x00020000)
118 EFI_FX_SAVE_STATE_IA32 FxSaveState
;
120 EFI_FX_SAVE_STATE FxSaveState
;
129 UINT32 Cr1
; /* Reserved */
153 } EFI_SYSTEM_CONTEXT_IA32
;
156 // X64 processor exception types
158 #define EXCEPT_X64_DIVIDE_ERROR 0
159 #define EXCEPT_X64_DEBUG 1
160 #define EXCEPT_X64_NMI 2
161 #define EXCEPT_X64_BREAKPOINT 3
162 #define EXCEPT_X64_OVERFLOW 4
163 #define EXCEPT_X64_BOUND 5
164 #define EXCEPT_X64_INVALID_OPCODE 6
165 #define EXCEPT_X64_DOUBLE_FAULT 8
166 #define EXCEPT_X64_INVALID_TSS 10
167 #define EXCEPT_X64_SEG_NOT_PRESENT 11
168 #define EXCEPT_X64_STACK_FAULT 12
169 #define EXCEPT_X64_GP_FAULT 13
170 #define EXCEPT_X64_PAGE_FAULT 14
171 #define EXCEPT_X64_FP_ERROR 16
172 #define EXCEPT_X64_ALIGNMENT_CHECK 17
173 #define EXCEPT_X64_MACHINE_CHECK 18
174 #define EXCEPT_X64_SIMD 19
177 // X64 processor context definition
180 // FP / MMX / XMM registers (see fxrstor instruction definition)
190 UINT8 St0Mm0
[10], Reserved2
[6];
191 UINT8 St1Mm1
[10], Reserved3
[6];
192 UINT8 St2Mm2
[10], Reserved4
[6];
193 UINT8 St3Mm3
[10], Reserved5
[6];
194 UINT8 St4Mm4
[10], Reserved6
[6];
195 UINT8 St5Mm5
[10], Reserved7
[6];
196 UINT8 St6Mm6
[10], Reserved8
[6];
197 UINT8 St7Mm7
[10], Reserved9
[6];
206 #if (EFI_SPECIFICATION_VERSION >= 0x00020000)
208 // NOTE: UEFI 2.0 spec definition as follows. It should be updated
209 // after spec update.
211 UINT8 Reserved11
[14 * 16];
221 UINT8 Reserved10
[6 * 16];
223 } EFI_FX_SAVE_STATE_X64
;
226 UINT64 ExceptionData
;
227 EFI_FX_SAVE_STATE_X64 FxSaveState
;
235 UINT64 Cr1
; /* Reserved */
268 } EFI_SYSTEM_CONTEXT_X64
;
271 // IPF processor exception types
273 #define EXCEPT_IPF_VHTP_TRANSLATION 0
274 #define EXCEPT_IPF_INSTRUCTION_TLB 1
275 #define EXCEPT_IPF_DATA_TLB 2
276 #define EXCEPT_IPF_ALT_INSTRUCTION_TLB 3
277 #define EXCEPT_IPF_ALT_DATA_TLB 4
278 #define EXCEPT_IPF_DATA_NESTED_TLB 5
279 #define EXCEPT_IPF_INSTRUCTION_KEY_MISSED 6
280 #define EXCEPT_IPF_DATA_KEY_MISSED 7
281 #define EXCEPT_IPF_DIRTY_BIT 8
282 #define EXCEPT_IPF_INSTRUCTION_ACCESS_BIT 9
283 #define EXCEPT_IPF_DATA_ACCESS_BIT 10
284 #define EXCEPT_IPF_BREAKPOINT 11
285 #define EXCEPT_IPF_EXTERNAL_INTERRUPT 12
289 #define EXCEPT_IPF_PAGE_NOT_PRESENT 20
290 #define EXCEPT_IPF_KEY_PERMISSION 21
291 #define EXCEPT_IPF_INSTRUCTION_ACCESS_RIGHTS 22
292 #define EXCEPT_IPF_DATA_ACCESS_RIGHTS 23
293 #define EXCEPT_IPF_GENERAL_EXCEPTION 24
294 #define EXCEPT_IPF_DISABLED_FP_REGISTER 25
295 #define EXCEPT_IPF_NAT_CONSUMPTION 26
296 #define EXCEPT_IPF_SPECULATION 27
300 #define EXCEPT_IPF_DEBUG 29
301 #define EXCEPT_IPF_UNALIGNED_REFERENCE 30
302 #define EXCEPT_IPF_UNSUPPORTED_DATA_REFERENCE 31
303 #define EXCEPT_IPF_FP_FAULT 32
304 #define EXCEPT_IPF_FP_TRAP 33
305 #define EXCEPT_IPF_LOWER_PRIVILEGE_TRANSFER_TRAP 34
306 #define EXCEPT_IPF_TAKEN_BRANCH 35
307 #define EXCEPT_IPF_SINGLE_STEP 36
311 #define EXCEPT_IPF_IA32_EXCEPTION 45
312 #define EXCEPT_IPF_IA32_INTERCEPT 46
313 #define EXCEPT_IPF_IA32_INTERRUPT 47
316 // IPF processor context definition
320 // The first reserved field is necessary to preserve alignment for the correct
321 // bits in UNAT and to insure F2 is 16 byte aligned..
399 // application registers
465 // virtual registers - nat bits for R1-R31
469 } EFI_SYSTEM_CONTEXT_IPF
;
472 // EBC processor exception types
474 #define EXCEPT_EBC_UNDEFINED 0
475 #define EXCEPT_EBC_DIVIDE_ERROR 1
476 #define EXCEPT_EBC_DEBUG 2
477 #define EXCEPT_EBC_BREAKPOINT 3
478 #define EXCEPT_EBC_OVERFLOW 4
479 #define EXCEPT_EBC_INVALID_OPCODE 5 // opcode out of range
480 #define EXCEPT_EBC_STACK_FAULT 6
481 #define EXCEPT_EBC_ALIGNMENT_CHECK 7
482 #define EXCEPT_EBC_INSTRUCTION_ENCODING 8 // malformed instruction
483 #define EXCEPT_EBC_BAD_BREAK 9 // BREAK 0 or undefined BREAK
484 #define EXCEPT_EBC_STEP 10 // to support debug stepping
486 // For coding convenience, define the maximum valid EBC exception.
488 #define MAX_EBC_EXCEPTION EXCEPT_EBC_STEP
491 // EBC processor context definition
505 } EFI_SYSTEM_CONTEXT_EBC
;
508 // Universal EFI_SYSTEM_CONTEXT definition
511 EFI_SYSTEM_CONTEXT_EBC
*SystemContextEbc
;
512 EFI_SYSTEM_CONTEXT_IA32
*SystemContextIa32
;
513 EFI_SYSTEM_CONTEXT_X64
*SystemContextX64
;
514 EFI_SYSTEM_CONTEXT_IPF
*SystemContextIpf
;
515 } EFI_SYSTEM_CONTEXT
;
518 // DebugSupport callback function prototypes
522 (*EFI_EXCEPTION_CALLBACK
) (
523 IN EFI_EXCEPTION_TYPE ExceptionType
,
524 IN OUT EFI_SYSTEM_CONTEXT SystemContext
529 (*EFI_PERIODIC_CALLBACK
) (
530 IN OUT EFI_SYSTEM_CONTEXT SystemContext
534 // Machine type definition
537 IsaIa32
= EFI_IMAGE_MACHINE_IA32
,
538 IsaX64
= EFI_IMAGE_MACHINE_X64
,
539 IsaIpf
= EFI_IMAGE_MACHINE_IA64
,
540 IsaEbc
= EFI_IMAGE_MACHINE_EBC
541 } EFI_INSTRUCTION_SET_ARCHITECTURE
;
543 EFI_FORWARD_DECLARATION (EFI_DEBUG_SUPPORT_PROTOCOL
);
546 // DebugSupport member function definitions
550 (EFIAPI
*EFI_GET_MAXIMUM_PROCESSOR_INDEX
) (
551 IN EFI_DEBUG_SUPPORT_PROTOCOL
* This
,
552 OUT UINTN
*MaxProcessorIndex
557 (EFIAPI
*EFI_REGISTER_PERIODIC_CALLBACK
) (
558 IN EFI_DEBUG_SUPPORT_PROTOCOL
* This
,
559 IN UINTN ProcessorIndex
,
560 IN EFI_PERIODIC_CALLBACK PeriodicCallback
565 (EFIAPI
*EFI_REGISTER_EXCEPTION_CALLBACK
) (
566 IN EFI_DEBUG_SUPPORT_PROTOCOL
* This
,
567 IN UINTN ProcessorIndex
,
568 IN EFI_EXCEPTION_CALLBACK ExceptionCallback
,
569 IN EFI_EXCEPTION_TYPE ExceptionType
574 (EFIAPI
*EFI_INVALIDATE_INSTRUCTION_CACHE
) (
575 IN EFI_DEBUG_SUPPORT_PROTOCOL
* This
,
576 IN UINTN ProcessorIndex
,
582 // DebugSupport protocol definition
584 struct _EFI_DEBUG_SUPPORT_PROTOCOL
{
585 EFI_INSTRUCTION_SET_ARCHITECTURE Isa
;
586 EFI_GET_MAXIMUM_PROCESSOR_INDEX GetMaximumProcessorIndex
;
587 EFI_REGISTER_PERIODIC_CALLBACK RegisterPeriodicCallback
;
588 EFI_REGISTER_EXCEPTION_CALLBACK RegisterExceptionCallback
;
589 EFI_INVALIDATE_INSTRUCTION_CACHE InvalidateInstructionCache
;
592 extern EFI_GUID gEfiDebugSupportProtocolGuid
;
594 #endif /* _DEBUG_SUPPORT_H_ */