event/octeontx: add driver name in info get
[dpdk.git] / drivers / event / octeontx / ssovf_evdev.c
index 102e224..f1b7eee 100644 (file)
@@ -170,6 +170,7 @@ ssovf_info_get(struct rte_eventdev *dev, struct rte_event_dev_info *dev_info)
 {
        struct ssovf_evdev *edev = ssovf_pmd_priv(dev);
 
+       dev_info->driver_name = RTE_STR(EVENTDEV_NAME_OCTEONTX_PMD);
        dev_info->min_dequeue_timeout_ns = edev->min_deq_timeout_ns;
        dev_info->max_dequeue_timeout_ns = edev->max_deq_timeout_ns;
        dev_info->max_event_queues = edev->max_event_queues;
@@ -426,6 +427,48 @@ ssovf_start(struct rte_eventdev *dev)
        ssovf_fastpath_fns_set(dev);
        return 0;
 }
+
+static void
+ssovf_stop(struct rte_eventdev *dev)
+{
+       struct ssovf_evdev *edev = ssovf_pmd_priv(dev);
+       struct ssows *ws;
+       uint8_t *base;
+       uint8_t i;
+
+       ssovf_func_trace();
+       for (i = 0; i < edev->nb_event_ports; i++) {
+               ws = dev->data->ports[i];
+               ssows_reset(ws);
+               ws->swtag_req = 0;
+       }
+
+       for (i = 0; i < edev->nb_event_queues; i++) {
+               /* Consume all the events through HWS0 */
+               ssows_flush_events(dev->data->ports[0], i);
+
+               base = octeontx_ssovf_bar(OCTEONTX_SSO_GROUP, i, 0);
+               base += SSO_VHGRP_QCTL;
+               ssovf_write64(0, base); /* Disable SSO group */
+       }
+}
+
+static int
+ssovf_close(struct rte_eventdev *dev)
+{
+       struct ssovf_evdev *edev = ssovf_pmd_priv(dev);
+       uint8_t all_queues[RTE_EVENT_MAX_QUEUES_PER_DEV];
+       uint8_t i;
+
+       for (i = 0; i < edev->nb_event_queues; i++)
+               all_queues[i] = i;
+
+       for (i = 0; i < edev->nb_event_ports; i++)
+               ssovf_port_unlink(dev, dev->data->ports[i], all_queues,
+                       edev->nb_event_queues);
+       return 0;
+}
+
 /* Initialize and register event driver with DPDK Application */
 static const struct rte_eventdev_ops ssovf_ops = {
        .dev_infos_get    = ssovf_info_get,
@@ -441,20 +484,22 @@ static const struct rte_eventdev_ops ssovf_ops = {
        .timeout_ticks    = ssovf_timeout_ticks,
        .dump             = ssovf_dump,
        .dev_start        = ssovf_start,
+       .dev_stop         = ssovf_stop,
+       .dev_close        = ssovf_close
 };
 
 static int
-ssovf_vdev_probe(const char *name, const char *params)
+ssovf_vdev_probe(struct rte_vdev_device *vdev)
 {
        struct octeontx_ssovf_info oinfo;
        struct ssovf_mbox_dev_info info;
        struct ssovf_evdev *edev;
        struct rte_eventdev *eventdev;
        static int ssovf_init_once;
+       const char *name;
        int ret;
 
-       RTE_SET_USED(params);
-
+       name = rte_vdev_device_name(vdev);
        /* More than one instance is not supported */
        if (ssovf_init_once) {
                ssovf_log_err("Request to create >1 %s instance", name);
@@ -519,8 +564,11 @@ error:
 }
 
 static int
-ssovf_vdev_remove(const char *name)
+ssovf_vdev_remove(struct rte_vdev_device *vdev)
 {
+       const char *name;
+
+       name = rte_vdev_device_name(vdev);
        ssovf_log_info("Closing %s", name);
        return rte_event_pmd_vdev_uninit(name);
 }