Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 1 | /* |
Summer Qin | 254ee97 | 2019-10-18 17:36:04 +0800 | [diff] [blame] | 2 | * Copyright (c) 2018-2020, Arm Limited. All rights reserved. |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 3 | * |
| 4 | * SPDX-License-Identifier: BSD-3-Clause |
| 5 | * |
| 6 | */ |
| 7 | |
| 8 | #include <inttypes.h> |
| 9 | #include <stdio.h> |
Ken Liu | 1f345b0 | 2020-05-30 21:11:05 +0800 | [diff] [blame] | 10 | #include "tfm/tfm_core_svc.h" |
Jamie Fox | cc31d40 | 2019-01-28 17:13:52 +0000 | [diff] [blame] | 11 | #include "psa/client.h" |
| 12 | #include "psa/service.h" |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 13 | |
Summer Qin | 254ee97 | 2019-10-18 17:36:04 +0800 | [diff] [blame] | 14 | __attribute__((naked)) |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 15 | psa_signal_t psa_wait(psa_signal_t signal_mask, uint32_t timeout) |
| 16 | |
| 17 | { |
Antonio de Angelis | f2dea5b | 2019-04-16 14:50:50 +0100 | [diff] [blame] | 18 | __ASM volatile("SVC %0 \n" |
| 19 | "BX LR \n" |
| 20 | : : "I" (TFM_SVC_PSA_WAIT)); |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 21 | } |
| 22 | |
Summer Qin | 254ee97 | 2019-10-18 17:36:04 +0800 | [diff] [blame] | 23 | __attribute__((naked)) |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 24 | psa_status_t psa_get(psa_signal_t signal, psa_msg_t *msg) |
| 25 | { |
Antonio de Angelis | f2dea5b | 2019-04-16 14:50:50 +0100 | [diff] [blame] | 26 | __ASM volatile("SVC %0 \n" |
| 27 | "BX LR \n" |
| 28 | : : "I" (TFM_SVC_PSA_GET)); |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 29 | } |
| 30 | |
Summer Qin | 254ee97 | 2019-10-18 17:36:04 +0800 | [diff] [blame] | 31 | __attribute__((naked)) |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 32 | void psa_set_rhandle(psa_handle_t msg_handle, void *rhandle) |
| 33 | { |
Antonio de Angelis | f2dea5b | 2019-04-16 14:50:50 +0100 | [diff] [blame] | 34 | __ASM volatile("SVC %0 \n" |
| 35 | "BX LR \n" |
| 36 | : : "I" (TFM_SVC_PSA_SET_RHANDLE)); |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 37 | } |
| 38 | |
Summer Qin | 254ee97 | 2019-10-18 17:36:04 +0800 | [diff] [blame] | 39 | __attribute__((naked)) |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 40 | size_t psa_read(psa_handle_t msg_handle, uint32_t invec_idx, |
| 41 | void *buffer, size_t num_bytes) |
| 42 | |
| 43 | { |
Antonio de Angelis | f2dea5b | 2019-04-16 14:50:50 +0100 | [diff] [blame] | 44 | __ASM volatile("SVC %0 \n" |
| 45 | "BX LR \n" |
| 46 | : : "I" (TFM_SVC_PSA_READ)); |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 47 | } |
| 48 | |
Summer Qin | 254ee97 | 2019-10-18 17:36:04 +0800 | [diff] [blame] | 49 | __attribute__((naked)) |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 50 | size_t psa_skip(psa_handle_t msg_handle, uint32_t invec_idx, size_t num_bytes) |
| 51 | { |
Antonio de Angelis | f2dea5b | 2019-04-16 14:50:50 +0100 | [diff] [blame] | 52 | __ASM volatile("SVC %0 \n" |
| 53 | "BX LR \n" |
| 54 | : : "I" (TFM_SVC_PSA_SKIP)); |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 55 | } |
| 56 | |
Summer Qin | 254ee97 | 2019-10-18 17:36:04 +0800 | [diff] [blame] | 57 | __attribute__((naked)) |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 58 | void psa_write(psa_handle_t msg_handle, uint32_t outvec_idx, |
| 59 | const void *buffer, size_t num_bytes) |
| 60 | { |
Antonio de Angelis | f2dea5b | 2019-04-16 14:50:50 +0100 | [diff] [blame] | 61 | __ASM volatile("SVC %0 \n" |
| 62 | "BX LR \n" |
| 63 | : : "I" (TFM_SVC_PSA_WRITE)); |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 64 | } |
| 65 | |
Summer Qin | 254ee97 | 2019-10-18 17:36:04 +0800 | [diff] [blame] | 66 | __attribute__((naked)) |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 67 | void psa_reply(psa_handle_t msg_handle, psa_status_t retval) |
| 68 | { |
Antonio de Angelis | f2dea5b | 2019-04-16 14:50:50 +0100 | [diff] [blame] | 69 | __ASM volatile("SVC %0 \n" |
| 70 | "BX LR \n" |
| 71 | : : "I" (TFM_SVC_PSA_REPLY)); |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 72 | } |
| 73 | |
Summer Qin | 254ee97 | 2019-10-18 17:36:04 +0800 | [diff] [blame] | 74 | __attribute__((naked)) |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 75 | void psa_notify(int32_t partition_id) |
| 76 | { |
Antonio de Angelis | f2dea5b | 2019-04-16 14:50:50 +0100 | [diff] [blame] | 77 | __ASM volatile("SVC %0 \n" |
| 78 | "BX LR \n" |
| 79 | : : "I" (TFM_SVC_PSA_NOTIFY)); |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 80 | } |
| 81 | |
Summer Qin | 254ee97 | 2019-10-18 17:36:04 +0800 | [diff] [blame] | 82 | __attribute__((naked)) |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 83 | void psa_clear(void) |
| 84 | { |
Antonio de Angelis | f2dea5b | 2019-04-16 14:50:50 +0100 | [diff] [blame] | 85 | __ASM volatile("SVC %0 \n" |
| 86 | "BX LR \n" |
| 87 | : : "I" (TFM_SVC_PSA_CLEAR)); |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 88 | } |
| 89 | |
Summer Qin | 254ee97 | 2019-10-18 17:36:04 +0800 | [diff] [blame] | 90 | __attribute__((naked)) |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 91 | void psa_eoi(psa_signal_t irq_signal) |
| 92 | { |
Antonio de Angelis | f2dea5b | 2019-04-16 14:50:50 +0100 | [diff] [blame] | 93 | __ASM volatile("SVC %0 \n" |
| 94 | "BX LR \n" |
| 95 | : : "I" (TFM_SVC_PSA_EOI)); |
Edison Ai | f09acd4 | 2018-09-20 14:00:07 +0800 | [diff] [blame] | 96 | } |
Edison Ai | a7d122e | 2019-12-03 10:05:54 +0800 | [diff] [blame] | 97 | |
Summer Qin | 254ee97 | 2019-10-18 17:36:04 +0800 | [diff] [blame] | 98 | __attribute__((naked)) |
Edison Ai | a7d122e | 2019-12-03 10:05:54 +0800 | [diff] [blame] | 99 | void psa_panic(void) |
| 100 | { |
| 101 | __ASM volatile("SVC %0 \n" |
| 102 | "BX LR \n" |
| 103 | : : "I" (TFM_SVC_PSA_PANIC)); |
| 104 | } |