get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 112986,
    "url": "http://patches.dpdk.org/api/patches/112986/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20220617093444.2004000-13-jin.liu@corigine.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": "<20220617093444.2004000-13-jin.liu@corigine.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20220617093444.2004000-13-jin.liu@corigine.com",
    "date": "2022-06-17T09:34:43",
    "name": "[v3,12/13] net/nfp: nfdk packet xmit function",
    "commit_ref": null,
    "pull_url": null,
    "state": "rejected",
    "archived": true,
    "hash": "b12f8d3943a7580ac104945c06712abd43e1acfe",
    "submitter": {
        "id": 2670,
        "url": "http://patches.dpdk.org/api/people/2670/?format=api",
        "name": "Jin Liu",
        "email": "jin.liu@corigine.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/20220617093444.2004000-13-jin.liu@corigine.com/mbox/",
    "series": [
        {
            "id": 23606,
            "url": "http://patches.dpdk.org/api/series/23606/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=23606",
            "date": "2022-06-17T09:34:31",
            "name": "Add support of NFP3800 chip and firmware with NFDk",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/23606/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/112986/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/112986/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 88179A0093;\n\tFri, 17 Jun 2022 11:36:40 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id DD73342B95;\n\tFri, 17 Jun 2022 11:35:44 +0200 (CEST)",
            "from NAM10-MW2-obe.outbound.protection.outlook.com\n (mail-mw2nam10on2106.outbound.protection.outlook.com [40.107.94.106])\n by mails.dpdk.org (Postfix) with ESMTP id E2B8E40698\n for <dev@dpdk.org>; Fri, 17 Jun 2022 11:35:42 +0200 (CEST)",
            "from DM6PR13MB3004.namprd13.prod.outlook.com (2603:10b6:5:191::21)\n by CO3PR13MB5671.namprd13.prod.outlook.com (2603:10b6:303:17a::16) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5373.9; Fri, 17 Jun\n 2022 09:35:41 +0000",
            "from DM6PR13MB3004.namprd13.prod.outlook.com\n ([fe80::ac31:a36a:cc15:cd35]) by DM6PR13MB3004.namprd13.prod.outlook.com\n ([fe80::ac31:a36a:cc15:cd35%7]) with mapi id 15.20.5373.009; Fri, 17 Jun 2022\n 09:35:41 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=YkjDr3hTn6T+lRCHc6ruuvN5lktpoBfzDG0TRjzSVGtgvJU0AcM/ZYM83H5ICfarpmvsdF0q9LZ4NRw+4jvo/D39r4F3yDkpfVaxcqKJ0x05ZQnkMs8qQPBM2PBlN8gUMAequaWoTgrGR0bwhk4dKYOE9GglDrgSnJRuPcovwtHgRkIZW8ciIbmmyDcWYdHR8MWcfTuTv+Tz5R5vd1ck7bAlu24Kx4YYx5brmIooZMe3wRgIV38qge6Rq+jlOdAH8HYLoUhKHMn8RtTsYiJ7MhXJockVBB2MyzhAPcPE8mirv4KR27TnbEveQw5U2P3J/Zs47BYYotVnR4guSSQJfw==",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector9901;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n bh=9f67gHHj42EtVtwfIFunG6VH+mxbS/D3wnoGOIcuklY=;\n b=ZfV6tPuhYkFW3hbFoN022jKm/vGrOZi++9pzyxv8fTiEE2IyEYV344IeSPkfqhHP56zTSyS3+qH0De5jjmYLwsuyWBpupytGZQTX++JzeyskRy5g98i3uNz37mqqghIF+UEsqfGxbsVvtkV7HOSVcjqbGwnDXR/h/GSzE5Mjt44L/3dwz0kP7Lb1GHwmYBxOdpZQO8rLy1U+8lSBuS13EvyGydhenfXjO68e9LRRckVyrZCE8vl+RBYv7PTOA+vaV11aEoG3tJwYFQekChCrc0wFb7wFkWnsjLbTvjsACY2acZAblJJa/k11UbB0GfLCLPGAY2In7FibbdrYEGwYtA==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com;\n dkim=pass header.d=corigine.com; arc=none",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=9f67gHHj42EtVtwfIFunG6VH+mxbS/D3wnoGOIcuklY=;\n b=qJoDLZKMhOt5BbeODTwD3S6RDw/d/IL3ACtkG4xzTWyb+6iZofRI/wHfA37BjzEzlIEThgfQJDoSXj+mf7kfo8/24apnDwAo4Z+ieq7xJAXlsvxYBa4mW8MOcfbUhVdKT1CrzN3IA0VHO7lQrK/sPPmGajlDoiThi+o6KOOgmOM=",
        "Authentication-Results": "dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=corigine.com;",
        "From": "Jin Liu <jin.liu@corigine.com>",
        "To": "dev@dpdk.org",
        "Cc": "niklas.soderlund@corigine.com, Jin Liu <jin.liu@corigine.com>,\n Diana Wang <na.wang@corigine.com>, Peng Zhang <peng.zhang@corigine.com>,\n Chaoyong He <chaoyong.he@corigine.com>",
        "Subject": "[PATCH v3 12/13] net/nfp: nfdk packet xmit function",
        "Date": "Fri, 17 Jun 2022 11:34:43 +0200",
        "Message-Id": "<20220617093444.2004000-13-jin.liu@corigine.com>",
        "X-Mailer": "git-send-email 2.27.0",
        "In-Reply-To": "<20220617093444.2004000-1-jin.liu@corigine.com>",
        "References": "<20220616023939.1798769-1-jin.liu@corigine.com>\n <20220617093444.2004000-1-jin.liu@corigine.com>",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "X-ClientProxiedBy": "LO4P123CA0192.GBRP123.PROD.OUTLOOK.COM\n (2603:10a6:600:1a4::17) To DM6PR13MB3004.namprd13.prod.outlook.com\n (2603:10b6:5:191::21)",
        "MIME-Version": "1.0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "13ff7a17-dd7e-4428-3918-08da5044be5e",
        "X-MS-TrafficTypeDiagnostic": "CO3PR13MB5671:EE_",
        "X-Microsoft-Antispam-PRVS": "\n <CO3PR13MB567177F8440E89FD2CD79D1594AF9@CO3PR13MB5671.namprd13.prod.outlook.com>",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n +ix/dEwbQHA/oUbagjDAWfceul6KZjUF9+lDD5Cc/cI9w8soqrqU9oM5SimGJFBPC+yzXToe3OwJ3Z6xgyf9wCSVITIpZSVbbqMEx8jWzruF1EaOVuIw3fVRqap0Gc5NJ3Sn1BAh4uLBgPG8ZmKzG600Nki2pwVgvLXVCJs93xWbaZpsGqR/yyFJ1X8eKz/cQCJcgJRjhcn2CB89V2rncKT863eDtxk3ase3P3ILs1MzsImWCS9CoQAV8q1mJbdiDr7m5H20tBdHecoyCJwYQmYd8yJtch0z6ZWedFm+ExVGLiVomxUJ56wXp3BdSfX0s8eIi+gLzaNJWD9zm431GD9VQ+W5EtDAsR77+g1OBHeDo6JPvEGnChkOlUFe136JacX4or8fdgVLvmC5H5EuGQr1Fea2xjYUaVRseGdDcgnrTqzCZ8nB3aVCIuTYwu4hDwwd2JzA8vcEa+s64+N4u2RI6xMaOcKpHflGdN2OpD/Hz2Ph8ERswbMbJQv52uCeplvN7drHIcrkl+59T2KzvuItpCvJB3rz7jZdPB/K7HtMmaicyPCMvYHYgUgCFyGoMnHjFN2ZxqVlKh8wOWqrvrrOLsGPsoBT9ilPlHtCcJpOBNQJ2UJ2sfmy2JVQK8sBVY0YT6Xu8ghJe2kTc3Mh8cYKu3bZUQfgTl/Qab92ArLFxhHwYTvvBKh7MohtZNaok4HnjLdtROzdnakvJaPCYrpQ44ayd49V6Fd334HcsrRJCkTD4UVUR45OBFTOPl0I",
        "X-Forefront-Antispam-Report": "CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n IPV:NLI; SFV:NSPM; H:DM6PR13MB3004.namprd13.prod.outlook.com; PTR:; CAT:NONE;\n SFS:(13230016)(4636009)(346002)(136003)(366004)(396003)(39840400004)(66476007)(66556008)(26005)(8676002)(66574015)(107886003)(66946007)(6506007)(6916009)(44832011)(30864003)(2906002)(316002)(4326008)(38350700002)(186003)(508600001)(54906003)(5660300002)(6486002)(6512007)(1076003)(8936002)(2616005)(36756003)(52116002)(83380400001)(86362001)(38100700002)(41300700001);\n DIR:OUT; SFP:1102;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "=?utf-8?q?CDatpelIysTotgn+eDGLrwEKREmC?=\n\t=?utf-8?q?jhQA84CVIiySY7tTqvZX8gQB48ELr5FIftX9Lx4/oW7B55PkF4N9aPS49Ck72tKZg?=\n\t=?utf-8?q?kvDPRR9xc4QDS6ljjue2TmLxS2EpVff3vjfnrHCFOHo1xQ1lBo2nCmtG6QUEI3jE2?=\n\t=?utf-8?q?NaxSEECJLh69BAhvXmnBbTWevJipEaH+xY1+W//l90xlwOuzTurIV3vcn1ThhyZER?=\n\t=?utf-8?q?YwsXunkRMO1Hg9kSgioIv1eFDA6MUhRxV27QI9cw92Wrgb9pPrUHmIWATlAUCYj/0?=\n\t=?utf-8?q?EKJBLH554FdMgMw1qTp5JwumChxPmmfUsSiiDPK8fHIixs3905II2h0Z2Oc9cI0aL?=\n\t=?utf-8?q?Nkp4t53iVNxYsMfxZlrD14Z0Q0bkRBBPuov74SHXcessi2BA7rAKihrRsr/GbMwxY?=\n\t=?utf-8?q?CDyc93BmDw48ag/HlJ/BR/xpvV2WjhWvk3pqGU66bji0jVWGosTWAwdeUmfZnu7xt?=\n\t=?utf-8?q?jG+y+/GetSctEgBQkQrbyGf4fwf0j9TtUpOq/CgyvuURvflAHR6oWhoTVU0VG4bMW?=\n\t=?utf-8?q?IPi7PhczAKXsHhTzvRp9d/VDc5ZgoUKkU12ejHrpwxmkf2cnj4wPnpcTgdm1sMjCk?=\n\t=?utf-8?q?xGlwQNxP61sAcYZCOGKe8fVkGwnF30w2aS9PMIlK2lPfSsBjAZ06WVgZg8qzkbaB2?=\n\t=?utf-8?q?UTTmEkLDnLW65AydLHspSbL002eRDSW11l8aRQTaFvJIV8wfalwjSjYCpqXd01xI5?=\n\t=?utf-8?q?J/3VeXvcsMIW9bwObMhPiR1J0X4ENP22Bp9dnFwqa2jJY6jyAOsxg875iwgTgfyUl?=\n\t=?utf-8?q?bBsJE8qlSOXmcUfPQkcP7zgMjhEu5eTVqNgnzqwHX5ht+2KeSC7c6sLIH4kL0VNT+?=\n\t=?utf-8?q?Y2TWkBtp5PlNPWMAPI1vIx/qUoOnhVz2gEvO7B1MsJeyG65HVsPou4tD1i0Pee0E2?=\n\t=?utf-8?q?cxlZm7On/sx0brsjRIcYuaN2cP6psA+6Bfq7/MfE7/2uSRKohZZvP1lSHENkOkZJj?=\n\t=?utf-8?q?KenOqnZ4e6W8nvL4/Y2lQbh5PZQ+AT0gRX+VPvsAbJ6bOYEcTCfSayPWAjRKKPAIV?=\n\t=?utf-8?q?qNv0NI+D0Dcu8vh1Yqh1PmxZUm6GbS8qlV/9qv59PwWnYQWsj9SAaCDrvVFj5jfn6?=\n\t=?utf-8?q?SKtxnHxpNPWLzPhCD72HQj5mxlMlbMztNqwfX7MH8v/hoSs7yAECXIDtRdOLZQXwF?=\n\t=?utf-8?q?ZJNCksE3rFROvcVUb7N2RQ1Ngrr+zJS4xlw+Hu/WD601/+nNLI1pR+K53eIPR1V0v?=\n\t=?utf-8?q?evMC+SnNFwvR1f8twV2ilPnAwVsI8JfzO/gFs3tGPumFuHr9NxE36hB1MUjVMnb/d?=\n\t=?utf-8?q?lSy8fjpPAxAhd5gMfwcjadAPT0QiaaUXXtBItahBAQEzDT10UfVoFo7tXX4MUCX6a?=\n\t=?utf-8?q?TIpVQL8/wXBKFqNdn6HbG/tikR5s7XC5zR2RNMe2AomF5+d36pNfu0czsA4UioE3f?=\n\t=?utf-8?q?zkGsfy2CM04rK3YYQkz4jND44m2e9lSD147w6aTSX5EUm9adPPnH0rk+2XKVZCgms?=\n\t=?utf-8?q?dvd7EJ+2FYufbkJ9S+z+n0S+mm/v1gAXpirVmRCIeWb2z0pCMF24IOgIE2DJPwSPK?=\n\t=?utf-8?q?neLtW+z1AMlUeLZRMqmf6tNTWXY+XGpzfgNCqoA4BZD8a2QV8FwCA0xame865IdnY?=\n\t=?utf-8?q?YzR87fFkr1eCqCS3eAe4pFkBQqenzJXpOS+n9c4zCWIBXoH5u42xgtD1j8xCSQsA/?=\n\t=?utf-8?q?eJJ0J5lZxPGyx8dfXZ4hOu8cFfw3PeNw=3D=3D?=",
        "X-OriginatorOrg": "corigine.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 13ff7a17-dd7e-4428-3918-08da5044be5e",
        "X-MS-Exchange-CrossTenant-AuthSource": "DM6PR13MB3004.namprd13.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "17 Jun 2022 09:35:41.1940 (UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "fe128f2c-073b-4c20-818e-7246a585940c",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n ulxaKe7bnKw3zk1ZazC7l+SgRVETZ6o5E29OWhKP7IaOZG1b3tO6e0GrzKeNC8zZG7h/VHtt8gD/ULzmrFo6vA==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "CO3PR13MB5671",
        "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"
    },
    "content": "Implement NFP3800 card packet transmit function for firmware\nwith NFDk.\n\nSigned-off-by: Jin Liu <jin.liu@corigine.com>\nSigned-off-by: Diana Wang <na.wang@corigine.com>\nSigned-off-by: Peng Zhang <peng.zhang@corigine.com>\nSigned-off-by: Chaoyong He <chaoyong.he@corigine.com>\nSigned-off-by: Niklas Söderlund <niklas.soderlund@corigine.com>\n---\n drivers/net/nfp/nfp_ethdev.c    |   3 +-\n drivers/net/nfp/nfp_ethdev_vf.c |   3 +-\n drivers/net/nfp/nfp_rxtx.c      | 281 ++++++++++++++++++++++++++++++++\n drivers/net/nfp/nfp_rxtx.h      |   3 +\n 4 files changed, 288 insertions(+), 2 deletions(-)",
    "diff": "diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c\nindex e8a8368d0f..b6817c10da 100644\n--- a/drivers/net/nfp/nfp_ethdev.c\n+++ b/drivers/net/nfp/nfp_ethdev.c\n@@ -374,6 +374,7 @@ nfp_net_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev)\n \tswitch (NFD_CFG_CLASS_VER_of(hw->ver)) {\n \tcase NFP_NET_CFG_VERSION_DP_NFD3:\n \t\teth_dev->dev_ops = &nfp_net_nfd3_eth_dev_ops;\n+\t\teth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts;\n \t\tbreak;\n \tcase NFP_NET_CFG_VERSION_DP_NFDK:\n \t\tif (NFD_CFG_MAJOR_VERSION_of(hw->ver) < 5) {\n@@ -382,6 +383,7 @@ nfp_net_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev)\n \t\t\treturn -EINVAL;\n \t\t}\n \t\teth_dev->dev_ops = &nfp_net_nfdk_eth_dev_ops;\n+\t\teth_dev->tx_pkt_burst = &nfp_net_nfdk_xmit_pkts;\n \t\tbreak;\n \tdefault:\n \t\tPMD_DRV_LOG(ERR, \"The version of firmware is not correct.\");\n@@ -390,7 +392,6 @@ nfp_net_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev)\n \n \teth_dev->rx_queue_count = nfp_net_rx_queue_count;\n \teth_dev->rx_pkt_burst = &nfp_net_recv_pkts;\n-\teth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts;\n \n \treturn 0;\n }\ndiff --git a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c\nindex 56428814b7..66a1c0a36b 100644\n--- a/drivers/net/nfp/nfp_ethdev_vf.c\n+++ b/drivers/net/nfp/nfp_ethdev_vf.c\n@@ -279,6 +279,7 @@ nfp_netvf_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev)\n \tswitch (NFD_CFG_CLASS_VER_of(hw->ver)) {\n \tcase NFP_NET_CFG_VERSION_DP_NFD3:\n \t\teth_dev->dev_ops = &nfp_netvf_nfd3_eth_dev_ops;\n+\t\teth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts;\n \t\tbreak;\n \tcase NFP_NET_CFG_VERSION_DP_NFDK:\n \t\tif (NFD_CFG_MAJOR_VERSION_of(hw->ver) < 5) {\n@@ -287,6 +288,7 @@ nfp_netvf_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev)\n \t\t\treturn -EINVAL;\n \t\t}\n \t\teth_dev->dev_ops = &nfp_netvf_nfdk_eth_dev_ops;\n+\t\teth_dev->tx_pkt_burst = &nfp_net_nfdk_xmit_pkts;\n \t\tbreak;\n \tdefault:\n \t\tPMD_DRV_LOG(ERR, \"The version of firmware is not correct.\");\n@@ -295,7 +297,6 @@ nfp_netvf_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev)\n \n \teth_dev->rx_queue_count = nfp_net_rx_queue_count;\n \teth_dev->rx_pkt_burst = &nfp_net_recv_pkts;\n-\teth_dev->tx_pkt_burst = &nfp_net_nfd3_xmit_pkts;\n \n \treturn 0;\n }\ndiff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c\nindex 4f422c5090..1b00f96ed3 100644\n--- a/drivers/net/nfp/nfp_rxtx.c\n+++ b/drivers/net/nfp/nfp_rxtx.c\n@@ -20,6 +20,9 @@\n #include \"nfp_rxtx.h\"\n #include \"nfp_logs.h\"\n #include \"nfp_ctrl.h\"\n+#include \"nfpcore/nfp_mip.h\"\n+#include \"nfpcore/nfp_rtsym.h\"\n+#include \"nfpcore/nfp-common/nfp_platform.h\"\n \n static int\n nfp_net_rx_fill_freelist(struct nfp_net_rxq *rxq)\n@@ -1104,3 +1107,281 @@ nfp_net_nfdk_tx_queue_setup(struct rte_eth_dev *dev,\n \n \treturn 0;\n }\n+\n+static inline uint32_t\n+nfp_net_nfdk_free_tx_desc(struct nfp_net_txq *txq)\n+{\n+\tuint32_t free_desc;\n+\n+\tif (txq->wr_p >= txq->rd_p)\n+\t\tfree_desc = txq->tx_count - (txq->wr_p - txq->rd_p);\n+\telse\n+\t\tfree_desc = txq->rd_p - txq->wr_p;\n+\n+\treturn (free_desc > NFDK_TX_DESC_STOP_CNT) ?\n+\t\t(free_desc - NFDK_TX_DESC_STOP_CNT) : 0;\n+}\n+\n+static inline uint32_t\n+nfp_net_nfdk_txq_full(struct nfp_net_txq *txq)\n+{\n+\treturn (nfp_net_nfdk_free_tx_desc(txq) < txq->tx_free_thresh);\n+}\n+\n+static inline int\n+nfp_net_nfdk_headlen_to_segs(unsigned int headlen)\n+{\n+\treturn DIV_ROUND_UP(headlen +\n+\t\t\tNFDK_TX_MAX_DATA_PER_DESC -\n+\t\t\tNFDK_TX_MAX_DATA_PER_HEAD,\n+\t\t\tNFDK_TX_MAX_DATA_PER_DESC);\n+}\n+\n+static int\n+nfp_net_nfdk_tx_maybe_close_block(struct nfp_net_txq *txq, struct rte_mbuf *pkt)\n+{\n+\tunsigned int n_descs, wr_p, i, nop_slots;\n+\tstruct rte_mbuf *pkt_temp;\n+\n+\tpkt_temp = pkt;\n+\tn_descs = nfp_net_nfdk_headlen_to_segs(pkt_temp->data_len);\n+\twhile (pkt_temp->next) {\n+\t\tpkt_temp = pkt_temp->next;\n+\t\tn_descs += DIV_ROUND_UP(pkt_temp->data_len, NFDK_TX_MAX_DATA_PER_DESC);\n+\t}\n+\n+\tif (unlikely(n_descs > NFDK_TX_DESC_GATHER_MAX))\n+\t\treturn -EINVAL;\n+\n+\tn_descs += !!(pkt->ol_flags & RTE_MBUF_F_TX_TCP_SEG);\n+\n+\tif (round_down(txq->wr_p, NFDK_TX_DESC_BLOCK_CNT) !=\n+\t\t\tround_down(txq->wr_p + n_descs, NFDK_TX_DESC_BLOCK_CNT))\n+\t\tgoto close_block;\n+\n+\tif ((uint32_t)txq->data_pending + pkt->pkt_len > NFDK_TX_MAX_DATA_PER_BLOCK)\n+\t\tgoto close_block;\n+\n+\treturn 0;\n+\n+close_block:\n+\twr_p = txq->wr_p;\n+\tnop_slots = D_BLOCK_CPL(wr_p);\n+\n+\tmemset(&txq->ktxds[wr_p], 0, nop_slots * sizeof(struct nfp_net_nfdk_tx_desc));\n+\tfor (i = wr_p; i < nop_slots + wr_p; i++) {\n+\t\tif (txq->txbufs[i].mbuf) {\n+\t\t\trte_pktmbuf_free_seg(txq->txbufs[i].mbuf);\n+\t\t\ttxq->txbufs[i].mbuf = NULL;\n+\t\t}\n+\t}\n+\ttxq->data_pending = 0;\n+\ttxq->wr_p = D_IDX(txq, txq->wr_p + nop_slots);\n+\n+\treturn nop_slots;\n+}\n+\n+static inline uint64_t\n+nfp_net_nfdk_tx_cksum(struct nfp_net_txq *txq, struct rte_mbuf *mb,\n+\t\tuint64_t flags)\n+{\n+\tuint64_t ol_flags;\n+\tstruct nfp_net_hw *hw = txq->hw;\n+\n+\tif (!(hw->cap & NFP_NET_CFG_CTRL_TXCSUM))\n+\t\treturn flags;\n+\n+\tol_flags = mb->ol_flags;\n+\n+\t/* IPv6 does not need checksum */\n+\tif (ol_flags & RTE_MBUF_F_TX_IP_CKSUM)\n+\t\tflags |= NFDK_DESC_TX_L3_CSUM;\n+\n+\tif (ol_flags & RTE_MBUF_F_TX_L4_MASK)\n+\t\tflags |= NFDK_DESC_TX_L4_CSUM;\n+\n+\treturn flags;\n+}\n+\n+static inline uint64_t\n+nfp_net_nfdk_tx_tso(struct nfp_net_txq *txq, struct rte_mbuf *mb)\n+{\n+\tuint64_t ol_flags;\n+\tstruct nfp_net_nfdk_tx_desc txd;\n+\tstruct nfp_net_hw *hw = txq->hw;\n+\n+\tif (!(hw->cap & NFP_NET_CFG_CTRL_LSO_ANY))\n+\t\tgoto clean_txd;\n+\n+\tol_flags = mb->ol_flags;\n+\n+\tif (!(ol_flags & RTE_MBUF_F_TX_TCP_SEG))\n+\t\tgoto clean_txd;\n+\n+\ttxd.l3_offset = mb->l2_len;\n+\ttxd.l4_offset = mb->l2_len + mb->l3_len;\n+\ttxd.lso_meta_res = 0;\n+\ttxd.mss = rte_cpu_to_le_16(mb->tso_segsz);\n+\ttxd.lso_hdrlen = mb->l2_len + mb->l3_len + mb->l4_len;\n+\ttxd.lso_totsegs = (mb->pkt_len + mb->tso_segsz) / mb->tso_segsz;\n+\n+clean_txd:\n+\ttxd.l3_offset = 0;\n+\ttxd.l4_offset = 0;\n+\ttxd.lso_hdrlen = 0;\n+\ttxd.mss = 0;\n+\ttxd.lso_totsegs = 0;\n+\ttxd.lso_meta_res = 0;\n+\n+\treturn txd.raw;\n+}\n+\n+uint16_t\n+nfp_net_nfdk_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)\n+{\n+\tuint32_t buf_idx;\n+\tuint64_t dma_addr;\n+\tuint16_t free_descs;\n+\tuint32_t npkts = 0;\n+\tuint64_t metadata = 0;\n+\tuint16_t issued_descs = 0;\n+\tstruct nfp_net_txq *txq;\n+\tstruct nfp_net_hw *hw;\n+\tstruct nfp_net_nfdk_tx_desc *ktxds;\n+\tstruct rte_mbuf *pkt, *temp_pkt;\n+\tstruct rte_mbuf **lmbuf;\n+\n+\ttxq = tx_queue;\n+\thw = txq->hw;\n+\n+\tPMD_TX_LOG(DEBUG, \"working for queue %u at pos %d and %u packets\",\n+\t\ttxq->qidx, txq->wr_p, nb_pkts);\n+\n+\tif ((nfp_net_nfdk_free_tx_desc(txq) < NFDK_TX_DESC_PER_SIMPLE_PKT *\n+\t\t\tnb_pkts) || (nfp_net_nfdk_txq_full(txq)))\n+\t\tnfp_net_tx_free_bufs(txq);\n+\n+\tfree_descs = (uint16_t)nfp_net_nfdk_free_tx_desc(txq);\n+\tif (unlikely(free_descs == 0))\n+\t\treturn 0;\n+\n+\tPMD_TX_LOG(DEBUG, \"queue: %u. Sending %u packets\", txq->qidx, nb_pkts);\n+\t/* Sending packets */\n+\twhile ((npkts < nb_pkts) && free_descs) {\n+\t\tuint32_t type, dma_len, dlen_type, tmp_dlen;\n+\t\tint nop_descs, used_descs;\n+\n+\t\tpkt = *(tx_pkts + npkts);\n+\t\tnop_descs = nfp_net_nfdk_tx_maybe_close_block(txq, pkt);\n+\t\tif (nop_descs < 0)\n+\t\t\tgoto xmit_end;\n+\n+\t\tissued_descs += nop_descs;\n+\t\tktxds = &txq->ktxds[txq->wr_p];\n+\t\t/* Grabbing the mbuf linked to the current descriptor */\n+\t\tbuf_idx = txq->wr_p;\n+\t\tlmbuf = &txq->txbufs[buf_idx++].mbuf;\n+\t\t/* Warming the cache for releasing the mbuf later on */\n+\t\tRTE_MBUF_PREFETCH_TO_FREE(*lmbuf);\n+\n+\t\ttemp_pkt = pkt;\n+\n+\t\tif (unlikely(pkt->nb_segs > 1 &&\n+\t\t\t\t!(hw->cap & NFP_NET_CFG_CTRL_GATHER))) {\n+\t\t\tPMD_INIT_LOG(INFO, \"NFP_NET_CFG_CTRL_GATHER not set\");\n+\t\t\trte_panic(\"Multisegment packet unsupported\\n\");\n+\t\t}\n+\n+\t\t/*\n+\t\t * Checksum and VLAN flags just in the first descriptor for a\n+\t\t * multisegment packet, but TSO info needs to be in all of them.\n+\t\t */\n+\n+\t\tdma_len = pkt->data_len;\n+\t\tif ((hw->cap & NFP_NET_CFG_CTRL_LSO_ANY) &&\n+\t\t\t\t(pkt->ol_flags & RTE_MBUF_F_TX_TCP_SEG)) {\n+\t\t\ttype = NFDK_DESC_TX_TYPE_TSO;\n+\t\t} else if (!pkt->next && dma_len < NFDK_TX_MAX_DATA_PER_HEAD) {\n+\t\t\ttype = NFDK_DESC_TX_TYPE_SIMPLE;\n+\t\t} else {\n+\t\t\ttype = NFDK_DESC_TX_TYPE_GATHER;\n+\t\t}\n+\t\tdma_len -= 1;\n+\t\tdlen_type = (NFDK_DESC_TX_DMA_LEN_HEAD & dma_len) |\n+\t\t\t(NFDK_DESC_TX_TYPE_HEAD & (type << 12));\n+\t\tktxds->dma_len_type = rte_cpu_to_le_16(dlen_type);\n+\t\tdma_addr = rte_mbuf_data_iova(pkt);\n+\t\tPMD_TX_LOG(DEBUG, \"Working with mbuf at dma address:\"\n+\t\t\t\t\"%\" PRIx64 \"\", dma_addr);\n+\t\tktxds->dma_addr_hi = rte_cpu_to_le_16(dma_addr >> 32);\n+\t\tktxds->dma_addr_lo = rte_cpu_to_le_32(dma_addr & 0xffffffff);\n+\t\tktxds++;\n+\n+\t\ttmp_dlen = dlen_type & NFDK_DESC_TX_DMA_LEN_HEAD;\n+\t\tdma_len -= tmp_dlen;\n+\t\tdma_addr += tmp_dlen + 1;\n+\n+\t\twhile (pkt) {\n+\t\t\tif (*lmbuf)\n+\t\t\t\trte_pktmbuf_free_seg(*lmbuf);\n+\t\t\t*lmbuf = pkt;\n+\t\t\twhile (dma_len > 0) {\n+\t\t\t\tdma_len -= 1;\n+\t\t\t\tdlen_type = NFDK_DESC_TX_DMA_LEN & dma_len;\n+\n+\t\t\t\tktxds->dma_len_type = rte_cpu_to_le_16(dlen_type);\n+\t\t\t\tktxds->dma_addr_hi = rte_cpu_to_le_16(dma_addr >> 32);\n+\t\t\t\tktxds->dma_addr_lo = rte_cpu_to_le_32(dma_addr & 0xffffffff);\n+\t\t\t\tktxds++;\n+\n+\t\t\t\tdma_len -= dlen_type;\n+\t\t\t\tdma_addr += dlen_type + 1;\n+\t\t\t}\n+\n+\t\t\tif (!pkt->next)\n+\t\t\t\tbreak;\n+\n+\t\t\tpkt = pkt->next;\n+\t\t\tdma_len = pkt->data_len;\n+\t\t\tdma_addr = rte_mbuf_data_iova(pkt);\n+\t\t\tPMD_TX_LOG(DEBUG, \"Working with mbuf at dma address:\"\n+\t\t\t\t\"%\" PRIx64 \"\", dma_addr);\n+\n+\t\t\tlmbuf = &txq->txbufs[buf_idx++].mbuf;\n+\t\t}\n+\n+\t\t(ktxds - 1)->dma_len_type = rte_cpu_to_le_16(dlen_type | NFDK_DESC_TX_EOP);\n+\n+\t\tktxds->raw = rte_cpu_to_le_64(nfp_net_nfdk_tx_cksum(txq, temp_pkt, metadata));\n+\t\tktxds++;\n+\n+\t\tif ((hw->cap & NFP_NET_CFG_CTRL_LSO_ANY) &&\n+\t\t\t\t(temp_pkt->ol_flags & RTE_MBUF_F_TX_TCP_SEG)) {\n+\t\t\tktxds->raw = rte_cpu_to_le_64(nfp_net_nfdk_tx_tso(txq, temp_pkt));\n+\t\t\tktxds++;\n+\t\t}\n+\n+\t\tused_descs = ktxds - txq->ktxds - txq->wr_p;\n+\t\tif (round_down(txq->wr_p, NFDK_TX_DESC_BLOCK_CNT) !=\n+\t\t\tround_down(txq->wr_p + used_descs - 1, NFDK_TX_DESC_BLOCK_CNT)) {\n+\t\t\trte_panic(\"Used descs cross block boundary\\n\");\n+\t\t}\n+\n+\t\ttxq->wr_p = D_IDX(txq, txq->wr_p + used_descs);\n+\t\tif (txq->wr_p % NFDK_TX_DESC_BLOCK_CNT)\n+\t\t\ttxq->data_pending += temp_pkt->pkt_len;\n+\t\telse\n+\t\t\ttxq->data_pending = 0;\n+\n+\t\tissued_descs += used_descs;\n+\t\tnpkts++;\n+\t\tfree_descs = (uint16_t)nfp_net_nfdk_free_tx_desc(txq);\n+\t}\n+\n+xmit_end:\n+\t/* Increment write pointers. Force memory write before we let HW know */\n+\trte_wmb();\n+\tnfp_qcp_ptr_add(txq->qcp_q, NFP_QCP_WRITE_PTR, issued_descs);\n+\n+\treturn npkts;\n+}\ndiff --git a/drivers/net/nfp/nfp_rxtx.h b/drivers/net/nfp/nfp_rxtx.h\nindex ba8ffbd1ff..5c005d74e7 100644\n--- a/drivers/net/nfp/nfp_rxtx.h\n+++ b/drivers/net/nfp/nfp_rxtx.h\n@@ -352,6 +352,9 @@ int nfp_net_nfdk_tx_queue_setup(struct rte_eth_dev *dev,\n \t\tuint16_t nb_desc,\n \t\tunsigned int socket_id,\n \t\tconst struct rte_eth_txconf *tx_conf);\n+uint16_t nfp_net_nfdk_xmit_pkts(void *tx_queue,\n+\t\tstruct rte_mbuf **tx_pkts,\n+\t\tuint16_t nb_pkts);\n \n #endif /* _NFP_RXTX_H_ */\n /*\n",
    "prefixes": [
        "v3",
        "12/13"
    ]
}