tee: optee: system thread call property
[linux-2.6-microblaze.git] / drivers / tee / optee / ffa_abi.c
index 0828240..721fd4d 100644 (file)
@@ -528,7 +528,8 @@ static void optee_handle_ffa_rpc(struct tee_context *ctx, struct optee *optee,
 
 static int optee_ffa_yielding_call(struct tee_context *ctx,
                                   struct ffa_send_direct_data *data,
-                                  struct optee_msg_arg *rpc_arg)
+                                  struct optee_msg_arg *rpc_arg,
+                                  bool system_thread)
 {
        struct optee *optee = tee_get_drvdata(ctx->teedev);
        struct ffa_device *ffa_dev = optee->ffa.ffa_dev;
@@ -541,7 +542,7 @@ static int optee_ffa_yielding_call(struct tee_context *ctx,
        int rc;
 
        /* Initialize waiter */
-       optee_cq_wait_init(&optee->call_queue, &w);
+       optee_cq_wait_init(&optee->call_queue, &w, system_thread);
        while (true) {
                rc = msg_ops->sync_send_receive(ffa_dev, data);
                if (rc)
@@ -604,6 +605,7 @@ done:
  * @ctx:       calling context
  * @shm:       shared memory holding the message to pass to secure world
  * @offs:      offset of the message in @shm
+ * @system_thread: true if caller requests TEE system thread support
  *
  * Does a FF-A call to OP-TEE in secure world and handles eventual resulting
  * Remote Procedure Calls (RPC) from OP-TEE.
@@ -612,7 +614,8 @@ done:
  */
 
 static int optee_ffa_do_call_with_arg(struct tee_context *ctx,
-                                     struct tee_shm *shm, u_int offs)
+                                     struct tee_shm *shm, u_int offs,
+                                     bool system_thread)
 {
        struct ffa_send_direct_data data = {
                .data0 = OPTEE_FFA_YIELDING_CALL_WITH_ARG,
@@ -642,7 +645,7 @@ static int optee_ffa_do_call_with_arg(struct tee_context *ctx,
        if (IS_ERR(rpc_arg))
                return PTR_ERR(rpc_arg);
 
-       return optee_ffa_yielding_call(ctx, &data, rpc_arg);
+       return optee_ffa_yielding_call(ctx, &data, rpc_arg, system_thread);
 }
 
 /*