Lines Matching refs:device
68 struct device *dev;
80 struct device *dev;
91 struct device *dev;
205 struct device *dev; in vfio_create_group()
365 struct device *dev, in vfio_group_create_device()
369 struct vfio_device *device; in vfio_group_create_device() local
371 device = kzalloc(sizeof(*device), GFP_KERNEL); in vfio_group_create_device()
372 if (!device) in vfio_group_create_device()
375 kref_init(&device->kref); in vfio_group_create_device()
376 device->dev = dev; in vfio_group_create_device()
377 device->group = group; in vfio_group_create_device()
378 device->ops = ops; in vfio_group_create_device()
379 device->device_data = device_data; in vfio_group_create_device()
380 dev_set_drvdata(dev, device); in vfio_group_create_device()
386 list_add(&device->group_next, &group->device_list); in vfio_group_create_device()
389 return device; in vfio_group_create_device()
394 struct vfio_device *device = container_of(kref, in vfio_device_release() local
396 struct vfio_group *group = device->group; in vfio_device_release()
398 list_del(&device->group_next); in vfio_device_release()
401 dev_set_drvdata(device->dev, NULL); in vfio_device_release()
403 kfree(device); in vfio_device_release()
410 void vfio_device_put(struct vfio_device *device) in vfio_device_put() argument
412 struct vfio_group *group = device->group; in vfio_device_put()
413 kref_put_mutex(&device->kref, vfio_device_release, &group->device_lock); in vfio_device_put()
418 static void vfio_device_get(struct vfio_device *device) in vfio_device_get() argument
420 vfio_group_get(device->group); in vfio_device_get()
421 kref_get(&device->kref); in vfio_device_get()
425 struct device *dev) in vfio_group_get_device()
427 struct vfio_device *device; in vfio_group_get_device() local
430 list_for_each_entry(device, &group->device_list, group_next) { in vfio_group_get_device()
431 if (device->dev == dev) { in vfio_group_get_device()
432 vfio_device_get(device); in vfio_group_get_device()
434 return device; in vfio_group_get_device()
458 static bool vfio_dev_whitelisted(struct device *dev, struct device_driver *drv) in vfio_dev_whitelisted()
491 static int vfio_dev_viable(struct device *dev, void *data) in vfio_dev_viable()
494 struct vfio_device *device; in vfio_dev_viable() local
511 device = vfio_group_get_device(group, dev); in vfio_dev_viable()
512 if (device) { in vfio_dev_viable()
513 vfio_device_put(device); in vfio_dev_viable()
523 static int vfio_group_nb_add_dev(struct vfio_group *group, struct device *dev) in vfio_group_nb_add_dev()
525 struct vfio_device *device; in vfio_group_nb_add_dev() local
528 device = vfio_group_get_device(group, dev); in vfio_group_nb_add_dev()
529 if (WARN_ON_ONCE(device)) { in vfio_group_nb_add_dev()
530 vfio_device_put(device); in vfio_group_nb_add_dev()
545 static int vfio_group_nb_verify(struct vfio_group *group, struct device *dev) in vfio_group_nb_verify()
558 struct device *dev = data; in vfio_iommu_group_notifier()
630 int vfio_add_group_dev(struct device *dev, in vfio_add_group_dev()
635 struct vfio_device *device; in vfio_add_group_dev() local
656 device = vfio_group_get_device(group, dev); in vfio_add_group_dev()
657 if (device) { in vfio_add_group_dev()
660 vfio_device_put(device); in vfio_add_group_dev()
665 device = vfio_group_create_device(group, dev, ops, device_data); in vfio_add_group_dev()
666 if (IS_ERR(device)) { in vfio_add_group_dev()
668 return PTR_ERR(device); in vfio_add_group_dev()
689 struct vfio_device *vfio_device_get_from_dev(struct device *dev) in vfio_device_get_from_dev()
693 struct vfio_device *device; in vfio_device_get_from_dev() local
704 device = vfio_group_get_device(group, dev); in vfio_device_get_from_dev()
707 return device; in vfio_device_get_from_dev()
714 struct vfio_device *it, *device = NULL; in vfio_device_get_from_name() local
719 device = it; in vfio_device_get_from_name()
720 vfio_device_get(device); in vfio_device_get_from_name()
726 return device; in vfio_device_get_from_name()
732 void *vfio_device_data(struct vfio_device *device) in vfio_device_data() argument
734 return device->device_data; in vfio_device_data()
739 static bool vfio_dev_present(struct vfio_group *group, struct device *dev) in vfio_dev_present()
741 struct vfio_device *device; in vfio_dev_present() local
743 device = vfio_group_get_device(group, dev); in vfio_dev_present()
744 if (!device) in vfio_dev_present()
747 vfio_device_put(device); in vfio_dev_present()
754 void *vfio_del_group_dev(struct device *dev) in vfio_del_group_dev()
756 struct vfio_device *device = dev_get_drvdata(dev); in vfio_del_group_dev() local
757 struct vfio_group *group = device->group; in vfio_del_group_dev()
758 void *device_data = device->device_data; in vfio_del_group_dev()
788 vfio_device_put(device); in vfio_del_group_dev()
799 device = vfio_group_get_device(group, dev); in vfio_del_group_dev()
800 if (!device) in vfio_del_group_dev()
803 if (device->ops->request) in vfio_del_group_dev()
804 device->ops->request(device_data, i++); in vfio_del_group_dev()
806 vfio_device_put(device); in vfio_del_group_dev()
1236 struct vfio_device *device; in vfio_group_get_device_fd() local
1244 device = vfio_device_get_from_name(group, buf); in vfio_group_get_device_fd()
1245 if (!device) in vfio_group_get_device_fd()
1248 ret = device->ops->open(device->device_data); in vfio_group_get_device_fd()
1250 vfio_device_put(device); in vfio_group_get_device_fd()
1260 device->ops->release(device->device_data); in vfio_group_get_device_fd()
1261 vfio_device_put(device); in vfio_group_get_device_fd()
1266 device, O_RDWR); in vfio_group_get_device_fd()
1270 device->ops->release(device->device_data); in vfio_group_get_device_fd()
1271 vfio_device_put(device); in vfio_group_get_device_fd()
1423 struct vfio_device *device = filep->private_data; in vfio_device_fops_release() local
1425 device->ops->release(device->device_data); in vfio_device_fops_release()
1427 vfio_group_try_dissolve_container(device->group); in vfio_device_fops_release()
1429 vfio_device_put(device); in vfio_device_fops_release()
1437 struct vfio_device *device = filep->private_data; in vfio_device_fops_unl_ioctl() local
1439 if (unlikely(!device->ops->ioctl)) in vfio_device_fops_unl_ioctl()
1442 return device->ops->ioctl(device->device_data, cmd, arg); in vfio_device_fops_unl_ioctl()
1448 struct vfio_device *device = filep->private_data; in vfio_device_fops_read() local
1450 if (unlikely(!device->ops->read)) in vfio_device_fops_read()
1453 return device->ops->read(device->device_data, buf, count, ppos); in vfio_device_fops_read()
1460 struct vfio_device *device = filep->private_data; in vfio_device_fops_write() local
1462 if (unlikely(!device->ops->write)) in vfio_device_fops_write()
1465 return device->ops->write(device->device_data, buf, count, ppos); in vfio_device_fops_write()
1470 struct vfio_device *device = filep->private_data; in vfio_device_fops_mmap() local
1472 if (unlikely(!device->ops->mmap)) in vfio_device_fops_mmap()
1475 return device->ops->mmap(device->device_data, vma); in vfio_device_fops_mmap()
1570 static char *vfio_devnode(struct device *dev, umode_t *mode) in vfio_devnode()