diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2008-01-22 17:18:02 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2008-01-22 17:18:02 +0000 |
commit | b4841dbaca5470dfe3691d837ec7e59bf0286705 (patch) | |
tree | e75d25c8f4038c11f1fbd672c5a6e83cde8f7dca /xen/include/asm-x86/x86_emulate.h | |
parent | 2b2eda45a3307acd9ea2af109e6b837ffb17aa11 (diff) | |
download | xen-b4841dbaca5470dfe3691d837ec7e59bf0286705.tar.gz xen-b4841dbaca5470dfe3691d837ec7e59bf0286705.tar.bz2 xen-b4841dbaca5470dfe3691d837ec7e59bf0286705.zip |
x86_emulate: Provide callbacks for faster emulation of:
REP MOVS, REP INS, REP OUTS.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
Diffstat (limited to 'xen/include/asm-x86/x86_emulate.h')
-rw-r--r-- | xen/include/asm-x86/x86_emulate.h | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/xen/include/asm-x86/x86_emulate.h b/xen/include/asm-x86/x86_emulate.h index 2de071bd7f..a794e03d6f 100644 --- a/xen/include/asm-x86/x86_emulate.h +++ b/xen/include/asm-x86/x86_emulate.h @@ -175,6 +175,49 @@ struct x86_emulate_ops struct x86_emulate_ctxt *ctxt); /* + * rep_ins: Emulate INS: <src_port> -> <dst_seg:dst_offset>. + * @bytes_per_rep: [IN ] Bytes transferred per repetition. + * @reps: [IN ] Maximum repetitions to be emulated. + * [OUT] Number of repetitions actually emulated. + */ + int (*rep_ins)( + uint16_t src_port, + enum x86_segment dst_seg, + unsigned long dst_offset, + unsigned int bytes_per_rep, + unsigned long *reps, + struct x86_emulate_ctxt *ctxt); + + /* + * rep_outs: Emulate OUTS: <src_seg:src_offset> -> <dst_port>. + * @bytes_per_rep: [IN ] Bytes transferred per repetition. + * @reps: [IN ] Maximum repetitions to be emulated. + * [OUT] Number of repetitions actually emulated. + */ + int (*rep_outs)( + enum x86_segment src_seg, + unsigned long src_offset, + uint16_t dst_port, + unsigned int bytes_per_rep, + unsigned long *reps, + struct x86_emulate_ctxt *ctxt); + + /* + * rep_movs: Emulate MOVS: <src_seg:src_offset> -> <dst_seg:dst_offset>. + * @bytes_per_rep: [IN ] Bytes transferred per repetition. + * @reps: [IN ] Maximum repetitions to be emulated. + * [OUT] Number of repetitions actually emulated. + */ + int (*rep_movs)( + enum x86_segment src_seg, + unsigned long src_offset, + enum x86_segment dst_seg, + unsigned long dst_offset, + unsigned int bytes_per_rep, + unsigned long *reps, + struct x86_emulate_ctxt *ctxt); + + /* * read_segment: Emulate a read of full context of a segment register. * @reg: [OUT] Contents of segment register (visible and hidden state). */ |