1*f334afcfSToomas Soome /** @file 2*f334afcfSToomas Soome DebugSupport protocol and supporting definitions as defined in the UEFI2.4 3*f334afcfSToomas Soome specification. 4*f334afcfSToomas Soome 5*f334afcfSToomas Soome The DebugSupport protocol is used by source level debuggers to abstract the 6*f334afcfSToomas Soome processor and handle context save and restore operations. 7*f334afcfSToomas Soome 8*f334afcfSToomas Soome Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR> 9*f334afcfSToomas Soome Portions copyright (c) 2011 - 2013, ARM Ltd. All rights reserved.<BR> 10*f334afcfSToomas Soome Copyright (c) 2020, Hewlett Packard Enterprise Development LP. All rights reserved.<BR> 11*f334afcfSToomas Soome 12*f334afcfSToomas Soome SPDX-License-Identifier: BSD-2-Clause-Patent 13*f334afcfSToomas Soome 14*f334afcfSToomas Soome **/ 15*f334afcfSToomas Soome 16*f334afcfSToomas Soome #ifndef __DEBUG_SUPPORT_H__ 17*f334afcfSToomas Soome #define __DEBUG_SUPPORT_H__ 18*f334afcfSToomas Soome 19*f334afcfSToomas Soome #include <IndustryStandard/PeImage.h> 20*f334afcfSToomas Soome 21*f334afcfSToomas Soome typedef struct _EFI_DEBUG_SUPPORT_PROTOCOL EFI_DEBUG_SUPPORT_PROTOCOL; 22*f334afcfSToomas Soome 23*f334afcfSToomas Soome /// 24*f334afcfSToomas Soome /// Debug Support protocol {2755590C-6F3C-42FA-9EA4-A3BA543CDA25}. 25*f334afcfSToomas Soome /// 26*f334afcfSToomas Soome #define EFI_DEBUG_SUPPORT_PROTOCOL_GUID \ 27*f334afcfSToomas Soome { \ 28*f334afcfSToomas Soome 0x2755590C, 0x6F3C, 0x42FA, {0x9E, 0xA4, 0xA3, 0xBA, 0x54, 0x3C, 0xDA, 0x25 } \ 29*f334afcfSToomas Soome } 30*f334afcfSToomas Soome 31*f334afcfSToomas Soome /// 32*f334afcfSToomas Soome /// Processor exception to be hooked. 33*f334afcfSToomas Soome /// All exception types for IA32, X64, Itanium and EBC processors are defined. 34*f334afcfSToomas Soome /// 35*f334afcfSToomas Soome typedef INTN EFI_EXCEPTION_TYPE; 36*f334afcfSToomas Soome 37*f334afcfSToomas Soome /// 38*f334afcfSToomas Soome /// IA-32 processor exception types. 39*f334afcfSToomas Soome /// 40*f334afcfSToomas Soome #define EXCEPT_IA32_DIVIDE_ERROR 0 41*f334afcfSToomas Soome #define EXCEPT_IA32_DEBUG 1 42*f334afcfSToomas Soome #define EXCEPT_IA32_NMI 2 43*f334afcfSToomas Soome #define EXCEPT_IA32_BREAKPOINT 3 44*f334afcfSToomas Soome #define EXCEPT_IA32_OVERFLOW 4 45*f334afcfSToomas Soome #define EXCEPT_IA32_BOUND 5 46*f334afcfSToomas Soome #define EXCEPT_IA32_INVALID_OPCODE 6 47*f334afcfSToomas Soome #define EXCEPT_IA32_DOUBLE_FAULT 8 48*f334afcfSToomas Soome #define EXCEPT_IA32_INVALID_TSS 10 49*f334afcfSToomas Soome #define EXCEPT_IA32_SEG_NOT_PRESENT 11 50*f334afcfSToomas Soome #define EXCEPT_IA32_STACK_FAULT 12 51*f334afcfSToomas Soome #define EXCEPT_IA32_GP_FAULT 13 52*f334afcfSToomas Soome #define EXCEPT_IA32_PAGE_FAULT 14 53*f334afcfSToomas Soome #define EXCEPT_IA32_FP_ERROR 16 54*f334afcfSToomas Soome #define EXCEPT_IA32_ALIGNMENT_CHECK 17 55*f334afcfSToomas Soome #define EXCEPT_IA32_MACHINE_CHECK 18 56*f334afcfSToomas Soome #define EXCEPT_IA32_SIMD 19 57*f334afcfSToomas Soome 58*f334afcfSToomas Soome /// 59*f334afcfSToomas Soome /// FXSAVE_STATE. 60*f334afcfSToomas Soome /// FP / MMX / XMM registers (see fxrstor instruction definition). 61*f334afcfSToomas Soome /// 62*f334afcfSToomas Soome typedef struct { 63*f334afcfSToomas Soome UINT16 Fcw; 64*f334afcfSToomas Soome UINT16 Fsw; 65*f334afcfSToomas Soome UINT16 Ftw; 66*f334afcfSToomas Soome UINT16 Opcode; 67*f334afcfSToomas Soome UINT32 Eip; 68*f334afcfSToomas Soome UINT16 Cs; 69*f334afcfSToomas Soome UINT16 Reserved1; 70*f334afcfSToomas Soome UINT32 DataOffset; 71*f334afcfSToomas Soome UINT16 Ds; 72*f334afcfSToomas Soome UINT8 Reserved2[10]; 73*f334afcfSToomas Soome UINT8 St0Mm0[10], Reserved3[6]; 74*f334afcfSToomas Soome UINT8 St1Mm1[10], Reserved4[6]; 75*f334afcfSToomas Soome UINT8 St2Mm2[10], Reserved5[6]; 76*f334afcfSToomas Soome UINT8 St3Mm3[10], Reserved6[6]; 77*f334afcfSToomas Soome UINT8 St4Mm4[10], Reserved7[6]; 78*f334afcfSToomas Soome UINT8 St5Mm5[10], Reserved8[6]; 79*f334afcfSToomas Soome UINT8 St6Mm6[10], Reserved9[6]; 80*f334afcfSToomas Soome UINT8 St7Mm7[10], Reserved10[6]; 81*f334afcfSToomas Soome UINT8 Xmm0[16]; 82*f334afcfSToomas Soome UINT8 Xmm1[16]; 83*f334afcfSToomas Soome UINT8 Xmm2[16]; 84*f334afcfSToomas Soome UINT8 Xmm3[16]; 85*f334afcfSToomas Soome UINT8 Xmm4[16]; 86*f334afcfSToomas Soome UINT8 Xmm5[16]; 87*f334afcfSToomas Soome UINT8 Xmm6[16]; 88*f334afcfSToomas Soome UINT8 Xmm7[16]; 89*f334afcfSToomas Soome UINT8 Reserved11[14 * 16]; 90*f334afcfSToomas Soome } EFI_FX_SAVE_STATE_IA32; 91*f334afcfSToomas Soome 92*f334afcfSToomas Soome /// 93*f334afcfSToomas Soome /// IA-32 processor context definition. 94*f334afcfSToomas Soome /// 95*f334afcfSToomas Soome typedef struct { 96*f334afcfSToomas Soome UINT32 ExceptionData; 97*f334afcfSToomas Soome EFI_FX_SAVE_STATE_IA32 FxSaveState; 98*f334afcfSToomas Soome UINT32 Dr0; 99*f334afcfSToomas Soome UINT32 Dr1; 100*f334afcfSToomas Soome UINT32 Dr2; 101*f334afcfSToomas Soome UINT32 Dr3; 102*f334afcfSToomas Soome UINT32 Dr6; 103*f334afcfSToomas Soome UINT32 Dr7; 104*f334afcfSToomas Soome UINT32 Cr0; 105*f334afcfSToomas Soome UINT32 Cr1; /* Reserved */ 106*f334afcfSToomas Soome UINT32 Cr2; 107*f334afcfSToomas Soome UINT32 Cr3; 108*f334afcfSToomas Soome UINT32 Cr4; 109*f334afcfSToomas Soome UINT32 Eflags; 110*f334afcfSToomas Soome UINT32 Ldtr; 111*f334afcfSToomas Soome UINT32 Tr; 112*f334afcfSToomas Soome UINT32 Gdtr[2]; 113*f334afcfSToomas Soome UINT32 Idtr[2]; 114*f334afcfSToomas Soome UINT32 Eip; 115*f334afcfSToomas Soome UINT32 Gs; 116*f334afcfSToomas Soome UINT32 Fs; 117*f334afcfSToomas Soome UINT32 Es; 118*f334afcfSToomas Soome UINT32 Ds; 119*f334afcfSToomas Soome UINT32 Cs; 120*f334afcfSToomas Soome UINT32 Ss; 121*f334afcfSToomas Soome UINT32 Edi; 122*f334afcfSToomas Soome UINT32 Esi; 123*f334afcfSToomas Soome UINT32 Ebp; 124*f334afcfSToomas Soome UINT32 Esp; 125*f334afcfSToomas Soome UINT32 Ebx; 126*f334afcfSToomas Soome UINT32 Edx; 127*f334afcfSToomas Soome UINT32 Ecx; 128*f334afcfSToomas Soome UINT32 Eax; 129*f334afcfSToomas Soome } EFI_SYSTEM_CONTEXT_IA32; 130*f334afcfSToomas Soome 131*f334afcfSToomas Soome /// 132*f334afcfSToomas Soome /// x64 processor exception types. 133*f334afcfSToomas Soome /// 134*f334afcfSToomas Soome #define EXCEPT_X64_DIVIDE_ERROR 0 135*f334afcfSToomas Soome #define EXCEPT_X64_DEBUG 1 136*f334afcfSToomas Soome #define EXCEPT_X64_NMI 2 137*f334afcfSToomas Soome #define EXCEPT_X64_BREAKPOINT 3 138*f334afcfSToomas Soome #define EXCEPT_X64_OVERFLOW 4 139*f334afcfSToomas Soome #define EXCEPT_X64_BOUND 5 140*f334afcfSToomas Soome #define EXCEPT_X64_INVALID_OPCODE 6 141*f334afcfSToomas Soome #define EXCEPT_X64_DOUBLE_FAULT 8 142*f334afcfSToomas Soome #define EXCEPT_X64_INVALID_TSS 10 143*f334afcfSToomas Soome #define EXCEPT_X64_SEG_NOT_PRESENT 11 144*f334afcfSToomas Soome #define EXCEPT_X64_STACK_FAULT 12 145*f334afcfSToomas Soome #define EXCEPT_X64_GP_FAULT 13 146*f334afcfSToomas Soome #define EXCEPT_X64_PAGE_FAULT 14 147*f334afcfSToomas Soome #define EXCEPT_X64_FP_ERROR 16 148*f334afcfSToomas Soome #define EXCEPT_X64_ALIGNMENT_CHECK 17 149*f334afcfSToomas Soome #define EXCEPT_X64_MACHINE_CHECK 18 150*f334afcfSToomas Soome #define EXCEPT_X64_SIMD 19 151*f334afcfSToomas Soome 152*f334afcfSToomas Soome /// 153*f334afcfSToomas Soome /// FXSAVE_STATE. 154*f334afcfSToomas Soome /// FP / MMX / XMM registers (see fxrstor instruction definition). 155*f334afcfSToomas Soome /// 156*f334afcfSToomas Soome typedef struct { 157*f334afcfSToomas Soome UINT16 Fcw; 158*f334afcfSToomas Soome UINT16 Fsw; 159*f334afcfSToomas Soome UINT16 Ftw; 160*f334afcfSToomas Soome UINT16 Opcode; 161*f334afcfSToomas Soome UINT64 Rip; 162*f334afcfSToomas Soome UINT64 DataOffset; 163*f334afcfSToomas Soome UINT8 Reserved1[8]; 164*f334afcfSToomas Soome UINT8 St0Mm0[10], Reserved2[6]; 165*f334afcfSToomas Soome UINT8 St1Mm1[10], Reserved3[6]; 166*f334afcfSToomas Soome UINT8 St2Mm2[10], Reserved4[6]; 167*f334afcfSToomas Soome UINT8 St3Mm3[10], Reserved5[6]; 168*f334afcfSToomas Soome UINT8 St4Mm4[10], Reserved6[6]; 169*f334afcfSToomas Soome UINT8 St5Mm5[10], Reserved7[6]; 170*f334afcfSToomas Soome UINT8 St6Mm6[10], Reserved8[6]; 171*f334afcfSToomas Soome UINT8 St7Mm7[10], Reserved9[6]; 172*f334afcfSToomas Soome UINT8 Xmm0[16]; 173*f334afcfSToomas Soome UINT8 Xmm1[16]; 174*f334afcfSToomas Soome UINT8 Xmm2[16]; 175*f334afcfSToomas Soome UINT8 Xmm3[16]; 176*f334afcfSToomas Soome UINT8 Xmm4[16]; 177*f334afcfSToomas Soome UINT8 Xmm5[16]; 178*f334afcfSToomas Soome UINT8 Xmm6[16]; 179*f334afcfSToomas Soome UINT8 Xmm7[16]; 180*f334afcfSToomas Soome // 181*f334afcfSToomas Soome // NOTE: UEFI 2.0 spec definition as follows. 182*f334afcfSToomas Soome // 183*f334afcfSToomas Soome UINT8 Reserved11[14 * 16]; 184*f334afcfSToomas Soome } EFI_FX_SAVE_STATE_X64; 185*f334afcfSToomas Soome 186*f334afcfSToomas Soome /// 187*f334afcfSToomas Soome /// x64 processor context definition. 188*f334afcfSToomas Soome /// 189*f334afcfSToomas Soome typedef struct { 190*f334afcfSToomas Soome UINT64 ExceptionData; 191*f334afcfSToomas Soome EFI_FX_SAVE_STATE_X64 FxSaveState; 192*f334afcfSToomas Soome UINT64 Dr0; 193*f334afcfSToomas Soome UINT64 Dr1; 194*f334afcfSToomas Soome UINT64 Dr2; 195*f334afcfSToomas Soome UINT64 Dr3; 196*f334afcfSToomas Soome UINT64 Dr6; 197*f334afcfSToomas Soome UINT64 Dr7; 198*f334afcfSToomas Soome UINT64 Cr0; 199*f334afcfSToomas Soome UINT64 Cr1; /* Reserved */ 200*f334afcfSToomas Soome UINT64 Cr2; 201*f334afcfSToomas Soome UINT64 Cr3; 202*f334afcfSToomas Soome UINT64 Cr4; 203*f334afcfSToomas Soome UINT64 Cr8; 204*f334afcfSToomas Soome UINT64 Rflags; 205*f334afcfSToomas Soome UINT64 Ldtr; 206*f334afcfSToomas Soome UINT64 Tr; 207*f334afcfSToomas Soome UINT64 Gdtr[2]; 208*f334afcfSToomas Soome UINT64 Idtr[2]; 209*f334afcfSToomas Soome UINT64 Rip; 210*f334afcfSToomas Soome UINT64 Gs; 211*f334afcfSToomas Soome UINT64 Fs; 212*f334afcfSToomas Soome UINT64 Es; 213*f334afcfSToomas Soome UINT64 Ds; 214*f334afcfSToomas Soome UINT64 Cs; 215*f334afcfSToomas Soome UINT64 Ss; 216*f334afcfSToomas Soome UINT64 Rdi; 217*f334afcfSToomas Soome UINT64 Rsi; 218*f334afcfSToomas Soome UINT64 Rbp; 219*f334afcfSToomas Soome UINT64 Rsp; 220*f334afcfSToomas Soome UINT64 Rbx; 221*f334afcfSToomas Soome UINT64 Rdx; 222*f334afcfSToomas Soome UINT64 Rcx; 223*f334afcfSToomas Soome UINT64 Rax; 224*f334afcfSToomas Soome UINT64 R8; 225*f334afcfSToomas Soome UINT64 R9; 226*f334afcfSToomas Soome UINT64 R10; 227*f334afcfSToomas Soome UINT64 R11; 228*f334afcfSToomas Soome UINT64 R12; 229*f334afcfSToomas Soome UINT64 R13; 230*f334afcfSToomas Soome UINT64 R14; 231*f334afcfSToomas Soome UINT64 R15; 232*f334afcfSToomas Soome } EFI_SYSTEM_CONTEXT_X64; 233*f334afcfSToomas Soome 234*f334afcfSToomas Soome /// 235*f334afcfSToomas Soome /// Itanium Processor Family Exception types. 236*f334afcfSToomas Soome /// 237*f334afcfSToomas Soome #define EXCEPT_IPF_VHTP_TRANSLATION 0 238*f334afcfSToomas Soome #define EXCEPT_IPF_INSTRUCTION_TLB 1 239*f334afcfSToomas Soome #define EXCEPT_IPF_DATA_TLB 2 240*f334afcfSToomas Soome #define EXCEPT_IPF_ALT_INSTRUCTION_TLB 3 241*f334afcfSToomas Soome #define EXCEPT_IPF_ALT_DATA_TLB 4 242*f334afcfSToomas Soome #define EXCEPT_IPF_DATA_NESTED_TLB 5 243*f334afcfSToomas Soome #define EXCEPT_IPF_INSTRUCTION_KEY_MISSED 6 244*f334afcfSToomas Soome #define EXCEPT_IPF_DATA_KEY_MISSED 7 245*f334afcfSToomas Soome #define EXCEPT_IPF_DIRTY_BIT 8 246*f334afcfSToomas Soome #define EXCEPT_IPF_INSTRUCTION_ACCESS_BIT 9 247*f334afcfSToomas Soome #define EXCEPT_IPF_DATA_ACCESS_BIT 10 248*f334afcfSToomas Soome #define EXCEPT_IPF_BREAKPOINT 11 249*f334afcfSToomas Soome #define EXCEPT_IPF_EXTERNAL_INTERRUPT 12 250*f334afcfSToomas Soome // 251*f334afcfSToomas Soome // 13 - 19 reserved 252*f334afcfSToomas Soome // 253*f334afcfSToomas Soome #define EXCEPT_IPF_PAGE_NOT_PRESENT 20 254*f334afcfSToomas Soome #define EXCEPT_IPF_KEY_PERMISSION 21 255*f334afcfSToomas Soome #define EXCEPT_IPF_INSTRUCTION_ACCESS_RIGHTS 22 256*f334afcfSToomas Soome #define EXCEPT_IPF_DATA_ACCESS_RIGHTS 23 257*f334afcfSToomas Soome #define EXCEPT_IPF_GENERAL_EXCEPTION 24 258*f334afcfSToomas Soome #define EXCEPT_IPF_DISABLED_FP_REGISTER 25 259*f334afcfSToomas Soome #define EXCEPT_IPF_NAT_CONSUMPTION 26 260*f334afcfSToomas Soome #define EXCEPT_IPF_SPECULATION 27 261*f334afcfSToomas Soome // 262*f334afcfSToomas Soome // 28 reserved 263*f334afcfSToomas Soome // 264*f334afcfSToomas Soome #define EXCEPT_IPF_DEBUG 29 265*f334afcfSToomas Soome #define EXCEPT_IPF_UNALIGNED_REFERENCE 30 266*f334afcfSToomas Soome #define EXCEPT_IPF_UNSUPPORTED_DATA_REFERENCE 31 267*f334afcfSToomas Soome #define EXCEPT_IPF_FP_FAULT 32 268*f334afcfSToomas Soome #define EXCEPT_IPF_FP_TRAP 33 269*f334afcfSToomas Soome #define EXCEPT_IPF_LOWER_PRIVILEGE_TRANSFER_TRAP 34 270*f334afcfSToomas Soome #define EXCEPT_IPF_TAKEN_BRANCH 35 271*f334afcfSToomas Soome #define EXCEPT_IPF_SINGLE_STEP 36 272*f334afcfSToomas Soome // 273*f334afcfSToomas Soome // 37 - 44 reserved 274*f334afcfSToomas Soome // 275*f334afcfSToomas Soome #define EXCEPT_IPF_IA32_EXCEPTION 45 276*f334afcfSToomas Soome #define EXCEPT_IPF_IA32_INTERCEPT 46 277*f334afcfSToomas Soome #define EXCEPT_IPF_IA32_INTERRUPT 47 278*f334afcfSToomas Soome 279*f334afcfSToomas Soome /// 280*f334afcfSToomas Soome /// IPF processor context definition. 281*f334afcfSToomas Soome /// 282*f334afcfSToomas Soome typedef struct { 283*f334afcfSToomas Soome // 284*f334afcfSToomas Soome // The first reserved field is necessary to preserve alignment for the correct 285*f334afcfSToomas Soome // bits in UNAT and to insure F2 is 16 byte aligned. 286*f334afcfSToomas Soome // 287*f334afcfSToomas Soome UINT64 Reserved; 288*f334afcfSToomas Soome UINT64 R1; 289*f334afcfSToomas Soome UINT64 R2; 290*f334afcfSToomas Soome UINT64 R3; 291*f334afcfSToomas Soome UINT64 R4; 292*f334afcfSToomas Soome UINT64 R5; 293*f334afcfSToomas Soome UINT64 R6; 294*f334afcfSToomas Soome UINT64 R7; 295*f334afcfSToomas Soome UINT64 R8; 296*f334afcfSToomas Soome UINT64 R9; 297*f334afcfSToomas Soome UINT64 R10; 298*f334afcfSToomas Soome UINT64 R11; 299*f334afcfSToomas Soome UINT64 R12; 300*f334afcfSToomas Soome UINT64 R13; 301*f334afcfSToomas Soome UINT64 R14; 302*f334afcfSToomas Soome UINT64 R15; 303*f334afcfSToomas Soome UINT64 R16; 304*f334afcfSToomas Soome UINT64 R17; 305*f334afcfSToomas Soome UINT64 R18; 306*f334afcfSToomas Soome UINT64 R19; 307*f334afcfSToomas Soome UINT64 R20; 308*f334afcfSToomas Soome UINT64 R21; 309*f334afcfSToomas Soome UINT64 R22; 310*f334afcfSToomas Soome UINT64 R23; 311*f334afcfSToomas Soome UINT64 R24; 312*f334afcfSToomas Soome UINT64 R25; 313*f334afcfSToomas Soome UINT64 R26; 314*f334afcfSToomas Soome UINT64 R27; 315*f334afcfSToomas Soome UINT64 R28; 316*f334afcfSToomas Soome UINT64 R29; 317*f334afcfSToomas Soome UINT64 R30; 318*f334afcfSToomas Soome UINT64 R31; 319*f334afcfSToomas Soome 320*f334afcfSToomas Soome UINT64 F2[2]; 321*f334afcfSToomas Soome UINT64 F3[2]; 322*f334afcfSToomas Soome UINT64 F4[2]; 323*f334afcfSToomas Soome UINT64 F5[2]; 324*f334afcfSToomas Soome UINT64 F6[2]; 325*f334afcfSToomas Soome UINT64 F7[2]; 326*f334afcfSToomas Soome UINT64 F8[2]; 327*f334afcfSToomas Soome UINT64 F9[2]; 328*f334afcfSToomas Soome UINT64 F10[2]; 329*f334afcfSToomas Soome UINT64 F11[2]; 330*f334afcfSToomas Soome UINT64 F12[2]; 331*f334afcfSToomas Soome UINT64 F13[2]; 332*f334afcfSToomas Soome UINT64 F14[2]; 333*f334afcfSToomas Soome UINT64 F15[2]; 334*f334afcfSToomas Soome UINT64 F16[2]; 335*f334afcfSToomas Soome UINT64 F17[2]; 336*f334afcfSToomas Soome UINT64 F18[2]; 337*f334afcfSToomas Soome UINT64 F19[2]; 338*f334afcfSToomas Soome UINT64 F20[2]; 339*f334afcfSToomas Soome UINT64 F21[2]; 340*f334afcfSToomas Soome UINT64 F22[2]; 341*f334afcfSToomas Soome UINT64 F23[2]; 342*f334afcfSToomas Soome UINT64 F24[2]; 343*f334afcfSToomas Soome UINT64 F25[2]; 344*f334afcfSToomas Soome UINT64 F26[2]; 345*f334afcfSToomas Soome UINT64 F27[2]; 346*f334afcfSToomas Soome UINT64 F28[2]; 347*f334afcfSToomas Soome UINT64 F29[2]; 348*f334afcfSToomas Soome UINT64 F30[2]; 349*f334afcfSToomas Soome UINT64 F31[2]; 350*f334afcfSToomas Soome 351*f334afcfSToomas Soome UINT64 Pr; 352*f334afcfSToomas Soome 353*f334afcfSToomas Soome UINT64 B0; 354*f334afcfSToomas Soome UINT64 B1; 355*f334afcfSToomas Soome UINT64 B2; 356*f334afcfSToomas Soome UINT64 B3; 357*f334afcfSToomas Soome UINT64 B4; 358*f334afcfSToomas Soome UINT64 B5; 359*f334afcfSToomas Soome UINT64 B6; 360*f334afcfSToomas Soome UINT64 B7; 361*f334afcfSToomas Soome 362*f334afcfSToomas Soome // 363*f334afcfSToomas Soome // application registers 364*f334afcfSToomas Soome // 365*f334afcfSToomas Soome UINT64 ArRsc; 366*f334afcfSToomas Soome UINT64 ArBsp; 367*f334afcfSToomas Soome UINT64 ArBspstore; 368*f334afcfSToomas Soome UINT64 ArRnat; 369*f334afcfSToomas Soome 370*f334afcfSToomas Soome UINT64 ArFcr; 371*f334afcfSToomas Soome 372*f334afcfSToomas Soome UINT64 ArEflag; 373*f334afcfSToomas Soome UINT64 ArCsd; 374*f334afcfSToomas Soome UINT64 ArSsd; 375*f334afcfSToomas Soome UINT64 ArCflg; 376*f334afcfSToomas Soome UINT64 ArFsr; 377*f334afcfSToomas Soome UINT64 ArFir; 378*f334afcfSToomas Soome UINT64 ArFdr; 379*f334afcfSToomas Soome 380*f334afcfSToomas Soome UINT64 ArCcv; 381*f334afcfSToomas Soome 382*f334afcfSToomas Soome UINT64 ArUnat; 383*f334afcfSToomas Soome 384*f334afcfSToomas Soome UINT64 ArFpsr; 385*f334afcfSToomas Soome 386*f334afcfSToomas Soome UINT64 ArPfs; 387*f334afcfSToomas Soome UINT64 ArLc; 388*f334afcfSToomas Soome UINT64 ArEc; 389*f334afcfSToomas Soome 390*f334afcfSToomas Soome // 391*f334afcfSToomas Soome // control registers 392*f334afcfSToomas Soome // 393*f334afcfSToomas Soome UINT64 CrDcr; 394*f334afcfSToomas Soome UINT64 CrItm; 395*f334afcfSToomas Soome UINT64 CrIva; 396*f334afcfSToomas Soome UINT64 CrPta; 397*f334afcfSToomas Soome UINT64 CrIpsr; 398*f334afcfSToomas Soome UINT64 CrIsr; 399*f334afcfSToomas Soome UINT64 CrIip; 400*f334afcfSToomas Soome UINT64 CrIfa; 401*f334afcfSToomas Soome UINT64 CrItir; 402*f334afcfSToomas Soome UINT64 CrIipa; 403*f334afcfSToomas Soome UINT64 CrIfs; 404*f334afcfSToomas Soome UINT64 CrIim; 405*f334afcfSToomas Soome UINT64 CrIha; 406*f334afcfSToomas Soome 407*f334afcfSToomas Soome // 408*f334afcfSToomas Soome // debug registers 409*f334afcfSToomas Soome // 410*f334afcfSToomas Soome UINT64 Dbr0; 411*f334afcfSToomas Soome UINT64 Dbr1; 412*f334afcfSToomas Soome UINT64 Dbr2; 413*f334afcfSToomas Soome UINT64 Dbr3; 414*f334afcfSToomas Soome UINT64 Dbr4; 415*f334afcfSToomas Soome UINT64 Dbr5; 416*f334afcfSToomas Soome UINT64 Dbr6; 417*f334afcfSToomas Soome UINT64 Dbr7; 418*f334afcfSToomas Soome 419*f334afcfSToomas Soome UINT64 Ibr0; 420*f334afcfSToomas Soome UINT64 Ibr1; 421*f334afcfSToomas Soome UINT64 Ibr2; 422*f334afcfSToomas Soome UINT64 Ibr3; 423*f334afcfSToomas Soome UINT64 Ibr4; 424*f334afcfSToomas Soome UINT64 Ibr5; 425*f334afcfSToomas Soome UINT64 Ibr6; 426*f334afcfSToomas Soome UINT64 Ibr7; 427*f334afcfSToomas Soome 428*f334afcfSToomas Soome // 429*f334afcfSToomas Soome // virtual registers - nat bits for R1-R31 430*f334afcfSToomas Soome // 431*f334afcfSToomas Soome UINT64 IntNat; 432*f334afcfSToomas Soome } EFI_SYSTEM_CONTEXT_IPF; 433*f334afcfSToomas Soome 434*f334afcfSToomas Soome /// 435*f334afcfSToomas Soome /// EBC processor exception types. 436*f334afcfSToomas Soome /// 437*f334afcfSToomas Soome #define EXCEPT_EBC_UNDEFINED 0 438*f334afcfSToomas Soome #define EXCEPT_EBC_DIVIDE_ERROR 1 439*f334afcfSToomas Soome #define EXCEPT_EBC_DEBUG 2 440*f334afcfSToomas Soome #define EXCEPT_EBC_BREAKPOINT 3 441*f334afcfSToomas Soome #define EXCEPT_EBC_OVERFLOW 4 442*f334afcfSToomas Soome #define EXCEPT_EBC_INVALID_OPCODE 5 ///< Opcode out of range. 443*f334afcfSToomas Soome #define EXCEPT_EBC_STACK_FAULT 6 444*f334afcfSToomas Soome #define EXCEPT_EBC_ALIGNMENT_CHECK 7 445*f334afcfSToomas Soome #define EXCEPT_EBC_INSTRUCTION_ENCODING 8 ///< Malformed instruction. 446*f334afcfSToomas Soome #define EXCEPT_EBC_BAD_BREAK 9 ///< BREAK 0 or undefined BREAK. 447*f334afcfSToomas Soome #define EXCEPT_EBC_STEP 10 ///< To support debug stepping. 448*f334afcfSToomas Soome /// 449*f334afcfSToomas Soome /// For coding convenience, define the maximum valid EBC exception. 450*f334afcfSToomas Soome /// 451*f334afcfSToomas Soome #define MAX_EBC_EXCEPTION EXCEPT_EBC_STEP 452*f334afcfSToomas Soome 453*f334afcfSToomas Soome /// 454*f334afcfSToomas Soome /// EBC processor context definition. 455*f334afcfSToomas Soome /// 456*f334afcfSToomas Soome typedef struct { 457*f334afcfSToomas Soome UINT64 R0; 458*f334afcfSToomas Soome UINT64 R1; 459*f334afcfSToomas Soome UINT64 R2; 460*f334afcfSToomas Soome UINT64 R3; 461*f334afcfSToomas Soome UINT64 R4; 462*f334afcfSToomas Soome UINT64 R5; 463*f334afcfSToomas Soome UINT64 R6; 464*f334afcfSToomas Soome UINT64 R7; 465*f334afcfSToomas Soome UINT64 Flags; 466*f334afcfSToomas Soome UINT64 ControlFlags; 467*f334afcfSToomas Soome UINT64 Ip; 468*f334afcfSToomas Soome } EFI_SYSTEM_CONTEXT_EBC; 469*f334afcfSToomas Soome 470*f334afcfSToomas Soome /// 471*f334afcfSToomas Soome /// ARM processor exception types. 472*f334afcfSToomas Soome /// 473*f334afcfSToomas Soome #define EXCEPT_ARM_RESET 0 474*f334afcfSToomas Soome #define EXCEPT_ARM_UNDEFINED_INSTRUCTION 1 475*f334afcfSToomas Soome #define EXCEPT_ARM_SOFTWARE_INTERRUPT 2 476*f334afcfSToomas Soome #define EXCEPT_ARM_PREFETCH_ABORT 3 477*f334afcfSToomas Soome #define EXCEPT_ARM_DATA_ABORT 4 478*f334afcfSToomas Soome #define EXCEPT_ARM_RESERVED 5 479*f334afcfSToomas Soome #define EXCEPT_ARM_IRQ 6 480*f334afcfSToomas Soome #define EXCEPT_ARM_FIQ 7 481*f334afcfSToomas Soome 482*f334afcfSToomas Soome /// 483*f334afcfSToomas Soome /// For coding convenience, define the maximum valid ARM exception. 484*f334afcfSToomas Soome /// 485*f334afcfSToomas Soome #define MAX_ARM_EXCEPTION EXCEPT_ARM_FIQ 486*f334afcfSToomas Soome 487*f334afcfSToomas Soome /// 488*f334afcfSToomas Soome /// ARM processor context definition. 489*f334afcfSToomas Soome /// 490*f334afcfSToomas Soome typedef struct { 491*f334afcfSToomas Soome UINT32 R0; 492*f334afcfSToomas Soome UINT32 R1; 493*f334afcfSToomas Soome UINT32 R2; 494*f334afcfSToomas Soome UINT32 R3; 495*f334afcfSToomas Soome UINT32 R4; 496*f334afcfSToomas Soome UINT32 R5; 497*f334afcfSToomas Soome UINT32 R6; 498*f334afcfSToomas Soome UINT32 R7; 499*f334afcfSToomas Soome UINT32 R8; 500*f334afcfSToomas Soome UINT32 R9; 501*f334afcfSToomas Soome UINT32 R10; 502*f334afcfSToomas Soome UINT32 R11; 503*f334afcfSToomas Soome UINT32 R12; 504*f334afcfSToomas Soome UINT32 SP; 505*f334afcfSToomas Soome UINT32 LR; 506*f334afcfSToomas Soome UINT32 PC; 507*f334afcfSToomas Soome UINT32 CPSR; 508*f334afcfSToomas Soome UINT32 DFSR; 509*f334afcfSToomas Soome UINT32 DFAR; 510*f334afcfSToomas Soome UINT32 IFSR; 511*f334afcfSToomas Soome UINT32 IFAR; 512*f334afcfSToomas Soome } EFI_SYSTEM_CONTEXT_ARM; 513*f334afcfSToomas Soome 514*f334afcfSToomas Soome /// 515*f334afcfSToomas Soome /// AARCH64 processor exception types. 516*f334afcfSToomas Soome /// 517*f334afcfSToomas Soome #define EXCEPT_AARCH64_SYNCHRONOUS_EXCEPTIONS 0 518*f334afcfSToomas Soome #define EXCEPT_AARCH64_IRQ 1 519*f334afcfSToomas Soome #define EXCEPT_AARCH64_FIQ 2 520*f334afcfSToomas Soome #define EXCEPT_AARCH64_SERROR 3 521*f334afcfSToomas Soome 522*f334afcfSToomas Soome /// 523*f334afcfSToomas Soome /// For coding convenience, define the maximum valid ARM exception. 524*f334afcfSToomas Soome /// 525*f334afcfSToomas Soome #define MAX_AARCH64_EXCEPTION EXCEPT_AARCH64_SERROR 526*f334afcfSToomas Soome 527*f334afcfSToomas Soome typedef struct { 528*f334afcfSToomas Soome // General Purpose Registers 529*f334afcfSToomas Soome UINT64 X0; 530*f334afcfSToomas Soome UINT64 X1; 531*f334afcfSToomas Soome UINT64 X2; 532*f334afcfSToomas Soome UINT64 X3; 533*f334afcfSToomas Soome UINT64 X4; 534*f334afcfSToomas Soome UINT64 X5; 535*f334afcfSToomas Soome UINT64 X6; 536*f334afcfSToomas Soome UINT64 X7; 537*f334afcfSToomas Soome UINT64 X8; 538*f334afcfSToomas Soome UINT64 X9; 539*f334afcfSToomas Soome UINT64 X10; 540*f334afcfSToomas Soome UINT64 X11; 541*f334afcfSToomas Soome UINT64 X12; 542*f334afcfSToomas Soome UINT64 X13; 543*f334afcfSToomas Soome UINT64 X14; 544*f334afcfSToomas Soome UINT64 X15; 545*f334afcfSToomas Soome UINT64 X16; 546*f334afcfSToomas Soome UINT64 X17; 547*f334afcfSToomas Soome UINT64 X18; 548*f334afcfSToomas Soome UINT64 X19; 549*f334afcfSToomas Soome UINT64 X20; 550*f334afcfSToomas Soome UINT64 X21; 551*f334afcfSToomas Soome UINT64 X22; 552*f334afcfSToomas Soome UINT64 X23; 553*f334afcfSToomas Soome UINT64 X24; 554*f334afcfSToomas Soome UINT64 X25; 555*f334afcfSToomas Soome UINT64 X26; 556*f334afcfSToomas Soome UINT64 X27; 557*f334afcfSToomas Soome UINT64 X28; 558*f334afcfSToomas Soome UINT64 FP; // x29 - Frame pointer 559*f334afcfSToomas Soome UINT64 LR; // x30 - Link Register 560*f334afcfSToomas Soome UINT64 SP; // x31 - Stack pointer 561*f334afcfSToomas Soome 562*f334afcfSToomas Soome // FP/SIMD Registers 563*f334afcfSToomas Soome UINT64 V0[2]; 564*f334afcfSToomas Soome UINT64 V1[2]; 565*f334afcfSToomas Soome UINT64 V2[2]; 566*f334afcfSToomas Soome UINT64 V3[2]; 567*f334afcfSToomas Soome UINT64 V4[2]; 568*f334afcfSToomas Soome UINT64 V5[2]; 569*f334afcfSToomas Soome UINT64 V6[2]; 570*f334afcfSToomas Soome UINT64 V7[2]; 571*f334afcfSToomas Soome UINT64 V8[2]; 572*f334afcfSToomas Soome UINT64 V9[2]; 573*f334afcfSToomas Soome UINT64 V10[2]; 574*f334afcfSToomas Soome UINT64 V11[2]; 575*f334afcfSToomas Soome UINT64 V12[2]; 576*f334afcfSToomas Soome UINT64 V13[2]; 577*f334afcfSToomas Soome UINT64 V14[2]; 578*f334afcfSToomas Soome UINT64 V15[2]; 579*f334afcfSToomas Soome UINT64 V16[2]; 580*f334afcfSToomas Soome UINT64 V17[2]; 581*f334afcfSToomas Soome UINT64 V18[2]; 582*f334afcfSToomas Soome UINT64 V19[2]; 583*f334afcfSToomas Soome UINT64 V20[2]; 584*f334afcfSToomas Soome UINT64 V21[2]; 585*f334afcfSToomas Soome UINT64 V22[2]; 586*f334afcfSToomas Soome UINT64 V23[2]; 587*f334afcfSToomas Soome UINT64 V24[2]; 588*f334afcfSToomas Soome UINT64 V25[2]; 589*f334afcfSToomas Soome UINT64 V26[2]; 590*f334afcfSToomas Soome UINT64 V27[2]; 591*f334afcfSToomas Soome UINT64 V28[2]; 592*f334afcfSToomas Soome UINT64 V29[2]; 593*f334afcfSToomas Soome UINT64 V30[2]; 594*f334afcfSToomas Soome UINT64 V31[2]; 595*f334afcfSToomas Soome 596*f334afcfSToomas Soome UINT64 ELR; // Exception Link Register 597*f334afcfSToomas Soome UINT64 SPSR; // Saved Processor Status Register 598*f334afcfSToomas Soome UINT64 FPSR; // Floating Point Status Register 599*f334afcfSToomas Soome UINT64 ESR; // Exception syndrome register 600*f334afcfSToomas Soome UINT64 FAR; // Fault Address Register 601*f334afcfSToomas Soome } EFI_SYSTEM_CONTEXT_AARCH64; 602*f334afcfSToomas Soome 603*f334afcfSToomas Soome /// 604*f334afcfSToomas Soome /// RISC-V processor exception types. 605*f334afcfSToomas Soome /// 606*f334afcfSToomas Soome #define EXCEPT_RISCV_INST_MISALIGNED 0 607*f334afcfSToomas Soome #define EXCEPT_RISCV_INST_ACCESS_FAULT 1 608*f334afcfSToomas Soome #define EXCEPT_RISCV_ILLEGAL_INST 2 609*f334afcfSToomas Soome #define EXCEPT_RISCV_BREAKPOINT 3 610*f334afcfSToomas Soome #define EXCEPT_RISCV_LOAD_ADDRESS_MISALIGNED 4 611*f334afcfSToomas Soome #define EXCEPT_RISCV_LOAD_ACCESS_FAULT 5 612*f334afcfSToomas Soome #define EXCEPT_RISCV_STORE_AMO_ADDRESS_MISALIGNED 6 613*f334afcfSToomas Soome #define EXCEPT_RISCV_STORE_AMO_ACCESS_FAULT 7 614*f334afcfSToomas Soome #define EXCEPT_RISCV_ENV_CALL_FROM_UMODE 8 615*f334afcfSToomas Soome #define EXCEPT_RISCV_ENV_CALL_FROM_SMODE 9 616*f334afcfSToomas Soome #define EXCEPT_RISCV_ENV_CALL_FROM_HMODE 10 617*f334afcfSToomas Soome #define EXCEPT_RISCV_ENV_CALL_FROM_MMODE 11 618*f334afcfSToomas Soome 619*f334afcfSToomas Soome #define EXCEPT_RISCV_SOFTWARE_INT 0x0 620*f334afcfSToomas Soome #define EXCEPT_RISCV_TIMER_INT 0x1 621*f334afcfSToomas Soome 622*f334afcfSToomas Soome typedef struct { 623*f334afcfSToomas Soome UINT64 X0; 624*f334afcfSToomas Soome UINT64 X1; 625*f334afcfSToomas Soome UINT64 X2; 626*f334afcfSToomas Soome UINT64 X3; 627*f334afcfSToomas Soome UINT64 X4; 628*f334afcfSToomas Soome UINT64 X5; 629*f334afcfSToomas Soome UINT64 X6; 630*f334afcfSToomas Soome UINT64 X7; 631*f334afcfSToomas Soome UINT64 X8; 632*f334afcfSToomas Soome UINT64 X9; 633*f334afcfSToomas Soome UINT64 X10; 634*f334afcfSToomas Soome UINT64 X11; 635*f334afcfSToomas Soome UINT64 X12; 636*f334afcfSToomas Soome UINT64 X13; 637*f334afcfSToomas Soome UINT64 X14; 638*f334afcfSToomas Soome UINT64 X15; 639*f334afcfSToomas Soome UINT64 X16; 640*f334afcfSToomas Soome UINT64 X17; 641*f334afcfSToomas Soome UINT64 X18; 642*f334afcfSToomas Soome UINT64 X19; 643*f334afcfSToomas Soome UINT64 X20; 644*f334afcfSToomas Soome UINT64 X21; 645*f334afcfSToomas Soome UINT64 X22; 646*f334afcfSToomas Soome UINT64 X23; 647*f334afcfSToomas Soome UINT64 X24; 648*f334afcfSToomas Soome UINT64 X25; 649*f334afcfSToomas Soome UINT64 X26; 650*f334afcfSToomas Soome UINT64 X27; 651*f334afcfSToomas Soome UINT64 X28; 652*f334afcfSToomas Soome UINT64 X29; 653*f334afcfSToomas Soome UINT64 X30; 654*f334afcfSToomas Soome UINT64 X31; 655*f334afcfSToomas Soome } EFI_SYSTEM_CONTEXT_RISCV64; 656*f334afcfSToomas Soome 657*f334afcfSToomas Soome /// 658*f334afcfSToomas Soome /// Universal EFI_SYSTEM_CONTEXT definition. 659*f334afcfSToomas Soome /// 660*f334afcfSToomas Soome typedef union { 661*f334afcfSToomas Soome EFI_SYSTEM_CONTEXT_EBC *SystemContextEbc; 662*f334afcfSToomas Soome EFI_SYSTEM_CONTEXT_IA32 *SystemContextIa32; 663*f334afcfSToomas Soome EFI_SYSTEM_CONTEXT_X64 *SystemContextX64; 664*f334afcfSToomas Soome EFI_SYSTEM_CONTEXT_IPF *SystemContextIpf; 665*f334afcfSToomas Soome EFI_SYSTEM_CONTEXT_ARM *SystemContextArm; 666*f334afcfSToomas Soome EFI_SYSTEM_CONTEXT_AARCH64 *SystemContextAArch64; 667*f334afcfSToomas Soome EFI_SYSTEM_CONTEXT_RISCV64 *SystemContextRiscV64; 668*f334afcfSToomas Soome } EFI_SYSTEM_CONTEXT; 669*f334afcfSToomas Soome 670*f334afcfSToomas Soome // 671*f334afcfSToomas Soome // DebugSupport callback function prototypes 672*f334afcfSToomas Soome // 673*f334afcfSToomas Soome 674*f334afcfSToomas Soome /** 675*f334afcfSToomas Soome Registers and enables an exception callback function for the specified exception. 676*f334afcfSToomas Soome 677*f334afcfSToomas Soome @param ExceptionType Exception types in EBC, IA-32, x64, or IPF. 678*f334afcfSToomas Soome @param SystemContext Exception content. 679*f334afcfSToomas Soome 680*f334afcfSToomas Soome **/ 681*f334afcfSToomas Soome typedef 682*f334afcfSToomas Soome VOID 683*f334afcfSToomas Soome (EFIAPI *EFI_EXCEPTION_CALLBACK)( 684*f334afcfSToomas Soome IN EFI_EXCEPTION_TYPE ExceptionType, 685*f334afcfSToomas Soome IN OUT EFI_SYSTEM_CONTEXT SystemContext 686*f334afcfSToomas Soome ); 687*f334afcfSToomas Soome 688*f334afcfSToomas Soome /** 689*f334afcfSToomas Soome Registers and enables the on-target debug agent's periodic entry point. 690*f334afcfSToomas Soome 691*f334afcfSToomas Soome @param SystemContext Exception content. 692*f334afcfSToomas Soome 693*f334afcfSToomas Soome **/ 694*f334afcfSToomas Soome typedef 695*f334afcfSToomas Soome VOID 696*f334afcfSToomas Soome (EFIAPI *EFI_PERIODIC_CALLBACK)( 697*f334afcfSToomas Soome IN OUT EFI_SYSTEM_CONTEXT SystemContext 698*f334afcfSToomas Soome ); 699*f334afcfSToomas Soome 700*f334afcfSToomas Soome /// 701*f334afcfSToomas Soome /// Machine type definition 702*f334afcfSToomas Soome /// 703*f334afcfSToomas Soome typedef enum { 704*f334afcfSToomas Soome IsaIa32 = IMAGE_FILE_MACHINE_I386, ///< 0x014C 705*f334afcfSToomas Soome IsaX64 = IMAGE_FILE_MACHINE_X64, ///< 0x8664 706*f334afcfSToomas Soome IsaIpf = IMAGE_FILE_MACHINE_IA64, ///< 0x0200 707*f334afcfSToomas Soome IsaEbc = IMAGE_FILE_MACHINE_EBC, ///< 0x0EBC 708*f334afcfSToomas Soome IsaArm = IMAGE_FILE_MACHINE_ARMTHUMB_MIXED, ///< 0x01c2 709*f334afcfSToomas Soome IsaAArch64 = IMAGE_FILE_MACHINE_ARM64 ///< 0xAA64 710*f334afcfSToomas Soome } EFI_INSTRUCTION_SET_ARCHITECTURE; 711*f334afcfSToomas Soome 712*f334afcfSToomas Soome // 713*f334afcfSToomas Soome // DebugSupport member function definitions 714*f334afcfSToomas Soome // 715*f334afcfSToomas Soome 716*f334afcfSToomas Soome /** 717*f334afcfSToomas Soome Returns the maximum value that may be used for the ProcessorIndex parameter in 718*f334afcfSToomas Soome RegisterPeriodicCallback() and RegisterExceptionCallback(). 719*f334afcfSToomas Soome 720*f334afcfSToomas Soome @param This A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance. 721*f334afcfSToomas Soome @param MaxProcessorIndex Pointer to a caller-allocated UINTN in which the maximum supported 722*f334afcfSToomas Soome processor index is returned. 723*f334afcfSToomas Soome 724*f334afcfSToomas Soome @retval EFI_SUCCESS The function completed successfully. 725*f334afcfSToomas Soome 726*f334afcfSToomas Soome **/ 727*f334afcfSToomas Soome typedef 728*f334afcfSToomas Soome EFI_STATUS 729*f334afcfSToomas Soome (EFIAPI *EFI_GET_MAXIMUM_PROCESSOR_INDEX)( 730*f334afcfSToomas Soome IN EFI_DEBUG_SUPPORT_PROTOCOL *This, 731*f334afcfSToomas Soome OUT UINTN *MaxProcessorIndex 732*f334afcfSToomas Soome ); 733*f334afcfSToomas Soome 734*f334afcfSToomas Soome /** 735*f334afcfSToomas Soome Registers a function to be called back periodically in interrupt context. 736*f334afcfSToomas Soome 737*f334afcfSToomas Soome @param This A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance. 738*f334afcfSToomas Soome @param ProcessorIndex Specifies which processor the callback function applies to. 739*f334afcfSToomas Soome @param PeriodicCallback A pointer to a function of type PERIODIC_CALLBACK that is the main 740*f334afcfSToomas Soome periodic entry point of the debug agent. 741*f334afcfSToomas Soome 742*f334afcfSToomas Soome @retval EFI_SUCCESS The function completed successfully. 743*f334afcfSToomas Soome @retval EFI_ALREADY_STARTED Non-NULL PeriodicCallback parameter when a callback 744*f334afcfSToomas Soome function was previously registered. 745*f334afcfSToomas Soome @retval EFI_OUT_OF_RESOURCES System has insufficient memory resources to register new callback 746*f334afcfSToomas Soome function. 747*f334afcfSToomas Soome 748*f334afcfSToomas Soome **/ 749*f334afcfSToomas Soome typedef 750*f334afcfSToomas Soome EFI_STATUS 751*f334afcfSToomas Soome (EFIAPI *EFI_REGISTER_PERIODIC_CALLBACK)( 752*f334afcfSToomas Soome IN EFI_DEBUG_SUPPORT_PROTOCOL *This, 753*f334afcfSToomas Soome IN UINTN ProcessorIndex, 754*f334afcfSToomas Soome IN EFI_PERIODIC_CALLBACK PeriodicCallback 755*f334afcfSToomas Soome ); 756*f334afcfSToomas Soome 757*f334afcfSToomas Soome /** 758*f334afcfSToomas Soome Registers a function to be called when a given processor exception occurs. 759*f334afcfSToomas Soome 760*f334afcfSToomas Soome @param This A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance. 761*f334afcfSToomas Soome @param ProcessorIndex Specifies which processor the callback function applies to. 762*f334afcfSToomas Soome @param ExceptionCallback A pointer to a function of type EXCEPTION_CALLBACK that is called 763*f334afcfSToomas Soome when the processor exception specified by ExceptionType occurs. 764*f334afcfSToomas Soome @param ExceptionType Specifies which processor exception to hook. 765*f334afcfSToomas Soome 766*f334afcfSToomas Soome @retval EFI_SUCCESS The function completed successfully. 767*f334afcfSToomas Soome @retval EFI_ALREADY_STARTED Non-NULL PeriodicCallback parameter when a callback 768*f334afcfSToomas Soome function was previously registered. 769*f334afcfSToomas Soome @retval EFI_OUT_OF_RESOURCES System has insufficient memory resources to register new callback 770*f334afcfSToomas Soome function. 771*f334afcfSToomas Soome 772*f334afcfSToomas Soome **/ 773*f334afcfSToomas Soome typedef 774*f334afcfSToomas Soome EFI_STATUS 775*f334afcfSToomas Soome (EFIAPI *EFI_REGISTER_EXCEPTION_CALLBACK)( 776*f334afcfSToomas Soome IN EFI_DEBUG_SUPPORT_PROTOCOL *This, 777*f334afcfSToomas Soome IN UINTN ProcessorIndex, 778*f334afcfSToomas Soome IN EFI_EXCEPTION_CALLBACK ExceptionCallback, 779*f334afcfSToomas Soome IN EFI_EXCEPTION_TYPE ExceptionType 780*f334afcfSToomas Soome ); 781*f334afcfSToomas Soome 782*f334afcfSToomas Soome /** 783*f334afcfSToomas Soome Invalidates processor instruction cache for a memory range. Subsequent execution in this range 784*f334afcfSToomas Soome causes a fresh memory fetch to retrieve code to be executed. 785*f334afcfSToomas Soome 786*f334afcfSToomas Soome @param This A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance. 787*f334afcfSToomas Soome @param ProcessorIndex Specifies which processor's instruction cache is to be invalidated. 788*f334afcfSToomas Soome @param Start Specifies the physical base of the memory range to be invalidated. 789*f334afcfSToomas Soome @param Length Specifies the minimum number of bytes in the processor's instruction 790*f334afcfSToomas Soome cache to invalidate. 791*f334afcfSToomas Soome 792*f334afcfSToomas Soome @retval EFI_SUCCESS The function completed successfully. 793*f334afcfSToomas Soome 794*f334afcfSToomas Soome **/ 795*f334afcfSToomas Soome typedef 796*f334afcfSToomas Soome EFI_STATUS 797*f334afcfSToomas Soome (EFIAPI *EFI_INVALIDATE_INSTRUCTION_CACHE)( 798*f334afcfSToomas Soome IN EFI_DEBUG_SUPPORT_PROTOCOL *This, 799*f334afcfSToomas Soome IN UINTN ProcessorIndex, 800*f334afcfSToomas Soome IN VOID *Start, 801*f334afcfSToomas Soome IN UINT64 Length 802*f334afcfSToomas Soome ); 803*f334afcfSToomas Soome 804*f334afcfSToomas Soome /// 805*f334afcfSToomas Soome /// This protocol provides the services to allow the debug agent to register 806*f334afcfSToomas Soome /// callback functions that are called either periodically or when specific 807*f334afcfSToomas Soome /// processor exceptions occur. 808*f334afcfSToomas Soome /// 809*f334afcfSToomas Soome struct _EFI_DEBUG_SUPPORT_PROTOCOL { 810*f334afcfSToomas Soome /// 811*f334afcfSToomas Soome /// Declares the processor architecture for this instance of the EFI Debug Support protocol. 812*f334afcfSToomas Soome /// 813*f334afcfSToomas Soome EFI_INSTRUCTION_SET_ARCHITECTURE Isa; 814*f334afcfSToomas Soome EFI_GET_MAXIMUM_PROCESSOR_INDEX GetMaximumProcessorIndex; 815*f334afcfSToomas Soome EFI_REGISTER_PERIODIC_CALLBACK RegisterPeriodicCallback; 816*f334afcfSToomas Soome EFI_REGISTER_EXCEPTION_CALLBACK RegisterExceptionCallback; 817*f334afcfSToomas Soome EFI_INVALIDATE_INSTRUCTION_CACHE InvalidateInstructionCache; 818*f334afcfSToomas Soome }; 819*f334afcfSToomas Soome 820*f334afcfSToomas Soome extern EFI_GUID gEfiDebugSupportProtocolGuid; 821*f334afcfSToomas Soome 822*f334afcfSToomas Soome #endif 823