1 /* 2 * Copyright (c) 2018-2022, Arm Limited. All rights reserved. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 * 6 */ 7 8 #ifndef __TFM_PLATFORM_API__ 9 #define __TFM_PLATFORM_API__ 10 11 #include <limits.h> 12 #include <stdbool.h> 13 #include <stdint.h> 14 #include "psa/client.h" 15 16 #ifdef __cplusplus 17 extern "C" { 18 #endif 19 20 /** 21 * \brief TFM secure partition platform API version 22 */ 23 #define TFM_PLATFORM_API_VERSION_MAJOR (0) 24 #define TFM_PLATFORM_API_VERSION_MINOR (3) 25 26 #define TFM_PLATFORM_API_ID_NV_READ (1010) 27 #define TFM_PLATFORM_API_ID_NV_INCREMENT (1011) 28 #define TFM_PLATFORM_API_ID_SYSTEM_RESET (1012) 29 #define TFM_PLATFORM_API_ID_IOCTL (1013) 30 31 /*! 32 * \enum tfm_platform_err_t 33 * 34 * \brief Platform service error types 35 * 36 */ 37 enum tfm_platform_err_t { 38 TFM_PLATFORM_ERR_SUCCESS = 0, 39 TFM_PLATFORM_ERR_SYSTEM_ERROR, 40 TFM_PLATFORM_ERR_INVALID_PARAM, 41 TFM_PLATFORM_ERR_NOT_SUPPORTED, 42 43 /* Following entry is only to ensure the error code of int size */ 44 TFM_PLATFORM_ERR_FORCE_INT_SIZE = INT_MAX 45 }; 46 47 typedef int32_t tfm_platform_ioctl_req_t; 48 49 /*! 50 * \brief Resets the system. 51 * 52 * \return Returns values as specified by the \ref tfm_platform_err_t 53 */ 54 enum tfm_platform_err_t tfm_platform_system_reset(void); 55 56 /*! 57 * \brief Performs a platform-specific service 58 * 59 * \param[in] request Request identifier (valid values vary 60 * based on the platform) 61 * \param[in] input Input buffer to the requested service (or NULL) 62 * \param[in,out] output Output buffer to the requested service (or NULL) 63 * 64 * \return Returns values as specified by the \ref tfm_platform_err_t 65 */ 66 enum tfm_platform_err_t tfm_platform_ioctl(tfm_platform_ioctl_req_t request, 67 psa_invec *input, 68 psa_outvec *output); 69 70 /*! 71 * \brief Increments the given non-volatile (NV) counter by one 72 * 73 * \param[in] counter_id NV counter ID. 74 * 75 * \return TFM_PLATFORM_ERR_SUCCESS if the value is read correctly. Otherwise, 76 * it returns TFM_PLATFORM_ERR_SYSTEM_ERROR. 77 */ 78 enum tfm_platform_err_t 79 tfm_platform_nv_counter_increment(uint32_t counter_id); 80 81 /*! 82 * \brief Reads the given non-volatile (NV) counter 83 * 84 * \param[in] counter_id NV counter ID. 85 * \param[in] size Size of the buffer to store NV counter value 86 * in bytes. 87 * \param[out] val Pointer to store the current NV counter value. 88 * 89 * \return TFM_PLATFORM_ERR_SUCCESS if the value is read correctly. Otherwise, 90 * it returns TFM_PLATFORM_ERR_SYSTEM_ERROR. 91 */ 92 enum tfm_platform_err_t 93 tfm_platform_nv_counter_read(uint32_t counter_id, 94 uint32_t size, uint8_t *val); 95 96 #ifdef __cplusplus 97 } 98 #endif 99 100 #endif /* __TFM_PLATFORM_API__ */ 101