/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_ |