13 #include "spm_partition_defs.h" 14 #include "secure_fw/core/tfm_secure_api.h" 16 #define SPM_INVALID_PARTITION_IDX (~0U) 19 #define TFM_PARTITION_PRIVILEGED_MODE 1 20 #define TFM_PARTITION_UNPRIVILEGED_MODE 0 24 SPM_ERR_PARTITION_DB_NOT_INIT,
25 SPM_ERR_PARTITION_ALREADY_ACTIVE,
26 SPM_ERR_PARTITION_NOT_AVAILABLE,
27 SPM_ERR_INVALID_PARAMETER,
28 SPM_ERR_INVALID_CONFIG,
31 enum spm_part_state_t {
32 SPM_PARTITION_STATE_UNINIT = 0,
33 SPM_PARTITION_STATE_IDLE,
34 SPM_PARTITION_STATE_RUNNING,
35 SPM_PARTITION_STATE_SUSPENDED,
36 SPM_PARTITION_STATE_BLOCKED,
37 SPM_PARTITION_STATE_CLOSED
40 enum spm_part_flag_mask_t {
41 SPM_PART_FLAG_APP_ROT = 0x01,
42 SPM_PART_FLAG_PSA_ROT = 0x02,
43 SPM_PART_FLAG_IPC = 0x04
64 uint32_t partition_state;
65 uint32_t caller_partition_idx;
66 int32_t caller_client_id;
88 uint32_t get_partition_idx(uint32_t partition_id);
90 #if (TFM_LVL != 1) || defined(TFM_PSA_API) 100 uint32_t tfm_spm_partition_get_stack_bottom(uint32_t partition_idx);
111 uint32_t tfm_spm_partition_get_stack_top(uint32_t partition_idx);
114 #if (TFM_LVL != 1) && !defined(TFM_PSA_API) 124 enum spm_err_t tfm_spm_partition_sandbox_config(uint32_t partition_idx);
135 enum spm_err_t tfm_spm_partition_sandbox_deconfig(uint32_t partition_idx);
146 uint32_t tfm_spm_partition_get_zi_start(uint32_t partition_idx);
158 uint32_t tfm_spm_partition_get_zi_limit(uint32_t partition_idx);
169 uint32_t tfm_spm_partition_get_rw_start(uint32_t partition_idx);
181 uint32_t tfm_spm_partition_get_rw_limit(uint32_t partition_idx);
191 void tfm_spm_partition_set_stack(uint32_t partition_idx, uint32_t stack_ptr);
203 uint32_t tfm_spm_partition_get_partition_id(uint32_t partition_idx);
214 uint32_t tfm_spm_partition_get_flags(uint32_t partition_idx);
227 tfm_spm_partition_get_runtime_data(uint32_t partition_idx);
235 uint32_t tfm_spm_partition_get_running_partition_idx(
void);
246 void tfm_spm_partition_store_context(uint32_t partition_idx,
247 uint32_t stack_ptr, uint32_t lr);
258 void tfm_spm_partition_set_state(uint32_t partition_idx, uint32_t state);
268 void tfm_spm_partition_set_caller_partition_idx(uint32_t partition_idx,
269 uint32_t caller_partition_idx);
279 void tfm_spm_partition_set_caller_client_id(uint32_t partition_idx,
280 int32_t caller_client_id);
293 enum spm_err_t tfm_spm_partition_set_share(uint32_t partition_idx,
314 enum spm_err_t tfm_spm_partition_set_iovec(uint32_t partition_idx,
315 const int32_t *args);
322 enum spm_err_t tfm_spm_partition_init(
void);
331 void tfm_spm_partition_cleanup_context(uint32_t partition_idx);
339 enum spm_err_t tfm_spm_db_init(
void);
353 void tfm_spm_partition_change_privilege(uint32_t privileged);
psa_outvec out_vec[PSA_MAX_IOVEC]
Runtime context information of a partition.
Structure which describes a scatter-gather output buffer.
Structure that describes a scatter-gather input buffer.
#define PSA_MAX_IOVEC
Maximum number of psa_invec and psa_outvec structures allowed for psa_call().
Holds the iovec parameters that are passed to a service.
psa_invec in_vec[PSA_MAX_IOVEC]