qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

hax-i386.h (2440B)


      1 /*
      2  * QEMU HAXM support
      3  *
      4  * Copyright (c) 2011 Intel Corporation
      5  *  Written by:
      6  *  Jiang Yunhong<yunhong.jiang@intel.com>
      7  *
      8  * This work is licensed under the terms of the GNU GPL, version 2 or later.
      9  * See the COPYING file in the top-level directory.
     10  *
     11  */
     12 
     13 #ifndef HAX_I386_H
     14 #define HAX_I386_H
     15 
     16 #include "cpu.h"
     17 #include "sysemu/hax.h"
     18 
     19 #ifdef CONFIG_POSIX
     20 typedef int hax_fd;
     21 #endif
     22 
     23 #ifdef CONFIG_WIN32
     24 typedef HANDLE hax_fd;
     25 #endif
     26 
     27 extern struct hax_state hax_global;
     28 struct hax_vcpu_state {
     29     hax_fd fd;
     30     int vcpu_id;
     31     struct hax_tunnel *tunnel;
     32     unsigned char *iobuf;
     33 };
     34 
     35 struct hax_state {
     36     hax_fd fd; /* the global hax device interface */
     37     uint32_t version;
     38     struct hax_vm *vm;
     39     uint64_t mem_quota;
     40     bool supports_64bit_ramblock;
     41 };
     42 
     43 #define HAX_MAX_VCPU 0x10
     44 
     45 struct hax_vm {
     46     hax_fd fd;
     47     int id;
     48     int numvcpus;
     49     struct hax_vcpu_state **vcpus;
     50 };
     51 
     52 #ifdef NEED_CPU_H
     53 /* Functions exported to host specific mode */
     54 hax_fd hax_vcpu_get_fd(CPUArchState *env);
     55 int valid_hax_tunnel_size(uint16_t size);
     56 
     57 /* Host specific functions */
     58 int hax_mod_version(struct hax_state *hax, struct hax_module_version *version);
     59 int hax_inject_interrupt(CPUArchState *env, int vector);
     60 struct hax_vm *hax_vm_create(struct hax_state *hax, int max_cpus);
     61 int hax_vcpu_run(struct hax_vcpu_state *vcpu);
     62 int hax_vcpu_create(int id);
     63 void hax_kick_vcpu_thread(CPUState *cpu);
     64 
     65 int hax_sync_vcpu_state(CPUArchState *env, struct vcpu_state_t *state,
     66                         int set);
     67 int hax_sync_msr(CPUArchState *env, struct hax_msr_data *msrs, int set);
     68 int hax_sync_fpu(CPUArchState *env, struct fx_layout *fl, int set);
     69 #endif
     70 
     71 int hax_vm_destroy(struct hax_vm *vm);
     72 int hax_capability(struct hax_state *hax, struct hax_capabilityinfo *cap);
     73 int hax_notify_qemu_version(hax_fd vm_fd, struct hax_qemu_version *qversion);
     74 int hax_set_ram(uint64_t start_pa, uint32_t size, uint64_t host_va, int flags);
     75 
     76 /* Common host function */
     77 int hax_host_create_vm(struct hax_state *hax, int *vm_id);
     78 hax_fd hax_host_open_vm(struct hax_state *hax, int vm_id);
     79 int hax_host_create_vcpu(hax_fd vm_fd, int vcpuid);
     80 hax_fd hax_host_open_vcpu(int vmid, int vcpuid);
     81 int hax_host_setup_vcpu_channel(struct hax_vcpu_state *vcpu);
     82 hax_fd hax_mod_open(void);
     83 void hax_memory_init(void);
     84 
     85 
     86 #ifdef CONFIG_POSIX
     87 #include "hax-posix.h"
     88 #endif
     89 
     90 #ifdef CONFIG_WIN32
     91 #include "hax-windows.h"
     92 #endif
     93 
     94 #include "hax-interface.h"
     95 
     96 #endif