From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id EB090A00C4;
	Fri,  5 Aug 2022 08:34:32 +0200 (CEST)
Received: from [217.70.189.124] (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id D743442C13;
	Fri,  5 Aug 2022 08:33:25 +0200 (CEST)
Received: from NAM11-DM6-obe.outbound.protection.outlook.com
 (mail-dm6nam11on2110.outbound.protection.outlook.com [40.107.223.110])
 by mails.dpdk.org (Postfix) with ESMTP id B76E042CAB
 for <dev@dpdk.org>; Fri,  5 Aug 2022 08:33:24 +0200 (CEST)
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=Tlfauch9izN7Ui5kPaMe6YzuEGp3yzYG9SVUfRTpvubiF1YmrrdshmXoV80DOX5MOOyAjYqKuVPtE1/HtbdXOiEPmIo71d+yiMQbNE3i7cg6ZHjbzURn0qCk7vmsxGGmkKXq+rHsxnALzXf1AWYPjML1YyuMRIsGTX/Ai8ArAuIcrytGimkOraRreleNu0FATOfREpAK77mLMDpELUtAxUCcZWrtRlPG7CHrWhdoW7lI78Ste3xBOVMQhFb8TmVCfrcwtxMkTB7oiD1w+Pm5nNh7oaaszjOBgKppMsR8gTayYuJV5UBgSJZ0PL+8tgDpVW0xoeK37PEW4QxSDleypQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; 
 s=arcselector9901;
 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;
 bh=L3a6jwEms2JZ5YiFJ/ZTXUzNZgREe8YZ3dW93U2ndL8=;
 b=drBi6T/HGj9xa0BVw3EDkh3z/2HPKSpWd1B/3sJ+2KSqfq72O7ZZJQ06N1X0dqwWeDXOGAO/3WyK88qWoawVy2LPeGYbkmUXA+/vp/mdACNUBfYtZO6VC+B6YWBZ5EO0BIdZtPN+BafAmuGxsgejfnHl23/9DgPsEggbwXTTd4bQjQQQ+RGmXjQS7+CGUPFHaLSKzue2J/ggC2+2K/3RvE450bn1uLM59dxVerjWuCSp3SgFdu+xmzxFCTdV3qQGWVtW3y7ttuXOKhPslnYq/m3awORlvQDpx4zySTGDKM074Y4bycXHcGjA6MxlT9eBq8rPbCZv6HSikAsrsjNHnQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=corigine.com; dmarc=pass action=none header.from=corigine.com;
 dkim=pass header.d=corigine.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=corigine.onmicrosoft.com; s=selector2-corigine-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=L3a6jwEms2JZ5YiFJ/ZTXUzNZgREe8YZ3dW93U2ndL8=;
 b=atm8aRP0bynA2e/zIOoRjhyw534eEUV5EIsr0I8l7ckLml0D/JahmV9Xunv/50kYp0fbFc3drbDDAHGrullH2EBezd/CMUjnZgkjnazsrzsVEjh5HJ6M88gw6uuRUIpIW9jPnL7sxtTIrIeD89eH7QUZvRiK1CJnln54k+fFm9U=
Authentication-Results: dkim=none (message not signed)
 header.d=none;dmarc=none action=none header.from=corigine.com;
Received: from SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5)
 by DM5PR13MB1772.namprd13.prod.outlook.com (2603:10b6:3:135::7) with
 Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5504.15; Fri, 5 Aug
 2022 06:33:23 +0000
Received: from SJ0PR13MB5545.namprd13.prod.outlook.com
 ([fe80::402d:6abc:83a8:2431]) by SJ0PR13MB5545.namprd13.prod.outlook.com
 ([fe80::402d:6abc:83a8:2431%5]) with mapi id 15.20.5504.014; Fri, 5 Aug 2022
 06:33:23 +0000
From: Chaoyong He <chaoyong.he@corigine.com>
To: dev@dpdk.org
Cc: niklas.soderlund@corigine.com, Chaoyong He <chaoyong.he@corigine.com>,
 Heinrich Kuhn <heinrich.kuhn@corigine.com>
Subject: [PATCH v5 11/12] net/nfp: move rxtx function to header file
Date: Fri,  5 Aug 2022 14:32:34 +0800
Message-Id: <1659681155-16525-12-git-send-email-chaoyong.he@corigine.com>
X-Mailer: git-send-email 1.8.3.1
In-Reply-To: <1659681155-16525-1-git-send-email-chaoyong.he@corigine.com>
References: <1659681155-16525-1-git-send-email-chaoyong.he@corigine.com>
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-ClientProxiedBy: SG2PR04CA0157.apcprd04.prod.outlook.com (2603:1096:4::19)
 To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5)
MIME-Version: 1.0
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: 0e0c4d76-b134-41d4-ced2-08da76ac6507
X-MS-TrafficTypeDiagnostic: DM5PR13MB1772:EE_
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: rSMHqsmp4nKBkoUXmCNvX+H9+SZxhmTkVvKD8qDmyV92c63s7+NSdZuJcT+GfN/nl8p52A9GSxhy2193/89jvYpQODgiFgVZuQHvJ1cXqKckQb1k4uzLKrmuUIGFnr5+oaFLrzO/xmID901uTh2TyODa1mmv5oWy/Rz1+gnPYtzgFm+ZTpgMM2374rQ3x5GuIuZ/GqhbjA8CLgm7uIYCYmo83u9IbnutFWDIVY2pTjWypSEGkCM9hgHD1BMk7nXq3sw4gCRJDtYKfjwwzr9VvrBjTpYxmIoPgcQVacZn1N4eEFFLjdCkGBPw5vIYuFPu7R/QqBKJAdaeQwORUa3K2Rgst8AzRIMW8Gf9k5x5cYZScdwlQ2rKVJk5MTuQx+9UqarbQz8VOpPm7IcamM90R5/NRvQZFXyX3gMoiGf2s9JUOzSulkS9mO53o7c04VAWUJ7a04422Q1Oe/c3jTffuiogBlRm8ZVPGZyAsM7rXAnqZrdX3HVpfCU/lls250CApTjQsIkF1M+4o2T3ua9O0zUC0H5sayd3ke/tiwFiuO0q00LubMyNIhUqA0yDXg9N/VbsNielma0iHcoJIrqKcFV5X2i9yrQgkswTc5yfPH3AfNPIq0GJl/f6NchIP5vOhWqLrkrVjpdILH9UByM1MRsPn+4TgSxQAUYGhYiAkuiGkE3NO73D3lqsg4ljM94AH9EKa3OP+g1Q4xDnHsZPC71ruVd5zp1z8ndtYzzRWc82hlDUUDRoQ6DlKk8DHJDwz3zJciGaek7yaB4YpAAIdnqpJqXU1GBnfrHSxp7eWtI=
X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;
 IPV:NLI; SFV:NSPM; H:SJ0PR13MB5545.namprd13.prod.outlook.com; PTR:; CAT:NONE;
 SFS:(13230016)(4636009)(136003)(396003)(366004)(39840400004)(376002)(346002)(26005)(6512007)(6506007)(2616005)(107886003)(5660300002)(52116002)(36756003)(6486002)(44832011)(186003)(6666004)(41300700001)(478600001)(86362001)(38100700002)(38350700002)(83380400001)(66476007)(66556008)(66946007)(54906003)(8936002)(316002)(2906002)(6916009)(4326008)(8676002);
 DIR:OUT; SFP:1102; 
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?amtlTUZNbnZVMUowWUlxWjU4SWkvcVhsam00MC9Sb29zVGplYTRCQUtKZ3k2?=
 =?utf-8?B?MDRXWkl6ZzlkaW1jeWgyK2gwSDZLS3BUSmh1SHdqQml1M2tGVGxHeFpOR3dB?=
 =?utf-8?B?L20vblZndHJsTlZCUFE4VFdnTStQUmpkTW5xTzNXakFBRWZKdWY0TW1yQTh5?=
 =?utf-8?B?N293b0J0Y3JmZG9Kczdud3hJMFljOUJnWmJRZjFPa1J3Mlh4NGozY1QwRk9S?=
 =?utf-8?B?QmZBV3RMV3o0dDE0R1lrU0pBNEV3RDFuM2VHaWFvM0R1UytCOHZOc2lxZG5W?=
 =?utf-8?B?VmVyR0xWTUNGQ0JRWXlTL0RTQ2VBRTR0TENGSTFxdG10cmYyVUoyQXlEQjlm?=
 =?utf-8?B?TnhQWVFtV0dYdjZHYUc4Y2RqZlVUVUdPV3NYajVWWXN3dzVrNC9yLzhpN3hC?=
 =?utf-8?B?M0JxUEVwdmRCYkZLeFVieXYzSktpYVJBdVplUmhwdHA5SDhHdEQ3RG1GTzhZ?=
 =?utf-8?B?d1RCWURzVUkxeC85aWl0d09xamtjWHpUWXo3V2VSOE5wcTVQL0pvcGxZdG5V?=
 =?utf-8?B?SGRESlUrRzBGS2ZuZ0VPZ2Vzd3RHeG8yK2JHQmdzUGpTZFcwTTc3ZDJNcGtX?=
 =?utf-8?B?VXhLTWZERnhiYU9WZWtZMkE4aTJ5V28vMmw2dDJFOFBiT24vYXdjNU16VXBF?=
 =?utf-8?B?MmJvSzRVWnNpUnFKSzhpSWw3eDhqdWs4cVIrenRvbkkvbzNhYTZvUUdrL1c1?=
 =?utf-8?B?UWhXbUVMdFdhQWRNbzFmOEQzQ3hUOTlEYUlJR0NmWFpoMGs2ckJ0d3VoSXhu?=
 =?utf-8?B?MVZnU2hNOENTRkgvYlMyNDZHTGd0TkVSYnd6M0l0WTVuOFFtallndTdjYTJT?=
 =?utf-8?B?cVRkc2xlRjd1eDRsaXZDck5rZ0F5dStQMzdnSjZ1c2pVRXFRTno4UGZ1SFJJ?=
 =?utf-8?B?NVU0eXl1eUhHNS9TY3psUGJLVlVjUlp2WkxzaHJoazNDMENPTEpGZjEvazJY?=
 =?utf-8?B?aDA4aWVjZ3VJNkFYejZTNXZ1Tk9tcTlxUzFBako4OHlud0JJZUNvVFluWkVL?=
 =?utf-8?B?ZUh3UlZFRm1BNTNnenUvdFlGK3JJMXNFZTlWK052cjlsOTJqL1VSRmp2bFhM?=
 =?utf-8?B?bi85bDV4SXdicW1mcFdJeFRXUUZVKzUxcm1GS1h2V3FyaU5YcS9lNEJiNUtW?=
 =?utf-8?B?dEduLzdUYk5zQk9VV2hNYXlkdkFWcnlmd0JPU0hLei9aOVBJYmJ6SWlIdVFk?=
 =?utf-8?B?YzBZVnRaS25XVURmaUxnWE83OW8ybmhJUERGTVF0djJIcTBRMkwwTStCY3I0?=
 =?utf-8?B?M0V5eENPaExjT2RUNVRBajNWYzlLbVFRMFdqaVg5SURLWEE2cmxCOHl1elFq?=
 =?utf-8?B?U2VVeStRR1BHRFdZYUJTemxNa1FKeUlPU3FieFlUOUQzYytXbzcxaWg1d1NI?=
 =?utf-8?B?dXMrSjBNZ2NzRGtCOXZ0Tnp5dVJBeGN1NkdCb3BhY3dFa2R3ckowSnB2ajhi?=
 =?utf-8?B?dEFyYlFlMmJQV0ZVQUlKejNpYTVSM24rVkF1MW03WHF4cEFJRkpxcDdjQmxK?=
 =?utf-8?B?ay9xVHQvYzVEeUtTOXhtZkNCc0hlSGM0V3dSbU5qTkRHWXBSQ1k5MFhXWHph?=
 =?utf-8?B?NUtUYWd6V3V1WDhpcjY5RG1rZ0YzSXJvMUtYMzUzcGVRTWhHSlVTQVIzdzBL?=
 =?utf-8?B?SGo0SHlKM2JOcXlDRG1ocklQRjYwYnp6OXc1Z3BBZGwzNG9lMlh3SlNkZG05?=
 =?utf-8?B?d1k3TUNBd244WXJGVWFrSTFMNXlsNXB2RG5QOVFvOGk3ZWEvSEx0M3I3ZnN2?=
 =?utf-8?B?aENkdE0yU2pWclY5WWpBSTE2OWxvSEx4c2pPckNjR2M4REFHbDVDT1FzMC94?=
 =?utf-8?B?RE41MEhKbVdsYTFXVjlydm1WZWxyYnJZNFN3em9BellKWUU3bTFSRE5tZEpZ?=
 =?utf-8?B?UnNya2plSmNBbmY4NS9XVURzUUlXc1BEdHBIbzF4T3ZVMWRzdEZaZlFRcW1z?=
 =?utf-8?B?czUyYm5tSDdIMUZ2d0xyREpxdUFDd1c5Wm1vWGZ5Qkx6Zk1Nc2pnNjdDWWdo?=
 =?utf-8?B?OGtLSmJVVGVJRHREVFV6QnBDcTBpT2pTSnc5MkRJb2h2VUN5eFNNWUtQOVEw?=
 =?utf-8?B?UW1LSmEvdVYzL2VNbUZoSlJYcHhYQWlIOVJjbW8wTGYrSy9uVFJ3WVF0eWNk?=
 =?utf-8?B?Q3MyajdjRk5wQzAxVkFVOW9GNDJNTXN4d0MxSFhTaUlrWWNWS0tSbmgwellJ?=
 =?utf-8?B?NVE9PQ==?=
X-OriginatorOrg: corigine.com
X-MS-Exchange-CrossTenant-Network-Message-Id: 0e0c4d76-b134-41d4-ced2-08da76ac6507
X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Aug 2022 06:33:23.0309 (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: b/KUNE/1ey6hmG7iF3Gm3UmDps7EqUBtTcMKWlAT9nuNwWpTpbWDf4d8JwlJsmZMNnIqlofP2dNaXyA1v2C/ZwtteKarRCceRWabMuvkQLE=
X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR13MB1772
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>,
 <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>,
 <mailto:dev-request@dpdk.org?subject=subscribe>
Errors-To: dev-bounces@dpdk.org

Flower makes use of the same Rx and Tx checksum logic as the normal PMD.
Expose it so that flower can make use of it.

Signed-off-by: Chaoyong He <chaoyong.he@corigine.com>
Signed-off-by: Heinrich Kuhn <heinrich.kuhn@corigine.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@corigine.com>
---
 drivers/net/nfp/nfp_common.c    |  2 +-
 drivers/net/nfp/nfp_ethdev.c    |  2 +-
 drivers/net/nfp/nfp_ethdev_vf.c |  2 +-
 drivers/net/nfp/nfp_rxtx.c      | 91 +----------------------------------------
 drivers/net/nfp/nfp_rxtx.h      | 90 ++++++++++++++++++++++++++++++++++++++++
 5 files changed, 94 insertions(+), 93 deletions(-)

diff --git a/drivers/net/nfp/nfp_common.c b/drivers/net/nfp/nfp_common.c
index 0e55f0c..e86929c 100644
--- a/drivers/net/nfp/nfp_common.c
+++ b/drivers/net/nfp/nfp_common.c
@@ -38,9 +38,9 @@
 #include "nfpcore/nfp_nsp.h"
 
 #include "nfp_common.h"
+#include "nfp_ctrl.h"
 #include "nfp_rxtx.h"
 #include "nfp_logs.h"
-#include "nfp_ctrl.h"
 #include "nfp_cpp_bridge.h"
 
 #include <sys/types.h>
diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c
index 0b88749..f2571a0 100644
--- a/drivers/net/nfp/nfp_ethdev.c
+++ b/drivers/net/nfp/nfp_ethdev.c
@@ -33,9 +33,9 @@
 #include "nfpcore/nfp_nsp.h"
 
 #include "nfp_common.h"
+#include "nfp_ctrl.h"
 #include "nfp_rxtx.h"
 #include "nfp_logs.h"
-#include "nfp_ctrl.h"
 #include "nfp_cpp_bridge.h"
 
 #include "flower/nfp_flower.h"
diff --git a/drivers/net/nfp/nfp_ethdev_vf.c b/drivers/net/nfp/nfp_ethdev_vf.c
index d304d78..ceaf618 100644
--- a/drivers/net/nfp/nfp_ethdev_vf.c
+++ b/drivers/net/nfp/nfp_ethdev_vf.c
@@ -19,9 +19,9 @@
 #include "nfpcore/nfp_rtsym.h"
 
 #include "nfp_common.h"
+#include "nfp_ctrl.h"
 #include "nfp_rxtx.h"
 #include "nfp_logs.h"
-#include "nfp_ctrl.h"
 
 static void
 nfp_netvf_read_mac(struct nfp_net_hw *hw)
diff --git a/drivers/net/nfp/nfp_rxtx.c b/drivers/net/nfp/nfp_rxtx.c
index 8d63a7b..95403a3 100644
--- a/drivers/net/nfp/nfp_rxtx.c
+++ b/drivers/net/nfp/nfp_rxtx.c
@@ -17,9 +17,9 @@
 #include <ethdev_pci.h>
 
 #include "nfp_common.h"
+#include "nfp_ctrl.h"
 #include "nfp_rxtx.h"
 #include "nfp_logs.h"
-#include "nfp_ctrl.h"
 #include "nfpcore/nfp_mip.h"
 #include "nfpcore/nfp_rtsym.h"
 #include "nfpcore/nfp-common/nfp_platform.h"
@@ -208,34 +208,6 @@
 	}
 }
 
-/* nfp_net_rx_cksum - set mbuf checksum flags based on RX descriptor flags */
-static inline void
-nfp_net_rx_cksum(struct nfp_net_rxq *rxq, struct nfp_net_rx_desc *rxd,
-		 struct rte_mbuf *mb)
-{
-	struct nfp_net_hw *hw = rxq->hw;
-
-	if (!(hw->ctrl & NFP_NET_CFG_CTRL_RXCSUM))
-		return;
-
-	/* If IPv4 and IP checksum error, fail */
-	if (unlikely((rxd->rxd.flags & PCIE_DESC_RX_IP4_CSUM) &&
-	    !(rxd->rxd.flags & PCIE_DESC_RX_IP4_CSUM_OK)))
-		mb->ol_flags |= RTE_MBUF_F_RX_IP_CKSUM_BAD;
-	else
-		mb->ol_flags |= RTE_MBUF_F_RX_IP_CKSUM_GOOD;
-
-	/* If neither UDP nor TCP return */
-	if (!(rxd->rxd.flags & PCIE_DESC_RX_TCP_CSUM) &&
-	    !(rxd->rxd.flags & PCIE_DESC_RX_UDP_CSUM))
-		return;
-
-	if (likely(rxd->rxd.flags & PCIE_DESC_RX_L4_CSUM_OK))
-		mb->ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_GOOD;
-	else
-		mb->ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_BAD;
-}
-
 /*
  * RX path design:
  *
@@ -768,67 +740,6 @@
 	return 0;
 }
 
-/* nfp_net_tx_tso - Set TX descriptor for TSO */
-static inline void
-nfp_net_nfd3_tx_tso(struct nfp_net_txq *txq, struct nfp_net_nfd3_tx_desc *txd,
-	       struct rte_mbuf *mb)
-{
-	uint64_t ol_flags;
-	struct nfp_net_hw *hw = txq->hw;
-
-	if (!(hw->cap & NFP_NET_CFG_CTRL_LSO_ANY))
-		goto clean_txd;
-
-	ol_flags = mb->ol_flags;
-
-	if (!(ol_flags & RTE_MBUF_F_TX_TCP_SEG))
-		goto clean_txd;
-
-	txd->l3_offset = mb->l2_len;
-	txd->l4_offset = mb->l2_len + mb->l3_len;
-	txd->lso_hdrlen = mb->l2_len + mb->l3_len + mb->l4_len;
-	txd->mss = rte_cpu_to_le_16(mb->tso_segsz);
-	txd->flags = PCIE_DESC_TX_LSO;
-	return;
-
-clean_txd:
-	txd->flags = 0;
-	txd->l3_offset = 0;
-	txd->l4_offset = 0;
-	txd->lso_hdrlen = 0;
-	txd->mss = 0;
-}
-
-/* nfp_net_tx_cksum - Set TX CSUM offload flags in TX descriptor */
-static inline void
-nfp_net_nfd3_tx_cksum(struct nfp_net_txq *txq, struct nfp_net_nfd3_tx_desc *txd,
-		 struct rte_mbuf *mb)
-{
-	uint64_t ol_flags;
-	struct nfp_net_hw *hw = txq->hw;
-
-	if (!(hw->cap & NFP_NET_CFG_CTRL_TXCSUM))
-		return;
-
-	ol_flags = mb->ol_flags;
-
-	/* IPv6 does not need checksum */
-	if (ol_flags & RTE_MBUF_F_TX_IP_CKSUM)
-		txd->flags |= PCIE_DESC_TX_IP4_CSUM;
-
-	switch (ol_flags & RTE_MBUF_F_TX_L4_MASK) {
-	case RTE_MBUF_F_TX_UDP_CKSUM:
-		txd->flags |= PCIE_DESC_TX_UDP_CSUM;
-		break;
-	case RTE_MBUF_F_TX_TCP_CKSUM:
-		txd->flags |= PCIE_DESC_TX_TCP_CSUM;
-		break;
-	}
-
-	if (ol_flags & (RTE_MBUF_F_TX_IP_CKSUM | RTE_MBUF_F_TX_L4_MASK))
-		txd->flags |= PCIE_DESC_TX_CSUM;
-}
-
 uint16_t
 nfp_net_nfd3_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
 {
diff --git a/drivers/net/nfp/nfp_rxtx.h b/drivers/net/nfp/nfp_rxtx.h
index a30171f..cd70bdd 100644
--- a/drivers/net/nfp/nfp_rxtx.h
+++ b/drivers/net/nfp/nfp_rxtx.h
@@ -360,6 +360,96 @@ struct nfp_net_rxq {
 	return (nfp_net_nfd3_free_tx_desc(txq) < txq->tx_free_thresh);
 }
 
+/* set mbuf checksum flags based on RX descriptor flags */
+static inline void
+nfp_net_rx_cksum(struct nfp_net_rxq *rxq, struct nfp_net_rx_desc *rxd,
+		 struct rte_mbuf *mb)
+{
+	struct nfp_net_hw *hw = rxq->hw;
+
+	if (!(hw->ctrl & NFP_NET_CFG_CTRL_RXCSUM))
+		return;
+
+	/* If IPv4 and IP checksum error, fail */
+	if (unlikely((rxd->rxd.flags & PCIE_DESC_RX_IP4_CSUM) &&
+			!(rxd->rxd.flags & PCIE_DESC_RX_IP4_CSUM_OK)))
+		mb->ol_flags |= RTE_MBUF_F_RX_IP_CKSUM_BAD;
+	else
+		mb->ol_flags |= RTE_MBUF_F_RX_IP_CKSUM_GOOD;
+
+	/* If neither UDP nor TCP return */
+	if (!(rxd->rxd.flags & PCIE_DESC_RX_TCP_CSUM) &&
+			!(rxd->rxd.flags & PCIE_DESC_RX_UDP_CSUM))
+		return;
+
+	if (likely(rxd->rxd.flags & PCIE_DESC_RX_L4_CSUM_OK))
+		mb->ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_GOOD;
+	else
+		mb->ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_BAD;
+}
+
+/* Set NFD3 TX descriptor for TSO */
+static inline void
+nfp_net_nfd3_tx_tso(struct nfp_net_txq *txq,
+		struct nfp_net_nfd3_tx_desc *txd,
+		struct rte_mbuf *mb)
+{
+	uint64_t ol_flags;
+	struct nfp_net_hw *hw = txq->hw;
+
+	if (!(hw->cap & NFP_NET_CFG_CTRL_LSO_ANY))
+		goto clean_txd;
+
+	ol_flags = mb->ol_flags;
+
+	if (!(ol_flags & RTE_MBUF_F_TX_TCP_SEG))
+		goto clean_txd;
+
+	txd->l3_offset = mb->l2_len;
+	txd->l4_offset = mb->l2_len + mb->l3_len;
+	txd->lso_hdrlen = mb->l2_len + mb->l3_len + mb->l4_len;
+	txd->mss = rte_cpu_to_le_16(mb->tso_segsz);
+	txd->flags = PCIE_DESC_TX_LSO;
+	return;
+
+clean_txd:
+	txd->flags = 0;
+	txd->l3_offset = 0;
+	txd->l4_offset = 0;
+	txd->lso_hdrlen = 0;
+	txd->mss = 0;
+}
+
+/* Set TX CSUM offload flags in NFD3 TX descriptor */
+static inline void
+nfp_net_nfd3_tx_cksum(struct nfp_net_txq *txq, struct nfp_net_nfd3_tx_desc *txd,
+		 struct rte_mbuf *mb)
+{
+	uint64_t ol_flags;
+	struct nfp_net_hw *hw = txq->hw;
+
+	if (!(hw->cap & NFP_NET_CFG_CTRL_TXCSUM))
+		return;
+
+	ol_flags = mb->ol_flags;
+
+	/* IPv6 does not need checksum */
+	if (ol_flags & RTE_MBUF_F_TX_IP_CKSUM)
+		txd->flags |= PCIE_DESC_TX_IP4_CSUM;
+
+	switch (ol_flags & RTE_MBUF_F_TX_L4_MASK) {
+	case RTE_MBUF_F_TX_UDP_CKSUM:
+		txd->flags |= PCIE_DESC_TX_UDP_CSUM;
+		break;
+	case RTE_MBUF_F_TX_TCP_CKSUM:
+		txd->flags |= PCIE_DESC_TX_TCP_CSUM;
+		break;
+	}
+
+	if (ol_flags & (RTE_MBUF_F_TX_IP_CKSUM | RTE_MBUF_F_TX_L4_MASK))
+		txd->flags |= PCIE_DESC_TX_CSUM;
+}
+
 int nfp_net_rx_freelist_setup(struct rte_eth_dev *dev);
 uint32_t nfp_net_rx_queue_count(void *rx_queue);
 uint16_t nfp_net_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
-- 
1.8.3.1