add probe and remove function template for qdma PMD. define supported PCI device table.
Signed-off-by: Aman Kumar <aman.ku...@vvdntech.in> --- drivers/net/qdma/meson.build | 18 ++++++ drivers/net/qdma/qdma_ethdev.c | 107 +++++++++++++++++++++++++++++++++ drivers/net/qdma/version.map | 3 + 3 files changed, 128 insertions(+) create mode 100644 drivers/net/qdma/meson.build create mode 100644 drivers/net/qdma/qdma_ethdev.c create mode 100644 drivers/net/qdma/version.map diff --git a/drivers/net/qdma/meson.build b/drivers/net/qdma/meson.build new file mode 100644 index 0000000000..fe9d2d48d7 --- /dev/null +++ b/drivers/net/qdma/meson.build @@ -0,0 +1,18 @@ +# SPDX-License-Identifier: BSD-3-Clause +# Copyright(c) 2021-2022 Xilinx, Inc. All rights reserved. +# Copyright(c) 2022 VVDN Technologies Private Limited. All rights reserved. + +if not is_linux + build = false + reason = 'only supported on Linux' +endif +if (not dpdk_conf.has('RTE_ARCH_X86_64')) + build = false + reason = 'only supported on x86_64' +endif + +includes += include_directories('.') + +sources = files( + 'qdma_ethdev.c', +) diff --git a/drivers/net/qdma/qdma_ethdev.c b/drivers/net/qdma/qdma_ethdev.c new file mode 100644 index 0000000000..35d7c88658 --- /dev/null +++ b/drivers/net/qdma/qdma_ethdev.c @@ -0,0 +1,107 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2017-2022 Xilinx, Inc. All rights reserved. + * Copyright(c) 2022 VVDN Technologies Private Limited. All rights reserved. + */ + +#include <ethdev_pci.h> +#include <rte_dev.h> +#include <rte_pci.h> +#include <rte_ether.h> +#include <rte_ethdev.h> + +/* + * The set of PCI devices this driver supports + */ +static struct rte_pci_id qdma_pci_id_tbl[] = { +#define RTE_PCI_DEV_ID_DECL(vend, dev) {RTE_PCI_DEVICE(vend, dev)}, +#ifndef PCI_VENDOR_ID_VVDN +#define PCI_VENDOR_ID_VVDN 0x1f44 +#endif + + /** Gen 3 PF */ + /** PCIe lane width x8 */ + RTE_PCI_DEV_ID_DECL(PCI_VENDOR_ID_VVDN, 0x0201) /** PF */ + + { .vendor_id = 0, /* sentinel */ }, +}; + +/** + * DPDK callback to register a PCI device. + * + * This function creates an Ethernet device for each port of a given + * PCI device. + * + * @param[in] dev + * Pointer to Ethernet device structure. + * + * @return + * 0 on success, negative errno value on failure. + */ +static int qdma_eth_dev_init(struct rte_eth_dev *dev) +{ + struct rte_pci_device *pci_dev; + + /* sanity checks */ + if (dev == NULL) + return -EINVAL; + if (dev->data == NULL) + return -EINVAL; + if (dev->data->dev_private == NULL) + return -EINVAL; + + pci_dev = RTE_ETH_DEV_TO_PCI(dev); + if (pci_dev == NULL) + return -EINVAL; + + /* for secondary processes, we don't initialise any further as primary + * has already done this work. + */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return 0; + + return 0; +} + +/** + * DPDK callback to deregister PCI device. + * + * @param[in] dev + * Pointer to Ethernet device structure. + * + * @return + * 0 on success, negative errno value on failure. + */ +static int qdma_eth_dev_uninit(struct rte_eth_dev *dev) +{ + /* sanity checks */ + if (dev == NULL) + return -EINVAL; + /* only uninitialize in the primary process */ + if (rte_eal_process_type() != RTE_PROC_PRIMARY) + return -EPERM; + + return 0; +} + +static int eth_qdma_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, + struct rte_pci_device *pci_dev) +{ + return rte_eth_dev_pci_generic_probe(pci_dev, 0, + qdma_eth_dev_init); +} + +/* Detach a ethdev interface */ +static int eth_qdma_pci_remove(struct rte_pci_device *pci_dev) +{ + return rte_eth_dev_pci_generic_remove(pci_dev, qdma_eth_dev_uninit); +} + +static struct rte_pci_driver rte_qdma_pmd = { + .id_table = qdma_pci_id_tbl, + .drv_flags = RTE_PCI_DRV_NEED_MAPPING, + .probe = eth_qdma_pci_probe, + .remove = eth_qdma_pci_remove, +}; + +RTE_PMD_REGISTER_PCI(net_qdma, rte_qdma_pmd); +RTE_PMD_REGISTER_PCI_TABLE(net_qdma, qdma_pci_id_tbl); diff --git a/drivers/net/qdma/version.map b/drivers/net/qdma/version.map new file mode 100644 index 0000000000..c2e0723b4c --- /dev/null +++ b/drivers/net/qdma/version.map @@ -0,0 +1,3 @@ +DPDK_22 { + local: *; +}; -- 2.36.1