xref: /qemu/include/sysemu/hvf_int.h (revision 727385c4)
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
69