fp_ops->qp.enq_cb = dev->enq_cbs;
fp_ops->qp.deq_cb = dev->deq_cbs;
}
+
+void *
+rte_cryptodev_session_event_mdata_get(struct rte_crypto_op *op)
+{
+ if (op->type == RTE_CRYPTO_OP_TYPE_SYMMETRIC &&
+ op->sess_type == RTE_CRYPTO_OP_WITH_SESSION)
+ return rte_cryptodev_sym_session_get_user_data(op->sym->session);
+ else if (op->type == RTE_CRYPTO_OP_TYPE_ASYMMETRIC &&
+ op->sess_type == RTE_CRYPTO_OP_WITH_SESSION)
+ return op->asym->session->event_mdata;
+ else if (op->sess_type == RTE_CRYPTO_OP_SESSIONLESS &&
+ op->private_data_offset)
+ return ((uint8_t *)op + op->private_data_offset);
+ else
+ return NULL;
+}
enum rte_crypto_op_sess_type sess_type,
union rte_cryptodev_session_ctx session_ctx, uint8_t is_update);
+/**
+ * Typedef that the driver provided to set event crypto meta data.
+ *
+ * @param dev Crypto device pointer.
+ * @param sess Crypto or security session.
+ * @param op_type Operation type.
+ * @param sess_type Session type.
+ * @param ev_mdata Pointer to the event crypto meta data
+ * (aka *union rte_event_crypto_metadata*)
+ * @return
+ * - On success return 0.
+ * - On failure return negative integer.
+ */
+typedef int (*cryptodev_session_event_mdata_set_t)(
+ struct rte_cryptodev *dev, void *sess,
+ enum rte_crypto_op_type op_type,
+ enum rte_crypto_op_sess_type sess_type,
+ void *ev_mdata);
+
/** Crypto device operations function pointer table */
struct rte_cryptodev_ops {
cryptodev_configure_t dev_configure; /**< Configure device. */
/**< Initialize raw data path context data. */
};
};
+ cryptodev_session_event_mdata_set_t session_ev_mdata_set;
+ /**< Set a Crypto or Security session even meta data. */
};
cryptodev_fp_ops_set(struct rte_crypto_fp_ops *fp_ops,
const struct rte_cryptodev *dev);
+/**
+ * Get session event meta data (aka *union rte_event_crypto_metadata*)
+ *
+ * @param op pointer to *rte_crypto_op* structure.
+ *
+ * @return
+ * - On success, pointer to event crypto metadata
+ * - On failure, NULL.
+ */
+__rte_internal
+void *
+rte_cryptodev_session_event_mdata_get(struct rte_crypto_op *op);
+
static inline void *
get_sym_session_private_data(const struct rte_cryptodev_sym_session *sess,
uint8_t driver_id) {
uint16_t user_data_sz;
/**< Session user data will be placed after sess_data */
uint8_t padding[3];
+ void *event_mdata;
+ /**< Event metadata (aka *union rte_event_crypto_metadata*) */
uint8_t sess_private_data[0];
};
dev->dev_ops->asym_session_clear(dev, sess);
+ rte_free(((struct rte_cryptodev_asym_session *)sess)->event_mdata);
+
/* Return session to mempool */
sess_mp = rte_mempool_from_obj(sess);
rte_mempool_put(sess_mp, sess);
sess_type, session_ctx, is_update);
}
+int
+rte_cryptodev_session_event_mdata_set(uint8_t dev_id, void *sess,
+ enum rte_crypto_op_type op_type,
+ enum rte_crypto_op_sess_type sess_type,
+ void *ev_mdata,
+ uint16_t size)
+{
+ struct rte_cryptodev *dev;
+
+ if (sess == NULL || ev_mdata == NULL)
+ return -EINVAL;
+
+ if (!rte_cryptodev_is_valid_dev(dev_id))
+ goto skip_pmd_op;
+
+ dev = rte_cryptodev_pmd_get_dev(dev_id);
+ if (dev->dev_ops->session_ev_mdata_set == NULL)
+ goto skip_pmd_op;
+
+ return (*dev->dev_ops->session_ev_mdata_set)(dev, sess, op_type,
+ sess_type, ev_mdata);
+
+skip_pmd_op:
+ if (op_type == RTE_CRYPTO_OP_TYPE_SYMMETRIC)
+ return rte_cryptodev_sym_session_set_user_data(sess, ev_mdata,
+ size);
+ else if (op_type == RTE_CRYPTO_OP_TYPE_ASYMMETRIC) {
+ struct rte_cryptodev_asym_session *s = sess;
+
+ if (s->event_mdata == NULL) {
+ s->event_mdata = rte_malloc(NULL, size, 0);
+ if (s->event_mdata == NULL)
+ return -ENOMEM;
+ }
+ rte_memcpy(s->event_mdata, ev_mdata, size);
+
+ return 0;
+ } else
+ return -ENOTSUP;
+}
+
uint32_t
rte_cryptodev_raw_enqueue_burst(struct rte_crypto_raw_dp_ctx *ctx,
struct rte_crypto_sym_vec *vec, union rte_crypto_sym_ofs ofs,
int
rte_cryptodev_get_raw_dp_ctx_size(uint8_t dev_id);
+/**
+ * Set session event meta data
+ *
+ * @param dev_id The device identifier.
+ * @param sess Crypto or security session.
+ * @param op_type Operation type.
+ * @param sess_type Session type.
+ * @param ev_mdata Pointer to the event crypto meta data
+ * (aka *union rte_event_crypto_metadata*)
+ * @param size Size of ev_mdata.
+ *
+ * @return
+ * - On success, zero.
+ * - On failure, a negative value.
+ */
+__rte_experimental
+int
+rte_cryptodev_session_event_mdata_set(uint8_t dev_id, void *sess,
+ enum rte_crypto_op_type op_type,
+ enum rte_crypto_op_sess_type sess_type,
+ void *ev_mdata, uint16_t size);
+
/**
* Union of different crypto session types, including session-less xform
* pointer.
rte_cryptodev_asym_session_pool_create;
rte_cryptodev_asym_session_set_user_data;
__rte_cryptodev_trace_asym_session_pool_create;
+
+ #added in 22.07
+ rte_cryptodev_session_event_mdata_set;
};
INTERNAL {
rte_cryptodev_pmd_parse_input_args;
rte_cryptodev_pmd_probing_finish;
rte_cryptodev_pmd_release_device;
+ rte_cryptodev_session_event_mdata_get;
rte_cryptodevs;
};