xref: /freebsd/sys/amd64/vmm/amd/amdv.c (revision b1f9167f94059fd55c630891d359bcff987bd7eb)
1 /*-
2  * Copyright (c) 2011 NetApp, Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY NETAPP, INC ``AS IS'' AND
15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED.  IN NO EVENT SHALL NETAPP, INC OR CONTRIBUTORS BE LIABLE
18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24  * SUCH DAMAGE.
25  *
26  * $FreeBSD$
27  */
28 
29 #include <sys/cdefs.h>
30 __FBSDID("$FreeBSD$");
31 
32 #include <sys/param.h>
33 #include <sys/systm.h>
34 #include <sys/errno.h>
35 #include <sys/smp.h>
36 
37 #include <machine/vmm.h>
38 #include "io/iommu.h"
39 
40 static int
41 amdv_init(int ipinum)
42 {
43 
44 	printf("amdv_init: not implemented\n");
45 	return (ENXIO);
46 }
47 
48 static int
49 amdv_cleanup(void)
50 {
51 
52 	printf("amdv_cleanup: not implemented\n");
53 	return (ENXIO);
54 }
55 
56 static void
57 amdv_resume(void)
58 {
59 }
60 
61 static void *
62 amdv_vminit(struct vm *vm, struct pmap *pmap)
63 {
64 
65 	printf("amdv_vminit: not implemented\n");
66 	return (NULL);
67 }
68 
69 static int
70 amdv_vmrun(void *arg, int vcpu, register_t rip, struct pmap *pmap,
71     void *rptr, void *sptr)
72 {
73 
74 	printf("amdv_vmrun: not implemented\n");
75 	return (ENXIO);
76 }
77 
78 static void
79 amdv_vmcleanup(void *arg)
80 {
81 
82 	printf("amdv_vmcleanup: not implemented\n");
83 	return;
84 }
85 
86 static int
87 amdv_getreg(void *arg, int vcpu, int regnum, uint64_t *retval)
88 {
89 
90 	printf("amdv_getreg: not implemented\n");
91 	return (EINVAL);
92 }
93 
94 static int
95 amdv_setreg(void *arg, int vcpu, int regnum, uint64_t val)
96 {
97 
98 	printf("amdv_setreg: not implemented\n");
99 	return (EINVAL);
100 }
101 
102 static int
103 amdv_getdesc(void *vmi, int vcpu, int num, struct seg_desc *desc)
104 {
105 
106 	printf("amdv_get_desc: not implemented\n");
107 	return (EINVAL);
108 }
109 
110 static int
111 amdv_setdesc(void *vmi, int vcpu, int num, struct seg_desc *desc)
112 {
113 
114 	printf("amdv_get_desc: not implemented\n");
115 	return (EINVAL);
116 }
117 
118 static int
119 amdv_getcap(void *arg, int vcpu, int type, int *retval)
120 {
121 
122 	printf("amdv_getcap: not implemented\n");
123 	return (EINVAL);
124 }
125 
126 static int
127 amdv_setcap(void *arg, int vcpu, int type, int val)
128 {
129 
130 	printf("amdv_setcap: not implemented\n");
131 	return (EINVAL);
132 }
133 
134 static struct vmspace *
135 amdv_vmspace_alloc(vm_offset_t min, vm_offset_t max)
136 {
137 
138 	printf("amdv_vmspace_alloc: not implemented\n");
139 	return (NULL);
140 }
141 
142 static void
143 amdv_vmspace_free(struct vmspace *vmspace)
144 {
145 
146 	printf("amdv_vmspace_free: not implemented\n");
147 	return;
148 }
149 
150 static struct vlapic *
151 amdv_vlapic_init(void *arg, int vcpuid)
152 {
153 
154 	panic("amdv_vlapic_init: not implmented");
155 }
156 
157 static void
158 amdv_vlapic_cleanup(void *arg, struct vlapic *vlapic)
159 {
160 
161 	panic("amdv_vlapic_cleanup: not implemented");
162 }
163 
164 struct vmm_ops vmm_ops_amd = {
165 	amdv_init,
166 	amdv_cleanup,
167 	amdv_resume,
168 	amdv_vminit,
169 	amdv_vmrun,
170 	amdv_vmcleanup,
171 	amdv_getreg,
172 	amdv_setreg,
173 	amdv_getdesc,
174 	amdv_setdesc,
175 	amdv_getcap,
176 	amdv_setcap,
177 	amdv_vmspace_alloc,
178 	amdv_vmspace_free,
179 	amdv_vlapic_init,
180 	amdv_vlapic_cleanup,
181 };
182 
183 static int
184 amd_iommu_init(void)
185 {
186 
187 	printf("amd_iommu_init: not implemented\n");
188 	return (ENXIO);
189 }
190 
191 static void
192 amd_iommu_cleanup(void)
193 {
194 
195 	printf("amd_iommu_cleanup: not implemented\n");
196 }
197 
198 static void
199 amd_iommu_enable(void)
200 {
201 
202 	printf("amd_iommu_enable: not implemented\n");
203 }
204 
205 static void
206 amd_iommu_disable(void)
207 {
208 
209 	printf("amd_iommu_disable: not implemented\n");
210 }
211 
212 static void *
213 amd_iommu_create_domain(vm_paddr_t maxaddr)
214 {
215 
216 	printf("amd_iommu_create_domain: not implemented\n");
217 	return (NULL);
218 }
219 
220 static void
221 amd_iommu_destroy_domain(void *domain)
222 {
223 
224 	printf("amd_iommu_destroy_domain: not implemented\n");
225 }
226 
227 static uint64_t
228 amd_iommu_create_mapping(void *domain, vm_paddr_t gpa, vm_paddr_t hpa,
229 			 uint64_t len)
230 {
231 
232 	printf("amd_iommu_create_mapping: not implemented\n");
233 	return (0);
234 }
235 
236 static uint64_t
237 amd_iommu_remove_mapping(void *domain, vm_paddr_t gpa, uint64_t len)
238 {
239 
240 	printf("amd_iommu_remove_mapping: not implemented\n");
241 	return (0);
242 }
243 
244 static void
245 amd_iommu_add_device(void *domain, uint16_t rid)
246 {
247 
248 	printf("amd_iommu_add_device: not implemented\n");
249 }
250 
251 static void
252 amd_iommu_remove_device(void *domain, uint16_t rid)
253 {
254 
255 	printf("amd_iommu_remove_device: not implemented\n");
256 }
257 
258 static void
259 amd_iommu_invalidate_tlb(void *domain)
260 {
261 
262 	printf("amd_iommu_invalidate_tlb: not implemented\n");
263 }
264 
265 struct iommu_ops iommu_ops_amd = {
266 	amd_iommu_init,
267 	amd_iommu_cleanup,
268 	amd_iommu_enable,
269 	amd_iommu_disable,
270 	amd_iommu_create_domain,
271 	amd_iommu_destroy_domain,
272 	amd_iommu_create_mapping,
273 	amd_iommu_remove_mapping,
274 	amd_iommu_add_device,
275 	amd_iommu_remove_device,
276 	amd_iommu_invalidate_tlb,
277 };
278