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