blob: b27a1da2b2b81d0ba87d140381f7ec6754ba2df6 [file] [log] [blame]
/*
* Copyright (c) 2023, Arm Limited. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*
*/
#include <stddef.h>
#include "psa/client.h"
#include "tfm_erpc.h"
psa_status_t erpc_psa_call(psa_handle_t handle, int32_t t,
const list_binary_1_t *erpc_in_vec,
list_binary_1_t *erpc_out_vec)
{
psa_status_t status;
psa_invec in_vec[PSA_MAX_IOVEC];
psa_outvec out_vec[PSA_MAX_IOVEC];
size_t i;
size_t in_len = erpc_in_vec->elementsCount;
size_t out_len = erpc_out_vec->elementsCount;
/* Copy RPC iovecs into PSA iovecs */
for (i = 0; i < in_len; ++i) {
in_vec[i] = (psa_invec){erpc_in_vec->elements[i].data,
erpc_in_vec->elements[i].dataLength};
}
for (i = 0; i < out_len; ++i) {
out_vec[i] = (psa_outvec){erpc_out_vec->elements[i].data,
erpc_out_vec->elements[i].dataLength};
}
status = psa_call(handle, t, in_vec, in_len, out_vec, out_len);
/* Copy updated PSA outvec lens into RPC outvecs */
for (i = 0; i < out_len; ++i) {
erpc_out_vec->elements[i].dataLength = out_vec[i].len;
}
return status;
}