remove unused ring includes
[dpdk.git] / lib / librte_cryptodev / rte_cryptodev.c
index 960e2d5..715f93d 100644 (file)
@@ -59,7 +59,6 @@
 #include <rte_atomic.h>
 #include <rte_branch_prediction.h>
 #include <rte_common.h>
-#include <rte_ring.h>
 #include <rte_mempool.h>
 #include <rte_malloc.h>
 #include <rte_mbuf.h>
@@ -102,6 +101,95 @@ struct rte_cryptodev_callback {
        uint32_t active;                        /**< Callback is executing */
 };
 
+#define RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG               ("max_nb_queue_pairs")
+#define RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG             ("max_nb_sessions")
+#define RTE_CRYPTODEV_VDEV_SOCKET_ID                   ("socket_id")
+
+static const char *cryptodev_vdev_valid_params[] = {
+       RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG,
+       RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG,
+       RTE_CRYPTODEV_VDEV_SOCKET_ID
+};
+
+static uint8_t
+number_of_sockets(void)
+{
+       int sockets = 0;
+       int i;
+       const struct rte_memseg *ms = rte_eal_get_physmem_layout();
+
+       for (i = 0; ((i < RTE_MAX_MEMSEG) && (ms[i].addr != NULL)); i++) {
+               if (sockets < ms[i].socket_id)
+                       sockets = ms[i].socket_id;
+       }
+
+       /* Number of sockets = maximum socket_id + 1 */
+       return ++sockets;
+}
+
+/** Parse integer from integer argument */
+static int
+parse_integer_arg(const char *key __rte_unused,
+               const char *value, void *extra_args)
+{
+       int *i = (int *) extra_args;
+
+       *i = atoi(value);
+       if (*i < 0) {
+               CDEV_LOG_ERR("Argument has to be positive.");
+               return -1;
+       }
+
+       return 0;
+}
+
+int
+rte_cryptodev_parse_vdev_init_params(struct rte_crypto_vdev_init_params *params,
+               const char *input_args)
+{
+       struct rte_kvargs *kvlist = NULL;
+       int ret = 0;
+
+       if (params == NULL)
+               return -EINVAL;
+
+       if (input_args) {
+               kvlist = rte_kvargs_parse(input_args,
+                               cryptodev_vdev_valid_params);
+               if (kvlist == NULL)
+                       return -1;
+
+               ret = rte_kvargs_process(kvlist,
+                                       RTE_CRYPTODEV_VDEV_MAX_NB_QP_ARG,
+                                       &parse_integer_arg,
+                                       &params->max_nb_queue_pairs);
+               if (ret < 0)
+                       goto free_kvlist;
+
+               ret = rte_kvargs_process(kvlist,
+                                       RTE_CRYPTODEV_VDEV_MAX_NB_SESS_ARG,
+                                       &parse_integer_arg,
+                                       &params->max_nb_sessions);
+               if (ret < 0)
+                       goto free_kvlist;
+
+               ret = rte_kvargs_process(kvlist, RTE_CRYPTODEV_VDEV_SOCKET_ID,
+                                       &parse_integer_arg,
+                                       &params->socket_id);
+               if (ret < 0)
+                       goto free_kvlist;
+
+               if (params->socket_id >= number_of_sockets()) {
+                       CDEV_LOG_ERR("Invalid socket id specified to create "
+                               "the virtual crypto device on");
+                       goto free_kvlist;
+               }
+       }
+
+free_kvlist:
+       rte_kvargs_free(kvlist);
+       return ret;
+}
 
 const char *
 rte_cryptodev_get_feature_name(uint64_t flag)