Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/89541/?format=api
https://patches.dpdk.org/api/patches/89541/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/patch/20210319072628.10000-5-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": "<20210319072628.10000-5-jiawenwu@trustnetic.com>", "list_archive_url": "https://inbox.dpdk.org/dev/20210319072628.10000-5-jiawenwu@trustnetic.com", "date": "2021-03-19T07:26:26", "name": "[v2,4/6] net/ngbe: add device init and uninit", "commit_ref": null, "pull_url": null, "state": "superseded", "archived": true, "hash": "2bb3b8a986db3fde7d1297dcda0932a51faecab5", "submitter": { "id": 1932, "url": "https://patches.dpdk.org/api/people/1932/?format=api", "name": "Jiawen Wu", "email": "jiawenwu@trustnetic.com" }, "delegate": { "id": 319, "url": "https://patches.dpdk.org/api/users/319/?format=api", "username": "fyigit", "first_name": "Ferruh", "last_name": "Yigit", "email": "ferruh.yigit@amd.com" }, "mbox": "https://patches.dpdk.org/project/dpdk/patch/20210319072628.10000-5-jiawenwu@trustnetic.com/mbox/", "series": [ { "id": 15788, "url": "https://patches.dpdk.org/api/series/15788/?format=api", "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=15788", "date": "2021-03-19T07:26:22", "name": "net: ngbe PMD", "version": 2, "mbox": "https://patches.dpdk.org/series/15788/mbox/" } ], "comments": "https://patches.dpdk.org/api/patches/89541/comments/", "check": "warning", "checks": "https://patches.dpdk.org/api/patches/89541/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 18CD8A0562;\n\tFri, 19 Mar 2021 08:26:54 +0100 (CET)", "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 708C8140EE1;\n\tFri, 19 Mar 2021 08:26:44 +0100 (CET)", "from smtpbgeu1.qq.com (smtpbgeu1.qq.com [52.59.177.22])\n by mails.dpdk.org (Postfix) with ESMTP id A9D52140ECF\n for <dev@dpdk.org>; Fri, 19 Mar 2021 08:26:40 +0100 (CET)", "from jiawenwu.trustnetic.com (unknown [183.129.236.74])\n by esmtp6.qq.com (ESMTP) with\n id ; Fri, 19 Mar 2021 15:26:36 +0800 (CST)" ], "X-QQ-mid": "bizesmtp29t1616138796tw8uvnac", "X-QQ-SSF": "01400000002000C0E000B00A0000000", "X-QQ-FEAT": "D8iNkgpwlC9Y/TQxLbK0Jd3eivc9StyH9LrKKNe7xQHehC8T/ovAy/SAAY8//\n Z+hz56Bx7S9kmnvZdFBKScSWnZnJqkrG49Ufq+ZtZfTFMTvjDBjHrYZnXOBeF/nubDhchlA\n rEzDiniTCQdTOaP0h37/g98R6meEyE5DB5ReShU8r79Dn3aqzkOqnCV0bifElrEancTmMjI\n lUNakrShS90cG6MyTjGEnxG+UY8RFBSg7mXjdUYbItErd0xZvBXZe2rRzkzIGFVr3cSfIys\n 6x+zpB7tFn22Lqr8YWyMUht4LhDrWr+GH2obAv9A3VN7DP22+wrNXAxmqSjfGLKq1rlmM7g\n /kXF0jyYygWgAt2wbThkiQ6WzmTyq2hYViY8BR4", "X-QQ-GoodBg": "2", "From": "Jiawen Wu <jiawenwu@trustnetic.com>", "To": "dev@dpdk.org", "Cc": "Jiawen Wu <jiawenwu@trustnetic.com>", "Date": "Fri, 19 Mar 2021 15:26:26 +0800", "Message-Id": "<20210319072628.10000-5-jiawenwu@trustnetic.com>", "X-Mailer": "git-send-email 2.21.0.windows.1", "In-Reply-To": "<20210319072628.10000-1-jiawenwu@trustnetic.com>", "References": "<20210319072628.10000-1-jiawenwu@trustnetic.com>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-QQ-SENDSIZE": "520", "Feedback-ID": "bizesmtp:trustnetic.com:qybgforeign:qybgforeign7", "X-QQ-Bgrelay": "1", "Subject": "[dpdk-dev] [PATCH v2 4/6] net/ngbe: add device init and uninit", "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.\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_hw.c | 59 ++++++++++\n drivers/net/ngbe/base/ngbe_hw.h | 12 ++\n drivers/net/ngbe/base/ngbe_osdep.h | 172 +++++++++++++++++++++++++++++\n drivers/net/ngbe/base/ngbe_type.h | 27 +++++\n drivers/net/ngbe/ngbe_ethdev.c | 36 +++++-\n drivers/net/ngbe/ngbe_ethdev.h | 17 +++\n 8 files changed, 335 insertions(+), 3 deletions(-)\n create mode 100644 drivers/net/ngbe/base/ngbe.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 b4fc6a53b..d3616148f 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\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 000000000..cdd435a0a\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\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_hw.c b/drivers/net/ngbe/base/ngbe_hw.c\nnew file mode 100644\nindex 000000000..2a74405e3\n--- /dev/null\n+++ b/drivers/net/ngbe/base/ngbe_hw.c\n@@ -0,0 +1,59 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2018-2020\n+ */\n+\n+#include \"ngbe_hw.h\"\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+\ndiff --git a/drivers/net/ngbe/base/ngbe_hw.h b/drivers/net/ngbe/base/ngbe_hw.h\nnew file mode 100644\nindex 000000000..0dba04a54\n--- /dev/null\n+++ b/drivers/net/ngbe/base/ngbe_hw.h\n@@ -0,0 +1,12 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2018-2020\n+ */\n+\n+#ifndef _NGBE_HW_H_\n+#define _NGBE_HW_H_\n+\n+#include \"ngbe_type.h\"\n+\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 000000000..64afed2cc\n--- /dev/null\n+++ b/drivers/net/ngbe/base/ngbe_osdep.h\n@@ -0,0 +1,172 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2018-2020\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+\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 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+#define false 0\n+#define true 1\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\t(bool)(((u8 *)(address))[0] & ((u8)0x01))\n+\n+/* Check whether an address is broadcast. */\n+#define NGBE_IS_BROADCAST(address) \\\n+\t\t({typeof(address)addr = (address); \\\n+\t\t(((u8 *)(addr))[0] == ((u8)0xff)) && \\\n+\t\t(((u8 *)(addr))[1] == ((u8)0xff)); })\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 000000000..f143ecfd0\n--- /dev/null\n+++ b/drivers/net/ngbe/base/ngbe_type.h\n@@ -0,0 +1,27 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2018-2020\n+ */\n+\n+#ifndef _NGBE_TYPE_H_\n+#define _NGBE_TYPE_H_\n+\n+#define NGBE_ALIGN\t\t128 /* as intel did */\n+\n+#include \"ngbe_osdep.h\"\n+#include \"ngbe_devids.h\"\n+\n+struct ngbe_hw {\n+\tvoid IOMEM *hw_addr;\n+\tu16 device_id;\n+\tu16 vendor_id;\n+\tu16 sub_device_id;\n+\tu16 sub_system_id;\n+\tbool allow_unsupported_sfp;\n+\n+\tuint64_t isb_dma;\n+\tvoid IOMEM *isb_mem;\n+\n+\tbool is_pf;\n+};\n+\n+#endif /* _NGBE_TYPE_H_ */\ndiff --git a/drivers/net/ngbe/ngbe_ethdev.c b/drivers/net/ngbe/ngbe_ethdev.c\nindex d938fd68a..8c1accbbc 100644\n--- a/drivers/net/ngbe/ngbe_ethdev.c\n+++ b/drivers/net/ngbe/ngbe_ethdev.c\n@@ -5,9 +5,11 @@\n #include <rte_common.h>\n #include <ethdev_pci.h>\n \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@@ -31,12 +33,31 @@ 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+\tconst struct rte_memzone *mz;\n \n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\n \n \trte_eth_copy_pci_info(eth_dev, pci_dev);\n \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+\thw->allow_unsupported_sfp = 1;\n+\n+\t/* Reserve memory for interrupt status block */\n+\tmz = rte_eth_dma_zone_reserve(eth_dev, \"ngbe_driver\", -1,\n+\t\t16, NGBE_ALIGN, SOCKET_ID_ANY);\n+\tif (mz == NULL)\n+\t\treturn -ENOMEM;\n+\n+\thw->isb_dma = TMZ_PADDR(mz);\n+\thw->isb_mem = TMZ_VADDR(mz);\n+\n \treturn 0;\n }\n \n@@ -46,7 +67,7 @@ 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 0;\n }\n@@ -102,6 +123,17 @@ 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+\tRTE_SET_USED(dev);\n+\n+\treturn 0;\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 20f37e9d4..613ba0eca 100644\n--- a/drivers/net/ngbe/ngbe_ethdev.h\n+++ b/drivers/net/ngbe/ngbe_ethdev.h\n@@ -2,3 +2,20 @@\n * Copyright(c) 2018-2020\n */\n \n+#ifndef _NGBE_ETHDEV_H_\n+#define _NGBE_ETHDEV_H_\n+\n+/*\n+ * Structure to store private data for each driver instance (for each port).\n+ */\n+struct ngbe_adapter {\n+\tstruct ngbe_hw hw;\n+};\n+\n+#define NGBE_DEV_ADAPTER(dev) \\\n+\t((struct ngbe_adapter *)(dev)->data->dev_private)\n+\n+#define NGBE_DEV_HW(dev) \\\n+\t(&((struct ngbe_adapter *)(dev)->data->dev_private)->hw)\n+\n+#endif /* _NGBE_ETHDEV_H_ */\n", "prefixes": [ "v2", "4/6" ] }{ "id": 89541, "url": "