From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM03-CO1-obe.outbound.protection.outlook.com (mail-co1nam03on0084.outbound.protection.outlook.com [104.47.40.84]) by dpdk.org (Postfix) with ESMTP id CB6C31B019 for ; Thu, 18 Jan 2018 14:06:36 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=rPZ4GPR8G7nWhEYaLzzKJZrOWApsxtMeCPxnELIsNDo=; b=GYILfVBxtOAz3MMoizWFrpeY/QkUSE7Cm9NZ9CXJs0aXMUnKDPdDFms2EmqWK+fjbYHjcTBz1h6XRgCusBcQes6Wy+KTKi10ZzVoAOAsBU8PyTr1Op8GSyWZfIEx+RKdc2LQW6/OmQc2XIEXsKi0JqJQYFEQ8t/+UvycjVX2FXk= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Maciej.Czekaj@cavium.com; Received: from mjc-pc.semihalf.local (31.172.191.173) by DM5PR07MB2890.namprd07.prod.outlook.com (10.168.102.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.407.7; Thu, 18 Jan 2018 13:06:33 +0000 From: maciej.czekaj@caviumnetworks.com To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shahafs@mellanox.com, thomas@monjalon.net, Maciej Czekaj , Maciej Czekaj Date: Thu, 18 Jan 2018 14:06:13 +0100 Message-Id: <1516280773-5469-1-git-send-email-maciej.czekaj@caviumnetworks.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1514985137-2653-1-git-send-email-maciej.czekaj@caviumnetworks.com> References: <1514985137-2653-1-git-send-email-maciej.czekaj@caviumnetworks.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [31.172.191.173] X-ClientProxiedBy: VI1PR0202CA0005.eurprd02.prod.outlook.com (52.134.10.18) To DM5PR07MB2890.namprd07.prod.outlook.com (10.168.102.144) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 01a10f08-2b29-4114-0d1c-08d55e744d6b X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4604075)(4534125)(4602075)(4627221)(201703031133081)(201702281549075)(2017052603307)(7153060)(7193020); SRVR:DM5PR07MB2890; X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB2890; 3:/1IS20+dOOvMWPZylYy3Gvp8Rv2KltaXgfuWyi59OzLQ3DXRpY3WtZsHvpRdp3UUn5dGQREyEplZL9Dm+gIP+kekteftbkPqrntRa0kQY1dgOtN9KM7wok7lPjwGm5FcIB83q87YiA2Svb/pk+JjI4pTSn4wpR32dRQdMNiDJg81NV+GVWfgOpPKTGTRiAHGukuPBf9c+n+Y4x0L4o1U1nRS2iqZbloXoYTYkdqsXTuRS1mkzymuQcV42tZlw6ZU; 25:PZ44z0zXG+zDjGYszkqhl0tuXpmZ/K8i6kIy9G2vxMzUqZ0umlXAvezhGBiUnXK/VYMfEft7g1EI9J5EO3lx5yG1ABMBh2c+NABEpZSNJXeCCUHnK/LkIEsOfzoiDLJUbRMOSe58cSvrFqAQ+kfjY+0BC/c4Kl8kE2ELIXFHNn3q3eXj4Q8PXJFPyJJeQAViduKSDfLp0v4ONjNsPKdb8EjP02t3773Owpqn7lW0mUb/wRBr9zycfrxIBp3ySmWy6S44LU+m3Ivrz057N5lFBdBT6BVo4rPLu1kNwZuP/I/z2Qx7ILNI31nXjJXE5oIvrIRysS/Lj9ZufDexO5A5ww==; 31:W+U96n1adBlnrIP/xAoHhEaZicchBtQsub0Pf0pynFtwXDlfSECbB70iZSQvpm9RDOV3ZjoWujzOg1gwtdfqr/4PahUNn/aW+NL9q7NOxFiEhpgBJNk5TVta8NwUMF1wpMSaddTKQI4fgOlVgsDwRHQRyrqMSaJl+vIcor+tetzfkZZ1QDothNYSvZI+woogUsfj2yMt3pDaS5E3aIbhICsBqdgurafRphZdo6Devys= X-MS-TrafficTypeDiagnostic: DM5PR07MB2890: X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB2890; 20:W1gbt72lMIY3q1DDnoOs56Ad8N4M+JheIWm7KiKjmCGDcpCJLWWXaA9FMPj4mPdSJj30qRmDaVadZ+fuC7ztkRxgWLikDtQKfpRrNg7LtcDI6xOV23MEPmZsELOMvGaQCsIo653WbjrB3p2D8GaelDTyjdy6qput9awMFqbSAGU/W3IqJ5Hj4773SggA85ds+daMBaViMc3NauAm+Wzru2ZApsTalTwcqtCvxDLTb7qtb3TnTZ/GWa53UzIUUXcFrcD2nIrMMCMBCzrmtcs1BKqxm42K1uOf3vi4AbI4HP82M9xiF65jG163e+N5i7djM2k0I1WdvKDZiKzs/SsutSFUn+hLO+sg5jpCOH0cQJjtjX11gpUdNWjYBWpXEG1JPaaH+3kpwBV1303c1ZjAGUWFRruta5NC3i5hbZU6du0H2ysrpgs0T47BSP8jYaZ1MDwpQevifYMfgN2oyLocK16f85pwS7TY28hDKLQH/ee3nn2tB9QXJzVAUSktu9p6qMhNZUekC4wj+SF6rbpD0RkFkCEIxsMAvAticSlzGBd86EdL+cIO0jyycojdwysdFBeLx/863bRKLEPRubPeBFzEAkf76w4ZhprKga5DwEQ=; 4:QhwVKOnw+yhWoUOS6LNDTMB/YwxPiFgiZV/OZrH50ih4Fa0pGpUYGrXqM5Dsy/RUnGHz+OheeCbR9UPZGBbtFPWbvIp5HQRlx40TDliVWuIBgjrD1Tyco18OnOTAEBu3XboECPFs9KkjxTe7Jgn1SkE+R6qVwV/QQfDMcoWl7zCbOBFG3RsdEQd/Xw2m+Wl6M5a51OIKAIN/ZKinQvK1DR/zVKMHLzPOALFUYvYTj7ym2i4ALJlIBw5kK2GwlSx2zCA6WsT3YinNCWjhwkCyQQ== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040470)(2401047)(8121501046)(5005006)(3231023)(2400061)(944501161)(3002001)(10201501046)(93006095)(6041268)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(20161123562045)(20161123560045)(20161123558120)(6072148)(201708071742011); SRVR:DM5PR07MB2890; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:DM5PR07MB2890; X-Forefront-PRVS: 05568D1FF7 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(376002)(39380400002)(396003)(39860400002)(366004)(346002)(189003)(199004)(4326008)(2361001)(36756003)(50226002)(107886003)(2351001)(6512007)(9686003)(305945005)(53936002)(106356001)(8676002)(575784001)(52116002)(386003)(6506007)(59450400001)(6486002)(51416003)(33896004)(76176011)(50466002)(81156014)(3846002)(6116002)(97736004)(8936002)(66066001)(316002)(72206003)(48376002)(81166006)(5660300001)(16526018)(26005)(54906003)(16586007)(25786009)(2950100002)(42882006)(6916009)(478600001)(6666003)(2906002)(7736002)(68736007)(105586002)(47776003)(16060500001)(85772001)(217873001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR07MB2890; H:mjc-pc.semihalf.local; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR07MB2890; 23:rLyTh0u/RFAlpBXXHN0AuG2sIQkSKhe3qaNKEpRFw?= =?us-ascii?Q?3qFEeaFYFRQSd96TSBFZBR75XxqRfUQKLFAjTjxB/J+vh1FXWrGhGKi13H4g?= =?us-ascii?Q?FHSGxbA1Ac4Bc4agVdRIpjm6aVFTeVEVgz4hxl1y+ncmMv6MbuyoX6fqcFk8?= =?us-ascii?Q?3J+QhVxSlUNXCeXx71Yz3D/WuNrGbHz+xMt/KjCUkZMxwTA5u0UVSfBeNFm6?= =?us-ascii?Q?IxCfxedt/XgB+a8T9zfWg5MBL/U1As8ekOZMZTnbOS5CPNr8bKUQZRUAbGOd?= =?us-ascii?Q?Ff4nTzXxSn951WrRy0QW/j+AE8emvA6BkRHpUn3s6hVDtIYUACCD7XRXiO38?= =?us-ascii?Q?SuIujhsSfbguJGijhfTEe8ID4c6Y5NdsIS36oAgXv08ya+EPd3IAtzsyuWyv?= =?us-ascii?Q?dSOOrMVKgN4SHkje/XAnXhIytTOLY+hq9sKlWdVJ8U1C9ED+2hr3ImeXm3O0?= =?us-ascii?Q?EG8nUOPkyiFHQkQfia4ZU9DILUL9OMgNHwaMzHZ5smy3KGVjKnnLAN1kFVUW?= =?us-ascii?Q?dlDwmAftgEPo2AKyFBslDdYGk8qGvUcuM0uAfBHUCyUBis/E3GMry1dYmk7F?= =?us-ascii?Q?WClqmWgxp0KGrdumUDek0aN3k+EgRv7SjWkeqXeoqbeWt+io0YIYhv/qkXqV?= =?us-ascii?Q?knOg2hvxeBCvjV3rW6Wbi33q3EZxAyEOYHgmpEglPkZV/lkwSiJNpCIfEdYe?= =?us-ascii?Q?qdhW13epqIZUB7/Ir0Pp/dRCc9ZtirXGjhw62XVUJpyLdgH1p9ve84vZMLfE?= =?us-ascii?Q?A94U3ZPloPM3umqyYOs15xKyVrtFv6HMXiGaBO1R5z7UHWrmMEGfFyv2t1qB?= =?us-ascii?Q?EdFVe+D8piDkpBOZsIOXlpREjez/4nU4UCq1lnDOOFlTrZD4wdKljaxH8Me6?= =?us-ascii?Q?ifwsn6l98CLTmTM1PSKvlQk9ffVSyFzhdv1/tEdesawq18B6JhBdcFyUW3yd?= =?us-ascii?Q?PXatn37X9KQTkptHoaze6dgki3qlCGvhenKTcvCYQQfkHRsTiBOL7Ppz50qU?= =?us-ascii?Q?QwIF6FRN5XRNqpOBGcz3umRb/w3ueEPjHaoDYpJMUrpMUY39q95X+g3xuYg7?= =?us-ascii?Q?wBtqohPsvj4UEtHEAQ2CHD3v5GzKgoLqxAdbGqaNO/OscP/w10/sd2aEt5wp?= =?us-ascii?Q?sTCZhyxZ5O3dKU7xxfQBHh0wc9kn9ntQ4wWZZHiXcSnlhrHHjlRvPAhxsEk7?= =?us-ascii?Q?eo5xiAj3nMUt5vvr8dxxGQ9Bmm2L3m8njC0Gf+tK6Ku/93LFg0dOczTh57SH?= =?us-ascii?Q?ynvtpXP31X2aEfxUlUJsPRs0TxXfP2Wd2FypzjCVoYYHmBhSXBSEsRTntLhZ?= =?us-ascii?Q?rlCAz6Whep25amSpJ2Cltm8V+HlT+HXqZaLNH9jALAY3zPShHCOGCcUEIllH?= =?us-ascii?Q?vQ5xQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB2890; 6:n5z1L28nFiqGSmPzjHMTim1L0Rycpd4UQiKDIldjGrcBlWDfnFNvTEvNFrhWD3GKAObejYZ5tN6jsdnWqYhvUmo3bNZwm54dcXDhjos85GEtl+BksrEqRJqtEU72u/96BhEnh6ntDo0kX9FJTEPCf0g6mjM0+MhieV2g6eiomFWoap3+mukh5UBLBr/kkb9ZyNcQwgHWDw7dnQTwgQkqRo+fRdzTPa2L6v4yCgA0VeR9/77G+ZnN3J0qQCbDCBtnjcBiu/cAqMJzm1UWYhUy/Kap3YjyX7NFgt9koUK1L8DYvpKp1aYZhvDt7mJ5sALJ/1YS24bCDD9addggQQNgD1SAA0uFbiHZAzFY+ftG5iU=; 5:lMW20+2dE4yeHTFN4hoRstd4HrqtphFjlcOZU0+IhzdMQVlJct7uYulexd8v3JU7testWgYGPln6huypHKj/mReT/NrpDDQZmDnRkCSkrnzej2anqvXs0nbZRjnQsU2k9pjM1EZJ5vmCFzaKeK4IyUt2qc8qTAuY0DHskxbJexI=; 24:b+mjLVa/2k7S14Tn5cgpXAGKbqwEPSSIV+EM8F2IyBQvRATivXGI1wR4p4PExzfMHBQf8zOvk0gi3cI9p4uX827Iqz+ZvjwzEPE05vsmFsk=; 7:+Ar/ttmX36S3ErGo8PA9yNbj8siaB05znhU9dgL6PGx3o8GWmi1w9DJGxXm2d3LI4nx0Su1F3A0gP0UDXi6RYsq1rPLnubV22tcDE/b7GDuYkPAtIF/l2mdWZwdBSNqUWN6jQxCGlJjUusNuQNgRYdqyD+X6RYbgte52RhvWxWTeXZ4xup9GHALg7WbKZzCJBBWEjWEX82/H3JIl+Mwr2vk8KJMur6lUrSD8CNfbnOGQO1icAsunZHi8OYBsGPSl SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Jan 2018 13:06:33.6973 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 01a10f08-2b29-4114-0d1c-08d55e744d6b X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR07MB2890 Subject: [dpdk-dev] [PATCH v2] net/thunderx: Convert ThunderX VNIC PMD to new offload API 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: , X-List-Received-Date: Thu, 18 Jan 2018 13:06:37 -0000 From: Maciej Czekaj This patch removes all references to old-style offload API replacing them with new offload flags. Signed-off-by: Maciej Czekaj --- v2: * fixed number format from %lx to PRIx64 * removed ETH_TXQ_FLAGS_IGNORE from txq_flags * restored backward-compatible txq_flags --- drivers/net/thunderx/nicvf_ethdev.c | 136 ++++++++++++++++++++++++------------ drivers/net/thunderx/nicvf_ethdev.h | 14 ++++ drivers/net/thunderx/nicvf_struct.h | 2 +- 3 files changed, 106 insertions(+), 46 deletions(-) diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c index b9a873f..c42ba30 100644 --- a/drivers/net/thunderx/nicvf_ethdev.c +++ b/drivers/net/thunderx/nicvf_ethdev.c @@ -172,6 +172,7 @@ nicvf_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) struct nicvf *nic = nicvf_pmd_priv(dev); uint32_t buffsz, frame_size = mtu + ETHER_HDR_LEN + ETHER_CRC_LEN; size_t i; + struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode; PMD_INIT_FUNC_TRACE(); @@ -197,15 +198,15 @@ nicvf_dev_set_mtu(struct rte_eth_dev *dev, uint16_t mtu) return -EINVAL; if (frame_size > ETHER_MAX_LEN) - dev->data->dev_conf.rxmode.jumbo_frame = 1; + rxmode->offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME; else - dev->data->dev_conf.rxmode.jumbo_frame = 0; + rxmode->offloads &= ~DEV_RX_OFFLOAD_JUMBO_FRAME; if (nicvf_mbox_update_hw_max_frs(nic, frame_size)) return -EINVAL; /* Update max frame size */ - dev->data->dev_conf.rxmode.max_rx_pkt_len = (uint32_t)frame_size; + rxmode->max_rx_pkt_len = (uint32_t)frame_size; nic->mtu = mtu; for (i = 0; i < nic->sqs_count; i++) @@ -896,7 +897,7 @@ nicvf_set_tx_function(struct rte_eth_dev *dev) for (i = 0; i < dev->data->nb_tx_queues; i++) { txq = dev->data->tx_queues[i]; - if ((txq->txq_flags & ETH_TXQ_FLAGS_NOMULTSEGS) == 0) { + if (txq->offloads & DEV_TX_OFFLOAD_MULTI_SEGS) { multiseg = true; break; } @@ -935,9 +936,10 @@ nicvf_dev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx, const struct rte_eth_txconf *tx_conf) { uint16_t tx_free_thresh; - uint8_t is_single_pool; + bool is_single_pool; struct nicvf_txq *txq; struct nicvf *nic = nicvf_pmd_priv(dev); + uint64_t conf_offloads, offload_capa, unsupported_offloads; PMD_INIT_FUNC_TRACE(); @@ -951,6 +953,17 @@ nicvf_dev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx, PMD_DRV_LOG(WARNING, "socket_id expected %d, configured %d", socket_id, nic->node); + conf_offloads = tx_conf->offloads; + offload_capa = NICVF_TX_OFFLOAD_CAPA; + + unsupported_offloads = conf_offloads & ~offload_capa; + if (unsupported_offloads) { + PMD_INIT_LOG(ERR, "Tx offloads 0x%" PRIx64 " are not supported." + "Requested 0x%" PRIx64 " supported 0x%" PRIx64 ".\n", + unsupported_offloads, conf_offloads, offload_capa); + return -ENOTSUP; + } + /* Tx deferred start is not supported */ if (tx_conf->tx_deferred_start) { PMD_INIT_LOG(ERR, "Tx deferred start not supported"); @@ -1000,11 +1013,11 @@ nicvf_dev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx, txq->nic = nic; txq->queue_id = qidx; txq->tx_free_thresh = tx_free_thresh; - txq->txq_flags = tx_conf->txq_flags; txq->sq_head = nicvf_qset_base(nic, qidx) + NIC_QSET_SQ_0_7_HEAD; txq->sq_door = nicvf_qset_base(nic, qidx) + NIC_QSET_SQ_0_7_DOOR; - is_single_pool = (txq->txq_flags & ETH_TXQ_FLAGS_NOREFCOUNT && - txq->txq_flags & ETH_TXQ_FLAGS_NOMULTMEMP); + txq->offloads = conf_offloads; + + is_single_pool = !!(conf_offloads & DEV_TX_OFFLOAD_MBUF_FAST_FREE); /* Choose optimum free threshold value for multipool case */ if (!is_single_pool) { @@ -1035,9 +1048,10 @@ nicvf_dev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx, nicvf_tx_queue_reset(txq); - PMD_TX_LOG(DEBUG, "[%d] txq=%p nb_desc=%d desc=%p phys=0x%" PRIx64, + PMD_INIT_LOG(DEBUG, "[%d] txq=%p nb_desc=%d desc=%p" + " phys=0x%" PRIx64 " offloads=0x%" PRIx64, nicvf_netdev_qidx(nic, qidx), txq, nb_desc, txq->desc, - txq->phys); + txq->phys, txq->offloads); dev->data->tx_queues[nicvf_netdev_qidx(nic, qidx)] = txq; dev->data->tx_queue_state[nicvf_netdev_qidx(nic, qidx)] = @@ -1263,6 +1277,7 @@ nicvf_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx, uint16_t rx_free_thresh; struct nicvf_rxq *rxq; struct nicvf *nic = nicvf_pmd_priv(dev); + uint64_t conf_offloads, offload_capa, unsupported_offloads; PMD_INIT_FUNC_TRACE(); @@ -1276,6 +1291,24 @@ nicvf_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx, PMD_DRV_LOG(WARNING, "socket_id expected %d, configured %d", socket_id, nic->node); + + conf_offloads = rx_conf->offloads; + + if (conf_offloads & DEV_RX_OFFLOAD_CHECKSUM) { + PMD_INIT_LOG(NOTICE, "Rx checksum not supported"); + conf_offloads &= ~DEV_RX_OFFLOAD_CHECKSUM; + } + + offload_capa = NICVF_RX_OFFLOAD_CAPA; + unsupported_offloads = conf_offloads & ~offload_capa; + + if (unsupported_offloads) { + PMD_INIT_LOG(ERR, "Rx offloads 0x%" PRIx64 " are not supported. " + "Requested 0x%" PRIx64 " supported 0x%" PRIx64 "\n", + unsupported_offloads, conf_offloads, offload_capa); + return -ENOTSUP; + } + /* Mempool memory must be contiguous, so must be one memory segment*/ if (mp->nb_mem_chunks != 1) { PMD_INIT_LOG(ERR, "Non-contiguous mempool, add more huge pages"); @@ -1356,9 +1389,10 @@ nicvf_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t qidx, nicvf_rx_queue_reset(rxq); - PMD_RX_LOG(DEBUG, "[%d] rxq=%p pool=%s nb_desc=(%d/%d) phy=%" PRIx64, + PMD_INIT_LOG(DEBUG, "[%d] rxq=%p pool=%s nb_desc=(%d/%d)" + " phy=0x%" PRIx64 " offloads=0x%" PRIx64, nicvf_netdev_qidx(nic, qidx), rxq, mp->name, nb_desc, - rte_mempool_avail_count(mp), rxq->phys); + rte_mempool_avail_count(mp), rxq->phys, conf_offloads); dev->data->rx_queues[nicvf_netdev_qidx(nic, qidx)] = rxq; dev->data->rx_queue_state[nicvf_netdev_qidx(nic, qidx)] = @@ -1392,13 +1426,10 @@ nicvf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) dev_info->max_mac_addrs = 1; dev_info->max_vfs = pci_dev->max_vfs; - dev_info->rx_offload_capa = DEV_RX_OFFLOAD_VLAN_STRIP; - dev_info->tx_offload_capa = - DEV_TX_OFFLOAD_IPV4_CKSUM | - DEV_TX_OFFLOAD_UDP_CKSUM | - DEV_TX_OFFLOAD_TCP_CKSUM | - DEV_TX_OFFLOAD_TCP_TSO | - DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM; + dev_info->rx_offload_capa = NICVF_RX_OFFLOAD_CAPA; + dev_info->tx_offload_capa = NICVF_TX_OFFLOAD_CAPA; + dev_info->rx_queue_offload_capa = NICVF_RX_OFFLOAD_CAPA; + dev_info->tx_queue_offload_capa = NICVF_TX_OFFLOAD_CAPA; dev_info->reta_size = nic->rss_info.rss_size; dev_info->hash_key_size = RSS_HASH_KEY_BYTE_SIZE; @@ -1409,6 +1440,7 @@ nicvf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) dev_info->default_rxconf = (struct rte_eth_rxconf) { .rx_free_thresh = NICVF_DEFAULT_RX_FREE_THRESH, .rx_drop_en = 0, + .offloads = DEV_RX_OFFLOAD_CRC_STRIP, }; dev_info->default_txconf = (struct rte_eth_txconf) { @@ -1419,6 +1451,10 @@ nicvf_dev_info_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info) ETH_TXQ_FLAGS_NOMULTMEMP | ETH_TXQ_FLAGS_NOVLANOFFL | ETH_TXQ_FLAGS_NOXSUMSCTP, + .offloads = DEV_TX_OFFLOAD_MBUF_FAST_FREE | + DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM | + DEV_TX_OFFLOAD_UDP_CKSUM | + DEV_TX_OFFLOAD_TCP_CKSUM, }; } @@ -1459,6 +1495,7 @@ nicvf_vf_start(struct rte_eth_dev *dev, struct nicvf *nic, uint32_t rbdrsz) struct rte_mbuf *mbuf; uint16_t rx_start, rx_end; uint16_t tx_start, tx_end; + bool vlan_strip; PMD_INIT_FUNC_TRACE(); @@ -1578,7 +1615,9 @@ nicvf_vf_start(struct rte_eth_dev *dev, struct nicvf *nic, uint32_t rbdrsz) nic->rbdr->tail, nb_rbdr_desc, nic->vf_id); /* Configure VLAN Strip */ - nicvf_vlan_hw_strip(nic, dev->data->dev_conf.rxmode.hw_vlan_strip); + vlan_strip = !!(dev->data->dev_conf.rxmode.offloads & + DEV_RX_OFFLOAD_VLAN_STRIP); + nicvf_vlan_hw_strip(nic, vlan_strip); /* Based on the packet type(IPv4 or IPv6), the nicvf HW aligns L3 data * to the 64bit memory address. @@ -1706,11 +1745,11 @@ nicvf_dev_start(struct rte_eth_dev *dev) if (dev->data->dev_conf.rxmode.max_rx_pkt_len + 2 * VLAN_TAG_SIZE > buffsz) dev->data->scattered_rx = 1; - if (rx_conf->enable_scatter) + if ((rx_conf->offloads & DEV_RX_OFFLOAD_SCATTER) != 0) dev->data->scattered_rx = 1; /* Setup MTU based on max_rx_pkt_len or default */ - mtu = dev->data->dev_conf.rxmode.jumbo_frame ? + mtu = dev->data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_JUMBO_FRAME ? dev->data->dev_conf.rxmode.max_rx_pkt_len - ETHER_HDR_LEN - ETHER_CRC_LEN : ETHER_MTU; @@ -1884,6 +1923,8 @@ nicvf_dev_configure(struct rte_eth_dev *dev) struct rte_eth_txmode *txmode = &conf->txmode; struct nicvf *nic = nicvf_pmd_priv(dev); uint8_t cqcount; + uint64_t conf_rx_offloads, rx_offload_capa; + uint64_t conf_tx_offloads, tx_offload_capa; PMD_INIT_FUNC_TRACE(); @@ -1892,44 +1933,49 @@ nicvf_dev_configure(struct rte_eth_dev *dev) return -EINVAL; } - if (txmode->mq_mode) { - PMD_INIT_LOG(INFO, "Tx mq_mode DCB or VMDq not supported"); - return -EINVAL; - } + conf_tx_offloads = dev->data->dev_conf.txmode.offloads; + tx_offload_capa = NICVF_TX_OFFLOAD_CAPA; - if (rxmode->mq_mode != ETH_MQ_RX_NONE && - rxmode->mq_mode != ETH_MQ_RX_RSS) { - PMD_INIT_LOG(INFO, "Unsupported rx qmode %d", rxmode->mq_mode); - return -EINVAL; + if ((conf_tx_offloads & tx_offload_capa) != conf_tx_offloads) { + PMD_INIT_LOG(ERR, "Some Tx offloads are not supported " + "requested 0x%" PRIx64 " supported 0x%" PRIx64 "\n", + conf_tx_offloads, tx_offload_capa); + return -ENOTSUP; } - if (!rxmode->hw_strip_crc) { - PMD_INIT_LOG(NOTICE, "Can't disable hw crc strip"); - rxmode->hw_strip_crc = 1; + if (rxmode->offloads & DEV_RX_OFFLOAD_CHECKSUM) { + PMD_INIT_LOG(NOTICE, "Rx checksum not supported"); + rxmode->offloads &= ~DEV_RX_OFFLOAD_CHECKSUM; } - if (rxmode->hw_ip_checksum) { - PMD_INIT_LOG(NOTICE, "Rxcksum not supported"); - rxmode->hw_ip_checksum = 0; + conf_rx_offloads = rxmode->offloads; + rx_offload_capa = NICVF_RX_OFFLOAD_CAPA; + + if ((conf_rx_offloads & rx_offload_capa) != conf_rx_offloads) { + PMD_INIT_LOG(ERR, "Some Rx offloads are not supported " + "requested 0x%" PRIx64 " supported 0x%" PRIx64 "\n", + conf_rx_offloads, rx_offload_capa); + return -ENOTSUP; } - if (rxmode->split_hdr_size) { - PMD_INIT_LOG(INFO, "Rxmode does not support split header"); - return -EINVAL; + if ((conf_rx_offloads & DEV_RX_OFFLOAD_CRC_STRIP) == 0) { + PMD_INIT_LOG(NOTICE, "Can't disable hw crc strip"); + rxmode->offloads |= DEV_RX_OFFLOAD_CRC_STRIP; } - if (rxmode->hw_vlan_filter) { - PMD_INIT_LOG(INFO, "VLAN filter not supported"); + if (txmode->mq_mode) { + PMD_INIT_LOG(INFO, "Tx mq_mode DCB or VMDq not supported"); return -EINVAL; } - if (rxmode->hw_vlan_extend) { - PMD_INIT_LOG(INFO, "VLAN extended not supported"); + if (rxmode->mq_mode != ETH_MQ_RX_NONE && + rxmode->mq_mode != ETH_MQ_RX_RSS) { + PMD_INIT_LOG(INFO, "Unsupported rx qmode %d", rxmode->mq_mode); return -EINVAL; } - if (rxmode->enable_lro) { - PMD_INIT_LOG(INFO, "LRO not supported"); + if (rxmode->split_hdr_size) { + PMD_INIT_LOG(INFO, "Rxmode does not support split header"); return -EINVAL; } diff --git a/drivers/net/thunderx/nicvf_ethdev.h b/drivers/net/thunderx/nicvf_ethdev.h index fd20d2c..da30a9f 100644 --- a/drivers/net/thunderx/nicvf_ethdev.h +++ b/drivers/net/thunderx/nicvf_ethdev.h @@ -29,6 +29,20 @@ ETH_RSS_GENEVE | \ ETH_RSS_NVGRE) +#define NICVF_TX_OFFLOAD_CAPA ( \ + DEV_TX_OFFLOAD_IPV4_CKSUM | \ + DEV_TX_OFFLOAD_UDP_CKSUM | \ + DEV_TX_OFFLOAD_TCP_CKSUM | \ + DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM | \ + DEV_TX_OFFLOAD_MBUF_FAST_FREE | \ + DEV_TX_OFFLOAD_MULTI_SEGS) + +#define NICVF_RX_OFFLOAD_CAPA ( \ + DEV_RX_OFFLOAD_VLAN_STRIP | \ + DEV_RX_OFFLOAD_CRC_STRIP | \ + DEV_RX_OFFLOAD_JUMBO_FRAME | \ + DEV_RX_OFFLOAD_SCATTER) + #define NICVF_DEFAULT_RX_FREE_THRESH 224 #define NICVF_DEFAULT_TX_FREE_THRESH 224 #define NICVF_TX_FREE_MPOOL_THRESH 16 diff --git a/drivers/net/thunderx/nicvf_struct.h b/drivers/net/thunderx/nicvf_struct.h index 429d290..6d0a6b2 100644 --- a/drivers/net/thunderx/nicvf_struct.h +++ b/drivers/net/thunderx/nicvf_struct.h @@ -39,7 +39,7 @@ struct nicvf_txq { uint32_t tail; int32_t xmit_bufs; uint32_t qlen_mask; - uint32_t txq_flags; + uint64_t offloads; uint16_t queue_id; uint16_t tx_free_thresh; } __rte_cache_aligned; -- 2.7.4