122ada947SEtienne Carriere /* SPDX-License-Identifier: BSD-2-Clause */ 222ada947SEtienne Carriere /* 322ada947SEtienne Carriere * Copyright (c) 2014-2020, Linaro Limited 422ada947SEtienne Carriere */ 522ada947SEtienne Carriere 622ada947SEtienne Carriere #ifndef PKCS11_TA_HANDLE_H 722ada947SEtienne Carriere #define PKCS11_TA_HANDLE_H 822ada947SEtienne Carriere 922ada947SEtienne Carriere #include <stddef.h> 1022ada947SEtienne Carriere 1122ada947SEtienne Carriere struct handle_db { 1222ada947SEtienne Carriere void **ptrs; 1322ada947SEtienne Carriere uint32_t max_ptrs; 1422ada947SEtienne Carriere }; 1522ada947SEtienne Carriere 1622ada947SEtienne Carriere /* 1722ada947SEtienne Carriere * Initialize the handle database 1822ada947SEtienne Carriere */ 1922ada947SEtienne Carriere void handle_db_init(struct handle_db *db); 2022ada947SEtienne Carriere 2122ada947SEtienne Carriere /* 2222ada947SEtienne Carriere * Free all internal data structures of the database, but does not free 2322ada947SEtienne Carriere * the db pointer. The database is safe to reuse after it's destroyed, it 2422ada947SEtienne Carriere * just be empty again. 2522ada947SEtienne Carriere */ 2622ada947SEtienne Carriere void handle_db_destroy(struct handle_db *db); 2722ada947SEtienne Carriere 2822ada947SEtienne Carriere /* 2922ada947SEtienne Carriere * Allocate a new handle ID and assigns the supplied pointer to it, 3022ada947SEtienne Carriere * The function returns > 0 on success and 0 on failure. 3122ada947SEtienne Carriere */ 3222ada947SEtienne Carriere uint32_t handle_get(struct handle_db *db, void *ptr); 3322ada947SEtienne Carriere 3422ada947SEtienne Carriere /* 3522ada947SEtienne Carriere * Deallocate a handle. Returns the associated pointer of the handle 367b69686aSMarkus S. Wamser * if the handle was valid or NULL if it's invalid. 3722ada947SEtienne Carriere */ 3822ada947SEtienne Carriere void *handle_put(struct handle_db *db, uint32_t handle); 3922ada947SEtienne Carriere 4022ada947SEtienne Carriere /* 4122ada947SEtienne Carriere * Return the associated pointer of the handle if the handle is a valid 4222ada947SEtienne Carriere * handle. 4322ada947SEtienne Carriere * Returns NULL on failure. 4422ada947SEtienne Carriere */ 4522ada947SEtienne Carriere void *handle_lookup(struct handle_db *db, uint32_t handle); 4622ada947SEtienne Carriere 4722ada947SEtienne Carriere /* Return the handle associated to a pointer if found, else return 0 */ 4822ada947SEtienne Carriere uint32_t handle_lookup_handle(struct handle_db *db, void *ptr); 4922ada947SEtienne Carriere 50*2bc50ed5SEtienne Carriere /* Invalidate the reference referred by an allocated handle */ 51*2bc50ed5SEtienne Carriere void handle_invalidate(struct handle_db *db, uint32_t handle); 52*2bc50ed5SEtienne Carriere 5322ada947SEtienne Carriere #endif /*PKCS11_TA_HANDLE_H*/ 54