From patchwork Sat May 27 10:25:29 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shreyansh Jain X-Patchwork-Id: 24773 Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 39F607CA3; Sat, 27 May 2017 12:19:52 +0200 (CEST) Received: from NAM01-BN3-obe.outbound.protection.outlook.com (mail-bn3nam01on0064.outbound.protection.outlook.com [104.47.33.64]) by dpdk.org (Postfix) with ESMTP id 1C9527CF2 for ; Sat, 27 May 2017 12:19:10 +0200 (CEST) Received: from BN6PR03CA0065.namprd03.prod.outlook.com (10.173.137.27) by BY2PR03MB176.namprd03.prod.outlook.com (10.242.36.153) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1101.14; Sat, 27 May 2017 10:19:07 +0000 Received: from BL2FFO11FD024.protection.gbl (2a01:111:f400:7c09::128) by BN6PR03CA0065.outlook.office365.com (2603:10b6:404:4c::27) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1124.9 via Frontend Transport; Sat, 27 May 2017 10:19:07 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=nxp.com; nxp.com; dkim=none (message not signed) header.d=none;nxp.com; dmarc=fail action=none header.from=nxp.com; Received-SPF: Fail (protection.outlook.com: domain of nxp.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BL2FFO11FD024.mail.protection.outlook.com (10.173.161.103) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_RSA_WITH_AES_256_CBC_SHA) id 15.1.1075.5 via Frontend Transport; Sat, 27 May 2017 10:19:07 +0000 Received: from Tophie.ap.freescale.net ([10.232.14.39]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id v4RAHYuJ029968; Sat, 27 May 2017 03:19:05 -0700 From: Shreyansh Jain To: CC: , Date: Sat, 27 May 2017 15:55:29 +0530 Message-ID: <1495880735-1651-34-git-send-email-shreyansh.jain@nxp.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1495880735-1651-1-git-send-email-shreyansh.jain@nxp.com> References: <1495880735-1651-1-git-send-email-shreyansh.jain@nxp.com> X-EOPAttributedMessage: 0 X-Matching-Connectors: 131403539472531447; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Forefront-Antispam-Report: CIP:192.88.158.2; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(336005)(39860400002)(39400400002)(39850400002)(39450400003)(39410400002)(39840400002)(39380400002)(2980300002)(1110001)(1109001)(339900001)(189002)(199003)(9170700003)(110136004)(38730400002)(8656002)(33646002)(4326008)(77096006)(76176999)(53936002)(8676002)(54906002)(81166006)(8936002)(50986999)(189998001)(104016004)(36756003)(356003)(5660300001)(2351001)(6666003)(2950100002)(106466001)(5003940100001)(50466002)(50226002)(305945005)(6916009)(47776003)(48376002)(86362001)(2906002)(498600001)(68736007)(85426001)(105606002); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR03MB176; H:az84smr01.freescale.net; FPR:; SPF:Fail; MLV:ovrnspm; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11FD024; 1:TwvYMm0qEtr5mfDGCnvkvZFuBXzY0iePaepVOtIHXAdPXjexAHnNDBbaIJhqSmMoJAx/ckbSiqSOQcLhU801bVeqXZRfq3BFwsoxliFnH2+0c2bwHQ4pRl919z1ptrdUWYW1vRq0UqoCAkQxJ1/RVxlqPitUDxfkC/NNvA+TsWm1A0kCkq/K18dar4/BNNRdL21KiTTxHl2UMAHM6jIQtvN8hYwxed/3nlctna0nehJWwq23WGY5RcnRgya6WTe9VExcdIRaHB5zRmXQYZ2RpKDNwLvydeh4l9Y1rExEXUeFV1ZwL/0tH38qjWaVvwdfTdOOFvBZKx8SHcMcKZ8NeahGC+FSfZ+Ee0AFXaYqEY5Ff0ToqKd+kX77Z5wnrW+fiGB9EiM98+oL8D7AZboYy6Xkv4tBcSAmX+z98TQBVRRq9B4U37g3cPn122yfZplzbJhw0AVqjIuPL4PryffW1t/sDbKUmG1qRSF6oOi8jppIJt6vTW7ZADd9VQePR/hcklTdWGIzmcADge1rkuHobYX/7H4wIvrHSQH6aL1lEVLWV7Z9rwVd+5CE9ta1ZrvBVvS/CDePoQM/s/OXEOPXlewl/TubW8Q3Mfk7qa0j0tlgFBg0LlQxw2+rFe9vwMzyhpxuFyr0GMmUTKSHGx+wbR0dFUZSX0N+yPsxbtm0Ri58k1hnJeGh+nsPnXMZfKkhSVteG0aORIj55Hes7F0C4g== MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY2PR03MB176: X-MS-Office365-Filtering-Correlation-Id: 34bedf36-a6db-4514-de97-08d4a4e9cef1 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(201703131430075)(201703131517081); SRVR:BY2PR03MB176; X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB176; 3:wcXgbF4LJlSqV7ISiy2Uw5SNC6iAT5Y04f0eKcdDSWWUlHbxxvgeudV29MoKsybWEJPRetFUOf6IuZ+nh+6vxFc1PlEPiCVmx98pUXqhlaZBUWe79zuhKQaH07cyet0oDNFa+DHA77ZI0Ymp97v6UPwpbIBCPV34KKDaZllsis9LGJGBN2F07bbTBSO7AFWjYBj1dSb1E37nA815Q97cfHylUJiCdAAnAssJ/fkqdqFBuh0mj/Kukvqs+iJahvUPPyBBc7aIfY/1MvF9H72adyLM/pqp43aTdqDUBaDkcfOvWu+U7yFIuWzzeSJqtz90HhLSLgbIKcc3fiepjZ1wGEz+NLF+uzt27vcQTEUekwkEWLN5awJuTPiKCQtxypuUdQZNiilkrghcw9uPmSgVaJXXUC+z2uHxEfaJV/6SZLYbKGyDkoEDsrX9WEYD2JsH; 25:jrKHwYtzZ2E0PCc6dzgcE7j2tLZhAFz12eKZrs436GfY0IaF+9LEJvLApz3YyDLxSmlEhxBSsnPEsM5x0WOve7zIoMeE/UxIPQ1BC/fTdbuSBGB7yPHBZTszbLaHckUIFvvaS/2OaRQWgiDsviJF3eMnK6Z5ZkNRueS2ca3VwbAdCU5Q8tjK/qqtUKzySAlhyAP72z4p2rEcJtoiKHHeed/zMImxvkjbj/kSWMkM9mc7wphpp6aFhFqPs0651/Wf12UtAkmAtgMt6uuaCAKGp/cCl8blUp6C+n8arSJ6RpMSX8sAb3vOns+r6hciHQ9xNs4nq0qtIx/O+F43yhn0ZQAlP/+RQjbLb9eKzUINvH5td3XVMk4cBBazIRQ/N5+K2LXSDKqI7UDCFOMKebdgj+eeu9I+iBQ4DoyI8C2lkE6OU7P7I9FQ6BFMU9BKoZA2k544VTSX0pBWwOK0CSf4r5v/wOiQ/5mjf83MNr4hhfs= X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB176; 31:w3DEGuX/FM7tnnUpsbUryhHmV0uZ0Zy+s7d2biziDjv2J3OHgdn5LjuEbslg/TPdojPeZ3uRH89OmkkFLJVhzSOqSW+VEKRkZGeqgSPBrMPN1C3C0uoSDVlQwrRDUx2ZapfoJXa4EQ2tmlUS9+p7kHxGGaARnhSMb2UB0kHTo+T3HQ5Nf6FnofAds/ukf+4T5oLEmOc35bx/B8aDm2gtvlUZrbVo079qWcHM5YjRzxesLZjIl+v7ND2k78H02ZlNyQaX8bnTPKfWwzK8SYTJVnqw0RmqOP6F8B+1VMvw774= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(185117386973197); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6095135)(601004)(2401047)(13018025)(8121501046)(13016025)(5005006)(93006095)(93001095)(3002001)(10201501046)(6055026)(6096035)(201703131430075)(201703131433075)(201703131448075)(201703161259150)(201703151042153)(20161123556025)(20161123559100)(20161123565025)(20161123563025)(20161123561025); SRVR:BY2PR03MB176; BCL:0; PCL:0; RULEID:(400006); SRVR:BY2PR03MB176; X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB176; 4:890EUY8E7zwhugfoEeSBUbpOt1Juez6XpBjWNNVRp4mA0y9gduRUMOQrvvgv+SY73JSSIFgOPgsKzeQ8bLb5eEbIV+R5k9fFsvt8nLUry1FYMah6tx8K72DePdVD8OGNvoA0PAWip9qRC+6fDc6rVc/9kLP0YPjm8yaUGWRupcQTzY3CVmwnBHcwB4R9Z4LFkc3X/VF4zYxgWuAC0T9pMnU9EHd4JgXGUQPZTHOPmuaII+YJxGgFjUqFIN/nDjxt28Qh9k6t7vi5/s1acQNCvzl4bdU1Irg/CfsKqU3earAWsae+X0FCGDU0QkiRHJHxxTpwb5hZG69q6A89ULLurDV/1ioo70XUUWKRM/AmWM2Za0PogfIbqSBAaAQMStABMXX9hW0OlAl9ScuLht1Oip5U89YXlfhAtDffx7Xy01SgLkaUP7M/GF7qLhQG6AGEOblS80i7FTB1PVcqJhbxTwNOpTUHf9ZvguAj/MVhGimtCGChNb0HsgXMttKWE1sgiCV4qsBxfNlyyPKz6lN51bbAURcKb1OGeyCahUrttZzs1V4UCm28ZpQgJQnHewOw1Y1ge8uOxHHHiU+0knLCJYx4i4NzmxLw+2LQOCJfa6lhvlfzxa+4ZHTcs708TY/5iDhsk7b9GaziFmm8mp1PCE/NQysIWHUlX/HGI6AWxsVH5UYifk32nn7Ek+sQNVG52o9KUQe/TDS3BGM2e+KERATcO2UrRn4/7wOa9OFQyARHyyGeV1/u28LBEcZXUOGHe/queBa9sLg096NG2vrIUE7hKbAlqc5M8+epEAPKCmsG5ATIUogXK90KaN1Z7cBraU6czeCldwp9WnkvgJzxrYiclsP05kHUh0tsGXA73BOxqY75zt1lPPYxA8SIpTjZsKm0R+ZiNqRbpQTqlR9kVA== X-Forefront-PRVS: 0320B28BE1 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR03MB176; 23:rU2jEeuC+STeAonRtPOfED08htEy6+dxwoPgoc3OuL?= EcSiLeCL2LgOWvkKRlPmC5DShayzej3QydqJ64+AU5PQ9aPuiwD/ZsbCck77aj1d48OLrOabDdbK9ueQyRDx3atTFTmCt+PE1yCliOQvImVY2a+rWdrvj0Kd8/W6AeZOrXYcDvSvBUHAhsS0dDNkrbhDh+tFYaPofcaHlVTuTl4YFj0HsV4YMgL0N7duux4it590Xh0yvA25y1Kxclkuuj4j2CAmh79oYDWDxSabaOGw4Tcjt/E/T2PZKXGR6zi1S+txKB81ohs7Fr5sagEIZBSjgojwng5BElZxruboEWS0/Jyb/s9qLRnHQlaSnPUt1PSgVPKalYnBNP45QiH5DRCz4EKHMEccQijkgVuxkdewmwBQ3StDTHqKgWDrbsY4RuWF5HZiMgTqsj1KGyrX/RtjdFDv65V6bAUT5YPEG8CIHSYKQ0dgxY7pkvA1nt7OX2hJynHVYCp3zhJVzpEP9ZLfFaToXR+YnsMzEwbI2ZBKpw5CrrRuSlrcirSgW+8WVPRspRjdgQLeuCR4gEocPa0md99oexBIr4h8ugD5ir2H2nXKTZqlzoK1GY7bN17JRu//tUtYQFdnw4KLW+oZ6aMh4c3Eq9i6MSPWowrQqfrmk/xVSvj+yPPZM4unVvu0ywXD2Rsp7z9mBb7rESJy2Ji/lXOM2csgcIe9qwW20RhWDsTpaP4utvPpCa3LYxmxrl0Cde78PixdhCouuFNhd9QFWtnNyUE+ZT69uQTfVEmxf/mx+EDkl7bQGa5SHuyAIurVIsxRMwSTZaXAk99vekiQQfOeMHDAwkamMQTj1RFvJm3a6iS/NhEs6jxhW1NhI5qwiuDNFy3o3B4+IC0OJRoDaOMrvsAWBiNlipRhKIJRglCziCofOxaLbljTAy1LZIKpEeurV5Ca+fVZz3FGUi2of0gDGFFDiLMRusrWdAnI8oFKBZKCIns1DLhtaXWx3Lhp3O+qeGefxrP7ENfTTzEQJQi49FWRdl14QMZcFrU7PPZu24G0hyc4hlgTd6Re33Ly7BAeeJ0mM8dYp2xjEPywK+5TILFIKZD5SJkTN1C75BbG5JkvPH9vpgYmoZ8bbX0uXpW7x5ZGoLs7gwTahhrIYUF8NSurEPOjBcuCWcSS8kifvB4TAOex6SinuAz5O/pF3qPVZun7ctHgMJR4Kfky66paA53o8XvMX1B7i9n3riO64mH0ppQxzcpt/gYoVpvu3EHaIjFKOYddAYwXJS X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB176; 6:M8/QG2EvTxbSUKMDwJF9DXkDa7D1cHILJ/jBgxh0oku30kqq56ub+bRZOVRnvzIfpSqqwVoLC8wKBjOmdenE0NnMx0tXroO4wbdJCplEZHpUpphaIQJeKG55jckuLnDPKjjjl4SZDnLytW3VFLJfYYOcCf+TI9EJ4JFJ6YItVui3xWafGalRaFlm3gLVtggHaFzwB/hx7c02JxCCgEs6fZqc5Ui3Z9MkgDtg8COFHI62LnaLYD1KV4MAQQ5DpD0swBYup/NZHQhTWFhtVQ7kO25wP4wZ8cOyz+7UqQ0bZDxW5g4NKWq1npOF08k6KPlqe7CPtHXsVTGDPwA0OOlDAGLRG09lwM5cs9cqOO9oReOPf1JjkEgqKyARNsNlhVUXNx76Bxnkz4wtYdiEZax8MWvy7abSRdu/j8kYW8Y6dxm2wBc+LOP6Ki6MNchzN/b9dcPPrDqIvWZb+C8pTSDvNze35vTi51WlNzs4TJXVTKVAFEMph5ZUg++v6xfoO36KYpJtcKUqNc3MZt7rsLbVhA==; 5:5zaGJSOkLYA63tKyl3k7U3hxLIdIg+3CHh2bXHlEi+gVZDIYzDUl4O/1blafEUtHGpCwwc6IZkngxO26bbY3wPPIgz+/zQhvp18us39QeU7vXwyGG2o66RO8OGVfJlcKwZVzMWZuVc1MQ/2SyMg9wHMj52Yuk9dT3wbUtOe09oCA7VN9ix+xB4mPlgvHKx+x; 24:NWKri/F+QuzfYI0z8pTuaGe0BHVQG0SE8YWlnvae/8wbBt5GbGQeQGJYT8mC6xmOMoksJ1HxaibfO0gIBZZmsW/vIQOWI6zPn+6vOVgVsMY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR03MB176; 7:4V1dHH8AomSl2qj3zOfcOrFldsjXhXXWnUqCX5FUTRp3oBnaRyPAMpXvDpAeVz0SlfeJmm+rygiJp9khHiVT9BMMhv3IkKQK1wCZAVIMcKE2Krf/qNAuR4b3y6oBHe6dMQgMYcD/J/hu4gh+t5ayu+9x2ZJv05zCBrhr4/29IuekNGA7GiNf968ihlXu0cSIbf2vSrTS5tDwEZTuR932TumA785RKevITH0+0yV0dmDnNC66aSUiTGpSY8nvUoWwGRN0sVaDpMWIqsEqDH+KP/ejwpeYU+/qK+5DVqji88OlaAq9904B/x3+ezsxM0WF7owYEA1ZjP4O71jpDLX7lw== X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 May 2017 10:19:07.0191 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY2PR03MB176 Subject: [dpdk-dev] [RFC Patch 33/39] net/dpaa: support for checksum offload X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Signed-off-by: Hemant Agrawal Signed-off-by: Shreyansh Jain --- doc/guides/nics/features/dpaa.ini | 2 + drivers/net/dpaa/dpaa_ethdev.c | 8 ++++ drivers/net/dpaa/dpaa_rxtx.c | 88 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 98 insertions(+) diff --git a/doc/guides/nics/features/dpaa.ini b/doc/guides/nics/features/dpaa.ini index 7165e47..cb220e4 100644 --- a/doc/guides/nics/features/dpaa.ini +++ b/doc/guides/nics/features/dpaa.ini @@ -11,6 +11,8 @@ MTU update = Y Promiscuous mode = Y Allmulticast mode = Y Unicast MAC filter = Y +L3 checksum offload = Y +L4 checksum offload = Y Basic stats = Y ARMv8 = Y Usage doc = Y diff --git a/drivers/net/dpaa/dpaa_ethdev.c b/drivers/net/dpaa/dpaa_ethdev.c index 5d406be..c3f9eb5 100644 --- a/drivers/net/dpaa/dpaa_ethdev.c +++ b/drivers/net/dpaa/dpaa_ethdev.c @@ -158,6 +158,14 @@ static void dpaa_eth_dev_info(struct rte_eth_dev *dev, dev_info->max_hash_mac_addrs = 0; dev_info->max_vfs = 0; dev_info->max_vmdq_pools = ETH_16_POOLS; + dev_info->rx_offload_capa = + (DEV_RX_OFFLOAD_IPV4_CKSUM | + DEV_RX_OFFLOAD_UDP_CKSUM | + DEV_RX_OFFLOAD_TCP_CKSUM); + dev_info->tx_offload_capa = + (DEV_TX_OFFLOAD_IPV4_CKSUM | + DEV_TX_OFFLOAD_UDP_CKSUM | + DEV_TX_OFFLOAD_TCP_CKSUM); } static int dpaa_eth_link_update(struct rte_eth_dev *dev, diff --git a/drivers/net/dpaa/dpaa_rxtx.c b/drivers/net/dpaa/dpaa_rxtx.c index 5978090..b51d66c 100644 --- a/drivers/net/dpaa/dpaa_rxtx.c +++ b/drivers/net/dpaa/dpaa_rxtx.c @@ -85,6 +85,82 @@ (_fd)->bpid = _bpid; \ } while (0) +static inline void dpaa_checksum(struct rte_mbuf *mbuf) +{ + struct ether_hdr *eth_hdr = rte_pktmbuf_mtod(mbuf, struct ether_hdr *); + char *l3_hdr = (char *)eth_hdr + mbuf->l2_len; + struct ipv4_hdr *ipv4_hdr = (struct ipv4_hdr *)l3_hdr; + struct ipv6_hdr *ipv6_hdr = (struct ipv6_hdr *)l3_hdr; + + PMD_TX_LOG(DEBUG, "Calculating checksum for mbuf: %p", mbuf); + + if (((mbuf->packet_type & RTE_PTYPE_L3_MASK) == RTE_PTYPE_L3_IPV4) || + ((mbuf->packet_type & RTE_PTYPE_L3_MASK) == + RTE_PTYPE_L3_IPV4_EXT)) { + ipv4_hdr = (struct ipv4_hdr *)l3_hdr; + ipv4_hdr->hdr_checksum = 0; + ipv4_hdr->hdr_checksum = rte_ipv4_cksum(ipv4_hdr); + } else if (((mbuf->packet_type & RTE_PTYPE_L3_MASK) == + RTE_PTYPE_L3_IPV6) || + ((mbuf->packet_type & RTE_PTYPE_L3_MASK) == + RTE_PTYPE_L3_IPV6_EXT)) + ipv6_hdr = (struct ipv6_hdr *)l3_hdr; + + if ((mbuf->packet_type & RTE_PTYPE_L4_MASK) == RTE_PTYPE_L4_TCP) { + struct tcp_hdr *tcp_hdr = (struct tcp_hdr *)(l3_hdr + + mbuf->l3_len); + tcp_hdr->cksum = 0; + if (eth_hdr->ether_type == htons(ETHER_TYPE_IPv4)) + tcp_hdr->cksum = rte_ipv4_udptcp_cksum(ipv4_hdr, + tcp_hdr); + else /* assume ethertype == ETHER_TYPE_IPv6 */ + tcp_hdr->cksum = rte_ipv6_udptcp_cksum(ipv6_hdr, + tcp_hdr); + } else if ((mbuf->packet_type & RTE_PTYPE_L4_MASK) == + RTE_PTYPE_L4_UDP) { + struct udp_hdr *udp_hdr = (struct udp_hdr *)(l3_hdr + + mbuf->l3_len); + udp_hdr->dgram_cksum = 0; + if (eth_hdr->ether_type == htons(ETHER_TYPE_IPv4)) + udp_hdr->dgram_cksum = rte_ipv4_udptcp_cksum(ipv4_hdr, + udp_hdr); + else /* assume ethertype == ETHER_TYPE_IPv6 */ + udp_hdr->dgram_cksum = rte_ipv6_udptcp_cksum(ipv6_hdr, + udp_hdr); + } +} + +static inline void dpaa_checksum_offload(struct rte_mbuf *mbuf, + struct qm_fd *fd, char *prs_buf) +{ + struct dpaa_eth_parse_results_t *prs; + + PMD_TX_LOG(DEBUG, " Offloading checksum for mbuf: %p", mbuf); + + prs = GET_TX_PRS(prs_buf); + prs->l3r = 0; + prs->l4r = 0; + if (((mbuf->packet_type & RTE_PTYPE_L3_MASK) == RTE_PTYPE_L3_IPV4) || + ((mbuf->packet_type & RTE_PTYPE_L3_MASK) == + RTE_PTYPE_L3_IPV4_EXT)) + prs->l3r = DPAA_L3_PARSE_RESULT_IPV4; + else if (((mbuf->packet_type & RTE_PTYPE_L3_MASK) == + RTE_PTYPE_L3_IPV6) || + ((mbuf->packet_type & RTE_PTYPE_L3_MASK) == + RTE_PTYPE_L3_IPV6_EXT)) + prs->l3r = DPAA_L3_PARSE_RESULT_IPV6; + + if ((mbuf->packet_type & RTE_PTYPE_L4_MASK) == RTE_PTYPE_L4_TCP) + prs->l4r = DPAA_L4_PARSE_RESULT_TCP; + else if ((mbuf->packet_type & RTE_PTYPE_L4_MASK) == RTE_PTYPE_L4_UDP) + prs->l4r = DPAA_L4_PARSE_RESULT_UDP; + + prs->ip_off[0] = mbuf->l2_len; + prs->l4_off = mbuf->l3_len + mbuf->l2_len; + /* Enable L3 (and L4, if TCP or UDP) HW checksum*/ + fd->cmd = DPAA_FD_CMD_RPD | DPAA_FD_CMD_DTC; +} + static inline struct rte_mbuf *dpaa_eth_fd_to_mbuf(struct qm_fd *fd, uint32_t ifid) { @@ -251,6 +327,18 @@ dpaa_eth_queue_tx(void *q, struct rte_mbuf **bufs, uint16_t nb_bufs) } rte_pktmbuf_free(mbuf); } + if (mbuf->ol_flags & DPAA_TX_CKSUM_OFFLOAD_MASK) { + if (mbuf->data_off < DEFAULT_TX_ICEOF + + sizeof(struct dpaa_eth_parse_results_t)) { + PMD_DRV_LOG(DEBUG, "Checksum offload Err: " + "Not enough Headroom " + "space for correct Checksum offload." + "So Calculating checksum in Software."); + dpaa_checksum(mbuf); + } else + dpaa_checksum_offload(mbuf, &fd_arr[loop], + mbuf->buf_addr); + } } else { PMD_DRV_LOG(DEBUG, "Number of Segments not supported"); /* Set frames_to_send & nb_bufs so that