xref: /optee_os/core/include/tee/tadb.h (revision 5baee69a01402feeae9288cf4b67a7d100496933)
1*5baee69aSJens Wiklander /*
2*5baee69aSJens Wiklander  * Copyright (c) 2017, Linaro Limited
3*5baee69aSJens Wiklander  *
4*5baee69aSJens Wiklander  * SPDX-License-Identifier: BSD-2-Clause
5*5baee69aSJens Wiklander  */
6*5baee69aSJens Wiklander 
7*5baee69aSJens Wiklander #ifndef __TEE_TADB_H
8*5baee69aSJens Wiklander #define __TEE_TADB_H
9*5baee69aSJens Wiklander 
10*5baee69aSJens Wiklander #include <tee/tee_fs.h>
11*5baee69aSJens Wiklander 
12*5baee69aSJens Wiklander struct tee_tadb_ta_write;
13*5baee69aSJens Wiklander struct tee_tadb_ta_read;
14*5baee69aSJens Wiklander 
15*5baee69aSJens Wiklander /*
16*5baee69aSJens Wiklander  * struct tee_tadb_property
17*5baee69aSJens Wiklander  * @uuid:	UUID of Trusted Application (TA) or Security Domain (SD)
18*5baee69aSJens Wiklander  * @version:	Version of TA or SD
19*5baee69aSJens Wiklander  * @custom_size:Size of customized properties, prepended to the encrypted
20*5baee69aSJens Wiklander  *		TA binary
21*5baee69aSJens Wiklander  * @bin_size:	Size of the binary TA
22*5baee69aSJens Wiklander  */
23*5baee69aSJens Wiklander struct tee_tadb_property {
24*5baee69aSJens Wiklander 	TEE_UUID uuid;
25*5baee69aSJens Wiklander 	uint32_t version;
26*5baee69aSJens Wiklander 	uint32_t custom_size;
27*5baee69aSJens Wiklander 	uint32_t bin_size;
28*5baee69aSJens Wiklander };
29*5baee69aSJens Wiklander 
30*5baee69aSJens Wiklander struct tee_fs_rpc_operation;
31*5baee69aSJens Wiklander 
32*5baee69aSJens Wiklander struct tee_tadb_file_operations {
33*5baee69aSJens Wiklander 	TEE_Result (*open)(uint32_t file_number, int *fd);
34*5baee69aSJens Wiklander 	TEE_Result (*create)(uint32_t file_number, int *fd);
35*5baee69aSJens Wiklander 	void (*close)(int fd);
36*5baee69aSJens Wiklander 	TEE_Result (*remove)(uint32_t file_number);
37*5baee69aSJens Wiklander 
38*5baee69aSJens Wiklander 	TEE_Result (*read_init)(struct tee_fs_rpc_operation *op, int fd,
39*5baee69aSJens Wiklander 				size_t pos, uint8_t **data, size_t bytes);
40*5baee69aSJens Wiklander 	TEE_Result (*read_final)(struct tee_fs_rpc_operation *op,
41*5baee69aSJens Wiklander 				size_t *bytes);
42*5baee69aSJens Wiklander 
43*5baee69aSJens Wiklander 	TEE_Result (*write_init)(struct tee_fs_rpc_operation *op, int fd,
44*5baee69aSJens Wiklander 				 size_t pos, uint8_t **data, size_t len);
45*5baee69aSJens Wiklander 	TEE_Result (*write_final)(struct tee_fs_rpc_operation *op);
46*5baee69aSJens Wiklander };
47*5baee69aSJens Wiklander 
48*5baee69aSJens Wiklander TEE_Result tee_tadb_ta_create(const struct tee_tadb_property *property,
49*5baee69aSJens Wiklander 			      struct tee_tadb_ta_write **ta);
50*5baee69aSJens Wiklander TEE_Result tee_tadb_ta_write(struct tee_tadb_ta_write *ta, const void *buf,
51*5baee69aSJens Wiklander 			     size_t len);
52*5baee69aSJens Wiklander void tee_tadb_ta_close_and_delete(struct tee_tadb_ta_write *ta);
53*5baee69aSJens Wiklander TEE_Result tee_tadb_ta_close_and_commit(struct tee_tadb_ta_write *ta);
54*5baee69aSJens Wiklander 
55*5baee69aSJens Wiklander TEE_Result tee_tadb_ta_delete(const TEE_UUID *uuid);
56*5baee69aSJens Wiklander 
57*5baee69aSJens Wiklander TEE_Result tee_tadb_ta_open(const TEE_UUID *uuid, struct tee_tadb_ta_read **ta);
58*5baee69aSJens Wiklander const struct tee_tadb_property *
59*5baee69aSJens Wiklander tee_tadb_ta_get_property(struct tee_tadb_ta_read *ta);
60*5baee69aSJens Wiklander TEE_Result tee_tadb_ta_read(struct tee_tadb_ta_read *ta, void *buf,
61*5baee69aSJens Wiklander 			    size_t *len);
62*5baee69aSJens Wiklander void tee_tadb_ta_close(struct tee_tadb_ta_read *ta);
63*5baee69aSJens Wiklander 
64*5baee69aSJens Wiklander 
65*5baee69aSJens Wiklander #endif /*__TEE_TADB_H*/
66