Coverage Report

Created: 2017-10-25 09:10

/root/src/xen/xen/include/asm/hvm/io.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * io.h: HVM IO support
3
 *
4
 * Copyright (c) 2004, Intel Corporation.
5
 *
6
 * This program is free software; you can redistribute it and/or modify it
7
 * under the terms and conditions of the GNU General Public License,
8
 * version 2, as published by the Free Software Foundation.
9
 *
10
 * This program is distributed in the hope it will be useful, but WITHOUT
11
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13
 * more details.
14
 *
15
 * You should have received a copy of the GNU General Public License along with
16
 * this program; If not, see <http://www.gnu.org/licenses/>.
17
 */
18
19
#ifndef __ASM_X86_HVM_IO_H__
20
#define __ASM_X86_HVM_IO_H__
21
22
#include <xen/mm.h>
23
#include <xen/pci.h>
24
#include <asm/hvm/vpic.h>
25
#include <asm/hvm/vioapic.h>
26
#include <public/hvm/ioreq.h>
27
#include <public/event_channel.h>
28
29
8
#define NR_IO_HANDLERS 32
30
31
typedef int (*hvm_mmio_read_t)(struct vcpu *v,
32
                               unsigned long addr,
33
                               unsigned int length,
34
                               unsigned long *val);
35
typedef int (*hvm_mmio_write_t)(struct vcpu *v,
36
                                unsigned long addr,
37
                                unsigned int length,
38
                                unsigned long val);
39
typedef int (*hvm_mmio_check_t)(struct vcpu *v, unsigned long addr);
40
41
struct hvm_mmio_ops {
42
    hvm_mmio_check_t check;
43
    hvm_mmio_read_t  read;
44
    hvm_mmio_write_t write;
45
};
46
47
static inline paddr_t hvm_mmio_first_byte(const ioreq_t *p)
48
1.92M
{
49
1.92M
    return unlikely(p->df) ?
50
0
           p->addr - (p->count - 1ul) * p->size :
51
1.92M
           p->addr;
52
1.92M
}
Unexecuted instantiation: cpu.c:hvm_mmio_first_byte
Unexecuted instantiation: acpi_mmcfg.c:hvm_mmio_first_byte
Unexecuted instantiation: ro-page-fault.c:hvm_mmio_first_byte
Unexecuted instantiation: misc-hypercalls.c:hvm_mmio_first_byte
Unexecuted instantiation: iret.c:hvm_mmio_first_byte
Unexecuted instantiation: emul-priv-op.c:hvm_mmio_first_byte
Unexecuted instantiation: emul-inv-op.c:hvm_mmio_first_byte
Unexecuted instantiation: emul-gate-op.c:hvm_mmio_first_byte
Unexecuted instantiation: descriptor-tables.c:hvm_mmio_first_byte
Unexecuted instantiation: callback.c:hvm_mmio_first_byte
Unexecuted instantiation: backtrace.c:hvm_mmio_first_byte
Unexecuted instantiation: op_model_athlon.c:hvm_mmio_first_byte
Unexecuted instantiation: op_model_ppro.c:hvm_mmio_first_byte
Unexecuted instantiation: op_model_p4.c:hvm_mmio_first_byte
Unexecuted instantiation: nmi_int.c:hvm_mmio_first_byte
Unexecuted instantiation: nested_ept.c:hvm_mmio_first_byte
Unexecuted instantiation: nested_hap.c:hvm_mmio_first_byte
Unexecuted instantiation: hap.c:hvm_mmio_first_byte
Unexecuted instantiation: multi.c:hvm_mmio_first_byte
Unexecuted instantiation: mem_sharing.c:hvm_mmio_first_byte
Unexecuted instantiation: mem_paging.c:hvm_mmio_first_byte
Unexecuted instantiation: guest_walk.c:hvm_mmio_first_byte
Unexecuted instantiation: altp2m.c:hvm_mmio_first_byte
Unexecuted instantiation: p2m-pod.c:hvm_mmio_first_byte
Unexecuted instantiation: p2m-ept.c:hvm_mmio_first_byte
Unexecuted instantiation: p2m-pt.c:hvm_mmio_first_byte
Unexecuted instantiation: p2m.c:hvm_mmio_first_byte
Unexecuted instantiation: paging.c:hvm_mmio_first_byte
Unexecuted instantiation: vvmx.c:hvm_mmio_first_byte
Unexecuted instantiation: vmx.c:hvm_mmio_first_byte
Unexecuted instantiation: vmcs.c:hvm_mmio_first_byte
Unexecuted instantiation: realmode.c:hvm_mmio_first_byte
Unexecuted instantiation: vmcb.c:hvm_mmio_first_byte
Unexecuted instantiation: svmdebug.c:hvm_mmio_first_byte
Unexecuted instantiation: svm.c:hvm_mmio_first_byte
Unexecuted instantiation: nestedsvm.c:hvm_mmio_first_byte
Unexecuted instantiation: intr.c:hvm_mmio_first_byte
Unexecuted instantiation: vpt.c:hvm_mmio_first_byte
Unexecuted instantiation: vpic.c:hvm_mmio_first_byte
Unexecuted instantiation: vmsi.c:hvm_mmio_first_byte
Unexecuted instantiation: vlapic.c:hvm_mmio_first_byte
Unexecuted instantiation: viridian.c:hvm_mmio_first_byte
Unexecuted instantiation: vioapic.c:hvm_mmio_first_byte
Unexecuted instantiation: stdvga.c:hvm_mmio_first_byte
Unexecuted instantiation: save.c:hvm_mmio_first_byte
Unexecuted instantiation: rtc.c:hvm_mmio_first_byte
Unexecuted instantiation: pmtimer.c:hvm_mmio_first_byte
Unexecuted instantiation: nestedhvm.c:hvm_mmio_first_byte
Unexecuted instantiation: mtrr.c:hvm_mmio_first_byte
Unexecuted instantiation: ioreq.c:hvm_mmio_first_byte
intercept.c:hvm_mmio_first_byte
Line
Count
Source
48
1.92M
{
49
1.92M
    return unlikely(p->df) ?
50
0
           p->addr - (p->count - 1ul) * p->size :
51
1.92M
           p->addr;
52
1.92M
}
Unexecuted instantiation: i8254.c:hvm_mmio_first_byte
Unexecuted instantiation: hvm.c:hvm_mmio_first_byte
Unexecuted instantiation: emulate.c:hvm_mmio_first_byte
Unexecuted instantiation: dm.c:hvm_mmio_first_byte
Unexecuted instantiation: asid.c:hvm_mmio_first_byte
Unexecuted instantiation: probe.c:hvm_mmio_first_byte
Unexecuted instantiation: delivery.c:hvm_mmio_first_byte
Unexecuted instantiation: default.c:hvm_mmio_first_byte
Unexecuted instantiation: x2apic.c:hvm_mmio_first_byte
Unexecuted instantiation: bigsmp.c:hvm_mmio_first_byte
Unexecuted instantiation: vmce.c:hvm_mmio_first_byte
Unexecuted instantiation: util.c:hvm_mmio_first_byte
Unexecuted instantiation: non-fatal.c:hvm_mmio_first_byte
Unexecuted instantiation: mce_intel.c:hvm_mmio_first_byte
Unexecuted instantiation: mce-apei.c:hvm_mmio_first_byte
Unexecuted instantiation: mce.c:hvm_mmio_first_byte
Unexecuted instantiation: mctelem.c:hvm_mmio_first_byte
Unexecuted instantiation: barrier.c:hvm_mmio_first_byte
Unexecuted instantiation: mcaction.c:hvm_mmio_first_byte
Unexecuted instantiation: mce_amd.c:hvm_mmio_first_byte
Unexecuted instantiation: amd_nonfatal.c:hvm_mmio_first_byte
Unexecuted instantiation: vpmu_intel.c:hvm_mmio_first_byte
Unexecuted instantiation: vpmu_amd.c:hvm_mmio_first_byte
Unexecuted instantiation: vpmu.c:hvm_mmio_first_byte
Unexecuted instantiation: mwait-idle.c:hvm_mmio_first_byte
Unexecuted instantiation: intel.c:hvm_mmio_first_byte
Unexecuted instantiation: common.c:hvm_mmio_first_byte
Unexecuted instantiation: amd.c:hvm_mmio_first_byte
Unexecuted instantiation: cpu_idle.c:hvm_mmio_first_byte
Unexecuted instantiation: suspend.c:hvm_mmio_first_byte
Unexecuted instantiation: power.c:hvm_mmio_first_byte
Unexecuted instantiation: lib.c:hvm_mmio_first_byte
Unexecuted instantiation: xstate.c:hvm_mmio_first_byte
Unexecuted instantiation: hpet.c:hvm_mmio_first_byte
Unexecuted instantiation: tboot.c:hvm_mmio_first_byte
Unexecuted instantiation: x86_emulate.c:hvm_mmio_first_byte
Unexecuted instantiation: usercopy.c:hvm_mmio_first_byte
Unexecuted instantiation: traps.c:hvm_mmio_first_byte
Unexecuted instantiation: smpboot.c:hvm_mmio_first_byte
Unexecuted instantiation: smp.c:hvm_mmio_first_byte
Unexecuted instantiation: setup.c:hvm_mmio_first_byte
Unexecuted instantiation: psr.c:hvm_mmio_first_byte
Unexecuted instantiation: platform_hypercall.c:hvm_mmio_first_byte
Unexecuted instantiation: physdev.c:hvm_mmio_first_byte
Unexecuted instantiation: numa.c:hvm_mmio_first_byte
Unexecuted instantiation: nmi.c:hvm_mmio_first_byte
Unexecuted instantiation: mpparse.c:hvm_mmio_first_byte
Unexecuted instantiation: mm.c:hvm_mmio_first_byte
Unexecuted instantiation: microcode.c:hvm_mmio_first_byte
Unexecuted instantiation: microcode_intel.c:hvm_mmio_first_byte
Unexecuted instantiation: microcode_amd.c:hvm_mmio_first_byte
Unexecuted instantiation: machine_kexec.c:hvm_mmio_first_byte
Unexecuted instantiation: irq.c:hvm_mmio_first_byte
Unexecuted instantiation: ioport_emulate.c:hvm_mmio_first_byte
Unexecuted instantiation: msr.c:hvm_mmio_first_byte
Unexecuted instantiation: io_apic.c:hvm_mmio_first_byte
Unexecuted instantiation: i8259.c:hvm_mmio_first_byte
Unexecuted instantiation: i387.c:hvm_mmio_first_byte
Unexecuted instantiation: hypercall.c:hvm_mmio_first_byte
Unexecuted instantiation: flushtlb.c:hvm_mmio_first_byte
Unexecuted instantiation: domain_page.c:hvm_mmio_first_byte
Unexecuted instantiation: debug.c:hvm_mmio_first_byte
Unexecuted instantiation: crash.c:hvm_mmio_first_byte
Unexecuted instantiation: compat.c:hvm_mmio_first_byte
Unexecuted instantiation: cpuid.c:hvm_mmio_first_byte
Unexecuted instantiation: apic.c:hvm_mmio_first_byte
Unexecuted instantiation: xsm_core.c:hvm_mmio_first_byte
Unexecuted instantiation: apei-io.c:hvm_mmio_first_byte
Unexecuted instantiation: erst.c:hvm_mmio_first_byte
Unexecuted instantiation: pmstat.c:hvm_mmio_first_byte
Unexecuted instantiation: iommu_guest.c:hvm_mmio_first_byte
Unexecuted instantiation: iommu_cmd.c:hvm_mmio_first_byte
Unexecuted instantiation: iommu_intr.c:hvm_mmio_first_byte
Unexecuted instantiation: pci_amd_iommu.c:hvm_mmio_first_byte
Unexecuted instantiation: iommu_map.c:hvm_mmio_first_byte
Unexecuted instantiation: iommu_init.c:hvm_mmio_first_byte
Unexecuted instantiation: ats.c:hvm_mmio_first_byte
Unexecuted instantiation: vtd.c:hvm_mmio_first_byte
Unexecuted instantiation: quirks.c:hvm_mmio_first_byte
Unexecuted instantiation: intremap.c:hvm_mmio_first_byte
Unexecuted instantiation: qinval.c:hvm_mmio_first_byte
Unexecuted instantiation: utils.c:hvm_mmio_first_byte
Unexecuted instantiation: dmar.c:hvm_mmio_first_byte
Unexecuted instantiation: pci.c:hvm_mmio_first_byte
Unexecuted instantiation: io.c:hvm_mmio_first_byte
Unexecuted instantiation: iommu.c:hvm_mmio_first_byte
Unexecuted instantiation: msix.c:hvm_mmio_first_byte
Unexecuted instantiation: msi.c:hvm_mmio_first_byte
Unexecuted instantiation: header.c:hvm_mmio_first_byte
Unexecuted instantiation: vpci.c:hvm_mmio_first_byte
Unexecuted instantiation: utility.c:hvm_mmio_first_byte
Unexecuted instantiation: cpufreq_misc_governors.c:hvm_mmio_first_byte
Unexecuted instantiation: cpufreq_ondemand.c:hvm_mmio_first_byte
Unexecuted instantiation: cpufreq.c:hvm_mmio_first_byte
Unexecuted instantiation: ehci-dbgp.c:hvm_mmio_first_byte
Unexecuted instantiation: ns16550.c:hvm_mmio_first_byte
Unexecuted instantiation: console.c:hvm_mmio_first_byte
Unexecuted instantiation: libelf-loader.c:hvm_mmio_first_byte
Unexecuted instantiation: llvm.c:hvm_mmio_first_byte
Unexecuted instantiation: tmem_control.c:hvm_mmio_first_byte
Unexecuted instantiation: tmem_xen.c:hvm_mmio_first_byte
Unexecuted instantiation: tmem.c:hvm_mmio_first_byte
Unexecuted instantiation: xenoprof.c:hvm_mmio_first_byte
Unexecuted instantiation: wait.c:hvm_mmio_first_byte
Unexecuted instantiation: vsprintf.c:hvm_mmio_first_byte
Unexecuted instantiation: vm_event.c:hvm_mmio_first_byte
Unexecuted instantiation: trace.c:hvm_mmio_first_byte
Unexecuted instantiation: timer.c:hvm_mmio_first_byte
Unexecuted instantiation: time.c:hvm_mmio_first_byte
Unexecuted instantiation: tasklet.c:hvm_mmio_first_byte
Unexecuted instantiation: sysctl.c:hvm_mmio_first_byte
Unexecuted instantiation: symbols.c:hvm_mmio_first_byte
Unexecuted instantiation: stop_machine.c:hvm_mmio_first_byte
Unexecuted instantiation: spinlock.c:hvm_mmio_first_byte
Unexecuted instantiation: softirq.c:hvm_mmio_first_byte
Unexecuted instantiation: shutdown.c:hvm_mmio_first_byte
Unexecuted instantiation: schedule.c:hvm_mmio_first_byte
Unexecuted instantiation: sched_null.c:hvm_mmio_first_byte
Unexecuted instantiation: sched_rt.c:hvm_mmio_first_byte
Unexecuted instantiation: sched_credit2.c:hvm_mmio_first_byte
Unexecuted instantiation: sched_credit.c:hvm_mmio_first_byte
Unexecuted instantiation: sched_arinc653.c:hvm_mmio_first_byte
Unexecuted instantiation: rcupdate.c:hvm_mmio_first_byte
Unexecuted instantiation: rangeset.c:hvm_mmio_first_byte
Unexecuted instantiation: page_alloc.c:hvm_mmio_first_byte
Unexecuted instantiation: multicall.c:hvm_mmio_first_byte
Unexecuted instantiation: monitor.c:hvm_mmio_first_byte
Unexecuted instantiation: memory.c:hvm_mmio_first_byte
Unexecuted instantiation: mem_access.c:hvm_mmio_first_byte
Unexecuted instantiation: kimage.c:hvm_mmio_first_byte
Unexecuted instantiation: kexec.c:hvm_mmio_first_byte
Unexecuted instantiation: keyhandler.c:hvm_mmio_first_byte
Unexecuted instantiation: kernel.c:hvm_mmio_first_byte
Unexecuted instantiation: guestcopy.c:hvm_mmio_first_byte
Unexecuted instantiation: grant_table.c:hvm_mmio_first_byte
Unexecuted instantiation: event_fifo.c:hvm_mmio_first_byte
Unexecuted instantiation: event_channel.c:hvm_mmio_first_byte
Unexecuted instantiation: event_2l.c:hvm_mmio_first_byte
Unexecuted instantiation: domain.c:hvm_mmio_first_byte
Unexecuted instantiation: domctl.c:hvm_mmio_first_byte
Unexecuted instantiation: cpupool.c:hvm_mmio_first_byte
Unexecuted instantiation: mmconfig_64.c:hvm_mmio_first_byte
53
54
static inline paddr_t hvm_mmio_last_byte(const ioreq_t *p)
55
120k
{
56
120k
    unsigned long size = p->size;
57
120k
58
120k
    return unlikely(p->df) ?
59
0
           p->addr + size - 1:
60
120k
           p->addr + (p->count * size) - 1;
61
120k
}
Unexecuted instantiation: mmconfig_64.c:hvm_mmio_last_byte
Unexecuted instantiation: acpi_mmcfg.c:hvm_mmio_last_byte
Unexecuted instantiation: ro-page-fault.c:hvm_mmio_last_byte
Unexecuted instantiation: misc-hypercalls.c:hvm_mmio_last_byte
Unexecuted instantiation: iret.c:hvm_mmio_last_byte
Unexecuted instantiation: emul-priv-op.c:hvm_mmio_last_byte
Unexecuted instantiation: emul-inv-op.c:hvm_mmio_last_byte
Unexecuted instantiation: emul-gate-op.c:hvm_mmio_last_byte
Unexecuted instantiation: descriptor-tables.c:hvm_mmio_last_byte
Unexecuted instantiation: callback.c:hvm_mmio_last_byte
Unexecuted instantiation: backtrace.c:hvm_mmio_last_byte
Unexecuted instantiation: op_model_athlon.c:hvm_mmio_last_byte
Unexecuted instantiation: op_model_ppro.c:hvm_mmio_last_byte
Unexecuted instantiation: op_model_p4.c:hvm_mmio_last_byte
Unexecuted instantiation: nmi_int.c:hvm_mmio_last_byte
Unexecuted instantiation: nested_ept.c:hvm_mmio_last_byte
Unexecuted instantiation: nested_hap.c:hvm_mmio_last_byte
Unexecuted instantiation: hap.c:hvm_mmio_last_byte
Unexecuted instantiation: multi.c:hvm_mmio_last_byte
Unexecuted instantiation: mem_sharing.c:hvm_mmio_last_byte
Unexecuted instantiation: mem_paging.c:hvm_mmio_last_byte
Unexecuted instantiation: guest_walk.c:hvm_mmio_last_byte
Unexecuted instantiation: altp2m.c:hvm_mmio_last_byte
Unexecuted instantiation: p2m-pod.c:hvm_mmio_last_byte
Unexecuted instantiation: p2m-ept.c:hvm_mmio_last_byte
Unexecuted instantiation: p2m-pt.c:hvm_mmio_last_byte
Unexecuted instantiation: p2m.c:hvm_mmio_last_byte
Unexecuted instantiation: paging.c:hvm_mmio_last_byte
Unexecuted instantiation: vvmx.c:hvm_mmio_last_byte
Unexecuted instantiation: vmx.c:hvm_mmio_last_byte
Unexecuted instantiation: vmcs.c:hvm_mmio_last_byte
Unexecuted instantiation: realmode.c:hvm_mmio_last_byte
Unexecuted instantiation: vmcb.c:hvm_mmio_last_byte
Unexecuted instantiation: svmdebug.c:hvm_mmio_last_byte
Unexecuted instantiation: svm.c:hvm_mmio_last_byte
Unexecuted instantiation: nestedsvm.c:hvm_mmio_last_byte
Unexecuted instantiation: intr.c:hvm_mmio_last_byte
Unexecuted instantiation: vpt.c:hvm_mmio_last_byte
Unexecuted instantiation: vpic.c:hvm_mmio_last_byte
Unexecuted instantiation: vmsi.c:hvm_mmio_last_byte
Unexecuted instantiation: vlapic.c:hvm_mmio_last_byte
Unexecuted instantiation: viridian.c:hvm_mmio_last_byte
Unexecuted instantiation: vioapic.c:hvm_mmio_last_byte
Unexecuted instantiation: stdvga.c:hvm_mmio_last_byte
Unexecuted instantiation: save.c:hvm_mmio_last_byte
Unexecuted instantiation: rtc.c:hvm_mmio_last_byte
Unexecuted instantiation: pmtimer.c:hvm_mmio_last_byte
Unexecuted instantiation: nestedhvm.c:hvm_mmio_last_byte
Unexecuted instantiation: mtrr.c:hvm_mmio_last_byte
Unexecuted instantiation: ioreq.c:hvm_mmio_last_byte
intercept.c:hvm_mmio_last_byte
Line
Count
Source
55
120k
{
56
120k
    unsigned long size = p->size;
57
120k
58
120k
    return unlikely(p->df) ?
59
0
           p->addr + size - 1:
60
120k
           p->addr + (p->count * size) - 1;
61
120k
}
Unexecuted instantiation: i8254.c:hvm_mmio_last_byte
Unexecuted instantiation: hvm.c:hvm_mmio_last_byte
Unexecuted instantiation: emulate.c:hvm_mmio_last_byte
Unexecuted instantiation: dm.c:hvm_mmio_last_byte
Unexecuted instantiation: asid.c:hvm_mmio_last_byte
Unexecuted instantiation: probe.c:hvm_mmio_last_byte
Unexecuted instantiation: delivery.c:hvm_mmio_last_byte
Unexecuted instantiation: default.c:hvm_mmio_last_byte
Unexecuted instantiation: x2apic.c:hvm_mmio_last_byte
Unexecuted instantiation: bigsmp.c:hvm_mmio_last_byte
Unexecuted instantiation: vmce.c:hvm_mmio_last_byte
Unexecuted instantiation: util.c:hvm_mmio_last_byte
Unexecuted instantiation: non-fatal.c:hvm_mmio_last_byte
Unexecuted instantiation: mce_intel.c:hvm_mmio_last_byte
Unexecuted instantiation: mce-apei.c:hvm_mmio_last_byte
Unexecuted instantiation: mce.c:hvm_mmio_last_byte
Unexecuted instantiation: mctelem.c:hvm_mmio_last_byte
Unexecuted instantiation: barrier.c:hvm_mmio_last_byte
Unexecuted instantiation: mcaction.c:hvm_mmio_last_byte
Unexecuted instantiation: mce_amd.c:hvm_mmio_last_byte
Unexecuted instantiation: amd_nonfatal.c:hvm_mmio_last_byte
Unexecuted instantiation: vpmu_intel.c:hvm_mmio_last_byte
Unexecuted instantiation: vpmu_amd.c:hvm_mmio_last_byte
Unexecuted instantiation: vpmu.c:hvm_mmio_last_byte
Unexecuted instantiation: mwait-idle.c:hvm_mmio_last_byte
Unexecuted instantiation: intel.c:hvm_mmio_last_byte
Unexecuted instantiation: common.c:hvm_mmio_last_byte
Unexecuted instantiation: amd.c:hvm_mmio_last_byte
Unexecuted instantiation: cpu_idle.c:hvm_mmio_last_byte
Unexecuted instantiation: suspend.c:hvm_mmio_last_byte
Unexecuted instantiation: power.c:hvm_mmio_last_byte
Unexecuted instantiation: lib.c:hvm_mmio_last_byte
Unexecuted instantiation: xstate.c:hvm_mmio_last_byte
Unexecuted instantiation: hpet.c:hvm_mmio_last_byte
Unexecuted instantiation: tboot.c:hvm_mmio_last_byte
Unexecuted instantiation: x86_emulate.c:hvm_mmio_last_byte
Unexecuted instantiation: usercopy.c:hvm_mmio_last_byte
Unexecuted instantiation: traps.c:hvm_mmio_last_byte
Unexecuted instantiation: smpboot.c:hvm_mmio_last_byte
Unexecuted instantiation: smp.c:hvm_mmio_last_byte
Unexecuted instantiation: setup.c:hvm_mmio_last_byte
Unexecuted instantiation: psr.c:hvm_mmio_last_byte
Unexecuted instantiation: platform_hypercall.c:hvm_mmio_last_byte
Unexecuted instantiation: physdev.c:hvm_mmio_last_byte
Unexecuted instantiation: numa.c:hvm_mmio_last_byte
Unexecuted instantiation: nmi.c:hvm_mmio_last_byte
Unexecuted instantiation: mpparse.c:hvm_mmio_last_byte
Unexecuted instantiation: mm.c:hvm_mmio_last_byte
Unexecuted instantiation: microcode.c:hvm_mmio_last_byte
Unexecuted instantiation: microcode_intel.c:hvm_mmio_last_byte
Unexecuted instantiation: microcode_amd.c:hvm_mmio_last_byte
Unexecuted instantiation: machine_kexec.c:hvm_mmio_last_byte
Unexecuted instantiation: irq.c:hvm_mmio_last_byte
Unexecuted instantiation: ioport_emulate.c:hvm_mmio_last_byte
Unexecuted instantiation: msr.c:hvm_mmio_last_byte
Unexecuted instantiation: io_apic.c:hvm_mmio_last_byte
Unexecuted instantiation: i8259.c:hvm_mmio_last_byte
Unexecuted instantiation: i387.c:hvm_mmio_last_byte
Unexecuted instantiation: hypercall.c:hvm_mmio_last_byte
Unexecuted instantiation: flushtlb.c:hvm_mmio_last_byte
Unexecuted instantiation: domain_page.c:hvm_mmio_last_byte
Unexecuted instantiation: debug.c:hvm_mmio_last_byte
Unexecuted instantiation: crash.c:hvm_mmio_last_byte
Unexecuted instantiation: compat.c:hvm_mmio_last_byte
Unexecuted instantiation: cpuid.c:hvm_mmio_last_byte
Unexecuted instantiation: apic.c:hvm_mmio_last_byte
Unexecuted instantiation: xsm_core.c:hvm_mmio_last_byte
Unexecuted instantiation: apei-io.c:hvm_mmio_last_byte
Unexecuted instantiation: erst.c:hvm_mmio_last_byte
Unexecuted instantiation: pmstat.c:hvm_mmio_last_byte
Unexecuted instantiation: iommu_guest.c:hvm_mmio_last_byte
Unexecuted instantiation: iommu_cmd.c:hvm_mmio_last_byte
Unexecuted instantiation: iommu_intr.c:hvm_mmio_last_byte
Unexecuted instantiation: pci_amd_iommu.c:hvm_mmio_last_byte
Unexecuted instantiation: iommu_map.c:hvm_mmio_last_byte
Unexecuted instantiation: iommu_init.c:hvm_mmio_last_byte
Unexecuted instantiation: ats.c:hvm_mmio_last_byte
Unexecuted instantiation: vtd.c:hvm_mmio_last_byte
Unexecuted instantiation: quirks.c:hvm_mmio_last_byte
Unexecuted instantiation: intremap.c:hvm_mmio_last_byte
Unexecuted instantiation: qinval.c:hvm_mmio_last_byte
Unexecuted instantiation: utils.c:hvm_mmio_last_byte
Unexecuted instantiation: dmar.c:hvm_mmio_last_byte
Unexecuted instantiation: pci.c:hvm_mmio_last_byte
Unexecuted instantiation: io.c:hvm_mmio_last_byte
Unexecuted instantiation: iommu.c:hvm_mmio_last_byte
Unexecuted instantiation: msix.c:hvm_mmio_last_byte
Unexecuted instantiation: msi.c:hvm_mmio_last_byte
Unexecuted instantiation: header.c:hvm_mmio_last_byte
Unexecuted instantiation: vpci.c:hvm_mmio_last_byte
Unexecuted instantiation: utility.c:hvm_mmio_last_byte
Unexecuted instantiation: cpufreq_misc_governors.c:hvm_mmio_last_byte
Unexecuted instantiation: cpufreq_ondemand.c:hvm_mmio_last_byte
Unexecuted instantiation: cpufreq.c:hvm_mmio_last_byte
Unexecuted instantiation: ehci-dbgp.c:hvm_mmio_last_byte
Unexecuted instantiation: ns16550.c:hvm_mmio_last_byte
Unexecuted instantiation: console.c:hvm_mmio_last_byte
Unexecuted instantiation: libelf-loader.c:hvm_mmio_last_byte
Unexecuted instantiation: llvm.c:hvm_mmio_last_byte
Unexecuted instantiation: tmem_control.c:hvm_mmio_last_byte
Unexecuted instantiation: tmem_xen.c:hvm_mmio_last_byte
Unexecuted instantiation: tmem.c:hvm_mmio_last_byte
Unexecuted instantiation: xenoprof.c:hvm_mmio_last_byte
Unexecuted instantiation: wait.c:hvm_mmio_last_byte
Unexecuted instantiation: vsprintf.c:hvm_mmio_last_byte
Unexecuted instantiation: vm_event.c:hvm_mmio_last_byte
Unexecuted instantiation: trace.c:hvm_mmio_last_byte
Unexecuted instantiation: timer.c:hvm_mmio_last_byte
Unexecuted instantiation: time.c:hvm_mmio_last_byte
Unexecuted instantiation: tasklet.c:hvm_mmio_last_byte
Unexecuted instantiation: sysctl.c:hvm_mmio_last_byte
Unexecuted instantiation: symbols.c:hvm_mmio_last_byte
Unexecuted instantiation: stop_machine.c:hvm_mmio_last_byte
Unexecuted instantiation: spinlock.c:hvm_mmio_last_byte
Unexecuted instantiation: softirq.c:hvm_mmio_last_byte
Unexecuted instantiation: shutdown.c:hvm_mmio_last_byte
Unexecuted instantiation: schedule.c:hvm_mmio_last_byte
Unexecuted instantiation: sched_null.c:hvm_mmio_last_byte
Unexecuted instantiation: sched_rt.c:hvm_mmio_last_byte
Unexecuted instantiation: sched_credit2.c:hvm_mmio_last_byte
Unexecuted instantiation: sched_credit.c:hvm_mmio_last_byte
Unexecuted instantiation: sched_arinc653.c:hvm_mmio_last_byte
Unexecuted instantiation: rcupdate.c:hvm_mmio_last_byte
Unexecuted instantiation: rangeset.c:hvm_mmio_last_byte
Unexecuted instantiation: page_alloc.c:hvm_mmio_last_byte
Unexecuted instantiation: multicall.c:hvm_mmio_last_byte
Unexecuted instantiation: monitor.c:hvm_mmio_last_byte
Unexecuted instantiation: memory.c:hvm_mmio_last_byte
Unexecuted instantiation: mem_access.c:hvm_mmio_last_byte
Unexecuted instantiation: kimage.c:hvm_mmio_last_byte
Unexecuted instantiation: kexec.c:hvm_mmio_last_byte
Unexecuted instantiation: keyhandler.c:hvm_mmio_last_byte
Unexecuted instantiation: kernel.c:hvm_mmio_last_byte
Unexecuted instantiation: guestcopy.c:hvm_mmio_last_byte
Unexecuted instantiation: grant_table.c:hvm_mmio_last_byte
Unexecuted instantiation: event_fifo.c:hvm_mmio_last_byte
Unexecuted instantiation: event_channel.c:hvm_mmio_last_byte
Unexecuted instantiation: event_2l.c:hvm_mmio_last_byte
Unexecuted instantiation: domain.c:hvm_mmio_last_byte
Unexecuted instantiation: domctl.c:hvm_mmio_last_byte
Unexecuted instantiation: cpupool.c:hvm_mmio_last_byte
Unexecuted instantiation: cpu.c:hvm_mmio_last_byte
62
63
typedef int (*portio_action_t)(
64
    int dir, unsigned int port, unsigned int bytes, uint32_t *val);
65
66
struct hvm_io_handler {
67
    union {
68
        struct {
69
            const struct hvm_mmio_ops *ops;
70
        } mmio;
71
        struct {
72
            unsigned int port, size;
73
            portio_action_t action;
74
        } portio;
75
    };
76
    const struct hvm_io_ops *ops;
77
    uint8_t type;
78
};
79
80
typedef int (*hvm_io_read_t)(const struct hvm_io_handler *,
81
                             uint64_t addr,
82
                             uint32_t size,
83
                             uint64_t *data);
84
typedef int (*hvm_io_write_t)(const struct hvm_io_handler *,
85
                              uint64_t addr,
86
                              uint32_t size,
87
                              uint64_t data);
88
typedef bool_t (*hvm_io_accept_t)(const struct hvm_io_handler *,
89
                                  const ioreq_t *p);
90
typedef void (*hvm_io_complete_t)(const struct hvm_io_handler *);
91
92
struct hvm_io_ops {
93
    hvm_io_accept_t   accept;
94
    hvm_io_read_t     read;
95
    hvm_io_write_t    write;
96
    hvm_io_complete_t complete;
97
};
98
99
int hvm_process_io_intercept(const struct hvm_io_handler *handler,
100
                             ioreq_t *p);
101
102
int hvm_io_intercept(ioreq_t *p);
103
104
struct hvm_io_handler *hvm_next_io_handler(struct domain *d);
105
106
bool_t hvm_mmio_internal(paddr_t gpa);
107
108
void register_mmio_handler(struct domain *d,
109
                           const struct hvm_mmio_ops *ops);
110
111
void register_portio_handler(
112
    struct domain *d, unsigned int port, unsigned int size,
113
    portio_action_t action);
114
115
void relocate_portio_handler(
116
    struct domain *d, unsigned int old_port, unsigned int new_port,
117
    unsigned int size);
118
119
void send_timeoffset_req(unsigned long timeoff);
120
void send_invalidate_req(void);
121
bool handle_mmio_with_translation(unsigned long gla, unsigned long gpfn,
122
                                  struct npfec);
123
bool handle_pio(uint16_t port, unsigned int size, int dir);
124
void hvm_interrupt_post(struct vcpu *v, int vector, int type);
125
void hvm_dpci_eoi(struct domain *d, unsigned int guest_irq,
126
                  const union vioapic_redir_entry *ent);
127
void msix_write_completion(struct vcpu *);
128
void msixtbl_init(struct domain *d);
129
130
/* Arch-specific MSI data for vPCI. */
131
struct vpci_arch_msi {
132
    int pirq;
133
};
134
135
/* Arch-specific MSI-X entry data for vPCI. */
136
struct vpci_arch_msix_entry {
137
    int pirq;
138
};
139
140
enum stdvga_cache_state {
141
    STDVGA_CACHE_UNINITIALIZED,
142
    STDVGA_CACHE_ENABLED,
143
    STDVGA_CACHE_DISABLED
144
};
145
146
struct hvm_hw_stdvga {
147
    uint8_t sr_index;
148
    uint8_t sr[8];
149
    uint8_t gr_index;
150
    uint8_t gr[9];
151
    bool_t stdvga;
152
    enum stdvga_cache_state cache;
153
    uint32_t latch;
154
    struct page_info *vram_page[64];  /* shadow of 0xa0000-0xaffff */
155
    spinlock_t lock;
156
};
157
158
void stdvga_init(struct domain *d);
159
void stdvga_deinit(struct domain *d);
160
161
extern void hvm_dpci_msi_eoi(struct domain *d, int vector);
162
163
/* Decode a PCI port IO access into a bus/slot/func/reg. */
164
unsigned int hvm_pci_decode_addr(unsigned int cf8, unsigned int addr,
165
                                 pci_sbdf_t *sbdf);
166
167
/*
168
 * HVM port IO handler that performs forwarding of guest IO ports into machine
169
 * IO ports.
170
 */
171
void register_g2m_portio_handler(struct domain *d);
172
173
/* HVM port IO handler for vPCI accesses. */
174
void register_vpci_portio_handler(struct domain *d);
175
176
/* HVM MMIO handler for PCI MMCFG accesses. */
177
int register_vpci_mmcfg_handler(struct domain *d, paddr_t addr,
178
                                unsigned int start_bus, unsigned int end_bus,
179
                                unsigned int seg);
180
/* Destroy tracked MMCFG areas. */
181
void destroy_vpci_mmcfg(struct list_head *domain_mmcfg);
182
183
#endif /* __ASM_X86_HVM_IO_H__ */
184
185
186
/*
187
 * Local variables:
188
 * mode: C
189
 * c-file-style: "BSD"
190
 * c-basic-offset: 4
191
 * tab-width: 4
192
 * indent-tabs-mode: nil
193
 * End:
194
 */