event/dpaa: introduce PMD
[dpdk.git] / drivers / event / skeleton / skeleton_eventdev.c
index 9330d74..7f46756 100644 (file)
@@ -1,33 +1,5 @@
-/*
- *   BSD LICENSE
- *
- *   Copyright (C) Cavium networks Ltd. 2016.
- *
- *   Redistribution and use in source and binary forms, with or without
- *   modification, are permitted provided that the following conditions
- *   are met:
- *
- *     * Redistributions of source code must retain the above copyright
- *       notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above copyright
- *       notice, this list of conditions and the following disclaimer in
- *       the documentation and/or other materials provided with the
- *       distribution.
- *     * Neither the name of Cavium networks nor the names of its
- *       contributors may be used to endorse or promote products derived
- *       from this software without specific prior written permission.
- *
- *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2016 Cavium, Inc
  */
 
 #include <assert.h>
 #include <rte_dev.h>
 #include <rte_eal.h>
 #include <rte_log.h>
-#include <rte_memory.h>
-#include <rte_memzone.h>
 #include <rte_malloc.h>
-#include <rte_pci.h>
+#include <rte_memory.h>
 #include <rte_lcore.h>
-#include <rte_vdev.h>
+#include <rte_bus_vdev.h>
 
 #include "skeleton_eventdev.h"
 
@@ -130,6 +100,7 @@ skeleton_eventdev_info_get(struct rte_eventdev *dev,
        dev_info->max_event_port_enqueue_depth = 16;
        dev_info->max_num_events = (1ULL << 20);
        dev_info->event_dev_cap = RTE_EVENT_DEV_CAP_QUEUE_QOS |
+                                       RTE_EVENT_DEV_CAP_BURST_MODE |
                                        RTE_EVENT_DEV_CAP_EVENT_QOS;
 }
 
@@ -196,7 +167,7 @@ skeleton_eventdev_queue_def_conf(struct rte_eventdev *dev, uint8_t queue_id,
 
        queue_conf->nb_atomic_flows = (1ULL << 20);
        queue_conf->nb_atomic_order_sequences = (1ULL << 20);
-       queue_conf->event_queue_cfg = RTE_EVENT_QUEUE_CFG_DEFAULT;
+       queue_conf->event_queue_cfg = RTE_EVENT_QUEUE_CFG_ALL_TYPES;
        queue_conf->priority = RTE_EVENT_DEV_PRIORITY_NORMAL;
 }
 
@@ -238,6 +209,7 @@ skeleton_eventdev_port_def_conf(struct rte_eventdev *dev, uint8_t port_id,
        port_conf->new_event_threshold = 32 * 1024;
        port_conf->dequeue_depth = 16;
        port_conf->enqueue_depth = 16;
+       port_conf->disable_implicit_release = 0;
 }
 
 static void
@@ -319,7 +291,7 @@ skeleton_eventdev_port_unlink(struct rte_eventdev *dev, void *port,
 
 }
 
-static void
+static int
 skeleton_eventdev_timeout_ticks(struct rte_eventdev *dev, uint64_t ns,
                                 uint64_t *timeout_ticks)
 {
@@ -330,6 +302,8 @@ skeleton_eventdev_timeout_ticks(struct rte_eventdev *dev, uint64_t ns,
 
        RTE_SET_USED(skel);
        *timeout_ticks = ns * scale;
+
+       return 0;
 }
 
 static void
@@ -373,7 +347,6 @@ skeleton_eventdev_init(struct rte_eventdev *eventdev)
        PMD_DRV_FUNC_TRACE();
 
        eventdev->dev_ops       = &skeleton_eventdev_ops;
-       eventdev->schedule      = NULL;
        eventdev->enqueue       = skeleton_eventdev_enqueue;
        eventdev->enqueue_burst = skeleton_eventdev_enqueue_burst;
        eventdev->dequeue       = skeleton_eventdev_dequeue;
@@ -383,7 +356,7 @@ skeleton_eventdev_init(struct rte_eventdev *eventdev)
        if (rte_eal_process_type() != RTE_PROC_PRIMARY)
                return 0;
 
-       pci_dev = eventdev->pci_dev;
+       pci_dev = RTE_DEV_TO_PCI(eventdev->dev);
 
        skel->reg_base = (uintptr_t)pci_dev->mem_resource[0].addr;
        if (!skel->reg_base) {
@@ -425,65 +398,45 @@ static const struct rte_pci_id pci_id_skeleton_map[] = {
        },
 };
 
-static struct rte_eventdev_driver pci_eventdev_skeleton_pmd = {
-       .pci_drv = {
-               .id_table = pci_id_skeleton_map,
-               .drv_flags = RTE_PCI_DRV_NEED_MAPPING,
-               .probe = rte_event_pmd_pci_probe,
-               .remove = rte_event_pmd_pci_remove,
-       },
-       .eventdev_init = skeleton_eventdev_init,
-       .dev_private_size = sizeof(struct skeleton_eventdev),
+static int
+event_skeleton_pci_probe(struct rte_pci_driver *pci_drv,
+                        struct rte_pci_device *pci_dev)
+{
+       return rte_event_pmd_pci_probe(pci_drv, pci_dev,
+               sizeof(struct skeleton_eventdev), skeleton_eventdev_init);
+}
+
+static int
+event_skeleton_pci_remove(struct rte_pci_device *pci_dev)
+{
+       return rte_event_pmd_pci_remove(pci_dev, NULL);
+}
+
+static struct rte_pci_driver pci_eventdev_skeleton_pmd = {
+       .id_table = pci_id_skeleton_map,
+       .drv_flags = RTE_PCI_DRV_NEED_MAPPING,
+       .probe = event_skeleton_pci_probe,
+       .remove = event_skeleton_pci_remove,
 };
 
-RTE_PMD_REGISTER_PCI(event_skeleton_pci, pci_eventdev_skeleton_pmd.pci_drv);
+RTE_PMD_REGISTER_PCI(event_skeleton_pci, pci_eventdev_skeleton_pmd);
 RTE_PMD_REGISTER_PCI_TABLE(event_skeleton_pci, pci_id_skeleton_map);
 
 /* VDEV based event device */
 
-/**
- * Global static parameter used to create a unique name for each skeleton
- * event device.
- */
-static unsigned int skeleton_unique_id;
-
-static inline int
-skeleton_create_unique_device_name(char *name, size_t size)
-{
-       int ret;
-
-       if (name == NULL)
-               return -EINVAL;
-
-       ret = snprintf(name, size, "%s_%u", RTE_STR(EVENTDEV_NAME_SKELETON_PMD),
-                       skeleton_unique_id++);
-       if (ret < 0)
-               return ret;
-       return 0;
-}
-
 static int
-skeleton_eventdev_create(int socket_id)
+skeleton_eventdev_create(const char *name, int socket_id)
 {
        struct rte_eventdev *eventdev;
-       char eventdev_name[RTE_EVENTDEV_NAME_MAX_LEN];
-
-       /* Create a unique device name */
-       if (skeleton_create_unique_device_name(eventdev_name,
-                       RTE_EVENTDEV_NAME_MAX_LEN) != 0) {
-               PMD_DRV_ERR("Failed to create unique eventdev name");
-               return -EINVAL;
-       }
 
-       eventdev = rte_event_pmd_vdev_init(eventdev_name,
+       eventdev = rte_event_pmd_vdev_init(name,
                        sizeof(struct skeleton_eventdev), socket_id);
        if (eventdev == NULL) {
-               PMD_DRV_ERR("Failed to create eventdev vdev");
+               PMD_DRV_ERR("Failed to create eventdev vdev %s", name);
                goto fail;
        }
 
        eventdev->dev_ops       = &skeleton_eventdev_ops;
-       eventdev->schedule      = NULL;
        eventdev->enqueue       = skeleton_eventdev_enqueue;
        eventdev->enqueue_burst = skeleton_eventdev_enqueue_burst;
        eventdev->dequeue       = skeleton_eventdev_dequeue;
@@ -495,22 +448,25 @@ fail:
 }
 
 static int
-skeleton_eventdev_probe(const char *name, __rte_unused const char *input_args)
+skeleton_eventdev_probe(struct rte_vdev_device *vdev)
 {
+       const char *name;
+
+       name = rte_vdev_device_name(vdev);
        RTE_LOG(INFO, PMD, "Initializing %s on NUMA node %d\n", name,
                        rte_socket_id());
-       return skeleton_eventdev_create(rte_socket_id());
+       return skeleton_eventdev_create(name, rte_socket_id());
 }
 
 static int
-skeleton_eventdev_remove(const char *name)
+skeleton_eventdev_remove(struct rte_vdev_device *vdev)
 {
-       if (name == NULL)
-               return -EINVAL;
+       const char *name;
 
+       name = rte_vdev_device_name(vdev);
        PMD_DRV_LOG(INFO, "Closing %s on NUMA node %d", name, rte_socket_id());
 
-       return 0;
+       return rte_event_pmd_vdev_uninit(name);
 }
 
 static struct rte_vdev_driver vdev_eventdev_skeleton_pmd = {