#include <inttypes.h>
#include <rte_common.h>
+#include <cryptodev_pmd.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 */
RTE_EVENT_DEV_CAP_RUNTIME_PORT_LINK |
RTE_EVENT_DEV_CAP_MULTIPLE_QUEUE_PORT |
RTE_EVENT_DEV_CAP_NONSEQ_MODE |
- RTE_EVENT_DEV_CAP_CARRY_FLOW_ID;
+ RTE_EVENT_DEV_CAP_CARRY_FLOW_ID |
+ RTE_EVENT_DEV_CAP_MAINTENANCE_FREE;
}
}
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);
static int
ssovf_timvf_caps_get(const struct rte_eventdev *dev, uint64_t flags,
- uint32_t *caps, const struct rte_event_timer_adapter_ops **ops)
+ uint32_t *caps, const struct event_timer_adapter_ops **ops)
{
return timvf_timer_adapter_caps_get(dev, flags, caps, ops,
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 = {
+static struct eventdev_ops ssovf_ops = {
.dev_infos_get = ssovf_info_get,
.dev_configure = ssovf_configure,
.queue_def_conf = ssovf_queue_def_conf,
.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,
const char *name;
const char *params;
int ret;
- int selftest = 0;
static const char *const args[] = {
- SSOVF_SELFTEST_ARG,
TIMVF_ENABLE_STATS_ARG,
NULL
};
"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);
edev->max_event_ports);
ssovf_init_once = 1;
- if (selftest)
- test_eventdev_octeontx();
+ event_dev_probing_finish(eventdev);
return 0;
error: