mbed-os5 only for TYBLE16

Dependents:   TYBLE16_simple_data_logger TYBLE16_MP3_Air

Committer:
kenjiArai
Date:
Tue Dec 31 06:02:27 2019 +0000
Revision:
1:9db0e321a9f4
Parent:
0:5b88d5760320
updated based on mbed-os5.15.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kenjiArai 0:5b88d5760320 1 /*
kenjiArai 0:5b88d5760320 2 * Copyright (c) 2017-2019, Arm Limited. All rights reserved.
kenjiArai 0:5b88d5760320 3 *
kenjiArai 0:5b88d5760320 4 * SPDX-License-Identifier: BSD-3-Clause
kenjiArai 0:5b88d5760320 5 *
kenjiArai 0:5b88d5760320 6 */
kenjiArai 0:5b88d5760320 7
kenjiArai 0:5b88d5760320 8 #ifndef __SPM_API_H__
kenjiArai 0:5b88d5760320 9 #define __SPM_API_H__
kenjiArai 0:5b88d5760320 10
kenjiArai 0:5b88d5760320 11 /* This file contains the apis exported by the SPM to tfm core */
kenjiArai 0:5b88d5760320 12 #include "tfm_api.h"
kenjiArai 0:5b88d5760320 13 #include "spm_partition_defs.h"
kenjiArai 0:5b88d5760320 14 #include "secure_fw/core/tfm_secure_api.h"
kenjiArai 0:5b88d5760320 15
kenjiArai 0:5b88d5760320 16 #define SPM_INVALID_PARTITION_IDX (~0U)
kenjiArai 0:5b88d5760320 17
kenjiArai 0:5b88d5760320 18 /* Privileged definitions for partition thread mode */
kenjiArai 0:5b88d5760320 19 #define TFM_PARTITION_PRIVILEGED_MODE 1
kenjiArai 0:5b88d5760320 20 #define TFM_PARTITION_UNPRIVILEGED_MODE 0
kenjiArai 0:5b88d5760320 21
kenjiArai 0:5b88d5760320 22 enum spm_err_t {
kenjiArai 0:5b88d5760320 23 SPM_ERR_OK = 0,
kenjiArai 0:5b88d5760320 24 SPM_ERR_PARTITION_DB_NOT_INIT,
kenjiArai 0:5b88d5760320 25 SPM_ERR_PARTITION_ALREADY_ACTIVE,
kenjiArai 0:5b88d5760320 26 SPM_ERR_PARTITION_NOT_AVAILABLE,
kenjiArai 0:5b88d5760320 27 SPM_ERR_INVALID_PARAMETER,
kenjiArai 0:5b88d5760320 28 SPM_ERR_INVALID_CONFIG,
kenjiArai 0:5b88d5760320 29 };
kenjiArai 0:5b88d5760320 30
kenjiArai 0:5b88d5760320 31 enum spm_part_state_t {
kenjiArai 0:5b88d5760320 32 SPM_PARTITION_STATE_UNINIT = 0,
kenjiArai 0:5b88d5760320 33 SPM_PARTITION_STATE_IDLE,
kenjiArai 0:5b88d5760320 34 SPM_PARTITION_STATE_RUNNING,
kenjiArai 0:5b88d5760320 35 SPM_PARTITION_STATE_SUSPENDED,
kenjiArai 0:5b88d5760320 36 SPM_PARTITION_STATE_BLOCKED,
kenjiArai 0:5b88d5760320 37 SPM_PARTITION_STATE_CLOSED
kenjiArai 0:5b88d5760320 38 };
kenjiArai 0:5b88d5760320 39
kenjiArai 0:5b88d5760320 40 enum spm_part_flag_mask_t {
kenjiArai 0:5b88d5760320 41 SPM_PART_FLAG_APP_ROT = 0x01,
kenjiArai 0:5b88d5760320 42 SPM_PART_FLAG_PSA_ROT = 0x02,
kenjiArai 0:5b88d5760320 43 SPM_PART_FLAG_IPC = 0x04
kenjiArai 0:5b88d5760320 44 };
kenjiArai 0:5b88d5760320 45
kenjiArai 0:5b88d5760320 46 /**
kenjiArai 0:5b88d5760320 47 * \brief Holds the iovec parameters that are passed to a service
kenjiArai 0:5b88d5760320 48 *
kenjiArai 0:5b88d5760320 49 * \note The size of the structure is (and have to be) multiple of 8 bytes
kenjiArai 0:5b88d5760320 50 */
kenjiArai 0:5b88d5760320 51 struct iovec_args_t {
kenjiArai 0:5b88d5760320 52 psa_invec in_vec[PSA_MAX_IOVEC]; /*!< Array of psa_invec objects */
kenjiArai 0:5b88d5760320 53 size_t in_len; /*!< Number psa_invec objects in in_vec
kenjiArai 0:5b88d5760320 54 */
kenjiArai 0:5b88d5760320 55 psa_outvec out_vec[PSA_MAX_IOVEC]; /*!< Array of psa_outvec objects */
kenjiArai 0:5b88d5760320 56 size_t out_len; /*!< Number psa_outvec objects in out_vec
kenjiArai 0:5b88d5760320 57 */
kenjiArai 0:5b88d5760320 58 };
kenjiArai 0:5b88d5760320 59
kenjiArai 0:5b88d5760320 60 /**
kenjiArai 0:5b88d5760320 61 * \brief Runtime context information of a partition
kenjiArai 0:5b88d5760320 62 */
kenjiArai 0:5b88d5760320 63 struct spm_partition_runtime_data_t {
kenjiArai 0:5b88d5760320 64 uint32_t partition_state;
kenjiArai 0:5b88d5760320 65 uint32_t caller_partition_idx;
kenjiArai 0:5b88d5760320 66 int32_t caller_client_id;
kenjiArai 0:5b88d5760320 67 uint32_t share;
kenjiArai 0:5b88d5760320 68 uint32_t stack_ptr;
kenjiArai 0:5b88d5760320 69 uint32_t lr;
kenjiArai 0:5b88d5760320 70 int32_t iovec_api; /*!< Whether the function in the partition
kenjiArai 0:5b88d5760320 71 * had been called using the iovec API.
kenjiArai 0:5b88d5760320 72 * FIXME: Remove the field once this is the
kenjiArai 0:5b88d5760320 73 * only option
kenjiArai 0:5b88d5760320 74 */
kenjiArai 0:5b88d5760320 75 struct iovec_args_t iovec_args;
kenjiArai 0:5b88d5760320 76 psa_outvec *orig_outvec;
kenjiArai 0:5b88d5760320 77 };
kenjiArai 0:5b88d5760320 78
kenjiArai 0:5b88d5760320 79
kenjiArai 0:5b88d5760320 80 /**
kenjiArai 0:5b88d5760320 81 * \brief Returns the index of the partition with the given partition ID.
kenjiArai 0:5b88d5760320 82 *
kenjiArai 0:5b88d5760320 83 * \param[in] partition_id Partition id
kenjiArai 0:5b88d5760320 84 *
kenjiArai 0:5b88d5760320 85 * \return the partition idx if partition_id is valid,
kenjiArai 0:5b88d5760320 86 * \ref SPM_INVALID_PARTITION_IDX othervise
kenjiArai 0:5b88d5760320 87 */
kenjiArai 0:5b88d5760320 88 uint32_t get_partition_idx(uint32_t partition_id);
kenjiArai 0:5b88d5760320 89
kenjiArai 0:5b88d5760320 90 #if (TFM_LVL != 1) || defined(TFM_PSA_API)
kenjiArai 0:5b88d5760320 91 /**
kenjiArai 0:5b88d5760320 92 * \brief Get bottom of stack region for a partition
kenjiArai 0:5b88d5760320 93 *
kenjiArai 0:5b88d5760320 94 * \param[in] partition_idx Partition index
kenjiArai 0:5b88d5760320 95 *
kenjiArai 0:5b88d5760320 96 * \return Stack region bottom value
kenjiArai 0:5b88d5760320 97 *
kenjiArai 0:5b88d5760320 98 * \note This function doesn't check if partition_idx is valid.
kenjiArai 0:5b88d5760320 99 */
kenjiArai 0:5b88d5760320 100 uint32_t tfm_spm_partition_get_stack_bottom(uint32_t partition_idx);
kenjiArai 0:5b88d5760320 101
kenjiArai 0:5b88d5760320 102 /**
kenjiArai 0:5b88d5760320 103 * \brief Get top of stack region for a partition
kenjiArai 0:5b88d5760320 104 *
kenjiArai 0:5b88d5760320 105 * \param[in] partition_idx Partition index
kenjiArai 0:5b88d5760320 106 *
kenjiArai 0:5b88d5760320 107 * \return Stack region top value
kenjiArai 0:5b88d5760320 108 *
kenjiArai 0:5b88d5760320 109 * \note This function doesn't check if partition_idx is valid.
kenjiArai 0:5b88d5760320 110 */
kenjiArai 0:5b88d5760320 111 uint32_t tfm_spm_partition_get_stack_top(uint32_t partition_idx);
kenjiArai 0:5b88d5760320 112 #endif
kenjiArai 0:5b88d5760320 113
kenjiArai 0:5b88d5760320 114 #if (TFM_LVL != 1) && !defined(TFM_PSA_API)
kenjiArai 0:5b88d5760320 115 /**
kenjiArai 0:5b88d5760320 116 * \brief Configure isolated sandbox for a partition
kenjiArai 0:5b88d5760320 117 *
kenjiArai 0:5b88d5760320 118 * \param[in] partition_idx Partition index
kenjiArai 0:5b88d5760320 119 *
kenjiArai 0:5b88d5760320 120 * \return Error code \ref spm_err_t
kenjiArai 0:5b88d5760320 121 *
kenjiArai 0:5b88d5760320 122 * \note This function doesn't check if partition_idx is valid.
kenjiArai 0:5b88d5760320 123 */
kenjiArai 0:5b88d5760320 124 enum spm_err_t tfm_spm_partition_sandbox_config(uint32_t partition_idx);
kenjiArai 0:5b88d5760320 125
kenjiArai 0:5b88d5760320 126 /**
kenjiArai 0:5b88d5760320 127 * \brief Deconfigure sandbox for a partition
kenjiArai 0:5b88d5760320 128 *
kenjiArai 0:5b88d5760320 129 * \param[in] partition_idx Partition index
kenjiArai 0:5b88d5760320 130 *
kenjiArai 0:5b88d5760320 131 * \return Error code \ref spm_err_t
kenjiArai 0:5b88d5760320 132 *
kenjiArai 0:5b88d5760320 133 * \note This function doesn't check if partition_idx is valid.
kenjiArai 0:5b88d5760320 134 */
kenjiArai 0:5b88d5760320 135 enum spm_err_t tfm_spm_partition_sandbox_deconfig(uint32_t partition_idx);
kenjiArai 0:5b88d5760320 136
kenjiArai 0:5b88d5760320 137 /**
kenjiArai 0:5b88d5760320 138 * \brief Get the start of the zero-initialised region for a partition
kenjiArai 0:5b88d5760320 139 *
kenjiArai 0:5b88d5760320 140 * \param[in] partition_idx Partition idx
kenjiArai 0:5b88d5760320 141 *
kenjiArai 0:5b88d5760320 142 * \return Start of the zero-initialised region
kenjiArai 0:5b88d5760320 143 *
kenjiArai 0:5b88d5760320 144 * \note This function doesn't check if partition_idx is valid.
kenjiArai 0:5b88d5760320 145 */
kenjiArai 0:5b88d5760320 146 uint32_t tfm_spm_partition_get_zi_start(uint32_t partition_idx);
kenjiArai 0:5b88d5760320 147
kenjiArai 0:5b88d5760320 148 /**
kenjiArai 0:5b88d5760320 149 * \brief Get the limit of the zero-initialised region for a partition
kenjiArai 0:5b88d5760320 150 *
kenjiArai 0:5b88d5760320 151 * \param[in] partition_idx Partition idx
kenjiArai 0:5b88d5760320 152 *
kenjiArai 0:5b88d5760320 153 * \return Limit of the zero-initialised region
kenjiArai 0:5b88d5760320 154 *
kenjiArai 0:5b88d5760320 155 * \note This function doesn't check if partition_idx is valid.
kenjiArai 0:5b88d5760320 156 * \note The address returned is not part of the region.
kenjiArai 0:5b88d5760320 157 */
kenjiArai 0:5b88d5760320 158 uint32_t tfm_spm_partition_get_zi_limit(uint32_t partition_idx);
kenjiArai 0:5b88d5760320 159
kenjiArai 0:5b88d5760320 160 /**
kenjiArai 0:5b88d5760320 161 * \brief Get the start of the read-write region for a partition
kenjiArai 0:5b88d5760320 162 *
kenjiArai 0:5b88d5760320 163 * \param[in] partition_idx Partition idx
kenjiArai 0:5b88d5760320 164 *
kenjiArai 0:5b88d5760320 165 * \return Start of the read-write region
kenjiArai 0:5b88d5760320 166 *
kenjiArai 0:5b88d5760320 167 * \note This function doesn't check if partition_idx is valid.
kenjiArai 0:5b88d5760320 168 */
kenjiArai 0:5b88d5760320 169 uint32_t tfm_spm_partition_get_rw_start(uint32_t partition_idx);
kenjiArai 0:5b88d5760320 170
kenjiArai 0:5b88d5760320 171 /**
kenjiArai 0:5b88d5760320 172 * \brief Get the limit of the read-write region for a partition
kenjiArai 0:5b88d5760320 173 *
kenjiArai 0:5b88d5760320 174 * \param[in] partition_idx Partition idx
kenjiArai 0:5b88d5760320 175 *
kenjiArai 0:5b88d5760320 176 * \return Limit of the read-write region
kenjiArai 0:5b88d5760320 177 *
kenjiArai 0:5b88d5760320 178 * \note This function doesn't check if partition_idx is valid.
kenjiArai 0:5b88d5760320 179 * \note The address returned is not part of the region.
kenjiArai 0:5b88d5760320 180 */
kenjiArai 0:5b88d5760320 181 uint32_t tfm_spm_partition_get_rw_limit(uint32_t partition_idx);
kenjiArai 0:5b88d5760320 182
kenjiArai 0:5b88d5760320 183 /**
kenjiArai 0:5b88d5760320 184 * \brief Save stack pointer for partition in database
kenjiArai 0:5b88d5760320 185 *
kenjiArai 0:5b88d5760320 186 * \param[in] partition_idx Partition index
kenjiArai 0:5b88d5760320 187 * \param[in] stack_ptr Stack pointer to be stored
kenjiArai 0:5b88d5760320 188 *
kenjiArai 0:5b88d5760320 189 * \note This function doesn't check if partition_idx is valid.
kenjiArai 0:5b88d5760320 190 */
kenjiArai 0:5b88d5760320 191 void tfm_spm_partition_set_stack(uint32_t partition_idx, uint32_t stack_ptr);
kenjiArai 0:5b88d5760320 192 #endif
kenjiArai 0:5b88d5760320 193
kenjiArai 0:5b88d5760320 194 /**
kenjiArai 0:5b88d5760320 195 * \brief Get the id of the partition for its index from the db
kenjiArai 0:5b88d5760320 196 *
kenjiArai 0:5b88d5760320 197 * \param[in] partition_idx Partition index
kenjiArai 0:5b88d5760320 198 *
kenjiArai 0:5b88d5760320 199 * \return Partition ID for that partition
kenjiArai 0:5b88d5760320 200 *
kenjiArai 0:5b88d5760320 201 * \note This function doesn't check if partition_idx is valid.
kenjiArai 0:5b88d5760320 202 */
kenjiArai 0:5b88d5760320 203 uint32_t tfm_spm_partition_get_partition_id(uint32_t partition_idx);
kenjiArai 0:5b88d5760320 204
kenjiArai 0:5b88d5760320 205 /**
kenjiArai 0:5b88d5760320 206 * \brief Get the flags associated with a partition
kenjiArai 0:5b88d5760320 207 *
kenjiArai 0:5b88d5760320 208 * \param[in] partition_idx Partition index
kenjiArai 0:5b88d5760320 209 *
kenjiArai 0:5b88d5760320 210 * \return Flags associated with the partition
kenjiArai 0:5b88d5760320 211 *
kenjiArai 0:5b88d5760320 212 * \note This function doesn't check if partition_idx is valid.
kenjiArai 0:5b88d5760320 213 */
kenjiArai 0:5b88d5760320 214 uint32_t tfm_spm_partition_get_flags(uint32_t partition_idx);
kenjiArai 0:5b88d5760320 215
kenjiArai 0:5b88d5760320 216 #ifndef TFM_PSA_API
kenjiArai 0:5b88d5760320 217 /**
kenjiArai 0:5b88d5760320 218 * \brief Get the current runtime data of a partition
kenjiArai 0:5b88d5760320 219 *
kenjiArai 0:5b88d5760320 220 * \param[in] partition_idx Partition index
kenjiArai 0:5b88d5760320 221 *
kenjiArai 0:5b88d5760320 222 * \return The runtime data of the specified partition
kenjiArai 0:5b88d5760320 223 *
kenjiArai 0:5b88d5760320 224 * \note This function doesn't check if partition_idx is valid.
kenjiArai 0:5b88d5760320 225 */
kenjiArai 0:5b88d5760320 226 const struct spm_partition_runtime_data_t *
kenjiArai 0:5b88d5760320 227 tfm_spm_partition_get_runtime_data(uint32_t partition_idx);
kenjiArai 0:5b88d5760320 228
kenjiArai 0:5b88d5760320 229 /**
kenjiArai 0:5b88d5760320 230 * \brief Returns the index of the partition that has running state
kenjiArai 0:5b88d5760320 231 *
kenjiArai 0:5b88d5760320 232 * \return The index of the partition with the running state, if there is any
kenjiArai 0:5b88d5760320 233 * set. 0 otherwise.
kenjiArai 0:5b88d5760320 234 */
kenjiArai 0:5b88d5760320 235 uint32_t tfm_spm_partition_get_running_partition_idx(void);
kenjiArai 0:5b88d5760320 236
kenjiArai 0:5b88d5760320 237 /**
kenjiArai 0:5b88d5760320 238 * \brief Save stack pointer and link register for partition in database
kenjiArai 0:5b88d5760320 239 *
kenjiArai 0:5b88d5760320 240 * \param[in] partition_idx Partition index
kenjiArai 0:5b88d5760320 241 * \param[in] stack_ptr Stack pointer to be stored
kenjiArai 0:5b88d5760320 242 * \param[in] lr Link register to be stored
kenjiArai 0:5b88d5760320 243 *
kenjiArai 0:5b88d5760320 244 * \note This function doesn't check if partition_idx is valid.
kenjiArai 0:5b88d5760320 245 */
kenjiArai 0:5b88d5760320 246 void tfm_spm_partition_store_context(uint32_t partition_idx,
kenjiArai 0:5b88d5760320 247 uint32_t stack_ptr, uint32_t lr);
kenjiArai 0:5b88d5760320 248
kenjiArai 0:5b88d5760320 249 /**
kenjiArai 0:5b88d5760320 250 * \brief Set the current state of a partition
kenjiArai 0:5b88d5760320 251 *
kenjiArai 0:5b88d5760320 252 * \param[in] partition_idx Partition index
kenjiArai 0:5b88d5760320 253 * \param[in] state The state to be set
kenjiArai 0:5b88d5760320 254 *
kenjiArai 0:5b88d5760320 255 * \note This function doesn't check if partition_idx is valid.
kenjiArai 0:5b88d5760320 256 * \note The state has to have the value set of \ref spm_part_state_t.
kenjiArai 0:5b88d5760320 257 */
kenjiArai 0:5b88d5760320 258 void tfm_spm_partition_set_state(uint32_t partition_idx, uint32_t state);
kenjiArai 0:5b88d5760320 259
kenjiArai 0:5b88d5760320 260 /**
kenjiArai 0:5b88d5760320 261 * \brief Set the caller partition index for a given partition
kenjiArai 0:5b88d5760320 262 *
kenjiArai 0:5b88d5760320 263 * \param[in] partition_idx Partition index
kenjiArai 0:5b88d5760320 264 * \param[in] caller_partition_idx The index of the caller partition
kenjiArai 0:5b88d5760320 265 *
kenjiArai 0:5b88d5760320 266 * \note This function doesn't check if any of the partition_idxs are valid.
kenjiArai 0:5b88d5760320 267 */
kenjiArai 0:5b88d5760320 268 void tfm_spm_partition_set_caller_partition_idx(uint32_t partition_idx,
kenjiArai 0:5b88d5760320 269 uint32_t caller_partition_idx);
kenjiArai 0:5b88d5760320 270
kenjiArai 0:5b88d5760320 271 /**
kenjiArai 0:5b88d5760320 272 * \brief Set the caller client ID for a given partition
kenjiArai 0:5b88d5760320 273 *
kenjiArai 0:5b88d5760320 274 * \param[in] partition_idx Partition index
kenjiArai 0:5b88d5760320 275 * \param[in] caller_client_id The ID of the calling client
kenjiArai 0:5b88d5760320 276 *
kenjiArai 0:5b88d5760320 277 * \note This function doesn't check if any of the partition_idxs are valid.
kenjiArai 0:5b88d5760320 278 */
kenjiArai 0:5b88d5760320 279 void tfm_spm_partition_set_caller_client_id(uint32_t partition_idx,
kenjiArai 0:5b88d5760320 280 int32_t caller_client_id);
kenjiArai 0:5b88d5760320 281
kenjiArai 0:5b88d5760320 282 /**
kenjiArai 0:5b88d5760320 283 * \brief Set the buffer share region of the partition
kenjiArai 0:5b88d5760320 284 *
kenjiArai 0:5b88d5760320 285 * \param[in] partition_idx Partition index
kenjiArai 0:5b88d5760320 286 * \param[in] share The buffer share region to be set
kenjiArai 0:5b88d5760320 287 *
kenjiArai 0:5b88d5760320 288 * \return Error code \ref spm_err_t
kenjiArai 0:5b88d5760320 289 *
kenjiArai 0:5b88d5760320 290 * \note This function doesn't check if partition_idx is valid.
kenjiArai 0:5b88d5760320 291 * \note share has to have the value set of \ref tfm_buffer_share_region_e
kenjiArai 0:5b88d5760320 292 */
kenjiArai 0:5b88d5760320 293 enum spm_err_t tfm_spm_partition_set_share(uint32_t partition_idx,
kenjiArai 0:5b88d5760320 294 uint32_t share);
kenjiArai 0:5b88d5760320 295
kenjiArai 0:5b88d5760320 296 /**
kenjiArai 0:5b88d5760320 297 * \brief Set the iovec parameters for the partition
kenjiArai 0:5b88d5760320 298 *
kenjiArai 0:5b88d5760320 299 * \param[in] partition_idx Partition index
kenjiArai 0:5b88d5760320 300 * \param[in] args The arguments of the secure function
kenjiArai 0:5b88d5760320 301 *
kenjiArai 0:5b88d5760320 302 * args is expected to be of type int32_t[4] where:
kenjiArai 0:5b88d5760320 303 * args[0] is in_vec
kenjiArai 0:5b88d5760320 304 * args[1] is in_len
kenjiArai 0:5b88d5760320 305 * args[2] is out_vec
kenjiArai 0:5b88d5760320 306 * args[3] is out_len
kenjiArai 0:5b88d5760320 307 *
kenjiArai 0:5b88d5760320 308 * \return Error code \ref spm_err_t
kenjiArai 0:5b88d5760320 309 *
kenjiArai 0:5b88d5760320 310 * \note This function doesn't check if partition_idx is valid.
kenjiArai 0:5b88d5760320 311 * \note This function assumes that the iovecs that are passed in args are
kenjiArai 0:5b88d5760320 312 * valid, and does no sanity check on them at all.
kenjiArai 0:5b88d5760320 313 */
kenjiArai 0:5b88d5760320 314 enum spm_err_t tfm_spm_partition_set_iovec(uint32_t partition_idx,
kenjiArai 0:5b88d5760320 315 const int32_t *args);
kenjiArai 0:5b88d5760320 316
kenjiArai 0:5b88d5760320 317 /**
kenjiArai 0:5b88d5760320 318 * \brief Execute partition init function
kenjiArai 0:5b88d5760320 319 *
kenjiArai 0:5b88d5760320 320 * \return Error code \ref spm_err_t
kenjiArai 0:5b88d5760320 321 */
kenjiArai 0:5b88d5760320 322 enum spm_err_t tfm_spm_partition_init(void);
kenjiArai 0:5b88d5760320 323
kenjiArai 0:5b88d5760320 324 /**
kenjiArai 0:5b88d5760320 325 * \brief Clears the context info from the database for a partition.
kenjiArai 0:5b88d5760320 326 *
kenjiArai 0:5b88d5760320 327 * \param[in] partition_idx Partition index
kenjiArai 0:5b88d5760320 328 *
kenjiArai 0:5b88d5760320 329 * \note This function doesn't check if partition_idx is valid.
kenjiArai 0:5b88d5760320 330 */
kenjiArai 0:5b88d5760320 331 void tfm_spm_partition_cleanup_context(uint32_t partition_idx);
kenjiArai 0:5b88d5760320 332 #endif /* !defined(TFM_PSA_API) */
kenjiArai 0:5b88d5760320 333
kenjiArai 0:5b88d5760320 334 /**
kenjiArai 0:5b88d5760320 335 * \brief Initialize partition database
kenjiArai 0:5b88d5760320 336 *
kenjiArai 0:5b88d5760320 337 * \return Error code \ref spm_err_t
kenjiArai 0:5b88d5760320 338 */
kenjiArai 0:5b88d5760320 339 enum spm_err_t tfm_spm_db_init(void);
kenjiArai 0:5b88d5760320 340
kenjiArai 0:5b88d5760320 341 /**
kenjiArai 0:5b88d5760320 342 * \brief Change the privilege mode for partition thread mode.
kenjiArai 0:5b88d5760320 343 *
kenjiArai 0:5b88d5760320 344 * \param[in] privileged Privileged mode,
kenjiArai 0:5b88d5760320 345 * \ref TFM_PARTITION_PRIVILEGED_MODE
kenjiArai 0:5b88d5760320 346 * and \ref TFM_PARTITION_UNPRIVILEGED_MODE
kenjiArai 0:5b88d5760320 347 *
kenjiArai 0:5b88d5760320 348 * \note Barrier instructions are not called by this function, and if
kenjiArai 0:5b88d5760320 349 * it is called in thread mode, it might be necessary to call
kenjiArai 0:5b88d5760320 350 * them after this function returns (just like it is done in
kenjiArai 0:5b88d5760320 351 * jump_to_ns_code()).
kenjiArai 0:5b88d5760320 352 */
kenjiArai 0:5b88d5760320 353 void tfm_spm_partition_change_privilege(uint32_t privileged);
kenjiArai 0:5b88d5760320 354
kenjiArai 0:5b88d5760320 355 #endif /*__SPM_API_H__ */