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