xref: /openbmc/qemu/include/system/hvf.h (revision 65cb7129f4160c7e07a0da107f888ec73ae96776)
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