TF-M Reference Manual  1.2.0
TrustedFirmware-M
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
tfm_ps_func_api.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017-2020, Arm Limited. All rights reserved.
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
9 
10 #include "tfm_ns_interface.h"
11 #include "tfm_veneers.h"
12 
13 #define IOVEC_LEN(x) (uint32_t)(sizeof(x)/sizeof(x[0]))
14 
16  size_t data_length,
17  const void *p_data,
18  psa_storage_create_flags_t create_flags)
19 {
20  psa_status_t status;
21  psa_invec in_vec[] = {
22  { .base = &uid, .len = sizeof(uid) },
23  { .base = p_data, .len = data_length },
24  { .base = &create_flags, .len = sizeof(create_flags) }
25  };
26 
28  (veneer_fn)tfm_tfm_ps_set_req_veneer,
29  (uint32_t)in_vec, IOVEC_LEN(in_vec),
30  (uint32_t)NULL, 0);
31 
32  /* A parameter with a buffer pointer pointer that has data length longer
33  * than maximum permitted is treated as a secure violation.
34  * TF-M framework rejects the request with TFM_ERROR_INVALID_PARAMETER.
35  */
38  }
39  return status;
40 }
41 
43  size_t data_offset,
44  size_t data_size,
45  void *p_data,
46  size_t *p_data_length)
47 {
48  psa_status_t status;
49  psa_invec in_vec[] = {
50  { .base = &uid, .len = sizeof(uid) },
51  { .base = &data_offset, .len = sizeof(data_offset) }
52  };
53 
54  psa_outvec out_vec[] = {
55  { .base = p_data, .len = data_size }
56  };
57 
58  if (p_data_length == NULL) {
60  }
61 
63  (veneer_fn)tfm_tfm_ps_get_req_veneer,
64  (uint32_t)in_vec, IOVEC_LEN(in_vec),
65  (uint32_t)out_vec, IOVEC_LEN(out_vec));
66 
67  *p_data_length = out_vec[0].len;
68 
69  return status;
70 }
71 
73  struct psa_storage_info_t *p_info)
74 {
75  psa_status_t status;
76  psa_invec in_vec[] = {
77  { .base = &uid, .len = sizeof(uid) }
78  };
79 
80  psa_outvec out_vec[] = {
81  { .base = p_info, .len = sizeof(*p_info) }
82  };
83 
85  (veneer_fn)tfm_tfm_ps_get_info_req_veneer,
86  (uint32_t)in_vec, IOVEC_LEN(in_vec),
87  (uint32_t)out_vec, IOVEC_LEN(out_vec));
88 
89  return status;
90 }
91 
93 {
94  psa_status_t status;
95  psa_invec in_vec[] = {
96  { .base = &uid, .len = sizeof(uid) }
97  };
98 
100  (veneer_fn)tfm_tfm_ps_remove_req_veneer,
101  (uint32_t)in_vec, IOVEC_LEN(in_vec),
102  (uint32_t)NULL, 0);
103 
104  return status;
105 }
106 
108  size_t capacity,
109  psa_storage_create_flags_t create_flags)
110 {
111  (void)uid;
112  (void)capacity;
113  (void)create_flags;
114 
116 }
117 
119  size_t data_length, const void *p_data)
120 {
121  (void)uid;
122  (void)data_offset;
123  (void)data_length;
124  (void)p_data;
125 
127 }
128 
129 uint32_t psa_ps_get_support(void)
130 {
131  /* Initialise support_flags to a sensible default, to avoid returning an
132  * uninitialised value in case the secure function fails.
133  */
134  uint32_t support_flags = 0;
135 
136  psa_outvec out_vec[] = {
137  { .base = &support_flags, .len = sizeof(support_flags) }
138  };
139 
141  (veneer_fn)tfm_tfm_ps_get_support_req_veneer,
142  (uint32_t)NULL, 0,
143  (uint32_t)out_vec, IOVEC_LEN(out_vec));
144 
145  return support_flags;
146 }
psa_status_t psa_ps_get_info(psa_storage_uid_t uid, struct psa_storage_info_t *p_info)
Retrieve the metadata about the provided uid.
void * base
Definition: client.h:75
psa_status_t psa_ps_set_extended(psa_storage_uid_t uid, size_t data_offset, size_t data_length, const void *p_data)
Sets partial data into an asset.
int32_t(* veneer_fn)(uint32_t arg0, uint32_t arg1, uint32_t arg2, uint32_t arg3)
psa_status_t psa_ps_remove(psa_storage_uid_t uid)
Remove the provided uid and its associated data from the storage.
int32_t tfm_ns_interface_dispatch(veneer_fn fn, uint32_t arg0, uint32_t arg1, uint32_t arg2, uint32_t arg3)
NS interface, veneer function dispatcher.
psa_status_t psa_ps_get(psa_storage_uid_t uid, size_t data_offset, size_t data_size, void *p_data, size_t *p_data_length)
Retrieve data associated with a provided uid.
psa_status_t psa_ps_create(psa_storage_uid_t uid, size_t capacity, psa_storage_create_flags_t create_flags)
Reserves storage for the specified uid.
#define IOVEC_LEN(x)
#define PSA_ERROR_INVALID_ARGUMENT
psa_status_t psa_ps_set(psa_storage_uid_t uid, size_t data_length, const void *p_data, psa_storage_create_flags_t create_flags)
Create a new, or modify an existing, uid/value pair.
uint32_t psa_ps_get_support(void)
Lists optional features.
#define PSA_ERROR_NOT_SUPPORTED
Definition: crypto_values.h:52
uint64_t psa_storage_uid_t
const void * base
Definition: client.h:67
uint32_t psa_storage_create_flags_t
int32_t psa_status_t
Function return status.
Definition: crypto_types.h:43