• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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