blob: 00a06cc251ea193d118e942ee9f48a2c0791720e (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
/******************************************************************************
* hvm/emulate.h
*
* HVM instruction emulation. Used for MMIO and VMX real mode.
*
* Copyright (c) 2008 Citrix Systems, Inc.
*
* Authors:
* Keir Fraser <keir@xen.org>
*/
#ifndef __ASM_X86_HVM_EMULATE_H__
#define __ASM_X86_HVM_EMULATE_H__
#include <xen/config.h>
#include <asm/x86_emulate.h>
struct hvm_emulate_ctxt {
struct x86_emulate_ctxt ctxt;
/* Cache of 16 bytes of instruction. */
uint8_t insn_buf[16];
unsigned long insn_buf_eip;
unsigned int insn_buf_bytes;
struct segment_register seg_reg[10];
unsigned long seg_reg_accessed;
unsigned long seg_reg_dirty;
bool_t exn_pending;
uint8_t exn_vector;
uint8_t exn_insn_len;
int32_t exn_error_code;
uint32_t intr_shadow;
};
int hvm_emulate_one(
struct hvm_emulate_ctxt *hvmemul_ctxt);
void hvm_emulate_prepare(
struct hvm_emulate_ctxt *hvmemul_ctxt,
struct cpu_user_regs *regs);
void hvm_emulate_writeback(
struct hvm_emulate_ctxt *hvmemul_ctxt);
struct segment_register *hvmemul_get_seg_reg(
enum x86_segment seg,
struct hvm_emulate_ctxt *hvmemul_ctxt);
int hvmemul_do_pio(
unsigned long port, unsigned long *reps, int size,
paddr_t ram_gpa, int dir, int df, void *p_data);
#endif /* __ASM_X86_HVM_EMULATE_H__ */
|