From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id BC034A056B; Thu, 12 Mar 2020 04:11:59 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 1816F1BF7F; Thu, 12 Mar 2020 04:11:59 +0100 (CET) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id AD97A2BAA for ; Thu, 12 Mar 2020 04:11:56 +0100 (CET) X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from orsmga004.jf.intel.com ([10.7.209.38]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Mar 2020 20:11:55 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,543,1574150400"; d="scan'208";a="389467734" Received: from yexl-server.sh.intel.com (HELO localhost) ([10.67.117.17]) by orsmga004.jf.intel.com with ESMTP; 11 Mar 2020 20:11:53 -0700 Date: Thu, 12 Mar 2020 11:09:19 +0800 From: Ye Xiaolong To: alvinx.zhang@intel.com Cc: dev@dpdk.org, haiyue.wang@intel.com, qi.z.zhang@intel.com, beilei.xing@intel.com Message-ID: <20200312030919.GA26897@intel.com> References: <1583742247-370386-1-git-send-email-alvinx.zhang@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1583742247-370386-1-git-send-email-alvinx.zhang@intel.com> User-Agent: Mutt/1.9.4 (2018-02-28) Subject: Re: [dpdk-dev] [PATCH v1 01/15] net/igc: add igc PMD X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" On 03/09, alvinx.zhang@intel.com wrote: >From: Alvin Zhang > >Implement device detection and loading. > >Signed-off-by: Alvin Zhang >--- > 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 >+ >+#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 >