cryptodev: support session private data setting
The application may want to store private data along with the rte_cryptodev that is transparent to the rte_cryptodev layer. For e.g., If an eventdev based application is submitting a rte_cryptodev_sym_session operation and wants to indicate event information required to construct a new event that will be enqueued to eventdev after completion of the rte_cryptodev_sym_session operation. This patch provides a mechanism for the application to associate this information with the rte_cryptodev_sym_session session. The application can set the private data using rte_cryptodev_sym_session_set_private_data() and retrieve it using rte_cryptodev_sym_session_get_private_data(). Signed-off-by: Abhinandan Gujjar <abhinandan.gujjar@intel.com> Signed-off-by: Nikhil Rao <nikhil.rao@intel.com> Acked-by: Akhil Goyal <akhil.goyal@nxp.com> Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
This commit is contained in:
parent
54c8368466
commit
2d96371fbd
@ -1099,8 +1099,10 @@ rte_cryptodev_sym_session_create(struct rte_mempool *mp)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Clear device session pointer */
|
||||
memset(sess, 0, (sizeof(void *) * nb_drivers));
|
||||
/* Clear device session pointer.
|
||||
* Include the flag indicating presence of private data
|
||||
*/
|
||||
memset(sess, 0, (sizeof(void *) * nb_drivers) + sizeof(uint8_t));
|
||||
|
||||
return sess;
|
||||
}
|
||||
@ -1204,9 +1206,10 @@ rte_cryptodev_get_header_session_size(void)
|
||||
{
|
||||
/*
|
||||
* Header contains pointers to the private data
|
||||
* of all registered drivers
|
||||
* of all registered drivers, and a flag which
|
||||
* indicates presence of private data
|
||||
*/
|
||||
return (sizeof(void *) * nb_drivers);
|
||||
return ((sizeof(void *) * nb_drivers) + sizeof(uint8_t));
|
||||
}
|
||||
|
||||
unsigned int
|
||||
@ -1238,6 +1241,38 @@ rte_cryptodev_get_private_session_size(uint8_t dev_id)
|
||||
|
||||
}
|
||||
|
||||
int __rte_experimental
|
||||
rte_cryptodev_sym_session_set_private_data(
|
||||
struct rte_cryptodev_sym_session *sess,
|
||||
void *data,
|
||||
uint16_t size)
|
||||
{
|
||||
uint16_t off_set = sizeof(void *) * nb_drivers;
|
||||
uint8_t *private_data_present = (uint8_t *)sess + off_set;
|
||||
|
||||
if (sess == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
*private_data_present = 1;
|
||||
off_set += sizeof(uint8_t);
|
||||
rte_memcpy((uint8_t *)sess + off_set, data, size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void * __rte_experimental
|
||||
rte_cryptodev_sym_session_get_private_data(
|
||||
struct rte_cryptodev_sym_session *sess)
|
||||
{
|
||||
uint16_t off_set = sizeof(void *) * nb_drivers;
|
||||
uint8_t *private_data_present = (uint8_t *)sess + off_set;
|
||||
|
||||
if (sess == NULL || !*private_data_present)
|
||||
return NULL;
|
||||
|
||||
off_set += sizeof(uint8_t);
|
||||
return (uint8_t *)sess + off_set;
|
||||
}
|
||||
|
||||
/** Initialise rte_crypto_op mempool element */
|
||||
static void
|
||||
rte_crypto_op_init(struct rte_mempool *mempool,
|
||||
|
@ -1037,6 +1037,38 @@ int rte_cryptodev_driver_id_get(const char *name);
|
||||
*/
|
||||
const char *rte_cryptodev_driver_name_get(uint8_t driver_id);
|
||||
|
||||
/**
|
||||
* Set private data for a session.
|
||||
*
|
||||
* @param sess Session pointer allocated by
|
||||
* *rte_cryptodev_sym_session_create*.
|
||||
* @param data Pointer to the private data.
|
||||
* @param size Size of the private data.
|
||||
*
|
||||
* @return
|
||||
* - On success, zero.
|
||||
* - On failure, a negative value.
|
||||
*/
|
||||
int __rte_experimental
|
||||
rte_cryptodev_sym_session_set_private_data(
|
||||
struct rte_cryptodev_sym_session *sess,
|
||||
void *data,
|
||||
uint16_t size);
|
||||
|
||||
/**
|
||||
* Get private data of a session.
|
||||
*
|
||||
* @param sess Session pointer allocated by
|
||||
* *rte_cryptodev_sym_session_create*.
|
||||
*
|
||||
* @return
|
||||
* - On success return pointer to private data.
|
||||
* - On failure returns NULL.
|
||||
*/
|
||||
void * __rte_experimental
|
||||
rte_cryptodev_sym_session_get_private_data(
|
||||
struct rte_cryptodev_sym_session *sess);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
@ -85,3 +85,10 @@ DPDK_17.11 {
|
||||
rte_cryptodev_pmd_parse_input_args;
|
||||
|
||||
} DPDK_17.08;
|
||||
|
||||
EXPERIMENTAL {
|
||||
global:
|
||||
|
||||
rte_cryptodev_sym_session_get_private_data;
|
||||
rte_cryptodev_sym_session_set_private_data;
|
||||
} DPDK_17.11;
|
||||
|
Loading…
x
Reference in New Issue
Block a user