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);
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);
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);
221 struct uacce_device *uacce = q->uacce;
254 if (!uacce->ops->mmap) {
259 ret = uacce->ops->mmap(q, vma, qfr);
283 struct uacce_device *uacce = q->uacce;
292 if (uacce->ops->is_q_updated && uacce->ops->is_q_updated(q))
317 struct uacce_device *uacce = to_uacce_device(dev);
319 return sysfs_emit(buf, "%s\n", uacce->api_ver);
325 struct uacce_device *uacce = to_uacce_device(dev);
327 return sysfs_emit(buf, "%u\n", uacce->flags);
334 struct uacce_device *uacce = to_uacce_device(dev);
336 if (!uacce->ops->get_available_instances)
340 uacce->ops->get_available_instances(uacce));
346 struct uacce_device *uacce = to_uacce_device(dev);
348 return sysfs_emit(buf, "%s\n", uacce->algs);
354 struct uacce_device *uacce = to_uacce_device(dev);
357 uacce->qf_pg_num[UACCE_QFRT_MMIO] << PAGE_SHIFT);
363 struct uacce_device *uacce = to_uacce_device(dev);
366 uacce->qf_pg_num[UACCE_QFRT_DUS] << PAGE_SHIFT);
372 struct uacce_device *uacce = to_uacce_device(dev);
374 return sysfs_emit(buf, "%d\n", uacce->ops->get_isolate_state(uacce));
379 struct uacce_device *uacce = to_uacce_device(dev);
382 val = uacce->ops->isolate_err_threshold_read(uacce);
390 struct uacce_device *uacce = to_uacce_device(dev);
400 ret = uacce->ops->isolate_err_threshold_write(uacce, val);
432 struct uacce_device *uacce = to_uacce_device(dev);
435 (!uacce->qf_pg_num[UACCE_QFRT_MMIO])) ||
437 (!uacce->qf_pg_num[UACCE_QFRT_DUS])))
441 (!uacce->ops->isolate_err_threshold_read &&
442 !uacce->ops->isolate_err_threshold_write))
445 if (attr == &dev_attr_isolate.attr && !uacce->ops->get_isolate_state)
460 struct uacce_device *uacce = to_uacce_device(dev);
462 kfree(uacce);
490 static void uacce_disable_sva(struct uacce_device *uacce)
492 if (!(uacce->flags & UACCE_DEV_SVA))
495 iommu_dev_disable_feature(uacce->parent, IOMMU_DEV_FEAT_SVA);
496 iommu_dev_disable_feature(uacce->parent, IOMMU_DEV_FEAT_IOPF);
501 * @parent: pointer of uacce parent device
504 * Returns uacce pointer if success and ERR_PTR if not
505 * Need check returned negotiated uacce->flags
511 struct uacce_device *uacce;
514 uacce = kzalloc(sizeof(struct uacce_device), GFP_KERNEL);
515 if (!uacce)
520 uacce->parent = parent;
521 uacce->flags = flags;
522 uacce->ops = interface->ops;
524 ret = xa_alloc(&uacce_xa, &uacce->dev_id, uacce, xa_limit_32b,
529 INIT_LIST_HEAD(&uacce->queues);
530 mutex_init(&uacce->mutex);
531 device_initialize(&uacce->dev);
532 uacce->dev.devt = MKDEV(MAJOR(uacce_devt), uacce->dev_id);
533 uacce->dev.class = uacce_class;
534 uacce->dev.groups = uacce_dev_groups;
535 uacce->dev.parent = uacce->parent;
536 uacce->dev.release = uacce_release;
537 dev_set_name(&uacce->dev, "%s-%d", interface->name, uacce->dev_id);
539 return uacce;
542 uacce_disable_sva(uacce);
543 kfree(uacce);
550 * @uacce: The initialized uacce device
554 int uacce_register(struct uacce_device *uacce)
556 if (!uacce)
559 uacce->cdev = cdev_alloc();
560 if (!uacce->cdev)
563 uacce->cdev->ops = &uacce_fops;
564 uacce->cdev->owner = THIS_MODULE;
566 return cdev_device_add(uacce->cdev, &uacce->dev);
572 * @uacce: the accelerator to remove
574 void uacce_remove(struct uacce_device *uacce)
578 if (!uacce)
583 * the cdev. Holding uacce->mutex ensures that open() does not obtain a
584 * removed uacce device.
586 mutex_lock(&uacce->mutex);
588 list_for_each_entry_safe(q, next_q, &uacce->queues, list) {
591 * uacce->ops after the queue is disabled.
606 uacce_disable_sva(uacce);
608 if (uacce->cdev)
609 cdev_device_del(uacce->cdev, &uacce->dev);
610 xa_erase(&uacce_xa, uacce->dev_id);
612 * uacce exists as long as there are open fds, but ops will be freed
615 uacce->ops = NULL;
616 uacce->parent = NULL;
617 mutex_unlock(&uacce->mutex);
618 put_device(&uacce->dev);