1 /* SPDX-License-Identifier: BSD-3-Clause
2 * Copyright(c) 2016-2020 Intel Corporation
15 #include <rte_debug.h>
18 #include <rte_devargs.h>
21 #include <rte_errno.h>
22 #include <rte_kvargs.h>
23 #include <rte_malloc.h>
24 #include <rte_cycles.h>
26 #include <rte_memory.h>
27 #include <rte_string_fns.h>
29 #include "../dlb_priv.h"
30 #include "../dlb_inline_fns.h"
32 #include "base/dlb_hw_types.h"
33 #include "base/dlb_osdep.h"
34 #include "base/dlb_resource.h"
37 dlb_pf_iface_fn_ptrs_init(void)
44 dlb_eventdev_pci_init(struct rte_eventdev *eventdev)
47 struct rte_pci_device *pci_dev;
48 struct dlb_devargs dlb_args = {
49 .socket_id = rte_socket_id(),
50 .max_num_events = DLB_MAX_NUM_LDB_CREDITS,
51 .num_dir_credits_override = -1,
53 .num_atm_inflights = DLB_NUM_ATOMIC_INFLIGHTS_PER_QUEUE,
55 struct dlb_eventdev *dlb;
57 DLB_LOG_DBG("Enter with dev_id=%d socket_id=%d",
58 eventdev->data->dev_id, eventdev->data->socket_id);
60 dlb_entry_points_init(eventdev);
62 dlb_pf_iface_fn_ptrs_init();
64 pci_dev = RTE_DEV_TO_PCI(eventdev->dev);
66 if (rte_eal_process_type() == RTE_PROC_PRIMARY) {
67 dlb = dlb_pmd_priv(eventdev); /* rte_zmalloc_socket mem */
69 /* Probe the DLB PF layer */
70 dlb->qm_instance.pf_dev = dlb_probe(pci_dev);
72 if (dlb->qm_instance.pf_dev == NULL) {
73 DLB_LOG_ERR("DLB PF Probe failed with error %d\n",
76 goto dlb_probe_failed;
79 /* Were we invoked with runtime parameters? */
80 if (pci_dev->device.devargs) {
81 ret = dlb_parse_params(pci_dev->device.devargs->args,
82 pci_dev->device.devargs->name,
85 DLB_LOG_ERR("PFPMD failed to parse args ret=%d, errno=%d\n",
87 goto dlb_probe_failed;
91 ret = dlb_primary_eventdev_probe(eventdev,
92 EVDEV_DLB_NAME_PMD_STR,
95 ret = dlb_secondary_eventdev_probe(eventdev,
96 EVDEV_DLB_NAME_PMD_STR);
99 goto dlb_probe_failed;
101 DLB_LOG_INFO("DLB PF Probe success\n");
107 DLB_LOG_INFO("DLB PF Probe failed, ret=%d\n", ret);
112 #define EVENTDEV_INTEL_VENDOR_ID 0x8086
114 static const struct rte_pci_id pci_id_dlb_map[] = {
116 RTE_PCI_DEVICE(EVENTDEV_INTEL_VENDOR_ID,
125 event_dlb_pci_probe(struct rte_pci_driver *pci_drv,
126 struct rte_pci_device *pci_dev)
128 return rte_event_pmd_pci_probe_named(pci_drv, pci_dev,
129 sizeof(struct dlb_eventdev), dlb_eventdev_pci_init,
130 EVDEV_DLB_NAME_PMD_STR);
134 event_dlb_pci_remove(struct rte_pci_device *pci_dev)
136 return rte_event_pmd_pci_remove(pci_dev, NULL);
139 static struct rte_pci_driver pci_eventdev_dlb_pmd = {
140 .id_table = pci_id_dlb_map,
141 .drv_flags = RTE_PCI_DRV_NEED_MAPPING,
142 .probe = event_dlb_pci_probe,
143 .remove = event_dlb_pci_remove,
146 RTE_PMD_REGISTER_PCI(event_dlb_pf, pci_eventdev_dlb_pmd);
147 RTE_PMD_REGISTER_PCI_TABLE(event_dlb_pf, pci_id_dlb_map);