diff options
author | Jun Nakajima <jun.nakajima@intel.com> | 2011-12-17 19:22:12 -0800 |
---|---|---|
committer | Jiang, Yunhong <yunhong.jiang@intel.com> | 2012-01-17 06:15:11 +0800 |
commit | e4a3c7801e0075a49674c79972394ad962b338f2 (patch) | |
tree | c8f2463b26574e3b07cd1d5fa1b02820575d34e1 /target-i386/hax-i386.h | |
parent | a381ef07088ce479610129e37bfef42538f397da (diff) | |
download | external_qemu-e4a3c7801e0075a49674c79972394ad962b338f2.zip external_qemu-e4a3c7801e0075a49674c79972394ad962b338f2.tar.gz external_qemu-e4a3c7801e0075a49674c79972394ad962b338f2.tar.bz2 |
New files to add HAX support
QEMU emulator interacts with the HAX kernel module. A HAX (Hardware-based Accelerated eXecution)
kernel module is required to use HAX support. Most guest instructions run in VMX non-root
(i.e. in hardware) mode and achieve near-native (relative to the host) performance.
QEMU still emulates PIO/MMIO instructions and non-PG (paging) mode operations.
HAX is supported only on Mac OS X and Windows hosts when Intel VT is present.
Change-Id: I8dd52a35e315437dc568f555742bb8ab7e9d8ab2
Signed-off-by: Zhang, Xiantao <xiantao.zhang@intel.com>
Signed-off-by: Xin, Xiaohui <xiaohui.xin@intel.com>
Signed-off-by: Jiang Yunhong <yunhong.jiang@intel.com>
Signed-off-by: Nakajima, Jun <jun.nakajima@intel.com>
Diffstat (limited to 'target-i386/hax-i386.h')
-rw-r--r-- | target-i386/hax-i386.h | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/target-i386/hax-i386.h b/target-i386/hax-i386.h new file mode 100644 index 0000000..e55e584 --- /dev/null +++ b/target-i386/hax-i386.h @@ -0,0 +1,90 @@ +/* +** 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; +}; + +#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); + +/* 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 |