1*95511698STamas Ban /* 2*95511698STamas Ban * Copyright (c) 2022, Arm Limited. All rights reserved. 3*95511698STamas Ban * 4*95511698STamas Ban * SPDX-License-Identifier: BSD-3-Clause 5*95511698STamas Ban * 6*95511698STamas Ban */ 7*95511698STamas Ban 8*95511698STamas Ban #ifndef __RSS_COMMS_PROTOCOL_H__ 9*95511698STamas Ban #define __RSS_COMMS_PROTOCOL_H__ 10*95511698STamas Ban 11*95511698STamas Ban #include <cdefs.h> 12*95511698STamas Ban #include <stdint.h> 13*95511698STamas Ban 14*95511698STamas Ban #include <psa/client.h> 15*95511698STamas Ban #include "rss_comms_protocol_embed.h" 16*95511698STamas Ban #include "rss_comms_protocol_pointer_access.h" 17*95511698STamas Ban 18*95511698STamas Ban enum rss_comms_protocol_version_t { 19*95511698STamas Ban RSS_COMMS_PROTOCOL_EMBED = 0, 20*95511698STamas Ban RSS_COMMS_PROTOCOL_POINTER_ACCESS = 1, 21*95511698STamas Ban }; 22*95511698STamas Ban 23*95511698STamas Ban struct __packed serialized_rss_comms_header_t { 24*95511698STamas Ban uint8_t protocol_ver; 25*95511698STamas Ban uint8_t seq_num; 26*95511698STamas Ban uint16_t client_id; 27*95511698STamas Ban }; 28*95511698STamas Ban 29*95511698STamas Ban /* MHU message passed from Host to RSS to deliver a PSA client call */ 30*95511698STamas Ban struct __packed serialized_rss_comms_msg_t { 31*95511698STamas Ban struct serialized_rss_comms_header_t header; 32*95511698STamas Ban union __packed { 33*95511698STamas Ban struct rss_embed_msg_t embed; 34*95511698STamas Ban struct rss_pointer_access_msg_t pointer_access; 35*95511698STamas Ban } msg; 36*95511698STamas Ban }; 37*95511698STamas Ban 38*95511698STamas Ban /* MHU reply message to hold the PSA client reply result returned by RSS */ 39*95511698STamas Ban struct __packed serialized_rss_comms_reply_t { 40*95511698STamas Ban struct serialized_rss_comms_header_t header; 41*95511698STamas Ban union __packed { 42*95511698STamas Ban struct rss_embed_reply_t embed; 43*95511698STamas Ban struct rss_pointer_access_reply_t pointer_access; 44*95511698STamas Ban } reply; 45*95511698STamas Ban }; 46*95511698STamas Ban 47*95511698STamas Ban /* in_len and out_len are uint8_ts, therefore if there are more than 255 iovecs 48*95511698STamas Ban * an error may occur. 49*95511698STamas Ban */ 50*95511698STamas Ban CASSERT(PSA_MAX_IOVEC <= UINT8_MAX, assert_rss_comms_max_iovec_too_large); 51*95511698STamas Ban 52*95511698STamas Ban psa_status_t rss_protocol_serialize_msg(psa_handle_t handle, 53*95511698STamas Ban int16_t type, 54*95511698STamas Ban const psa_invec *in_vec, 55*95511698STamas Ban uint8_t in_len, 56*95511698STamas Ban const psa_outvec *out_vec, 57*95511698STamas Ban uint8_t out_len, 58*95511698STamas Ban struct serialized_rss_comms_msg_t *msg, 59*95511698STamas Ban size_t *msg_len); 60*95511698STamas Ban 61*95511698STamas Ban psa_status_t rss_protocol_deserialize_reply(psa_outvec *out_vec, 62*95511698STamas Ban uint8_t out_len, 63*95511698STamas Ban psa_status_t *return_val, 64*95511698STamas Ban const struct serialized_rss_comms_reply_t *reply, 65*95511698STamas Ban size_t reply_size); 66*95511698STamas Ban 67*95511698STamas Ban #endif /* __RSS_COMMS_PROTOCOL_H__ */ 68