cryptodev: add feature flags to disable
[dpdk.git] / examples / ip_pipeline / cryptodev.c
index c4ba72b..ab5e926 100644 (file)
@@ -11,6 +11,8 @@
 
 #include "cryptodev.h"
 
+#define PIPELINE_CRYPTO_SESSION_CACHE_SIZE     128
+
 static struct cryptodev_list cryptodev_list;
 
 int
@@ -53,13 +55,16 @@ cryptodev_create(const char *name, struct cryptodev_params *params)
        struct cryptodev *cryptodev;
        uint32_t dev_id, i;
        uint32_t socket_id;
+       uint32_t cache_size;
+       char mp_name[NAME_SIZE];
        int status;
 
        /* Check input params */
        if ((name == NULL) ||
                cryptodev_find(name) ||
                (params->n_queues == 0) ||
-               (params->queue_size == 0))
+               (params->queue_size == 0) ||
+               (params->session_pool_size == 0))
                return NULL;
 
        if (params->dev_name) {
@@ -75,6 +80,11 @@ cryptodev_create(const char *name, struct cryptodev_params *params)
                dev_id = params->dev_id;
        }
 
+       cache_size = (params->session_pool_size / 2 <
+                       PIPELINE_CRYPTO_SESSION_CACHE_SIZE) ?
+                                       (params->session_pool_size / 2) :
+                                       PIPELINE_CRYPTO_SESSION_CACHE_SIZE;
+
        socket_id = rte_cryptodev_socket_id(dev_id);
        rte_cryptodev_info_get(dev_id, &dev_info);
 
@@ -85,6 +95,7 @@ cryptodev_create(const char *name, struct cryptodev_params *params)
 
        dev_conf.socket_id = socket_id;
        dev_conf.nb_queue_pairs = params->n_queues;
+       dev_conf.ff_disable = 0;
 
        status = rte_cryptodev_configure(dev_id, &dev_conf);
        if (status < 0)
@@ -93,7 +104,7 @@ cryptodev_create(const char *name, struct cryptodev_params *params)
        queue_conf.nb_descriptors = params->queue_size;
        for (i = 0; i < params->n_queues; i++) {
                status = rte_cryptodev_queue_pair_setup(dev_id, i,
-                               &queue_conf, socket_id, NULL);
+                               &queue_conf, socket_id);
                if (status < 0)
                        return NULL;
        }
@@ -111,7 +122,44 @@ cryptodev_create(const char *name, struct cryptodev_params *params)
        cryptodev->dev_id = dev_id;
        cryptodev->n_queues = params->n_queues;
 
+       snprintf(mp_name, NAME_SIZE, "%s_mp%u", name, dev_id);
+       cryptodev->mp_create = rte_cryptodev_sym_session_pool_create(
+                       mp_name,
+                       params->session_pool_size,
+                       0,
+                       cache_size,
+                       0,
+                       socket_id);
+       if (!cryptodev->mp_create)
+               goto error_exit;
+
+       snprintf(mp_name, NAME_SIZE, "%s_mp_priv%u", name, dev_id);
+       cryptodev->mp_init = rte_mempool_create(
+                       NULL,
+                       params->session_pool_size,
+                       rte_cryptodev_sym_get_private_session_size(dev_id),
+                       cache_size,
+                       0,
+                       NULL,
+                       NULL,
+                       NULL,
+                       NULL,
+                       socket_id,
+                       0);
+       if (!cryptodev->mp_init)
+               goto error_exit;
+
        TAILQ_INSERT_TAIL(&cryptodev_list, cryptodev, node);
 
        return cryptodev;
+
+error_exit:
+       if (cryptodev->mp_create)
+               rte_mempool_free(cryptodev->mp_create);
+       if (cryptodev->mp_init)
+               rte_mempool_free(cryptodev->mp_init);
+
+       free(cryptodev);
+
+       return NULL;
 }