1*22ada947SEtienne Carriere /* SPDX-License-Identifier: BSD-2-Clause */ 2*22ada947SEtienne Carriere /* 3*22ada947SEtienne Carriere * Copyright (c) 2014-2020, Linaro Limited 4*22ada947SEtienne Carriere */ 5*22ada947SEtienne Carriere 6*22ada947SEtienne Carriere #ifndef PKCS11_TA_HANDLE_H 7*22ada947SEtienne Carriere #define PKCS11_TA_HANDLE_H 8*22ada947SEtienne Carriere 9*22ada947SEtienne Carriere #include <stddef.h> 10*22ada947SEtienne Carriere 11*22ada947SEtienne Carriere struct handle_db { 12*22ada947SEtienne Carriere void **ptrs; 13*22ada947SEtienne Carriere uint32_t max_ptrs; 14*22ada947SEtienne Carriere }; 15*22ada947SEtienne Carriere 16*22ada947SEtienne Carriere /* 17*22ada947SEtienne Carriere * Initialize the handle database 18*22ada947SEtienne Carriere */ 19*22ada947SEtienne Carriere void handle_db_init(struct handle_db *db); 20*22ada947SEtienne Carriere 21*22ada947SEtienne Carriere /* 22*22ada947SEtienne Carriere * Free all internal data structures of the database, but does not free 23*22ada947SEtienne Carriere * the db pointer. The database is safe to reuse after it's destroyed, it 24*22ada947SEtienne Carriere * just be empty again. 25*22ada947SEtienne Carriere */ 26*22ada947SEtienne Carriere void handle_db_destroy(struct handle_db *db); 27*22ada947SEtienne Carriere 28*22ada947SEtienne Carriere /* 29*22ada947SEtienne Carriere * Allocate a new handle ID and assigns the supplied pointer to it, 30*22ada947SEtienne Carriere * The function returns > 0 on success and 0 on failure. 31*22ada947SEtienne Carriere */ 32*22ada947SEtienne Carriere uint32_t handle_get(struct handle_db *db, void *ptr); 33*22ada947SEtienne Carriere 34*22ada947SEtienne Carriere /* 35*22ada947SEtienne Carriere * Deallocate a handle. Returns the associated pointer of the handle 36*22ada947SEtienne Carriere * the the handle was valid or NULL if it's invalid. 37*22ada947SEtienne Carriere */ 38*22ada947SEtienne Carriere void *handle_put(struct handle_db *db, uint32_t handle); 39*22ada947SEtienne Carriere 40*22ada947SEtienne Carriere /* 41*22ada947SEtienne Carriere * Return the associated pointer of the handle if the handle is a valid 42*22ada947SEtienne Carriere * handle. 43*22ada947SEtienne Carriere * Returns NULL on failure. 44*22ada947SEtienne Carriere */ 45*22ada947SEtienne Carriere void *handle_lookup(struct handle_db *db, uint32_t handle); 46*22ada947SEtienne Carriere 47*22ada947SEtienne Carriere /* Return the handle associated to a pointer if found, else return 0 */ 48*22ada947SEtienne Carriere uint32_t handle_lookup_handle(struct handle_db *db, void *ptr); 49*22ada947SEtienne Carriere 50*22ada947SEtienne Carriere #endif /*PKCS11_TA_HANDLE_H*/ 51