/* * QEMU Hypervisor.framework (HVF) support * * Copyright 2017 Google Inc * * Adapted from target-i386/hax-i386.h: * Copyright (c) 2011 Intel Corporation * Written by: * Jiang Yunhong * * This work is licensed under the terms of the GNU GPL, version 2 or later. * See the COPYING file in the top-level directory. * */ #ifndef HVF_I386_H #define HVF_I386_H #include "qemu/accel.h" #include "sysemu/hvf.h" #include "cpu.h" #include "x86.h" #define HVF_MAX_VCPU 0x10 extern struct hvf_state hvf_global; struct hvf_vm { int id; struct hvf_vcpu_state *vcpus[HVF_MAX_VCPU]; }; struct hvf_state { uint32_t version; struct hvf_vm *vm; uint64_t mem_quota; }; /* 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; }; extern HVFState *hvf_state; void hvf_set_phys_mem(MemoryRegionSection *, bool); void hvf_handle_io(CPUArchState *, uint16_t, void *, int, int, int); hvf_slot *hvf_find_overlap_slot(uint64_t, uint64_t); #ifdef NEED_CPU_H /* Functions exported to host specific mode */ /* Host specific functions */ int hvf_inject_interrupt(CPUArchState *env, int vector); int hvf_vcpu_run(struct hvf_vcpu_state *vcpu); #endif #endif