On 6/17/21 1:59 PM, Jiawen Wu wrote: > Add device IDs for Wangxun 1Gb NICs, map device IDs to register ngbe > PMD. Add basic PCIe ethdev probe and remove. > > Signed-off-by: Jiawen Wu <jiawe...@trustnetic.com> > --- > doc/guides/nics/features/ngbe.ini | 1 + > drivers/net/ngbe/base/meson.build | 18 +++++++ > drivers/net/ngbe/base/ngbe_devids.h | 83 +++++++++++++++++++++++++++++ > drivers/net/ngbe/meson.build | 6 +++ > drivers/net/ngbe/ngbe_ethdev.c | 66 +++++++++++++++++++++-- > drivers/net/ngbe/ngbe_ethdev.h | 16 ++++++ > 6 files changed, 186 insertions(+), 4 deletions(-) > create mode 100644 drivers/net/ngbe/base/meson.build > create mode 100644 drivers/net/ngbe/base/ngbe_devids.h > create mode 100644 drivers/net/ngbe/ngbe_ethdev.h > > diff --git a/doc/guides/nics/features/ngbe.ini > b/doc/guides/nics/features/ngbe.ini > index a7a524defc..977286ac04 100644 > --- a/doc/guides/nics/features/ngbe.ini > +++ b/doc/guides/nics/features/ngbe.ini > @@ -4,6 +4,7 @@ > ; Refer to default.ini for the full list of available PMD features. > ; > [Features] > +Multiprocess aware = Y > Linux = Y > ARMv8 = Y > x86-32 = Y > diff --git a/drivers/net/ngbe/base/meson.build > b/drivers/net/ngbe/base/meson.build > new file mode 100644 > index 0000000000..c5f6467743 > --- /dev/null > +++ b/drivers/net/ngbe/base/meson.build > @@ -0,0 +1,18 @@ > +# SPDX-License-Identifier: BSD-3-Clause > +# Copyright(c) 2018-2020 Beijing WangXun Technology Co., Ltd. > + > +sources = [] > + > +error_cflags = [] > + > +c_args = cflags > +foreach flag: error_cflags > + if cc.has_argument(flag) > + c_args += flag > + endif > +endforeach
It is a dead code since error_cflags is empty. It should be added when the first flag is added to error_cflags. > + > +base_lib = static_library('ngbe_base', sources, > + dependencies: [static_rte_eal, static_rte_ethdev, static_rte_bus_pci], > + c_args: c_args) > +base_objs = base_lib.extract_all_objects() [snip] > diff --git a/drivers/net/ngbe/base/ngbe_devids.h > b/drivers/net/ngbe/base/ngbe_devids.h > diff --git a/drivers/net/ngbe/meson.build b/drivers/net/ngbe/meson.build > index de2d7be716..81173fa7f0 100644 > --- a/drivers/net/ngbe/meson.build > +++ b/drivers/net/ngbe/meson.build > @@ -7,6 +7,12 @@ if is_windows > subdir_done() > endif > > +subdir('base') > +objs = [base_objs] > + > sources = files( > 'ngbe_ethdev.c', > ) > + > +includes += include_directories('base') > + Trailing empty line should be avoided > diff --git a/drivers/net/ngbe/ngbe_ethdev.c b/drivers/net/ngbe/ngbe_ethdev.c > index f8e19066de..d8df7ef896 100644 > --- a/drivers/net/ngbe/ngbe_ethdev.c > +++ b/drivers/net/ngbe/ngbe_ethdev.c > @@ -7,23 +7,81 @@ > #include <rte_common.h> > #include <ethdev_pci.h> > > +#include <base/ngbe_devids.h> Shouldn't it be #include "ngbe_devids.h" since base is in includes? It definitely should be in double-quotes since it is not a system header. > +#include "ngbe_ethdev.h" > + > +/* > + * The set of PCI devices this driver supports > + */ > +static const struct rte_pci_id pci_id_ngbe_map[] = { > + { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860A2) }, > + { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860A2S) }, > + { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860A4) }, > + { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860A4S) }, > + { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860AL2) }, > + { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860AL2S) }, > + { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860AL4) }, > + { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860AL4S) }, > + { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860NCSI) }, > + { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860A1) }, > + { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860A1L) }, > + { RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, NGBE_DEV_ID_EM_WX1860AL_W) }, > + { .vendor_id = 0, /* sentinel */ }, > +}; > + > +static int > +eth_ngbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params > __rte_unused) > +{ > + struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev); > + > + if (rte_eal_process_type() != RTE_PROC_PRIMARY) > + return 0; > + > + rte_eth_copy_pci_info(eth_dev, pci_dev); > + > + return -EINVAL; > +} > + > +static int > +eth_ngbe_dev_uninit(struct rte_eth_dev *eth_dev) > +{ > + if (rte_eal_process_type() != RTE_PROC_PRIMARY) > + return 0; > + > + RTE_SET_USED(eth_dev); > + > + return -EINVAL; > +} > + > static int > eth_ngbe_pci_probe(struct rte_pci_driver *pci_drv __rte_unused, > struct rte_pci_device *pci_dev) > { > - RTE_SET_USED(pci_dev); > - return -EINVAL; > + return rte_eth_dev_create(&pci_dev->device, pci_dev->device.name, > + sizeof(struct ngbe_adapter), > + eth_dev_pci_specific_init, pci_dev, > + eth_ngbe_dev_init, NULL); > } > > static int eth_ngbe_pci_remove(struct rte_pci_device *pci_dev) > { > - RTE_SET_USED(pci_dev); > - return -EINVAL; > + struct rte_eth_dev *ethdev; > + > + ethdev = rte_eth_dev_allocated(pci_dev->device.name); > + if (ethdev == NULL) > + return 0; > + > + return rte_eth_dev_destroy(ethdev, eth_ngbe_dev_uninit); > } > > static struct rte_pci_driver rte_ngbe_pmd = { > + .id_table = pci_id_ngbe_map, > + .drv_flags = RTE_PCI_DRV_NEED_MAPPING, > .probe = eth_ngbe_pci_probe, > .remove = eth_ngbe_pci_remove, > }; > > RTE_PMD_REGISTER_PCI(net_ngbe, rte_ngbe_pmd); > +RTE_PMD_REGISTER_PCI_TABLE(net_ngbe, pci_id_ngbe_map); > +RTE_PMD_REGISTER_KMOD_DEP(net_ngbe, "* igb_uio | uio_pci_generic | > vfio-pci"); > + > diff --git a/drivers/net/ngbe/ngbe_ethdev.h b/drivers/net/ngbe/ngbe_ethdev.h > new file mode 100644 > index 0000000000..38f55f7fb1 > --- /dev/null > +++ b/drivers/net/ngbe/ngbe_ethdev.h > @@ -0,0 +1,16 @@ > +/* SPDX-License-Identifier: BSD-3-Clause > + * Copyright(c) 2018-2020 Beijing WangXun Technology Co., Ltd. 2021? > + * Copyright(c) 2010-2017 Intel Corporation > + */ > + > +#ifndef _NGBE_ETHDEV_H_ > +#define _NGBE_ETHDEV_H_ > + > +/* > + * Structure to store private data for each driver instance (for each port). > + */ > +struct ngbe_adapter { > + void *back; It should be a comment above what it is and why it is added. > +}; > + > +#endif /* _NGBE_ETHDEV_H_ */ >