/****************************************************************************** * hvm/emulate.h * * HVM instruction emulation. Used for MMIO and VMX real mode. * * Copyright (c) 2008 Citrix Systems, Inc. * * Authors: * Keir Fraser */ #ifndef __ASM_X86_HVM_EMULATE_H__ #define __ASM_X86_HVM_EMULATE_H__ #include #include 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__ */