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 #include <Hypervisor/hv.h> 15 16 /* hvf_slot flags */ 17 #define HVF_SLOT_LOG (1 << 0) 18 19 typedef struct hvf_slot { 20 uint64_t start; 21 uint64_t size; 22 uint8_t *mem; 23 int slot_id; 24 uint32_t flags; 25 MemoryRegion *region; 26 } hvf_slot; 27 28 typedef struct hvf_vcpu_caps { 29 uint64_t vmx_cap_pinbased; 30 uint64_t vmx_cap_procbased; 31 uint64_t vmx_cap_procbased2; 32 uint64_t vmx_cap_entry; 33 uint64_t vmx_cap_exit; 34 uint64_t vmx_cap_preemption_timer; 35 } hvf_vcpu_caps; 36 37 struct HVFState { 38 AccelState parent; 39 hvf_slot slots[32]; 40 int num_slots; 41 42 hvf_vcpu_caps *hvf_caps; 43 }; 44 extern HVFState *hvf_state; 45 46 struct hvf_vcpu_state { 47 int fd; 48 }; 49 50 void assert_hvf_ok(hv_return_t ret); 51 int hvf_arch_init_vcpu(CPUState *cpu); 52 void hvf_arch_vcpu_destroy(CPUState *cpu); 53 int hvf_vcpu_exec(CPUState *); 54 hvf_slot *hvf_find_overlap_slot(uint64_t, uint64_t); 55 int hvf_put_registers(CPUState *); 56 int hvf_get_registers(CPUState *); 57 58 #endif 59