1 /* 2 * Copyright (c) 2022-2024, Arm Limited. All rights reserved. 3 * Copyright (c) 2023 Cypress Semiconductor Corporation (an Infineon 4 * company) or an affiliate of Cypress Semiconductor Corporation. All rights 5 * reserved. 6 * 7 * SPDX-License-Identifier: BSD-3-Clause 8 * 9 */ 10 11 #ifndef __RUNTIME_DEFS_H__ 12 #define __RUNTIME_DEFS_H__ 13 14 #include <stdint.h> 15 16 #include "config_impl.h" 17 #include "psa/client.h" 18 #include "psa/error.h" 19 #include "psa/service.h" 20 #include "ffm/mailbox_agent_api.h" 21 22 /* SFN defs */ 23 typedef psa_status_t (*service_fn_t)(psa_msg_t *msg); 24 typedef psa_status_t (*sfn_init_fn_t)(void *param); 25 26 /* PSA API dispatcher for IPC model. */ 27 #if CONFIG_TFM_SPM_BACKEND_IPC == 1 28 struct psa_api_tbl_t { 29 psa_status_t (*psa_call)(psa_handle_t handle, uint32_t ctrl_param, const psa_invec *in_vec, 30 psa_outvec *out_vec); 31 uint32_t (*psa_version)(uint32_t sid); 32 uint32_t (*psa_framework_version)(void); 33 psa_signal_t (*psa_wait)(psa_signal_t signal_mask, uint32_t timeout); 34 psa_status_t (*psa_get)(psa_signal_t signal, psa_msg_t *msg); 35 size_t (*psa_read)(psa_handle_t msg_handle, uint32_t invec_idx, void *buffer, 36 size_t num_bytes); 37 size_t (*psa_skip)(psa_handle_t msg_handle, uint32_t invec_idx, size_t num_bytes); 38 void (*psa_write)(psa_handle_t msg_handle, uint32_t outvec_idx, const void *buffer, 39 size_t num_bytes); 40 void (*psa_reply)(psa_handle_t msg_handle, psa_status_t retval); 41 void (*psa_panic)(void); 42 uint32_t (*psa_rot_lifecycle_state)(void); 43 #if CONFIG_TFM_CONNECTION_BASED_SERVICE_API == 1 44 psa_handle_t (*psa_connect)(uint32_t sid, uint32_t version); 45 void (*psa_close)(psa_handle_t handle); 46 void (*psa_set_rhandle)(psa_handle_t msg_handle, void *rhandle); 47 #endif /* CONFIG_TFM_CONNECTION_BASED_SERVICE_API == 1 */ 48 #if CONFIG_TFM_DOORBELL_API == 1 49 void (*psa_notify)(int32_t partition_id); 50 void (*psa_clear)(void); 51 #endif /* CONFIG_TFM_DOORBELL_API == 1 */ 52 #if CONFIG_TFM_FLIH_API == 1 || CONFIG_TFM_SLIH_API == 1 53 void (*psa_irq_enable)(psa_signal_t irq_signal); 54 psa_irq_status_t (*psa_irq_disable)(psa_signal_t irq_signal); 55 #if CONFIG_TFM_FLIH_API == 1 56 void (*psa_reset_signal)(psa_signal_t irq_signal); 57 #endif /* CONFIG_TFM_FLIH_API == 1 */ 58 #if CONFIG_TFM_SLIH_API == 1 59 void (*psa_eoi)(psa_signal_t irq_signal); 60 #endif /* CONFIG_TFM_SLIH_API == 1 */ 61 #endif /* CONFIG_TFM_FLIH_API == 1 || CONFIG_TFM_SLIH_API == 1 */ 62 #if PSA_FRAMEWORK_HAS_MM_IOVEC 63 void * (*psa_map_invec)(psa_handle_t msg_handle, uint32_t invec_idx); 64 void (*psa_unmap_invec)(psa_handle_t msg_handle, uint32_t invec_idx); 65 void * (*psa_map_outvec)(psa_handle_t msg_handle, uint32_t outvec_idx); 66 void (*psa_unmap_outvec)(psa_handle_t msg_handle, uint32_t outvec_idx, size_t len); 67 #endif /* PSA_FRAMEWORK_HAS_MM_IOVEC */ 68 #ifdef TFM_PARTITION_NS_AGENT_MAILBOX 69 psa_status_t (*agent_psa_call)(psa_handle_t handle, uint32_t control, 70 const struct client_params_t *params, 71 const void *client_data); 72 #if CONFIG_TFM_CONNECTION_BASED_SERVICE_API == 1 73 psa_handle_t (*agent_psa_connect)(uint32_t sid, uint32_t version, 74 int32_t ns_client_id, 75 const void *client_data); 76 psa_status_t (*agent_psa_close)(psa_handle_t handle, 77 int32_t ns_client_id); 78 #endif /* CONFIG_TFM_CONNECTION_BASED_SERVICE_API == 1 */ 79 #endif /* TFM_PARTITION_NS_AGENT_MAILBOX */ 80 }; 81 82 struct runtime_metadata_t { 83 uintptr_t entry; /* Entry function */ 84 struct psa_api_tbl_t *psa_fns; /* PSA API entry table */ 85 uint32_t n_sfn; /* Number of Secure FuNctions */ 86 service_fn_t sfn_table[];/* Secure FuNctions Table */ 87 }; 88 #endif /* CONFIG_TFM_SPM_BACKEND_IPC == 1 */ 89 90 #endif /* __RUNTIME_DEFS_H__ */ 91