176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** @file 276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman DebugSupport protocol and supporting definitions as defined in the UEFI2.0 376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman specification. 476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman The DebugSupport protocol is used by source level debuggers to abstract the 676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman processor and handle context save and restore operations. 776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Copyright (c) 2006 - 2008, Intel Corporation 976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman All rights reserved. This program and the accompanying materials 1076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman are licensed and made available under the terms and conditions of the BSD License 1176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman which accompanies this distribution. The full text of the license may be found at 1276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman http://opensource.org/licenses/bsd-license.php 1376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 1576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 1676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman**/ 1876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 1976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#ifndef __DEBUG_SUPPORT_H__ 2076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define __DEBUG_SUPPORT_H__ 2176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <gpxe/efi/ProcessorBind.h> 2376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#include <gpxe/efi/IndustryStandard/PeImage.h> 2476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct _EFI_DEBUG_SUPPORT_PROTOCOL EFI_DEBUG_SUPPORT_PROTOCOL; 2676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 2776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 2876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Debug Support protocol {2755590C-6F3C-42FA-9EA4-A3BA543CDA25} 2976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 3076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EFI_DEBUG_SUPPORT_PROTOCOL_GUID \ 3176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman { \ 3276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 0x2755590C, 0x6F3C, 0x42FA, {0x9E, 0xA4, 0xA3, 0xBA, 0x54, 0x3C, 0xDA, 0x25 } \ 3376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman } 3476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 3576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 3676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Debug Support definitions 3776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 3876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef INTN EFI_EXCEPTION_TYPE; 3976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 4076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 4176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// IA-32 processor exception types 4276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 4376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IA32_DIVIDE_ERROR 0 4476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IA32_DEBUG 1 4576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IA32_NMI 2 4676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IA32_BREAKPOINT 3 4776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IA32_OVERFLOW 4 4876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IA32_BOUND 5 4976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IA32_INVALID_OPCODE 6 5076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IA32_DOUBLE_FAULT 8 5176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IA32_INVALID_TSS 10 5276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IA32_SEG_NOT_PRESENT 11 5376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IA32_STACK_FAULT 12 5476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IA32_GP_FAULT 13 5576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IA32_PAGE_FAULT 14 5676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IA32_FP_ERROR 16 5776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IA32_ALIGNMENT_CHECK 17 5876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IA32_MACHINE_CHECK 18 5976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IA32_SIMD 19 6076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 6176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 6276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// IA-32 processor context definition 6376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 6476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 6576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// FXSAVE_STATE 6676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// FP / MMX / XMM registers (see fxrstor instruction definition) 6776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 6876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct { 6976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 Fcw; 7076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 Fsw; 7176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 Ftw; 7276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 Opcode; 7376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Eip; 7476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 Cs; 7576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 Reserved1; 7676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 DataOffset; 7776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 Ds; 7876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Reserved2[10]; 7976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 St0Mm0[10], Reserved3[6]; 8076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 St1Mm1[10], Reserved4[6]; 8176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 St2Mm2[10], Reserved5[6]; 8276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 St3Mm3[10], Reserved6[6]; 8376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 St4Mm4[10], Reserved7[6]; 8476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 St5Mm5[10], Reserved8[6]; 8576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 St6Mm6[10], Reserved9[6]; 8676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 St7Mm7[10], Reserved10[6]; 8776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Xmm0[16]; 8876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Xmm1[16]; 8976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Xmm2[16]; 9076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Xmm3[16]; 9176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Xmm4[16]; 9276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Xmm5[16]; 9376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Xmm6[16]; 9476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Xmm7[16]; 9576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Reserved11[14 * 16]; 9676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_FX_SAVE_STATE_IA32; 9776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 9876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct { 9976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 ExceptionData; 10076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_FX_SAVE_STATE_IA32 FxSaveState; 10176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Dr0; 10276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Dr1; 10376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Dr2; 10476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Dr3; 10576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Dr6; 10676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Dr7; 10776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Cr0; 10876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Cr1; /* Reserved */ 10976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Cr2; 11076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Cr3; 11176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Cr4; 11276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Eflags; 11376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Ldtr; 11476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Tr; 11576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Gdtr[2]; 11676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Idtr[2]; 11776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Eip; 11876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Gs; 11976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Fs; 12076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Es; 12176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Ds; 12276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Cs; 12376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Ss; 12476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Edi; 12576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Esi; 12676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Ebp; 12776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Esp; 12876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Ebx; 12976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Edx; 13076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Ecx; 13176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT32 Eax; 13276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_SYSTEM_CONTEXT_IA32; 13376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 13476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 13576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// X64 processor exception types 13676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 13776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_X64_DIVIDE_ERROR 0 13876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_X64_DEBUG 1 13976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_X64_NMI 2 14076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_X64_BREAKPOINT 3 14176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_X64_OVERFLOW 4 14276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_X64_BOUND 5 14376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_X64_INVALID_OPCODE 6 14476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_X64_DOUBLE_FAULT 8 14576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_X64_INVALID_TSS 10 14676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_X64_SEG_NOT_PRESENT 11 14776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_X64_STACK_FAULT 12 14876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_X64_GP_FAULT 13 14976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_X64_PAGE_FAULT 14 15076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_X64_FP_ERROR 16 15176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_X64_ALIGNMENT_CHECK 17 15276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_X64_MACHINE_CHECK 18 15376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_X64_SIMD 19 15476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 15576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 15676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// X64 processor context definition 15776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 15876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// FXSAVE_STATE 15976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// FP / MMX / XMM registers (see fxrstor instruction definition) 16076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 16176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct { 16276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 Fcw; 16376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 Fsw; 16476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 Ftw; 16576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT16 Opcode; 16676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Rip; 16776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 DataOffset; 16876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Reserved1[8]; 16976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 St0Mm0[10], Reserved2[6]; 17076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 St1Mm1[10], Reserved3[6]; 17176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 St2Mm2[10], Reserved4[6]; 17276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 St3Mm3[10], Reserved5[6]; 17376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 St4Mm4[10], Reserved6[6]; 17476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 St5Mm5[10], Reserved7[6]; 17576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 St6Mm6[10], Reserved8[6]; 17676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 St7Mm7[10], Reserved9[6]; 17776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Xmm0[16]; 17876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Xmm1[16]; 17976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Xmm2[16]; 18076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Xmm3[16]; 18176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Xmm4[16]; 18276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Xmm5[16]; 18376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Xmm6[16]; 18476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Xmm7[16]; 18576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // 18676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // NOTE: UEFI 2.0 spec definition as follows. 18776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // 18876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT8 Reserved11[14 * 16]; 18976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_FX_SAVE_STATE_X64; 19076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 19176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct { 19276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ExceptionData; 19376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_FX_SAVE_STATE_X64 FxSaveState; 19476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Dr0; 19576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Dr1; 19676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Dr2; 19776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Dr3; 19876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Dr6; 19976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Dr7; 20076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Cr0; 20176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Cr1; /* Reserved */ 20276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Cr2; 20376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Cr3; 20476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Cr4; 20576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Cr8; 20676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Rflags; 20776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Ldtr; 20876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Tr; 20976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Gdtr[2]; 21076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Idtr[2]; 21176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Rip; 21276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Gs; 21376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Fs; 21476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Es; 21576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Ds; 21676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Cs; 21776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Ss; 21876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Rdi; 21976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Rsi; 22076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Rbp; 22176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Rsp; 22276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Rbx; 22376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Rdx; 22476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Rcx; 22576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Rax; 22676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R8; 22776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R9; 22876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R10; 22976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R11; 23076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R12; 23176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R13; 23276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R14; 23376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R15; 23476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_SYSTEM_CONTEXT_X64; 23576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 23676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 23776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// IPF processor exception types 23876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 23976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_VHTP_TRANSLATION 0 24076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_INSTRUCTION_TLB 1 24176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_DATA_TLB 2 24276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_ALT_INSTRUCTION_TLB 3 24376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_ALT_DATA_TLB 4 24476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_DATA_NESTED_TLB 5 24576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_INSTRUCTION_KEY_MISSED 6 24676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_DATA_KEY_MISSED 7 24776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_DIRTY_BIT 8 24876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_INSTRUCTION_ACCESS_BIT 9 24976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_DATA_ACCESS_BIT 10 25076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_BREAKPOINT 11 25176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_EXTERNAL_INTERRUPT 12 25276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 25376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 13 - 19 reserved 25476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 25576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_PAGE_NOT_PRESENT 20 25676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_KEY_PERMISSION 21 25776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_INSTRUCTION_ACCESS_RIGHTS 22 25876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_DATA_ACCESS_RIGHTS 23 25976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_GENERAL_EXCEPTION 24 26076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_DISABLED_FP_REGISTER 25 26176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_NAT_CONSUMPTION 26 26276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_SPECULATION 27 26376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 26476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 28 reserved 26576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 26676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_DEBUG 29 26776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_UNALIGNED_REFERENCE 30 26876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_UNSUPPORTED_DATA_REFERENCE 31 26976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_FP_FAULT 32 27076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_FP_TRAP 33 27176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_LOWER_PRIVILEGE_TRANSFER_TRAP 34 27276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_TAKEN_BRANCH 35 27376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_SINGLE_STEP 36 27476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 27576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 37 - 44 reserved 27676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 27776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_IA32_EXCEPTION 45 27876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_IA32_INTERCEPT 46 27976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_IPF_IA32_INTERRUPT 47 28076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 28176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 28276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// IPF processor context definition 28376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 28476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct { 28576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // 28676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // The first reserved field is necessary to preserve alignment for the correct 28776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // bits in UNAT and to insure F2 is 16 byte aligned.. 28876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // 28976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Reserved; 29076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R1; 29176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R2; 29276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R3; 29376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R4; 29476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R5; 29576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R6; 29676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R7; 29776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R8; 29876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R9; 29976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R10; 30076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R11; 30176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R12; 30276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R13; 30376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R14; 30476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R15; 30576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R16; 30676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R17; 30776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R18; 30876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R19; 30976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R20; 31076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R21; 31176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R22; 31276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R23; 31376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R24; 31476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R25; 31576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R26; 31676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R27; 31776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R28; 31876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R29; 31976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R30; 32076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R31; 32176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 32276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F2[2]; 32376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F3[2]; 32476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F4[2]; 32576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F5[2]; 32676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F6[2]; 32776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F7[2]; 32876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F8[2]; 32976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F9[2]; 33076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F10[2]; 33176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F11[2]; 33276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F12[2]; 33376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F13[2]; 33476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F14[2]; 33576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F15[2]; 33676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F16[2]; 33776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F17[2]; 33876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F18[2]; 33976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F19[2]; 34076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F20[2]; 34176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F21[2]; 34276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F22[2]; 34376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F23[2]; 34476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F24[2]; 34576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F25[2]; 34676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F26[2]; 34776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F27[2]; 34876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F28[2]; 34976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F29[2]; 35076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F30[2]; 35176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 F31[2]; 35276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 35376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Pr; 35476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 35576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 B0; 35676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 B1; 35776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 B2; 35876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 B3; 35976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 B4; 36076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 B5; 36176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 B6; 36276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 B7; 36376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 36476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // 36576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // application registers 36676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // 36776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArRsc; 36876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArBsp; 36976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArBspstore; 37076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArRnat; 37176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 37276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArFcr; 37376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 37476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArEflag; 37576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArCsd; 37676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArSsd; 37776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArCflg; 37876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArFsr; 37976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArFir; 38076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArFdr; 38176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 38276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArCcv; 38376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 38476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArUnat; 38576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 38676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArFpsr; 38776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 38876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArPfs; 38976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArLc; 39076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ArEc; 39176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 39276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // 39376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // control registers 39476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // 39576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 CrDcr; 39676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 CrItm; 39776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 CrIva; 39876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 CrPta; 39976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 CrIpsr; 40076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 CrIsr; 40176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 CrIip; 40276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 CrIfa; 40376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 CrItir; 40476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 CrIipa; 40576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 CrIfs; 40676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 CrIim; 40776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 CrIha; 40876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 40976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // 41076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // debug registers 41176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // 41276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Dbr0; 41376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Dbr1; 41476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Dbr2; 41576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Dbr3; 41676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Dbr4; 41776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Dbr5; 41876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Dbr6; 41976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Dbr7; 42076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 42176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Ibr0; 42276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Ibr1; 42376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Ibr2; 42476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Ibr3; 42576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Ibr4; 42676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Ibr5; 42776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Ibr6; 42876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Ibr7; 42976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 43076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // 43176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // virtual registers - nat bits for R1-R31 43276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman // 43376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 IntNat; 43476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 43576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_SYSTEM_CONTEXT_IPF; 43676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 43776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 43876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// EBC processor exception types 43976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 44076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_EBC_UNDEFINED 0 44176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_EBC_DIVIDE_ERROR 1 44276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_EBC_DEBUG 2 44376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_EBC_BREAKPOINT 3 44476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_EBC_OVERFLOW 4 44576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_EBC_INVALID_OPCODE 5 // opcode out of range 44676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_EBC_STACK_FAULT 6 44776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_EBC_ALIGNMENT_CHECK 7 44876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_EBC_INSTRUCTION_ENCODING 8 // malformed instruction 44976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_EBC_BAD_BREAK 9 // BREAK 0 or undefined BREAK 45076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define EXCEPT_EBC_STEP 10 // to support debug stepping 45176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 45276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// For coding convenience, define the maximum valid EBC exception. 45376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 45476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#define MAX_EBC_EXCEPTION EXCEPT_EBC_STEP 45576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 45676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 45776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// EBC processor context definition 45876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 45976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef struct { 46076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R0; 46176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R1; 46276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R2; 46376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R3; 46476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R4; 46576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R5; 46676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R6; 46776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 R7; 46876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Flags; 46976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 ControlFlags; 47076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman UINT64 Ip; 47176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_SYSTEM_CONTEXT_EBC; 47276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 47376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 47476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Universal EFI_SYSTEM_CONTEXT definition 47576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 47676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef union { 47776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_SYSTEM_CONTEXT_EBC *SystemContextEbc; 47876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_SYSTEM_CONTEXT_IA32 *SystemContextIa32; 47976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_SYSTEM_CONTEXT_X64 *SystemContextX64; 48076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_SYSTEM_CONTEXT_IPF *SystemContextIpf; 48176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_SYSTEM_CONTEXT; 48276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 48376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 48476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// DebugSupport callback function prototypes 48576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 48676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 48776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 48876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Registers and enables an exception callback function for the specified exception. 48976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 49076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @param ExceptionType Exception types in EBC, IA-32, X64, or IPF 49176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @param SystemContext Exception content. 49276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 49376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman**/ 49476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef 49576d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanVOID 49676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(*EFI_EXCEPTION_CALLBACK)( 49776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IN EFI_EXCEPTION_TYPE ExceptionType, 49876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IN OUT EFI_SYSTEM_CONTEXT SystemContext 49976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ); 50076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 50176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 50276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Registers and enables the on-target debug agent's periodic entry point. 50376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 50476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @param SystemContext Exception content. 50576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 50676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman**/ 50776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef 50876d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanVOID 50976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(*EFI_PERIODIC_CALLBACK)( 51076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IN OUT EFI_SYSTEM_CONTEXT SystemContext 51176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ); 51276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 51376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 51476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// Machine type definition 51576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 51676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef enum { 51776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IsaIa32 = IMAGE_FILE_MACHINE_I386, ///< 0x014C 51876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IsaX64 = IMAGE_FILE_MACHINE_X64, ///< 0x8664 51976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IsaIpf = IMAGE_FILE_MACHINE_IA64, ///< 0x0200 52076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IsaEbc = IMAGE_FILE_MACHINE_EBC ///< 0x0EBC 52176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman} EFI_INSTRUCTION_SET_ARCHITECTURE; 52276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 52376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 52476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 52576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// DebugSupport member function definitions 52676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman// 52776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 52876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 52976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Returns the maximum value that may be used for the ProcessorIndex parameter in 53076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman RegisterPeriodicCallback() and RegisterExceptionCallback(). 53176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 53276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @param This A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance. 53376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @param MaxProcessorIndex Pointer to a caller-allocated UINTN in which the maximum supported 53476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman processor index is returned. 53576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 53676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @retval EFI_SUCCESS The function completed successfully. 53776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 53876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman**/ 53976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef 54076d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS 54176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_GET_MAXIMUM_PROCESSOR_INDEX)( 54276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IN EFI_DEBUG_SUPPORT_PROTOCOL *This, 54376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman OUT UINTN *MaxProcessorIndex 54476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ); 54576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 54676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 54776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Registers a function to be called back periodically in interrupt context. 54876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 54976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @param This A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance. 55076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @param ProcessorIndex Specifies which processor the callback function applies to. 55176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @param PeriodicCallback A pointer to a function of type PERIODIC_CALLBACK that is the main 55276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman periodic entry point of the debug agent. 55376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 55476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @retval EFI_SUCCESS The function completed successfully. 55576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @retval EFI_ALREADY_STARTED Non-NULL PeriodicCallback parameter when a callback 55676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman function was previously registered. 55776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @retval EFI_OUT_OF_RESOURCES System has insufficient memory resources to register new callback 55876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman function. 55976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 56076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman**/ 56176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef 56276d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS 56376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_REGISTER_PERIODIC_CALLBACK)( 56476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IN EFI_DEBUG_SUPPORT_PROTOCOL *This, 56576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IN UINTN ProcessorIndex, 56676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IN EFI_PERIODIC_CALLBACK PeriodicCallback 56776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ); 56876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 56976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 57076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Registers a function to be called when a given processor exception occurs. 57176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 57276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @param This A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance. 57376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @param ProcessorIndex Specifies which processor the callback function applies to. 57476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @param PeriodicCallback A pointer to a function of type EXCEPTION_CALLBACK that is called 57576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman when the processor exception specified by ExceptionType occurs. 57676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @param ExceptionType Specifies which processor exception to hook. 57776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 57876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @retval EFI_SUCCESS The function completed successfully. 57976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @retval EFI_ALREADY_STARTED Non-NULL PeriodicCallback parameter when a callback 58076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman function was previously registered. 58176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @retval EFI_OUT_OF_RESOURCES System has insufficient memory resources to register new callback 58276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman function. 58376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 58476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman**/ 58576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef 58676d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS 58776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_REGISTER_EXCEPTION_CALLBACK)( 58876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IN EFI_DEBUG_SUPPORT_PROTOCOL *This, 58976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IN UINTN ProcessorIndex, 59076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IN EFI_EXCEPTION_CALLBACK ExceptionCallback, 59176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IN EFI_EXCEPTION_TYPE ExceptionType 59276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ); 59376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 59476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/** 59576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman Invalidates processor instruction cache for a memory range. Subsequent execution in this range 59676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman causes a fresh memory fetch to retrieve code to be executed. 59776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 59876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @param This A pointer to the EFI_DEBUG_SUPPORT_PROTOCOL instance. 59976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @param ProcessorIndex Specifies which processor's instruction cache is to be invalidated. 60076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @param Start Specifies the physical base of the memory range to be invalidated. 60176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @param Length Specifies the minimum number of bytes in the processor's instruction 60276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman cache to invalidate. 60376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 60476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman @retval EFI_SUCCESS The function completed successfully. 60576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 60676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman**/ 60776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmantypedef 60876d05dc695b06c4e987bb8078f78032441e1430cGreg HartmanEFI_STATUS 60976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman(EFIAPI *EFI_INVALIDATE_INSTRUCTION_CACHE)( 61076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IN EFI_DEBUG_SUPPORT_PROTOCOL *This, 61176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IN UINTN ProcessorIndex, 61276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IN VOID *Start, 61376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman IN UINT64 Length 61476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman ); 61576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 61676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 61776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// This protocol provides the services to allow the debug agent to register 61876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// callback functions that are called either periodically or when specific 61976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// processor exceptions occur. 62076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman/// 62176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanstruct _EFI_DEBUG_SUPPORT_PROTOCOL { 62276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /// 62376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /// Declares the processor architecture for this instance of the EFI Debug Support protocol. 62476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman /// 62576d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_INSTRUCTION_SET_ARCHITECTURE Isa; 62676d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_GET_MAXIMUM_PROCESSOR_INDEX GetMaximumProcessorIndex; 62776d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_REGISTER_PERIODIC_CALLBACK RegisterPeriodicCallback; 62876d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_REGISTER_EXCEPTION_CALLBACK RegisterExceptionCallback; 62976d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman EFI_INVALIDATE_INSTRUCTION_CACHE InvalidateInstructionCache; 63076d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman}; 63176d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 63276d05dc695b06c4e987bb8078f78032441e1430cGreg Hartmanextern EFI_GUID gEfiDebugSupportProtocolGuid; 63376d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman 63476d05dc695b06c4e987bb8078f78032441e1430cGreg Hartman#endif 635