blob: 9a677a2cd3cfc1868c97ff743b70b5f2bcb6670b [file] [log] [blame]
Miklos Balint87da2512018-04-19 13:45:50 +02001/*
Jamie Foxcc31d402019-01-28 17:13:52 +00002 * Copyright (c) 2018-2019, Arm Limited. All rights reserved.
Miklos Balint87da2512018-04-19 13:45:50 +02003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
Jamie Foxcc31d402019-01-28 17:13:52 +00008#include "psa/client.h"
Antonio de Angelis05b24192019-07-04 15:28:46 +01009#include "tfm_ns_interface.h"
Miklos Balint87da2512018-04-19 13:45:50 +020010#include "tfm_api.h"
11
12/**** API functions ****/
13
Edison Aib3e56962018-09-04 19:12:31 +080014uint32_t psa_framework_version(void)
15{
Antonio de Angelis05b24192019-07-04 15:28:46 +010016 return tfm_ns_interface_dispatch(
17 (veneer_fn)tfm_psa_framework_version_veneer,
Edison Aib3e56962018-09-04 19:12:31 +080018 0,
19 0,
20 0,
21 0);
22}
23
Miklos Balint87da2512018-04-19 13:45:50 +020024uint32_t psa_version(uint32_t sid)
25{
Antonio de Angelis05b24192019-07-04 15:28:46 +010026 return tfm_ns_interface_dispatch(
27 (veneer_fn)tfm_psa_version_veneer,
Miklos Balint87da2512018-04-19 13:45:50 +020028 sid,
29 0,
30 0,
31 0);
32}
33
Summer Qin4b1d03b2019-07-02 14:56:08 +080034psa_handle_t psa_connect(uint32_t sid, uint32_t version)
Miklos Balint87da2512018-04-19 13:45:50 +020035{
Antonio de Angelis05b24192019-07-04 15:28:46 +010036 return tfm_ns_interface_dispatch(
37 (veneer_fn)tfm_psa_connect_veneer,
Miklos Balint87da2512018-04-19 13:45:50 +020038 sid,
Summer Qin4b1d03b2019-07-02 14:56:08 +080039 version,
Miklos Balint87da2512018-04-19 13:45:50 +020040 0,
41 0);
42}
43
Summer Qin4b1d03b2019-07-02 14:56:08 +080044psa_status_t psa_call(psa_handle_t handle, int32_t type,
Edison Aib3e56962018-09-04 19:12:31 +080045 const psa_invec *in_vec,
46 size_t in_len,
47 psa_outvec *out_vec,
48 size_t out_len)
Miklos Balint87da2512018-04-19 13:45:50 +020049{
Miklos Balintdd1ea1c2018-08-03 15:48:48 +020050 /* FixMe: sanity check can be added to offload some NS thread checks from
51 * TFM secure API
52 */
53
Miklos Balint87da2512018-04-19 13:45:50 +020054 /* Due to v8M restrictions, TF-M NS API needs to add another layer of
55 * serialization in order for NS to pass arguments to S
56 */
Summer Qin83ac1ca2019-09-29 18:33:28 +080057 const struct tfm_control_parameter_t ctrl_param = {
58 .type = type,
59 .in_len = in_len,
60 .out_len = out_len,
61 };
Edison Aib3e56962018-09-04 19:12:31 +080062
Antonio de Angelis05b24192019-07-04 15:28:46 +010063 return tfm_ns_interface_dispatch(
64 (veneer_fn)tfm_psa_call_veneer,
Miklos Balint87da2512018-04-19 13:45:50 +020065 (uint32_t)handle,
Summer Qin83ac1ca2019-09-29 18:33:28 +080066 (uint32_t)&ctrl_param,
67 (uint32_t)in_vec,
68 (uint32_t)out_vec);
Miklos Balint87da2512018-04-19 13:45:50 +020069}
70
71void psa_close(psa_handle_t handle)
72{
Antonio de Angelis05b24192019-07-04 15:28:46 +010073 (void)tfm_ns_interface_dispatch(
74 (veneer_fn)tfm_psa_close_veneer,
Miklos Balint87da2512018-04-19 13:45:50 +020075 (uint32_t)handle,
76 0,
77 0,
78 0);
79}