1 /*
2 * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7 #include "ps_frontend.h"
8 #include <psa/protected_storage.h>
9
10
11 /* Singleton instance data */
12 static struct psa_ps_frontend
13 {
14 struct storage_backend *backend;
15 uint32_t client_id;
16 } instance;
17
psa_ps_frontend_init(struct storage_backend * backend)18 psa_status_t psa_ps_frontend_init(struct storage_backend *backend)
19 {
20 instance.backend = backend;
21 instance.client_id = 0;
22
23 return PSA_SUCCESS;
24 }
25
psa_ps_set(psa_storage_uid_t uid,size_t data_length,const void * p_data,psa_storage_create_flags_t create_flags)26 psa_status_t psa_ps_set(psa_storage_uid_t uid,
27 size_t data_length,
28 const void *p_data,
29 psa_storage_create_flags_t create_flags)
30 {
31 return instance.backend->interface->set(
32 instance.backend->context,
33 instance.client_id,
34 uid,
35 data_length,
36 p_data,
37 create_flags);
38 }
39
psa_ps_get(psa_storage_uid_t uid,size_t data_offset,size_t data_size,void * p_data,size_t * p_data_length)40 psa_status_t psa_ps_get(psa_storage_uid_t uid,
41 size_t data_offset,
42 size_t data_size,
43 void *p_data,
44 size_t *p_data_length)
45 {
46 return instance.backend->interface->get(
47 instance.backend->context,
48 instance.client_id,
49 uid,
50 data_offset,
51 data_size,
52 p_data,
53 p_data_length);
54 }
55
psa_ps_get_info(psa_storage_uid_t uid,struct psa_storage_info_t * p_info)56 psa_status_t psa_ps_get_info(psa_storage_uid_t uid,
57 struct psa_storage_info_t *p_info)
58 {
59 return instance.backend->interface->get_info(
60 instance.backend->context,
61 instance.client_id,
62 uid,
63 p_info);
64 }
65
psa_ps_remove(psa_storage_uid_t uid)66 psa_status_t psa_ps_remove(psa_storage_uid_t uid)
67 {
68 return instance.backend->interface->remove(
69 instance.backend->context,
70 instance.client_id,
71 uid);
72 }
73
psa_ps_create(psa_storage_uid_t uid,size_t capacity,psa_storage_create_flags_t create_flags)74 psa_status_t psa_ps_create(psa_storage_uid_t uid,
75 size_t capacity,
76 psa_storage_create_flags_t create_flags)
77 {
78 return instance.backend->interface->create(
79 instance.backend->context,
80 instance.client_id,
81 uid,
82 capacity,
83 create_flags);
84 }
85
psa_ps_set_extended(psa_storage_uid_t uid,size_t data_offset,size_t data_length,const void * p_data)86 psa_status_t psa_ps_set_extended(psa_storage_uid_t uid,
87 size_t data_offset,
88 size_t data_length,
89 const void *p_data)
90 {
91 return instance.backend->interface->set_extended(
92 instance.backend->context,
93 instance.client_id,
94 uid,
95 data_offset,
96 data_length,
97 p_data);
98 }
99
psa_ps_get_support(void)100 uint32_t psa_ps_get_support(void)
101 {
102 return instance.backend->interface->get_support(
103 instance.backend->context,
104 instance.client_id);
105 }