From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id B811242C45; Wed, 7 Jun 2023 03:58:38 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DD0E142D38; Wed, 7 Jun 2023 03:58:06 +0200 (CEST) Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2107.outbound.protection.outlook.com [40.107.220.107]) by mails.dpdk.org (Postfix) with ESMTP id 07DC842D4B for ; Wed, 7 Jun 2023 03:58:05 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ks4jjV1shBSRz8ltN4RKfHHohn+4FF5L892dd0Oc5Jb1TNxsOxdQfC2XlR2plf6k9ZNqHirNGZbhifnaMhYfOlEOe9xixNuE/gv3Xjuxjq7+bfobbYWmW856o7m49QwsbV1Z6bn4uPzURMwqE6goCl+bx5VGhMmSgH5tiJVYKF+AZM2ymvU0kFtkbsRW9HmoTE/vZ/hMZ3sxFKsKXFN96m4qQQn3+P5qZW3HeiFrADmyfE48sgwoxyOzVxzyPi9nifaGM+BlhgqV8OOWjudKT+oAAA3C9RfVAAxRZdCpN870liUIt/MTk/OHV2+KZdYcYuQZJvbFSEXDrDWWqtMylw== 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=ORAqiyXYpYTjrDA7OPWWBxfZkMgncqSdyt5HOOxFRvU=; b=ILq1YDlRut6a0pBV43Y39dhjZj+nT/tWhoEtvUv0t7nxyyq15vE3Yail2g4IfjdheGRSGZKRvKrMUIQSfR1rH6HWcRxrZQ6hxQLUOyk8X6I3/xPh+PL8oRNuHDKNKx+OTLIIi+fl3trpr2HXpIs/KPpTC3qzVi1EJ6XsLhU+8GBwJnEh9uU2oVD5FchhaVhqKDxJPlFYngPXyy8TuT6wSgVp94WNSF40sbTY/4s4GBRxp19wcK0ANB/QVBVVmX/n+87w9HJNU/1XA76v70xFk5ArsmWQ3Ii++2VJTfZl5iLQbsjXunxCJgqqgwHYZJo3PzqeiluPyD/tYcFP4dmaeg== 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=ORAqiyXYpYTjrDA7OPWWBxfZkMgncqSdyt5HOOxFRvU=; b=doscEb22wgnYh94cb+OkSMhCxXiJlNdaDEHbZvagETyu3Lx60EFe03XwezZWiI6KlVfyAR189T0b/XaiKzeGvZy7iYtasj7aOfnDDF+6gCV5TVyhnjGOMj1UrbjMcW0cIZrdqhbXopHwB+AFU18ZXT3HcfFt3iJQjnV2eSKt3K0= 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 PH7PR13MB5453.namprd13.prod.outlook.com (2603:10b6:510:138::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.33; Wed, 7 Jun 2023 01:58:03 +0000 Received: from SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::d2cb:a650:e1ce:2174]) by SJ0PR13MB5545.namprd13.prod.outlook.com ([fe80::d2cb:a650:e1ce:2174%3]) with mapi id 15.20.6455.030; Wed, 7 Jun 2023 01:58:03 +0000 From: Chaoyong He To: dev@dpdk.org Cc: oss-drivers@corigine.com, niklas.soderlund@corigine.com, Chaoyong He Subject: [PATCH 06/10] net/nfp: add the xmit function of NFDk for ctrl VNIC Date: Wed, 7 Jun 2023 09:57:05 +0800 Message-Id: <20230607015709.336420-7-chaoyong.he@corigine.com> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230607015709.336420-1-chaoyong.he@corigine.com> References: <20230607015709.336420-1-chaoyong.he@corigine.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: SG2PR02CA0131.apcprd02.prod.outlook.com (2603:1096:4:188::6) To SJ0PR13MB5545.namprd13.prod.outlook.com (2603:10b6:a03:424::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ0PR13MB5545:EE_|PH7PR13MB5453:EE_ X-MS-Office365-Filtering-Correlation-Id: 1dc6d8ea-0ce1-43a9-2ffb-08db66faa111 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: c/62Rv0v0T7jxlNSao3nndczmleTbTGf31SRkyZiTZ5f+z3ixs+J5Ro++4Th+7jgIAL8jdqPlHAq0Je0F1iHBJJwtFXjQTS+SLt93CJVa1hAtJDhEZP/4sRVANCrXKvqGcVNJUdK2l0tofzR3VAS5eNBAWC4imvttOxgqOOPwCsx9HtTDjSaYz7mBtpPHS3/knn3Z4+fLiKxMDNXdvxfJAVMoG+WPKmBMde3P6EYbMBA235FpY/dmAW0fVdBMFm9bgsWV3GHEBdQaO6WZ+0emTkRVIObhZhUIt/18b8bg99YIAKFkJGLnXpcGOE2kEfD/TedIA2+4EJe3x5AhtU+/HuYxJnmofrvlWr+BXKKMWsJ4Ug4qNgAKZ0LPQTuQeggXUP1qKsmhH/oOh7/lIqtMP9Cz7akD4XiJVdxgoK8FO3GMLW8mQAUX4c1weq/7zq6lHS447nNleHGuQS10Jv/VSXZlNfdCCpgajqom8uxJHzZNDNdBhcenGVLRQxwqr/+B86EhYErGjp7li3yLQi1E1XvgmvY7fH2SBandHw+OhWVVPBe88SR3KbiCrjT3zQ2bGdMyKcsLd3QalS4s5nhAc3fWpFbfHbhYzkAl0ioqmXQKweCWizSLPYZji8ZaYNI 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:(13230028)(4636009)(346002)(396003)(376002)(136003)(366004)(39840400004)(451199021)(107886003)(1076003)(6506007)(26005)(6512007)(36756003)(66574015)(83380400001)(38350700002)(86362001)(38100700002)(186003)(2616005)(8676002)(4326008)(41300700001)(44832011)(6916009)(478600001)(66946007)(66476007)(2906002)(316002)(8936002)(5660300002)(6486002)(52116002)(66556008); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bWgyMDJZeWsyb2Y5czk0Wm9RZzlHVUwxb24vWmF5dmh6bHZhZFJQSWxGR2o3?= =?utf-8?B?WGdmUGIwVXM4ZnJkRWFjcWpQbDdvOGxkSGJIdWY3TytUendXcjIrd0FNSWE0?= =?utf-8?B?TlJjVXFWVU9VWWZ0dy9ncVJoMHZxRDF3NFlZY3RtUTdiYnRSTUdiYWFaM05t?= =?utf-8?B?VHFkVEtFd1diYnZuOFcxZ21oZks4SkJLREZpR25WZi9lRXFiNjNocjIyZTY2?= =?utf-8?B?WWt4OE4vS3FDN0Z2Sk1SVkFwdldRYXdWaGhyYkdaeGk4Tk1wWjV3dm5rK1Yv?= =?utf-8?B?WG9pQ0N1ZklLeUFrR2p0VFg5NEtpQXRUNEVxZ2N4cjVEYlNySktBbFYvQTJ6?= =?utf-8?B?UkVxTHhVMFN5NjJhZDk4SjRrVVpPa2JRSTZyOUxEdDRQTWVwVE0xTXZvZi9T?= =?utf-8?B?ZEluRmo3M28xSEFPcVlLUi9jcGMzK3lKZzdNS21vWmVlY0xpTGhwdVVoYTBC?= =?utf-8?B?OXo5RzZTK2FMK3VZOS8xeE1ROWtHckNPcFdXQ3M5M3JtSlFGZTBCQVphMmN3?= =?utf-8?B?ZXdGc3FCRkN1dG1ic2krcHZDbTc5UFgweDFKeGFPOTkwdTF3eXBPQTFaSzR2?= =?utf-8?B?OHVoUys2bHdIOUowVGZRNThxMVVuKy9NRStTanFadUUram1Xa0tRajBKRUFk?= =?utf-8?B?WXI5M1U5ZXVRb1hhY1hremdGb1A3MlZ4OHdWZlp0RHV6UmhpdUtkcnZ4anpH?= =?utf-8?B?dXVyR2M1WXZDQmMyN3dEc1NGTStHKzM1QmY1L1duY2k2U3RrTkdveGl0K0xo?= =?utf-8?B?bDNmTENORU4xd1JmOE9EZUZWeitUTVFnelVvVS9KdDgyM0tybTVGOHEyYk9x?= =?utf-8?B?OHFQKzNNZDJZelNUMlJhZmIzbVJwcEJoNzFLM3hTUWFFNjVPWExjMldrczh4?= =?utf-8?B?M0ZOVmhZY3FwT280d1BCMld0MGNSeCtVTG9SczFjUEhnZ3cva0Q4eXFqQmZI?= =?utf-8?B?VjNkUGhSaXJoVlJoNlc2T1pMN2tlbE1TSjQzS2N3UEJIeUFoMjR4d0ljdVpk?= =?utf-8?B?d3pIQ2Jab0U3T1pSVkpqQ2xvNG53cDlSWnk0azBKcTVBbFlBOXUxcTRKUDRF?= =?utf-8?B?VkMzNzFDeGw2SVNkdk9XZmM0NGZxRkVxSzVJMmNFa2Q5SFdackVBRU5vSTBP?= =?utf-8?B?L0wwK3c4OVdUaTVtdUJpQ0w3Kzk4cUlZYVpJRGVqenU5VW9Ia0gzL20zVXFK?= =?utf-8?B?M3QvY1lONFIzbjJYTkJXZnVEU2Izd0pXUUJ6NVptcVMzOGEzb240L29VTzg2?= =?utf-8?B?VzViL2hHL2wwWXlodEJiOFB2NU5Gak03dWtFZXlzZFp4N3JIWHkyaEZyWDg4?= =?utf-8?B?bGU3c1NSanh3WWxMRE54QlpOMzh4Sk13czk3d2x4S3BOMFZjQWRpNUdsSFpU?= =?utf-8?B?R0RiRjFYQlI5VXZ6QjBCcDJ4dmtKbkJQcmZRYVdSbGFFSE52ZGFIYkFMckMz?= =?utf-8?B?WXZGdW9hU2NZUnNlSy9kbDBIbEtFaUlSTGhKNU9zVy9nNXhFUFBVVTVCakMx?= =?utf-8?B?VmJJWTVmMjNxaVovNllOMDZRbitjcExSNG5tWkZtNkpWbXN4VlRoVEZ4RHZG?= =?utf-8?B?UkgyRUEvNzhJTjl1cFpIK21OM3FlUTljSTFoTlJXVkRyNC9EWDlweUhFSGtU?= =?utf-8?B?WjZrTTJ2MXJEbFNyWXZ3WnhRYkEwTzA4ZGk2T1psOWFURFY5eE5Bd3J6SDRX?= =?utf-8?B?M2ZvVFVrTk1DWkZ4TGl4QUo4Vk5nR3VrUis5TTJCOEkwMzRmeDZSbXlLWHA1?= =?utf-8?B?YUFQSWRFTDJsOW1vYVIrNm9hVVVnQXdhQkRTKzY2QUxTMGtVOVArU1NIb2dX?= =?utf-8?B?MHFQSkgvSzZUa3dnZkZ3UGhsQmpFS055dTh5UDhZM2t5RzJyVEpZanVZMzcy?= =?utf-8?B?WmlyY1BhNlJsN3Fpc0hqTFg3Y3I3am9Fd0dtZDNTUzBXNU1CSkdMemVjNEI5?= =?utf-8?B?a2p2cGR6Q1UzRW00VURCWU4yNXk0SmJGSzBCdDNHaUEzYlZGWHVjdTJwelg1?= =?utf-8?B?TE9taUtJYVhCVXhnZCtwalYwVnJWNDNEREQ5ekcvQjZLcXhBY2VJdEJtZDhW?= =?utf-8?B?aElpYUpZUHNyY2FrK1ZGNzNQNDh4N0dNR29zRitIMzM0L0tPL2R2VUVQODdu?= =?utf-8?B?bG1UVElJZlJjZmlLbGh2TFRtSlBJVy9jVWpyYTI4a1IyQVUvcCtJbXhKMldE?= =?utf-8?B?MXc9PQ==?= X-OriginatorOrg: corigine.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1dc6d8ea-0ce1-43a9-2ffb-08db66faa111 X-MS-Exchange-CrossTenant-AuthSource: SJ0PR13MB5545.namprd13.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jun 2023 01:58:03.5256 (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: SaLNRp4up5rjDu0JwEVsWXlVsemEHdnbsMYii0JB6eOLavGdf9Ou1dFsjBV0C/Uq5T5R5nZAQ5O9du9cZ+o1uPgG68pg12CI6CNT7BWLGhI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR13MB5453 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 Add the xmit function of NFDk for ctrl VNIC. Signed-off-by: Chaoyong He Reviewed-by: Niklas Söderlund --- drivers/net/nfp/flower/nfp_flower_ctrl.c | 138 ++++++++++++++++++++++- drivers/net/nfp/nfdk/nfp_nfdk.h | 2 + drivers/net/nfp/nfdk/nfp_nfdk_dp.c | 2 +- 3 files changed, 140 insertions(+), 2 deletions(-) diff --git a/drivers/net/nfp/flower/nfp_flower_ctrl.c b/drivers/net/nfp/flower/nfp_flower_ctrl.c index bafcf5b017..0be44a68aa 100644 --- a/drivers/net/nfp/flower/nfp_flower_ctrl.c +++ b/drivers/net/nfp/flower/nfp_flower_ctrl.c @@ -12,6 +12,7 @@ #include "../nfp_ctrl.h" #include "../nfp_rxtx.h" #include "../nfd3/nfp_nfd3.h" +#include "../nfdk/nfp_nfdk.h" #include "nfp_flower.h" #include "nfp_flower_ctrl.h" #include "nfp_flower_cmsg.h" @@ -224,14 +225,149 @@ nfp_flower_ctrl_vnic_nfd3_xmit(struct nfp_app_fw_flower *app_fw_flower, return cnt; } +static uint16_t +nfp_flower_ctrl_vnic_nfdk_xmit(struct nfp_app_fw_flower *app_fw_flower, + struct rte_mbuf *mbuf) +{ + int nop_descs; + uint32_t type; + uint32_t dma_len; + uint32_t tmp_dlen; + uint64_t dma_addr; + uint32_t dlen_type; + uint32_t used_descs; + uint32_t free_descs; + struct rte_mbuf **lmbuf; + struct nfp_net_txq *txq; + uint32_t issued_descs = 0; + struct rte_eth_dev *ctrl_dev; + struct nfp_net_nfdk_tx_desc *ktxds; + + ctrl_dev = app_fw_flower->ctrl_hw->eth_dev; + + /* Flower ctrl vNIC only has a single tx queue */ + txq = ctrl_dev->data->tx_queues[0]; + + if (unlikely(mbuf->nb_segs > 1)) { + PMD_TX_LOG(ERR, "Multisegment packet not supported"); + return 0; + } + + if (nfp_net_nfdk_free_tx_desc(txq) < NFDK_TX_DESC_PER_SIMPLE_PKT || + nfp_net_nfdk_txq_full(txq)) + nfp_net_tx_free_bufs(txq); + + free_descs = nfp_net_nfdk_free_tx_desc(txq); + if (unlikely(free_descs < NFDK_TX_DESC_PER_SIMPLE_PKT)) { + PMD_TX_LOG(ERR, "ctrl dev no free descs"); + return 0; + } + + nop_descs = nfp_net_nfdk_tx_maybe_close_block(txq, mbuf); + if (nop_descs < 0) + return 0; + + issued_descs += nop_descs; + ktxds = &txq->ktxds[txq->wr_p]; + + /* + * Checksum and VLAN flags just in the first descriptor for a + * multisegment packet, but TSO info needs to be in all of them. + */ + dma_len = mbuf->data_len; + if (dma_len <= NFDK_TX_MAX_DATA_PER_HEAD) + type = NFDK_DESC_TX_TYPE_SIMPLE; + else + type = NFDK_DESC_TX_TYPE_GATHER; + + /* Implicitly truncates to chunk in below logic */ + dma_len -= 1; + + /* + * We will do our best to pass as much data as we can in descriptor + * and we need to make sure the first descriptor includes whole + * head since there is limitation in firmware side. Sometimes the + * value of 'dma_len & NFDK_DESC_TX_DMA_LEN_HEAD' will be less + * than packet head len. + */ + if (dma_len > NFDK_DESC_TX_DMA_LEN_HEAD) + dma_len = NFDK_DESC_TX_DMA_LEN_HEAD; + dlen_type = dma_len | (NFDK_DESC_TX_TYPE_HEAD & (type << 12)); + ktxds->dma_len_type = rte_cpu_to_le_16(dlen_type); + dma_addr = rte_mbuf_data_iova(mbuf); + ktxds->dma_addr_hi = rte_cpu_to_le_16(dma_addr >> 32); + ktxds->dma_addr_lo = rte_cpu_to_le_32(dma_addr & 0xffffffff); + ktxds++; + + /* + * Preserve the original dlen_type, this way below the EOP logic + * can use dlen_type. + */ + tmp_dlen = dlen_type & NFDK_DESC_TX_DMA_LEN_HEAD; + dma_len -= tmp_dlen; + dma_addr += tmp_dlen + 1; + + /* + * The rest of the data (if any) will be in larger DMA descriptors + * and is handled with the dma_len loop. + */ + lmbuf = &txq->txbufs[txq->wr_p].mbuf; + if (*lmbuf != NULL) + rte_pktmbuf_free_seg(*lmbuf); + *lmbuf = mbuf; + while (dma_len > 0) { + dma_len -= 1; + dlen_type = NFDK_DESC_TX_DMA_LEN & dma_len; + + ktxds->dma_len_type = rte_cpu_to_le_16(dlen_type); + ktxds->dma_addr_hi = rte_cpu_to_le_16(dma_addr >> 32); + ktxds->dma_addr_lo = rte_cpu_to_le_32(dma_addr & 0xffffffff); + ktxds++; + + dma_len -= dlen_type; + dma_addr += dlen_type + 1; + } + + (ktxds - 1)->dma_len_type = rte_cpu_to_le_16(dlen_type | NFDK_DESC_TX_EOP); + + ktxds->raw = rte_cpu_to_le_64(NFDK_DESC_TX_CHAIN_META); + ktxds++; + + used_descs = ktxds - txq->ktxds - txq->wr_p; + if (RTE_ALIGN_FLOOR(txq->wr_p, NFDK_TX_DESC_BLOCK_CNT) != + RTE_ALIGN_FLOOR(txq->wr_p + used_descs - 1, NFDK_TX_DESC_BLOCK_CNT)) { + PMD_TX_LOG(INFO, "Used descs cross block boundary"); + return 0; + } + + txq->wr_p = D_IDX(txq, txq->wr_p + used_descs); + if (txq->wr_p % NFDK_TX_DESC_BLOCK_CNT) + txq->data_pending += mbuf->pkt_len; + else + txq->data_pending = 0; + + issued_descs += used_descs; + + /* Increment write pointers. Force memory write before we let HW know */ + rte_wmb(); + nfp_qcp_ptr_add(txq->qcp_q, NFP_QCP_WRITE_PTR, issued_descs); + + return 1; +} + void nfp_flower_ctrl_vnic_xmit_register(struct nfp_app_fw_flower *app_fw_flower) { + struct nfp_net_hw *hw; struct nfp_flower_nfd_func *nfd_func; + hw = app_fw_flower->pf_hw; nfd_func = &app_fw_flower->nfd_func; - nfd_func->ctrl_vnic_xmit_t = nfp_flower_ctrl_vnic_nfd3_xmit; + if (hw->ver.extend == NFP_NET_CFG_VERSION_DP_NFD3) + nfd_func->ctrl_vnic_xmit_t = nfp_flower_ctrl_vnic_nfd3_xmit; + else + nfd_func->ctrl_vnic_xmit_t = nfp_flower_ctrl_vnic_nfdk_xmit; } uint16_t diff --git a/drivers/net/nfp/nfdk/nfp_nfdk.h b/drivers/net/nfp/nfdk/nfp_nfdk.h index 0e3c6cc90d..898454102d 100644 --- a/drivers/net/nfp/nfdk/nfp_nfdk.h +++ b/drivers/net/nfp/nfdk/nfp_nfdk.h @@ -237,5 +237,7 @@ int nfp_net_nfdk_tx_queue_setup(struct rte_eth_dev *dev, uint16_t nb_desc, unsigned int socket_id, const struct rte_eth_txconf *tx_conf); +int nfp_net_nfdk_tx_maybe_close_block(struct nfp_net_txq *txq, + struct rte_mbuf *pkt); #endif /* _NFP_NFDK_H_ */ diff --git a/drivers/net/nfp/nfdk/nfp_nfdk_dp.c b/drivers/net/nfp/nfdk/nfp_nfdk_dp.c index 59c507e03b..dbb15581c4 100644 --- a/drivers/net/nfp/nfdk/nfp_nfdk_dp.c +++ b/drivers/net/nfp/nfdk/nfp_nfdk_dp.c @@ -63,7 +63,7 @@ nfp_net_nfdk_tx_close_block(struct nfp_net_txq *txq, txq->wr_p = D_IDX(txq, wr_p + nop_slots); } -static int +int nfp_net_nfdk_tx_maybe_close_block(struct nfp_net_txq *txq, struct rte_mbuf *pkt) { -- 2.39.1