From: Ye Xiaolong <xiaolong.ye@intel.com>
To: alvinx.zhang@intel.com
Cc: dev@dpdk.org, haiyue.wang@intel.com, qi.z.zhang@intel.com,
beilei.xing@intel.com
Subject: Re: [dpdk-dev] [PATCH v1 01/15] net/igc: add igc PMD
Date: Thu, 12 Mar 2020 11:09:19 +0800 [thread overview]
Message-ID: <20200312030919.GA26897@intel.com> (raw)
In-Reply-To: <1583742247-370386-1-git-send-email-alvinx.zhang@intel.com>
On 03/09, alvinx.zhang@intel.com wrote:
>From: Alvin Zhang <alvinx.zhang@intel.com>
>
>Implement device detection and loading.
>
>Signed-off-by: Alvin Zhang <alvinx.zhang@intel.com>
>---
> MAINTAINERS | 7 +
> config/common_base | 7 +
> doc/guides/nics/features/igc.ini | 8 +
> doc/guides/nics/igc.rst | 39 +++++
> doc/guides/nics/index.rst | 1 +
> drivers/net/Makefile | 1 +
> drivers/net/igc/Makefile | 25 ++++
> drivers/net/igc/igc_ethdev.c | 249 ++++++++++++++++++++++++++++++++
> drivers/net/igc/igc_ethdev.h | 18 +++
> drivers/net/igc/igc_logs.c | 21 +++
> drivers/net/igc/igc_logs.h | 34 +++++
> drivers/net/igc/meson.build | 7 +
> drivers/net/igc/rte_pmd_igc_version.map | 3 +
> drivers/net/meson.build | 1 +
> mk/rte.app.mk | 1 +
Please update the release notes as well.
> 15 files changed, 422 insertions(+)
> create mode 100644 doc/guides/nics/features/igc.ini
> create mode 100644 doc/guides/nics/igc.rst
> create mode 100644 drivers/net/igc/Makefile
> create mode 100644 drivers/net/igc/igc_ethdev.c
> create mode 100644 drivers/net/igc/igc_ethdev.h
> create mode 100644 drivers/net/igc/igc_logs.c
> create mode 100644 drivers/net/igc/igc_logs.h
> create mode 100644 drivers/net/igc/meson.build
> create mode 100644 drivers/net/igc/rte_pmd_igc_version.map
>
[snip]
>+static int
>+eth_igc_dev_init(struct rte_eth_dev *dev)
>+{
>+ struct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(dev);
>+
>+ PMD_INIT_FUNC_TRACE();
>+ dev->dev_ops = ð_igc_ops;
>+
>+ /*
>+ * for secondary processes, we don't initialize any further as primary
>+ * has already done this work. Only check we don't need a different
>+ * RX function.
>+ */
>+ if (rte_eal_process_type() != RTE_PROC_PRIMARY)
>+ return 0;
>+
>+ rte_eth_copy_pci_info(dev, pci_dev);
>+
>+ dev->data->mac_addrs = rte_zmalloc("igc",
>+ RTE_ETHER_ADDR_LEN, 0);
>+ if (dev->data->mac_addrs == NULL) {
>+ PMD_INIT_LOG(ERR, "Failed to allocate %d bytes needed to "
>+ "store MAC addresses", RTE_ETHER_ADDR_LEN);
>+ return -ENODEV;
-ENOMEM should be returned.
>+ }
>+
>+ /* Pass the information to the rte_eth_dev_close() that it should also
>+ * release the private port resources.
>+ */
>+ dev->data->dev_flags |= RTE_ETH_DEV_CLOSE_REMOVE;
>+
>+ PMD_INIT_LOG(DEBUG, "port_id %d vendorID=0x%x deviceID=0x%x",
>+ dev->data->port_id, pci_dev->id.vendor_id,
>+ pci_dev->id.device_id);
>+
>+ return 0;
>+}
>+
>+static int
>+eth_igc_dev_uninit(__rte_unused struct rte_eth_dev *eth_dev)
>+{
>+ PMD_INIT_FUNC_TRACE();
>+
>+ if (rte_eal_process_type() != RTE_PROC_PRIMARY)
>+ return -EPERM;
>+
>+ eth_igc_close(eth_dev);
>+ return 0;
>+}
>+
>+/*
>+ * Reset PF device.
>+ */
This function name is straightforward enough, so this comment is unnecessary.
>+static int
>+eth_igc_reset(struct rte_eth_dev *dev)
>+{
>+ int ret;
>+
>+ PMD_INIT_FUNC_TRACE();
>+
>+ ret = eth_igc_dev_uninit(dev);
>+ if (ret)
>+ return ret;
>+
>+ return eth_igc_dev_init(dev);
>+}
>+
>+static int
>+eth_igc_promiscuous_enable(struct rte_eth_dev *dev)
>+{
>+ PMD_INIT_FUNC_TRACE();
>+ RTE_SET_USED(dev);
>+ return 0;
>+}
>+
>+static int
>+eth_igc_promiscuous_disable(struct rte_eth_dev *dev)
>+{
>+ PMD_INIT_FUNC_TRACE();
>+ RTE_SET_USED(dev);
>+ return 0;
>+}
>+
>+static int
>+eth_igc_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
>+{
>+ PMD_INIT_FUNC_TRACE();
>+ RTE_SET_USED(dev);
>+ dev_info->max_rx_queues = IGC_QUEUE_PAIRS_NUM;
>+ dev_info->max_tx_queues = IGC_QUEUE_PAIRS_NUM;
>+ return 0;
>+}
>+
>+static int
>+eth_igc_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id,
>+ uint16_t nb_rx_desc, unsigned int socket_id,
>+ const struct rte_eth_rxconf *rx_conf,
>+ struct rte_mempool *mb_pool)
>+{
>+ PMD_INIT_FUNC_TRACE();
>+ RTE_SET_USED(dev);
>+ RTE_SET_USED(rx_queue_id);
>+ RTE_SET_USED(nb_rx_desc);
>+ RTE_SET_USED(socket_id);
>+ RTE_SET_USED(rx_conf);
>+ RTE_SET_USED(mb_pool);
>+ return 0;
>+}
>+
>+static int
>+eth_igc_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,
>+ uint16_t nb_desc, unsigned int socket_id,
>+ const struct rte_eth_txconf *tx_conf)
>+{
>+ PMD_INIT_FUNC_TRACE();
>+ RTE_SET_USED(dev);
>+ RTE_SET_USED(queue_idx);
>+ RTE_SET_USED(nb_desc);
>+ RTE_SET_USED(socket_id);
>+ RTE_SET_USED(tx_conf);
>+ return 0;
>+}
>+
>+static int
>+eth_igc_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,
>+ struct rte_pci_device *pci_dev)
>+{
>+ PMD_INIT_FUNC_TRACE();
>+ return rte_eth_dev_pci_generic_probe(pci_dev, 0, eth_igc_dev_init);
>+}
>+
>+static int
>+eth_igc_pci_remove(struct rte_pci_device *pci_dev __rte_unused)
pci_dev is actually used in below function.
>+{
>+ PMD_INIT_FUNC_TRACE();
>+ return rte_eth_dev_pci_generic_remove(pci_dev, eth_igc_dev_uninit);
>+}
>+
>+static struct rte_pci_driver rte_igc_pmd = {
>+ .id_table = pci_id_igc_map,
>+ .drv_flags = RTE_PCI_DRV_NEED_MAPPING | RTE_PCI_DRV_INTR_LSC,
>+ .probe = eth_igc_pci_probe,
>+ .remove = eth_igc_pci_remove,
>+};
>+
>+RTE_PMD_REGISTER_PCI(net_igc, rte_igc_pmd);
>+RTE_PMD_REGISTER_PCI_TABLE(net_igc, pci_id_igc_map);
>+RTE_PMD_REGISTER_KMOD_DEP(net_igc, "* igb_uio | uio_pci_generic | vfio-pci");
>diff --git a/drivers/net/igc/igc_ethdev.h b/drivers/net/igc/igc_ethdev.h
>new file mode 100644
>index 0000000..a774413
>--- /dev/null
>+++ b/drivers/net/igc/igc_ethdev.h
>@@ -0,0 +1,18 @@
>+/* SPDX-License-Identifier: BSD-3-Clause
>+ * Copyright(c) 2010-2020 Intel Corporation
>+ */
>+
>+#ifndef _IGC_ETHDEV_H_
>+#define _IGC_ETHDEV_H_
>+
>+#ifdef __cplusplus
>+extern "C" {
>+#endif
>+
>+#define IGC_QUEUE_PAIRS_NUM 4
>+
>+#ifdef __cplusplus
>+}
>+#endif
>+
>+#endif /* _IGC_ETHDEV_H_ */
>diff --git a/drivers/net/igc/igc_logs.c b/drivers/net/igc/igc_logs.c
>new file mode 100644
>index 0000000..c653783
>--- /dev/null
>+++ b/drivers/net/igc/igc_logs.c
>@@ -0,0 +1,21 @@
>+/* SPDX-License-Identifier: BSD-3-Clause
>+ * Copyright(c) 2020 Intel Corporation
>+ */
>+
>+#include "igc_logs.h"
>+#include "rte_common.h"
>+
>+/* declared as extern in igc_logs.h */
>+int igc_logtype_init = -1;
>+int igc_logtype_driver = -1;
>+
>+RTE_INIT(igc_init_log)
>+{
>+ igc_logtype_init = rte_log_register("pmd.net.igc.init");
>+ if (igc_logtype_init >= 0)
>+ rte_log_set_level(igc_logtype_init, RTE_LOG_INFO);
>+
>+ igc_logtype_driver = rte_log_register("pmd.net.igc.driver");
>+ if (igc_logtype_driver >= 0)
>+ rte_log_set_level(igc_logtype_driver, RTE_LOG_INFO);
>+}
>diff --git a/drivers/net/igc/igc_logs.h b/drivers/net/igc/igc_logs.h
>new file mode 100644
>index 0000000..eed4f46
>--- /dev/null
>+++ b/drivers/net/igc/igc_logs.h
>@@ -0,0 +1,34 @@
>+/* SPDX-License-Identifier: BSD-3-Clause
>+ * Copyright(c) 2010-2020 Intel Corporation
>+ */
>+
>+#ifndef _IGC_LOGS_H_
>+#define _IGC_LOGS_H_
>+
>+#include <rte_log.h>
>+
>+#ifdef __cplusplus
>+extern "C" {
>+#endif
>+
>+extern int igc_logtype_init;
>+extern int igc_logtype_driver;
>+
>+#define PMD_INIT_LOG(level, fmt, args...) \
>+ rte_log(RTE_LOG_ ## level, igc_logtype_init, \
>+ "%s(): " fmt "\n", __func__, ##args)
>+
>+#define PMD_INIT_FUNC_TRACE() PMD_INIT_LOG(DEBUG, " >>")
>+
>+#define PMD_DRV_LOG_RAW(level, fmt, args...) \
>+ rte_log(RTE_LOG_ ## level, igc_logtype_driver, "%s(): " fmt, \
>+ __func__, ## args)
>+
>+#define PMD_DRV_LOG(level, fmt, args...) \
>+ PMD_DRV_LOG_RAW(level, fmt "\n", ## args)
>+
>+#ifdef __cplusplus
>+}
>+#endif
>+
>+#endif /* _IGC_LOGS_H_ */
>diff --git a/drivers/net/igc/meson.build b/drivers/net/igc/meson.build
>new file mode 100644
>index 0000000..927938f
>--- /dev/null
>+++ b/drivers/net/igc/meson.build
>@@ -0,0 +1,7 @@
>+# SPDX-License-Identifier: BSD-3-Clause
>+# Copyright(c) 2020 Intel Corporation
>+
>+sources = files(
>+ 'igc_logs.c',
>+ 'igc_ethdev.c'
>+)
>diff --git a/drivers/net/igc/rte_pmd_igc_version.map b/drivers/net/igc/rte_pmd_igc_version.map
>new file mode 100644
>index 0000000..f9f17e4
>--- /dev/null
>+++ b/drivers/net/igc/rte_pmd_igc_version.map
>@@ -0,0 +1,3 @@
>+DPDK_20.0 {
Should be DPDK_20.0.1 for new symbols after 19.11.
>+ local: *;
>+};
>diff --git a/drivers/net/meson.build b/drivers/net/meson.build
>index b0ea8fe..7d0ae3b 100644
>--- a/drivers/net/meson.build
>+++ b/drivers/net/meson.build
>@@ -49,6 +49,7 @@ drivers = ['af_packet',
> 'vhost',
> 'virtio',
> 'vmxnet3',
>+ 'igc',
> ]
> std_deps = ['ethdev', 'kvargs'] # 'ethdev' also pulls in mbuf, net, eal etc
> std_deps += ['bus_pci'] # very many PMDs depend on PCI, so make std
>diff --git a/mk/rte.app.mk b/mk/rte.app.mk
>index d295ca0..afd570b 100644
>--- a/mk/rte.app.mk
>+++ b/mk/rte.app.mk
>@@ -184,6 +184,7 @@ _LDLIBS-$(CONFIG_RTE_LIBRTE_HNS3_PMD) += -lrte_pmd_hns3
> _LDLIBS-$(CONFIG_RTE_LIBRTE_I40E_PMD) += -lrte_pmd_i40e
> _LDLIBS-$(CONFIG_RTE_LIBRTE_IAVF_PMD) += -lrte_pmd_iavf
> _LDLIBS-$(CONFIG_RTE_LIBRTE_ICE_PMD) += -lrte_pmd_ice
>+_LDLIBS-$(CONFIG_RTE_LIBRTE_IGC_PMD) += -lrte_pmd_igc
> IAVF-y := $(CONFIG_RTE_LIBRTE_IAVF_PMD)
> ifeq ($(findstring y,$(IAVF-y)),y)
> _LDLIBS-y += -lrte_common_iavf
>--
>1.8.3.1
>
next prev parent reply other threads:[~2020-03-12 3:12 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-09 8:23 [dpdk-dev] [PATCH v1 01/15] net/igc: add igc PMD alvinx.zhang
2020-03-09 8:23 ` [dpdk-dev] [PATCH v1 02/15] net/igc: update base share codes alvinx.zhang
2020-03-09 8:23 ` [dpdk-dev] [PATCH v1 03/15] net/igc: device initialization alvinx.zhang
2020-03-12 4:42 ` Ye Xiaolong
2020-03-09 8:23 ` [dpdk-dev] [PATCH v1 04/15] net/igc: implement device base ops alvinx.zhang
2020-03-09 8:23 ` [dpdk-dev] [PATCH v1 05/15] net/igc: support reception and transmission of packets alvinx.zhang
2020-03-09 8:23 ` [dpdk-dev] [PATCH v1 06/15] net/igc: implement status API alvinx.zhang
2020-03-09 8:23 ` [dpdk-dev] [PATCH v1 07/15] net/igc: enable Rx queue interrupts alvinx.zhang
2020-03-09 8:24 ` [dpdk-dev] [PATCH v1 08/15] net/igc: implement flow control ops alvinx.zhang
2020-03-09 8:24 ` [dpdk-dev] [PATCH v1 09/15] net/igc: implement RSS API alvinx.zhang
2020-03-09 8:24 ` [dpdk-dev] [PATCH v1 10/15] net/igc: implement feature of VLAN alvinx.zhang
2020-03-09 8:24 ` [dpdk-dev] [PATCH v1 11/15] net/igc: implement ether-type filter alvinx.zhang
2020-03-09 8:24 ` [dpdk-dev] [PATCH v1 12/15] net/igc: implement 2-tuple filter alvinx.zhang
2020-03-09 8:24 ` [dpdk-dev] [PATCH v1 13/15] net/igc: implement TCP SYN filter alvinx.zhang
2020-03-09 8:24 ` [dpdk-dev] [PATCH v1 14/15] net/igc: implement hash filter configure alvinx.zhang
2020-03-09 8:24 ` [dpdk-dev] [PATCH v1 15/15] net/igc: implement flow API alvinx.zhang
2020-03-09 8:35 ` [dpdk-dev] [PATCH v1 01/15] net/igc: add igc PMD Ye Xiaolong
2020-03-12 3:09 ` Ye Xiaolong [this message]
2020-03-20 2:46 ` [dpdk-dev] [PATCH v2 00/14] " alvinx.zhang
2020-03-20 2:46 ` [dpdk-dev] [PATCH v2 01/14] net/igc: add " alvinx.zhang
2020-04-03 12:21 ` Ferruh Yigit
2020-03-20 2:46 ` [dpdk-dev] [PATCH v2 02/14] net/igc: support device initialization alvinx.zhang
2020-04-03 12:23 ` Ferruh Yigit
2020-03-20 2:46 ` [dpdk-dev] [PATCH v2 03/14] net/igc: implement device base ops alvinx.zhang
2020-04-03 12:24 ` Ferruh Yigit
2020-03-20 2:46 ` [dpdk-dev] [PATCH v2 04/14] net/igc: support reception and transmission of packets alvinx.zhang
2020-04-03 12:27 ` Ferruh Yigit
2020-03-20 2:46 ` [dpdk-dev] [PATCH v2 05/14] net/igc: implement status API alvinx.zhang
2020-04-03 12:24 ` Ferruh Yigit
2020-03-20 2:46 ` [dpdk-dev] [PATCH v2 06/14] net/igc: enable Rx queue interrupts alvinx.zhang
2020-03-20 2:46 ` [dpdk-dev] [PATCH v2 07/14] net/igc: implement flow control ops alvinx.zhang
2020-03-20 2:46 ` [dpdk-dev] [PATCH v2 08/14] net/igc: implement RSS API alvinx.zhang
2020-03-20 2:46 ` [dpdk-dev] [PATCH v2 09/14] net/igc: implement feature of VLAN alvinx.zhang
2020-03-20 2:46 ` [dpdk-dev] [PATCH v2 10/14] net/igc: implement ether-type filter alvinx.zhang
2020-04-03 12:26 ` Ferruh Yigit
2020-03-20 2:46 ` [dpdk-dev] [PATCH v2 11/14] net/igc: implement 2-tuple filter alvinx.zhang
2020-03-20 2:46 ` [dpdk-dev] [PATCH v2 12/14] net/igc: implement TCP SYN filter alvinx.zhang
2020-03-20 2:46 ` [dpdk-dev] [PATCH v2 13/14] net/igc: implement hash filter configure alvinx.zhang
2020-03-20 2:46 ` [dpdk-dev] [PATCH v2 14/14] net/igc: implement flow API alvinx.zhang
2020-04-03 12:26 ` Ferruh Yigit
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200312030919.GA26897@intel.com \
--to=xiaolong.ye@intel.com \
--cc=alvinx.zhang@intel.com \
--cc=beilei.xing@intel.com \
--cc=dev@dpdk.org \
--cc=haiyue.wang@intel.com \
--cc=qi.z.zhang@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.