Lines Matching full:device
12 void vfio_init_device_cdev(struct vfio_device *device) in vfio_init_device_cdev() argument
14 device->device.devt = MKDEV(MAJOR(device_devt), device->index); in vfio_init_device_cdev()
15 cdev_init(&device->cdev, &vfio_device_fops); in vfio_init_device_cdev()
16 device->cdev.owner = THIS_MODULE; in vfio_init_device_cdev()
20 * device access via the fd opened by this function is blocked until
25 struct vfio_device *device = container_of(inode->i_cdev, in vfio_device_fops_cdev_open() local
31 if (!vfio_device_try_get_registration(device)) in vfio_device_fops_cdev_open()
34 df = vfio_allocate_device_file(device); in vfio_device_fops_cdev_open()
43 * Use the pseudo fs inode on the device to link all mmaps in vfio_device_fops_cdev_open()
45 * associated to this device using unmap_mapping_range(). in vfio_device_fops_cdev_open()
47 filep->f_mapping = device->inode->i_mapping; in vfio_device_fops_cdev_open()
52 vfio_device_put_registration(device); in vfio_device_fops_cdev_open()
59 vfio_device_get_kvm_safe(df->device, df->kvm); in vfio_df_get_kvm_safe()
63 static int vfio_df_check_token(struct vfio_device *device, in vfio_df_check_token() argument
68 if (!device->ops->match_token_uuid) { in vfio_df_check_token()
75 return device->ops->match_token_uuid(device, NULL); in vfio_df_check_token()
80 return device->ops->match_token_uuid(device, &uuid); in vfio_df_check_token()
87 struct vfio_device *device = df->device; in vfio_df_ioctl_bind_iommufd() local
113 ret = vfio_device_block_group(device); in vfio_df_ioctl_bind_iommufd()
117 mutex_lock(&device->dev_set->lock); in vfio_df_ioctl_bind_iommufd()
118 /* one device cannot be bound twice */ in vfio_df_ioctl_bind_iommufd()
124 ret = vfio_df_check_token(device, &bind); in vfio_df_ioctl_bind_iommufd()
136 * Before the device open, get the KVM pointer currently in vfio_df_ioctl_bind_iommufd()
137 * associated with the device file (if there is) and obtain in vfio_df_ioctl_bind_iommufd()
138 * a reference. This reference is held until device closed. in vfio_df_ioctl_bind_iommufd()
139 * Save the pointer in the device for use by drivers. in vfio_df_ioctl_bind_iommufd()
152 device->cdev_opened = true; in vfio_df_ioctl_bind_iommufd()
158 mutex_unlock(&device->dev_set->lock); in vfio_df_ioctl_bind_iommufd()
164 vfio_device_put_kvm(device); in vfio_df_ioctl_bind_iommufd()
168 mutex_unlock(&device->dev_set->lock); in vfio_df_ioctl_bind_iommufd()
169 vfio_device_unblock_group(device); in vfio_df_ioctl_bind_iommufd()
175 struct vfio_device *device = df->device; in vfio_df_unbind_iommufd() local
185 mutex_lock(&device->dev_set->lock); in vfio_df_unbind_iommufd()
187 vfio_device_put_kvm(device); in vfio_df_unbind_iommufd()
189 device->cdev_opened = false; in vfio_df_unbind_iommufd()
190 mutex_unlock(&device->dev_set->lock); in vfio_df_unbind_iommufd()
191 vfio_device_unblock_group(device); in vfio_df_unbind_iommufd()
198 struct vfio_device *device = df->device; in vfio_df_ioctl_attach_pt() local
214 if (!device->ops->pasid_attach_ioas) in vfio_df_ioctl_attach_pt()
228 mutex_lock(&device->dev_set->lock); in vfio_df_ioctl_attach_pt()
230 ret = device->ops->pasid_attach_ioas(device, in vfio_df_ioctl_attach_pt()
234 ret = device->ops->attach_ioas(device, &attach.pt_id); in vfio_df_ioctl_attach_pt()
242 mutex_unlock(&device->dev_set->lock); in vfio_df_ioctl_attach_pt()
247 device->ops->detach_ioas(device); in vfio_df_ioctl_attach_pt()
249 mutex_unlock(&device->dev_set->lock); in vfio_df_ioctl_attach_pt()
257 struct vfio_device *device = df->device; in vfio_df_ioctl_detach_pt() local
272 if (!device->ops->pasid_detach_ioas) in vfio_df_ioctl_detach_pt()
286 mutex_lock(&device->dev_set->lock); in vfio_df_ioctl_detach_pt()
288 device->ops->pasid_detach_ioas(device, detach.pasid); in vfio_df_ioctl_detach_pt()
290 device->ops->detach_ioas(device); in vfio_df_ioctl_detach_pt()
291 mutex_unlock(&device->dev_set->lock); in vfio_df_ioctl_detach_pt()
296 static char *vfio_device_devnode(const struct device *dev, umode_t *mode) in vfio_device_devnode()