| /* |
| ** Copyright (c) 2011, Intel Corporation |
| ** |
| ** This software is licensed under the terms of the GNU General Public |
| ** License version 2, as published by the Free Software Foundation, and |
| ** may be copied, distributed, and modified under those terms. |
| ** |
| ** This program is distributed in the hope that it will be useful, |
| ** but WITHOUT ANY WARRANTY; without even the implied warranty of |
| ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| ** GNU General Public License for more details. |
| */ |
| |
| #ifndef _HAX_I386_H |
| #define _HAX_I386_H |
| |
| #include "android/utils/debug.h" |
| #include "hax.h" |
| |
| #ifdef CONFIG_DARWIN |
| typedef int hax_fd; |
| #endif |
| |
| #ifdef CONFIG_WIN32 |
| typedef HANDLE hax_fd; |
| #endif |
| |
| extern struct hax_state hax_global; |
| struct hax_vcpu_state |
| { |
| hax_fd fd; |
| int vcpu_id; |
| int emulation_state; |
| struct hax_tunnel *tunnel; |
| unsigned char *iobuf; |
| }; |
| |
| struct hax_state |
| { |
| hax_fd fd; /* the global hax device interface */ |
| uint32_t version; |
| struct hax_vm *vm; |
| uint64_t mem_quota; |
| }; |
| |
| #define HAX_MAX_VCPU 0x10 |
| #define MAX_VM_ID 0x40 |
| #define MAX_VCPU_ID 0x40 |
| |
| struct hax_vm |
| { |
| hax_fd fd; |
| int id; |
| struct hax_vcpu_state *vcpus[HAX_MAX_VCPU]; |
| }; |
| |
| /* Functions exported to host specific mode */ |
| hax_fd hax_vcpu_get_fd(CPUState *env); |
| int valid_hax_tunnel_size(uint16_t size); |
| |
| /* Host specific functions */ |
| int hax_mod_version(struct hax_state *hax, struct hax_module_version *version); |
| int hax_inject_interrupt(CPUState *env, int vector); |
| struct hax_vm *hax_vm_create(struct hax_state *hax); |
| int hax_vcpu_run(struct hax_vcpu_state *vcpu); |
| int hax_vcpu_create(int id); |
| int hax_sync_vcpu_state(CPUState *env, struct vcpu_state_t *state, int set); |
| int hax_sync_msr(CPUState *env, struct hax_msr_data *msrs, int set); |
| int hax_sync_fpu(CPUState *env, struct fx_layout *fl, int set); |
| int hax_vm_destroy(struct hax_vm *vm); |
| int hax_capability(struct hax_state *hax, struct hax_capabilityinfo *cap); |
| int hax_notify_qemu_version(hax_fd vm_fd, struct hax_qemu_version *qversion); |
| |
| /* Common host function */ |
| int hax_host_create_vm(struct hax_state *hax, int *vm_id); |
| hax_fd hax_host_open_vm(struct hax_state *hax, int vm_id); |
| int hax_host_create_vcpu(hax_fd vm_fd, int vcpuid); |
| hax_fd hax_host_open_vcpu(int vmid, int vcpuid); |
| int hax_host_setup_vcpu_channel(struct hax_vcpu_state *vcpu); |
| hax_fd hax_mod_open(void); |
| |
| |
| #ifdef CONFIG_DARWIN |
| #include "target-i386/hax-darwin.h" |
| #endif |
| |
| #ifdef CONFIG_WIN32 |
| #include "target-i386/hax-windows.h" |
| #endif |
| |
| #include "target-i386/hax-interface.h" |
| |
| #endif |