int tf_rpc_execute(struct tf_comm *comm) { u32 rpc_command; u32 rpc_error = RPC_NO; #ifdef DEBUG BUG_ON((read_mpidr() & 0x00000003) != 0); #endif /* Lock the RPC */ mutex_lock(&(comm->rpc_mutex)); rpc_command = g_RPC_parameters[1]; if (g_RPC_advancement == RPC_ADVANCEMENT_PENDING) { dprintk(KERN_INFO "tf_rpc_execute: " "Executing CMD=0x%x\n", g_RPC_parameters[1]); switch (rpc_command) { case RPC_CMD_YIELD: dprintk(KERN_INFO "tf_rpc_execute: " "RPC_CMD_YIELD\n"); rpc_error = RPC_YIELD; g_RPC_parameters[0] = RPC_SUCCESS; break; case RPC_CMD_TRACE: rpc_error = RPC_NON_YIELD; g_RPC_parameters[0] = tf_rpc_trace(comm); break; default: if (tf_crypto_execute_rpc(rpc_command, comm->pBuffer->rpc_cus_buffer) != 0) g_RPC_parameters[0] = RPC_ERROR_BAD_PARAMETERS; else g_RPC_parameters[0] = RPC_SUCCESS; rpc_error = RPC_NON_YIELD; break; } g_RPC_advancement = RPC_ADVANCEMENT_FINISHED; } mutex_unlock(&(comm->rpc_mutex)); dprintk(KERN_INFO "tf_rpc_execute: Return 0x%x\n", rpc_error); return rpc_error; }
int tf_rpc_execute(struct tf_comm *comm) { u32 rpc_command; u32 rpc_error = RPC_NO; #ifdef CONFIG_TF_DRIVER_DEBUG_SUPPORT BUG_ON((hard_smp_processor_id() & 0x00000003) != 0); #endif /* Lock the RPC */ mutex_lock(&(comm->rpc_mutex)); rpc_command = comm->l1_buffer->rpc_command; if (g_RPC_advancement == RPC_ADVANCEMENT_PENDING) { dpr_info("%s: Executing CMD=0x%x\n", __func__, rpc_command); switch (rpc_command) { case RPC_CMD_YIELD: dpr_info("%s: RPC_CMD_YIELD\n", __func__); rpc_error = RPC_YIELD; comm->l1_buffer->rpc_status = RPC_SUCCESS; break; case RPC_CMD_TRACE: rpc_error = RPC_NON_YIELD; comm->l1_buffer->rpc_status = tf_rpc_trace(comm); break; default: if (tf_crypto_execute_rpc(rpc_command, comm->l1_buffer->rpc_cus_buffer) != 0) comm->l1_buffer->rpc_status = RPC_ERROR_BAD_PARAMETERS; else comm->l1_buffer->rpc_status = RPC_SUCCESS; rpc_error = RPC_NON_YIELD; break; } g_RPC_advancement = RPC_ADVANCEMENT_FINISHED; } mutex_unlock(&(comm->rpc_mutex)); dpr_info("%s: Return 0x%x\n", __func__, rpc_error); return rpc_error; }