blob: e4620638753d9d62c24f800b31d98cb2749cbafd [file] [log] [blame]
Edison Aif09acd42018-09-20 14:00:07 +08001/*
Ken Liu1f345b02020-05-30 21:11:05 +08002 * Copyright (c) 2018-2020, Arm Limited. All rights reserved.
Edison Aif09acd42018-09-20 14:00:07 +08003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8#include <inttypes.h>
Ken Liu1f345b02020-05-30 21:11:05 +08009#include "tfm/tfm_core_svc.h"
Jamie Foxcc31d402019-01-28 17:13:52 +000010#include "psa/client.h"
Summer Qin806af742019-10-18 14:44:43 +080011#include "tfm_api.h"
Edison Aif09acd42018-09-20 14:00:07 +080012
Summer Qin254ee972019-10-18 17:36:04 +080013__attribute__((naked))
Edison Aif09acd42018-09-20 14:00:07 +080014uint32_t psa_framework_version(void)
15{
Antonio de Angelisf2dea5b2019-04-16 14:50:50 +010016 __ASM volatile("SVC %0 \n"
17 "BX LR \n"
18 : : "I" (TFM_SVC_PSA_FRAMEWORK_VERSION));
Edison Aif09acd42018-09-20 14:00:07 +080019}
20
Summer Qin254ee972019-10-18 17:36:04 +080021__attribute__((naked))
Edison Aif09acd42018-09-20 14:00:07 +080022uint32_t psa_version(uint32_t sid)
23{
Antonio de Angelisf2dea5b2019-04-16 14:50:50 +010024 __ASM volatile("SVC %0 \n"
25 "BX LR \n"
26 : : "I" (TFM_SVC_PSA_VERSION));
Edison Aif09acd42018-09-20 14:00:07 +080027}
28
Summer Qin254ee972019-10-18 17:36:04 +080029__attribute__((naked))
Summer Qin4b1d03b2019-07-02 14:56:08 +080030psa_handle_t psa_connect(uint32_t sid, uint32_t version)
Edison Aif09acd42018-09-20 14:00:07 +080031{
Antonio de Angelisf2dea5b2019-04-16 14:50:50 +010032 __ASM volatile("SVC %0 \n"
33 "BX LR \n"
34 : : "I" (TFM_SVC_PSA_CONNECT));
Edison Aif09acd42018-09-20 14:00:07 +080035}
36
Summer Qin254ee972019-10-18 17:36:04 +080037__attribute__((naked))
Summer Qin806af742019-10-18 14:44:43 +080038static psa_status_t psa_call_param_pack(psa_handle_t handle,
39 struct tfm_control_parameter_t *ctrl_param,
40 const psa_invec *in_vec, psa_outvec *out_vec)
41{
42 __ASM volatile("SVC %0 \n"
43 "BX LR \n"
44 : : "I" (TFM_SVC_PSA_CALL));
45}
46
Edison Aif09acd42018-09-20 14:00:07 +080047psa_status_t psa_call(psa_handle_t handle,
Summer Qin4b1d03b2019-07-02 14:56:08 +080048 int32_t type,
Edison Aif09acd42018-09-20 14:00:07 +080049 const psa_invec *in_vec,
50 size_t in_len,
51 psa_outvec *out_vec,
52 size_t out_len)
53{
Summer Qin806af742019-10-18 14:44:43 +080054 struct tfm_control_parameter_t ctrl_param;
55 ctrl_param.type = type;
56 ctrl_param.in_len = in_len;
57 ctrl_param.out_len = out_len;
58
59 return psa_call_param_pack(handle, &ctrl_param, in_vec, out_vec);
Edison Aif09acd42018-09-20 14:00:07 +080060}
61
Summer Qin254ee972019-10-18 17:36:04 +080062__attribute__((naked))
Edison Aif09acd42018-09-20 14:00:07 +080063void psa_close(psa_handle_t handle)
64{
Antonio de Angelisf2dea5b2019-04-16 14:50:50 +010065 __ASM volatile("SVC %0 \n"
66 "BX LR \n"
67 : : "I" (TFM_SVC_PSA_CLOSE));
Edison Aif09acd42018-09-20 14:00:07 +080068}