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 }