Ashutosh Singh | f4d8867 | 2017-11-29 13:35:43 +0000 | [diff] [blame] | 1 | /* |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 2 | * Copyright (c) 2017-2019, Arm Limited. All rights reserved. |
Ashutosh Singh | f4d8867 | 2017-11-29 13:35:43 +0000 | [diff] [blame] | 3 | * |
| 4 | * SPDX-License-Identifier: BSD-3-Clause |
| 5 | * |
| 6 | */ |
| 7 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 8 | #include "psa_protected_storage.h" |
| 9 | |
Ashutosh Singh | f4d8867 | 2017-11-29 13:35:43 +0000 | [diff] [blame] | 10 | #include "tfm_ns_lock.h" |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 11 | #include "tfm_sst_defs.h" |
| 12 | #include "tfm_sst_veneers.h" |
Mate Toth-Pal | 261df46 | 2018-08-07 12:02:42 +0200 | [diff] [blame] | 13 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 14 | psa_ps_status_t psa_ps_set(psa_ps_uid_t uid, |
| 15 | uint32_t data_length, |
| 16 | const void *p_data, |
| 17 | psa_ps_create_flags_t create_flags) |
Ashutosh Singh | f4d8867 | 2017-11-29 13:35:43 +0000 | [diff] [blame] | 18 | { |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 19 | enum tfm_sst_err_t err; |
Marc Moreno Berengue | 10d0d36 | 2018-06-18 14:15:56 +0100 | [diff] [blame] | 20 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 21 | err = tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_set, |
| 22 | (uint32_t)&uid, |
| 23 | (uint32_t)data_length, |
| 24 | (uint32_t)p_data, |
| 25 | (uint32_t)create_flags); |
Marc Moreno Berengue | 10d0d36 | 2018-06-18 14:15:56 +0100 | [diff] [blame] | 26 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 27 | return TFM_SST_PSA_RETURN(err); |
Ashutosh Singh | f4d8867 | 2017-11-29 13:35:43 +0000 | [diff] [blame] | 28 | } |
| 29 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 30 | psa_ps_status_t psa_ps_get(psa_ps_uid_t uid, |
| 31 | uint32_t data_offset, |
| 32 | uint32_t data_length, |
| 33 | void *p_data) |
Ashutosh Singh | f4d8867 | 2017-11-29 13:35:43 +0000 | [diff] [blame] | 34 | { |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 35 | enum tfm_sst_err_t err; |
Marc Moreno Berengue | 10d0d36 | 2018-06-18 14:15:56 +0100 | [diff] [blame] | 36 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 37 | err = tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_get, |
| 38 | (uint32_t)&uid, |
| 39 | (uint32_t)data_offset, |
| 40 | (uint32_t)data_length, |
| 41 | (uint32_t)p_data); |
Marc Moreno Berengue | 10d0d36 | 2018-06-18 14:15:56 +0100 | [diff] [blame] | 42 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 43 | return TFM_SST_PSA_RETURN(err); |
Ashutosh Singh | f4d8867 | 2017-11-29 13:35:43 +0000 | [diff] [blame] | 44 | } |
| 45 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 46 | psa_ps_status_t psa_ps_get_info(psa_ps_uid_t uid, struct psa_ps_info_t *p_info) |
Marc Moreno Berengue | 51af951 | 2018-06-14 18:28:14 +0100 | [diff] [blame] | 47 | { |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 48 | enum tfm_sst_err_t err; |
Marc Moreno Berengue | 10d0d36 | 2018-06-18 14:15:56 +0100 | [diff] [blame] | 49 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 50 | err = tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_get_info, |
| 51 | (uint32_t)&uid, |
| 52 | (uint32_t)p_info, |
| 53 | (uint32_t)0, |
| 54 | (uint32_t)0); |
Marc Moreno Berengue | 10d0d36 | 2018-06-18 14:15:56 +0100 | [diff] [blame] | 55 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 56 | return TFM_SST_PSA_RETURN(err); |
Marc Moreno Berengue | 51af951 | 2018-06-14 18:28:14 +0100 | [diff] [blame] | 57 | } |
| 58 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 59 | psa_ps_status_t psa_ps_remove(psa_ps_uid_t uid) |
Marc Moreno Berengue | 51af951 | 2018-06-14 18:28:14 +0100 | [diff] [blame] | 60 | { |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 61 | enum tfm_sst_err_t err; |
Marc Moreno Berengue | 10d0d36 | 2018-06-18 14:15:56 +0100 | [diff] [blame] | 62 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 63 | err = tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_remove, |
| 64 | (uint32_t)&uid, |
| 65 | (uint32_t)0, |
| 66 | (uint32_t)0, |
| 67 | (uint32_t)0); |
Marc Moreno Berengue | 10d0d36 | 2018-06-18 14:15:56 +0100 | [diff] [blame] | 68 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 69 | return TFM_SST_PSA_RETURN(err); |
Marc Moreno Berengue | 51af951 | 2018-06-14 18:28:14 +0100 | [diff] [blame] | 70 | } |
| 71 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 72 | psa_ps_status_t psa_ps_create(psa_ps_uid_t uid, uint32_t size, |
| 73 | psa_ps_create_flags_t create_flags) |
Ashutosh Singh | f4d8867 | 2017-11-29 13:35:43 +0000 | [diff] [blame] | 74 | { |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 75 | (void)uid, (void)size, (void)create_flags; |
| 76 | return PSA_PS_ERROR_NOT_SUPPORTED; |
Ashutosh Singh | f4d8867 | 2017-11-29 13:35:43 +0000 | [diff] [blame] | 77 | } |
| 78 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 79 | psa_ps_status_t psa_ps_set_extended(psa_ps_uid_t uid, uint32_t data_offset, |
| 80 | uint32_t data_length, const void *p_data) |
Ashutosh Singh | f4d8867 | 2017-11-29 13:35:43 +0000 | [diff] [blame] | 81 | { |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 82 | (void)uid, (void)data_offset, (void)data_length, (void)p_data; |
| 83 | return PSA_PS_ERROR_NOT_SUPPORTED; |
Ashutosh Singh | f4d8867 | 2017-11-29 13:35:43 +0000 | [diff] [blame] | 84 | } |
| 85 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 86 | uint32_t psa_ps_get_support(void) |
Ashutosh Singh | f4d8867 | 2017-11-29 13:35:43 +0000 | [diff] [blame] | 87 | { |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 88 | uint32_t support_flags; |
Marc Moreno Berengue | 10d0d36 | 2018-06-18 14:15:56 +0100 | [diff] [blame] | 89 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 90 | /* Initialise support_flags to a sensible default, to avoid returning an |
| 91 | * uninitialised value in case the secure function fails. |
| 92 | */ |
| 93 | support_flags = 0; |
Marc Moreno Berengue | 10d0d36 | 2018-06-18 14:15:56 +0100 | [diff] [blame] | 94 | |
Jamie Fox | b93da8b | 2018-12-13 18:27:30 +0000 | [diff] [blame^] | 95 | /* The PSA API does not return an error, so any error from TF-M is |
| 96 | * ignored. |
| 97 | */ |
| 98 | (void)tfm_ns_lock_dispatch((veneer_fn)tfm_sst_veneer_get_support, |
| 99 | (uint32_t)&support_flags, |
| 100 | (uint32_t)0, |
| 101 | (uint32_t)0, |
| 102 | (uint32_t)0); |
| 103 | |
| 104 | return support_flags; |
Ashutosh Singh | f4d8867 | 2017-11-29 13:35:43 +0000 | [diff] [blame] | 105 | } |