Lines Matching defs:uacce

8 #include <linux/uacce.h>
30 if (q->uacce->ops->start_queue) {
31 ret = q->uacce->ops->start_queue(q);
42 struct uacce_device *uacce = q->uacce;
44 if ((q->state == UACCE_Q_STARTED) && uacce->ops->stop_queue)
45 uacce->ops->stop_queue(q);
48 uacce->ops->put_queue)
49 uacce->ops->put_queue(q);
60 struct uacce_device *uacce = q->uacce;
64 * uacce->ops->ioctl() may take the mmap_lock when copying arg to/from
66 * gets called with mmap_lock held, by taking uacce->mutex instead of
69 * mmap_lock, while holding uacce->mutex.
71 mutex_lock(&uacce->mutex);
83 if (uacce->ops->ioctl)
84 ret = uacce->ops->ioctl(q, cmd, arg);
89 mutex_unlock(&uacce->mutex);
103 static int uacce_bind_queue(struct uacce_device *uacce, struct uacce_queue *q)
108 if (!(uacce->flags & UACCE_DEV_SVA))
111 handle = iommu_sva_bind_device(uacce->parent, current->mm, NULL);
136 struct uacce_device *uacce;
140 uacce = xa_load(&uacce_xa, iminor(inode));
141 if (!uacce)
148 mutex_lock(&uacce->mutex);
150 if (!uacce->parent) {
155 ret = uacce_bind_queue(uacce, q);
159 q->uacce = uacce;
161 if (uacce->ops->get_queue) {
162 ret = uacce->ops->get_queue(uacce, q->pasid, q);
169 uacce->inode = inode;
172 list_add(&q->list, &uacce->queues);
173 mutex_unlock(&uacce->mutex);
181 mutex_unlock(&uacce->mutex);
188 struct uacce_device *uacce = q->uacce;
190 mutex_lock(&uacce->mutex);
194 mutex_unlock(&uacce->mutex);
218 struct uacce_device *uacce = q->uacce;
250 if (!uacce->ops->mmap) {
255 ret = uacce->ops->mmap(q, vma, qfr);
262 if (!uacce->ops->mmap) {
267 ret = uacce->ops->mmap(q, vma, qfr);
291 struct uacce_device *uacce = q->uacce;
300 if (uacce->ops->is_q_updated && uacce->ops->is_q_updated(q))
325 struct uacce_device *uacce = to_uacce_device(dev);
327 return sprintf(buf, "%s\n", uacce->api_ver);
333 struct uacce_device *uacce = to_uacce_device(dev);
335 return sprintf(buf, "%u\n", uacce->flags);
342 struct uacce_device *uacce = to_uacce_device(dev);
344 if (!uacce->ops->get_available_instances)
348 uacce->ops->get_available_instances(uacce));
354 struct uacce_device *uacce = to_uacce_device(dev);
356 return sprintf(buf, "%s\n", uacce->algs);
362 struct uacce_device *uacce = to_uacce_device(dev);
365 uacce->qf_pg_num[UACCE_QFRT_MMIO] << PAGE_SHIFT);
371 struct uacce_device *uacce = to_uacce_device(dev);
374 uacce->qf_pg_num[UACCE_QFRT_DUS] << PAGE_SHIFT);
398 struct uacce_device *uacce = to_uacce_device(dev);
401 (!uacce->qf_pg_num[UACCE_QFRT_MMIO])) ||
403 (!uacce->qf_pg_num[UACCE_QFRT_DUS])))
418 struct uacce_device *uacce = to_uacce_device(dev);
420 kfree(uacce);
425 * @parent: pointer of uacce parent device
428 * Returns uacce pointer if success and ERR_PTR if not
429 * Need check returned negotiated uacce->flags
435 struct uacce_device *uacce;
438 uacce = kzalloc(sizeof(struct uacce_device), GFP_KERNEL);
439 if (!uacce)
448 uacce->parent = parent;
449 uacce->flags = flags;
450 uacce->ops = interface->ops;
452 ret = xa_alloc(&uacce_xa, &uacce->dev_id, uacce, xa_limit_32b,
457 INIT_LIST_HEAD(&uacce->queues);
458 mutex_init(&uacce->mutex);
459 device_initialize(&uacce->dev);
460 uacce->dev.devt = MKDEV(MAJOR(uacce_devt), uacce->dev_id);
461 uacce->dev.class = uacce_class;
462 uacce->dev.groups = uacce_dev_groups;
463 uacce->dev.parent = uacce->parent;
464 uacce->dev.release = uacce_release;
465 dev_set_name(&uacce->dev, "%s-%d", interface->name, uacce->dev_id);
467 return uacce;
471 iommu_dev_disable_feature(uacce->parent, IOMMU_DEV_FEAT_SVA);
472 kfree(uacce);
479 * @uacce: The initialized uacce device
483 int uacce_register(struct uacce_device *uacce)
485 if (!uacce)
488 uacce->cdev = cdev_alloc();
489 if (!uacce->cdev)
492 uacce->cdev->ops = &uacce_fops;
493 uacce->cdev->owner = THIS_MODULE;
495 return cdev_device_add(uacce->cdev, &uacce->dev);
501 * @uacce: the accelerator to remove
503 void uacce_remove(struct uacce_device *uacce)
507 if (!uacce)
513 if (uacce->inode)
514 unmap_mapping_range(uacce->inode->i_mapping, 0, 0, 1);
518 * the cdev. Holding uacce->mutex ensures that open() does not obtain a
519 * removed uacce device.
521 mutex_lock(&uacce->mutex);
523 list_for_each_entry_safe(q, next_q, &uacce->queues, list) {
526 * uacce->ops after the queue is disabled.
535 if (uacce->flags & UACCE_DEV_SVA)
536 iommu_dev_disable_feature(uacce->parent, IOMMU_DEV_FEAT_SVA);
538 if (uacce->cdev)
539 cdev_device_del(uacce->cdev, &uacce->dev);
540 xa_erase(&uacce_xa, uacce->dev_id);
542 * uacce exists as long as there are open fds, but ops will be freed
545 uacce->ops = NULL;
546 uacce->parent = NULL;
547 mutex_unlock(&uacce->mutex);
548 put_device(&uacce->dev);