blob: 3eb7eaa58141bd429eb7461ad9b5888a359c218e [file] [log] [blame]
Raef Coles734aaac2022-06-15 14:37:22 +01001/*
2 * Copyright (c) 2022, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
Tamas Band1bbcbe2022-10-03 15:34:02 +02007#include <assert.h>
Raef Coles734aaac2022-06-15 14:37:22 +01008
9#include <common/debug.h>
Tamas Band0973182024-02-21 12:42:00 +010010#include "rse_comms_protocol.h"
Raef Coles734aaac2022-06-15 14:37:22 +010011
Tamas Band0973182024-02-21 12:42:00 +010012psa_status_t rse_protocol_serialize_msg(psa_handle_t handle,
Raef Coles734aaac2022-06-15 14:37:22 +010013 int16_t type,
14 const psa_invec *in_vec,
15 uint8_t in_len,
16 const psa_outvec *out_vec,
17 uint8_t out_len,
Tamas Band0973182024-02-21 12:42:00 +010018 struct serialized_rse_comms_msg_t *msg,
Raef Coles734aaac2022-06-15 14:37:22 +010019 size_t *msg_len)
20{
21 psa_status_t status;
22
23 assert(msg != NULL);
24 assert(msg_len != NULL);
25 assert(in_vec != NULL);
Raef Coles734aaac2022-06-15 14:37:22 +010026
27 switch (msg->header.protocol_ver) {
Tamas Band0973182024-02-21 12:42:00 +010028 case RSE_COMMS_PROTOCOL_EMBED:
29 status = rse_protocol_embed_serialize_msg(handle, type, in_vec, in_len, out_vec,
Raef Coles734aaac2022-06-15 14:37:22 +010030 out_len, &msg->msg.embed, msg_len);
31 if (status != PSA_SUCCESS) {
32 return status;
33 }
34 break;
Tamas Band0973182024-02-21 12:42:00 +010035 case RSE_COMMS_PROTOCOL_POINTER_ACCESS:
36 status = rse_protocol_pointer_access_serialize_msg(handle, type, in_vec, in_len,
Raef Coles734aaac2022-06-15 14:37:22 +010037 out_vec, out_len,
38 &msg->msg.pointer_access,
39 msg_len);
40 if (status != PSA_SUCCESS) {
41 return status;
42 }
43 break;
44 default:
45 return PSA_ERROR_NOT_SUPPORTED;
46 }
47
Tamas Band0973182024-02-21 12:42:00 +010048 *msg_len += sizeof(struct serialized_rse_comms_header_t);
Raef Coles734aaac2022-06-15 14:37:22 +010049
50 return PSA_SUCCESS;
51}
52
Tamas Band0973182024-02-21 12:42:00 +010053psa_status_t rse_protocol_deserialize_reply(psa_outvec *out_vec,
Raef Coles734aaac2022-06-15 14:37:22 +010054 uint8_t out_len,
55 psa_status_t *return_val,
Tamas Band0973182024-02-21 12:42:00 +010056 const struct serialized_rse_comms_reply_t *reply,
Raef Coles734aaac2022-06-15 14:37:22 +010057 size_t reply_size)
58{
59 assert(reply != NULL);
Raef Coles734aaac2022-06-15 14:37:22 +010060 assert(return_val != NULL);
61
62 switch (reply->header.protocol_ver) {
Tamas Band0973182024-02-21 12:42:00 +010063 case RSE_COMMS_PROTOCOL_EMBED:
64 return rse_protocol_embed_deserialize_reply(out_vec, out_len, return_val,
Raef Coles734aaac2022-06-15 14:37:22 +010065 &reply->reply.embed, reply_size);
Tamas Band0973182024-02-21 12:42:00 +010066 case RSE_COMMS_PROTOCOL_POINTER_ACCESS:
67 return rse_protocol_pointer_access_deserialize_reply(out_vec, out_len, return_val,
Raef Coles734aaac2022-06-15 14:37:22 +010068 &reply->reply.pointer_access,
69 reply_size);
70 default:
71 return PSA_ERROR_NOT_SUPPORTED;
72 }
73
74 return PSA_SUCCESS;
75}