get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 66697,
    "url": "http://patches.dpdk.org/api/patches/66697/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1584351224-23500-9-git-send-email-hkalra@marvell.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": "<1584351224-23500-9-git-send-email-hkalra@marvell.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1584351224-23500-9-git-send-email-hkalra@marvell.com",
    "date": "2020-03-16T09:33:44",
    "name": "[8/8] net/octeontx: support Rx Tx checksum offload",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "2a425224ce6461c5f19bb55e230f6280cfca56f8",
    "submitter": {
        "id": 1182,
        "url": "http://patches.dpdk.org/api/people/1182/?format=api",
        "name": "Harman Kalra",
        "email": "hkalra@marvell.com"
    },
    "delegate": {
        "id": 310,
        "url": "http://patches.dpdk.org/api/users/310/?format=api",
        "username": "jerin",
        "first_name": "Jerin",
        "last_name": "Jacob",
        "email": "jerinj@marvell.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1584351224-23500-9-git-send-email-hkalra@marvell.com/mbox/",
    "series": [
        {
            "id": 8923,
            "url": "http://patches.dpdk.org/api/series/8923/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=8923",
            "date": "2020-03-16T09:33:36",
            "name": "add new features to octeontx PMD",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/8923/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/66697/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/66697/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 084A2A0559;\n\tMon, 16 Mar 2020 10:35:43 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 66BE71C0C2;\n\tMon, 16 Mar 2020 10:35:00 +0100 (CET)",
            "from mx0b-0016f401.pphosted.com (mx0a-0016f401.pphosted.com\n [67.231.148.174]) by dpdk.org (Postfix) with ESMTP id 88AAC1C0B2\n for <dev@dpdk.org>; Mon, 16 Mar 2020 10:34:55 +0100 (CET)",
            "from pps.filterd (m0045849.ppops.net [127.0.0.1])\n by mx0a-0016f401.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id\n 02G9VOGj024313; Mon, 16 Mar 2020 02:34:54 -0700",
            "from sc-exch01.marvell.com ([199.233.58.181])\n by mx0a-0016f401.pphosted.com with ESMTP id 2yrvmqppyb-1\n (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT);\n Mon, 16 Mar 2020 02:34:54 -0700",
            "from SC-EXCH01.marvell.com (10.93.176.81) by SC-EXCH01.marvell.com\n (10.93.176.81) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 16 Mar\n 2020 02:34:52 -0700",
            "from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.170)\n by SC-EXCH01.marvell.com (10.93.176.81) with Microsoft SMTP Server (TLS) id\n 15.0.1497.2 via Frontend Transport; Mon, 16 Mar 2020 02:34:52 -0700",
            "from MN2PR18MB2848.namprd18.prod.outlook.com (2603:10b6:208:38::19)\n by BYASPR01MB9.namprd18.prod.outlook.com (2603:10b6:a02:92::32) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2814.14; Mon, 16 Mar\n 2020 09:34:51 +0000",
            "from MN2PR18MB2848.namprd18.prod.outlook.com\n ([fe80::f829:3e55:94f6:4efb]) by MN2PR18MB2848.namprd18.prod.outlook.com\n ([fe80::f829:3e55:94f6:4efb%5]) with mapi id 15.20.2814.021; Mon, 16 Mar 2020\n 09:34:51 +0000",
            "from hkarlara-OptiPlex-3046.marvell.com (115.113.156.2) by\n BMXPR01CA0006.INDPRD01.PROD.OUTLOOK.COM (2603:1096:b00:d::16) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id\n 15.20.2814.13 via Frontend Transport; Mon, 16 Mar 2020 09:34:45 +0000"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.com;\n h=from : to : cc :\n subject : date : message-id : in-reply-to : references : content-type :\n mime-version; s=pfpt0818; bh=gV3HB7a7AyAwGdjswMIO8CRBXwaYE69hzMAqCcJyP4o=;\n b=TOV8dEw4jxLgfTlKVe2uEyivD06KeCuJmz+YxYWj8OpJYBs6T48Izw0hDNNebyKg1vru\n 1cVNxP0m++pJgm62OGSikDfSPhz16aonjpya41y8DQCnbFklSHHxsLwb1eR9+lQdukQO\n I+WT2SJw06+KGyPBj9g9+EBip+QOMVLQ+vQcRjk27j0MawWlRlswyOHo430J28bFYd90\n Z9nXvi7uiyUv7WR6l1K8CT34+hLIshJ0hU2+lSWMOsBpNPoRu1zCCaVBya+KOt8RwK4y\n datIah7nPDN/Jsl5caNDeT/zlmczoy+4gIHuEAK+X0ANj9TYbsVkEdpeAi7IVGxeWuMJ 1A==",
            "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=gV3HB7a7AyAwGdjswMIO8CRBXwaYE69hzMAqCcJyP4o=;\n b=elBIGMaxp/w75H2j/ZxKEMSGolY49acyUc+bEcGNRhEA0xNcEObYu7BvWt/+Z5Qhyla76m4i3cQjypVawhOsqK2W0DIDVwAJ2Fvybl0lNECc2xSCSel7mxAMOmgRhlq0RKorJz94h7BFdPqqFOkiU3kR+YNKAxHmoagnk+rk9GM="
        ],
        "ARC-Seal": "i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;\n b=UTt7wz2unu3dC/EyvP/GQLMc7KfsUEqdD7VEMa1w7ySMpO/h1cQKo8NuYmOZFamq9IMmQR3Qc4vAiAoVIcY1yIpiJIhb88TGg6mmvWUHTxB3USixhJgdURi4xWuIvjX+v/NzTue1SKGlJZStrK97892OuqB+YTSMEGH8YPj5hD5woEXjHozR0ixx9Xrdr4OK7vqYRpvfEX9RRMf+xZRlbdlentAncZ9tfZcF7On26dPqoNpzMBvRMtbM5p+0NJjjNJ8dzQYHu6OBsKk1ySwPgtvK57BRbH/rVNm+e38O+093go7uK+OgG1Y9qoRliA6dSFmqF1JBuM21ANMoMaSCxw==",
        "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-SenderADCheck;\n bh=gV3HB7a7AyAwGdjswMIO8CRBXwaYE69hzMAqCcJyP4o=;\n b=gzglFx70ansecqY84peHzyQtXGMaVhS2JZpQOcL8eXTIsrniW5r/RMG/e+vHkPuOjauZX+AV0DgU1HLxu7j+eiN+sDk/8d6KUzFdaLh1qt+a7v6NuX2P0ywDFSIYZ2EIvtawweTsR9Xq6uwY6wp+vKnGSGO7TAP57rEBC2WzkKwt4NsYJSn1qojfbz0xp5LdNsycRNvpZc78Yj2V4X4f5N5zd3x2r98xLhKmTsWGZ+j+PeafxBp5xMk7/vEY3bx05i2+Pf/L8eg6rJa9HuMOXSn2uv0RO91MxJ0mX4X5SS3gZcDcSsW6jOIwz1yDcNoSGHUFn9UE0d3ivKNxGnewbQ==",
        "ARC-Authentication-Results": "i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com;\n dkim=pass header.d=marvell.com; arc=none",
        "From": "Harman Kalra <hkalra@marvell.com>",
        "To": "<jerinj@marvell.com>, <john.mcnamara@intel.com>,\n <marko.kovacevic@intel.com>",
        "CC": "<dev@dpdk.org>, <vattunuru@marvell.com>, Harman Kalra <hkalra@marvell.com>",
        "Date": "Mon, 16 Mar 2020 15:03:44 +0530",
        "Message-ID": "<1584351224-23500-9-git-send-email-hkalra@marvell.com>",
        "X-Mailer": [
            "git-send-email 2.7.4",
            "git-send-email 2.7.4"
        ],
        "In-Reply-To": "<1584351224-23500-1-git-send-email-hkalra@marvell.com>",
        "References": "<1584351224-23500-1-git-send-email-hkalra@marvell.com>",
        "Content-Type": "text/plain",
        "X-ClientProxiedBy": "BMXPR01CA0006.INDPRD01.PROD.OUTLOOK.COM\n (2603:1096:b00:d::16) To MN2PR18MB2848.namprd18.prod.outlook.com\n (2603:10b6:208:38::19)",
        "MIME-Version": "1.0",
        "X-MS-Exchange-MessageSentRepresentingType": "1",
        "X-Originating-IP": "[115.113.156.2]",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-Office365-Filtering-Correlation-Id": "0f198454-e98a-404c-6c23-08d7c98d443e",
        "X-MS-TrafficTypeDiagnostic": "BYASPR01MB9:",
        "X-MS-Exchange-Transport-Forked": "True",
        "X-Microsoft-Antispam-PRVS": "\n <BYASPR01MB98F3CA6E61B26C80C99AFC5F90@BYASPR01MB9.namprd18.prod.outlook.com>",
        "X-MS-Oob-TLC-OOBClassifiers": "OLM:341;",
        "X-Forefront-PRVS": "03449D5DD1",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n SFS:(10009020)(4636009)(366004)(396003)(346002)(39860400002)(376002)(136003)(199004)(6486002)(4326008)(36756003)(2906002)(107886003)(30864003)(478600001)(186003)(16526019)(5660300002)(86362001)(2616005)(956004)(26005)(66946007)(81166006)(81156014)(8936002)(8676002)(66556008)(66476007)(55236004)(52116002)(316002)(7696005);\n DIR:OUT; SFP:1101; SCL:1; SRVR:BYASPR01MB9;\n H:MN2PR18MB2848.namprd18.prod.outlook.com; FPR:; SPF:None; LANG:en;\n PTR:InfoNoRecords; A:1;",
        "Received-SPF": "None (protection.outlook.com: marvell.com does not designate\n permitted sender hosts)",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-Microsoft-Antispam": "BCL:0;",
        "X-Microsoft-Antispam-Message-Info": "\n cd5jChQ7Jusnv94C3HZJSmzCFRqv9HRsIEcgcg1j1mfFsX3lSInyPOhlexxAzFEuV4mz91NYNItEgFUZLAKtLpT6ECNgssF4q4PYPx9WcPLuavZcehdGL3nu9TeZkV5Wxozl5oV1USHKq2DVTwrQRFiCp8aCk7I3QkBckT7izJXeKMkbgcbxOqsQa1PkCBsAdtXpS53GxSIL93jtQHgT+JksmrpT4XbMC4Ex3KeJsaaPITWbd9zBDov2jRYgBuAWozakE/y1/pNyITdr9yDx2hWQ1RCEmIxM6zH/Wt/8sbrOdqolQLIO4N++yIQ6UTTa95rzRkCc2l9uGBRfhjGwco+VDTdFKW3UePfoGdySfA3A6qBdSdxlrAud345cbCxv2aMw4JDHbhCJAbf+fqNVuK4QZyO5ibwohINBo2PIrwYVw8hIBb8hK56tL2piM/NR",
        "X-MS-Exchange-AntiSpam-MessageData": "\n a8moa4gj8T3kn6mvOVZQFw8uhS88Fed+/3gGyYegEdYpeZDCT/HQLuMJTMcLW3C+Og2/a29Y3VLh19QFo0OiTIE0Y6UMzaIgdg3Q3NY8LVcPn5C6+HwCI2wvYy0miNTlnRbOIomBbl3Ep6j6xwWNYQ==",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n 0f198454-e98a-404c-6c23-08d7c98d443e",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "16 Mar 2020 09:34:47.0207 (UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-CrossTenant-Id": "70e1fb47-1155-421d-87fc-2e58f638b6e0",
        "X-MS-Exchange-CrossTenant-MailboxType": "HOSTED",
        "X-MS-Exchange-CrossTenant-UserPrincipalName": "\n KunwmFy3Ff61oAsVO6aMQUW31+sP/yuLTJEd98U/9LjhXrQKLZJwJcpK7c39y+P7Dk8mvevJeB48tYhIIX7t5Q==",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BYASPR01MB9",
        "X-OriginatorOrg": "marvell.com",
        "X-Proofpoint-Virus-Version": "vendor=fsecure engine=2.50.10434:6.0.138, 18.0.572\n definitions=2020-03-16_02:2020-03-12,\n 2020-03-16 signatures=0",
        "Subject": "[dpdk-dev] [PATCH 8/8] net/octeontx: support Rx Tx checksum offload",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "This patch implements rx/tx checksum offload. In case of\nwrong checksum received (inner/outer l3/l4) it reports the\ncorresponding layer which has bad checksum and also corrects\nit if hw checksum is enabled on tx side.\n\nSigned-off-by: Harman Kalra <hkalra@marvell.com>\n---\n doc/guides/nics/features/octeontx.ini  |   4 +\n drivers/net/octeontx/octeontx_ethdev.c |  22 ++-\n drivers/net/octeontx/octeontx_ethdev.h |  21 ++-\n drivers/net/octeontx/octeontx_rxtx.c   |  10 +-\n drivers/net/octeontx/octeontx_rxtx.h   | 194 +++++++++++++++++++++++--\n 5 files changed, 227 insertions(+), 24 deletions(-)",
    "diff": "diff --git a/doc/guides/nics/features/octeontx.ini b/doc/guides/nics/features/octeontx.ini\nindex 6049c1c43..8a95c216c 100644\n--- a/doc/guides/nics/features/octeontx.ini\n+++ b/doc/guides/nics/features/octeontx.ini\n@@ -17,6 +17,10 @@ Unicast MAC filter   = Y\n VLAN filter          = Y\n VLAN offload         = P\n CRC offload          = Y\n+L3 checksum offload  = Y\n+L4 checksum offload  = Y\n+Inner L3 checksum    = Y\n+Inner L4 checksum    = Y\n Packet type parsing  = Y\n Flow control         = Y\n Basic stats          = Y\ndiff --git a/drivers/net/octeontx/octeontx_ethdev.c b/drivers/net/octeontx/octeontx_ethdev.c\nindex 191869683..ea3b278a1 100644\n--- a/drivers/net/octeontx/octeontx_ethdev.c\n+++ b/drivers/net/octeontx/octeontx_ethdev.c\n@@ -370,6 +370,16 @@ octeontx_tx_offload_flags(struct rte_eth_dev *eth_dev)\n \tstruct octeontx_nic *nic = octeontx_pmd_priv(eth_dev);\n \tuint16_t flags = 0;\n \n+\tif (nic->tx_offloads & DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM ||\n+\t    nic->tx_offloads & DEV_TX_OFFLOAD_OUTER_UDP_CKSUM)\n+\t\tflags |= OCCTX_TX_OFFLOAD_OL3_OL4_CSUM_F;\n+\n+\tif (nic->tx_offloads & DEV_TX_OFFLOAD_IPV4_CKSUM ||\n+\t    nic->tx_offloads & DEV_TX_OFFLOAD_TCP_CKSUM ||\n+\t    nic->tx_offloads & DEV_TX_OFFLOAD_UDP_CKSUM ||\n+\t    nic->tx_offloads & DEV_TX_OFFLOAD_SCTP_CKSUM)\n+\t\tflags |= OCCTX_TX_OFFLOAD_L3_L4_CSUM_F;\n+\n \tif (!(nic->tx_offloads & DEV_TX_OFFLOAD_MBUF_FAST_FREE))\n \t\tflags |= OCCTX_TX_OFFLOAD_MBUF_NOFF_F;\n \n@@ -383,13 +393,15 @@ static uint16_t\n octeontx_rx_offload_flags(struct rte_eth_dev *eth_dev)\n {\n \tstruct octeontx_nic *nic = octeontx_pmd_priv(eth_dev);\n-\tstruct rte_eth_dev_data *data = eth_dev->data;\n-\tstruct rte_eth_conf *conf = &data->dev_conf;\n-\tstruct rte_eth_rxmode *rxmode = &conf->rxmode;\n \tuint16_t flags = 0;\n \n-\tif (rxmode->mq_mode == ETH_MQ_RX_RSS)\n-\t\tflags |= OCCTX_RX_OFFLOAD_RSS_F;\n+\tif (nic->rx_offloads & (DEV_RX_OFFLOAD_TCP_CKSUM |\n+\t\t\t DEV_RX_OFFLOAD_UDP_CKSUM))\n+\t\tflags |= OCCTX_RX_OFFLOAD_CSUM_F;\n+\n+\tif (nic->rx_offloads & (DEV_RX_OFFLOAD_IPV4_CKSUM |\n+\t\t\t\tDEV_RX_OFFLOAD_OUTER_IPV4_CKSUM))\n+\t\tflags |= OCCTX_RX_OFFLOAD_CSUM_F;\n \n \tif (nic->rx_offloads & DEV_RX_OFFLOAD_SCATTER) {\n \t\tflags |= OCCTX_RX_MULTI_SEG_F;\ndiff --git a/drivers/net/octeontx/octeontx_ethdev.h b/drivers/net/octeontx/octeontx_ethdev.h\nindex dc53b53be..7246fb6d1 100644\n--- a/drivers/net/octeontx/octeontx_ethdev.h\n+++ b/drivers/net/octeontx/octeontx_ethdev.h\n@@ -53,13 +53,24 @@\n \n #define OCCTX_MAX_MTU\t\t(OCCTX_MAX_FRS - OCCTX_L2_OVERHEAD)\n \n-#define OCTEONTX_RX_OFFLOADS\t\t(DEV_RX_OFFLOAD_CHECKSUM     | \\\n-\t\t\t\t\t DEV_RX_OFFLOAD_SCATTER\t     | \\\n-\t\t\t\t\t DEV_RX_OFFLOAD_JUMBO_FRAME  | \\\n+#define OCTEONTX_RX_OFFLOADS\t\t(\t\t\t\t   \\\n+\t\t\t\t\t DEV_RX_OFFLOAD_CHECKSUM\t | \\\n+\t\t\t\t\t DEV_RX_OFFLOAD_SCTP_CKSUM       | \\\n+\t\t\t\t\t DEV_RX_OFFLOAD_OUTER_IPV4_CKSUM | \\\n+\t\t\t\t\t DEV_RX_OFFLOAD_SCATTER\t         | \\\n+\t\t\t\t\t DEV_RX_OFFLOAD_SCATTER\t\t | \\\n+\t\t\t\t\t DEV_RX_OFFLOAD_JUMBO_FRAME\t | \\\n \t\t\t\t\t DEV_RX_OFFLOAD_VLAN_FILTER)\n \n-#define OCTEONTX_TX_OFFLOADS\t\t(DEV_TX_OFFLOAD_MT_LOCKFREE    |  \\\n-\t\t\t\t\t DEV_TX_OFFLOAD_MBUF_FAST_FREE |  \\\n+#define OCTEONTX_TX_OFFLOADS\t\t(\t\t\t\t   \\\n+\t\t\t\t\t DEV_TX_OFFLOAD_MBUF_FAST_FREE\t | \\\n+\t\t\t\t\t DEV_TX_OFFLOAD_MT_LOCKFREE\t | \\\n+\t\t\t\t\t DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM | \\\n+\t\t\t\t\t DEV_TX_OFFLOAD_OUTER_UDP_CKSUM\t | \\\n+\t\t\t\t\t DEV_TX_OFFLOAD_IPV4_CKSUM\t | \\\n+\t\t\t\t\t DEV_TX_OFFLOAD_TCP_CKSUM\t | \\\n+\t\t\t\t\t DEV_TX_OFFLOAD_UDP_CKSUM\t | \\\n+\t\t\t\t\t DEV_TX_OFFLOAD_SCTP_CKSUM\t | \\\n \t\t\t\t\t DEV_TX_OFFLOAD_MULTI_SEGS)\n \n static inline struct octeontx_nic *\ndiff --git a/drivers/net/octeontx/octeontx_rxtx.c b/drivers/net/octeontx/octeontx_rxtx.c\nindex c817f7179..d2453ba26 100644\n--- a/drivers/net/octeontx/octeontx_rxtx.c\n+++ b/drivers/net/octeontx/octeontx_rxtx.c\n@@ -41,7 +41,7 @@ octeontx_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts)\n \treturn count; /* return number of pkts received */\n }\n \n-#define T(name, f1, f0, sz, flags)\t\t\t\t\t\\\n+#define T(name, f3, f2, f1, f0, sz, flags)\t\t\t\t\\\n static uint16_t __rte_noinline\t__hot\t\t\t\t\t\\\n octeontx_xmit_pkts_ ##name(void *tx_queue,\t\t\t\t\\\n \t\t\tstruct rte_mbuf **tx_pkts, uint16_t pkts)\t\\\n@@ -60,9 +60,9 @@ octeontx_set_tx_function(struct rte_eth_dev *dev)\n {\n \tstruct octeontx_nic *nic = octeontx_pmd_priv(dev);\n \n-\tconst eth_tx_burst_t tx_burst_func[2][2] = {\n-#define T(name, f1, f0, sz, flags)\t\t\t\\\n-\t[f1][f0] =  octeontx_xmit_pkts_ ##name,\n+\tconst eth_tx_burst_t tx_burst_func[2][2][2][2] = {\n+#define T(name, f3, f2, f1, f0, sz, flags)\t\t\t\\\n+\t[f3][f2][f1][f0] =  octeontx_xmit_pkts_ ##name,\n \n OCCTX_TX_FASTPATH_MODES\n #undef T\n@@ -70,5 +70,7 @@ OCCTX_TX_FASTPATH_MODES\n \n \tdev->tx_pkt_burst = tx_burst_func\n \t\t[!!(nic->tx_offload_flags & OCCTX_TX_OFFLOAD_MBUF_NOFF_F)]\n+\t\t[!!(nic->tx_offload_flags & OCCTX_TX_OFFLOAD_OL3_OL4_CSUM_F)]\n+\t\t[!!(nic->tx_offload_flags & OCCTX_TX_OFFLOAD_L3_L4_CSUM_F)]\n \t\t[!!(nic->tx_offload_flags & OCCTX_TX_MULTI_SEG_F)];\n }\ndiff --git a/drivers/net/octeontx/octeontx_rxtx.h b/drivers/net/octeontx/octeontx_rxtx.h\nindex cc044dd79..acc1f5cb8 100644\n--- a/drivers/net/octeontx/octeontx_rxtx.h\n+++ b/drivers/net/octeontx/octeontx_rxtx.h\n@@ -18,17 +18,65 @@\n #define BIT(nr) (1UL << (nr))\n \n #define OCCTX_RX_OFFLOAD_NONE\t\t(0)\n-#define OCCTX_RX_OFFLOAD_RSS_F          BIT(0)\n-#define OCCTX_RX_VLAN_FLTR_F            BIT(1)\n-#define OCCTX_RX_MULTI_SEG_F\t\tBIT(15)\n+#define OCCTX_RX_MULTI_SEG_F\t\tBIT(0)\n+#define OCCTX_RX_OFFLOAD_CSUM_F         BIT(1)\n+#define OCCTX_RX_VLAN_FLTR_F            BIT(2)\n \n #define OCCTX_TX_OFFLOAD_NONE\t\t(0)\n+#define OCCTX_TX_MULTI_SEG_F\t\tBIT(0)\n+#define OCCTX_TX_OFFLOAD_L3_L4_CSUM_F\tBIT(1)\n+#define OCCTX_TX_OFFLOAD_OL3_OL4_CSUM_F\tBIT(2)\n #define OCCTX_TX_OFFLOAD_MBUF_NOFF_F\tBIT(3)\n \n-#define OCCTX_TX_MULTI_SEG_F\t\tBIT(15)\n /* Packet type table */\n #define PTYPE_SIZE\tOCCTX_PKI_LTYPE_LAST\n \n+/* octeontx send header sub descriptor structure */\n+RTE_STD_C11\n+union octeontx_send_hdr_w0_u {\n+\tuint64_t u;\n+\tstruct {\n+\t\tuint64_t total   : 16;\n+\t\tuint64_t markptr : 8;\n+\t\tuint64_t l3ptr   : 8;\n+\t\tuint64_t l4ptr   : 8;\n+\t\tuint64_t ii\t : 1;\n+\t\tuint64_t shp_dis : 1;\n+\t\tuint64_t ckle    : 1;\n+\t\tuint64_t cklf    : 2;\n+\t\tuint64_t ckl3    : 1;\n+\t\tuint64_t ckl4    : 2;\n+\t\tuint64_t p\t : 1;\n+\t\tuint64_t format\t : 7;\n+\t\tuint64_t tstamp  : 1;\n+\t\tuint64_t tso_eom : 1;\n+\t\tuint64_t df\t : 1;\n+\t\tuint64_t tso\t : 1;\n+\t\tuint64_t n2\t : 1;\n+\t\tuint64_t scntn1\t : 3;\n+\t};\n+};\n+\n+RTE_STD_C11\n+union octeontx_send_hdr_w1_u {\n+\tuint64_t u;\n+\tstruct {\n+\t\tuint64_t tso_mss : 14;\n+\t\tuint64_t shp_ra  : 2;\n+\t\tuint64_t tso_sb  : 8;\n+\t\tuint64_t leptr   : 8;\n+\t\tuint64_t lfptr   : 8;\n+\t\tuint64_t shp_chg : 9;\n+\t\tuint64_t tso_fn  : 7;\n+\t\tuint64_t l2len   : 8;\n+\t};\n+};\n+\n+struct octeontx_send_hdr_s {\n+\tunion octeontx_send_hdr_w0_u w0;\n+\tunion octeontx_send_hdr_w1_u w1;\n+};\n+\n static const uint32_t __rte_cache_aligned\n ptype_table[PTYPE_SIZE][PTYPE_SIZE][PTYPE_SIZE] = {\n \t[LC_NONE][LE_NONE][LF_NONE] = RTE_PTYPE_UNKNOWN,\n@@ -182,6 +230,90 @@ octeontx_prefree_seg(struct rte_mbuf *m)\n \treturn 1;\n }\n \n+static __rte_always_inline void\n+octeontx_tx_checksum_offload(uint64_t *cmd_buf, const uint16_t flags,\n+\t\t\t     struct rte_mbuf *m)\n+{\n+\tstruct octeontx_send_hdr_s *send_hdr =\n+\t\t\t\t(struct octeontx_send_hdr_s *)cmd_buf;\n+\tuint64_t ol_flags = m->ol_flags;\n+\n+\t/* PKO Checksum L4 Algorithm Enumeration\n+\t * 0x0 - No checksum\n+\t * 0x1 - UDP L4 checksum\n+\t * 0x2 - TCP L4 checksum\n+\t * 0x3 - SCTP L4 checksum\n+\t */\n+\tconst uint8_t csum = (!(((ol_flags ^ PKT_TX_UDP_CKSUM) >> 52) & 0x3) +\n+\t\t      (!(((ol_flags ^ PKT_TX_TCP_CKSUM) >> 52) & 0x3) * 2) +\n+\t\t      (!(((ol_flags ^ PKT_TX_SCTP_CKSUM) >> 52) & 0x3) * 3));\n+\n+\tconst uint8_t is_tunnel_parsed = (!!(ol_flags & PKT_TX_TUNNEL_GTP) ||\n+\t\t\t\t      !!(ol_flags & PKT_TX_TUNNEL_VXLAN_GPE) ||\n+\t\t\t\t      !!(ol_flags & PKT_TX_TUNNEL_VXLAN) ||\n+\t\t\t\t      !!(ol_flags & PKT_TX_TUNNEL_GRE) ||\n+\t\t\t\t      !!(ol_flags & PKT_TX_TUNNEL_GENEVE) ||\n+\t\t\t\t      !!(ol_flags & PKT_TX_TUNNEL_IP) ||\n+\t\t\t\t      !!(ol_flags & PKT_TX_TUNNEL_IPIP));\n+\n+\tconst uint8_t csum_outer = (!!(ol_flags & PKT_TX_OUTER_UDP_CKSUM) ||\n+\t\t\t\t    !!(ol_flags & PKT_TX_TUNNEL_UDP));\n+\tconst uint8_t outer_l2_len = m->outer_l2_len;\n+\tconst uint8_t l2_len = m->l2_len;\n+\n+\tif ((flags & OCCTX_TX_OFFLOAD_OL3_OL4_CSUM_F) &&\n+\t    (flags & OCCTX_TX_OFFLOAD_L3_L4_CSUM_F)) {\n+\t\tif (is_tunnel_parsed) {\n+\t\t\t/* Outer L3 */\n+\t\t\tsend_hdr->w0.l3ptr = outer_l2_len;\n+\t\t\tsend_hdr->w0.l4ptr = outer_l2_len + m->outer_l3_len;\n+\t\t\t/* Set clk3 for PKO to calculate IPV4 header checksum */\n+\t\t\tsend_hdr->w0.ckl3 = !!(ol_flags & PKT_TX_OUTER_IPV4);\n+\n+\t\t\t/* Outer L4 */\n+\t\t\tsend_hdr->w0.ckl4 = csum_outer;\n+\n+\t\t\t/* Inner L3 */\n+\t\t\tsend_hdr->w1.leptr = send_hdr->w0.l4ptr + l2_len;\n+\t\t\tsend_hdr->w1.lfptr = send_hdr->w1.leptr + m->l3_len;\n+\t\t\t/* Set clke for PKO to calculate inner IPV4 header\n+\t\t\t * checksum.\n+\t\t\t */\n+\t\t\tsend_hdr->w0.ckle = !!(ol_flags & PKT_TX_IPV4);\n+\n+\t\t\t/* Inner L4 */\n+\t\t\tsend_hdr->w0.cklf = csum;\n+\t\t} else {\n+\t\t\t/* Inner L3 */\n+\t\t\tsend_hdr->w0.l3ptr = l2_len;\n+\t\t\tsend_hdr->w0.l4ptr = l2_len + m->l3_len;\n+\t\t\t/* Set clk3 for PKO to calculate IPV4 header checksum */\n+\t\t\tsend_hdr->w0.ckl3 = !!(ol_flags & PKT_TX_IPV4);\n+\n+\t\t\t/* Inner L4 */\n+\t\t\tsend_hdr->w0.ckl4 = csum;\n+\t\t}\n+\t} else if (flags & OCCTX_TX_OFFLOAD_OL3_OL4_CSUM_F) {\n+\t\t/* Outer L3 */\n+\t\tsend_hdr->w0.l3ptr = outer_l2_len;\n+\t\tsend_hdr->w0.l4ptr = outer_l2_len + m->outer_l3_len;\n+\t\t/* Set clk3 for PKO to calculate IPV4 header checksum */\n+\t\tsend_hdr->w0.ckl3 = !!(ol_flags & PKT_TX_OUTER_IPV4);\n+\n+\t\t/* Outer L4 */\n+\t\tsend_hdr->w0.ckl4 = csum_outer;\n+\t} else if (flags & OCCTX_TX_OFFLOAD_L3_L4_CSUM_F) {\n+\t\t/* Inner L3 */\n+\t\tsend_hdr->w0.l3ptr = l2_len;\n+\t\tsend_hdr->w0.l4ptr = l2_len + m->l3_len;\n+\t\t/* Set clk3 for PKO to calculate IPV4 header checksum */\n+\t\tsend_hdr->w0.ckl3 = !!(ol_flags & PKT_TX_IPV4);\n+\n+\t\t/* Inner L4 */\n+\t\tsend_hdr->w0.ckl4 = csum;\n+\t}\n+}\n+\n static __rte_always_inline uint16_t\n __octeontx_xmit_prepare(struct rte_mbuf *tx_pkt, uint64_t *cmd_buf,\n \t\t\tconst uint16_t flag)\n@@ -192,6 +324,11 @@ __octeontx_xmit_prepare(struct rte_mbuf *tx_pkt, uint64_t *cmd_buf,\n \tcmd_buf[nb_desc++] = tx_pkt->data_len & 0xffff;\n \tcmd_buf[nb_desc++] = 0x0;\n \n+\t/* Enable tx checksum offload */\n+\tif ((flag & OCCTX_TX_OFFLOAD_OL3_OL4_CSUM_F) ||\n+\t    (flag & OCCTX_TX_OFFLOAD_L3_L4_CSUM_F))\n+\t\tocteontx_tx_checksum_offload(cmd_buf, flag, tx_pkt);\n+\n \t/* SEND_HDR[DF] bit controls if buffer is to be freed or\n \t * not, as SG_DESC[I] and SEND_HDR[II] are clear.\n \t */\n@@ -230,6 +367,11 @@ __octeontx_xmit_mseg_prepare(struct rte_mbuf *tx_pkt, uint64_t *cmd_buf,\n \tcmd_buf[nb_desc++] = tx_pkt->pkt_len & 0xffff;\n \tcmd_buf[nb_desc++] = 0x0;\n \n+\t/* Enable tx checksum offload */\n+\tif ((flag & OCCTX_TX_OFFLOAD_OL3_OL4_CSUM_F) ||\n+\t    (flag & OCCTX_TX_OFFLOAD_L3_L4_CSUM_F))\n+\t\tocteontx_tx_checksum_offload(cmd_buf, flag, tx_pkt);\n+\n \tdo {\n \t\tm_next = tx_pkt->next;\n \t\t/* To handle case where mbufs belong to diff pools, like\n@@ -305,13 +447,45 @@ __octeontx_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts,\n uint16_t\n octeontx_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, uint16_t nb_pkts);\n \n+#define L3L4CSUM_F   OCCTX_TX_OFFLOAD_L3_L4_CSUM_F\n+#define OL3OL4CSUM_F OCCTX_TX_OFFLOAD_OL3_OL4_CSUM_F\n #define NOFF_F       OCCTX_TX_OFFLOAD_MBUF_NOFF_F\n #define MULT_F       OCCTX_TX_MULTI_SEG_F\n-/* [NOFF] [MULTI_SEG] */\n-#define OCCTX_TX_FASTPATH_MODES\t\t\t\t\t\t      \\\n-T(no_offload,\t\t\t\t0, 0,\t4,   OCCTX_TX_OFFLOAD_NONE)   \\\n-T(mseg,\t\t\t\t\t0, 1,\t14,  MULT_F)\t\t      \\\n-T(noff,\t\t\t\t\t1, 0,\t4,   NOFF_F)\t\t      \\\n-T(noff_mseg,\t\t\t\t1, 1,\t14,  NOFF_F | MULT_F)\n+\n+/* [L3L4CSUM_F] [OL3OL4CSUM_F] [NOFF] [MULTI_SEG] */\n+#define OCCTX_TX_FASTPATH_MODES\t\t\t\t\t\t       \\\n+T(no_offload,\t\t\t\t0, 0, 0, 0,\t4,\t\t       \\\n+\t\t\t\t\tOCCTX_TX_OFFLOAD_NONE)\t\t       \\\n+T(mseg,\t\t\t\t\t0, 0, 0, 1,\t14,\t\t       \\\n+\t\t\t\t\tMULT_F)\t\t\t               \\\n+T(l3l4csum,\t\t\t\t0, 0, 1, 0,     4,\t\t       \\\n+\t\t\t\t\tL3L4CSUM_F)\t\t\t       \\\n+T(l3l4csum_mseg,\t\t\t0, 0, 1, 1,\t14,\t\t       \\\n+\t\t\t\t\tL3L4CSUM_F | MULT_F)\t\t       \\\n+T(ol3ol4csum,\t\t\t\t0, 1, 0, 0,\t4,\t\t       \\\n+\t\t\t\t\tOL3OL4CSUM_F)\t\t\t       \\\n+T(ol3l4csum_mseg,\t\t\t0, 1, 0, 1,\t14,\t\t       \\\n+\t\t\t\t\tOL3OL4CSUM_F | MULT_F)\t               \\\n+T(ol3l4csum_l3l4csum,\t\t\t0, 1, 1, 0,     4,\t\t       \\\n+\t\t\t\t\tOL3OL4CSUM_F | L3L4CSUM_F)\t       \\\n+T(ol3l4csum_l3l4csum_mseg,\t\t0, 1, 1, 1,\t14,\t\t       \\\n+\t\t\t\t\tOL3OL4CSUM_F | L3L4CSUM_F | MULT_F)    \\\n+T(noff,\t\t\t\t\t1, 0, 0, 0,     4,\t\t       \\\n+\t\t\t\t\tNOFF_F)\t\t\t\t       \\\n+T(noff_mseg,\t\t\t\t1, 0, 0, 1,\t14,\t\t       \\\n+\t\t\t\t\tNOFF_F | MULT_F)\t               \\\n+T(noff_l3l4csum,\t\t\t1, 0, 1, 0,     4,\t\t       \\\n+\t\t\t\t\tNOFF_F | L3L4CSUM_F)\t\t       \\\n+T(noff_l3l4csum_mseg,\t\t\t1, 0, 1, 1,\t14,\t\t       \\\n+\t\t\t\t\tNOFF_F | L3L4CSUM_F | MULT_F)\t       \\\n+T(noff_ol3ol4csum,\t\t\t1, 1, 0, 0,\t4,\t\t       \\\n+\t\t\t\t\tNOFF_F | OL3OL4CSUM_F)\t\t       \\\n+T(noff_ol3ol4csum_mseg,\t\t\t1, 1, 0, 1,\t14,\t\t       \\\n+\t\t\t\t\tNOFF_F | OL3OL4CSUM_F | MULT_F)\t       \\\n+T(noff_ol3ol4csum_l3l4csum,\t\t1, 1, 1, 0,     4,\t\t       \\\n+\t\t\t\t\tNOFF_F | OL3OL4CSUM_F | L3L4CSUM_F)    \\\n+T(noff_ol3ol4csum_l3l4csum_mseg,\t1, 1, 1, 1,\t14,\t\t       \\\n+\t\t\t\t\tNOFF_F | OL3OL4CSUM_F | L3L4CSUM_F |   \\\n+\t\t\t\t\tMULT_F)\n \n  #endif /* __OCTEONTX_RXTX_H__ */\n",
    "prefixes": [
        "8/8"
    ]
}