195511698STamas Ban /* 295511698STamas Ban * Copyright (c) 2022, Arm Limited. All rights reserved. 395511698STamas Ban * 495511698STamas Ban * SPDX-License-Identifier: BSD-3-Clause 595511698STamas Ban * 695511698STamas Ban */ 795511698STamas Ban 8*e249e569STamas Ban #ifndef __RSE_COMMS_PROTOCOL_H__ 9*e249e569STamas Ban #define __RSE_COMMS_PROTOCOL_H__ 1095511698STamas Ban 1195511698STamas Ban #include <cdefs.h> 1295511698STamas Ban #include <stdint.h> 1395511698STamas Ban 1495511698STamas Ban #include <psa/client.h> 15*e249e569STamas Ban #include "rse_comms_protocol_embed.h" 16*e249e569STamas Ban #include "rse_comms_protocol_pointer_access.h" 1795511698STamas Ban 18*e249e569STamas Ban enum rse_comms_protocol_version_t { 19*e249e569STamas Ban RSE_COMMS_PROTOCOL_EMBED = 0, 20*e249e569STamas Ban RSE_COMMS_PROTOCOL_POINTER_ACCESS = 1, 2195511698STamas Ban }; 2295511698STamas Ban 23*e249e569STamas Ban struct __packed serialized_rse_comms_header_t { 2495511698STamas Ban uint8_t protocol_ver; 2595511698STamas Ban uint8_t seq_num; 2695511698STamas Ban uint16_t client_id; 2795511698STamas Ban }; 2895511698STamas Ban 29*e249e569STamas Ban /* MHU message passed from Host to RSE to deliver a PSA client call */ 30*e249e569STamas Ban struct __packed serialized_rse_comms_msg_t { 31*e249e569STamas Ban struct serialized_rse_comms_header_t header; 3295511698STamas Ban union __packed { 33*e249e569STamas Ban struct rse_embed_msg_t embed; 34*e249e569STamas Ban struct rse_pointer_access_msg_t pointer_access; 3595511698STamas Ban } msg; 3695511698STamas Ban }; 3795511698STamas Ban 38*e249e569STamas Ban /* MHU reply message to hold the PSA client reply result returned by RSE */ 39*e249e569STamas Ban struct __packed serialized_rse_comms_reply_t { 40*e249e569STamas Ban struct serialized_rse_comms_header_t header; 4195511698STamas Ban union __packed { 42*e249e569STamas Ban struct rse_embed_reply_t embed; 43*e249e569STamas Ban struct rse_pointer_access_reply_t pointer_access; 4495511698STamas Ban } reply; 4595511698STamas Ban }; 4695511698STamas Ban 4795511698STamas Ban /* in_len and out_len are uint8_ts, therefore if there are more than 255 iovecs 4895511698STamas Ban * an error may occur. 4995511698STamas Ban */ 50*e249e569STamas Ban CASSERT(PSA_MAX_IOVEC <= UINT8_MAX, assert_rse_comms_max_iovec_too_large); 5195511698STamas Ban 52*e249e569STamas Ban psa_status_t rse_protocol_serialize_msg(psa_handle_t handle, 5395511698STamas Ban int16_t type, 5495511698STamas Ban const psa_invec *in_vec, 5595511698STamas Ban uint8_t in_len, 5695511698STamas Ban const psa_outvec *out_vec, 5795511698STamas Ban uint8_t out_len, 58*e249e569STamas Ban struct serialized_rse_comms_msg_t *msg, 5995511698STamas Ban size_t *msg_len); 6095511698STamas Ban 61*e249e569STamas Ban psa_status_t rse_protocol_deserialize_reply(psa_outvec *out_vec, 6295511698STamas Ban uint8_t out_len, 6395511698STamas Ban psa_status_t *return_val, 64*e249e569STamas Ban const struct serialized_rse_comms_reply_t *reply, 6595511698STamas Ban size_t reply_size); 6695511698STamas Ban 67*e249e569STamas Ban #endif /* __RSE_COMMS_PROTOCOL_H__ */ 68