diff options
Diffstat (limited to 'include/system/hvf_int.h')
-rw-r--r-- | include/system/hvf_int.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/include/system/hvf_int.h b/include/system/hvf_int.h new file mode 100644 index 0000000..d774e58 --- /dev/null +++ b/include/system/hvf_int.h @@ -0,0 +1,80 @@ +/* + * QEMU Hypervisor.framework (HVF) support + * + * This work is licensed under the terms of the GNU GPL, version 2 or later. + * See the COPYING file in the top-level directory. + * + */ + +/* header to be included in HVF-specific code */ + +#ifndef HVF_INT_H +#define HVF_INT_H + +#include "qemu/queue.h" + +#ifdef __aarch64__ +#include <Hypervisor/Hypervisor.h> +typedef hv_vcpu_t hvf_vcpuid; +#else +#include <Hypervisor/hv.h> +typedef hv_vcpuid_t hvf_vcpuid; +#endif + +/* hvf_slot flags */ +#define HVF_SLOT_LOG (1 << 0) + +typedef struct hvf_slot { + uint64_t start; + uint64_t size; + uint8_t *mem; + int slot_id; + uint32_t flags; + MemoryRegion *region; +} hvf_slot; + +typedef struct hvf_vcpu_caps { + uint64_t vmx_cap_pinbased; + uint64_t vmx_cap_procbased; + uint64_t vmx_cap_procbased2; + uint64_t vmx_cap_entry; + uint64_t vmx_cap_exit; + uint64_t vmx_cap_preemption_timer; +} hvf_vcpu_caps; + +struct HVFState { + AccelState parent; + + hvf_slot slots[32]; + int num_slots; + + hvf_vcpu_caps *hvf_caps; + uint64_t vtimer_offset; + QTAILQ_HEAD(, hvf_sw_breakpoint) hvf_sw_breakpoints; +}; +extern HVFState *hvf_state; + +struct AccelCPUState { + hvf_vcpuid fd; + void *exit; + bool vtimer_masked; + sigset_t unblock_ipi_mask; + bool guest_debug_enabled; + bool dirty; +}; + +void assert_hvf_ok_impl(hv_return_t ret, const char *file, unsigned int line, + const char *exp); +#define assert_hvf_ok(EX) assert_hvf_ok_impl((EX), __FILE__, __LINE__, #EX) +const char *hvf_return_string(hv_return_t ret); +int hvf_arch_init(void); +hv_return_t hvf_arch_vm_create(MachineState *ms, uint32_t pa_range); +int hvf_arch_init_vcpu(CPUState *cpu); +void hvf_arch_vcpu_destroy(CPUState *cpu); +int hvf_vcpu_exec(CPUState *); +hvf_slot *hvf_find_overlap_slot(uint64_t, uint64_t); +int hvf_put_registers(CPUState *); +int hvf_get_registers(CPUState *); +void hvf_kick_vcpu_thread(CPUState *cpu); + +#endif |