blob: ece17d09681b77133f32b08310ac280e394b9f2c [file] [log] [blame]
Edison Aif09acd42018-09-20 14:00:07 +08001/*
Summer Qin254ee972019-10-18 17:36:04 +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>
9#include <stdio.h>
Ken Liu1f345b02020-05-30 21:11:05 +080010#include "tfm/tfm_core_svc.h"
Jamie Foxcc31d402019-01-28 17:13:52 +000011#include "psa/client.h"
12#include "psa/service.h"
Edison Aif09acd42018-09-20 14:00:07 +080013
Summer Qin254ee972019-10-18 17:36:04 +080014__attribute__((naked))
Edison Aif09acd42018-09-20 14:00:07 +080015psa_signal_t psa_wait(psa_signal_t signal_mask, uint32_t timeout)
16
17{
Antonio de Angelisf2dea5b2019-04-16 14:50:50 +010018 __ASM volatile("SVC %0 \n"
19 "BX LR \n"
20 : : "I" (TFM_SVC_PSA_WAIT));
Edison Aif09acd42018-09-20 14:00:07 +080021}
22
Summer Qin254ee972019-10-18 17:36:04 +080023__attribute__((naked))
Edison Aif09acd42018-09-20 14:00:07 +080024psa_status_t psa_get(psa_signal_t signal, psa_msg_t *msg)
25{
Antonio de Angelisf2dea5b2019-04-16 14:50:50 +010026 __ASM volatile("SVC %0 \n"
27 "BX LR \n"
28 : : "I" (TFM_SVC_PSA_GET));
Edison Aif09acd42018-09-20 14:00:07 +080029}
30
Summer Qin254ee972019-10-18 17:36:04 +080031__attribute__((naked))
Edison Aif09acd42018-09-20 14:00:07 +080032void psa_set_rhandle(psa_handle_t msg_handle, void *rhandle)
33{
Antonio de Angelisf2dea5b2019-04-16 14:50:50 +010034 __ASM volatile("SVC %0 \n"
35 "BX LR \n"
36 : : "I" (TFM_SVC_PSA_SET_RHANDLE));
Edison Aif09acd42018-09-20 14:00:07 +080037}
38
Summer Qin254ee972019-10-18 17:36:04 +080039__attribute__((naked))
Edison Aif09acd42018-09-20 14:00:07 +080040size_t psa_read(psa_handle_t msg_handle, uint32_t invec_idx,
41 void *buffer, size_t num_bytes)
42
43{
Antonio de Angelisf2dea5b2019-04-16 14:50:50 +010044 __ASM volatile("SVC %0 \n"
45 "BX LR \n"
46 : : "I" (TFM_SVC_PSA_READ));
Edison Aif09acd42018-09-20 14:00:07 +080047}
48
Summer Qin254ee972019-10-18 17:36:04 +080049__attribute__((naked))
Edison Aif09acd42018-09-20 14:00:07 +080050size_t psa_skip(psa_handle_t msg_handle, uint32_t invec_idx, size_t num_bytes)
51{
Antonio de Angelisf2dea5b2019-04-16 14:50:50 +010052 __ASM volatile("SVC %0 \n"
53 "BX LR \n"
54 : : "I" (TFM_SVC_PSA_SKIP));
Edison Aif09acd42018-09-20 14:00:07 +080055}
56
Summer Qin254ee972019-10-18 17:36:04 +080057__attribute__((naked))
Edison Aif09acd42018-09-20 14:00:07 +080058void psa_write(psa_handle_t msg_handle, uint32_t outvec_idx,
59 const void *buffer, size_t num_bytes)
60{
Antonio de Angelisf2dea5b2019-04-16 14:50:50 +010061 __ASM volatile("SVC %0 \n"
62 "BX LR \n"
63 : : "I" (TFM_SVC_PSA_WRITE));
Edison Aif09acd42018-09-20 14:00:07 +080064}
65
Summer Qin254ee972019-10-18 17:36:04 +080066__attribute__((naked))
Edison Aif09acd42018-09-20 14:00:07 +080067void psa_reply(psa_handle_t msg_handle, psa_status_t retval)
68{
Antonio de Angelisf2dea5b2019-04-16 14:50:50 +010069 __ASM volatile("SVC %0 \n"
70 "BX LR \n"
71 : : "I" (TFM_SVC_PSA_REPLY));
Edison Aif09acd42018-09-20 14:00:07 +080072}
73
Summer Qin254ee972019-10-18 17:36:04 +080074__attribute__((naked))
Edison Aif09acd42018-09-20 14:00:07 +080075void psa_notify(int32_t partition_id)
76{
Antonio de Angelisf2dea5b2019-04-16 14:50:50 +010077 __ASM volatile("SVC %0 \n"
78 "BX LR \n"
79 : : "I" (TFM_SVC_PSA_NOTIFY));
Edison Aif09acd42018-09-20 14:00:07 +080080}
81
Summer Qin254ee972019-10-18 17:36:04 +080082__attribute__((naked))
Edison Aif09acd42018-09-20 14:00:07 +080083void psa_clear(void)
84{
Antonio de Angelisf2dea5b2019-04-16 14:50:50 +010085 __ASM volatile("SVC %0 \n"
86 "BX LR \n"
87 : : "I" (TFM_SVC_PSA_CLEAR));
Edison Aif09acd42018-09-20 14:00:07 +080088}
89
Summer Qin254ee972019-10-18 17:36:04 +080090__attribute__((naked))
Edison Aif09acd42018-09-20 14:00:07 +080091void psa_eoi(psa_signal_t irq_signal)
92{
Antonio de Angelisf2dea5b2019-04-16 14:50:50 +010093 __ASM volatile("SVC %0 \n"
94 "BX LR \n"
95 : : "I" (TFM_SVC_PSA_EOI));
Edison Aif09acd42018-09-20 14:00:07 +080096}
Edison Aia7d122e2019-12-03 10:05:54 +080097
Summer Qin254ee972019-10-18 17:36:04 +080098__attribute__((naked))
Edison Aia7d122e2019-12-03 10:05:54 +080099void psa_panic(void)
100{
101 __ASM volatile("SVC %0 \n"
102 "BX LR \n"
103 : : "I" (TFM_SVC_PSA_PANIC));
104}