1 /* 2 ** Copyright (c) 2011, Intel Corporation 3 ** 4 ** This software is licensed under the terms of the GNU General Public 5 ** License version 2, as published by the Free Software Foundation, and 6 ** may be copied, distributed, and modified under those terms. 7 ** 8 ** This program is distributed in the hope that it will be useful, 9 ** but WITHOUT ANY WARRANTY; without even the implied warranty of 10 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 ** GNU General Public License for more details. 12 */ 13 14 #ifndef _HAX_I386_H 15 #define _HAX_I386_H 16 17 #include "android/utils/debug.h" 18 #include "hax.h" 19 20 #ifdef CONFIG_DARWIN 21 typedef int hax_fd; 22 #endif 23 24 #ifdef CONFIG_WIN32 25 typedef HANDLE hax_fd; 26 #endif 27 28 extern struct hax_state hax_global; 29 struct hax_vcpu_state 30 { 31 hax_fd fd; 32 int vcpu_id; 33 int emulation_state; 34 struct hax_tunnel *tunnel; 35 unsigned char *iobuf; 36 }; 37 38 struct hax_state 39 { 40 hax_fd fd; /* the global hax device interface */ 41 uint32_t version; 42 struct hax_vm *vm; 43 uint64_t mem_quota; 44 }; 45 46 #define HAX_MAX_VCPU 0x10 47 #define MAX_VM_ID 0x40 48 #define MAX_VCPU_ID 0x40 49 50 struct hax_vm 51 { 52 hax_fd fd; 53 int id; 54 struct hax_vcpu_state *vcpus[HAX_MAX_VCPU]; 55 }; 56 57 /* Functions exported to host specific mode */ 58 hax_fd hax_vcpu_get_fd(CPUState *env); 59 int valid_hax_tunnel_size(uint16_t size); 60 61 /* Host specific functions */ 62 int hax_mod_version(struct hax_state *hax, struct hax_module_version *version); 63 int hax_inject_interrupt(CPUState *env, int vector); 64 struct hax_vm *hax_vm_create(struct hax_state *hax); 65 int hax_vcpu_run(struct hax_vcpu_state *vcpu); 66 int hax_vcpu_create(int id); 67 int hax_sync_vcpu_state(CPUState *env, struct vcpu_state_t *state, int set); 68 int hax_sync_msr(CPUState *env, struct hax_msr_data *msrs, int set); 69 int hax_sync_fpu(CPUState *env, struct fx_layout *fl, int set); 70 int hax_vm_destroy(struct hax_vm *vm); 71 int hax_capability(struct hax_state *hax, struct hax_capabilityinfo *cap); 72 int hax_notify_qemu_version(hax_fd vm_fd, struct hax_qemu_version *qversion); 73 74 /* Common host function */ 75 int hax_host_create_vm(struct hax_state *hax, int *vm_id); 76 hax_fd hax_host_open_vm(struct hax_state *hax, int vm_id); 77 int hax_host_create_vcpu(hax_fd vm_fd, int vcpuid); 78 hax_fd hax_host_open_vcpu(int vmid, int vcpuid); 79 int hax_host_setup_vcpu_channel(struct hax_vcpu_state *vcpu); 80 hax_fd hax_mod_open(void); 81 82 83 #ifdef CONFIG_DARWIN 84 #include "target-i386/hax-darwin.h" 85 #endif 86 87 #ifdef CONFIG_WIN32 88 #include "target-i386/hax-windows.h" 89 #endif 90 91 #include "target-i386/hax-interface.h" 92 93 #endif 94