1 /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */
2 #ifndef INSTANCE_ID_H
3 #define INSTANCE_ID_H
4 
5 #ifdef __cplusplus
6 extern "C" {
7 #endif
8 
9 #include <libpldm/base.h>
10 
11 #include <stdint.h>
12 
13 typedef uint8_t pldm_instance_id_t;
14 struct pldm_instance_db;
15 
16 #ifdef __STDC_HOSTED__
17 /**
18  * @brief Instantiates an instance ID database object for a given database path
19  *
20  * @param[out] ctx - *ctx must be NULL, and will point to a PLDM instance ID
21  * 		     database object on success.
22  * @param[in] dbpath - the path to the instance ID database file to use
23  *
24  * @return int - Returns 0 on success. Returns -EINVAL if ctx is NULL or *ctx
25  * 		 is not NULL. Returns -ENOMEM if memory couldn't be allocated.
26  *		 Returns the errno if the database couldn't be opened.
27  * */
28 int pldm_instance_db_init(struct pldm_instance_db **ctx, const char *dbpath);
29 
30 /**
31  * @brief Instantiates an instance ID database object for the default database
32  * 	  path
33  *
34  * @param[out] ctx - *ctx will point to a PLDM instance ID database object on
35  * 	       success.
36  *
37  * @return int - Returns 0 on success. Returns -EINVAL if ctx is NULL or *ctx
38  * 		 is not NULL. Returns -ENOMEM if memory couldn't be allocated.
39  * 		 Returns the errno if the database couldn't be opened.
40  * */
41 int pldm_instance_db_init_default(struct pldm_instance_db **ctx);
42 
43 /**
44  * @brief Destroys an instance ID database object
45  *
46  * @param[in] ctx - PLDM instance ID database object
47  *
48  * @return int - Returns 0 on success or if *ctx is NULL. No specific errors are
49  *		 specified.
50  * */
51 int pldm_instance_db_destroy(struct pldm_instance_db *ctx);
52 
53 /**
54  * @brief Allocates an instance ID for a destination TID from the instance ID
55  * 	  database
56  *
57  * @param[in] ctx - PLDM instance ID database object
58  * @param[in] tid - PLDM TID
59  * @param[in] iid - caller owned pointer to a PLDM instance ID object. On
60  * 	      success, this points to an instance ID to use for a PLDM request
61  * 	      message.
62  *
63  * @return int - Returns 0 on success if we were able to allocate an instance
64  * 		 ID. Returns -EINVAL if the iid pointer is NULL. Returns -EAGAIN
65  *		 if a successive call may succeed. Returns -EPROTO if the
66  *		 operation has entered an undefined state.
67  */
68 int pldm_instance_id_alloc(struct pldm_instance_db *ctx, pldm_tid_t tid,
69 			   pldm_instance_id_t *iid);
70 
71 /**
72  * @brief Frees an instance ID previously allocated by pldm_instance_id_alloc
73  *
74  * @param[in] ctx - PLDM instance ID database object
75  * @param[in] tid - PLDM TID
76  * @param[in] iid - If this instance ID was not previously allocated by
77  * 	      pldm_instance_id_alloc then EINVAL is returned.
78  *
79  * @return int - Returns 0 on success. Returns -EINVAL if the iid supplied was
80  * 		 not previously allocated by pldm_instance_id_alloc or it has
81  * 		 previously been freed. Returns -EAGAIN if a successive call may
82  * 		 succeed. Returns -EPROTO if the operation has entered an
83  *		 undefined state.
84  */
85 int pldm_instance_id_free(struct pldm_instance_db *ctx, pldm_tid_t tid,
86 			  pldm_instance_id_t iid);
87 
88 #endif /* __STDC_HOSTED__*/
89 
90 #ifdef __cplusplus
91 }
92 #endif
93 
94 #endif /* INSTANCE_ID_H */
95