get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 112252,
    "url": "http://patches.dpdk.org/api/patches/112252/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20220602015304.710197-14-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": "<20220602015304.710197-14-jin.liu@corigine.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20220602015304.710197-14-jin.liu@corigine.com",
    "date": "2022-06-02T01:53:03",
    "name": "[13/14] net/nfp: nfdk packet xmit function",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "a880fda206978d0c5918fefac748ed6dd4440992",
    "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/20220602015304.710197-14-jin.liu@corigine.com/mbox/",
    "series": [
        {
            "id": 23295,
            "url": "http://patches.dpdk.org/api/series/23295/?format=api",
            "web_url": "http://patches.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://patches.dpdk.org/series/23295/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/112252/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/112252/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 33906A0548;\n\tThu,  2 Jun 2022 03:55:47 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id BF5E242B93;\n\tThu,  2 Jun 2022 03:55:10 +0200 (CEST)",
            "from NAM11-DM6-obe.outbound.protection.outlook.com\n (mail-dm6nam11on2107.outbound.protection.outlook.com [40.107.223.107])\n by mails.dpdk.org (Postfix) with ESMTP id 3DA4F42B96\n for <dev@dpdk.org>; Thu,  2 Jun 2022 03:55:09 +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:55:08 +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:55:08 +0000"
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=jfKtHvUzIkYNhVcAetfB5WXB73Ivsu/qNQshxbYrTNTc/5NwpRS8Uqlh6uRSkBNA/gJyQT3RFKIWQs8UJ5fwe4arMzCpCPxw4J71yyZbNORVeQoYPlQBM0H2vOKvnuMomqeKe5ijHtYcQB2AMjDN1WeVtJH0Bg+431UFew3J+fh6cOGFGHvmME2uw2FNvjjGFdMcridI4iemHh3V3Jfi9yPZ34V2YkIa341F0GNzuyPFsKoxRpl6vK7ufmQ+IojZQCQxiCicoxAqT9qyIeX72dz5oZANNi6lFK4ccvytLD1K4nadCuqk+2E7nVPojR7dDtfH2O/+f4lvVr8ViZYRNA==",
        "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=tNM/vXhqVcKJmzEiLs/zu9TlQd9swaxZROCdzVl9Jog=;\n b=VThrJh9PLtJzaYH3SUmkmXUK6N7E7W6f5HZdhBuUfXn4bE1mJDLyMVCTd3y4QWVrH4wvyWiCUdEP9M999GUQfou/+F/rAMwnndBgO8PGx4SSLxCY2PTNrQJqRvCpaVaLeU89MgZB+8I5wOZFJd42N8CoU2qPr8n8NEvPqsopczbOy0GLTNVF6u7GNc4mqZ3rdD96Z7PNpuoDMlwNCHJxCwk7HOnklUwv/Z7S6ltrNZ06W5VPvpBHG7d36V4dsdVEUroB8v3iXh1Kuz69RDzXWTa/CD10Ey0/4D43hLV9qqZh3eqZBMmehm8md/D/b1w9EHmSyZjZewsckalamF+pSQ==",
        "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=tNM/vXhqVcKJmzEiLs/zu9TlQd9swaxZROCdzVl9Jog=;\n b=QPVihhDIOvLCl8q8nyfh/pyJWWmv4uG8scqui5EWLHMTp+Ng2R7A8qi3OyoGrk8yzk7tLmIZfi5KYknyNYnE8eo6mOgXTwVgPHwDbbIuHcRMmOJ8qD7ztKnFaSK5DEdnENEyOcnynCIbz4LThBIl/EXsj5uedmC6k8+BhCUCmEA=",
        "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 13/14] net/nfp: nfdk packet xmit function",
        "Date": "Thu,  2 Jun 2022 03:53:03 +0200",
        "Message-Id": "<20220602015304.710197-14-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": "53a60b0c-031d-41a8-5f91-08da443aeb89",
        "X-MS-TrafficTypeDiagnostic": "DM4PR13MB5858:EE_",
        "X-Microsoft-Antispam-PRVS": "\n <DM4PR13MB58580A96C55BD9A4C7730EEB94DE9@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 ihK6jkIFhuL+EbkKSK64ztbBoXtyiprDQJa1/BSgsyMs57hzNZIASeDqtoRSFdIkQZm+KJtcOyD08cl949unw/nVfi9BsV4tMPhEk55ctD8YtJjfA2BMc7u0ivdGTdzHNBhD6OkXL6hlMrmzzmGLckRYgZXzjWN+38ghbHgkITkwDC9smmM8eE+xgVeSV2KjAjJ7/2pm6zz0DYvcIx7Kfpb2g/wTVs+Tsu1gXM1jUsejfM+iLr5RePoDLzFCMC0GKnq+E2B6Hfbz7xILRn70AmYjSKiDolIhFDjTm0/v0c6hm+0wQD8c2ByJkSbDUUCOzzKg5QWfOPXvLaJmUTCy39bGRxXOXE2lyqWmvGJKXqGd9SGUYzJ1VDv+pr6d/0viO/gnPL8exh4FGp3FIiaCOa1DFZ32IEeZJZa/bc/WkesOUeMFaR+qw54UtNv74Xnym1dLz896jPpTgGHLXBpVzeaORQvWQn3w2kq0BA361KBCBvyMZUPi7VrGNBvgYuC7iL9f3E0P8NbLEIsO+UwPcL04pP0QQg1Z/++nT4MoDqBXPSq9sE3ernTXbCCmiqlxVVQarNaVoHPaeKjm/3PCV1HJC83slaTTLlU63MON+dTPAARJp4tQYU53Svl497iCNyVJZ+DMPapjR0lIyqqET8aCg7wgWEJg6QezIRY+w1qTAb3oj/Hczyk7hE+TgjrNWmIKdpzAiDnuz2Yf5WXG7Q==",
        "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)(6666004)(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?/xXklQG3R4qY0ff2GxlnyPU7dwrE?=\n\t=?utf-8?q?ekPOF9FNYuvbau9LkrByb/HM4cim79OrxtyQlejpjILM4zDHgu161VwV2WYnqyJK4?=\n\t=?utf-8?q?3x7wCGIudrtHJS6VLrcqBjh7J+XY7WJVv6cY+we1bWxPT4iDe/OILJvlseyXwlqJM?=\n\t=?utf-8?q?x2B7vt1jbHR8ApIeHjHIIB4enWrmBnWy0QBi4mrY9//xAsMFbVlwygAlsVw55mCpA?=\n\t=?utf-8?q?3hxubZk5BcEO3oLTzsY9IKd8xh9Ar52Zwv6H05+UoNqWaNexzYY+6OlhkGI8njwOs?=\n\t=?utf-8?q?BOuaQAVpNuXbDopomrUGez+s3SPW93Ya77eJ+2u2Ikqd/zi7kmAKXnobofS5gyVGh?=\n\t=?utf-8?q?bST63YU0RokRwcW97cHkgtyLBAPOAjlflRmRwi4U973PGvirop9Qz8qq1lQDBJ7P8?=\n\t=?utf-8?q?1V1MJD+CiKaoZprQE+zksNOMr7d6+uYIsY0j9Ve05vkMlxe2aG/FUfw09hrK8zZC9?=\n\t=?utf-8?q?fzYtGH/xp9mb9uJxdyzjzzYYRDSmKgAIC53lZri+Lij1E74m2MPm/Ln1dtyt5XcAM?=\n\t=?utf-8?q?J95XcXico+dhpDLqZOlknNvIXtr/wznZuRwMo5SDKxUfOQmo+lPbNik3/ODrFYn+x?=\n\t=?utf-8?q?H49zVUfplqm9/JhqLBIKp0EAdvDj0JNF67WwQjUTLRU58rlBCw8tcBv61QTi4ZRtT?=\n\t=?utf-8?q?yNuac3jia+hYELCy3QeWcjFoYrK88/bOK+gJr++7wMznj/sG5qUjip+uXerLXMT6q?=\n\t=?utf-8?q?OjHqAAsrDRTBBHRcF4//C2n82FLlqFe66dIvAPJlAzIvHIsEUiicjW6P4KhO92Hx2?=\n\t=?utf-8?q?zjCJVmRGlM6SxYEsPpwAAufbcFXW7Ab9nS0kInHS40DqjAAh7ToSpKViPer480q2K?=\n\t=?utf-8?q?kjrGwIuvDyr+j1Oqys9VcKyOPa020ojFT73CfyZVd2xsB7bxvbgTbwVvXuyOlBLZX?=\n\t=?utf-8?q?qSU/XzB7wvJaJdCdvZEbcKTwa39QGEK+pwCO7oEDqm5qpREBPektFVol5rsShQaTB?=\n\t=?utf-8?q?fIQuFSjH8JdkaMzvXKL5VCF0WqNBZu2F4MrO+fW9mD0eoRKyCJ4MTGdpGHLxsQsG/?=\n\t=?utf-8?q?sxx/iylBWkalcT7Bd5uZSlP3cmgeFpeL3outge47Crnwditg1YBhZn1TBz7xYy11m?=\n\t=?utf-8?q?JfHfogYBCpbnmQSeDfZl83/+pZwFYPSrpMtNAsarTeeBYTxijsbW6LT1RQmKuYBuS?=\n\t=?utf-8?q?NHNFO7vXYC1vMO4BHzUv8aIIVnnOk4tgRmdO/lB8d1g9iAjpXZICSW2QHiwPgujDE?=\n\t=?utf-8?q?vX7ZCGzL0q+P6uAOvUM2nFAOLFIbNmEO6CHzJcrlbqw2Cdaqpoi3GCyIRUim9CUVV?=\n\t=?utf-8?q?1hV5Ra+7gRldwaRoiZvDMlLZkb2m+8sQZL9AYsgSVlAF03o/X4ix/GPWukAMM9eCH?=\n\t=?utf-8?q?cQoDRja9iGBs1r1+GU6sWN4Poc6adSP/F/wePzHBgPQbH7T1uKYUwd+hjiRCc7wOX?=\n\t=?utf-8?q?ROStA6d77EyEOA1HPn+z3nQ5byGDh2PJYSU8Qg1pF2eULBVgp4CJLcHc5bXejjNvb?=\n\t=?utf-8?q?Aji99cy6mEeTp73UoDe3mTJSHL1sqPm2JwiOlc8RsX9E35HxvhvDOkhoUOHO7Lrxd?=\n\t=?utf-8?q?ir82C09ykZmZs990dKppCj6nuy57WGwNcK2d+1bPreVbb/2lYj7P5SsJ/0KuBdKzQ?=\n\t=?utf-8?q?lFK3is6KqWx2lYGxRwa+xjz9gM+nTa/tYzrOXinSBpJSWQJDDmASPXwfZkRR+Pw3F?=\n\t=?utf-8?q?hn+CRipJfdI0yxWy9RJYC/BRG9oJsn8g=3D=3D?=",
        "X-OriginatorOrg": "corigine.com",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 53a60b0c-031d-41a8-5f91-08da443aeb89",
        "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:55:08.0224 (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 nhlXjMPkVwdfiTEPWu3lyTM6GZY6S30YJWrqBi+6bFEvFYezyPSAJ6vjnSy+lqVMHPcun3mQoLau0Cdw/4WaKQ==",
        "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": "Implement NFP3800 card packet transmit 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    |   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 4e3a6a964d..238b2b5451 100644\n--- a/drivers/net/nfp/nfp_ethdev.c\n+++ b/drivers/net/nfp/nfp_ethdev.c\n@@ -462,6 +462,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@@ -470,6 +471,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@@ -478,7 +480,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 a5c6aceb32..bb8206c4f6 100644\n--- a/drivers/net/nfp/nfp_ethdev_vf.c\n+++ b/drivers/net/nfp/nfp_ethdev_vf.c\n@@ -365,6 +365,7 @@ nfp_netvf_init(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@@ -373,6 +374,7 @@ nfp_netvf_init(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@@ -381,7 +383,6 @@ nfp_netvf_init(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 \t/* For secondary processes, the primary has done all the work */\n \tif (rte_eal_process_type() != RTE_PROC_PRIMARY)\ndiff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c\nindex bf5817db4b..fd3ee40aa5 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@@ -1140,3 +1143,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->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+\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->ktxbufs[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->ktxbufs[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 cce3e0c0e5..e58127b66e 100644\n--- a/drivers/net/nfp/nfp_rxtx.h\n+++ b/drivers/net/nfp/nfp_rxtx.h\n@@ -359,6 +359,9 @@ int nfp_net_nfdk_tx_queue_setup(struct rte_eth_dev *dev,\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+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": [
        "13/14"
    ]
}