xref: /optee_os/ta/pkcs11/src/handle.h (revision 2bc50ed5e7c22cf959922893ed4e6848e74e460c)
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