get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 112248,
    "url": "http://patchwork.dpdk.org/api/patches/112248/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20220602015304.710197-10-jin.liu@corigine.com/",
    "project": {
        "id": 1,
        "url": "http://patchwork.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": "<20220602015304.710197-10-jin.liu@corigine.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20220602015304.710197-10-jin.liu@corigine.com",
    "date": "2022-06-02T01:52:59",
    "name": "[09/14] net/nfp: nfdk netdev option and queue function",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "cbfb2db793d0563f3bec9c3d2e478ec534932688",
    "submitter": {
        "id": 2670,
        "url": "http://patchwork.dpdk.org/api/people/2670/?format=api",
        "name": "Jin Liu",
        "email": "jin.liu@corigine.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patchwork.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20220602015304.710197-10-jin.liu@corigine.com/mbox/",
    "series": [
        {
            "id": 23295,
            "url": "http://patchwork.dpdk.org/api/series/23295/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=23295",
            "date": "2022-06-02T01:52:50",
            "name": "Add support of NFP3800 chip and firmware with NFDk",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/23295/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/112248/comments/",
    "check": "warning",
    "checks": "http://patchwork.dpdk.org/api/patches/112248/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 B33A2A0548;\n\tThu,  2 Jun 2022 03:55:18 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id C5FE84114F;\n\tThu,  2 Jun 2022 03:55:00 +0200 (CEST)",
            "from NAM11-DM6-obe.outbound.protection.outlook.com\n (mail-dm6nam11on2092.outbound.protection.outlook.com [40.107.223.92])\n by mails.dpdk.org (Postfix) with ESMTP id AE3974021E\n for <dev@dpdk.org>; Thu,  2 Jun 2022 03:54:59 +0200 (CEST)",
            "from DM6PR13MB3004.namprd13.prod.outlook.com (2603:10b6:5:191::21)\n by DM4PR13MB5858.namprd13.prod.outlook.com (2603:10b6:8:46::6) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.5314.11; Thu, 2 Jun 2022 01:54:57 +0000",
            "from DM6PR13MB3004.namprd13.prod.outlook.com\n ([fe80::d902:ed7d:82bb:c753]) by DM6PR13MB3004.namprd13.prod.outlook.com\n ([fe80::d902:ed7d:82bb:c753%4]) with mapi id 15.20.5314.013; Thu, 2 Jun 2022\n 01:54:57 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=Ajkr9WJHcqbTobw89yLpePga1ILG/BY/36vRV35UHEpHYlUsZ9dhfX1XemcuJhG4th0NFpKGVI9bN7FWtv2KfrpCo/svA0KchTnagq8ClX8HuryUQ8LPGshWlpiOEcCxXhy6fgc4KrYCvWDfi0mvKpwMjtA/Dv+uFz0036pRJxymphu/xgPBRvK1N4l/3q8qdYfSY7YYoWXVmfkaNNXZWO6+aYzlvQFFoxOtR02UWJvT8TOB2MmkN0RTS+FUr5pgzKfcTGyRsIZSP8entJTmuXn2oTAKu1vDDwFrZ55qTflQwsn+PoBIqIXgmNywm+E20yALBxm0dwzPVCmPVHrEug==",
        "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=/iCTxPWHt2xt8CJmcuYqEW0PndjKZ3xe6PbOOAXbQIA=;\n b=bNwHl79ean+OSvdb+moMpdHl1Azy2SO4EVL+EyVyQhyCmCgDOtZREaHoBUtGSY5LiKNh1hgasxrIIpLWqsK3mjsWYEbvFEAoetHJWSdkl1ceGiTRg7VMAeGB1cr336RjPkcyQdLGTNqBwGRtPqwsO3WWpPJ2BWxpCMvY7g2YyCXoHIWEYNpXhrlafziBQfDn23Iol33JrQQ4/RmPkovRrPJNpWWRdwEpoMxBMxj/ozfpILyK5NyuG28NAkvuw7jnCRAz93X7sfaPuc57/RkMTii8VhLxpavj/mfc+W5PxaYpQKA6jnjPihRA/2oYAt2OIX4FLqof5WcM9MB7QwTmWg==",
        "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=/iCTxPWHt2xt8CJmcuYqEW0PndjKZ3xe6PbOOAXbQIA=;\n b=gAlh8lw+A92bI2mcV1Rxv4dPLcyklzH0LTPPcV/qFbAoP1Z9VsRVUN8lcKtCmmNLuobdICIq1bXDUC2D+6ocBKcydw/Oe/vHYJs0hkY5VgJrOoRxWFk8w43yrXsLaSo+gJ/pXwWzqr0yJ/Xom26GxZZPLIf5D/YMrZz/INqKtqw=",
        "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 09/14] net/nfp: nfdk netdev option and queue function",
        "Date": "Thu,  2 Jun 2022 03:52:59 +0200",
        "Message-Id": "<20220602015304.710197-10-jin.liu@corigine.com>",
        "X-Mailer": "git-send-email 2.27.0",
        "In-Reply-To": "<20220602015304.710197-1-jin.liu@corigine.com>",
        "References": "<20220602015304.710197-1-jin.liu@corigine.com>",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "X-ClientProxiedBy": "LO4P123CA0457.GBRP123.PROD.OUTLOOK.COM\n (2603:10a6:600:1aa::12) 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": "ea5c1a5c-3746-428b-a88a-08da443ae4f8",
        "X-MS-TrafficTypeDiagnostic": "DM4PR13MB5858:EE_",
        "X-Microsoft-Antispam-PRVS": "\n <DM4PR13MB5858D4A3C6F2587D26C1AB8C94DE9@DM4PR13MB5858.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 nyiOxbS0Wi9DsEYJeBzZEo2UmGkTLyLOLhbFu+pxqZ55TwwUtZOZR4edrywXdJq3xkfSXyG/tZTsntWcLwcxR5QbHFJMQTe8aOd+FGYNyu5F8dfp9YcNiJTTCLfrt8M76L+UWUZ4HBynK/nTOIa95nhl6N/LG5p0151yyMRufN9RyPaFogGOz1nOk28SEH/cohgSaZb9agM935MidiW3UvBICCCscYkoKozfW+U5SXomRpNxy6bBZNwhyBMB0nkTV17Y9WeAFvwNvZlxf+On2eHUctwUPD4m4w0OKbWjKMsZrHWyNVspLRJTc4YPUqi6Hf4o/GIObUaVd1j92hG7ocZ2Tb4MvvJcQaY1NFsfYn5Ha4KmwCWca12nAGrafpawxsGVnYzhpGwGLMIz00fiFUQqVvUT+KYk7YpcCedxjC5kWjbgejzb1fcWGdgo/ZdkZ64VeKr5VSLJHs3hs9BtqkdhwxXn9ioTn93z3wY22UiMzDmczVpvcTOWqpxnEdrDaCLpV7tpzaXbnuM3nR1ZVAUCjo4CMDKfgH4Ccpt4EHPZXsCFSF8kPtG2omUXJBjCdj8+C1L0AtJFiA7CwrwANRmlvnPTJrxAeCfnKW+0qhf4don+J25H/cmX4FVpooqzIG42fEkuffx4Dwug9vOoyRbXs9QRzcobYjnIb7K1XmP6BCjMhdFIccZ5kaBUuqIAnahn6rOBIxC/fsCp33gOuw==",
        "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:(13230001)(4636009)(346002)(366004)(396003)(136003)(376002)(39840400004)(36756003)(186003)(66574015)(83380400001)(30864003)(5660300002)(4326008)(44832011)(8936002)(2906002)(6916009)(54906003)(1076003)(107886003)(6506007)(316002)(2616005)(41300700001)(8676002)(66946007)(66476007)(66556008)(26005)(6512007)(52116002)(38100700002)(38350700002)(86362001)(6486002)(508600001);\n DIR:OUT; SFP:1102;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "=?utf-8?q?lsPpFFSR7kdaKjLypWG5tPeSryMT?=\n\t=?utf-8?q?qfj0UPPEzQVM8jSZc3UBxVVL+djArPEd+bJv8sBA3xuUQVPNUm+3BNR/lTSF/plSB?=\n\t=?utf-8?q?87tFNRs5dn/LVe2H9NMPVvhnI9hzwas0qaERcNDC8S/RHk/ZMFqeZ+5EfA5zRMEGm?=\n\t=?utf-8?q?HSxmnhcLc3HnwOKdXGIQbfA5UnE0ibu+/mH5njpB+Mdv1mVSLX92KWGMsXlCbdFWR?=\n\t=?utf-8?q?LaMZT9I2UOtpuN/zDzKqReDdiwfxoHBvEhsFy+QRv1HC/iSA4cbgXYTRu3y81Npji?=\n\t=?utf-8?q?VRihLi/K9NTLTT8sR5/m9C/KN7lDzsIvOvi4XOt3yU41Ny6ZA6ozlCq82qrocW6kb?=\n\t=?utf-8?q?wAHhRHr02q8wq7VwI4h7QbVGArEz9x7vB7b9rUUXE/+tjDwktaZcmSLdrG0HhL9Fx?=\n\t=?utf-8?q?V0Uvz9nQ+nUYVny06BQo8pVPO5pKPPXQb5viiYFkKst5hS7t37HeDQQjn7TEeJPJO?=\n\t=?utf-8?q?fwefO6ZsSPWEVP9bYu4XL2LTK8wxG2mo2liVFIunTKjoG37iF+NgAhc+XHqsS1pcw?=\n\t=?utf-8?q?EBStenD5TKiAPxetMzrZJeZND8PLVZEAkn0MOKYml6W42noqcPIQvl54foNUh+Jmh?=\n\t=?utf-8?q?eh35xiS0kXpamoqdlB601WKbgpV/n5xlkudOwXnvtYATYqkDny2tGthnQHtQqah5G?=\n\t=?utf-8?q?226EpMhnue3kyJNiGkdDcJNTBztBzXQ7LAetp9FefmQcXoeT6e5ZZi0qBBnVTEat9?=\n\t=?utf-8?q?XfdTbrCHUMmKWfl1JIZwifE9arAYtYOpuz88nELpL/PkEl940OsevbzoPbCSkpxxb?=\n\t=?utf-8?q?h+KXvnmG+yuavGJi/RmeafxRPMJYeM2Bm4lmQvMbm5wSKNMuA/B8cvpRJgy4SZnmt?=\n\t=?utf-8?q?u6bzzUrOtucM041L1zLX9S0YuD79lnKtqF53rPhQ6CPmQZi3S8w8Ye0nk7wL9LxQd?=\n\t=?utf-8?q?ameY2DdRoYzzKK9bn6F/RvNKpfNzzPo1mgi7bSptMB5hMr7s34sMpv1Ths97Z4FsW?=\n\t=?utf-8?q?gk0NNtkif8eLlOwvWNFtjWvXdg02ujiLKKCBSu7HXrmqlwibgYJORQK8j3OD4FPS4?=\n\t=?utf-8?q?vLC0vyxrq2btYaZ8HcozDknoSqVxCJnqcjdga7pO0sYtFjx3mQY85EaNHGvkRw5O1?=\n\t=?utf-8?q?Ut5+JbhxxloFrmdmuDsS1NtvGOx5I4v9Y9mqM85xewPR0TsgwT6tLB0Gz4GFHQDGl?=\n\t=?utf-8?q?3uZi/l5UUQ/nPSL3XFauNPX9pQBWq1xpebuilwTLnfu79q76wfJ29Z8wN3PLALsws?=\n\t=?utf-8?q?p6TeyblzYRS1xo7HjzLgCjAdOGZB8VIy498iAaQ59pwNWhOB5qw+Id3p5eg/4ZsAN?=\n\t=?utf-8?q?kKg8GCQg6lHSd98F1dSU7K5Kn03S1JbdmLnh5m1y7fWu8x2LrpwVbx/TlzRCEjC/H?=\n\t=?utf-8?q?qavbBt0F+AdekYtycwSdD6/1rtlq+gdlaWjbPC8UtOtlvQU4r2eBGo3Py8P1KnQXC?=\n\t=?utf-8?q?EDaON7BFktEJugSHhJ8AQiTuDS8MMgsttk961dJAZMd3WXObW5a5RD1Vlviis+YKc?=\n\t=?utf-8?q?IgP9Y4To0XugxxfWog9FXurEK0gtcYoeDLlwdbA6c9VRg9RWLmOhkd4tXAqnAvsCD?=\n\t=?utf-8?q?aAL6Bl4YINzbrCamKQSKWlmIjGRNIJrasn+/BQaGykuu8HESPDalu4SrcGBEzqjy3?=\n\t=?utf-8?q?vtrBX/z22lY00ZLBFOu4K+pf5XWXx2nqBZ0B5xDbN53A2LhXyBg1EuEdrj2KzleyN?=\n\t=?utf-8?q?5H+ow9EEW9tRaaSJs0/EkAWs6rpMxwSg=3D=3D?=",
        "X-OriginatorOrg": "corigine.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n ea5c1a5c-3746-428b-a88a-08da443ae4f8",
        "X-MS-Exchange-CrossTenant-AuthSource": "DM6PR13MB3004.namprd13.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Internal",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "02 Jun 2022 01:54:56.9295 (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 TIbs+MxGh+weUoqgKq2G3ucjXdNzgZKjxJLwS9zU4aLNQYyqwcC3ruuY9gsz27IlQE9hmN1Qkt0qnMbqz/ntNQ==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "DM4PR13MB5858",
        "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": "Add ethdev option for NFDK firmware, implement tx_queue setup and\nrelease function for NFDK firmware.\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    |  32 ++++++-\n drivers/net/nfp/nfp_ethdev_vf.c |  40 +++++++--\n drivers/net/nfp/nfp_rxtx.c      | 153 ++++++++++++++++++++++++++++++++\n drivers/net/nfp/nfp_rxtx.h      |   7 ++\n 4 files changed, 226 insertions(+), 6 deletions(-)",
    "diff": "diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c\nindex c09a035323..2bf7a565bc 100644\n--- a/drivers/net/nfp/nfp_ethdev.c\n+++ b/drivers/net/nfp/nfp_ethdev.c\n@@ -358,11 +358,41 @@ static const struct eth_dev_ops nfp_net_nfd3_eth_dev_ops = {\n \t.rx_queue_intr_disable  = nfp_rx_queue_intr_disable,\n };\n \n+static const struct eth_dev_ops nfp_net_nfdk_eth_dev_ops = {\n+\t.dev_configure\t\t= nfp_net_configure,\n+\t.dev_start\t\t= nfp_net_start,\n+\t.dev_stop\t\t= nfp_net_nfd3_stop,\n+\t.dev_set_link_up\t= nfp_net_set_link_up,\n+\t.dev_set_link_down\t= nfp_net_set_link_down,\n+\t.dev_close\t\t= nfp_net_nfd3_close,\n+\t.promiscuous_enable\t= nfp_net_promisc_enable,\n+\t.promiscuous_disable\t= nfp_net_promisc_disable,\n+\t.link_update\t\t= nfp_net_link_update,\n+\t.stats_get\t\t= nfp_net_stats_get,\n+\t.stats_reset\t\t= nfp_net_stats_reset,\n+\t.dev_infos_get\t\t= nfp_net_infos_get,\n+\t.dev_supported_ptypes_get = nfp_net_supported_ptypes_get,\n+\t.mtu_set\t\t= nfp_net_dev_mtu_set,\n+\t.mac_addr_set\t\t= nfp_net_set_mac_addr,\n+\t.vlan_offload_set\t= nfp_net_vlan_offload_set,\n+\t.reta_update\t\t= nfp_net_reta_update,\n+\t.reta_query\t\t= nfp_net_reta_query,\n+\t.rss_hash_update\t= nfp_net_rss_hash_update,\n+\t.rss_hash_conf_get\t= nfp_net_rss_hash_conf_get,\n+\t.rx_queue_setup\t\t= nfp_net_rx_queue_setup,\n+\t.rx_queue_release\t= nfp_net_rx_queue_release,\n+\t.tx_queue_setup\t\t= nfp_net_nfdk_tx_queue_setup,\n+\t.tx_queue_release\t= nfp_net_nfdk_tx_queue_release,\n+\t.rx_queue_intr_enable   = nfp_rx_queue_intr_enable,\n+\t.rx_queue_intr_disable  = nfp_rx_queue_intr_disable,\n+};\n+\n static inline int\n nfp_net_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev)\n {\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\tbreak;\n \tcase NFP_NET_CFG_VERSION_DP_NFDK:\n \t\tif (NFD_CFG_MAJOR_VERSION_of(hw->ver) < 5) {\n@@ -370,13 +400,13 @@ nfp_net_ethdev_ops_mount(struct nfp_net_hw *hw, struct rte_eth_dev *eth_dev)\n \t\t\t\tNFD_CFG_MAJOR_VERSION_of(hw->ver));\n \t\t\treturn -EINVAL;\n \t\t}\n+\t\teth_dev->dev_ops = &nfp_net_nfdk_eth_dev_ops;\n \t\tbreak;\n \tdefault:\n \t\tPMD_DRV_LOG(ERR, \"The version of firmware is not correct.\");\n \t\treturn -EINVAL;\n \t}\n \n-\teth_dev->dev_ops = &nfp_net_nfd3_eth_dev_ops;\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;\ndiff --git a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c\nindex e83c9dbcaf..ee9ff977cc 100644\n--- a/drivers/net/nfp/nfp_ethdev_vf.c\n+++ b/drivers/net/nfp/nfp_ethdev_vf.c\n@@ -265,6 +265,35 @@ static const struct eth_dev_ops nfp_netvf_nfd3_eth_dev_ops = {\n \t.rx_queue_intr_disable  = nfp_rx_queue_intr_disable,\n };\n \n+static const struct eth_dev_ops nfp_netvf_nfdk_eth_dev_ops = {\n+\t.dev_configure\t\t= nfp_net_configure,\n+\t.dev_start\t\t= nfp_netvf_start,\n+\t.dev_stop\t\t= nfp_netvf_nfd3_stop,\n+\t.dev_set_link_up\t= nfp_netvf_set_link_up,\n+\t.dev_set_link_down\t= nfp_netvf_set_link_down,\n+\t.dev_close\t\t= nfp_netvf_nfd3_close,\n+\t.promiscuous_enable\t= nfp_net_promisc_enable,\n+\t.promiscuous_disable\t= nfp_net_promisc_disable,\n+\t.link_update\t\t= nfp_net_link_update,\n+\t.stats_get\t\t= nfp_net_stats_get,\n+\t.stats_reset\t\t= nfp_net_stats_reset,\n+\t.dev_infos_get\t\t= nfp_net_infos_get,\n+\t.dev_supported_ptypes_get = nfp_net_supported_ptypes_get,\n+\t.mtu_set\t\t= nfp_net_dev_mtu_set,\n+\t.mac_addr_set\t\t= nfp_net_set_mac_addr,\n+\t.vlan_offload_set\t= nfp_net_vlan_offload_set,\n+\t.reta_update\t\t= nfp_net_reta_update,\n+\t.reta_query\t\t= nfp_net_reta_query,\n+\t.rss_hash_update\t= nfp_net_rss_hash_update,\n+\t.rss_hash_conf_get\t= nfp_net_rss_hash_conf_get,\n+\t.rx_queue_setup\t\t= nfp_net_rx_queue_setup,\n+\t.rx_queue_release\t= nfp_net_rx_queue_release,\n+\t.tx_queue_setup\t\t= nfp_net_nfdk_tx_queue_setup,\n+\t.tx_queue_release\t= nfp_net_nfdk_tx_queue_release,\n+\t.rx_queue_intr_enable   = nfp_rx_queue_intr_enable,\n+\t.rx_queue_intr_disable  = nfp_rx_queue_intr_disable,\n+};\n+\n static int\n nfp_netvf_init(struct rte_eth_dev *eth_dev)\n {\n@@ -291,11 +320,6 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev)\n \n \thw = NFP_NET_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private);\n \n-\teth_dev->dev_ops = &nfp_netvf_nfd3_eth_dev_ops;\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 \thw->ctrl_bar = (uint8_t *)pci_dev->mem_resource[0].addr;\n \tif (hw->ctrl_bar == NULL) {\n \t\tPMD_DRV_LOG(ERR,\n@@ -309,6 +333,7 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev)\n \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\tbreak;\n \tcase NFP_NET_CFG_VERSION_DP_NFDK:\n \t\tif (NFD_CFG_MAJOR_VERSION_of(hw->ver) < 5) {\n@@ -316,12 +341,17 @@ nfp_netvf_init(struct rte_eth_dev *eth_dev)\n \t\t\t\tNFD_CFG_MAJOR_VERSION_of(hw->ver));\n \t\t\treturn -EINVAL;\n \t\t}\n+\t\teth_dev->dev_ops = &nfp_netvf_nfdk_eth_dev_ops;\n \t\tbreak;\n \tdefault:\n \t\tPMD_DRV_LOG(ERR, \"The version of firmware is not correct.\");\n \t\treturn -EINVAL;\n \t}\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 \t/* For secondary processes, the primary has done all the work */\n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\n \t\treturn 0;\ndiff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c\nindex 2c9875e829..bf5817db4b 100644\n--- a/drivers/net/nfp/nfp_rxtx.c\n+++ b/drivers/net/nfp/nfp_rxtx.c\n@@ -987,3 +987,156 @@ nfp_net_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pk\n \n \treturn i;\n }\n+\n+static void\n+nfp_net_nfdk_tx_queue_release_mbufs(struct nfp_net_txq *txq)\n+{\n+\tuint32_t i;\n+\n+\tif (txq->ktxbufs == NULL)\n+\t\treturn;\n+\n+\tfor (i = 0; i < txq->tx_count; i++) {\n+\t\tif (txq->ktxbufs[i].mbuf) {\n+\t\t\trte_pktmbuf_free_seg(txq->ktxbufs[i].mbuf);\n+\t\t\ttxq->ktxbufs[i].mbuf = NULL;\n+\t\t}\n+\t}\n+}\n+\n+void\n+nfp_net_nfdk_tx_queue_release(struct rte_eth_dev *dev, uint16_t queue_idx)\n+{\n+\tstruct nfp_net_txq *txq = dev->data->tx_queues[queue_idx];\n+\n+\tif (txq) {\n+\t\tnfp_net_nfdk_tx_queue_release_mbufs(txq);\n+\t\trte_free(txq->ktxbufs);\n+\t\trte_free(txq);\n+\t}\n+}\n+\n+void\n+nfp_net_nfdk_reset_tx_queue(struct nfp_net_txq *txq)\n+{\n+\tnfp_net_nfdk_tx_queue_release_mbufs(txq);\n+\ttxq->wr_p = 0;\n+\ttxq->rd_p = 0;\n+}\n+\n+int\n+nfp_net_nfdk_tx_queue_setup(struct rte_eth_dev *dev,\n+\t\tuint16_t queue_idx,\n+\t\tuint16_t nb_desc,\n+\t\tunsigned int socket_id,\n+\t\tconst struct rte_eth_txconf *tx_conf)\n+{\n+\tconst struct rte_memzone *tz;\n+\tstruct nfp_net_txq *txq;\n+\tuint16_t tx_free_thresh;\n+\tstruct nfp_net_hw *hw;\n+\tuint32_t tx_desc_sz;\n+\n+\thw = NFP_NET_DEV_PRIVATE_TO_HW(dev->data->dev_private);\n+\n+\tPMD_INIT_FUNC_TRACE();\n+\n+\t/* Validating number of descriptors */\n+\ttx_desc_sz = nb_desc * sizeof(struct nfp_net_nfdk_tx_desc);\n+\tif (((NFDK_TX_DESC_PER_SIMPLE_PKT * tx_desc_sz) % NFP_ALIGN_RING_DESC) != 0 ||\n+\t    ((NFDK_TX_DESC_PER_SIMPLE_PKT * nb_desc) % NFDK_TX_DESC_BLOCK_CNT) != 0 ||\n+\t      nb_desc > NFP_NET_MAX_TX_DESC || nb_desc < NFP_NET_MIN_TX_DESC) {\n+\t\tPMD_DRV_LOG(ERR, \"Wrong nb_desc value\");\n+\t\treturn -EINVAL;\n+\t}\n+\n+\ttx_free_thresh = (uint16_t)((tx_conf->tx_free_thresh) ?\n+\t\t\t\ttx_conf->tx_free_thresh :\n+\t\t\t\tDEFAULT_TX_FREE_THRESH);\n+\n+\tif (tx_free_thresh > (nb_desc)) {\n+\t\tPMD_DRV_LOG(ERR,\n+\t\t\t\"tx_free_thresh must be less than the number of TX \"\n+\t\t\t\"descriptors. (tx_free_thresh=%u port=%d \"\n+\t\t\t\"queue=%d)\", (unsigned int)tx_free_thresh,\n+\t\t\tdev->data->port_id, (int)queue_idx);\n+\t\treturn -(EINVAL);\n+\t}\n+\n+\t/*\n+\t * Free memory prior to re-allocation if needed. This is the case after\n+\t * calling nfp_net_stop\n+\t */\n+\tif (dev->data->tx_queues[queue_idx]) {\n+\t\tPMD_TX_LOG(DEBUG, \"Freeing memory prior to re-allocation %d\",\n+\t\t\t\tqueue_idx);\n+\t\tnfp_net_nfdk_tx_queue_release(dev, queue_idx);\n+\t\tdev->data->tx_queues[queue_idx] = NULL;\n+\t}\n+\n+\t/* Allocating tx queue data structure */\n+\ttxq = rte_zmalloc_socket(\"ethdev TX queue\", sizeof(struct nfp_net_txq),\n+\t\t\tRTE_CACHE_LINE_SIZE, socket_id);\n+\tif (txq == NULL) {\n+\t\tPMD_DRV_LOG(ERR, \"Error allocating tx dma\");\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\t/*\n+\t * Allocate TX ring hardware descriptors. A memzone large enough to\n+\t * handle the maximum ring size is allocated in order to allow for\n+\t * resizing in later calls to the queue setup function.\n+\t */\n+\ttz = rte_eth_dma_zone_reserve(dev, \"tx_ring\", queue_idx,\n+\t\t\t\tsizeof(struct nfp_net_nfdk_tx_desc) *\n+\t\t\t\tNFDK_TX_DESC_PER_SIMPLE_PKT *\n+\t\t\t\tNFP_NET_MAX_TX_DESC, NFP_MEMZONE_ALIGN,\n+\t\t\t\tsocket_id);\n+\tif (tz == NULL) {\n+\t\tPMD_DRV_LOG(ERR, \"Error allocating tx dma\");\n+\t\tnfp_net_nfdk_tx_queue_release(dev, queue_idx);\n+\t\treturn -ENOMEM;\n+\t}\n+\n+\ttxq->tx_count = nb_desc * NFDK_TX_DESC_PER_SIMPLE_PKT;\n+\ttxq->tx_free_thresh = tx_free_thresh;\n+\ttxq->tx_pthresh = tx_conf->tx_thresh.pthresh;\n+\ttxq->tx_hthresh = tx_conf->tx_thresh.hthresh;\n+\ttxq->tx_wthresh = tx_conf->tx_thresh.wthresh;\n+\n+\t/* queue mapping based on firmware configuration */\n+\ttxq->qidx = queue_idx;\n+\ttxq->tx_qcidx = queue_idx * hw->stride_tx;\n+\ttxq->qcp_q = hw->tx_bar + NFP_QCP_QUEUE_OFF(txq->tx_qcidx);\n+\n+\ttxq->port_id = dev->data->port_id;\n+\n+\t/* Saving physical and virtual addresses for the TX ring */\n+\ttxq->dma = (uint64_t)tz->iova;\n+\ttxq->ktxds = (struct nfp_net_nfdk_tx_desc *)tz->addr;\n+\n+\t/* mbuf pointers array for referencing mbufs linked to TX descriptors */\n+\ttxq->ktxbufs = rte_zmalloc_socket(\"txq->ktxbufs\",\n+\t\t\t\tsizeof(*txq->ktxbufs) * txq->tx_count,\n+\t\t\t\tRTE_CACHE_LINE_SIZE, socket_id);\n+\n+\tif (txq->ktxbufs == NULL) {\n+\t\tnfp_net_nfdk_tx_queue_release(dev, queue_idx);\n+\t\treturn -ENOMEM;\n+\t}\n+\tPMD_TX_LOG(DEBUG, \"ktxbufs=%p hw_ring=%p dma_addr=0x%\" PRIx64,\n+\t\ttxq->ktxbufs, txq->ktxds, (unsigned long)txq->dma);\n+\n+\tnfp_net_nfdk_reset_tx_queue(txq);\n+\n+\tdev->data->tx_queues[queue_idx] = txq;\n+\ttxq->hw = hw;\n+\t/*\n+\t * Telling the HW about the physical address of the TX ring and number\n+\t * of descriptors in log2 format\n+\t */\n+\tnn_cfg_writeq(hw, NFP_NET_CFG_TXR_ADDR(queue_idx), txq->dma);\n+\tnn_cfg_writeb(hw, NFP_NET_CFG_TXR_SZ(queue_idx), rte_log2_u32(txq->tx_count));\n+\n+\treturn 0;\n+}\ndiff --git a/drivers/net/nfp/nfp_rxtx.h b/drivers/net/nfp/nfp_rxtx.h\nindex 81e2f7560b..cce3e0c0e5 100644\n--- a/drivers/net/nfp/nfp_rxtx.h\n+++ b/drivers/net/nfp/nfp_rxtx.h\n@@ -352,6 +352,13 @@ int nfp_net_nfd3_tx_queue_setup(struct rte_eth_dev *dev, uint16_t queue_idx,\n \t\t\t\t  const struct rte_eth_txconf *tx_conf);\n uint16_t nfp_net_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,\n \t\t\t\t  uint16_t nb_pkts);\n+int nfp_net_nfdk_tx_queue_setup(struct rte_eth_dev *dev,\n+\t\tuint16_t queue_idx,\n+\t\tuint16_t nb_desc,\n+\t\tunsigned int socket_id,\n+\t\tconst struct rte_eth_txconf *tx_conf);\n+void nfp_net_nfdk_tx_queue_release(struct rte_eth_dev *dev, uint16_t queue_idx);\n+void nfp_net_nfdk_reset_tx_queue(struct nfp_net_txq *txq);\n \n #endif /* _NFP_RXTX_H_ */\n /*\n",
    "prefixes": [
        "09/14"
    ]
}