1 #-
2 # SPDX-License-Identifier: BSD-2-Clause
3 #:
4 # Copyright (c) 2020 Ruslan Bukin <br@bsdpad.com>
5 #
6 # This software was developed by SRI International and the University of
7 # Cambridge Computer Laboratory (Department of Computer Science and
8 # Technology) under DARPA contract HR0011-18-C-0016 ("ECATS"), as part of the
9 # DARPA SSITH research programme.
10 #
11 # Redistribution and use in source and binary forms, with or without
12 # modification, are permitted provided that the following conditions
13 # are met:
14 # 1. Redistributions of source code must retain the above copyright
15 # notice, this list of conditions and the following disclaimer.
16 # 2. Redistributions in binary form must reproduce the above copyright
17 # notice, this list of conditions and the following disclaimer in the
18 # documentation and/or other materials provided with the distribution.
19 #
20 # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
21 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
24 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 # SUCH DAMAGE.
31 #
32 # $FreeBSD$
33 #
34
35 #include <sys/types.h>
36 #include <sys/taskqueue.h>
37 #include <sys/bus.h>
38 #include <sys/sysctl.h>
39 #include <sys/tree.h>
40 #include <vm/vm.h>
41 #include <dev/pci/pcireg.h>
42 #include <dev/pci/pcivar.h>
43 #include <dev/iommu/iommu.h>
44
45 INTERFACE iommu;
46
47 #
48 # Check if the iommu controller dev is responsible to serve traffic
49 # for a given child.
50 #
51 METHOD int find {
52 device_t dev;
53 device_t child;
54 };
55
56 #
57 # Map a virtual address VA to a physical address PA.
58 #
59 METHOD int map {
60 device_t dev;
61 struct iommu_domain *iodom;
62 vm_offset_t va;
63 vm_page_t *ma;
64 bus_size_t size;
65 vm_prot_t prot;
66 };
67
68 #
69 # Unmap a virtual address VA.
70 #
71 METHOD int unmap {
72 device_t dev;
73 struct iommu_domain *iodom;
74 vm_offset_t va;
75 bus_size_t size;
76 };
77
78 #
79 # Allocate an IOMMU domain.
80 #
81 METHOD struct iommu_domain * domain_alloc {
82 device_t dev;
83 struct iommu_unit *iommu;
84 };
85
86 #
87 # Release all the resources held by IOMMU domain.
88 #
89 METHOD void domain_free {
90 device_t dev;
91 struct iommu_domain *iodom;
92 };
93
94 #
95 # Find a domain allocated for a dev.
96 #
97 METHOD struct iommu_domain * domain_lookup {
98 device_t dev;
99 };
100
101 #
102 # Find an allocated context for a device.
103 #
104 METHOD struct iommu_ctx * ctx_lookup {
105 device_t dev;
106 device_t child;
107 };
108
109 #
110 # Allocate a new iommu context.
111 #
112 METHOD struct iommu_ctx * ctx_alloc {
113 device_t dev;
114 struct iommu_domain *iodom;
115 device_t child;
116 bool disabled;
117 };
118
119 #
120 # Free the iommu context.
121 #
122 METHOD void ctx_free {
123 device_t dev;
124 struct iommu_ctx *ioctx;
125 };
Cache object: ea6fe5239f374dea2c2fe1c17617c581
|