From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by smtp.lore.kernel.org (Postfix) with ESMTP id 2BC10C07E9D for ; Mon, 26 Sep 2022 07:01:56 +0000 (UTC) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9F0C142B8E; Mon, 26 Sep 2022 09:00:46 +0200 (CEST) Received: from NAM12-MW2-obe.outbound.protection.outlook.com (mail-mw2nam12on2090.outbound.protection.outlook.com [40.107.244.90]) by mails.dpdk.org (Postfix) with ESMTP id 409834069B for ; Mon, 26 Sep 2022 09:00:44 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UIt14EfR2ZaSEhvPyNuoO/he9R8G+RbG0VOElAlbuCCuqp74rxhMn8162bbTFcIKrAwXWqu77KKkwgEwhXxN7imphxVCm88IE0pqdJkSGbhbZODtiLn09qn0i7+EbfRcHT73gKmPtNbTXoDCLRYuKOQedgSuBaXV3CUq9/OybbYqrwH/asqJQIObbs3MyI1L4ZipTe9gXVarY6fGxi4OitJAqGtnTUKjaYBCEl7ABm9WOp1LW/cP91BrUdRlnrObnvO9o+m1NFZUbfxO/udO+IBpCCNPR7FiPc0OQFNmeuARFktVUY8jzXt+ua9nbeNvA/dHtGdAozVxDIi8efwE9Q== 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=O1/sl/qHmYymW/1KjYFvjPFSj9S3YslUJz55Kr9Ul70=; b=ll8Z35PMSZ44eWG9XfQQF7IZj8JKgx+mJIXYdW3QwskTDV6jiElJT5Dyu22cE+k3EtMF9w3QFPOKsu98hWd6Qg4HYk+d3tNS8peHjLLMl2vSFOKrQdXI4UeNwbnH48fPN9k0POGZNRcg8Lbu0dVTy96Xlucg/pHfUf3YcQeQd0piVnltRUO0QniYBDlxrr9t//wTiNqeCOfOqL7IiL9qFdjkEbXI8vhPn3dZ6dzL6RGswV1yFQSg5pIpTBepazCCD+M6NJICVEFH/3bzIfqIX6jS/80oUn1roiV6JHj8Xf+AMx6hAWMaQ8+Y+qgk//+tlfUgNvkz8cGn39ObQCf/AQ== 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=O1/sl/qHmYymW/1KjYFvjPFSj9S3YslUJz55Kr9Ul70=; b=lZSAjuNg6MuNE7+KoR8oNjOXm4tffUPn9xa+G6OH8kCcC6XnWbpRTNvQaEgb2UoM5kmY34oTzCNt+W55djlczTZm1JoTq4B5eF9gIRsSvLfM0WRkX0pa7ebsp0EAh6uY0AklwkQKAMLN+xRZSbuCx0CFFj3uNi85G/xGBFYsDvc= 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 SA1PR13MB4893.namprd13.prod.outlook.com (2603:10b6:806:18a::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5676.14; Mon, 26 Sep 2022 07:00:41 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::779:2722:a8e5:503b]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::779:2722:a8e5:503b%7]) with mapi id 15.20.5676.014; Mon, 26 Sep 2022 07:00:41 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He , Heinrich Kuhn Subject: [PATCH v10 11/13] net/nfp: move rxtx function to header file Date: Mon, 26 Sep 2022 14:59:55 +0800 Message-Id: <1664175597-37248-12-git-send-email-chaoyong.he@corigine.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1664175597-37248-1-git-send-email-chaoyong.he@corigine.com> References: <1664175597-37248-1-git-send-email-chaoyong.he@corigine.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: SG2P153CA0005.APCP153.PROD.OUTLOOK.COM (2603:1096::15) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|SA1PR13MB4893:EE_ X-MS-Office365-Filtering-Correlation-Id: 0add29c7-b48a-4352-0c6c-08da9f8cd2ee X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: PMoS8mPJ5XImSWExAk8uc4b6NLqgaYq7oC+Z1z/6BauwdfIro2jKNm6K9P2YsWgP97FB68rM3r0EegPaDNtBhKtgH70ekCWvpSg6wcX//xA/VTcMau6xgrzFAxbFM1OO2s2WnGeAw6SSxslRc4mGcNxGWMPbcbgqHeEK0xtStvLigCoc/QsVhWy6ZYNKKkKU8jvKrJN1g3aaNAqLYvDCshctZBGLY2gG/1bGxS3dNC+Q0z3AnH7sb1Q+fjlqXqVQeJWc9AqZdJP57TbVAU4Fpuw/wW05y1UzAzODldc0zkvRoFJ7fgamyqSko2vXSNgmD6c0cTqWEi6E1VVbP3c1oi34NR/legXFzEOIsT1mJGp+w7N3LmffDUGFUCFToF83AoP8W5GjDtk+BrnloMOrtnWKCkUZytLOfnQu4RHjuDFlg4a7qQTr8sqCBWHLWhv8r+esYez7y+PiB23fdGQQsXzMIxQoIs79VTct7rJDk0sjZi4ZU1mhdYzQskIfQya60buO8hwtkDGhH5SRgiHJtrTXE28dPScY3OeLqj/ujztHWaf4+B6Znc15jTHzEKTfMxAsRbI4gq+mY7eIQauLFuCbDvl944+gS5NKbptJdgfRmgunD88vhNt+0GwP3y6Y+Fozx+ZIzYpS6vsA5xPtEUedyrJnXP9SyYW5GR18u7d/Homi6rewhcw7YnI0ciReEwxIxScRTYGbcQgDp9etxhel/gv/NY5LT7zizD0hktzCAhVstZ9wLPwhKdiA8Fr3wb+QpsUw0Ooc0F0LVQqW+A== 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:(13230022)(4636009)(366004)(396003)(39830400003)(136003)(376002)(346002)(451199015)(36756003)(38100700002)(38350700002)(2906002)(86362001)(44832011)(66946007)(8936002)(66556008)(66476007)(5660300002)(8676002)(4326008)(83380400001)(186003)(54906003)(6512007)(6916009)(316002)(52116002)(6666004)(2616005)(26005)(6506007)(478600001)(41300700001)(107886003)(6486002); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Y3NiMDUvUVVVOG45UlBQbXpOZTg2N0t5aVYyNkhnTEJ1Mm9oOVppVEsxWU5m?= =?utf-8?B?Sm5xSGFNREJVNUJiUzJUNWtFNmhVNjROcFYzZHNCVTNrY3FrMnNKNzcvbmlv?= =?utf-8?B?TTJocDBZYzZIOGs3U2MzSm1RWGxocG9iV2hycmtVcTdxclBsMmxTMy8xOEJV?= =?utf-8?B?YnZ4UjJMYW5taDQrYi8vNlpJRGJmeEthYmsxWXBsZmd3Yms4b2I3WWZ6QURZ?= =?utf-8?B?enZGL1FQUHptVloyKzc1MU04Mk53SVRCYU04NTdmQlRwekl2VkZWaXFQTTdt?= =?utf-8?B?OEpLVS9IVlZjOEU3c3dnanVRSXIxZ1lqU1pJZnRSeVI0UGtuMXBqWW54L1Fr?= =?utf-8?B?bXZTU2ExQVdwY2Y2dURCemRQL0Z0STVHbkVteGJ2ZDY4bXNDUjhNMmVlTE13?= =?utf-8?B?Q2VOZVd5OURBZTg2SVNreS9UOGh1N1NIUm5pQ09iK2NHRTc4dmZ6aUxOYkJu?= =?utf-8?B?WGxMSTBPYmhpc3ppL2w1RjQrN3hBL09qdzhsSW9iMHA2OUw2cWROZ3JybGpW?= =?utf-8?B?V2lOTytDczNmTkVhS3I2Uk1qZVZEM3ZEVnVJNzg0Vm9mTmZZQks3Sk5wUFZy?= =?utf-8?B?NnNDUXVuckRFZVVEeXFRWnhDb1k0bGFiK3d1dDBUTndNUUxBV0sreFVHR0Ur?= =?utf-8?B?ZjZNVlRsRllkb3g1c2VlaFRrQnpLdnFheDJmUHFTVFd5ZlQ4Z3ZqS3VqSnM1?= =?utf-8?B?OTd3Tjh3d3VWdjlCTVJxN2FoVjgvQjFPRFR1aldZRU4wR01NdVVYUGZOekI0?= =?utf-8?B?ak95SkRCTnF6QzJUUkhrNlRxTWtCT21qbTM1TFFyb3JtN3gzdnFUcWJGSzJP?= =?utf-8?B?U1dpMklIbnJ2REVNYVJNS3hrQ3FOVTJZc1BNRHhQeTBCdkhMQWx0VGxST3dv?= =?utf-8?B?MElUY2FIcEZrMC83ZExjUkI0emxwY1VXdzVyVUhFclBsUWluaDFONkFUc0dW?= =?utf-8?B?cGtWRk4remlRSGtLeVJqRkFhOEtYN2RFb1dIMGFERlZXQUVHclVkQmJJQzds?= =?utf-8?B?MlR4YXpLbGQ3S0twcXU2RkZlUzEvUnp6OFNyVit2Q2ZzT1Ewbk13dnhBQUUw?= =?utf-8?B?clJIZTFqTXJobCtKM0d3NzljdTNTTFo4bFRnU2VPalJ5eG15cFZNUXBuZGoy?= =?utf-8?B?bFZpekFBTXY1STZVVjZTUjdaTmNTOXd6RlJCdVJFdWkvTUtsdWJxVUdySWZr?= =?utf-8?B?aXRPQ213ZG5ucW8xdFkzemhRanNFN2NUeUZYckFrM0tVZ0F2NnJ5N3kxTVN1?= =?utf-8?B?NUE1RkZtS2RRemExNFNLeEdwK3pxcmdDOHU1U3lnc2I3NGdwclQ2c04vMUxh?= =?utf-8?B?eERjR1R4SkZqZlpleUxwZmc4cTFvMGJnVjJwcnZRQmVEeWw1Y28xdHdBR2Vy?= =?utf-8?B?WGhWdVJVTEhBZFV0V2JRTC8rTkU1TWxCb3R6ME9OVXBKbVdPdWltR3FQbmEz?= =?utf-8?B?cENtUWVieUZibmtXTXAxL1JQZHNOWkZsa1BkRHZGQ3NxVWExUDRIa0wreUdk?= =?utf-8?B?cW1ETXR6V29ORWhTZytkaUU0enNKVHNPNjZBOUpjWWhScjZuNG5BUW1GWHho?= =?utf-8?B?aE1MTkcrQmxXVGRIekxCV0tMRnlSRFdKZytaMUszallWNTlWMG5XNGZSMHRy?= =?utf-8?B?VmpqVUM3RU52UUZrWkpkQ3o2RlFtc0NOV0hhUG9Lci9USzBzMlE2S0pTVjBW?= =?utf-8?B?YXlSMFdFVm5wQlRRZ2dPSHNVaU9ZSGkxN3lKbkJpb2s3QjJ2NEwwYmFWODVz?= =?utf-8?B?YjE5K2NOYy85elBKdTVrQ05jY3pPNWlZYStFNVgvMFNxcndJeDB0YzZwcjda?= =?utf-8?B?QnBzTk9JSVdhNTZ0RU1Bc3ZYek1Tc011aVA2aUExUkNWRXpKL2tnalFMaFdF?= =?utf-8?B?SzRtMDhzWnQ2RFpqbmkzZ2tFVkFGTGpCTDVXZDNicmdrOTZWUGVnLzhjRDZO?= =?utf-8?B?eStueitGa0luTXU4MjczR0YrZnptNkpSbzkxYXIxT2xLTjlxajJiNXRhN1dY?= =?utf-8?B?enlVUGtXNlVKZllvYzRQcThiSFc1cXdZNVVKTXovVElLZ3ZMeEVEUWVCWWpE?= =?utf-8?B?SUMyS2FYZm4yOTBxMkgzcUthRmNsNjdTYm94UnZpRWRIa1FLcFhwS0J0ZDBU?= =?utf-8?B?UDdYa2Z4OVRadld5Ym1UYTN1ZC9iZFJrZGxPVU50eDFXa2FrczZmSk1zbHVN?= =?utf-8?B?elE9PQ==?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0add29c7-b48a-4352-0c6c-08da9f8cd2ee X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Sep 2022 07:00:41.0493 (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: gjrES9X3y5sc2mj9MKBqcfLE+8k97nOFGnzovtIy9tspEskHtLBU4aZWFzfQoX7jHa8a/H8VyRm8x0nBPtdW0gXnwOm6h4WrHRV0ZWCoQYw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR13MB4893 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org The flower firmware application makes use of the same Rx and Tx checksum logic as the normal PMD. Expose it so that flower firmware application also can make use of it. Signed-off-by: Chaoyong He Signed-off-by: Heinrich Kuhn Reviewed-by: Niklas Söderlund --- 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 fd46c84..511d74b 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 diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c index 5a9a1bd..d24d679 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 affea9d..2235499 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 #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