examples/l2fwd-crypto: fix AEAD key setting
[dpdk.git] / lib / librte_cryptodev / rte_cryptodev_pmd.h
index 8e8b2ad..af1aaeb 100644 (file)
@@ -56,17 +56,6 @@ extern "C" {
 #include "rte_crypto.h"
 #include "rte_cryptodev.h"
 
-struct rte_cryptodev_session {
-       RTE_STD_C11
-       struct {
-               uint8_t dev_id;
-               enum rte_cryptodev_type type;
-               struct rte_mempool *mp;
-       } __rte_aligned(8);
-
-       __extension__ char _private[0];
-};
-
 /** Global structure used for maintaining state of allocated crypto devices */
 struct rte_cryptodev_global {
        struct rte_cryptodev *devs;     /**< Device information array */
@@ -218,12 +207,13 @@ typedef int (*cryptodev_queue_pair_stop_t)(struct rte_cryptodev *dev,
  * @param      qp_id           Queue Pair Index
  * @param      qp_conf         Queue configuration structure
  * @param      socket_id       Socket Index
+ * @param      session_pool    Pointer to device session mempool
  *
  * @return     Returns 0 on success.
  */
 typedef int (*cryptodev_queue_pair_setup_t)(struct rte_cryptodev *dev,
                uint16_t qp_id, const struct rte_cryptodev_qp_conf *qp_conf,
-               int socket_id);
+               int socket_id, struct rte_mempool *session_pool);
 
 /**
  * Release memory resources allocated by given queue pair.
@@ -277,39 +267,30 @@ typedef unsigned (*cryptodev_sym_get_session_private_size_t)(
                struct rte_cryptodev *dev);
 
 /**
- * Initialize a Crypto session on a device.
+ * Configure a Crypto session on a device.
  *
  * @param      dev             Crypto device pointer
  * @param      xform           Single or chain of crypto xforms
  * @param      priv_sess       Pointer to cryptodev's private session structure
+ * @param      mp              Mempool where the private session is allocated
  *
  * @return
- *  - Returns private session structure on success.
- *  - Returns NULL on failure.
+ *  - Returns 0 if private session structure have been created successfully.
+ *  - Returns -1 on failure.
  */
-typedef void (*cryptodev_sym_initialize_session_t)(struct rte_mempool *mempool,
-               void *session_private);
+typedef int (*cryptodev_sym_configure_session_t)(struct rte_cryptodev *dev,
+               struct rte_crypto_sym_xform *xform,
+               struct rte_cryptodev_sym_session *session,
+               struct rte_mempool *mp);
 
 /**
- * Configure a Crypto session on a device.
+ * Free driver private session data.
  *
  * @param      dev             Crypto device pointer
- * @param      xform           Single or chain of crypto xforms
- * @param      priv_sess       Pointer to cryptodev's private session structure
- *
- * @return
- *  - Returns private session structure on success.
- *  - Returns NULL on failure.
- */
-typedef void * (*cryptodev_sym_configure_session_t)(struct rte_cryptodev *dev,
-               struct rte_crypto_sym_xform *xform, void *session_private);
-
-/**
- * Free Crypto session.
- * @param      session         Cryptodev session structure to free
+ * @param      sess            Cryptodev session structure
  */
 typedef void (*cryptodev_sym_free_session_t)(struct rte_cryptodev *dev,
-               void *session_private);
+               struct rte_cryptodev_sym_session *sess);
 
 /**
  * Optional API for drivers to attach sessions with queue pair.
@@ -364,8 +345,6 @@ struct rte_cryptodev_ops {
 
        cryptodev_sym_get_session_private_size_t session_get_size;
        /**< Return private session. */
-       cryptodev_sym_initialize_session_t session_initialize;
-       /**< Initialization function for private session data */
        cryptodev_sym_configure_session_t session_configure;
        /**< Configure a Crypto session. */
        cryptodev_sym_free_session_t session_clear;
@@ -424,6 +403,19 @@ void rte_cryptodev_pmd_callback_process(struct rte_cryptodev *dev,
 int
 rte_cryptodev_pmd_create_dev_name(char *name, const char *dev_name_prefix);
 
+static inline void *
+get_session_private_data(const struct rte_cryptodev_sym_session *sess,
+               uint8_t driver_id) {
+       return sess->sess_private_data[driver_id];
+}
+
+static inline void
+set_session_private_data(struct rte_cryptodev_sym_session *sess,
+               uint8_t driver_id, void *private_data)
+{
+       sess->sess_private_data[driver_id] = private_data;
+}
+
 #ifdef __cplusplus
 }
 #endif