xref: /qemu/include/sysemu/hvf_int.h (revision ebda3036)
1 /*
2  * QEMU Hypervisor.framework (HVF) support
3  *
4  * This work is licensed under the terms of the GNU GPL, version 2 or later.
5  * See the COPYING file in the top-level directory.
6  *
7  */
8 
9 /* header to be included in HVF-specific code */
10 
11 #ifndef HVF_INT_H
12 #define HVF_INT_H
13 
14 #ifdef __aarch64__
15 #include <Hypervisor/Hypervisor.h>
16 #else
17 #include <Hypervisor/hv.h>
18 #endif
19 
20 /* hvf_slot flags */
21 #define HVF_SLOT_LOG (1 << 0)
22 
23 typedef struct hvf_slot {
24     uint64_t start;
25     uint64_t size;
26     uint8_t *mem;
27     int slot_id;
28     uint32_t flags;
29     MemoryRegion *region;
30 } hvf_slot;
31 
32 typedef struct hvf_vcpu_caps {
33     uint64_t vmx_cap_pinbased;
34     uint64_t vmx_cap_procbased;
35     uint64_t vmx_cap_procbased2;
36     uint64_t vmx_cap_entry;
37     uint64_t vmx_cap_exit;
38     uint64_t vmx_cap_preemption_timer;
39 } hvf_vcpu_caps;
40 
41 struct HVFState {
42     AccelState parent;
43     hvf_slot slots[32];
44     int num_slots;
45 
46     hvf_vcpu_caps *hvf_caps;
47     uint64_t vtimer_offset;
48     QTAILQ_HEAD(, hvf_sw_breakpoint) hvf_sw_breakpoints;
49 };
50 extern HVFState *hvf_state;
51 
52 struct AccelCPUState {
53     uint64_t fd;
54     void *exit;
55     bool vtimer_masked;
56     sigset_t unblock_ipi_mask;
57     bool guest_debug_enabled;
58 };
59 
60 void assert_hvf_ok(hv_return_t ret);
61 int hvf_arch_init(void);
62 int hvf_arch_init_vcpu(CPUState *cpu);
63 void hvf_arch_vcpu_destroy(CPUState *cpu);
64 int hvf_vcpu_exec(CPUState *);
65 hvf_slot *hvf_find_overlap_slot(uint64_t, uint64_t);
66 int hvf_put_registers(CPUState *);
67 int hvf_get_registers(CPUState *);
68 void hvf_kick_vcpu_thread(CPUState *cpu);
69 
70 #endif
71