Lines Matching refs:uacce

26 	if (q->uacce->ops->start_queue) {  in uacce_start_queue()
27 ret = q->uacce->ops->start_queue(q); in uacce_start_queue()
42 struct uacce_device *uacce = q->uacce; in uacce_put_queue() local
49 if ((q->state == UACCE_Q_STARTED) && uacce->ops->stop_queue) in uacce_put_queue()
50 uacce->ops->stop_queue(q); in uacce_put_queue()
53 uacce->ops->put_queue) in uacce_put_queue()
54 uacce->ops->put_queue(q); in uacce_put_queue()
67 struct uacce_device *uacce = q->uacce; in uacce_fops_unl_ioctl() local
77 if (!uacce->ops->ioctl) in uacce_fops_unl_ioctl()
80 return uacce->ops->ioctl(q, cmd, arg); in uacce_fops_unl_ioctl()
94 static int uacce_bind_queue(struct uacce_device *uacce, struct uacce_queue *q) in uacce_bind_queue() argument
99 if (!(uacce->flags & UACCE_DEV_SVA)) in uacce_bind_queue()
102 handle = iommu_sva_bind_device(uacce->parent, current->mm, NULL); in uacce_bind_queue()
127 struct uacce_device *uacce; in uacce_fops_open() local
131 uacce = xa_load(&uacce_xa, iminor(inode)); in uacce_fops_open()
132 if (!uacce) in uacce_fops_open()
139 ret = uacce_bind_queue(uacce, q); in uacce_fops_open()
143 q->uacce = uacce; in uacce_fops_open()
145 if (uacce->ops->get_queue) { in uacce_fops_open()
146 ret = uacce->ops->get_queue(uacce, q->pasid, q); in uacce_fops_open()
153 uacce->inode = inode; in uacce_fops_open()
156 mutex_lock(&uacce->queues_lock); in uacce_fops_open()
157 list_add(&q->list, &uacce->queues); in uacce_fops_open()
158 mutex_unlock(&uacce->queues_lock); in uacce_fops_open()
173 mutex_lock(&q->uacce->queues_lock); in uacce_fops_release()
175 mutex_unlock(&q->uacce->queues_lock); in uacce_fops_release()
201 struct uacce_device *uacce = q->uacce; in uacce_fops_mmap() local
235 if (!uacce->ops->mmap) { in uacce_fops_mmap()
240 ret = uacce->ops->mmap(q, vma, qfr); in uacce_fops_mmap()
264 struct uacce_device *uacce = q->uacce; in uacce_fops_poll() local
267 if (uacce->ops->is_q_updated && uacce->ops->is_q_updated(q)) in uacce_fops_poll()
290 struct uacce_device *uacce = to_uacce_device(dev); in api_show() local
292 return sprintf(buf, "%s\n", uacce->api_ver); in api_show()
298 struct uacce_device *uacce = to_uacce_device(dev); in flags_show() local
300 return sprintf(buf, "%u\n", uacce->flags); in flags_show()
307 struct uacce_device *uacce = to_uacce_device(dev); in available_instances_show() local
309 if (!uacce->ops->get_available_instances) in available_instances_show()
313 uacce->ops->get_available_instances(uacce)); in available_instances_show()
319 struct uacce_device *uacce = to_uacce_device(dev); in algorithms_show() local
321 return sprintf(buf, "%s\n", uacce->algs); in algorithms_show()
327 struct uacce_device *uacce = to_uacce_device(dev); in region_mmio_size_show() local
330 uacce->qf_pg_num[UACCE_QFRT_MMIO] << PAGE_SHIFT); in region_mmio_size_show()
336 struct uacce_device *uacce = to_uacce_device(dev); in region_dus_size_show() local
339 uacce->qf_pg_num[UACCE_QFRT_DUS] << PAGE_SHIFT); in region_dus_size_show()
363 struct uacce_device *uacce = to_uacce_device(dev); in uacce_dev_is_visible() local
366 (!uacce->qf_pg_num[UACCE_QFRT_MMIO])) || in uacce_dev_is_visible()
368 (!uacce->qf_pg_num[UACCE_QFRT_DUS]))) in uacce_dev_is_visible()
383 struct uacce_device *uacce = to_uacce_device(dev); in uacce_release() local
385 kfree(uacce); in uacce_release()
413 static void uacce_disable_sva(struct uacce_device *uacce) in uacce_disable_sva() argument
415 if (!(uacce->flags & UACCE_DEV_SVA)) in uacce_disable_sva()
418 iommu_dev_disable_feature(uacce->parent, IOMMU_DEV_FEAT_SVA); in uacce_disable_sva()
419 iommu_dev_disable_feature(uacce->parent, IOMMU_DEV_FEAT_IOPF); in uacce_disable_sva()
434 struct uacce_device *uacce; in uacce_alloc() local
437 uacce = kzalloc(sizeof(struct uacce_device), GFP_KERNEL); in uacce_alloc()
438 if (!uacce) in uacce_alloc()
443 uacce->parent = parent; in uacce_alloc()
444 uacce->flags = flags; in uacce_alloc()
445 uacce->ops = interface->ops; in uacce_alloc()
447 ret = xa_alloc(&uacce_xa, &uacce->dev_id, uacce, xa_limit_32b, in uacce_alloc()
452 INIT_LIST_HEAD(&uacce->queues); in uacce_alloc()
453 mutex_init(&uacce->queues_lock); in uacce_alloc()
454 device_initialize(&uacce->dev); in uacce_alloc()
455 uacce->dev.devt = MKDEV(MAJOR(uacce_devt), uacce->dev_id); in uacce_alloc()
456 uacce->dev.class = uacce_class; in uacce_alloc()
457 uacce->dev.groups = uacce_dev_groups; in uacce_alloc()
458 uacce->dev.parent = uacce->parent; in uacce_alloc()
459 uacce->dev.release = uacce_release; in uacce_alloc()
460 dev_set_name(&uacce->dev, "%s-%d", interface->name, uacce->dev_id); in uacce_alloc()
462 return uacce; in uacce_alloc()
465 uacce_disable_sva(uacce); in uacce_alloc()
466 kfree(uacce); in uacce_alloc()
477 int uacce_register(struct uacce_device *uacce) in uacce_register() argument
479 if (!uacce) in uacce_register()
482 uacce->cdev = cdev_alloc(); in uacce_register()
483 if (!uacce->cdev) in uacce_register()
486 uacce->cdev->ops = &uacce_fops; in uacce_register()
487 uacce->cdev->owner = THIS_MODULE; in uacce_register()
489 return cdev_device_add(uacce->cdev, &uacce->dev); in uacce_register()
497 void uacce_remove(struct uacce_device *uacce) in uacce_remove() argument
501 if (!uacce) in uacce_remove()
507 if (uacce->inode) in uacce_remove()
508 unmap_mapping_range(uacce->inode->i_mapping, 0, 0, 1); in uacce_remove()
511 mutex_lock(&uacce->queues_lock); in uacce_remove()
512 list_for_each_entry_safe(q, next_q, &uacce->queues, list) { in uacce_remove()
516 mutex_unlock(&uacce->queues_lock); in uacce_remove()
519 uacce_disable_sva(uacce); in uacce_remove()
521 if (uacce->cdev) in uacce_remove()
522 cdev_device_del(uacce->cdev, &uacce->dev); in uacce_remove()
523 xa_erase(&uacce_xa, uacce->dev_id); in uacce_remove()
524 put_device(&uacce->dev); in uacce_remove()