Lines Matching refs:driver
88 const struct vfio_iommu_driver *driver) in vfio_iommu_driver_allowed() argument
92 return container->noiommu == (driver->ops == &vfio_noiommu_ops); in vfio_iommu_driver_allowed()
100 struct vfio_iommu_driver *driver, *tmp; in vfio_register_iommu_driver() local
105 driver = kzalloc(sizeof(*driver), GFP_KERNEL); in vfio_register_iommu_driver()
106 if (!driver) in vfio_register_iommu_driver()
109 driver->ops = ops; in vfio_register_iommu_driver()
117 kfree(driver); in vfio_register_iommu_driver()
122 list_add(&driver->vfio_next, &vfio.iommu_drivers_list); in vfio_register_iommu_driver()
132 struct vfio_iommu_driver *driver; in vfio_unregister_iommu_driver() local
135 list_for_each_entry(driver, &vfio.iommu_drivers_list, vfio_next) { in vfio_unregister_iommu_driver()
136 if (driver->ops == ops) { in vfio_unregister_iommu_driver()
137 list_del(&driver->vfio_next); in vfio_unregister_iommu_driver()
139 kfree(driver); in vfio_unregister_iommu_driver()
194 struct vfio_iommu_driver *driver; in vfio_container_ioctl_check_extension() local
199 driver = container->iommu_driver; in vfio_container_ioctl_check_extension()
210 if (!driver) { in vfio_container_ioctl_check_extension()
212 list_for_each_entry(driver, &vfio.iommu_drivers_list, in vfio_container_ioctl_check_extension()
217 driver)) in vfio_container_ioctl_check_extension()
219 if (!try_module_get(driver->ops->owner)) in vfio_container_ioctl_check_extension()
222 ret = driver->ops->ioctl(NULL, in vfio_container_ioctl_check_extension()
225 module_put(driver->ops->owner); in vfio_container_ioctl_check_extension()
231 ret = driver->ops->ioctl(container->iommu_data, in vfio_container_ioctl_check_extension()
242 struct vfio_iommu_driver *driver, in __vfio_container_attach_groups() argument
249 ret = driver->ops->attach_group(data, group->iommu_group, in __vfio_container_attach_groups()
260 driver->ops->detach_group(data, group->iommu_group); in __vfio_container_attach_groups()
269 struct vfio_iommu_driver *driver; in vfio_ioctl_set_iommu() local
288 list_for_each_entry(driver, &vfio.iommu_drivers_list, vfio_next) { in vfio_ioctl_set_iommu()
291 if (!vfio_iommu_driver_allowed(container, driver)) in vfio_ioctl_set_iommu()
293 if (!try_module_get(driver->ops->owner)) in vfio_ioctl_set_iommu()
303 if (driver->ops->ioctl(NULL, VFIO_CHECK_EXTENSION, arg) <= 0) { in vfio_ioctl_set_iommu()
304 module_put(driver->ops->owner); in vfio_ioctl_set_iommu()
308 data = driver->ops->open(arg); in vfio_ioctl_set_iommu()
311 module_put(driver->ops->owner); in vfio_ioctl_set_iommu()
315 ret = __vfio_container_attach_groups(container, driver, data); in vfio_ioctl_set_iommu()
317 driver->ops->release(data); in vfio_ioctl_set_iommu()
318 module_put(driver->ops->owner); in vfio_ioctl_set_iommu()
322 container->iommu_driver = driver; in vfio_ioctl_set_iommu()
337 struct vfio_iommu_driver *driver; in vfio_fops_unl_ioctl() local
355 driver = container->iommu_driver; in vfio_fops_unl_ioctl()
358 if (driver) /* passthrough all unrecognized ioctls */ in vfio_fops_unl_ioctl()
359 ret = driver->ops->ioctl(data, cmd, arg); in vfio_fops_unl_ioctl()
385 struct vfio_iommu_driver *driver = container->iommu_driver; in vfio_fops_release() local
387 if (driver && driver->ops->notify) in vfio_fops_release()
388 driver->ops->notify(container->iommu_data, in vfio_fops_release()
430 struct vfio_iommu_driver *driver; in vfio_container_attach_group() local
453 driver = container->iommu_driver; in vfio_container_attach_group()
454 if (driver) { in vfio_container_attach_group()
455 ret = driver->ops->attach_group(container->iommu_data, in vfio_container_attach_group()
482 struct vfio_iommu_driver *driver; in vfio_group_detach_container() local
489 driver = container->iommu_driver; in vfio_group_detach_container()
490 if (driver) in vfio_group_detach_container()
491 driver->ops->detach_group(container->iommu_data, in vfio_group_detach_container()
502 if (driver && list_empty(&container->group_list)) { in vfio_group_detach_container()
503 driver->ops->release(container->iommu_data); in vfio_group_detach_container()
504 module_put(driver->ops->owner); in vfio_group_detach_container()
560 struct vfio_iommu_driver *driver; in vfio_pin_pages() local
571 driver = container->iommu_driver; in vfio_pin_pages()
572 if (likely(driver && driver->ops->pin_pages)) in vfio_pin_pages()
573 ret = driver->ops->pin_pages(container->iommu_data, in vfio_pin_pages()
593 struct vfio_iommu_driver *driver; in vfio_unpin_pages() local
603 driver = container->iommu_driver; in vfio_unpin_pages()
605 driver->ops->unpin_pages(container->iommu_data, iova, npage); in vfio_unpin_pages()
630 struct vfio_iommu_driver *driver; in vfio_dma_rw() local
638 driver = container->iommu_driver; in vfio_dma_rw()
640 if (likely(driver && driver->ops->dma_rw)) in vfio_dma_rw()
641 ret = driver->ops->dma_rw(container->iommu_data, in vfio_dma_rw()