Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/94330/?format=api
https://patches.dpdk.org/api/patches/94330/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210617110005.4132926-6-jiawenwu@trustnetic.com/", "project": { "id": 1, "url": "https://patches.dpdk.org/api/projects/1/?format=api", "name": "DPDK", "link_name": "dpdk", "list_id": "dev.dpdk.org", "list_email": "dev@dpdk.org", "web_url": "http://core.dpdk.org", "scm_url": "git://dpdk.org/dpdk", "webscm_url": "http://git.dpdk.org/dpdk", "list_archive_url": "https://inbox.dpdk.org/dev", "list_archive_url_format": "https://inbox.dpdk.org/dev/{}", "commit_url_format": "" }, "msgid": "<20210617110005.4132926-6-jiawenwu@trustnetic.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20210617110005.4132926-6-jiawenwu@trustnetic.com", "date": "2021-06-17T10:59:51", "name": "[v6,05/19] net/ngbe: set MAC type and LAN ID with device initialization", "commit_ref": null, "pull_url": null, "state": "changes-requested", "archived": true, "hash": "fc290428e205afe8c69d10b8ef23a1716ca8b719", "submitter": { "id": 1932, "url": "https://patches.dpdk.org/api/people/1932/?format=api", "name": "Jiawen Wu", "email": "jiawenwu@trustnetic.com" }, "delegate": { "id": 3961, "url": "https://patches.dpdk.org/api/users/3961/?format=api", "username": "arybchenko", "first_name": "Andrew", "last_name": "Rybchenko", "email": "andrew.rybchenko@oktetlabs.ru" }, "mbox": "https://patches.dpdk.org/project/dpdk/patch/20210617110005.4132926-6-jiawenwu@trustnetic.com/mbox/", "series": [ { "id": 17372, "url": "https://patches.dpdk.org/api/series/17372/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=17372", "date": "2021-06-17T10:59:46", "name": "net: ngbe PMD", "version": 6, "mbox": "https://patches.dpdk.org/series/17372/mbox/" } ], "comments": "https://patches.dpdk.org/api/patches/94330/comments/", "check": "warning", "checks": "https://patches.dpdk.org/api/patches/94330/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<dev-bounces@dpdk.org>", "X-Original-To": "patchwork@inbox.dpdk.org", "Delivered-To": "patchwork@inbox.dpdk.org", "Received": [ "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id B15B2A0C4D;\n\tThu, 17 Jun 2021 12:58:45 +0200 (CEST)", "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id CBB4F41103;\n\tThu, 17 Jun 2021 12:58:20 +0200 (CEST)", "from smtpproxy21.qq.com (smtpbg704.qq.com [203.205.195.105])\n by mails.dpdk.org (Postfix) with ESMTP id AE71B410F3\n for <dev@dpdk.org>; Thu, 17 Jun 2021 12:58:16 +0200 (CEST)", "from wxdbg.localdomain.com (unknown [183.129.236.74])\n by esmtp6.qq.com (ESMTP) with\n id ; Thu, 17 Jun 2021 18:58:12 +0800 (CST)" ], "X-QQ-mid": "bizesmtp46t1623927493t2wbza5a", "X-QQ-SSF": "01400000000000D0E000B00A0000000", "X-QQ-FEAT": "YKCDl5A3/aqOjOgADts3hqcaPtkbMnW9mRMXu26aln7KSUMmKjDm+rTzo3Ctz\n mIFhWbfny5SW591OikCODWxp4Heb+Qe9+HgDbSt43S+U4vlzNxbZF9KmL+PPm0LRhC1Jya9\n dyJxeZ01LFI+52hjMDO88jxccJeEMmGQQOaX1CdgzMwTQcf9jdG53ZRtpHXoSQm/QpFHomi\n snYONgYstQycmIOw0NoJtYQDqhskajQnmQA2bqH8gVQyBSXGH8veQcFd8Cj8u35FBoFdrIc\n it9i+BdR4HfYRpi2zAmQNnIpMxtNNyVMOXR9jXvJl4Now+Ou0TEZ8Mj/qlPnUo6tznn94hP\n fppU2NRXtEjptRVBT8bT7pvfXfDsL02xg3Po4Nl", "X-QQ-GoodBg": "2", "From": "Jiawen Wu <jiawenwu@trustnetic.com>", "To": "dev@dpdk.org", "Cc": "Jiawen Wu <jiawenwu@trustnetic.com>", "Date": "Thu, 17 Jun 2021 18:59:51 +0800", "Message-Id": "<20210617110005.4132926-6-jiawenwu@trustnetic.com>", "X-Mailer": "git-send-email 2.27.0", "In-Reply-To": "<20210617110005.4132926-1-jiawenwu@trustnetic.com>", "References": "<20210617110005.4132926-1-jiawenwu@trustnetic.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-QQ-SENDSIZE": "520", "Feedback-ID": "bizesmtp:trustnetic.com:qybgforeign:qybgforeign1", "X-QQ-Bgrelay": "1", "Subject": "[dpdk-dev] [PATCH v6 05/19] net/ngbe: set MAC type and LAN ID with\n device initialization", "X-BeenThere": "dev@dpdk.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "DPDK patches and discussions <dev.dpdk.org>", "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>", "List-Archive": "<http://mails.dpdk.org/archives/dev/>", "List-Post": "<mailto:dev@dpdk.org>", "List-Help": "<mailto:dev-request@dpdk.org?subject=help>", "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>", "Errors-To": "dev-bounces@dpdk.org", "Sender": "\"dev\" <dev-bounces@dpdk.org>" }, "content": "Add basic init and uninit function.\nMap device IDs and subsystem IDs to single ID for easy operation.\nThen initialize the shared code.\n\nSigned-off-by: Jiawen Wu <jiawenwu@trustnetic.com>\n---\n drivers/net/ngbe/base/meson.build | 4 +-\n drivers/net/ngbe/base/ngbe.h | 11 ++\n drivers/net/ngbe/base/ngbe_dummy.h | 37 ++++++\n drivers/net/ngbe/base/ngbe_hw.c | 182 ++++++++++++++++++++++++++++\n drivers/net/ngbe/base/ngbe_hw.h | 18 +++\n drivers/net/ngbe/base/ngbe_osdep.h | 183 +++++++++++++++++++++++++++++\n drivers/net/ngbe/base/ngbe_type.h | 78 ++++++++++++\n drivers/net/ngbe/ngbe_ethdev.c | 39 +++++-\n drivers/net/ngbe/ngbe_ethdev.h | 19 ++-\n 9 files changed, 565 insertions(+), 6 deletions(-)\n create mode 100644 drivers/net/ngbe/base/ngbe.h\n create mode 100644 drivers/net/ngbe/base/ngbe_dummy.h\n create mode 100644 drivers/net/ngbe/base/ngbe_hw.c\n create mode 100644 drivers/net/ngbe/base/ngbe_hw.h\n create mode 100644 drivers/net/ngbe/base/ngbe_osdep.h\n create mode 100644 drivers/net/ngbe/base/ngbe_type.h", "diff": "diff --git a/drivers/net/ngbe/base/meson.build b/drivers/net/ngbe/base/meson.build\nindex c5f6467743..fdbfa99916 100644\n--- a/drivers/net/ngbe/base/meson.build\n+++ b/drivers/net/ngbe/base/meson.build\n@@ -1,7 +1,9 @@\n # SPDX-License-Identifier: BSD-3-Clause\n # Copyright(c) 2018-2020 Beijing WangXun Technology Co., Ltd.\n \n-sources = []\n+sources = [\n+\t'ngbe_hw.c',\n+]\n \n error_cflags = []\n \ndiff --git a/drivers/net/ngbe/base/ngbe.h b/drivers/net/ngbe/base/ngbe.h\nnew file mode 100644\nindex 0000000000..63fad12ad3\n--- /dev/null\n+++ b/drivers/net/ngbe/base/ngbe.h\n@@ -0,0 +1,11 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2018-2020 Beijing WangXun Technology Co., Ltd.\n+ */\n+\n+#ifndef _NGBE_H_\n+#define _NGBE_H_\n+\n+#include \"ngbe_type.h\"\n+#include \"ngbe_hw.h\"\n+\n+#endif /* _NGBE_H_ */\ndiff --git a/drivers/net/ngbe/base/ngbe_dummy.h b/drivers/net/ngbe/base/ngbe_dummy.h\nnew file mode 100644\nindex 0000000000..75b4e50bca\n--- /dev/null\n+++ b/drivers/net/ngbe/base/ngbe_dummy.h\n@@ -0,0 +1,37 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2018-2020 Beijing WangXun Technology Co., Ltd.\n+ */\n+\n+#ifndef _NGBE_TYPE_DUMMY_H_\n+#define _NGBE_TYPE_DUMMY_H_\n+\n+#ifdef TUP\n+#elif defined(__GNUC__)\n+#define TUP(x) x##_unused ngbe_unused\n+#elif defined(__LCLINT__)\n+#define TUP(x) x /*@unused@*/\n+#else\n+#define TUP(x) x\n+#endif /*TUP*/\n+#define TUP0 TUP(p0)\n+#define TUP1 TUP(p1)\n+#define TUP2 TUP(p2)\n+#define TUP3 TUP(p3)\n+#define TUP4 TUP(p4)\n+#define TUP5 TUP(p5)\n+#define TUP6 TUP(p6)\n+#define TUP7 TUP(p7)\n+#define TUP8 TUP(p8)\n+#define TUP9 TUP(p9)\n+\n+/* struct ngbe_bus_operations */\n+static inline void ngbe_bus_set_lan_id_dummy(struct ngbe_hw *TUP0)\n+{\n+}\n+static inline void ngbe_init_ops_dummy(struct ngbe_hw *hw)\n+{\n+\thw->bus.set_lan_id = ngbe_bus_set_lan_id_dummy;\n+}\n+\n+#endif /* _NGBE_TYPE_DUMMY_H_ */\n+\ndiff --git a/drivers/net/ngbe/base/ngbe_hw.c b/drivers/net/ngbe/base/ngbe_hw.c\nnew file mode 100644\nindex 0000000000..014bb0faee\n--- /dev/null\n+++ b/drivers/net/ngbe/base/ngbe_hw.c\n@@ -0,0 +1,182 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2018-2020 Beijing WangXun Technology Co., Ltd.\n+ * Copyright(c) 2010-2017 Intel Corporation\n+ */\n+\n+#include \"ngbe_type.h\"\n+#include \"ngbe_hw.h\"\n+\n+/**\n+ * ngbe_set_lan_id_multi_port - Set LAN id for PCIe multiple port devices\n+ * @hw: pointer to the HW structure\n+ *\n+ * Determines the LAN function id by reading memory-mapped registers and swaps\n+ * the port value if requested, and set MAC instance for devices.\n+ **/\n+void ngbe_set_lan_id_multi_port(struct ngbe_hw *hw)\n+{\n+\tstruct ngbe_bus_info *bus = &hw->bus;\n+\tu32 reg = 0;\n+\n+\tDEBUGFUNC(\"ngbe_set_lan_id_multi_port\");\n+\n+\treg = rd32(hw, NGBE_PORTSTAT);\n+\tbus->lan_id = NGBE_PORTSTAT_ID(reg);\n+\tbus->func = bus->lan_id;\n+}\n+\n+/**\n+ * ngbe_set_mac_type - Sets MAC type\n+ * @hw: pointer to the HW structure\n+ *\n+ * This function sets the mac type of the adapter based on the\n+ * vendor ID and device ID stored in the hw structure.\n+ **/\n+s32 ngbe_set_mac_type(struct ngbe_hw *hw)\n+{\n+\ts32 err = 0;\n+\n+\tDEBUGFUNC(\"ngbe_set_mac_type\");\n+\n+\tif (hw->vendor_id != PCI_VENDOR_ID_WANGXUN) {\n+\t\tDEBUGOUT(\"Unsupported vendor id: %x\", hw->vendor_id);\n+\t\treturn NGBE_ERR_DEVICE_NOT_SUPPORTED;\n+\t}\n+\n+\tswitch (hw->sub_device_id) {\n+\tcase NGBE_SUB_DEV_ID_EM_RTL_SGMII:\n+\tcase NGBE_SUB_DEV_ID_EM_MVL_RGMII:\n+\t\thw->phy.media_type = ngbe_media_type_copper;\n+\t\thw->mac.type = ngbe_mac_em;\n+\t\tbreak;\n+\tcase NGBE_SUB_DEV_ID_EM_MVL_SFP:\n+\tcase NGBE_SUB_DEV_ID_EM_YT8521S_SFP:\n+\t\thw->phy.media_type = ngbe_media_type_fiber;\n+\t\thw->mac.type = ngbe_mac_em;\n+\t\tbreak;\n+\tcase NGBE_SUB_DEV_ID_EM_VF:\n+\t\thw->phy.media_type = ngbe_media_type_virtual;\n+\t\thw->mac.type = ngbe_mac_em_vf;\n+\t\tbreak;\n+\tdefault:\n+\t\terr = NGBE_ERR_DEVICE_NOT_SUPPORTED;\n+\t\thw->phy.media_type = ngbe_media_type_unknown;\n+\t\thw->mac.type = ngbe_mac_unknown;\n+\t\tDEBUGOUT(\"Unsupported device id: %x\", hw->device_id);\n+\t\tbreak;\n+\t}\n+\n+\tDEBUGOUT(\"found mac: %d media: %d, returns: %d\\n\",\n+\t\t hw->mac.type, hw->phy.media_type, err);\n+\treturn err;\n+}\n+\n+void ngbe_map_device_id(struct ngbe_hw *hw)\n+{\n+\tu16 oem = hw->sub_system_id & NGBE_OEM_MASK;\n+\tu16 internal = hw->sub_system_id & NGBE_INTERNAL_MASK;\n+\thw->is_pf = true;\n+\n+\t/* move subsystem_device_id to device_id */\n+\tswitch (hw->device_id) {\n+\tcase NGBE_DEV_ID_EM_WX1860AL_W_VF:\n+\tcase NGBE_DEV_ID_EM_WX1860A2_VF:\n+\tcase NGBE_DEV_ID_EM_WX1860A2S_VF:\n+\tcase NGBE_DEV_ID_EM_WX1860A4_VF:\n+\tcase NGBE_DEV_ID_EM_WX1860A4S_VF:\n+\tcase NGBE_DEV_ID_EM_WX1860AL2_VF:\n+\tcase NGBE_DEV_ID_EM_WX1860AL2S_VF:\n+\tcase NGBE_DEV_ID_EM_WX1860AL4_VF:\n+\tcase NGBE_DEV_ID_EM_WX1860AL4S_VF:\n+\tcase NGBE_DEV_ID_EM_WX1860NCSI_VF:\n+\tcase NGBE_DEV_ID_EM_WX1860A1_VF:\n+\tcase NGBE_DEV_ID_EM_WX1860A1L_VF:\n+\t\thw->device_id = NGBE_DEV_ID_EM_VF;\n+\t\thw->sub_device_id = NGBE_SUB_DEV_ID_EM_VF;\n+\t\thw->is_pf = false;\n+\t\tbreak;\n+\tcase NGBE_DEV_ID_EM_WX1860AL_W:\n+\tcase NGBE_DEV_ID_EM_WX1860A2:\n+\tcase NGBE_DEV_ID_EM_WX1860A2S:\n+\tcase NGBE_DEV_ID_EM_WX1860A4:\n+\tcase NGBE_DEV_ID_EM_WX1860A4S:\n+\tcase NGBE_DEV_ID_EM_WX1860AL2:\n+\tcase NGBE_DEV_ID_EM_WX1860AL2S:\n+\tcase NGBE_DEV_ID_EM_WX1860AL4:\n+\tcase NGBE_DEV_ID_EM_WX1860AL4S:\n+\tcase NGBE_DEV_ID_EM_WX1860NCSI:\n+\tcase NGBE_DEV_ID_EM_WX1860A1:\n+\tcase NGBE_DEV_ID_EM_WX1860A1L:\n+\t\thw->device_id = NGBE_DEV_ID_EM;\n+\t\tif (oem == NGBE_LY_M88E1512_SFP ||\n+\t\t\t\tinternal == NGBE_INTERNAL_SFP)\n+\t\t\thw->sub_device_id = NGBE_SUB_DEV_ID_EM_MVL_SFP;\n+\t\telse if (hw->sub_system_id == NGBE_SUB_DEV_ID_EM_M88E1512_RJ45)\n+\t\t\thw->sub_device_id = NGBE_SUB_DEV_ID_EM_MVL_RGMII;\n+\t\telse if (oem == NGBE_YT8521S_SFP ||\n+\t\t\t\toem == NGBE_LY_YT8521S_SFP)\n+\t\t\thw->sub_device_id = NGBE_SUB_DEV_ID_EM_YT8521S_SFP;\n+\t\telse\n+\t\t\thw->sub_device_id = NGBE_SUB_DEV_ID_EM_RTL_SGMII;\n+\t\tbreak;\n+\tdefault:\n+\t\tbreak;\n+\t}\n+}\n+\n+/**\n+ * ngbe_init_ops_pf - Inits func ptrs and MAC type\n+ * @hw: pointer to hardware structure\n+ *\n+ * Initialize the function pointers and assign the MAC type.\n+ * Does not touch the hardware.\n+ **/\n+s32 ngbe_init_ops_pf(struct ngbe_hw *hw)\n+{\n+\tstruct ngbe_bus_info *bus = &hw->bus;\n+\n+\tDEBUGFUNC(\"ngbe_init_ops_pf\");\n+\n+\t/* BUS */\n+\tbus->set_lan_id = ngbe_set_lan_id_multi_port;\n+\n+\treturn 0;\n+}\n+\n+/**\n+ * ngbe_init_shared_code - Initialize the shared code\n+ * @hw: pointer to hardware structure\n+ *\n+ * This will assign function pointers and assign the MAC type and PHY code.\n+ * Does not touch the hardware. This function must be called prior to any\n+ * other function in the shared code. The ngbe_hw structure should be\n+ * memset to 0 prior to calling this function. The following fields in\n+ * hw structure should be filled in prior to calling this function:\n+ * hw_addr, back, device_id, vendor_id, subsystem_device_id\n+ **/\n+s32 ngbe_init_shared_code(struct ngbe_hw *hw)\n+{\n+\ts32 status = 0;\n+\n+\tDEBUGFUNC(\"ngbe_init_shared_code\");\n+\n+\t/*\n+\t * Set the mac type\n+\t */\n+\tngbe_set_mac_type(hw);\n+\n+\tngbe_init_ops_dummy(hw);\n+\tswitch (hw->mac.type) {\n+\tcase ngbe_mac_em:\n+\t\tngbe_init_ops_pf(hw);\n+\t\tbreak;\n+\tdefault:\n+\t\tstatus = NGBE_ERR_DEVICE_NOT_SUPPORTED;\n+\t\tbreak;\n+\t}\n+\n+\thw->bus.set_lan_id(hw);\n+\n+\treturn status;\n+}\n+\ndiff --git a/drivers/net/ngbe/base/ngbe_hw.h b/drivers/net/ngbe/base/ngbe_hw.h\nnew file mode 100644\nindex 0000000000..7d5de49248\n--- /dev/null\n+++ b/drivers/net/ngbe/base/ngbe_hw.h\n@@ -0,0 +1,18 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2018-2020 Beijing WangXun Technology Co., Ltd.\n+ * Copyright(c) 2010-2017 Intel Corporation\n+ */\n+\n+#ifndef _NGBE_HW_H_\n+#define _NGBE_HW_H_\n+\n+#include \"ngbe_type.h\"\n+\n+void ngbe_set_lan_id_multi_port(struct ngbe_hw *hw);\n+\n+s32 ngbe_init_shared_code(struct ngbe_hw *hw);\n+s32 ngbe_set_mac_type(struct ngbe_hw *hw);\n+s32 ngbe_init_ops_pf(struct ngbe_hw *hw);\n+void ngbe_map_device_id(struct ngbe_hw *hw);\n+\n+#endif /* _NGBE_HW_H_ */\ndiff --git a/drivers/net/ngbe/base/ngbe_osdep.h b/drivers/net/ngbe/base/ngbe_osdep.h\nnew file mode 100644\nindex 0000000000..215a953081\n--- /dev/null\n+++ b/drivers/net/ngbe/base/ngbe_osdep.h\n@@ -0,0 +1,183 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2018-2020 Beijing WangXun Technology Co., Ltd.\n+ * Copyright(c) 2010-2017 Intel Corporation\n+ */\n+\n+#ifndef _NGBE_OS_H_\n+#define _NGBE_OS_H_\n+\n+#include <string.h>\n+#include <stdint.h>\n+#include <stdio.h>\n+#include <stdarg.h>\n+#include <rte_version.h>\n+#include <rte_common.h>\n+#include <rte_debug.h>\n+#include <rte_cycles.h>\n+#include <rte_log.h>\n+#include <rte_byteorder.h>\n+#include <rte_config.h>\n+#include <rte_io.h>\n+#include <rte_ether.h>\n+\n+#include \"../ngbe_logs.h\"\n+\n+#define RTE_LIBRTE_NGBE_TM DCPV(1, 0)\n+#define TMZ_PADDR(mz) ((mz)->iova)\n+#define TMZ_VADDR(mz) ((mz)->addr)\n+#define TDEV_NAME(eth_dev) ((eth_dev)->device->name)\n+\n+#define ASSERT(x) do {\t\t\t\\\n+\tif (!(x))\t\t\t\\\n+\t\tPMD_DRV_LOG(ERR, \"NGBE: %d\", x);\t\\\n+} while (0)\n+\n+#define ngbe_unused __rte_unused\n+\n+#define usec_delay(x) rte_delay_us(x)\n+#define msec_delay(x) rte_delay_ms(x)\n+#define usleep(x) rte_delay_us(x)\n+#define msleep(x) rte_delay_ms(x)\n+\n+#define FALSE 0\n+#define TRUE 1\n+\n+#ifndef false\n+#define false 0\n+#endif\n+#ifndef true\n+#define true 1\n+#endif\n+#define min(a, b)\tRTE_MIN(a, b)\n+#define max(a, b)\tRTE_MAX(a, b)\n+\n+/* Bunch of defines for shared code bogosity */\n+\n+static inline void UNREFERENCED(const char *a __rte_unused, ...) {}\n+#define UNREFERENCED_PARAMETER(args...) UNREFERENCED(\"\", ##args)\n+\n+#define STATIC static\n+\n+typedef uint8_t\t\tu8;\n+typedef int8_t\t\ts8;\n+typedef uint16_t\tu16;\n+typedef int16_t\t\ts16;\n+typedef uint32_t\tu32;\n+typedef int32_t\t\ts32;\n+typedef uint64_t\tu64;\n+typedef int64_t\t\ts64;\n+\n+/* Little Endian defines */\n+#ifndef __le16\n+#define __le16 u16\n+#define __le32 u32\n+#define __le64 u64\n+#endif\n+#ifndef __be16\n+#define __be16 u16\n+#define __be32 u32\n+#define __be64 u64\n+#endif\n+\n+/* Bit shift and mask */\n+#define BIT_MASK4 (0x0000000FU)\n+#define BIT_MASK8 (0x000000FFU)\n+#define BIT_MASK16 (0x0000FFFFU)\n+#define BIT_MASK32 (0xFFFFFFFFU)\n+#define BIT_MASK64 (0xFFFFFFFFFFFFFFFFUL)\n+\n+#ifndef cpu_to_le32\n+#define cpu_to_le16(v) rte_cpu_to_le_16((u16)(v))\n+#define cpu_to_le32(v) rte_cpu_to_le_32((u32)(v))\n+#define cpu_to_le64(v) rte_cpu_to_le_64((u64)(v))\n+#define le_to_cpu16(v) rte_le_to_cpu_16((u16)(v))\n+#define le_to_cpu32(v) rte_le_to_cpu_32((u32)(v))\n+#define le_to_cpu64(v) rte_le_to_cpu_64((u64)(v))\n+\n+#define cpu_to_be16(v) rte_cpu_to_be_16((u16)(v))\n+#define cpu_to_be32(v) rte_cpu_to_be_32((u32)(v))\n+#define cpu_to_be64(v) rte_cpu_to_be_64((u64)(v))\n+#define be_to_cpu16(v) rte_be_to_cpu_16((u16)(v))\n+#define be_to_cpu32(v) rte_be_to_cpu_32((u32)(v))\n+#define be_to_cpu64(v) rte_be_to_cpu_64((u64)(v))\n+\n+#define le_to_be16(v) rte_bswap16((u16)(v))\n+#define le_to_be32(v) rte_bswap32((u32)(v))\n+#define le_to_be64(v) rte_bswap64((u64)(v))\n+#define be_to_le16(v) rte_bswap16((u16)(v))\n+#define be_to_le32(v) rte_bswap32((u32)(v))\n+#define be_to_le64(v) rte_bswap64((u64)(v))\n+\n+#define npu_to_le16(v) (v)\n+#define npu_to_le32(v) (v)\n+#define npu_to_le64(v) (v)\n+#define le_to_npu16(v) (v)\n+#define le_to_npu32(v) (v)\n+#define le_to_npu64(v) (v)\n+\n+#define npu_to_be16(v) le_to_be16((u16)(v))\n+#define npu_to_be32(v) le_to_be32((u32)(v))\n+#define npu_to_be64(v) le_to_be64((u64)(v))\n+#define be_to_npu16(v) be_to_le16((u16)(v))\n+#define be_to_npu32(v) be_to_le32((u32)(v))\n+#define be_to_npu64(v) be_to_le64((u64)(v))\n+#endif /* !cpu_to_le32 */\n+\n+static inline u16 REVERT_BIT_MASK16(u16 mask)\n+{\n+\tmask = ((mask & 0x5555) << 1) | ((mask & 0xAAAA) >> 1);\n+\tmask = ((mask & 0x3333) << 2) | ((mask & 0xCCCC) >> 2);\n+\tmask = ((mask & 0x0F0F) << 4) | ((mask & 0xF0F0) >> 4);\n+\treturn ((mask & 0x00FF) << 8) | ((mask & 0xFF00) >> 8);\n+}\n+\n+static inline u32 REVERT_BIT_MASK32(u32 mask)\n+{\n+\tmask = ((mask & 0x55555555) << 1) | ((mask & 0xAAAAAAAA) >> 1);\n+\tmask = ((mask & 0x33333333) << 2) | ((mask & 0xCCCCCCCC) >> 2);\n+\tmask = ((mask & 0x0F0F0F0F) << 4) | ((mask & 0xF0F0F0F0) >> 4);\n+\tmask = ((mask & 0x00FF00FF) << 8) | ((mask & 0xFF00FF00) >> 8);\n+\treturn ((mask & 0x0000FFFF) << 16) | ((mask & 0xFFFF0000) >> 16);\n+}\n+\n+static inline u64 REVERT_BIT_MASK64(u64 mask)\n+{\n+\tmask = ((mask & 0x5555555555555555) << 1) |\n+\t ((mask & 0xAAAAAAAAAAAAAAAA) >> 1);\n+\tmask = ((mask & 0x3333333333333333) << 2) |\n+\t ((mask & 0xCCCCCCCCCCCCCCCC) >> 2);\n+\tmask = ((mask & 0x0F0F0F0F0F0F0F0F) << 4) |\n+\t ((mask & 0xF0F0F0F0F0F0F0F0) >> 4);\n+\tmask = ((mask & 0x00FF00FF00FF00FF) << 8) |\n+\t ((mask & 0xFF00FF00FF00FF00) >> 8);\n+\tmask = ((mask & 0x0000FFFF0000FFFF) << 16) |\n+\t ((mask & 0xFFFF0000FFFF0000) >> 16);\n+\treturn ((mask & 0x00000000FFFFFFFF) << 32) |\n+\t ((mask & 0xFFFFFFFF00000000) >> 32);\n+}\n+\n+#define IOMEM\n+\n+#define prefetch(x) rte_prefetch0(x)\n+\n+#define ARRAY_SIZE(x) ((int32_t)RTE_DIM(x))\n+\n+#ifndef MAX_UDELAY_MS\n+#define MAX_UDELAY_MS 5\n+#endif\n+\n+#define ETH_ADDR_LEN\t6\n+#define ETH_FCS_LEN\t4\n+\n+/* Check whether address is multicast. This is little-endian specific check.*/\n+#define NGBE_IS_MULTICAST(address) \\\n+\t\trte_is_multicast_ether_addr(address)\n+\n+/* Check whether an address is broadcast. */\n+#define NGBE_IS_BROADCAST(address) \\\n+\t\trte_is_broadcast_ether_addr(address)\n+\n+#define ETH_P_8021Q 0x8100\n+#define ETH_P_8021AD 0x88A8\n+\n+#endif /* _NGBE_OS_H_ */\ndiff --git a/drivers/net/ngbe/base/ngbe_type.h b/drivers/net/ngbe/base/ngbe_type.h\nnew file mode 100644\nindex 0000000000..d172f2702f\n--- /dev/null\n+++ b/drivers/net/ngbe/base/ngbe_type.h\n@@ -0,0 +1,78 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2018-2020 Beijing WangXun Technology Co., Ltd.\n+ * Copyright(c) 2010-2017 Intel Corporation\n+ */\n+\n+#ifndef _NGBE_TYPE_H_\n+#define _NGBE_TYPE_H_\n+\n+#include \"ngbe_status.h\"\n+#include \"ngbe_osdep.h\"\n+#include \"ngbe_devids.h\"\n+\n+enum ngbe_mac_type {\n+\tngbe_mac_unknown = 0,\n+\tngbe_mac_em,\n+\tngbe_mac_em_vf,\n+\tngbe_num_macs\n+};\n+\n+enum ngbe_phy_type {\n+\tngbe_phy_unknown = 0,\n+\tngbe_phy_none,\n+\tngbe_phy_rtl,\n+\tngbe_phy_mvl,\n+\tngbe_phy_mvl_sfi,\n+\tngbe_phy_yt8521s,\n+\tngbe_phy_yt8521s_sfi,\n+\tngbe_phy_zte,\n+\tngbe_phy_cu_mtd,\n+};\n+\n+enum ngbe_media_type {\n+\tngbe_media_type_unknown = 0,\n+\tngbe_media_type_fiber,\n+\tngbe_media_type_fiber_qsfp,\n+\tngbe_media_type_copper,\n+\tngbe_media_type_backplane,\n+\tngbe_media_type_cx4,\n+\tngbe_media_type_virtual\n+};\n+\n+struct ngbe_hw;\n+\n+/* Bus parameters */\n+struct ngbe_bus_info {\n+\tvoid (*set_lan_id)(struct ngbe_hw *hw);\n+\n+\tu16 func;\n+\tu8 lan_id;\n+};\n+\n+struct ngbe_mac_info {\n+\tenum ngbe_mac_type type;\n+};\n+\n+struct ngbe_phy_info {\n+\tenum ngbe_media_type media_type;\n+\tenum ngbe_phy_type type;\n+};\n+\n+struct ngbe_hw {\n+\tvoid IOMEM *hw_addr;\n+\tvoid *back;\n+\tstruct ngbe_mac_info mac;\n+\tstruct ngbe_phy_info phy;\n+\tstruct ngbe_bus_info bus;\n+\tu16 device_id;\n+\tu16 vendor_id;\n+\tu16 sub_device_id;\n+\tu16 sub_system_id;\n+\n+\tbool is_pf;\n+};\n+\n+#include \"ngbe_regs.h\"\n+#include \"ngbe_dummy.h\"\n+\n+#endif /* _NGBE_TYPE_H_ */\ndiff --git a/drivers/net/ngbe/ngbe_ethdev.c b/drivers/net/ngbe/ngbe_ethdev.c\nindex e05766752a..a355c7dc29 100644\n--- a/drivers/net/ngbe/ngbe_ethdev.c\n+++ b/drivers/net/ngbe/ngbe_ethdev.c\n@@ -8,9 +8,11 @@\n #include <ethdev_pci.h>\n \n #include \"ngbe_logs.h\"\n-#include <base/ngbe_devids.h>\n+#include \"base/ngbe.h\"\n #include \"ngbe_ethdev.h\"\n \n+static int ngbe_dev_close(struct rte_eth_dev *dev);\n+\n /*\n * The set of PCI devices this driver supports\n */\n@@ -34,6 +36,8 @@ static int\n eth_ngbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)\n {\n \tstruct rte_pci_device *pci_dev = RTE_ETH_DEV_TO_PCI(eth_dev);\n+\tstruct ngbe_hw *hw = ngbe_dev_hw(eth_dev);\n+\tint err;\n \n \tPMD_INIT_FUNC_TRACE();\n \n@@ -42,7 +46,21 @@ eth_ngbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)\n \n \trte_eth_copy_pci_info(eth_dev, pci_dev);\n \n-\treturn -EINVAL;\n+\t/* Vendor and Device ID need to be set before init of shared code */\n+\thw->device_id = pci_dev->id.device_id;\n+\thw->vendor_id = pci_dev->id.vendor_id;\n+\thw->sub_system_id = pci_dev->id.subsystem_device_id;\n+\tngbe_map_device_id(hw);\n+\thw->hw_addr = (void *)pci_dev->mem_resource[0].addr;\n+\n+\t/* Initialize the shared code (base driver) */\n+\terr = ngbe_init_shared_code(hw);\n+\tif (err != 0) {\n+\t\tPMD_INIT_LOG(ERR, \"Shared code init failed: %d\", err);\n+\t\treturn -EIO;\n+\t}\n+\n+\treturn 0;\n }\n \n static int\n@@ -53,9 +71,9 @@ eth_ngbe_dev_uninit(struct rte_eth_dev *eth_dev)\n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n-\tRTE_SET_USED(eth_dev);\n+\tngbe_dev_close(eth_dev);\n \n-\treturn -EINVAL;\n+\treturn 0;\n }\n \n static int\n@@ -86,6 +104,19 @@ static struct rte_pci_driver rte_ngbe_pmd = {\n \t.remove = eth_ngbe_pci_remove,\n };\n \n+/*\n+ * Reset and stop device.\n+ */\n+static int\n+ngbe_dev_close(struct rte_eth_dev *dev)\n+{\n+\tPMD_INIT_FUNC_TRACE();\n+\n+\tRTE_SET_USED(dev);\n+\n+\treturn -EINVAL;\n+}\n+\n RTE_PMD_REGISTER_PCI(net_ngbe, rte_ngbe_pmd);\n RTE_PMD_REGISTER_PCI_TABLE(net_ngbe, pci_id_ngbe_map);\n RTE_PMD_REGISTER_KMOD_DEP(net_ngbe, \"* igb_uio | uio_pci_generic | vfio-pci\");\ndiff --git a/drivers/net/ngbe/ngbe_ethdev.h b/drivers/net/ngbe/ngbe_ethdev.h\nindex 38f55f7fb1..d4d02c6bd8 100644\n--- a/drivers/net/ngbe/ngbe_ethdev.h\n+++ b/drivers/net/ngbe/ngbe_ethdev.h\n@@ -10,7 +10,24 @@\n * Structure to store private data for each driver instance (for each port).\n */\n struct ngbe_adapter {\n-\tvoid *back;\n+\tstruct ngbe_hw hw;\n };\n \n+static inline struct ngbe_adapter *\n+ngbe_dev_adapter(struct rte_eth_dev *dev)\n+{\n+\tstruct ngbe_adapter *ad = dev->data->dev_private;\n+\n+\treturn ad;\n+}\n+\n+static inline struct ngbe_hw *\n+ngbe_dev_hw(struct rte_eth_dev *dev)\n+{\n+\tstruct ngbe_adapter *ad = ngbe_dev_adapter(dev);\n+\tstruct ngbe_hw *hw = &ad->hw;\n+\n+\treturn hw;\n+}\n+\n #endif /* _NGBE_ETHDEV_H_ */\n", "prefixes": [ "v6", "05/19" ] }{ "id": 94330, "url": "