1*32cad1ffSPhilippe Mathieu-Daudé /* 2*32cad1ffSPhilippe Mathieu-Daudé * QEMU Hypervisor.framework (HVF) support 3*32cad1ffSPhilippe Mathieu-Daudé * 4*32cad1ffSPhilippe Mathieu-Daudé * Copyright Google Inc., 2017 5*32cad1ffSPhilippe Mathieu-Daudé * 6*32cad1ffSPhilippe Mathieu-Daudé * This work is licensed under the terms of the GNU GPL, version 2 or later. 7*32cad1ffSPhilippe Mathieu-Daudé * See the COPYING file in the top-level directory. 8*32cad1ffSPhilippe Mathieu-Daudé * 9*32cad1ffSPhilippe Mathieu-Daudé */ 10*32cad1ffSPhilippe Mathieu-Daudé 11*32cad1ffSPhilippe Mathieu-Daudé /* header to be included in non-HVF-specific code */ 12*32cad1ffSPhilippe Mathieu-Daudé 13*32cad1ffSPhilippe Mathieu-Daudé #ifndef HVF_H 14*32cad1ffSPhilippe Mathieu-Daudé #define HVF_H 15*32cad1ffSPhilippe Mathieu-Daudé 16*32cad1ffSPhilippe Mathieu-Daudé #include "qemu/accel.h" 17*32cad1ffSPhilippe Mathieu-Daudé #include "qom/object.h" 18*32cad1ffSPhilippe Mathieu-Daudé 19*32cad1ffSPhilippe Mathieu-Daudé #ifdef COMPILING_PER_TARGET 20*32cad1ffSPhilippe Mathieu-Daudé #include "cpu.h" 21*32cad1ffSPhilippe Mathieu-Daudé 22*32cad1ffSPhilippe Mathieu-Daudé #ifdef CONFIG_HVF 23*32cad1ffSPhilippe Mathieu-Daudé extern bool hvf_allowed; 24*32cad1ffSPhilippe Mathieu-Daudé #define hvf_enabled() (hvf_allowed) 25*32cad1ffSPhilippe Mathieu-Daudé #else /* !CONFIG_HVF */ 26*32cad1ffSPhilippe Mathieu-Daudé #define hvf_enabled() 0 27*32cad1ffSPhilippe Mathieu-Daudé #endif /* !CONFIG_HVF */ 28*32cad1ffSPhilippe Mathieu-Daudé 29*32cad1ffSPhilippe Mathieu-Daudé #endif /* COMPILING_PER_TARGET */ 30*32cad1ffSPhilippe Mathieu-Daudé 31*32cad1ffSPhilippe Mathieu-Daudé #define TYPE_HVF_ACCEL ACCEL_CLASS_NAME("hvf") 32*32cad1ffSPhilippe Mathieu-Daudé 33*32cad1ffSPhilippe Mathieu-Daudé typedef struct HVFState HVFState; 34*32cad1ffSPhilippe Mathieu-Daudé DECLARE_INSTANCE_CHECKER(HVFState, HVF_STATE, 35*32cad1ffSPhilippe Mathieu-Daudé TYPE_HVF_ACCEL) 36*32cad1ffSPhilippe Mathieu-Daudé 37*32cad1ffSPhilippe Mathieu-Daudé #ifdef COMPILING_PER_TARGET 38*32cad1ffSPhilippe Mathieu-Daudé struct hvf_sw_breakpoint { 39*32cad1ffSPhilippe Mathieu-Daudé vaddr pc; 40*32cad1ffSPhilippe Mathieu-Daudé vaddr saved_insn; 41*32cad1ffSPhilippe Mathieu-Daudé int use_count; 42*32cad1ffSPhilippe Mathieu-Daudé QTAILQ_ENTRY(hvf_sw_breakpoint) entry; 43*32cad1ffSPhilippe Mathieu-Daudé }; 44*32cad1ffSPhilippe Mathieu-Daudé 45*32cad1ffSPhilippe Mathieu-Daudé struct hvf_sw_breakpoint *hvf_find_sw_breakpoint(CPUState *cpu, 46*32cad1ffSPhilippe Mathieu-Daudé vaddr pc); 47*32cad1ffSPhilippe Mathieu-Daudé int hvf_sw_breakpoints_active(CPUState *cpu); 48*32cad1ffSPhilippe Mathieu-Daudé 49*32cad1ffSPhilippe Mathieu-Daudé int hvf_arch_insert_sw_breakpoint(CPUState *cpu, struct hvf_sw_breakpoint *bp); 50*32cad1ffSPhilippe Mathieu-Daudé int hvf_arch_remove_sw_breakpoint(CPUState *cpu, struct hvf_sw_breakpoint *bp); 51*32cad1ffSPhilippe Mathieu-Daudé int hvf_arch_insert_hw_breakpoint(vaddr addr, vaddr len, int type); 52*32cad1ffSPhilippe Mathieu-Daudé int hvf_arch_remove_hw_breakpoint(vaddr addr, vaddr len, int type); 53*32cad1ffSPhilippe Mathieu-Daudé void hvf_arch_remove_all_hw_breakpoints(void); 54*32cad1ffSPhilippe Mathieu-Daudé 55*32cad1ffSPhilippe Mathieu-Daudé /* 56*32cad1ffSPhilippe Mathieu-Daudé * hvf_update_guest_debug: 57*32cad1ffSPhilippe Mathieu-Daudé * @cs: CPUState for the CPU to update 58*32cad1ffSPhilippe Mathieu-Daudé * 59*32cad1ffSPhilippe Mathieu-Daudé * Update guest to enable or disable debugging. Per-arch specifics will be 60*32cad1ffSPhilippe Mathieu-Daudé * handled by calling down to hvf_arch_update_guest_debug. 61*32cad1ffSPhilippe Mathieu-Daudé */ 62*32cad1ffSPhilippe Mathieu-Daudé int hvf_update_guest_debug(CPUState *cpu); 63*32cad1ffSPhilippe Mathieu-Daudé void hvf_arch_update_guest_debug(CPUState *cpu); 64*32cad1ffSPhilippe Mathieu-Daudé 65*32cad1ffSPhilippe Mathieu-Daudé /* 66*32cad1ffSPhilippe Mathieu-Daudé * Return whether the guest supports debugging. 67*32cad1ffSPhilippe Mathieu-Daudé */ 68*32cad1ffSPhilippe Mathieu-Daudé bool hvf_arch_supports_guest_debug(void); 69*32cad1ffSPhilippe Mathieu-Daudé #endif /* COMPILING_PER_TARGET */ 70*32cad1ffSPhilippe Mathieu-Daudé 71*32cad1ffSPhilippe Mathieu-Daudé #endif 72