cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

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
     20typedef int hax_fd;
     21#endif
     22
     23#ifdef CONFIG_WIN32
     24typedef HANDLE hax_fd;
     25#endif
     26
     27extern struct hax_state hax_global;
     28struct hax_vcpu_state {
     29    hax_fd fd;
     30    int vcpu_id;
     31    struct hax_tunnel *tunnel;
     32    unsigned char *iobuf;
     33};
     34
     35struct 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
     45struct 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 */
     54hax_fd hax_vcpu_get_fd(CPUArchState *env);
     55int valid_hax_tunnel_size(uint16_t size);
     56
     57/* Host specific functions */
     58int hax_mod_version(struct hax_state *hax, struct hax_module_version *version);
     59int hax_inject_interrupt(CPUArchState *env, int vector);
     60struct hax_vm *hax_vm_create(struct hax_state *hax, int max_cpus);
     61int hax_vcpu_run(struct hax_vcpu_state *vcpu);
     62int hax_vcpu_create(int id);
     63void hax_kick_vcpu_thread(CPUState *cpu);
     64
     65int hax_sync_vcpu_state(CPUArchState *env, struct vcpu_state_t *state,
     66                        int set);
     67int hax_sync_msr(CPUArchState *env, struct hax_msr_data *msrs, int set);
     68int hax_sync_fpu(CPUArchState *env, struct fx_layout *fl, int set);
     69#endif
     70
     71int hax_vm_destroy(struct hax_vm *vm);
     72int hax_capability(struct hax_state *hax, struct hax_capabilityinfo *cap);
     73int hax_notify_qemu_version(hax_fd vm_fd, struct hax_qemu_version *qversion);
     74int hax_set_ram(uint64_t start_pa, uint32_t size, uint64_t host_va, int flags);
     75
     76/* Common host function */
     77int hax_host_create_vm(struct hax_state *hax, int *vm_id);
     78hax_fd hax_host_open_vm(struct hax_state *hax, int vm_id);
     79int hax_host_create_vcpu(hax_fd vm_fd, int vcpuid);
     80hax_fd hax_host_open_vcpu(int vmid, int vcpuid);
     81int hax_host_setup_vcpu_channel(struct hax_vcpu_state *vcpu);
     82hax_fd hax_mod_open(void);
     83void 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