Lines Matching defs:teedev

49 struct tee_context *teedev_open(struct tee_device *teedev)
54 if (!tee_device_get(teedev))
64 ctx->teedev = teedev;
65 rc = teedev->desc->ops->open(ctx);
72 tee_device_put(teedev);
91 ctx->teedev->desc->ops->release(ctx);
105 struct tee_device *teedev = ctx->teedev;
108 tee_device_put(teedev);
278 ctx->teedev->desc->ops->get_version(ctx->teedev, &vers);
280 if (ctx->teedev->desc->flags & TEE_DESC_PRIVILEGED)
479 if (!ctx->teedev->desc->ops->open_session)
514 rc = ctx->teedev->desc->ops->open_session(ctx, &arg, params);
531 if (rc && have_session && ctx->teedev->desc->ops->close_session)
532 ctx->teedev->desc->ops->close_session(ctx, arg.session);
557 if (!ctx->teedev->desc->ops->invoke_func)
585 rc = ctx->teedev->desc->ops->invoke_func(ctx, &arg, params);
612 if (!ctx->teedev->desc->ops->cancel_req)
618 return ctx->teedev->desc->ops->cancel_req(ctx, arg.cancel_id,
628 if (!ctx->teedev->desc->ops->close_session)
634 return ctx->teedev->desc->ops->close_session(ctx, arg.session);
691 if (!ctx->teedev->desc->ops->supp_recv)
716 rc = ctx->teedev->desc->ops->supp_recv(ctx, &func, &num_params, params);
789 if (!ctx->teedev->desc->ops->supp_send)
815 rc = ctx->teedev->desc->ops->supp_send(ctx, ret, num_params, params);
860 struct tee_device *teedev = container_of(dev, struct tee_device, dev);
863 clear_bit(teedev->id, dev_mask);
865 mutex_destroy(&teedev->mutex);
866 idr_destroy(&teedev->idr);
867 kfree(teedev);
887 struct tee_device *teedev;
897 teedev = kzalloc(sizeof(*teedev), GFP_KERNEL);
898 if (!teedev) {
911 teedev->id = find_next_zero_bit(dev_mask, max_id, offs);
912 if (teedev->id < max_id)
913 set_bit(teedev->id, dev_mask);
916 if (teedev->id >= max_id) {
921 snprintf(teedev->name, sizeof(teedev->name), "tee%s%d",
923 teedev->id - offs);
925 teedev->dev.class = &tee_class;
926 teedev->dev.release = tee_release_device;
927 teedev->dev.parent = dev;
929 teedev->dev.devt = MKDEV(MAJOR(tee_devt), teedev->id);
931 rc = dev_set_name(&teedev->dev, "%s", teedev->name);
937 cdev_init(&teedev->cdev, &tee_fops);
938 teedev->cdev.owner = teedesc->owner;
940 dev_set_drvdata(&teedev->dev, driver_data);
941 device_initialize(&teedev->dev);
944 teedev->num_users = 1;
945 init_completion(&teedev->c_no_users);
946 mutex_init(&teedev->mutex);
947 idr_init(&teedev->idr);
949 teedev->desc = teedesc;
950 teedev->pool = pool;
952 return teedev;
954 unregister_chrdev_region(teedev->dev.devt, 1);
958 if (teedev && teedev->id < TEE_NUM_DEVICES) {
960 clear_bit(teedev->id, dev_mask);
963 kfree(teedev);
971 struct tee_device *teedev = container_of(dev, struct tee_device, dev);
974 teedev->desc->ops->get_version(teedev, &vers);
988 * @teedev: Device to register
990 * tee_device_unregister() need to be called to remove the @teedev if
995 int tee_device_register(struct tee_device *teedev)
999 if (teedev->flags & TEE_DEVICE_FLAG_REGISTERED) {
1000 dev_err(&teedev->dev, "attempt to register twice\n");
1004 teedev->dev.groups = tee_dev_groups;
1006 rc = cdev_device_add(&teedev->cdev, &teedev->dev);
1008 dev_err(&teedev->dev,
1010 teedev->name, MAJOR(teedev->dev.devt),
1011 MINOR(teedev->dev.devt), rc);
1015 teedev->flags |= TEE_DEVICE_FLAG_REGISTERED;
1020 void tee_device_put(struct tee_device *teedev)
1022 mutex_lock(&teedev->mutex);
1024 if (!WARN_ON(!teedev->desc)) {
1025 teedev->num_users--;
1026 if (!teedev->num_users) {
1027 teedev->desc = NULL;
1028 complete(&teedev->c_no_users);
1031 mutex_unlock(&teedev->mutex);
1034 bool tee_device_get(struct tee_device *teedev)
1036 mutex_lock(&teedev->mutex);
1037 if (!teedev->desc) {
1038 mutex_unlock(&teedev->mutex);
1041 teedev->num_users++;
1042 mutex_unlock(&teedev->mutex);
1048 * @teedev: Device to unregister
1050 * This function should be called to remove the @teedev even if
1052 * @teedev is NULL.
1054 void tee_device_unregister(struct tee_device *teedev)
1056 if (!teedev)
1059 if (teedev->flags & TEE_DEVICE_FLAG_REGISTERED)
1060 cdev_device_del(&teedev->cdev, &teedev->dev);
1062 tee_device_put(teedev);
1063 wait_for_completion(&teedev->c_no_users);
1066 * No need to take a mutex any longer now since teedev->desc was
1067 * set to NULL before teedev->c_no_users was completed.
1070 teedev->pool = NULL;
1072 put_device(&teedev->dev);
1078 * @teedev: Device containing the driver_data pointer
1081 void *tee_get_drvdata(struct tee_device *teedev)
1083 return dev_get_drvdata(&teedev->dev);
1096 struct tee_device *teedev = container_of(dev, struct tee_device, dev);
1098 teedev->desc->ops->get_version(teedev, match_data->vers);
1115 dev = &start->teedev->dev;
1154 ctx->teedev->desc->ops->get_version(ctx->teedev, vers);
1162 if (!ctx->teedev->desc->ops->open_session)
1164 return ctx->teedev->desc->ops->open_session(ctx, arg, param);
1170 if (!ctx->teedev->desc->ops->close_session)
1172 return ctx->teedev->desc->ops->close_session(ctx, session);
1178 if (!ctx->teedev->desc->ops->system_session)
1180 return ctx->teedev->desc->ops->system_session(ctx, session);
1188 if (!ctx->teedev->desc->ops->invoke_func)
1190 return ctx->teedev->desc->ops->invoke_func(ctx, arg, param);
1197 if (!ctx->teedev->desc->ops->cancel_req)
1199 return ctx->teedev->desc->ops->cancel_req(ctx, arg->cancel_id,