Coverage Report

Created: 2017-10-25 09:10

/root/src/xen/xen/drivers/passthrough/vtd/extern.h
Line
Count
Source
1
/*
2
 * Copyright (c) 2006, Intel Corporation.
3
 *
4
 * This program is free software; you can redistribute it and/or modify it
5
 * under the terms and conditions of the GNU General Public License,
6
 * version 2, as published by the Free Software Foundation.
7
 *
8
 * This program is distributed in the hope it will be useful, but WITHOUT
9
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
11
 * more details.
12
 *
13
 * You should have received a copy of the GNU General Public License along with
14
 * this program; If not, see <http://www.gnu.org/licenses/>.
15
 *
16
 * Copyright (C) Allen Kay <allen.m.kay@intel.com>
17
 * Copyright (C) Weidong Han <weidong.han@intel.com>
18
 */
19
20
#ifndef _VTD_EXTERN_H_
21
#define _VTD_EXTERN_H_
22
23
#include "dmar.h"
24
#include <xen/keyhandler.h>
25
26
78
#define VTDPREFIX "[VT-D]"
27
28
struct pci_ats_dev;
29
extern bool_t rwbf_quirk;
30
31
void print_iommu_regs(struct acpi_drhd_unit *drhd);
32
void print_vtd_entries(struct iommu *iommu, int bus, int devfn, u64 gmfn);
33
keyhandler_fn_t vtd_dump_iommu_info;
34
35
int enable_qinval(struct iommu *iommu);
36
void disable_qinval(struct iommu *iommu);
37
int enable_intremap(struct iommu *iommu, int eim);
38
void disable_intremap(struct iommu *iommu);
39
40
void iommu_flush_cache_entry(void *addr, unsigned int size);
41
void iommu_flush_cache_page(void *addr, unsigned long npages);
42
int iommu_alloc(struct acpi_drhd_unit *drhd);
43
void iommu_free(struct acpi_drhd_unit *drhd);
44
45
int iommu_flush_iec_global(struct iommu *iommu);
46
int iommu_flush_iec_index(struct iommu *iommu, u8 im, u16 iidx);
47
void clear_fault_bits(struct iommu *iommu);
48
49
struct iommu * ioapic_to_iommu(unsigned int apic_id);
50
struct iommu * hpet_to_iommu(unsigned int hpet_id);
51
struct acpi_drhd_unit * ioapic_to_drhd(unsigned int apic_id);
52
struct acpi_drhd_unit * hpet_to_drhd(unsigned int hpet_id);
53
struct acpi_drhd_unit * iommu_to_drhd(struct iommu *iommu);
54
struct acpi_rhsa_unit * drhd_to_rhsa(struct acpi_drhd_unit *drhd);
55
56
struct acpi_drhd_unit * find_ats_dev_drhd(struct iommu *iommu);
57
58
int ats_device(const struct pci_dev *, const struct acpi_drhd_unit *);
59
60
int dev_invalidate_iotlb(struct iommu *iommu, u16 did,
61
                         u64 addr, unsigned int size_order, u64 type);
62
63
int __must_check qinval_device_iotlb_sync(struct iommu *iommu,
64
                                          struct pci_dev *pdev,
65
                                          u16 did, u16 size, u64 addr);
66
67
unsigned int get_cache_line_size(void);
68
void cacheline_flush(char *);
69
void flush_all_cache(void);
70
71
u64 alloc_pgtable_maddr(struct acpi_drhd_unit *drhd, unsigned long npages);
72
void free_pgtable_maddr(u64 maddr);
73
void *map_vtd_domain_page(u64 maddr);
74
void unmap_vtd_domain_page(void *va);
75
int domain_context_mapping_one(struct domain *domain, struct iommu *iommu,
76
                               u8 bus, u8 devfn, const struct pci_dev *);
77
int domain_context_unmap_one(struct domain *domain, struct iommu *iommu,
78
                             u8 bus, u8 devfn);
79
int intel_iommu_get_reserved_device_memory(iommu_grdm_t *func, void *ctxt);
80
81
unsigned int io_apic_read_remap_rte(unsigned int apic, unsigned int reg);
82
void io_apic_write_remap_rte(unsigned int apic,
83
                             unsigned int reg, unsigned int value);
84
85
struct msi_desc;
86
struct msi_msg;
87
void msi_msg_read_remap_rte(struct msi_desc *, struct msi_msg *);
88
int msi_msg_write_remap_rte(struct msi_desc *, struct msi_msg *);
89
90
int intel_setup_hpet_msi(struct msi_desc *);
91
92
int is_igd_vt_enabled_quirk(void);
93
void platform_quirks_init(void);
94
void vtd_ops_preamble_quirk(struct iommu* iommu);
95
void vtd_ops_postamble_quirk(struct iommu* iommu);
96
int __must_check me_wifi_quirk(struct domain *domain,
97
                               u8 bus, u8 devfn, int map);
98
void pci_vtd_quirk(const struct pci_dev *);
99
bool_t platform_supports_intremap(void);
100
bool_t platform_supports_x2apic(void);
101
102
void vtd_set_hwdom_mapping(struct domain *d);
103
104
#endif // _VTD_EXTERN_H_