28 static uint8_t *p_data;
33 static bool its_is_init =
false;
49 if ((in_len != 3) || (out_len != 0)) {
54 if (in_vec[0].len !=
sizeof(uid) ||
55 in_vec[2].
len !=
sizeof(create_flags)) {
62 p_data = (uint8_t *)in_vec[1].base;
63 data_length = in_vec[1].
len;
72 return tfm_its_set(client_id, uid, data_length, create_flags);
81 size_t *p_data_length;
88 if ((in_len != 2) || (out_len != 1)) {
93 if (in_vec[0].len !=
sizeof(uid) ||
94 in_vec[1].len !=
sizeof(data_offset)) {
101 data_offset = *(
size_t *)in_vec[1].base;
103 p_data = (uint8_t *)out_vec[0].base;
104 data_size = out_vec[0].
len;
106 p_data_length = &out_vec[0].
len;
113 return tfm_its_get(client_id, uid, data_offset, data_size, p_data_length);
127 if ((in_len != 1) || (out_len != 1)) {
132 if (in_vec[0].len !=
sizeof(uid) ||
133 out_vec[0].len !=
sizeof(*p_info)) {
162 if ((in_len != 1) || (out_len != 0)) {
167 if (in_vec[0].len !=
sizeof(uid)) {
193 if (msg.in_size[0] !=
sizeof(uid) ||
194 msg.in_size[2] !=
sizeof(create_flags)) {
199 data_length = msg.in_size[1];
201 num =
psa_read(msg.handle, 0, &uid,
sizeof(uid));
202 if (num !=
sizeof(uid)) {
206 num =
psa_read(msg.handle, 2, &create_flags,
sizeof(create_flags));
207 if (num !=
sizeof(create_flags)) {
211 return tfm_its_set(msg.client_id, uid, data_length, create_flags);
222 if (msg.in_size[0] !=
sizeof(uid) ||
223 msg.in_size[1] !=
sizeof(data_offset)) {
228 data_size = msg.out_size[0];
230 num =
psa_read(msg.handle, 0, &uid,
sizeof(uid));
231 if (num !=
sizeof(uid)) {
235 num =
psa_read(msg.handle, 1, &data_offset,
sizeof(data_offset));
236 if (num !=
sizeof(data_offset)) {
240 return tfm_its_get(msg.client_id, uid, data_offset, data_size,
251 if (msg.in_size[0] !=
sizeof(uid) ||
252 msg.out_size[0] !=
sizeof(info)) {
257 num =
psa_read(msg.handle, 0, &uid,
sizeof(uid));
258 if (num !=
sizeof(uid)) {
264 psa_write(msg.handle, 0, &info,
sizeof(info));
275 if (msg.in_size[0] !=
sizeof(uid)) {
280 num =
psa_read(msg.handle, 0, &uid,
sizeof(uid));
281 if (num !=
sizeof(uid)) {
292 static void tfm_abort(
void)
298 static void its_signal_handle(
psa_signal_t signal, its_func_t pfn)
302 status =
psa_get(signal, &msg);
336 its_signal_handle(TFM_ITS_SET_SIGNAL, tfm_its_set_ipc);
338 its_signal_handle(TFM_ITS_GET_SIGNAL, tfm_its_get_ipc);
340 its_signal_handle(TFM_ITS_GET_INFO_SIGNAL, tfm_its_get_info_ipc);
342 its_signal_handle(TFM_ITS_REMOVE_SIGNAL, tfm_its_remove_ipc);
359 return psa_read(msg.handle, 1, buf, num_bytes);
370 psa_write(msg.handle, 0, buf, num_bytes);
#define TFM_ITS_REMOVE_SIGNAL
#define TFM_ITS_SET_SIGNAL
psa_status_t tfm_its_get_info(int32_t client_id, psa_storage_uid_t uid, struct psa_storage_info_t *p_info)
Retrieve the metadata about the provided uid.
#define TFM_ITS_GET_INFO_SIGNAL
psa_status_t tfm_its_get_req(psa_invec *in_vec, size_t in_len, psa_outvec *out_vec, size_t out_len)
Handles the get request.
size_t psa_read(psa_handle_t msg_handle, uint32_t invec_idx, void *buffer, size_t num_bytes)
Read a message parameter or part of a message parameter from a client input vector.
#define PSA_ERROR_GENERIC_ERROR
psa_status_t tfm_its_req_mngr_init(void)
#define PSA_IPC_DISCONNECT
psa_status_t tfm_its_remove_req(psa_invec *in_vec, size_t in_len, psa_outvec *out_vec, size_t out_len)
Handles the remove request.
psa_status_t tfm_its_set_req(psa_invec *in_vec, size_t in_len, psa_outvec *out_vec, size_t out_len)
Handles the set request.
psa_status_t tfm_its_remove(int32_t client_id, psa_storage_uid_t uid)
Remove the provided uid and its associated data from the storage.
#define PSA_ERROR_PROGRAMMER_ERROR
int32_t tfm_core_get_caller_client_id(int32_t *caller_client_id)
void psa_write(psa_handle_t msg_handle, uint32_t outvec_idx, const void *buffer, size_t num_bytes)
Write a message response to a client output vector.
psa_status_t tfm_its_get(int32_t client_id, psa_storage_uid_t uid, size_t data_offset, size_t data_size, size_t *p_data_length)
Retrieve data associated with a provided UID.
psa_status_t tfm_its_set(int32_t client_id, psa_storage_uid_t uid, size_t data_length, psa_storage_create_flags_t create_flags)
Create a new, or modify an existing, uid/value pair.
void psa_reply(psa_handle_t msg_handle, psa_status_t status)
Complete handling of a specific message and unblock the client.
psa_signal_t psa_wait(psa_signal_t signal_mask, uint32_t timeout)
Return the Secure Partition interrupt signals that have been asserted from a subset of signals provid...
__STATIC_INLINE void * tfm_memcpy(void *dest, const void *src, size_t num)
void its_req_mngr_write(const uint8_t *buf, size_t num_bytes)
Writes asset data to the caller.
uint64_t psa_storage_uid_t
psa_status_t tfm_its_init(void)
Initializes the internal trusted storage system.
psa_status_t tfm_its_get_info_req(psa_invec *in_vec, size_t in_len, psa_outvec *out_vec, size_t out_len)
Handles the get info request.
#define TFM_ITS_GET_SIGNAL
uint32_t psa_storage_create_flags_t
psa_status_t psa_get(psa_signal_t signal, psa_msg_t *msg)
Retrieve the message which corresponds to a given RoT Service signal and remove the message from the ...
int32_t psa_status_t
Function return status.
size_t its_req_mngr_read(uint8_t *buf, size_t num_bytes)
Reads asset data from the caller.