get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/89541/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 89541,
    "url": "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"
    ]
}