blob: f7f3972b1672079993dcaec097aeeb1192d0ac6d [file] [log] [blame]
Marc Moreno Berengue8e0fa7a2018-10-04 18:25:13 +01001/*
Raef Coles046ffd82022-06-16 13:52:48 +01002 * Copyright (c) 2018-2022, Arm Limited. All rights reserved.
Marc Moreno Berengue8e0fa7a2018-10-04 18:25:13 +01003 *
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>
Tamas Kaman262dc7b2019-03-20 13:37:12 +010012#include <stdbool.h>
Miklos Balintc7b1b6c2019-04-24 12:38:36 +020013#include <stdint.h>
Marc Moreno Berengue8e0fa7a2018-10-04 18:25:13 +010014#include "tfm_api.h"
15
16#ifdef __cplusplus
17extern "C" {
18#endif
19
20/**
21 * \brief TFM secure partition platform API version
22 */
23#define TFM_PLATFORM_API_VERSION_MAJOR (0)
Miklos Balintc7b1b6c2019-04-24 12:38:36 +020024#define TFM_PLATFORM_API_VERSION_MINOR (3)
Marc Moreno Berengue8e0fa7a2018-10-04 18:25:13 +010025
Galanakis, Minosef5118b2020-01-21 15:27:14 +000026#define TFM_PLATFORM_API_ID_NV_READ (1010)
27#define TFM_PLATFORM_API_ID_NV_INCREMENT (1011)
Raef Coles046ffd82022-06-16 13:52:48 +010028#define TFM_PLATFORM_API_ID_SYSTEM_RESET (1012)
29#define TFM_PLATFORM_API_ID_IOCTL (1013)
Galanakis, Minosef5118b2020-01-21 15:27:14 +000030
Marc Moreno Berengue8e0fa7a2018-10-04 18:25:13 +010031/*!
32 * \enum tfm_platform_err_t
33 *
34 * \brief Platform service error types
35 *
36 */
37enum tfm_platform_err_t {
38 TFM_PLATFORM_ERR_SUCCESS = 0,
Mate Toth-Pal8af8b032019-07-18 10:49:00 +020039 TFM_PLATFORM_ERR_SYSTEM_ERROR,
Tamas Kaman262dc7b2019-03-20 13:37:12 +010040 TFM_PLATFORM_ERR_INVALID_PARAM,
Miklos Balintc7b1b6c2019-04-24 12:38:36 +020041 TFM_PLATFORM_ERR_NOT_SUPPORTED,
Marc Moreno Berengue8e0fa7a2018-10-04 18:25:13 +010042
43 /* Following entry is only to ensure the error code of int size */
44 TFM_PLATFORM_ERR_FORCE_INT_SIZE = INT_MAX
45};
46
Miklos Balintc7b1b6c2019-04-24 12:38:36 +020047typedef int32_t tfm_platform_ioctl_req_t;
48
Marc Moreno Berengue8e0fa7a2018-10-04 18:25:13 +010049/*!
50 * \brief Resets the system.
51 *
52 * \return Returns values as specified by the \ref tfm_platform_err_t
53 */
54enum tfm_platform_err_t tfm_platform_system_reset(void);
55
Tamas Kaman262dc7b2019-03-20 13:37:12 +010056/*!
Miklos Balintc7b1b6c2019-04-24 12:38:36 +020057 * \brief Performs a platform-specific service
Tamas Kaman262dc7b2019-03-20 13:37:12 +010058 *
Miklos Balintc7b1b6c2019-04-24 12:38:36 +020059 * \param[in] request Request identifier (valid values vary
Tamas Kaman262dc7b2019-03-20 13:37:12 +010060 * based on the platform)
Miklos Balintc7b1b6c2019-04-24 12:38:36 +020061 * \param[in] input Input buffer to the requested service (or NULL)
62 * \param[in,out] output Output buffer to the requested service (or NULL)
Tamas Kaman262dc7b2019-03-20 13:37:12 +010063 *
64 * \return Returns values as specified by the \ref tfm_platform_err_t
65 */
Miklos Balintc7b1b6c2019-04-24 12:38:36 +020066enum tfm_platform_err_t tfm_platform_ioctl(tfm_platform_ioctl_req_t request,
67 psa_invec *input,
68 psa_outvec *output);
Tamas Kaman262dc7b2019-03-20 13:37:12 +010069
Galanakis, Minosef5118b2020-01-21 15:27:14 +000070/*!
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 */
78enum tfm_platform_err_t
79tfm_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 */
92enum tfm_platform_err_t
93tfm_platform_nv_counter_read(uint32_t counter_id,
94 uint32_t size, uint8_t *val);
Tamas Kaman262dc7b2019-03-20 13:37:12 +010095
Marc Moreno Berengue8e0fa7a2018-10-04 18:25:13 +010096#ifdef __cplusplus
97}
98#endif
99
100#endif /* __TFM_PLATFORM_API__ */