Merge tag 'pull-request-2022-05-18' of https://gitlab.com/thuth/qemu into staging
[qemu.git] / include / sysemu / hvf_int.h
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 };
49 extern HVFState *hvf_state;
50
51 struct hvf_vcpu_state {
52 uint64_t fd;
53 void *exit;
54 bool vtimer_masked;
55 sigset_t unblock_ipi_mask;
56 };
57
58 void assert_hvf_ok(hv_return_t ret);
59 int hvf_arch_init(void);
60 int hvf_arch_init_vcpu(CPUState *cpu);
61 void hvf_arch_vcpu_destroy(CPUState *cpu);
62 int hvf_vcpu_exec(CPUState *);
63 hvf_slot *hvf_find_overlap_slot(uint64_t, uint64_t);
64 int hvf_put_registers(CPUState *);
65 int hvf_get_registers(CPUState *);
66 void hvf_kick_vcpu_thread(CPUState *cpu);
67
68 #endif