get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 79622,
    "url": "https://patches.dpdk.org/api/patches/79622/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/20201005120910.189343-3-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": "<20201005120910.189343-3-jiawenwu@trustnetic.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20201005120910.189343-3-jiawenwu@trustnetic.com",
    "date": "2020-10-05T12:08:16",
    "name": "[v2,02/56] net/txgbe: add ethdev probe and remove",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "987ea460c2d558d01e7506ce3b503cd8989e360f",
    "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/20201005120910.189343-3-jiawenwu@trustnetic.com/mbox/",
    "series": [
        {
            "id": 12690,
            "url": "https://patches.dpdk.org/api/series/12690/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=12690",
            "date": "2020-10-05T12:08:14",
            "name": "net: txgbe PMD",
            "version": 2,
            "mbox": "https://patches.dpdk.org/series/12690/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/79622/comments/",
    "check": "warning",
    "checks": "https://patches.dpdk.org/api/patches/79622/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 dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id CE965A04B1;\n\tMon,  5 Oct 2020 14:10:44 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 149821B9EB;\n\tMon,  5 Oct 2020 14:08:55 +0200 (CEST)",
            "from smtpbg516.qq.com (smtpbg516.qq.com [203.205.250.54])\n by dpdk.org (Postfix) with ESMTP id C72781B755\n for <dev@dpdk.org>; Mon,  5 Oct 2020 14:08:46 +0200 (CEST)",
            "from localhost.localdomain.com (unknown [183.129.236.74])\n by esmtp6.qq.com (ESMTP) with\n id ; Mon, 05 Oct 2020 20:08:36 +0800 (CST)"
        ],
        "X-QQ-mid": "bizesmtp9t1601899718tbafyegq8",
        "X-QQ-SSF": "01400000002000C0C000B00A0000000",
        "X-QQ-FEAT": "vZzaA5K0aJ6VSl8bNq9/V5IGJetb0YH0G73Fa3jxqGyzr3GTd8TKRC5IGioJn\n nmT9DL6MbDXjPle8gxJVzhgJrw7Veaa6K4wx0c8YjfHXOP7DkdzY1ETDCpMqJwFS4lTtoOG\n oUJ1tXBgBQH3lNXboxDD0lW4uHRscuk+k1+WB8wJi0AxeSiDwQvn/aG7t9Ca9wattd1sLDi\n CdL/6He6Ib9jOjc40y3OWhJJYFGWBMF41rV/Wc4RVXWOr2IoOyXMSj6w7ZTjAyZYR6y1o66\n tlhZfk0GfNcmLVrKf+BACYN/5V0GG5K6g/pjOWeRJ1bz73EFDKybwlpcs183Ypkuhsz0TFG\n PgjNFlgcIJGPyf21F7KsC4PHX+yGA==",
        "X-QQ-GoodBg": "2",
        "From": "Jiawen Wu <jiawenwu@trustnetic.com>",
        "To": "dev@dpdk.org",
        "Cc": "jiawenwu <jiawenwu@trustnetic.com>",
        "Date": "Mon,  5 Oct 2020 20:08:16 +0800",
        "Message-Id": "<20201005120910.189343-3-jiawenwu@trustnetic.com>",
        "X-Mailer": "git-send-email 2.18.4",
        "In-Reply-To": "<20201005120910.189343-1-jiawenwu@trustnetic.com>",
        "References": "<20201005120910.189343-1-jiawenwu@trustnetic.com>",
        "X-QQ-SENDSIZE": "520",
        "Feedback-ID": "bizesmtp:trustnetic.com:qybgforeign:qybgforeign5",
        "X-QQ-Bgrelay": "1",
        "Subject": "[dpdk-dev] [PATCH v2 02/56] net/txgbe: add ethdev probe and remove",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "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": "From: jiawenwu <jiawenwu@trustnetic.com>\n\nAdd basic PCIe ethdev probe and remove.\n\nSigned-off-by: jiawenwu <jiawenwu@trustnetic.com>\n---\n drivers/net/txgbe/base/meson.build    |  18 +++++\n drivers/net/txgbe/base/txgbe.h        |  10 +++\n drivers/net/txgbe/base/txgbe_devids.h |  40 ++++++++++\n drivers/net/txgbe/base/txgbe_type.h   |  14 ++++\n drivers/net/txgbe/meson.build         |   4 +\n drivers/net/txgbe/txgbe_ethdev.c      | 102 ++++++++++++++++++++++++++\n drivers/net/txgbe/txgbe_ethdev.h      |  13 ++++\n drivers/net/txgbe/txgbe_logs.h        |  98 +++++++++++++++++++++++++\n 8 files changed, 299 insertions(+)\n create mode 100644 drivers/net/txgbe/base/meson.build\n create mode 100644 drivers/net/txgbe/base/txgbe.h\n create mode 100644 drivers/net/txgbe/base/txgbe_devids.h\n create mode 100644 drivers/net/txgbe/base/txgbe_type.h\n create mode 100644 drivers/net/txgbe/txgbe_logs.h",
    "diff": "diff --git a/drivers/net/txgbe/base/meson.build b/drivers/net/txgbe/base/meson.build\nnew file mode 100644\nindex 000000000..a0f65b819\n--- /dev/null\n+++ b/drivers/net/txgbe/base/meson.build\n@@ -0,0 +1,18 @@\n+# SPDX-License-Identifier: BSD-3-Clause\n+# Copyright(c) 2015-2020\n+\n+sources = []\n+\n+error_cflags = []\n+\n+c_args = cflags\n+foreach flag: error_cflags\n+\tif cc.has_argument(flag)\n+\t\tc_args += flag\n+\tendif\n+endforeach\n+\n+base_lib = static_library('txgbe_base', sources,\n+\tdependencies: static_rte_eal,\n+\tc_args: c_args)\n+base_objs = base_lib.extract_all_objects()\ndiff --git a/drivers/net/txgbe/base/txgbe.h b/drivers/net/txgbe/base/txgbe.h\nnew file mode 100644\nindex 000000000..9aee9738a\n--- /dev/null\n+++ b/drivers/net/txgbe/base/txgbe.h\n@@ -0,0 +1,10 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2015-2020\n+ */\n+\n+#ifndef _TXGBE_H_\n+#define _TXGBE_H_\n+\n+#include \"txgbe_type.h\"\n+\n+#endif /* _TXGBE_H_ */\ndiff --git a/drivers/net/txgbe/base/txgbe_devids.h b/drivers/net/txgbe/base/txgbe_devids.h\nnew file mode 100644\nindex 000000000..744f2f3b5\n--- /dev/null\n+++ b/drivers/net/txgbe/base/txgbe_devids.h\n@@ -0,0 +1,40 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2015-2020\n+ */\n+\n+#ifndef _TXGBE_DEVIDS_H_\n+#define _TXGBE_DEVIDS_H_\n+\n+/*\n+ * Vendor ID\n+ */\n+#ifndef PCI_VENDOR_ID_WANGXUN\n+#define PCI_VENDOR_ID_WANGXUN                   0x8088\n+#endif\n+\n+/*\n+ * Device IDs\n+ */\n+#define TXGBE_DEV_ID_RAPTOR_VF                  0x1000\n+#define TXGBE_DEV_ID_RAPTOR_SFP                 0x1001 /* fiber */\n+#define TXGBE_DEV_ID_RAPTOR_KR_KX_KX4           0x1002 /* backplane */\n+#define TXGBE_DEV_ID_RAPTOR_XAUI                0x1003 /* copper */\n+#define TXGBE_DEV_ID_RAPTOR_SGMII               0x1004 /* copper */\n+#define TXGBE_DEV_ID_RAPTOR_QSFP                0x1011 /* fiber */\n+#define TXGBE_DEV_ID_RAPTOR_VF_HV               0x2000\n+#define TXGBE_DEV_ID_RAPTOR_T3_LOM              0x2001\n+\n+#define TXGBE_DEV_ID_WX1820_SFP                 0x2001\n+\n+/*\n+ * Subdevice IDs\n+ */\n+#define TXGBE_SUBDEV_ID_RAPTOR\t\t\t0x0000\n+#define TXGBE_SUBDEV_ID_MPW\t\t\t0x0001\n+\n+#define TXGBE_ETHERTYPE_FLOW_CTRL   0x8808\n+#define TXGBE_ETHERTYPE_IEEE_VLAN   0x8100  /* 802.1q protocol */\n+\n+#define TXGBE_VXLAN_PORT 4789\n+\n+#endif /* _TXGBE_DEVIDS_H_ */\ndiff --git a/drivers/net/txgbe/base/txgbe_type.h b/drivers/net/txgbe/base/txgbe_type.h\nnew file mode 100644\nindex 000000000..8ed324a1b\n--- /dev/null\n+++ b/drivers/net/txgbe/base/txgbe_type.h\n@@ -0,0 +1,14 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2015-2020\n+ */\n+\n+#ifndef _TXGBE_TYPE_H_\n+#define _TXGBE_TYPE_H_\n+\n+#include \"txgbe_devids.h\"\n+\n+struct txgbe_hw {\n+\tvoid *back;\n+};\n+\n+#endif /* _TXGBE_TYPE_H_ */\ndiff --git a/drivers/net/txgbe/meson.build b/drivers/net/txgbe/meson.build\nindex d5b19af31..295f39296 100644\n--- a/drivers/net/txgbe/meson.build\n+++ b/drivers/net/txgbe/meson.build\n@@ -1,7 +1,11 @@\n # SPDX-License-Identifier: BSD-3-Clause\n # Copyright(c) 2015-2020\n \n+subdir('base')\n+objs = [base_objs]\n+\n sources = files(\n \t'txgbe_ethdev.c',\n )\n \n+includes += include_directories('base')\ndiff --git a/drivers/net/txgbe/txgbe_ethdev.c b/drivers/net/txgbe/txgbe_ethdev.c\nindex cb758762d..7679977e8 100644\n--- a/drivers/net/txgbe/txgbe_ethdev.c\n+++ b/drivers/net/txgbe/txgbe_ethdev.c\n@@ -2,3 +2,105 @@\n  * Copyright(c) 2015-2020\n  */\n \n+#include <rte_common.h>\n+#include <rte_ethdev_pci.h>\n+#include <rte_pci.h>\n+\n+#include \"txgbe_logs.h\"\n+#include \"base/txgbe.h\"\n+#include \"txgbe_ethdev.h\"\n+\n+/*\n+ * The set of PCI devices this driver supports\n+ */\n+static const struct rte_pci_id pci_id_txgbe_map[] = {\n+\t{ RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, TXGBE_DEV_ID_RAPTOR_SFP) },\n+\t{ RTE_PCI_DEVICE(PCI_VENDOR_ID_WANGXUN, TXGBE_DEV_ID_WX1820_SFP) },\n+\t{ .vendor_id = 0, /* sentinel */ },\n+};\n+\n+static int\n+eth_txgbe_dev_init(struct rte_eth_dev *eth_dev, void *init_params __rte_unused)\n+{\n+\n+\tRTE_SET_USED(eth_dev);\n+\n+\treturn 0;\n+}\n+\n+static int\n+eth_txgbe_dev_uninit(struct rte_eth_dev *eth_dev)\n+{\n+\n+\tRTE_SET_USED(eth_dev);\n+\n+\treturn 0;\n+}\n+\n+static int\n+eth_txgbe_pci_probe(struct rte_pci_driver *pci_drv __rte_unused,\n+\t\tstruct rte_pci_device *pci_dev)\n+{\n+\tstruct rte_eth_dev *pf_ethdev;\n+\tstruct rte_eth_devargs eth_da;\n+\tint retval;\n+\n+\tif (pci_dev->device.devargs) {\n+\t\tretval = rte_eth_devargs_parse(pci_dev->device.devargs->args,\n+\t\t\t\t&eth_da);\n+\t\tif (retval)\n+\t\t\treturn retval;\n+\t} else\n+\t\tmemset(&eth_da, 0, sizeof(eth_da));\n+\n+\tretval = rte_eth_dev_create(&pci_dev->device, pci_dev->device.name,\n+\t\t\tsizeof(struct txgbe_adapter),\n+\t\t\teth_dev_pci_specific_init, pci_dev,\n+\t\t\teth_txgbe_dev_init, NULL);\n+\n+\tif (retval || eth_da.nb_representor_ports < 1)\n+\t\treturn retval;\n+\n+\tpf_ethdev = rte_eth_dev_allocated(pci_dev->device.name);\n+\tif (pf_ethdev == NULL)\n+\t\treturn -ENODEV;\n+\n+\treturn 0;\n+}\n+\n+static int eth_txgbe_pci_remove(struct rte_pci_device *pci_dev)\n+{\n+\tstruct rte_eth_dev *ethdev;\n+\n+\tethdev = rte_eth_dev_allocated(pci_dev->device.name);\n+\tif (!ethdev)\n+\t\treturn -ENODEV;\n+\n+\treturn rte_eth_dev_destroy(ethdev, eth_txgbe_dev_uninit);\n+}\n+\n+static struct rte_pci_driver rte_txgbe_pmd = {\n+\t.id_table = pci_id_txgbe_map,\n+\t.drv_flags = RTE_PCI_DRV_NEED_MAPPING |\n+\t\t     RTE_PCI_DRV_INTR_LSC,\n+\t.probe = eth_txgbe_pci_probe,\n+\t.remove = eth_txgbe_pci_remove,\n+};\n+\n+RTE_PMD_REGISTER_PCI(net_txgbe, rte_txgbe_pmd);\n+RTE_PMD_REGISTER_PCI_TABLE(net_txgbe, pci_id_txgbe_map);\n+RTE_PMD_REGISTER_KMOD_DEP(net_txgbe, \"* igb_uio | uio_pci_generic | vfio-pci\");\n+\n+RTE_LOG_REGISTER(txgbe_logtype_init, pmd.net.txgbe.init, NOTICE);\n+RTE_LOG_REGISTER(txgbe_logtype_driver, pmd.net.txgbe.driver, NOTICE);\n+\n+#ifdef RTE_LIBRTE_TXGBE_DEBUG_RX\n+\tRTE_LOG_REGISTER(txgbe_logtype_rx, pmd.net.txgbe.rx, DEBUG);\n+#endif\n+#ifdef RTE_LIBRTE_TXGBE_DEBUG_TX\n+\tRTE_LOG_REGISTER(txgbe_logtype_tx, pmd.net.txgbe.tx, DEBUG);\n+#endif\n+\n+#ifdef RTE_LIBRTE_TXGBE_DEBUG_TX_FREE\n+\tRTE_LOG_REGISTER(txgbe_logtype_tx_free, pmd.net.txgbe.tx_free, DEBUG);\n+#endif\ndiff --git a/drivers/net/txgbe/txgbe_ethdev.h b/drivers/net/txgbe/txgbe_ethdev.h\nindex cb758762d..8581da457 100644\n--- a/drivers/net/txgbe/txgbe_ethdev.h\n+++ b/drivers/net/txgbe/txgbe_ethdev.h\n@@ -2,3 +2,16 @@\n  * Copyright(c) 2015-2020\n  */\n \n+#ifndef _TXGBE_ETHDEV_H_\n+#define _TXGBE_ETHDEV_H_\n+\n+#include \"base/txgbe.h\"\n+\n+/*\n+ * Structure to store private data for each driver instance (for each port).\n+ */\n+struct txgbe_adapter {\n+\tstruct txgbe_hw             hw;\n+};\n+\n+#endif /* _TXGBE_ETHDEV_H_ */\ndiff --git a/drivers/net/txgbe/txgbe_logs.h b/drivers/net/txgbe/txgbe_logs.h\nnew file mode 100644\nindex 000000000..47d5fb8b0\n--- /dev/null\n+++ b/drivers/net/txgbe/txgbe_logs.h\n@@ -0,0 +1,98 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * Copyright(c) 2015-2020\n+ */\n+\n+#ifndef _TXGBE_LOGS_H_\n+#define _TXGBE_LOGS_H_\n+\n+/*\n+ * PMD_USER_LOG: for user\n+ */\n+extern int txgbe_logtype_init;\n+#define PMD_INIT_LOG(level, fmt, args...) \\\n+\trte_log(RTE_LOG_ ## level, txgbe_logtype_init, \\\n+\t\t\"%s(): \" fmt \"\\n\", __func__, ##args)\n+\n+extern int txgbe_logtype_driver;\n+#define PMD_DRV_LOG(level, fmt, args...) \\\n+\trte_log(RTE_LOG_ ## level, txgbe_logtype_driver, \\\n+\t\t\"%s(): \" fmt \"\\n\", __func__, ##args)\n+\n+#ifdef RTE_LIBRTE_TXGBE_DEBUG_RX\n+extern int txgbe_logtype_rx;\n+#define PMD_RX_LOG(level, fmt, args...) \\\n+\trte_log(RTE_LOG_ ## level, txgbe_logtype_rx,\t\\\n+\t\t\"%s(): \" fmt \"\\n\", __func__, ##args)\n+#else\n+#define PMD_RX_LOG(level, fmt, args...) do { } while (0)\n+#endif\n+\n+#ifdef RTE_LIBRTE_TXGBE_DEBUG_TX\n+extern int txgbe_logtype_tx;\n+#define PMD_TX_LOG(level, fmt, args...) \\\n+\trte_log(RTE_LOG_ ## level, txgbe_logtype_tx,\t\\\n+\t\t\"%s(): \" fmt \"\\n\", __func__, ##args)\n+#else\n+#define PMD_TX_LOG(level, fmt, args...) do { } while (0)\n+#endif\n+\n+#ifdef RTE_LIBRTE_TXGBE_DEBUG_TX_FREE\n+extern int txgbe_logtype_tx_free;\n+#define PMD_TX_FREE_LOG(level, fmt, args...) \\\n+\trte_log(RTE_LOG_ ## level, txgbe_logtype_tx_free,\t\\\n+\t\t\"%s(): \" fmt \"\\n\", __func__, ##args)\n+#else\n+#define PMD_TX_FREE_LOG(level, fmt, args...) do { } while (0)\n+#endif\n+\n+#define TLOG_DEBUG(fmt, args...)  PMD_DRV_LOG(DEBUG, fmt, ##args)\n+\n+#define DEBUGOUT(fmt, args...)    TLOG_DEBUG(fmt, ##args)\n+#define PMD_INIT_FUNC_TRACE()     TLOG_DEBUG(\" >>\")\n+#define DEBUGFUNC(fmt)            TLOG_DEBUG(fmt)\n+\n+#define RTE_LIBRTE_TXGBE_DEBUG 1\n+\n+/*\n+ * PMD_TEMP_LOG: for tester\n+ */\n+#ifdef RTE_LIBRTE_TXGBE_DEBUG\n+#define wjmsg_line(fmt, ...) \\\n+    do { \\\n+\tRTE_LOG(CRIT, PMD, \"%s(%d): \" fmt, \\\n+\t       __FUNCTION__, __LINE__, ## __VA_ARGS__); \\\n+    } while (0)\n+#define wjmsg_stack(fmt, ...) \\\n+    do { \\\n+\twjmsg_line(fmt, ## __VA_ARGS__); \\\n+\trte_dump_stack(); \\\n+    } while (0)\n+#define wjmsg wjmsg_line\n+\n+#define wjdump(mb) { \\\n+\tint j; char buf[128] = \"\"; \\\n+\twjmsg(\"data_len=%d pkt_len=%d vlan_tci=%d \" \\\n+\t\t\"packet_type=0x%08x ol_flags=0x%016lx \" \\\n+\t\t\"hash.rss=0x%08x hash.fdir.hash=0x%04x hash.fdir.id=%d\\n\", \\\n+\t\tmb->data_len, mb->pkt_len, mb->vlan_tci, \\\n+\t\tmb->packet_type, mb->ol_flags, \\\n+\t\tmb->hash.rss, mb->hash.fdir.hash, mb->hash.fdir.id); \\\n+\tfor (j = 0; j < mb->data_len; j++) { \\\n+\t\tsprintf(buf + strlen(buf), \"%02x \", \\\n+\t\t\t((uint8_t *)(mb->buf_addr) + mb->data_off)[j]); \\\n+\t\tif (j % 8 == 7) {\\\n+\t\t\twjmsg(\"%s\\n\", buf); \\\n+\t\t\tbuf[0] = '\\0'; \\\n+\t\t} \\\n+\t} \\\n+\twjmsg(\"%s\\n\", buf); \\\n+}\n+#else /* RTE_LIBRTE_TXGBE_DEBUG */\n+#define wjmsg_line(fmt, args...) do {} while (0)\n+#define wjmsg_limit(fmt, args...) do {} while (0)\n+#define wjmsg_stack(fmt, args...) do {} while (0)\n+#define wjmsg(fmt, args...) do {} while (0)\n+#define wjdump(fmt, args...) do {} while (0)\n+#endif /* RTE_LIBRTE_TXGBE_DEBUG */\n+\n+#endif /* _TXGBE_LOGS_H_ */\n",
    "prefixes": [
        "v2",
        "02/56"
    ]
}