get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 28176,
    "url": "http://patches.dpdk.org/api/patches/28176/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20170831145436.5397-12-jerin.jacob@caviumnetworks.com/",
    "project": {
        "id": 1,
        "url": "http://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": "<20170831145436.5397-12-jerin.jacob@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20170831145436.5397-12-jerin.jacob@caviumnetworks.com",
    "date": "2017-08-31T14:54:21",
    "name": "[dpdk-dev,11/26] net/octeontx: add eth device probe and remove",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "ebb5d6a1e6e6dfa37ae83507c866f94ab59de5f0",
    "submitter": {
        "id": 305,
        "url": "http://patches.dpdk.org/api/people/305/?format=api",
        "name": "Jerin Jacob",
        "email": "jerin.jacob@caviumnetworks.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20170831145436.5397-12-jerin.jacob@caviumnetworks.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/28176/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/28176/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id E01C27D2F;\n\tThu, 31 Aug 2017 16:55:51 +0200 (CEST)",
            "from NAM02-SN1-obe.outbound.protection.outlook.com\n\t(mail-sn1nam02on0062.outbound.protection.outlook.com [104.47.36.62])\n\tby dpdk.org (Postfix) with ESMTP id 03B7E7CC6\n\tfor <dev@dpdk.org>; Thu, 31 Aug 2017 16:55:46 +0200 (CEST)",
            "from jerin.domain.name (171.76.126.71) by\n\tSN2PR07MB2526.namprd07.prod.outlook.com (2603:10b6:804:6::26) with\n\tMicrosoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.13.10;\n\tThu, 31 Aug 2017 14:55:44 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version;\n\tbh=GcgTf4DZYNgDqN/nZmiFRfCIcbpYhQGY06Rp5VbWU9M=;\n\tb=Jqj6vafGxbmM+gTNFJcFWMasLNiGaxNX8+b1rzUxBGPp6lAnqHgj3wll+sdn5wTZSutY9U78Vk16cqCJTL41p+V2wDFutmLh3zp8AvYRpMDfsIZkjjpAcY2iloc8mjbNY0fyokaWQh7/AMkyUNozc7xBFi+ppixZjnO9RVhKvcI=",
        "Authentication-Results": "spf=none (sender IP is )\n\tsmtp.mailfrom=Jerin.JacobKollanukkaran@cavium.com; ",
        "From": "Jerin Jacob <jerin.jacob@caviumnetworks.com>",
        "To": "dev@dpdk.org",
        "Cc": "ferruh.yigit@intel.com, santosh.shukla@caviumnetworks.com,\n\tJerin Jacob <jerin.jacob@caviumnetworks.com>",
        "Date": "Thu, 31 Aug 2017 20:24:21 +0530",
        "Message-Id": "<20170831145436.5397-12-jerin.jacob@caviumnetworks.com>",
        "X-Mailer": "git-send-email 2.14.1",
        "In-Reply-To": "<20170831145436.5397-1-jerin.jacob@caviumnetworks.com>",
        "References": "<20170831145436.5397-1-jerin.jacob@caviumnetworks.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[171.76.126.71]",
        "X-ClientProxiedBy": "MA1PR01CA0109.INDPRD01.PROD.OUTLOOK.COM\n\t(2603:1096:a00:1::25) To SN2PR07MB2526.namprd07.prod.outlook.com\n\t(2603:10b6:804:6::26)",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "e420dc79-ec37-4497-634e-08d4f0805c08",
        "X-Microsoft-Antispam": "UriScan:; BCL:0; PCL:0;\n\tRULEID:(300000500095)(300135000095)(300000501095)(300135300095)(300000502095)(300135100095)(22001)(2017030254152)(300000503095)(300135400095)(2017052603199)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);\n\tSRVR:SN2PR07MB2526; ",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; SN2PR07MB2526;\n\t3:75YTn4iHIdcIk6bPfolP1H16w2ss+2aMP/BMxI6LwvVeHXYmb7IZHnU8HWzFicgQbhGw2gJKdaf5GWdX5xHzwXXm9jE5lNCaVjRRkRhGArB1Kb/R1R7nWik6WqMrpctI6XBeUbWctZMsClZw/IOesq2U72WSec8zsSdHx8uEP2pM1yORXcsoHhaGeeOCcjYfbuPtkAdyotVsShRPxT4fekMR8DY5u2fD4SI9cqxOWkwv2UQNY4ZsJbXzHalE4vdV;\n\t25:UyJ+kT4NLOnAdSg86an8IjvTZRVIlvjRk0owhG0PE0UX5nL7YCCiWggXbYnkj45W4ISzqkHfu3+v1Vdp4wWcYOKKzqk8AuvT9kmfOm+7cfV6WQKY4C5MMW4+YzDBjyOm6F55eyAe6tHGSyoA0+cUFHEB/1MrM4XpvqdeEOquUxq/tFpilRGUnv8JnqyYxchkPNa4psXxCKDugzPaHeJNGuujYZNbAeTBENcewNQwrsbFGSF3A4/BCnSsDfcFyxZXf98RZIEZ3OtFhJEymmIJBnIeHUgXozuKIWzHpYMio5+SqZ3ZIOabLhC22yCSPZN6dzAin/04DKbUARlnLSpGJw==;\n\t31:yz7OEJWl5pn6DrCE3/5JQmN21Sv6IqW2n4pft00dhBtlA7eX5SMibTgau9+OOMvXoYMibtZphgN9gttau2XbUiIjPlm3CuKX9Ob3firO7FuFaiCiMFqcX8lWuFM11iDqi/XSMXE7nj02Bjetqpk8zKztrhl5R6Z1S5PHpw/AEioCcEE471nf7XGFpejrNCUxGw7PZpnvap3QMCijCPq1M4PjcAiVwS0lWo/Oup/TcgE=",
            "1; SN2PR07MB2526;\n\t20:zpxdM3hEyyw8QPLi4zXPhMuWY5EeVdHDCTCsLC4R3YPu6+Ww5w3nNZFRGpcSjAtlrik+ypo0hf1rGMK5JpEFrw/eP6agLPRZcv4H4eRK3XRQThqnCDJm8jcT+d002zAYTrY1xHTCklGGL8wzZT6Xd4K5/KXr6NYEjFgqQcFvgdR3vVpovEPXWu/sriO5EIAm0BJ2OSnxfVJT3x6FnCgoz1/L3FQFDzlhDIh5cjlvZmfQUIQLypubWlWanU4so5NYg9eCiqmpjIApIuz/KKNLdVUSlGu79dEZFrxQCWAjffEz7qTs3RE5HWa/hkJf0Md9KNuJNyJ5xKcEEq4Z4pTyT81YtIexzb932VPZsUfoHlFZphw2tPEsmojm3adbByMynjK8OzfPTvxjRO3eCjHDmJVCw/QCTHEwnDDa4BtQdxsdLZurq8wydo2fFIUp75nMRNxW3MBVO1b1ytVyiHjHp+yMB+kOrs9R4tohXac/hQI+gs7847VcULomKfqIw71L7LTdUkXi6LzL9WniJuwmf5W6GIAsKQojrboyvQ+9LqOXg0GGnBicYGCaRi+/S6AL/bYlQSpDfFMJryJhg0NWu8vxi2f+myLJtlOe7BDsW4s=;\n\t4:mK2BeBNu52k8K8Bm6xaZvpbz/ciK3VVBhUXsFyrFn4HO1iD17gKWdEku6d2FqUddqgoCItXh+KAoGdbdKxMafMHa4S8zyaNd9w6NeoYxVOddoGIPrNWniSTn/yrAOCL6hsX4ihdnRymat7IZkNaYEfNM3KnHXpKjkEk1vLBRGlaN+Zs0edx4G1/z+uB5FSlotxQ9/ei7HJnX1aqKiJEbMQV9QuV/KmLMiNgcxSm2E5LU2K05qP9J5dbdNigzQgu/",
            "=?us-ascii?Q?1; SN2PR07MB2526;\n\t23:G7JcPD7DEXDmJE+kfzuNjAQ8QICeXaDJWOqsejWfR?=\n\tZFrPJNEDo4MHMQzJYqs4UF82TqGNHN71NAj9wRm/op3quGMhVa7Q7/r8c1uyKXdEFsmp1dyfxOduiuJY41S/bIOUaSLdrQGzSe+nhsiQYQ/o+8EM6KB8aytKObUXuN7Hqq5+AucZ0p2dRyMSDVMWcB9LTV3D2mq6Nw6JqVAegK5MsJQyyP762ehbPkQCgK4uJKyDebr/f+PYcgZ97DSy02VA6HFXaIfAbhjnJOJiFK0nVNX+uJmcvITOr/yhPc/npz576uRT7Ub8lhqYex1MR6LY72R5AkbU81TNU+6ysf3Ef1uQacLdfuB0TQcb55LeFiLE87/9roCafZ2ZQaYUL3kBaB/KwMgfhx47tv3aZSXE3Q5ZB4Twjr0H/iF8jNLKJyl9AYUF6iLJs5m73jlC9PXwxyue3pgzRYL1w8eTzoY7Jzy7dk5P8o9jxB1dDRrFCCtOvP/fIfih3VVQ+ML158PekiKJX7Kp8ydKx3xRRTmSVXndzFZDzOBq7baVN2xUhQqqP3BXPR/1qJMGcn9gFfeDttvLT4HObsk4w8SsAwWvlETp0/rQIdbccxzJE3G4MfGj8sktjTbgP/wVRkvb/bxoTqkxf3wAUUn5ZsAV93KwlWmj4dB4NNeJhx+ceTB5EflgFwt5Xll6ReEjUB1YUn8B98Ou4kPdL7CF/LxKQcsAYsJTkmGZBC+Yy4RJ5xHz7bydcQ8ul9XEM0sOLpJvZGrJ6bSVipq5CVA2jwEGLPax+dw+ESx1HPju6uU8A9GkaubGqaKO0pFi5X2IeddrhDV1KYktXcWe3W6jWzQAeHk1qqOgomfWKyJtHcAK2FgNKoQn8KOb20BqTyICXg7xLRCwt0VG8GjYymw+WlPfPyxYUMYJi9AvY3zP6CmzRyAlrjhIQmQRtpY00LPUBhsq2X8Q8ZEMi2j/W6GcIXPhOO4R/bxj0JK9pzT29UaWa6+OAizuwFtBaIOh0h6fdwoIj7C6Xx8MUd1zMRPWGUHg2q6eMukhez/W5YwgG6Fhb0RHrCIFtEc3oMoQEvLVcM14rgnS2JJdnrEiWwlTH5kVKZD702V3gnsOsEzzOZWZlZeYkSqZrIPix8B1UwvaZAeXZBkguPEWHHHj/+b22/np4p54f4w02KEZlcTKCDlS21+0oU=",
            "1; SN2PR07MB2526;\n\t6:MnKRnQo4JjTitvZF11lhd3qGEWE38P5+LcrgCDYfNghanaFtuPLVl58ZK81KvzCK5U4GAsHDi+FCuDoazBrwz7mDT2J5egn0kmA/RC09VxAqNBAUqJ6qqid9UvgpgCkXOLT4gkCi7LcJULqT5UL5UZvx8Lt35pFpjOg1zp3qr5Yo8KEv/QlKojwb7w+ig2rw1dIRD7TFKGe4L0rrUrEnmB0tGQnI+LPQdVPpysmMI1WkN3MY/Um9oLwDZq3/FTNev0Hxq9rqxN41vMaUliUKeo781H4b8QgNgmu6QkbmCydm6rCElZ/R9KJcV+xT2ogogh6SyRJaxRXZ0t4DWO1HuQ==;\n\t5:dGU97e/jUiRMue7zSsYvqD2TugxtGSdcU0oQTL9PUI92wmEWh9fu9KpYMqOqwGe4m2IrXi/j3vhbnwFaxoULSD+fWEjR8Ovsoya9bJVFnYdQPwLSO14pJJcCBLcm/dP9wOz7tLWs54UMwcHX+dd2gw==;\n\t24:gqILQMQc3kGkp65VLctpYjz6CMZEvmdNfnIBFuiKQ4ryLoAErwVx3uAnxkME0bxhp1V3UUp4aQTxOOpO+IghdUr8mhpTrC3N53OioTFoEmc=;\n\t7:cn6CYvmhWz0D1u/0t2ni65fvWzexAwbYCpCVdnxt2kcg+jcnMO5Tr3w/b2IyWDXMSoOF2QNe3Jjms3h8NVxbRXqRJsSRihsYjLizc8i+YELG4hnJRMFzXMH94otwZ8RT9es+F0dSeAbbK7dJpMh7+zkVbUNt3JlPaPiT4xJomd5Azu6RdHVFfYp7hfRqa9WU0vxuBhUd7jLY4JoaBJ/l9duIZqPwPnx5Ipjpn+ITWSw="
        ],
        "X-MS-TrafficTypeDiagnostic": "SN2PR07MB2526:",
        "X-Exchange-Antispam-Report-Test": "UriScan:;",
        "X-Microsoft-Antispam-PRVS": "<SN2PR07MB2526AFDE279D778179370583E39D0@SN2PR07MB2526.namprd07.prod.outlook.com>",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(93006095)(100000703101)(100105400095)(10201501046)(3002001)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123564025)(20161123562025)(20161123560025)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);\n\tSRVR:SN2PR07MB2526; BCL:0; PCL:0;\n\tRULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);\n\tSRVR:SN2PR07MB2526; ",
        "X-Forefront-PRVS": "04163EF38A",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(6009001)(199003)(189002)(25786009)(1076002)(53936002)(3846002)(6116002)(575784001)(478600001)(110136004)(72206003)(7736002)(6666003)(107886003)(6512007)(305945005)(6506006)(36756003)(6486002)(68736007)(5003940100001)(189998001)(50986999)(42882006)(106356001)(101416001)(76176999)(2950100002)(6916009)(5660300001)(2361001)(33646002)(2351001)(2906002)(4326008)(97736004)(105586002)(48376002)(50466002)(81166006)(66066001)(69596002)(8936002)(47776003)(53416004)(8676002)(50226002)(81156014)(42186005);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:SN2PR07MB2526; H:jerin.domain.name;\n\tFPR:; \n\tSPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; ",
        "Received-SPF": "None (protection.outlook.com: cavium.com does not designate\n\tpermitted sender hosts)",
        "SpamDiagnosticOutput": "1:99",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "31 Aug 2017 14:55:44.1616\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "711e4ccf-2e9b-4bcf-a551-4094005b6194",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "SN2PR07MB2526",
        "Subject": "[dpdk-dev] [PATCH 11/26] net/octeontx: add eth device probe and\n\tremove",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "An octeontx ethdev device consists of multiple PKO VF devices, a PKI\nVF device and multiple SSOVF devices which shared between eventdev.\nThis patch adds a vdev based device called \"eth_octeontx\" which\nwill create multiple ethernet ports based on \"nr_port\" or maximum\nphysical ports are available in the system.\n\nSigned-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>\nCo-authored-by: Santosh Shukla <santosh.shukla@caviumnetworks.com>\n---\n drivers/net/octeontx/Makefile          |   1 +\n drivers/net/octeontx/octeontx_ethdev.c | 321 +++++++++++++++++++++++++++++++++\n drivers/net/octeontx/octeontx_ethdev.h |  94 ++++++++++\n 3 files changed, 416 insertions(+)\n create mode 100644 drivers/net/octeontx/octeontx_ethdev.c\n create mode 100644 drivers/net/octeontx/octeontx_ethdev.h",
    "diff": "diff --git a/drivers/net/octeontx/Makefile b/drivers/net/octeontx/Makefile\nindex 65de34c87..e0eaf059c 100644\n--- a/drivers/net/octeontx/Makefile\n+++ b/drivers/net/octeontx/Makefile\n@@ -53,6 +53,7 @@ VPATH += $(SRCDIR)/base\n SRCS-$(CONFIG_RTE_LIBRTE_OCTEONTX_PMD) += octeontx_pkovf.c\n SRCS-$(CONFIG_RTE_LIBRTE_OCTEONTX_PMD) += octeontx_pkivf.c\n SRCS-$(CONFIG_RTE_LIBRTE_OCTEONTX_PMD) += octeontx_bgx.c\n+SRCS-$(CONFIG_RTE_LIBRTE_OCTEONTX_PMD) += octeontx_ethdev.c\n \n LDLIBS += -lrte_eventdev\n LDLIBS += -lrte_pmd_octeontx_ssovf\ndiff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c\nnew file mode 100644\nindex 000000000..621035233\n--- /dev/null\n+++ b/drivers/net/octeontx/octeontx_ethdev.c\n@@ -0,0 +1,321 @@\n+/*\n+ *   BSD LICENSE\n+ *\n+ *   Copyright (C) Cavium Inc. 2017. All rights reserved.\n+ *\n+ *   Redistribution and use in source and binary forms, with or without\n+ *   modification, are permitted provided that the following conditions\n+ *   are met:\n+ *\n+ *     * Redistributions of source code must retain the above copyright\n+ *       notice, this list of conditions and the following disclaimer.\n+ *     * Redistributions in binary form must reproduce the above copyright\n+ *       notice, this list of conditions and the following disclaimer in\n+ *       the documentation and/or other materials provided with the\n+ *       distribution.\n+ *     * Neither the name of Cavium networks nor the names of its\n+ *       contributors may be used to endorse or promote products derived\n+ *       from this software without specific prior written permission.\n+ *\n+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+ *   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+#include <stdio.h>\n+#include <stdarg.h>\n+#include <stdbool.h>\n+#include <stdint.h>\n+#include <string.h>\n+#include <unistd.h>\n+\n+#include <rte_alarm.h>\n+#include <rte_branch_prediction.h>\n+#include <rte_debug.h>\n+#include <rte_devargs.h>\n+#include <rte_dev.h>\n+#include <rte_kvargs.h>\n+#include <rte_malloc.h>\n+#include <rte_prefetch.h>\n+#include <rte_vdev.h>\n+\n+#include \"octeontx_ethdev.h\"\n+#include \"octeontx_logs.h\"\n+\n+struct octeontx_vdev_init_params {\n+\tuint8_t\tnr_port;\n+};\n+\n+/* Parse integer from integer argument */\n+static int\n+parse_integer_arg(const char *key __rte_unused,\n+\t\tconst char *value, void *extra_args)\n+{\n+\tint *i = (int *)extra_args;\n+\n+\t*i = atoi(value);\n+\tif (*i < 0) {\n+\t\tocteontx_log_err(\"argument has to be positive.\");\n+\t\treturn -1;\n+\t}\n+\n+\treturn 0;\n+}\n+\n+static int\n+octeontx_parse_vdev_init_params(struct octeontx_vdev_init_params *params,\n+\t\t\t\tstruct rte_vdev_device *dev)\n+{\n+\tstruct rte_kvargs *kvlist = NULL;\n+\tint ret = 0;\n+\n+\tstatic const char * const octeontx_vdev_valid_params[] = {\n+\t\tOCTEONTX_VDEV_NR_PORT_ARG,\n+\t\tNULL\n+\t};\n+\n+\tconst char *input_args = rte_vdev_device_args(dev);\n+\tif (params == NULL)\n+\t\treturn -EINVAL;\n+\n+\n+\tif (input_args) {\n+\t\tkvlist = rte_kvargs_parse(input_args,\n+\t\t\t\tocteontx_vdev_valid_params);\n+\t\tif (kvlist == NULL)\n+\t\t\treturn -1;\n+\n+\t\tret = rte_kvargs_process(kvlist,\n+\t\t\t\t\tOCTEONTX_VDEV_NR_PORT_ARG,\n+\t\t\t\t\t&parse_integer_arg,\n+\t\t\t\t\t&params->nr_port);\n+\t\tif (ret < 0)\n+\t\t\tgoto free_kvlist;\n+\t}\n+\n+free_kvlist:\n+\trte_kvargs_free(kvlist);\n+\treturn ret;\n+}\n+\n+static inline void\n+devconf_set_default_sane_values(struct rte_event_dev_config *dev_conf,\n+\t\t\t\tstruct rte_event_dev_info *info)\n+{\n+\tmemset(dev_conf, 0, sizeof(struct rte_event_dev_config));\n+\tdev_conf->dequeue_timeout_ns = info->min_dequeue_timeout_ns;\n+\n+\tdev_conf->nb_event_ports = info->max_event_ports;\n+\tdev_conf->nb_event_queues = info->max_event_queues;\n+\n+\tdev_conf->nb_event_queue_flows = info->max_event_queue_flows;\n+\tdev_conf->nb_event_port_dequeue_depth =\n+\t\t\tinfo->max_event_port_dequeue_depth;\n+\tdev_conf->nb_event_port_enqueue_depth =\n+\t\t\tinfo->max_event_port_enqueue_depth;\n+\tdev_conf->nb_event_port_enqueue_depth =\n+\t\t\tinfo->max_event_port_enqueue_depth;\n+\tdev_conf->nb_events_limit =\n+\t\t\tinfo->max_num_events;\n+}\n+\n+/* Create Ethdev interface per BGX LMAC ports */\n+static int\n+octeontx_create(struct rte_vdev_device *dev, int port, uint8_t evdev,\n+\t\t\tint socket_id)\n+{\n+\tRTE_SET_USED(dev);\n+\tRTE_SET_USED(port);\n+\tRTE_SET_USED(evdev);\n+\tRTE_SET_USED(socket_id);\n+\n+\treturn -ENODEV;\n+}\n+\n+/* Un initialize octeontx device */\n+static int\n+octeontx_remove(struct rte_vdev_device *dev)\n+{\n+\tchar octtx_name[OCTEONTX_MAX_NAME_LEN];\n+\tstruct rte_eth_dev *eth_dev = NULL;\n+\tstruct octeontx_nic *nic = NULL;\n+\tint i;\n+\n+\tif (dev == NULL)\n+\t\treturn -EINVAL;\n+\n+\tfor (i = 0; i < OCTEONTX_VDEV_DEFAULT_MAX_NR_PORT; i++) {\n+\t\tsprintf(octtx_name, \"eth_octeontx_%d\", i);\n+\n+\t\t/* reserve an ethdev entry */\n+\t\teth_dev = rte_eth_dev_allocated(octtx_name);\n+\t\tif (eth_dev == NULL)\n+\t\t\treturn -ENODEV;\n+\n+\t\tnic = octeontx_pmd_priv(eth_dev);\n+\t\trte_event_dev_stop(nic->evdev);\n+\t\tPMD_INIT_LOG(INFO, \"Closing octeontx device %s\", octtx_name);\n+\n+\t\trte_free(eth_dev->data->mac_addrs);\n+\t\trte_free(eth_dev->data->dev_private);\n+\t\trte_free(eth_dev->data);\n+\t\trte_eth_dev_release_port(eth_dev);\n+\t\trte_event_dev_close(nic->evdev);\n+\t}\n+\n+\t/* Free FC resource */\n+\tocteontx_pko_fc_free();\n+\n+\treturn 0;\n+}\n+\n+/* Initialize octeontx device */\n+static int\n+octeontx_probe(struct rte_vdev_device *dev)\n+{\n+\tconst char *dev_name;\n+\tstatic int probe_once;\n+\tuint8_t socket_id, qlist;\n+\tint tx_vfcnt, port_id, evdev, qnum, pnum, res, i;\n+\tstruct rte_event_dev_config dev_conf;\n+\tconst char *eventdev_name = \"event_octeontx\";\n+\tstruct rte_event_dev_info info;\n+\n+\tstruct octeontx_vdev_init_params init_params = {\n+\t\tOCTEONTX_VDEV_DEFAULT_MAX_NR_PORT\n+\t};\n+\n+\tdev_name = rte_vdev_device_name(dev);\n+\tres = octeontx_parse_vdev_init_params(&init_params, dev);\n+\tif (res < 0)\n+\t\treturn -EINVAL;\n+\n+\tif (init_params.nr_port > OCTEONTX_VDEV_DEFAULT_MAX_NR_PORT) {\n+\t\tocteontx_log_err(\"nr_port (%d) > max (%d)\", init_params.nr_port,\n+\t\t\t\tOCTEONTX_VDEV_DEFAULT_MAX_NR_PORT);\n+\t\treturn -ENOTSUP;\n+\t}\n+\n+\tPMD_INIT_LOG(DEBUG, \"initializing %s pmd\", dev_name);\n+\n+\tsocket_id = rte_socket_id();\n+\n+\ttx_vfcnt = octeontx_pko_vf_count();\n+\n+\tif (tx_vfcnt < init_params.nr_port) {\n+\t\tocteontx_log_err(\"not enough PKO (%d) for port number (%d)\",\n+\t\t\t\ttx_vfcnt, init_params.nr_port);\n+\t\treturn -EINVAL;\n+\t}\n+\tevdev = rte_event_dev_get_dev_id(eventdev_name);\n+\tif (evdev < 0) {\n+\t\tocteontx_log_err(\"eventdev %s not found\", eventdev_name);\n+\t\treturn -ENODEV;\n+\t}\n+\n+\tres = rte_event_dev_info_get(evdev, &info);\n+\tif (res < 0) {\n+\t\tocteontx_log_err(\"failed to eventdev info %d\", res);\n+\t\treturn -EINVAL;\n+\t}\n+\n+\tPMD_INIT_LOG(DEBUG, \"max_queue %d max_port %d\",\n+\t\t\tinfo.max_event_queues, info.max_event_ports);\n+\n+\tif (octeontx_pko_init_fc(tx_vfcnt))\n+\t\treturn -ENOMEM;\n+\n+\tdevconf_set_default_sane_values(&dev_conf, &info);\n+\tres = rte_event_dev_configure(evdev, &dev_conf);\n+\tif (res < 0)\n+\t\tgoto parse_error;\n+\n+\tqnum = rte_event_queue_count(evdev);\n+\tpnum = rte_event_port_count(evdev);\n+\tif (pnum < qnum) {\n+\t\tocteontx_log_err(\"too few event ports (%d) for event_q(%d)\",\n+\t\t\t\tpnum, qnum);\n+\t\tres = -EINVAL;\n+\t\tgoto parse_error;\n+\t}\n+\tif (pnum > qnum) {\n+\t\t/*\n+\t\t * We don't poll on event ports\n+\t\t * that do not have any queues assigned.\n+\t\t */\n+\t\tpnum = qnum;\n+\t\tPMD_INIT_LOG(INFO,\n+\t\t\t\"reducing number of active event ports to %d\", pnum);\n+\t}\n+\tfor (i = 0; i < qnum; i++) {\n+\t\tres = rte_event_queue_setup(evdev, i, NULL);\n+\t\tif (res < 0) {\n+\t\t\tocteontx_log_err(\"failed to setup event_q(%d): res %d\",\n+\t\t\t\t\ti, res);\n+\t\t\tgoto parse_error;\n+\t\t}\n+\t}\n+\n+\tfor (i = 0; i < pnum; i++) {\n+\t\tres = rte_event_port_setup(evdev, i, NULL);\n+\t\tif (res < 0) {\n+\t\t\tres = -ENODEV;\n+\t\t\tocteontx_log_err(\"failed to setup ev port(%d) res=%d\",\n+\t\t\t\t\t\ti, res);\n+\t\t\tgoto parse_error;\n+\t\t}\n+\t\t/* Link one queue to one event port */\n+\t\tqlist = i;\n+\t\tres = rte_event_port_link(evdev, i, &qlist, NULL, 1);\n+\t\tif (res < 0) {\n+\t\t\tres = -ENODEV;\n+\t\t\tocteontx_log_err(\"failed to link port (%d): res=%d\",\n+\t\t\t\t\ti, res);\n+\t\t\tgoto parse_error;\n+\t\t}\n+\t}\n+\n+\t/* Create ethdev interface */\n+\tfor (i = 0; i < init_params.nr_port; i++) {\n+\t\tport_id = octeontx_create(dev, i, evdev, socket_id);\n+\t\tif (port_id < 0) {\n+\t\t\tocteontx_log_err(\"failed to create device %s\",\n+\t\t\t\t\tdev_name);\n+\t\t\tres = -ENODEV;\n+\t\t\tgoto parse_error;\n+\t\t}\n+\n+\t\tPMD_INIT_LOG(INFO, \"created ethdev %s for port %d\", dev_name,\n+\t\t\t\t\tport_id);\n+\t}\n+\n+\tif (probe_once) {\n+\t\tocteontx_log_err(\"interface %s not supported\", dev_name);\n+\t\tocteontx_remove(dev);\n+\t\tres = -ENOTSUP;\n+\t\tgoto parse_error;\n+\t}\n+\tprobe_once = 1;\n+\n+\treturn 0;\n+\n+parse_error:\n+\tocteontx_pko_fc_free();\n+\treturn res;\n+}\n+\n+static struct rte_vdev_driver octeontx_pmd_drv = {\n+\t.probe = octeontx_probe,\n+\t.remove = octeontx_remove,\n+};\n+\n+RTE_PMD_REGISTER_VDEV(OCTEONTX_PMD, octeontx_pmd_drv);\n+RTE_PMD_REGISTER_ALIAS(OCTEONTX_PMD, eth_octeontx);\n+RTE_PMD_REGISTER_PARAM_STRING(OCTEONTX_PMD, \"nr_port=<int> \");\ndiff --git a/drivers/net/octeontx/octeontx_ethdev.h b/drivers/net/octeontx/octeontx_ethdev.h\nnew file mode 100644\nindex 000000000..4c880f187\n--- /dev/null\n+++ b/drivers/net/octeontx/octeontx_ethdev.h\n@@ -0,0 +1,94 @@\n+/*\n+ *   BSD LICENSE\n+ *\n+ *   Copyright (C) Cavium Inc. 2017. All rights reserved.\n+ *\n+ *   Redistribution and use in source and binary forms, with or without\n+ *   modification, are permitted provided that the following conditions\n+ *   are met:\n+ *\n+ *     * Redistributions of source code must retain the above copyright\n+ *       notice, this list of conditions and the following disclaimer.\n+ *     * Redistributions in binary form must reproduce the above copyright\n+ *       notice, this list of conditions and the following disclaimer in\n+ *       the documentation and/or other materials provided with the\n+ *       distribution.\n+ *     * Neither the name of Cavium networks nor the names of its\n+ *       contributors may be used to endorse or promote products derived\n+ *       from this software without specific prior written permission.\n+ *\n+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+ *   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+#ifndef\t__OCTEONTX_ETHDEV_H__\n+#define\t__OCTEONTX_ETHDEV_H__\n+\n+#include <stdbool.h>\n+\n+#include <rte_common.h>\n+#include <rte_ethdev.h>\n+#include <rte_eventdev.h>\n+#include <rte_mempool.h>\n+#include <rte_memory.h>\n+\n+#include <octeontx_fpavf.h>\n+\n+#include \"base/octeontx_bgx.h\"\n+#include \"base/octeontx_pki_var.h\"\n+#include \"base/octeontx_pkivf.h\"\n+#include \"base/octeontx_pkovf.h\"\n+#include \"base/octeontx_io.h\"\n+\n+#define OCTEONTX_VDEV_DEFAULT_MAX_NR_PORT\t12\n+#define OCTEONTX_VDEV_NR_PORT_ARG\t\t(\"nr_port\")\n+#define OCTEONTX_MAX_NAME_LEN\t\t\t32\n+\n+static inline struct octeontx_nic *\n+octeontx_pmd_priv(struct rte_eth_dev *dev)\n+{\n+\treturn dev->data->dev_private;\n+}\n+\n+/* Octeontx ethdev nic */\n+struct octeontx_nic {\n+\tstruct rte_eth_dev *dev;\n+\tint node;\n+\tint port_id;\n+\tint port_ena;\n+\tint base_ichan;\n+\tint num_ichans;\n+\tint base_ochan;\n+\tint num_ochans;\n+\tuint8_t evdev;\n+\tuint8_t bpen;\n+\tuint8_t fcs_strip;\n+\tuint8_t bcast_mode;\n+\tuint8_t mcast_mode;\n+\tuint16_t num_tx_queues;\n+\tuint64_t hwcap;\n+\tuint8_t link_up;\n+\tuint8_t\tduplex;\n+\tuint8_t speed;\n+\tuint16_t mtu;\n+\tuint8_t mac_addr[ETHER_ADDR_LEN];\n+\t/* Rx port parameters */\n+\tstruct {\n+\t\tbool classifier_enable;\n+\t\tbool hash_enable;\n+\t\tbool initialized;\n+\t} pki;\n+\n+\tuint16_t ev_queues;\n+\tuint16_t ev_ports;\n+} __rte_cache_aligned;\n+\n+#endif /* __OCTEONTX_ETHDEV_H__ */\n",
    "prefixes": [
        "dpdk-dev",
        "11/26"
    ]
}