crypto/octeontx: add crypto adapter data path
[dpdk.git] / drivers / event / octeontx / ssovf_evdev.c
index 6f242aa..b93f6ec 100644 (file)
@@ -5,10 +5,11 @@
 #include <inttypes.h>
 
 #include <rte_common.h>
+#include <rte_cryptodev.h>
 #include <rte_debug.h>
 #include <rte_dev.h>
 #include <rte_eal.h>
-#include <rte_ethdev_driver.h>
+#include <ethdev_driver.h>
 #include <rte_event_eth_rx_adapter.h>
 #include <rte_kvargs.h>
 #include <rte_lcore.h>
 
 #include "ssovf_evdev.h"
 #include "timvf_evdev.h"
+#include "otx_cryptodev_hw_access.h"
 
 static uint8_t timvf_enable_stats;
 
-RTE_LOG_REGISTER(otx_logtype_ssovf, pmd.event.octeontx, NOTICE);
+RTE_LOG_REGISTER_DEFAULT(otx_logtype_ssovf, NOTICE);
 
 /* SSOPF Mailbox messages */
 
@@ -710,8 +712,7 @@ ssovf_close(struct rte_eventdev *dev)
 }
 
 static int
-ssovf_selftest(const char *key __rte_unused, const char *value,
-               void *opaque)
+ssovf_parsekv(const char *key __rte_unused, const char *value, void *opaque)
 {
        int *flag = opaque;
        *flag = !!atoi(value);
@@ -726,6 +727,68 @@ ssovf_timvf_caps_get(const struct rte_eventdev *dev, uint64_t flags,
                        timvf_enable_stats);
 }
 
+static int
+ssovf_crypto_adapter_caps_get(const struct rte_eventdev *dev,
+                             const struct rte_cryptodev *cdev, uint32_t *caps)
+{
+       RTE_SET_USED(dev);
+       RTE_SET_USED(cdev);
+
+       *caps = RTE_EVENT_CRYPTO_ADAPTER_CAP_INTERNAL_PORT_OP_FWD |
+               RTE_EVENT_CRYPTO_ADAPTER_CAP_SESSION_PRIVATE_DATA;
+
+       return 0;
+}
+
+static int
+ssovf_crypto_adapter_qp_add(const struct rte_eventdev *dev,
+                           const struct rte_cryptodev *cdev,
+                           int32_t queue_pair_id,
+                           const struct rte_event *event)
+{
+       struct cpt_instance *qp;
+       uint8_t qp_id;
+
+       RTE_SET_USED(event);
+
+       if (queue_pair_id == -1) {
+               for (qp_id = 0; qp_id < cdev->data->nb_queue_pairs; qp_id++) {
+                       qp = cdev->data->queue_pairs[qp_id];
+                       qp->ca_enabled = 1;
+               }
+       } else {
+               qp = cdev->data->queue_pairs[queue_pair_id];
+               qp->ca_enabled = 1;
+       }
+
+       ssovf_fastpath_fns_set((struct rte_eventdev *)(uintptr_t)dev);
+
+       return 0;
+}
+
+static int
+ssovf_crypto_adapter_qp_del(const struct rte_eventdev *dev,
+                           const struct rte_cryptodev *cdev,
+                           int32_t queue_pair_id)
+{
+       struct cpt_instance *qp;
+       uint8_t qp_id;
+
+       RTE_SET_USED(dev);
+
+       if (queue_pair_id == -1) {
+               for (qp_id = 0; qp_id < cdev->data->nb_queue_pairs; qp_id++) {
+                       qp = cdev->data->queue_pairs[qp_id];
+                       qp->ca_enabled = 0;
+               }
+       } else {
+               qp = cdev->data->queue_pairs[queue_pair_id];
+               qp->ca_enabled = 0;
+       }
+
+       return 0;
+}
+
 /* Initialize and register event driver with DPDK Application */
 static struct rte_eventdev_ops ssovf_ops = {
        .dev_infos_get    = ssovf_info_get,
@@ -756,6 +819,10 @@ static struct rte_eventdev_ops ssovf_ops = {
 
        .timer_adapter_caps_get = ssovf_timvf_caps_get,
 
+       .crypto_adapter_caps_get = ssovf_crypto_adapter_caps_get,
+       .crypto_adapter_queue_pair_add = ssovf_crypto_adapter_qp_add,
+       .crypto_adapter_queue_pair_del = ssovf_crypto_adapter_qp_del,
+
        .dev_selftest = test_eventdev_octeontx,
 
        .dump             = ssovf_dump,
@@ -775,10 +842,8 @@ ssovf_vdev_probe(struct rte_vdev_device *vdev)
        const char *name;
        const char *params;
        int ret;
-       int selftest = 0;
 
        static const char *const args[] = {
-               SSOVF_SELFTEST_ARG,
                TIMVF_ENABLE_STATS_ARG,
                NULL
        };
@@ -799,18 +864,9 @@ ssovf_vdev_probe(struct rte_vdev_device *vdev)
                                "Ignoring unsupported params supplied '%s'",
                                name);
                } else {
-                       int ret = rte_kvargs_process(kvlist,
-                                       SSOVF_SELFTEST_ARG,
-                                       ssovf_selftest, &selftest);
-                       if (ret != 0) {
-                               ssovf_log_err("%s: Error in selftest", name);
-                               rte_kvargs_free(kvlist);
-                               return ret;
-                       }
-
-                       ret = rte_kvargs_process(kvlist,
-                                       TIMVF_ENABLE_STATS_ARG,
-                                       ssovf_selftest, &timvf_enable_stats);
+                       ret = rte_kvargs_process(kvlist, TIMVF_ENABLE_STATS_ARG,
+                                                ssovf_parsekv,
+                                                &timvf_enable_stats);
                        if (ret != 0) {
                                ssovf_log_err("%s: Error in timvf stats", name);
                                rte_kvargs_free(kvlist);
@@ -877,8 +933,6 @@ ssovf_vdev_probe(struct rte_vdev_device *vdev)
                        edev->max_event_ports);
 
        ssovf_init_once = 1;
-       if (selftest)
-               test_eventdev_octeontx();
        return 0;
 
 error: