| 60 | } |
| 61 | |
| 62 | void * |
| 63 | rte_security_session_create(void *ctx, |
| 64 | struct rte_security_session_conf *conf, |
| 65 | struct rte_mempool *mp) |
| 66 | { |
| 67 | struct rte_security_session *sess = NULL; |
| 68 | struct rte_security_ctx *instance = ctx; |
| 69 | uint32_t sess_priv_size; |
| 70 | |
| 71 | RTE_PTR_CHAIN3_OR_ERR_RET(instance, ops, session_create, NULL, NULL); |
| 72 | RTE_PTR_OR_ERR_RET(conf, NULL); |
| 73 | RTE_PTR_OR_ERR_RET(mp, NULL); |
| 74 | |
| 75 | sess_priv_size = instance->ops->session_get_size(instance->device); |
| 76 | if (mp->elt_size < (sizeof(struct rte_security_session) + sess_priv_size)) |
| 77 | return NULL; |
| 78 | |
| 79 | if (rte_mempool_get(mp, (void **)&sess)) |
| 80 | return NULL; |
| 81 | |
| 82 | /* Clear session priv data */ |
| 83 | memset(sess->driver_priv_data, 0, sess_priv_size); |
| 84 | |
| 85 | sess->driver_priv_data_iova = rte_mempool_virt2iova(sess) + |
| 86 | offsetof(struct rte_security_session, driver_priv_data); |
| 87 | if (instance->ops->session_create(instance->device, conf, sess)) { |
| 88 | rte_mempool_put(mp, (void *)sess); |
| 89 | return NULL; |
| 90 | } |
| 91 | instance->sess_cnt++; |
| 92 | |
| 93 | return (void *)sess; |
| 94 | } |
| 95 | |
| 96 | int |
| 97 | rte_security_session_update(void *ctx, void *sess, struct rte_security_session_conf *conf) |