Lines Matching refs:driver

81 				      const struct vfio_iommu_driver *driver)
85 return container->noiommu == (driver->ops == &vfio_noiommu_ops);
89 * IOMMU driver registration
93 struct vfio_iommu_driver *driver, *tmp;
98 driver = kzalloc(sizeof(*driver), GFP_KERNEL);
99 if (!driver)
102 driver->ops = ops;
110 kfree(driver);
115 list_add(&driver->vfio_next, &vfio.iommu_drivers_list);
125 struct vfio_iommu_driver *driver;
128 list_for_each_entry(driver, &vfio.iommu_drivers_list, vfio_next) {
129 if (driver->ops == ops) {
130 list_del(&driver->vfio_next);
132 kfree(driver);
188 struct vfio_iommu_driver *driver;
193 driver = container->iommu_driver;
199 * If no driver is set, poll all registered drivers for
201 * a driver is already set, further queries will be passed
202 * only to that driver.
204 if (!driver) {
206 list_for_each_entry(driver, &vfio.iommu_drivers_list,
211 driver))
213 if (!try_module_get(driver->ops->owner))
216 ret = driver->ops->ioctl(NULL,
219 module_put(driver->ops->owner);
225 ret = driver->ops->ioctl(container->iommu_data,
236 struct vfio_iommu_driver *driver,
243 ret = driver->ops->attach_group(data, group->iommu_group,
254 driver->ops->detach_group(data, group->iommu_group);
263 struct vfio_iommu_driver *driver;
282 list_for_each_entry(driver, &vfio.iommu_drivers_list, vfio_next) {
285 if (!vfio_iommu_driver_allowed(container, driver))
287 if (!try_module_get(driver->ops->owner))
292 * so test which iommu driver reported support for this
294 * magic, allowing a single driver to support multiple
297 if (driver->ops->ioctl(NULL, VFIO_CHECK_EXTENSION, arg) <= 0) {
298 module_put(driver->ops->owner);
302 data = driver->ops->open(arg);
305 module_put(driver->ops->owner);
309 ret = __vfio_container_attach_groups(container, driver, data);
311 driver->ops->release(data);
312 module_put(driver->ops->owner);
316 container->iommu_driver = driver;
331 struct vfio_iommu_driver *driver;
349 driver = container->iommu_driver;
352 if (driver) /* passthrough all unrecognized ioctls */
353 ret = driver->ops->ioctl(data, cmd, arg);
419 struct vfio_iommu_driver *driver;
442 driver = container->iommu_driver;
443 if (driver) {
444 ret = driver->ops->attach_group(container->iommu_data,
471 struct vfio_iommu_driver *driver;
478 driver = container->iommu_driver;
479 if (driver)
480 driver->ops->detach_group(container->iommu_data,
491 if (driver && list_empty(&container->group_list)) {
492 driver->ops->release(container->iommu_data);
493 module_put(driver->ops->owner);
537 struct vfio_iommu_driver *driver = container->iommu_driver;
542 if (unlikely(!driver || !driver->ops->pin_pages))
544 return driver->ops->pin_pages(container->iommu_data, iommu_group, iova,
565 struct vfio_iommu_driver *driver = container->iommu_driver;
567 if (unlikely(!driver || !driver->ops->dma_rw))
569 return driver->ops->dma_rw(container->iommu_data, iova, data, len,