123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620 |
- #ifndef _EFI_DEBUG_H
- #define _EFI_DEBUG_H
- /*++
- Copyright (c) 1998 Intel Corporation
- Module Name:
- efidebug.h
- Abstract:
- EFI library debug functions
- Revision History
- --*/
- extern UINTN EFIDebug;
- #if EFI_DEBUG
- #define DBGASSERT(a) DbgAssert(__FILE__, __LINE__, #a)
- #define DEBUG(a) DbgPrint a
-
- #else
- #define DBGASSERT(a)
- #define DEBUG(a)
-
- #endif
- #if EFI_DEBUG_CLEAR_MEMORY
- #define DBGSETMEM(a,l) SetMem(a,l,(CHAR8)BAD_POINTER)
- #else
- #define DBGSETMEM(a,l)
- #endif
- #define D_INIT 0x00000001 // Initialization style messages
- #define D_WARN 0x00000002 // Warnings
- #define D_LOAD 0x00000004 // Load events
- #define D_FS 0x00000008 // EFI File system
- #define D_POOL 0x00000010 // Alloc & Free's
- #define D_PAGE 0x00000020 // Alloc & Free's
- #define D_INFO 0x00000040 // Verbose
- #define D_VAR 0x00000100 // Variable
- #define D_PARSE 0x00000200 // Command parsing
- #define D_BM 0x00000400 // Boot manager
- #define D_BLKIO 0x00001000 // BlkIo Driver
- #define D_BLKIO_ULTRA 0x00002000 // BlkIo Driver
- #define D_NET 0x00004000 // SNI Driver
- #define D_NET_ULTRA 0x00008000 // SNI Driver
- #define D_TXTIN 0x00010000 // Simple Input Driver
- #define D_TXTOUT 0x00020000 // Simple Text Output Driver
- #define D_ERROR_ATA 0x00040000 // ATA error messages
- #define D_ERROR 0x80000000 // Error
- #define D_RESERVED 0x7fffC880 // Bits not reserved above
- //
- // Current Debug level of the system, value of EFIDebug
- //
- //#define EFI_DBUG_MASK (D_ERROR | D_WARN | D_LOAD | D_BLKIO | D_INIT)
- #define EFI_DBUG_MASK (D_ERROR)
- //
- //
- //
- #if EFI_DEBUG
- #define ASSERT(a) if(!(a)) DBGASSERT(a)
- #define ASSERT_LOCKED(l) if(!(l)->Lock) DBGASSERT(l not locked)
- #define ASSERT_STRUCT(p,t) DBGASSERT(t not structure), p
- #else
- #define ASSERT(a)
- #define ASSERT_LOCKED(l)
- #define ASSERT_STRUCT(p,t)
- #endif
- //
- // Prototypes
- //
- INTN
- DbgAssert (
- CONST CHAR8 *file,
- INTN lineno,
- CONST CHAR8 *string
- );
- INTN
- DbgPrint (
- INTN mask,
- CONST CHAR8 *format,
- ...
- );
- //
- // Instruction Set Architectures definitions for debuggers
- //
- typedef INTN EFI_EXCEPTION_TYPE;
- // IA32
- #define EXCEPT_IA32_DIVIDE_ERROR 0
- #define EXCEPT_IA32_DEBUG 1
- #define EXCEPT_IA32_NMI 2
- #define EXCEPT_IA32_BREAKPOINT 3
- #define EXCEPT_IA32_OVERFLOW 4
- #define EXCEPT_IA32_BOUND 5
- #define EXCEPT_IA32_INVALID_OPCODE 6
- #define EXCEPT_IA32_DOUBLE_FAULT 8
- #define EXCEPT_IA32_INVALID_TSS 10
- #define EXCEPT_IA32_SEG_NOT_PRESENT 11
- #define EXCEPT_IA32_STACK_FAULT 12
- #define EXCEPT_IA32_GP_FAULT 13
- #define EXCEPT_IA32_PAGE_FAULT 14
- #define EXCEPT_IA32_FP_ERROR 16
- #define EXCEPT_IA32_ALIGNMENT_CHECK 17
- #define EXCEPT_IA32_MACHINE_CHECK 18
- #define EXCEPT_IA32_SIMD 19
- typedef struct {
- UINT16 Fcw;
- UINT16 Fsw;
- UINT16 Ftw;
- UINT16 Opcode;
- UINT32 Eip;
- UINT16 Cs;
- UINT16 Reserved1;
- UINT32 DataOffset;
- UINT16 Ds;
- UINT8 Reserved2[10];
- UINT8 St0Mm0[10], Reserved3[6];
- UINT8 St1Mm1[10], Reserved4[6];
- UINT8 St2Mm2[10], Reserved5[6];
- UINT8 St3Mm3[10], Reserved6[6];
- UINT8 St4Mm4[10], Reserved7[6];
- UINT8 St5Mm5[10], Reserved8[6];
- UINT8 St6Mm6[10], Reserved9[6];
- UINT8 St7Mm7[10], Reserved10[6];
- UINT8 Xmm0[16];
- UINT8 Xmm1[16];
- UINT8 Xmm2[16];
- UINT8 Xmm3[16];
- UINT8 Xmm4[16];
- UINT8 Xmm5[16];
- UINT8 Xmm6[16];
- UINT8 Xmm7[16];
- UINT8 Reserved11[14 * 16];
- } EFI_FX_SAVE_STATE_IA32;
- typedef struct {
- UINT32 ExceptionData;
- EFI_FX_SAVE_STATE_IA32 FxSaveState;
- UINT32 Dr0;
- UINT32 Dr1;
- UINT32 Dr2;
- UINT32 Dr3;
- UINT32 Dr6;
- UINT32 Dr7;
- UINT32 Cr0;
- UINT32 Cr1;
- UINT32 Cr2;
- UINT32 Cr3;
- UINT32 Cr4;
- UINT32 Eflags;
- UINT32 Ldtr;
- UINT32 Tr;
- UINT32 Gdtr[2];
- UINT32 Idtr[2];
- UINT32 Eip;
- UINT32 Gs;
- UINT32 Fs;
- UINT32 Es;
- UINT32 Ds;
- UINT32 Cs;
- UINT32 Ss;
- UINT32 Edi;
- UINT32 Esi;
- UINT32 Ebp;
- UINT32 Esp;
- UINT32 Ebx;
- UINT32 Edx;
- UINT32 Ecx;
- UINT32 Eax;
- } EFI_SYSTEM_CONTEXT_IA32;
- // X64
- #define EXCEPT_X64_DIVIDE_ERROR 0
- #define EXCEPT_X64_DEBUG 1
- #define EXCEPT_X64_NMI 2
- #define EXCEPT_X64_BREAKPOINT 3
- #define EXCEPT_X64_OVERFLOW 4
- #define EXCEPT_X64_BOUND 5
- #define EXCEPT_X64_INVALID_OPCODE 6
- #define EXCEPT_X64_DOUBLE_FAULT 8
- #define EXCEPT_X64_INVALID_TSS 10
- #define EXCEPT_X64_SEG_NOT_PRESENT 11
- #define EXCEPT_X64_STACK_FAULT 12
- #define EXCEPT_X64_GP_FAULT 13
- #define EXCEPT_X64_PAGE_FAULT 14
- #define EXCEPT_X64_FP_ERROR 16
- #define EXCEPT_X64_ALIGNMENT_CHECK 17
- #define EXCEPT_X64_MACHINE_CHECK 18
- #define EXCEPT_X64_SIMD 19
- typedef struct {
- UINT16 Fcw;
- UINT16 Fsw;
- UINT16 Ftw;
- UINT16 Opcode;
- UINT64 Rip;
- UINT64 DataOffset;
- UINT8 Reserved1[8];
- UINT8 St0Mm0[10], Reserved2[6];
- UINT8 St1Mm1[10], Reserved3[6];
- UINT8 St2Mm2[10], Reserved4[6];
- UINT8 St3Mm3[10], Reserved5[6];
- UINT8 St4Mm4[10], Reserved6[6];
- UINT8 St5Mm5[10], Reserved7[6];
- UINT8 St6Mm6[10], Reserved8[6];
- UINT8 St7Mm7[10], Reserved9[6];
- UINT8 Xmm0[16];
- UINT8 Xmm1[16];
- UINT8 Xmm2[16];
- UINT8 Xmm3[16];
- UINT8 Xmm4[16];
- UINT8 Xmm5[16];
- UINT8 Xmm6[16];
- UINT8 Xmm7[16];
- UINT8 Reserved11[14 * 16];
- } EFI_FX_SAVE_STATE_X64;
- typedef struct {
- UINT64 ExceptionData;
- EFI_FX_SAVE_STATE_X64 FxSaveState;
- UINT64 Dr0;
- UINT64 Dr1;
- UINT64 Dr2;
- UINT64 Dr3;
- UINT64 Dr6;
- UINT64 Dr7;
- UINT64 Cr0;
- UINT64 Cr1;
- UINT64 Cr2;
- UINT64 Cr3;
- UINT64 Cr4;
- UINT64 Cr8;
- UINT64 Rflags;
- UINT64 Ldtr;
- UINT64 Tr;
- UINT64 Gdtr[2];
- UINT64 Idtr[2];
- UINT64 Rip;
- UINT64 Gs;
- UINT64 Fs;
- UINT64 Es;
- UINT64 Ds;
- UINT64 Cs;
- UINT64 Ss;
- UINT64 Rdi;
- UINT64 Rsi;
- UINT64 Rbp;
- UINT64 Rsp;
- UINT64 Rbx;
- UINT64 Rdx;
- UINT64 Rcx;
- UINT64 Rax;
- UINT64 R8;
- UINT64 R9;
- UINT64 R10;
- UINT64 R11;
- UINT64 R12;
- UINT64 R13;
- UINT64 R14;
- UINT64 R15;
- } EFI_SYSTEM_CONTEXT_X64;
- /// IA64
- #define EXCEPT_IPF_VHTP_TRANSLATION 0
- #define EXCEPT_IPF_INSTRUCTION_TLB 1
- #define EXCEPT_IPF_DATA_TLB 2
- #define EXCEPT_IPF_ALT_INSTRUCTION_TLB 3
- #define EXCEPT_IPF_ALT_DATA_TLB 4
- #define EXCEPT_IPF_DATA_NESTED_TLB 5
- #define EXCEPT_IPF_INSTRUCTION_KEY_MISSED 6
- #define EXCEPT_IPF_DATA_KEY_MISSED 7
- #define EXCEPT_IPF_DIRTY_BIT 8
- #define EXCEPT_IPF_INSTRUCTION_ACCESS_BIT 9
- #define EXCEPT_IPF_DATA_ACCESS_BIT 10
- #define EXCEPT_IPF_BREAKPOINT 11
- #define EXCEPT_IPF_EXTERNAL_INTERRUPT 12
- #define EXCEPT_IPF_PAGE_NOT_PRESENT 20
- #define EXCEPT_IPF_KEY_PERMISSION 21
- #define EXCEPT_IPF_INSTRUCTION_ACCESS_RIGHTS 22
- #define EXCEPT_IPF_DATA_ACCESS_RIGHTS 23
- #define EXCEPT_IPF_GENERAL_EXCEPTION 24
- #define EXCEPT_IPF_DISABLED_FP_REGISTER 25
- #define EXCEPT_IPF_NAT_CONSUMPTION 26
- #define EXCEPT_IPF_SPECULATION 27
- #define EXCEPT_IPF_DEBUG 29
- #define EXCEPT_IPF_UNALIGNED_REFERENCE 30
- #define EXCEPT_IPF_UNSUPPORTED_DATA_REFERENCE 31
- #define EXCEPT_IPF_FP_FAULT 32
- #define EXCEPT_IPF_FP_TRAP 33
- #define EXCEPT_IPF_LOWER_PRIVILEGE_TRANSFER_TRAP 34
- #define EXCEPT_IPF_TAKEN_BRANCH 35
- #define EXCEPT_IPF_SINGLE_STEP 36
- #define EXCEPT_IPF_IA32_EXCEPTION 45
- #define EXCEPT_IPF_IA32_INTERCEPT 46
- #define EXCEPT_IPF_IA32_INTERRUPT 47
- typedef struct {
- UINT64 Reserved;
- UINT64 R1;
- UINT64 R2;
- UINT64 R3;
- UINT64 R4;
- UINT64 R5;
- UINT64 R6;
- UINT64 R7;
- UINT64 R8;
- UINT64 R9;
- UINT64 R10;
- UINT64 R11;
- UINT64 R12;
- UINT64 R13;
- UINT64 R14;
- UINT64 R15;
- UINT64 R16;
- UINT64 R17;
- UINT64 R18;
- UINT64 R19;
- UINT64 R20;
- UINT64 R21;
- UINT64 R22;
- UINT64 R23;
- UINT64 R24;
- UINT64 R25;
- UINT64 R26;
- UINT64 R27;
- UINT64 R28;
- UINT64 R29;
- UINT64 R30;
- UINT64 R31;
- UINT64 F2[2];
- UINT64 F3[2];
- UINT64 F4[2];
- UINT64 F5[2];
- UINT64 F6[2];
- UINT64 F7[2];
- UINT64 F8[2];
- UINT64 F9[2];
- UINT64 F10[2];
- UINT64 F11[2];
- UINT64 F12[2];
- UINT64 F13[2];
- UINT64 F14[2];
- UINT64 F15[2];
- UINT64 F16[2];
- UINT64 F17[2];
- UINT64 F18[2];
- UINT64 F19[2];
- UINT64 F20[2];
- UINT64 F21[2];
- UINT64 F22[2];
- UINT64 F23[2];
- UINT64 F24[2];
- UINT64 F25[2];
- UINT64 F26[2];
- UINT64 F27[2];
- UINT64 F28[2];
- UINT64 F29[2];
- UINT64 F30[2];
- UINT64 F31[2];
- UINT64 Pr;
- UINT64 B0;
- UINT64 B1;
- UINT64 B2;
- UINT64 B3;
- UINT64 B4;
- UINT64 B5;
- UINT64 B6;
- UINT64 B7;
- UINT64 ArRsc;
- UINT64 ArBsp;
- UINT64 ArBspstore;
- UINT64 ArRnat;
- UINT64 ArFcr;
- UINT64 ArEflag;
- UINT64 ArCsd;
- UINT64 ArSsd;
- UINT64 ArCflg;
- UINT64 ArFsr;
- UINT64 ArFir;
- UINT64 ArFdr;
- UINT64 ArCcv;
- UINT64 ArUnat;
- UINT64 ArFpsr;
- UINT64 ArPfs;
- UINT64 ArLc;
- UINT64 ArEc;
- UINT64 CrDcr;
- UINT64 CrItm;
- UINT64 CrIva;
- UINT64 CrPta;
- UINT64 CrIpsr;
- UINT64 CrIsr;
- UINT64 CrIip;
- UINT64 CrIfa;
- UINT64 CrItir;
- UINT64 CrIipa;
- UINT64 CrIfs;
- UINT64 CrIim;
- UINT64 CrIha;
- UINT64 Dbr0;
- UINT64 Dbr1;
- UINT64 Dbr2;
- UINT64 Dbr3;
- UINT64 Dbr4;
- UINT64 Dbr5;
- UINT64 Dbr6;
- UINT64 Dbr7;
- UINT64 Ibr0;
- UINT64 Ibr1;
- UINT64 Ibr2;
- UINT64 Ibr3;
- UINT64 Ibr4;
- UINT64 Ibr5;
- UINT64 Ibr6;
- UINT64 Ibr7;
- UINT64 IntNat;
- } EFI_SYSTEM_CONTEXT_IPF;
- // EBC
- #define EXCEPT_EBC_UNDEFINED 0
- #define EXCEPT_EBC_DIVIDE_ERROR 1
- #define EXCEPT_EBC_DEBUG 2
- #define EXCEPT_EBC_BREAKPOINT 3
- #define EXCEPT_EBC_OVERFLOW 4
- #define EXCEPT_EBC_INVALID_OPCODE 5
- #define EXCEPT_EBC_STACK_FAULT 6
- #define EXCEPT_EBC_ALIGNMENT_CHECK 7
- #define EXCEPT_EBC_INSTRUCTION_ENCODING 8
- #define EXCEPT_EBC_BAD_BREAK 9
- #define EXCEPT_EBC_STEP 10
- #define MAX_EBC_EXCEPTION EXCEPT_EBC_STEP
- typedef struct {
- UINT64 R0;
- UINT64 R1;
- UINT64 R2;
- UINT64 R3;
- UINT64 R4;
- UINT64 R5;
- UINT64 R6;
- UINT64 R7;
- UINT64 Flags;
- UINT64 ControlFlags;
- UINT64 Ip;
- } EFI_SYSTEM_CONTEXT_EBC;
- // ARM
- #define EXCEPT_ARM_RESET 0
- #define EXCEPT_ARM_UNDEFINED_INSTRUCTION 1
- #define EXCEPT_ARM_SOFTWARE_INTERRUPT 2
- #define EXCEPT_ARM_PREFETCH_ABORT 3
- #define EXCEPT_ARM_DATA_ABORT 4
- #define EXCEPT_ARM_RESERVED 5
- #define EXCEPT_ARM_IRQ 6
- #define EXCEPT_ARM_FIQ 7
- #define MAX_ARM_EXCEPTION EXCEPT_ARM_FIQ
- typedef struct {
- UINT32 R0;
- UINT32 R1;
- UINT32 R2;
- UINT32 R3;
- UINT32 R4;
- UINT32 R5;
- UINT32 R6;
- UINT32 R7;
- UINT32 R8;
- UINT32 R9;
- UINT32 R10;
- UINT32 R11;
- UINT32 R12;
- UINT32 SP;
- UINT32 LR;
- UINT32 PC;
- UINT32 CPSR;
- UINT32 DFSR;
- UINT32 DFAR;
- UINT32 IFSR;
- UINT32 IFAR;
- } EFI_SYSTEM_CONTEXT_ARM;
- typedef union {
- EFI_SYSTEM_CONTEXT_EBC *SystemContextEbc;
- EFI_SYSTEM_CONTEXT_IA32 *SystemContextIa32;
- EFI_SYSTEM_CONTEXT_X64 *SystemContextX64;
- EFI_SYSTEM_CONTEXT_IPF *SystemContextIpf;
- EFI_SYSTEM_CONTEXT_ARM *SystemContextArm;
- } EFI_SYSTEM_CONTEXT;
- typedef
- VOID
- (EFIAPI *EFI_EXCEPTION_CALLBACK)(
- IN EFI_EXCEPTION_TYPE ExceptionType,
- IN OUT EFI_SYSTEM_CONTEXT SystemContext);
- typedef
- VOID
- (EFIAPI *EFI_PERIODIC_CALLBACK)(
- IN OUT EFI_SYSTEM_CONTEXT SystemContext);
- typedef enum {
- IsaIa32 = EFI_IMAGE_MACHINE_IA32,
- IsaX64 = EFI_IMAGE_MACHINE_X64,
- IsaIpf = EFI_IMAGE_MACHINE_IA64,
- IsaEbc = EFI_IMAGE_MACHINE_EBC,
- IsaArm = EFI_IMAGE_MACHINE_ARMTHUMB_MIXED,
- // IsaArm64 = EFI_IMAGE_MACHINE_AARCH64
- } EFI_INSTRUCTION_SET_ARCHITECTURE;
- //
- // DEBUG_IMAGE_INFO
- //
- #define EFI_DEBUG_IMAGE_INFO_TABLE_GUID \
- { 0x49152e77, 0x1ada, 0x4764, {0xb7, 0xa2, 0x7a, 0xfe, 0xfe, 0xd9, 0x5e, 0x8b} }
- #define EFI_DEBUG_IMAGE_INFO_UPDATE_IN_PROGRESS 0x01
- #define EFI_DEBUG_IMAGE_INFO_TABLE_MODIFIED 0x02
- #define EFI_DEBUG_IMAGE_INFO_INITIAL_SIZE (EFI_PAGE_SIZE / sizeof (UINTN))
- #define EFI_DEBUG_IMAGE_INFO_TYPE_NORMAL 0x01
- typedef struct {
- UINT64 Signature;
- EFI_PHYSICAL_ADDRESS EfiSystemTableBase;
- UINT32 Crc32;
- } EFI_SYSTEM_TABLE_POINTER;
- typedef struct {
- UINT32 ImageInfoType;
- EFI_LOADED_IMAGE_PROTOCOL *LoadedImageProtocolInstance;
- EFI_HANDLE *ImageHandle;
- } EFI_DEBUG_IMAGE_INFO_NORMAL;
- typedef union {
- UINT32 *ImageInfoType;
- EFI_DEBUG_IMAGE_INFO_NORMAL *NormalImage;
- } EFI_DEBUG_IMAGE_INFO;
- typedef struct {
- volatile UINT32 UpdateStatus;
- UINT32 TableSize;
- EFI_DEBUG_IMAGE_INFO *EfiDebugImageInfoTable;
- } EFI_DEBUG_IMAGE_INFO_TABLE_HEADER;
- //
- // EFI_DEBUGGER_PROTOCOL
- //
- #define EFI_DEBUG_SUPPORT_PROTOCOL_GUID \
- { 0x2755590c, 0x6f3c, 0x42fa, {0x9e, 0xa4, 0xa3, 0xba, 0x54, 0x3c, 0xda, 0x25} }
- INTERFACE_DECL(_EFI_DEBUG_SUPPORT_PROTOCOL);
- typedef
- EFI_STATUS
- (EFIAPI *EFI_GET_MAXIMUM_PROCESSOR_INDEX)(
- IN struct _EFI_DEBUG_SUPPORT_PROTOCOL *This,
- OUT UINTN *MaxProcessorIndex);
- typedef
- EFI_STATUS
- (EFIAPI *EFI_REGISTER_PERIODIC_CALLBACK)(
- IN struct _EFI_DEBUG_SUPPORT_PROTOCOL *This,
- IN UINTN ProcessorIndex,
- IN EFI_PERIODIC_CALLBACK PeriodicCallback);
- typedef
- EFI_STATUS
- (EFIAPI *EFI_REGISTER_EXCEPTION_CALLBACK)(
- IN struct _EFI_DEBUG_SUPPORT_PROTOCOL *This,
- IN UINTN ProcessorIndex,
- IN EFI_EXCEPTION_CALLBACK ExceptionCallback,
- IN EFI_EXCEPTION_TYPE ExceptionType);
- typedef
- EFI_STATUS
- (EFIAPI *EFI_INVALIDATE_INSTRUCTION_CACHE)(
- IN struct _EFI_DEBUG_SUPPORT_PROTOCOL *This,
- IN UINTN ProcessorIndex,
- IN VOID *Start,
- IN UINT64 Length);
- typedef struct _EFI_DEBUG_SUPPORT_PROTOCOL {
- EFI_INSTRUCTION_SET_ARCHITECTURE Isa;
- EFI_GET_MAXIMUM_PROCESSOR_INDEX GetMaximumProcessorIndex;
- EFI_REGISTER_PERIODIC_CALLBACK RegisterPeriodicCallback;
- EFI_REGISTER_EXCEPTION_CALLBACK RegisterExceptionCallback;
- EFI_INVALIDATE_INSTRUCTION_CACHE InvalidateInstructionCache;
- } EFI_DEBUG_SUPPORT_PROTOCOL;
- #endif
|