blob: a88df665e38a656df97a8b1a5af4652e180d1645 [file] [log] [blame]
Ashutosh Singhf4d88672017-11-29 13:35:43 +00001/*
Jamie Fox5592db02017-12-18 16:48:29 +00002 * Copyright (c) 2017-2018, Arm Limited. All rights reserved.
Ashutosh Singhf4d88672017-11-29 13:35:43 +00003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8#include <stdio.h>
9#include <cmsis_compiler.h>
10
11#ifndef __TFM_NS_SVC_H__
12#define __TFM_NS_SVC_H__
13
14#ifdef __cplusplus
15extern "C" {
16#endif
17
18/**
Antonio de Angelisd9cd66e2018-03-27 11:19:59 +010019 * \brief Include all the SVC handler headers
20 */
21#include "tfm_sst_svc_handler.h"
Antonio de Angeliscc657b32018-02-05 15:56:47 +000022#include "tfm_log_svc_handler.h"
Antonio de Angelisd9cd66e2018-03-27 11:19:59 +010023#include "svc_core_test_ns.h"
24#include "sst_test_service_svc.h"
25
26/**
Ashutosh Singhf4d88672017-11-29 13:35:43 +000027 * \brief Macro to encode an svc instruction
28 *
29 */
30#define SVC(code) __ASM("svc %0" : : "I" (code))
31
32/**
Antonio de Angelisd9cd66e2018-03-27 11:19:59 +010033 * \def LIST_SVC_DISPATCHERS
34 *
35 * \brief This is an X macro which lists
36 * the SVC interface exposed by the
37 * available secure services. The
38 * enumerator and corresponding
39 * SVC handler function need to be
40 * registered.
41 *
42 */
43#define LIST_SVC_DISPATCHERS \
Antonio de Angelisd9cd66e2018-03-27 11:19:59 +010044 X(SVC_TFM_SST_CREATE, tfm_sst_svc_create) \
Marc Moreno Berengue675b6e92018-06-14 17:31:01 +010045 X(SVC_TFM_SST_GET_INFO, tfm_sst_svc_get_info) \
Marc Moreno Berengue51af9512018-06-14 18:28:14 +010046 X(SVC_TFM_SST_GET_ATTRIBUTES, tfm_sst_svc_get_attributes) \
47 X(SVC_TFM_SST_SET_ATTRIBUTES, tfm_sst_svc_set_attributes) \
Antonio de Angelisd9cd66e2018-03-27 11:19:59 +010048 X(SVC_TFM_SST_READ, tfm_sst_svc_read) \
49 X(SVC_TFM_SST_WRITE, tfm_sst_svc_write) \
Antonio de Angelisf1c08512018-02-05 14:55:09 +000050 X(SVC_TFM_SST_DELETE, tfm_sst_svc_delete) \
Antonio de Angelis9a5bfea2018-03-27 13:13:55 +010051 X(SVC_TFM_LOG_RETRIEVE, tfm_log_svc_retrieve) \
52 X(SVC_TFM_LOG_GET_INFO, tfm_log_svc_get_info) \
53 X(SVC_TFM_LOG_DELETE_ITEMS, tfm_log_svc_delete_items)
Antonio de Angelisd9cd66e2018-03-27 11:19:59 +010054
55/**
56 * \def LIST_SVC_CORE_TEST_INTERACTIVE
57 *
58 * \brief This is an X macro which lists
59 * the SVC interface available for
60 * the CORE_TEST_INTERACTIVE. The
61 * enumerator and corresponding
62 * SVC handler function need to be
63 * registered.
64 *
65 */
66#define LIST_SVC_CORE_TEST_INTERACTIVE \
67 X(SVC_SECURE_DECREMENT_NS_LOCK_1, svc_secure_decrement_ns_lock_1) \
68 X(SVC_SECURE_DECREMENT_NS_LOCK_2, svc_secure_decrement_ns_lock_2)
69
70/**
71 * \def LIST_SVC_TFM_PARTITION_TEST_CORE
72 *
73 * \brief This is an X macro which lists
74 * the SVC interface available for
75 * the TEST_CORE partition. The
76 * enumerator and corresponding
77 * SVC handler function need to be
78 * registered.
79 *
80 */
81#define LIST_SVC_TFM_PARTITION_TEST_CORE \
82 X(SVC_TFM_CORE_TEST, svc_tfm_core_test) \
83 X(SVC_TFM_CORE_TEST_MULTIPLE_CALLS, svc_tfm_core_test_multiple_calls)
84
85/**
86 * \def LIST_SVC_TFM_PARTITION_TEST_SST
87 *
88 * \brief This is an X macro which lists
89 * the SVC interface available for
90 * TEST_SST partition. The
91 * enumerator and corresponding
92 * SVC handler function need to be
93 * registered.
94 *
95 */
96#define LIST_SVC_TFM_PARTITION_TEST_SST \
97 X(SVC_SST_TEST_SERVICE_SETUP, sst_test_service_svc_setup) \
98 X(SVC_SST_TEST_SERVICE_DUMMY_ENCRYPT, sst_test_service_svc_dummy_encrypt) \
99 X(SVC_SST_TEST_SERVICE_DUMMY_DECRYPT, sst_test_service_svc_dummy_decrypt) \
100 X(SVC_SST_TEST_SERVICE_CLEAN, sst_test_service_svc_clean)
101
102/**
Ben Davis6d7256b2018-04-18 14:16:53 +0100103 * \def LIST_SVC_TFM_PARTITION_TEST_SECURE_SERVICES
104 *
105 * \brief This is an X macro which lists
106 * the SVC interface available for
107 * TEST_SECURE_SERVICES partition.
108 * The enumerator and corresponding
109 * SVC handler function need to be
110 * registered.
111 *
112 */
113#define LIST_SVC_TFM_PARTITION_TEST_SECURE_SERVICES \
114 X(SVC_TFM_SECURE_CLIENT_RUN_TESTS, tfm_secure_client_service_svc_run_tests)
115
116/**
Ashutosh Singhf4d88672017-11-29 13:35:43 +0000117 * \brief Numbers associated to each SVC available
118 *
119 * \details Start from 1 as 0 is reserved by RTX
120 */
121enum tfm_svc_num {
122 SVC_INVALID = 0,
123
Antonio de Angelisd9cd66e2018-03-27 11:19:59 +0100124#define X(SVC_ENUM, SVC_HANDLER) SVC_ENUM,
125 /* SVC API for Services */
126 LIST_SVC_DISPATCHERS
Ashutosh Singhf4d88672017-11-29 13:35:43 +0000127
128#if defined(CORE_TEST_INTERACTIVE)
Antonio de Angelisd9cd66e2018-03-27 11:19:59 +0100129 LIST_SVC_CORE_TEST_INTERACTIVE
Ashutosh Singhf4d88672017-11-29 13:35:43 +0000130#endif /* CORE_TEST_INTERACTIVE */
131
Mate Toth-Pal349714a2018-02-23 15:30:24 +0100132#if defined(TFM_PARTITION_TEST_CORE)
Antonio de Angelisd9cd66e2018-03-27 11:19:59 +0100133 LIST_SVC_TFM_PARTITION_TEST_CORE
Mate Toth-Pal349714a2018-02-23 15:30:24 +0100134#endif /* TFM_PARTITION_TEST_CORE */
Ashutosh Singhf4d88672017-11-29 13:35:43 +0000135
Mate Toth-Pal349714a2018-02-23 15:30:24 +0100136#if defined(TFM_PARTITION_TEST_SST)
Antonio de Angelisd9cd66e2018-03-27 11:19:59 +0100137 LIST_SVC_TFM_PARTITION_TEST_SST
Mate Toth-Pal349714a2018-02-23 15:30:24 +0100138#endif /* TFM_PARTITION_TEST_SST */
Jamie Fox5592db02017-12-18 16:48:29 +0000139
Ben Davis6d7256b2018-04-18 14:16:53 +0100140#if defined(TFM_PARTITION_TEST_SECURE_SERVICES)
141 LIST_SVC_TFM_PARTITION_TEST_SECURE_SERVICES
142#endif /* TFM_PARTITION_TEST_SECURE_SERVICES */
143
Antonio de Angelisd9cd66e2018-03-27 11:19:59 +0100144#undef X
145
Ashutosh Singhf4d88672017-11-29 13:35:43 +0000146 /* add all the new entries above this line */
147 SVC_TFM_MAX,
148};
149
150/* number of user SVC functions */
151#define USER_SVC_COUNT (SVC_TFM_MAX - 1)
152
153#ifdef __cplusplus
154}
155#endif
156
157#endif /* __TFM_NS_SVC_H__ */