xref: /optee_os/core/include/tee/tee_pobj.h (revision 0f50ba5ade6decc49209304b103cf208c321ade6)
11bb92983SJerome Forissier /* SPDX-License-Identifier: BSD-2-Clause */
2b0104773SPascal Brand /*
3b0104773SPascal Brand  * Copyright (c) 2014, STMicroelectronics International N.V.
4b0104773SPascal Brand  */
5b0104773SPascal Brand 
6fbe66cf8SEtienne Carriere #ifndef __TEE_TEE_POBJ_H
7fbe66cf8SEtienne Carriere #define __TEE_TEE_POBJ_H
8b0104773SPascal Brand 
9b0104773SPascal Brand #include <stdint.h>
10b0104773SPascal Brand #include <sys/queue.h>
11b0104773SPascal Brand #include <tee_api_types.h>
12b44708c1SJerome Forissier #include <tee/tee_fs.h>
13b0104773SPascal Brand 
14b0104773SPascal Brand struct tee_pobj {
15b0104773SPascal Brand 	TAILQ_ENTRY(tee_pobj) link;
16b0104773SPascal Brand 	uint32_t refcnt;
17b0104773SPascal Brand 	TEE_UUID uuid;
18b0104773SPascal Brand 	void *obj_id;
19b0104773SPascal Brand 	uint32_t obj_id_len;
20b0104773SPascal Brand 	uint32_t flags;
21*0f50ba5aSJens Wiklander 	uint32_t obj_info_usage;
2263146177SJens Wiklander 	bool temporary;	/* can be changed while creating == true */
2363146177SJens Wiklander 	bool creating;	/* can only be changed with mutex held */
24b44708c1SJerome Forissier 	/* Filesystem handling this object */
25b44708c1SJerome Forissier 	const struct tee_file_operations *fops;
26b0104773SPascal Brand };
27b0104773SPascal Brand 
286885abf2SJens Wiklander enum tee_pobj_usage {
296885abf2SJens Wiklander 	TEE_POBJ_USAGE_OPEN,
306885abf2SJens Wiklander 	TEE_POBJ_USAGE_RENAME,
316885abf2SJens Wiklander 	TEE_POBJ_USAGE_CREATE,
32928efd06SJens Wiklander 	TEE_POBJ_USAGE_ENUM,
336885abf2SJens Wiklander };
346885abf2SJens Wiklander 
35b0104773SPascal Brand TEE_Result tee_pobj_get(TEE_UUID *uuid, void *obj_id, uint32_t obj_id_len,
366885abf2SJens Wiklander 			uint32_t flags, enum tee_pobj_usage usage,
37b2215adfSJens Wiklander 			const struct tee_file_operations *fops,
38b44708c1SJerome Forissier 			struct tee_pobj **obj);
39b0104773SPascal Brand 
4063146177SJens Wiklander void tee_pobj_create_final(struct tee_pobj *obj);
4163146177SJens Wiklander 
42b0104773SPascal Brand TEE_Result tee_pobj_release(struct tee_pobj *obj);
43b0104773SPascal Brand 
44b0104773SPascal Brand TEE_Result tee_pobj_rename(struct tee_pobj *obj, void *obj_id,
45b0104773SPascal Brand 			   uint32_t obj_id_len);
46b0104773SPascal Brand 
47*0f50ba5aSJens Wiklander /*
48*0f50ba5aSJens Wiklander  * Locks and unlocks a mutex intended to protect the obj_info_usage field
49*0f50ba5aSJens Wiklander  * in struct tee_pobj.
50*0f50ba5aSJens Wiklander  */
51*0f50ba5aSJens Wiklander void tee_pobj_lock_usage(struct tee_pobj *obj);
52*0f50ba5aSJens Wiklander void tee_pobj_unlock_usage(struct tee_pobj *obj);
53*0f50ba5aSJens Wiklander 
54b0104773SPascal Brand #endif
55