Coverage Report

Created: 2017-10-25 09:10

/root/src/xen/xen/include/asm/hvm/emulate.h
Line
Count
Source
1
/******************************************************************************
2
 * hvm/emulate.h
3
 * 
4
 * HVM instruction emulation. Used for MMIO and VMX real mode.
5
 * 
6
 * Copyright (c) 2008 Citrix Systems, Inc.
7
 * 
8
 * Authors:
9
 *    Keir Fraser <keir@xen.org>
10
 */
11
12
#ifndef __ASM_X86_HVM_EMULATE_H__
13
#define __ASM_X86_HVM_EMULATE_H__
14
15
#include <xen/err.h>
16
#include <asm/hvm/hvm.h>
17
#include <asm/x86_emulate.h>
18
19
typedef bool hvm_emulate_validate_t(const struct x86_emulate_state *state,
20
                                    const struct x86_emulate_ctxt *ctxt);
21
22
struct hvm_emulate_ctxt {
23
    struct x86_emulate_ctxt ctxt;
24
25
    /*
26
     * validate: Post-decode, pre-emulate hook to allow caller controlled
27
     * filtering.
28
     */
29
    hvm_emulate_validate_t *validate;
30
31
    /* Cache of 16 bytes of instruction. */
32
    uint8_t insn_buf[16];
33
    unsigned long insn_buf_eip;
34
    unsigned int insn_buf_bytes;
35
36
    struct segment_register seg_reg[10];
37
    unsigned long seg_reg_accessed;
38
    unsigned long seg_reg_dirty;
39
40
    /*
41
     * MFNs behind temporary mappings in the write callback.  The length is
42
     * arbitrary, and can be increased if writes longer than PAGE_SIZE+1 are
43
     * needed.
44
     */
45
    mfn_t mfn[2];
46
47
    uint32_t intr_shadow;
48
49
    bool_t set_context;
50
};
51
52
enum emul_kind {
53
    EMUL_KIND_NORMAL,
54
    EMUL_KIND_NOWRITE,
55
    EMUL_KIND_SET_CONTEXT_DATA,
56
    EMUL_KIND_SET_CONTEXT_INSN
57
};
58
59
bool __nonnull(1, 2) hvm_emulate_one_insn(
60
    hvm_emulate_validate_t *validate,
61
    const char *descr);
62
int hvm_emulate_one(
63
    struct hvm_emulate_ctxt *hvmemul_ctxt);
64
void hvm_emulate_one_vm_event(enum emul_kind kind,
65
    unsigned int trapnr,
66
    unsigned int errcode);
67
/* Must be called once to set up hvmemul state. */
68
void hvm_emulate_init_once(
69
    struct hvm_emulate_ctxt *hvmemul_ctxt,
70
    hvm_emulate_validate_t *validate,
71
    struct cpu_user_regs *regs);
72
/* Must be called once before each instruction emulated. */
73
void hvm_emulate_init_per_insn(
74
    struct hvm_emulate_ctxt *hvmemul_ctxt,
75
    const unsigned char *insn_buf,
76
    unsigned int insn_bytes);
77
void hvm_emulate_writeback(
78
    struct hvm_emulate_ctxt *hvmemul_ctxt);
79
int hvmemul_cpuid(uint32_t leaf, uint32_t subleaf,
80
                  struct cpuid_leaf *res, struct x86_emulate_ctxt *ctxt);
81
struct segment_register *hvmemul_get_seg_reg(
82
    enum x86_segment seg,
83
    struct hvm_emulate_ctxt *hvmemul_ctxt);
84
int hvm_emulate_one_mmio(unsigned long mfn, unsigned long gla);
85
86
static inline bool handle_mmio(void)
87
60.1k
{
88
60.1k
    return hvm_emulate_one_insn(x86_insn_is_mem_access, "MMIO");
89
60.1k
}
Unexecuted instantiation: cpu.c:handle_mmio
Unexecuted instantiation: cpupool.c:handle_mmio
Unexecuted instantiation: domctl.c:handle_mmio
Unexecuted instantiation: domain.c:handle_mmio
Unexecuted instantiation: event_2l.c:handle_mmio
Unexecuted instantiation: event_channel.c:handle_mmio
Unexecuted instantiation: event_fifo.c:handle_mmio
Unexecuted instantiation: grant_table.c:handle_mmio
Unexecuted instantiation: guestcopy.c:handle_mmio
Unexecuted instantiation: kernel.c:handle_mmio
Unexecuted instantiation: keyhandler.c:handle_mmio
Unexecuted instantiation: kexec.c:handle_mmio
Unexecuted instantiation: kimage.c:handle_mmio
Unexecuted instantiation: mem_access.c:handle_mmio
Unexecuted instantiation: memory.c:handle_mmio
Unexecuted instantiation: monitor.c:handle_mmio
Unexecuted instantiation: multicall.c:handle_mmio
Unexecuted instantiation: page_alloc.c:handle_mmio
Unexecuted instantiation: rangeset.c:handle_mmio
Unexecuted instantiation: rcupdate.c:handle_mmio
Unexecuted instantiation: sched_arinc653.c:handle_mmio
Unexecuted instantiation: sched_credit.c:handle_mmio
Unexecuted instantiation: sched_credit2.c:handle_mmio
Unexecuted instantiation: sched_rt.c:handle_mmio
Unexecuted instantiation: sched_null.c:handle_mmio
Unexecuted instantiation: schedule.c:handle_mmio
Unexecuted instantiation: shutdown.c:handle_mmio
Unexecuted instantiation: softirq.c:handle_mmio
Unexecuted instantiation: spinlock.c:handle_mmio
Unexecuted instantiation: stop_machine.c:handle_mmio
Unexecuted instantiation: symbols.c:handle_mmio
Unexecuted instantiation: sysctl.c:handle_mmio
Unexecuted instantiation: tasklet.c:handle_mmio
Unexecuted instantiation: time.c:handle_mmio
Unexecuted instantiation: timer.c:handle_mmio
Unexecuted instantiation: trace.c:handle_mmio
Unexecuted instantiation: vm_event.c:handle_mmio
Unexecuted instantiation: vsprintf.c:handle_mmio
Unexecuted instantiation: wait.c:handle_mmio
Unexecuted instantiation: xenoprof.c:handle_mmio
Unexecuted instantiation: tmem.c:handle_mmio
Unexecuted instantiation: tmem_xen.c:handle_mmio
Unexecuted instantiation: tmem_control.c:handle_mmio
Unexecuted instantiation: llvm.c:handle_mmio
Unexecuted instantiation: libelf-loader.c:handle_mmio
Unexecuted instantiation: console.c:handle_mmio
Unexecuted instantiation: ns16550.c:handle_mmio
Unexecuted instantiation: cpufreq.c:handle_mmio
Unexecuted instantiation: cpufreq_ondemand.c:handle_mmio
Unexecuted instantiation: cpufreq_misc_governors.c:handle_mmio
Unexecuted instantiation: utility.c:handle_mmio
Unexecuted instantiation: vpci.c:handle_mmio
Unexecuted instantiation: header.c:handle_mmio
Unexecuted instantiation: msi.c:handle_mmio
Unexecuted instantiation: msix.c:handle_mmio
Unexecuted instantiation: iommu.c:handle_mmio
io.c:handle_mmio
Line
Count
Source
87
60.1k
{
88
60.1k
    return hvm_emulate_one_insn(x86_insn_is_mem_access, "MMIO");
89
60.1k
}
Unexecuted instantiation: pci.c:handle_mmio
Unexecuted instantiation: utils.c:handle_mmio
Unexecuted instantiation: qinval.c:handle_mmio
Unexecuted instantiation: intremap.c:handle_mmio
Unexecuted instantiation: quirks.c:handle_mmio
Unexecuted instantiation: vtd.c:handle_mmio
Unexecuted instantiation: ats.c:handle_mmio
Unexecuted instantiation: iommu_init.c:handle_mmio
Unexecuted instantiation: iommu_map.c:handle_mmio
Unexecuted instantiation: pci_amd_iommu.c:handle_mmio
Unexecuted instantiation: iommu_intr.c:handle_mmio
Unexecuted instantiation: iommu_cmd.c:handle_mmio
Unexecuted instantiation: iommu_guest.c:handle_mmio
Unexecuted instantiation: pmstat.c:handle_mmio
Unexecuted instantiation: xsm_core.c:handle_mmio
Unexecuted instantiation: apic.c:handle_mmio
Unexecuted instantiation: cpuid.c:handle_mmio
Unexecuted instantiation: compat.c:handle_mmio
Unexecuted instantiation: crash.c:handle_mmio
Unexecuted instantiation: debug.c:handle_mmio
Unexecuted instantiation: domain_page.c:handle_mmio
Unexecuted instantiation: flushtlb.c:handle_mmio
Unexecuted instantiation: hypercall.c:handle_mmio
Unexecuted instantiation: i387.c:handle_mmio
Unexecuted instantiation: i8259.c:handle_mmio
Unexecuted instantiation: io_apic.c:handle_mmio
Unexecuted instantiation: msr.c:handle_mmio
Unexecuted instantiation: ioport_emulate.c:handle_mmio
Unexecuted instantiation: irq.c:handle_mmio
Unexecuted instantiation: machine_kexec.c:handle_mmio
Unexecuted instantiation: microcode_amd.c:handle_mmio
Unexecuted instantiation: microcode_intel.c:handle_mmio
Unexecuted instantiation: microcode.c:handle_mmio
Unexecuted instantiation: mm.c:handle_mmio
Unexecuted instantiation: mpparse.c:handle_mmio
Unexecuted instantiation: nmi.c:handle_mmio
Unexecuted instantiation: numa.c:handle_mmio
Unexecuted instantiation: physdev.c:handle_mmio
Unexecuted instantiation: platform_hypercall.c:handle_mmio
Unexecuted instantiation: psr.c:handle_mmio
Unexecuted instantiation: setup.c:handle_mmio
Unexecuted instantiation: smp.c:handle_mmio
Unexecuted instantiation: smpboot.c:handle_mmio
Unexecuted instantiation: traps.c:handle_mmio
Unexecuted instantiation: usercopy.c:handle_mmio
Unexecuted instantiation: x86_emulate.c:handle_mmio
Unexecuted instantiation: tboot.c:handle_mmio
Unexecuted instantiation: xstate.c:handle_mmio
Unexecuted instantiation: power.c:handle_mmio
Unexecuted instantiation: suspend.c:handle_mmio
Unexecuted instantiation: cpu_idle.c:handle_mmio
Unexecuted instantiation: amd.c:handle_mmio
Unexecuted instantiation: common.c:handle_mmio
Unexecuted instantiation: intel.c:handle_mmio
Unexecuted instantiation: mwait-idle.c:handle_mmio
Unexecuted instantiation: vpmu.c:handle_mmio
Unexecuted instantiation: vpmu_amd.c:handle_mmio
Unexecuted instantiation: vpmu_intel.c:handle_mmio
Unexecuted instantiation: amd_nonfatal.c:handle_mmio
Unexecuted instantiation: mce_amd.c:handle_mmio
Unexecuted instantiation: mcaction.c:handle_mmio
Unexecuted instantiation: barrier.c:handle_mmio
Unexecuted instantiation: mctelem.c:handle_mmio
Unexecuted instantiation: mce.c:handle_mmio
Unexecuted instantiation: mce-apei.c:handle_mmio
Unexecuted instantiation: mce_intel.c:handle_mmio
Unexecuted instantiation: non-fatal.c:handle_mmio
Unexecuted instantiation: util.c:handle_mmio
Unexecuted instantiation: vmce.c:handle_mmio
Unexecuted instantiation: delivery.c:handle_mmio
Unexecuted instantiation: asid.c:handle_mmio
Unexecuted instantiation: dm.c:handle_mmio
Unexecuted instantiation: emulate.c:handle_mmio
Unexecuted instantiation: hpet.c:handle_mmio
Unexecuted instantiation: hvm.c:handle_mmio
Unexecuted instantiation: i8254.c:handle_mmio
Unexecuted instantiation: intercept.c:handle_mmio
Unexecuted instantiation: ioreq.c:handle_mmio
Unexecuted instantiation: mtrr.c:handle_mmio
Unexecuted instantiation: nestedhvm.c:handle_mmio
Unexecuted instantiation: pmtimer.c:handle_mmio
Unexecuted instantiation: rtc.c:handle_mmio
Unexecuted instantiation: save.c:handle_mmio
Unexecuted instantiation: stdvga.c:handle_mmio
Unexecuted instantiation: vioapic.c:handle_mmio
Unexecuted instantiation: viridian.c:handle_mmio
Unexecuted instantiation: vlapic.c:handle_mmio
Unexecuted instantiation: vmsi.c:handle_mmio
Unexecuted instantiation: vpic.c:handle_mmio
Unexecuted instantiation: vpt.c:handle_mmio
Unexecuted instantiation: intr.c:handle_mmio
Unexecuted instantiation: nestedsvm.c:handle_mmio
Unexecuted instantiation: svm.c:handle_mmio
Unexecuted instantiation: svmdebug.c:handle_mmio
Unexecuted instantiation: vmcb.c:handle_mmio
Unexecuted instantiation: realmode.c:handle_mmio
Unexecuted instantiation: vmcs.c:handle_mmio
Unexecuted instantiation: vmx.c:handle_mmio
Unexecuted instantiation: vvmx.c:handle_mmio
Unexecuted instantiation: paging.c:handle_mmio
Unexecuted instantiation: p2m.c:handle_mmio
Unexecuted instantiation: p2m-pt.c:handle_mmio
Unexecuted instantiation: p2m-ept.c:handle_mmio
Unexecuted instantiation: p2m-pod.c:handle_mmio
Unexecuted instantiation: altp2m.c:handle_mmio
Unexecuted instantiation: guest_walk.c:handle_mmio
Unexecuted instantiation: mem_paging.c:handle_mmio
Unexecuted instantiation: mem_sharing.c:handle_mmio
Unexecuted instantiation: multi.c:handle_mmio
Unexecuted instantiation: hap.c:handle_mmio
Unexecuted instantiation: nested_hap.c:handle_mmio
Unexecuted instantiation: nested_ept.c:handle_mmio
Unexecuted instantiation: nmi_int.c:handle_mmio
Unexecuted instantiation: op_model_ppro.c:handle_mmio
Unexecuted instantiation: op_model_athlon.c:handle_mmio
Unexecuted instantiation: backtrace.c:handle_mmio
Unexecuted instantiation: callback.c:handle_mmio
Unexecuted instantiation: descriptor-tables.c:handle_mmio
Unexecuted instantiation: emul-gate-op.c:handle_mmio
Unexecuted instantiation: emul-inv-op.c:handle_mmio
Unexecuted instantiation: emul-priv-op.c:handle_mmio
Unexecuted instantiation: iret.c:handle_mmio
Unexecuted instantiation: misc-hypercalls.c:handle_mmio
Unexecuted instantiation: ro-page-fault.c:handle_mmio
90
91
int hvmemul_insn_fetch(enum x86_segment seg,
92
                       unsigned long offset,
93
                       void *p_data,
94
                       unsigned int bytes,
95
                       struct x86_emulate_ctxt *ctxt);
96
int hvmemul_do_pio_buffer(uint16_t port,
97
                          unsigned int size,
98
                          uint8_t dir,
99
                          void *buffer);
100
101
void hvm_dump_emulation_state(const char *loglvl, const char *prefix,
102
                              struct hvm_emulate_ctxt *hvmemul_ctxt, int rc);
103
104
#endif /* __ASM_X86_HVM_EMULATE_H__ */
105
106
/*
107
 * Local variables:
108
 * mode: C
109
 * c-file-style: "BSD"
110
 * c-basic-offset: 4
111
 * tab-width: 4
112
 * indent-tabs-mode: nil
113
 * End:
114
 */