blob: eebaecb6aa1d9e2c8766f1dadaabebbdfa49badb [file] [log] [blame]
#ifndef INSTANCE_ID_H
#define INSTANCE_ID_H
#ifdef __cplusplus
extern "C" {
#endif
#include "libpldm/base.h"
#include <stdint.h>
typedef uint8_t pldm_instance_id_t;
struct pldm_instance_db;
#ifdef __STDC_HOSTED__
/**
* @brief Instantiates an instance ID database object for a given database path
*
* @param[out] ctx - *ctx must be NULL, and will point to a PLDM instance ID
* database object on success.
* @param[in] dbpath - the path to the instance ID database file to use
*
* @return int - Returns 0 on success. Returns -EINVAL if ctx is NULL or *ctx
* is not NULL. Returns -ENOMEM if memory couldn't be allocated.
* Returns the errno if the database couldn't be opened.
* */
int pldm_instance_db_init(struct pldm_instance_db **ctx, const char *dbpath);
/**
* @brief Instantiates an instance ID database object for the default database
* path
*
* @param[out] ctx - *ctx will point to a PLDM instance ID database object on
* success.
*
* @return int - Returns 0 on success. Returns -EINVAL if ctx is NULL or *ctx
* is not NULL. Returns -ENOMEM if memory couldn't be allocated.
* Returns the errno if the database couldn't be opened.
* */
int pldm_instance_db_init_default(struct pldm_instance_db **ctx);
/**
* @brief Destroys an instance ID database object
*
* @param[in] ctx - PLDM instance ID database object
*
* @return int - Returns 0 on success or if *ctx is NULL. No specific errors are
* specified.
* */
int pldm_instance_db_destroy(struct pldm_instance_db *ctx);
/**
* @brief Allocates an instance ID for a destination TID from the instance ID
* database
*
* @param[in] ctx - PLDM instance ID database object
* @param[in] tid - PLDM TID
* @param[in] iid - caller owned pointer to a PLDM instance ID object. On
* success, this points to an instance ID to use for a PLDM request
* message.
*
* @return int - Returns 0 on success if we were able to allocate an instance
* ID. Returns -EINVAL if the iid pointer is NULL. Returns -EAGAIN
* if a successive call may succeed. Returns -EPROTO if the
* operation has entered an undefined state.
*/
int pldm_instance_id_alloc(struct pldm_instance_db *ctx, pldm_tid_t tid,
pldm_instance_id_t *iid);
/**
* @brief Frees an instance ID previously allocated by pldm_instance_id_alloc
*
* @param[in] ctx - PLDM instance ID database object
* @param[in] tid - PLDM TID
* @param[in] iid - If this instance ID was not previously allocated by
* pldm_instance_id_alloc then EINVAL is returned.
*
* @return int - Returns 0 on success. Returns -EINVAL if the iid supplied was
* not previously allocated by pldm_instance_id_alloc or it has
* previously been freed. Returns -EAGAIN if a successive call may
* succeed. Returns -EPROTO if the operation has entered an
* undefined state.
*/
int pldm_instance_id_free(struct pldm_instance_db *ctx, pldm_tid_t tid,
pldm_instance_id_t iid);
#endif /* __STDC_HOSTED__*/
#ifdef __cplusplus
}
#endif
#endif /* INSTANCE_ID_H */