Lines Matching full:iommu

54 #include <dev/iommu/busdma_iommu.h>
63 #include "iommu.h"
66 static MALLOC_DEFINE(M_IOMMU, "IOMMU", "IOMMU framework");
77 struct iommu_unit *iommu; member
86 struct iommu_unit *iommu; in iommu_domain_unmap_buf() local
89 iommu = iodom->iommu; in iommu_domain_unmap_buf()
90 error = IOMMU_UNMAP(iommu->dev, iodom, entry->start, entry->end - in iommu_domain_unmap_buf()
99 struct iommu_unit *iommu; in iommu_domain_map_buf() local
113 iommu = iodom->iommu; in iommu_domain_map_buf()
114 error = IOMMU_MAP(iommu->dev, iodom, va, ma, entry->end - in iommu_domain_map_buf()
125 iommu_domain_alloc(struct iommu_unit *iommu) in iommu_domain_alloc() argument
129 iodom = IOMMU_DOMAIN_ALLOC(iommu->dev, iommu); in iommu_domain_alloc()
135 iommu_domain_init(iommu, iodom, &domain_map_ops); in iommu_domain_alloc()
136 iodom->iommu = iommu; in iommu_domain_alloc()
145 struct iommu_unit *iommu; in iommu_domain_free() local
147 iommu = iodom->iommu; in iommu_domain_free()
149 IOMMU_LOCK(iommu); in iommu_domain_free()
159 IOMMU_DOMAIN_FREE(iommu->dev, iodom); in iommu_domain_free()
160 IOMMU_UNLOCK(iommu); in iommu_domain_free()
185 struct iommu_unit *iommu; in iommu_ctx_alloc() local
188 iommu = iodom->iommu; in iommu_ctx_alloc()
190 ioctx = IOMMU_CTX_ALLOC(iommu->dev, iodom, requester, disabled); in iommu_ctx_alloc()
204 struct iommu_unit *iommu; in iommu_ctx_init() local
208 iommu = iodom->iommu; in iommu_ctx_init()
210 error = IOMMU_CTX_INIT(iommu->dev, ioctx); in iommu_ctx_init()
229 struct iommu_unit *iommu; in iommu_lookup() local
233 iommu = entry->iommu; in iommu_lookup()
234 if (iommu->dev == dev) { in iommu_lookup()
236 return (iommu); in iommu_lookup()
249 struct iommu_unit *iommu; in iommu_get_ctx_ofw() local
266 "iommus", "#iommu-cells", &niommus); in iommu_get_ctx_ofw()
268 device_printf(dev, "%s can't get iommu list.\n", __func__); in iommu_get_ctx_ofw()
273 device_printf(dev, "%s iommu list is empty.\n", __func__); in iommu_get_ctx_ofw()
277 error = ofw_bus_parse_xref_list_alloc(node, "iommus", "#iommu-cells", in iommu_get_ctx_ofw()
280 device_printf(dev, "%s can't get iommu device xref.\n", in iommu_get_ctx_ofw()
287 device_printf(dev, "%s can't get iommu device.\n", __func__); in iommu_get_ctx_ofw()
291 iommu = iommu_lookup(iommu_dev); in iommu_get_ctx_ofw()
292 if (iommu == NULL) { in iommu_get_ctx_ofw()
293 device_printf(dev, "%s can't lookup iommu.\n", __func__); in iommu_get_ctx_ofw()
301 iodom = iommu_domain_alloc(iommu); in iommu_get_ctx_ofw()
315 error = IOMMU_OFW_MD_DATA(iommu->dev, ioctx, cells, ncells); in iommu_get_ctx_ofw()
323 IOMMU_CTX_FREE(iommu->dev, ioctx); in iommu_get_ctx_ofw()
333 iommu_get_ctx(struct iommu_unit *iommu, device_t requester, in iommu_get_ctx() argument
340 IOMMU_LOCK(iommu); in iommu_get_ctx()
341 ioctx = IOMMU_CTX_LOOKUP(iommu->dev, requester); in iommu_get_ctx()
343 IOMMU_UNLOCK(iommu); in iommu_get_ctx()
346 IOMMU_UNLOCK(iommu); in iommu_get_ctx()
352 iodom = iommu_domain_alloc(iommu); in iommu_get_ctx()
364 IOMMU_CTX_FREE(iommu->dev, ioctx); in iommu_get_ctx()
373 iommu_free_ctx_locked(struct iommu_unit *iommu, struct iommu_ctx *ioctx) in iommu_free_ctx_locked() argument
378 IOMMU_ASSERT_LOCKED(iommu); in iommu_free_ctx_locked()
382 IOMMU_CTX_FREE(iommu->dev, ioctx); in iommu_free_ctx_locked()
383 IOMMU_UNLOCK(iommu); in iommu_free_ctx_locked()
390 device_printf(iommu->dev, "Could not free a domain\n"); in iommu_free_ctx_locked()
428 iommu_register(struct iommu_unit *iommu) in iommu_register() argument
432 mtx_init(&iommu->lock, "IOMMU", NULL, MTX_DEF); in iommu_register()
435 entry->iommu = iommu; in iommu_register()
441 sysctl_ctx_init(&iommu->sysctl_ctx); in iommu_register()
442 iommu_init_busdma(iommu); in iommu_register()
448 iommu_unregister(struct iommu_unit *iommu) in iommu_unregister() argument
454 if (entry->iommu == iommu) { in iommu_unregister()
461 iommu_fini_busdma(iommu); in iommu_unregister()
462 sysctl_ctx_free(&iommu->sysctl_ctx); in iommu_unregister()
464 mtx_destroy(&iommu->lock); in iommu_unregister()
473 struct iommu_unit *iommu; in iommu_find() local
478 iommu = entry->iommu; in iommu_find()
479 error = IOMMU_FIND(iommu->dev, dev); in iommu_find()
482 return (entry->iommu); in iommu_find()
509 sx_init(&iommu_sx, "IOMMU list"); in iommu_init()
512 SYSINIT(iommu, SI_SUB_DRIVERS, SI_ORDER_FIRST, iommu_init, NULL);