From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM02-BL2-obe.outbound.protection.outlook.com (mail-bl2nam02on0066.outbound.protection.outlook.com [104.47.38.66]) by dpdk.org (Postfix) with ESMTP id 0E4BD1B1CE for ; Wed, 3 Jan 2018 14:12:50 +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=rr8qpM5QLyekrzgDKvvBl92Bqf32JDOv/RN/UqnVxUc=; b=CkH2vNcx1wUshiTu/inpBLmkc4QAP91jQc1nzBBeemZ3LOuRrtFVMJTq23iRc+iV9rT15IiWApoE1PQNvfzdpjEMfKh6RyIOoLCeLJSnlIk7Jxv3PWZIdHuLCbUFk33rv309OA2/UftIV9kxJlvbQDs9IV+4vH/6O7IVaGyOrC8= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Maciej.Czekaj@cavium.com; Received: from mjc-pc.semihalf.local (31.172.191.173) by CY4PR07MB2885.namprd07.prod.outlook.com (10.169.252.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.366.8; Wed, 3 Jan 2018 13:12:47 +0000 From: maciej.czekaj@caviumnetworks.com To: dev@dpdk.org Cc: shahafs@mellanox.com, thomas@monjalon.net, Maciej Czekaj Date: Wed, 3 Jan 2018 14:12:17 +0100 Message-Id: <1514985137-2653-1-git-send-email-maciej.czekaj@caviumnetworks.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [31.172.191.173] X-ClientProxiedBy: HE1PR07CA0004.eurprd07.prod.outlook.com (10.160.74.142) To CY4PR07MB2885.namprd07.prod.outlook.com (10.169.252.139) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5e761734-bcea-454e-a303-08d552abb039 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060); SRVR:CY4PR07MB2885; X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB2885; 3:ekCsqKhDwVaTHlAjdCfmAxXzMvSwc/MK1za0RQZ5t7AiAs6y22k1MyT1z3ah6WQrJJi2qCkE1VpHYJHGaSdqxx1Y8KW6clu0b4eBFzjFQh22kYE7jSbfPdsIvtauLETRIFBapm6a90H+F7Rt2Gusq2v1fre6HBJGFa1v+MmTUfZLi5b7m8NDR4or4aNa4wN0cHoc4mmLkEeX1g+eX36AgtOHq8QMrapx9QzCg3sBUsQXUBrXebjNIjEwXK+LmyH3; 25:M5q+1rmH/aHSo40ElTMdyDBvEVTwU60kAl2kaJsfCAv9oG12CRZyv5K+cTj0+02wo2x5i4gQjMwLIjCUtiCkDrrgqQovMDyT5Jc9mQ/pIuOHdrdq35ZNKVjNkqC81QKi51NgTjKj7+X38cyDyCFxF9yUltktMQSELylgX3t/fH3k5fdIo5Fh1EAwZFj1Ogi7+mW7HE0YiKT0LbZzcPTtEAx6SWxd6sy+7+N9dtkY36er6l0LNjk5XUtGrKTD4N05qXNyXKtBSYQD1hbd7XeZcisaKOI6WTCFVtrH/3P9nmbHmmespWSaEGwXpX2qjY6OITa0MIZocVwjVIqkpMWxdQ==; 31:lmUzrqxCHFIQW7a4HFfdH4UN926sve9ku5LMiQ6VC/g59qhvDBjqGXsw4fwI/tcOtUsZE04wSmGSkP73oxBBgkHoVDV+Oru6iqOwn6O9VWSrDxXKa8inup4Nwt9bcC6qGfXj8/1S5UGvfDkDXxB+GJ+7xpPcv4FpVNHdGtgLAUu5/HSbXwf8mApw68qDKQRenJ7q4bgoU3CpVHgX0HrE3WEQhsJS7DlhxGIZTCLttOA= X-MS-TrafficTypeDiagnostic: CY4PR07MB2885: X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB2885; 20:UVdUpu8tLLVOahRCahV+p/uOck2zHUz2beqemU6LX9E8m5/GcaAWbK9svHsS5+u05Bqi4Zja7TLuSW3ZH4YPU1beG5xzLofMsWEFck8Q8tXc6QieK1purpKGvfs+sAxpIYPt68sWlj4CBRh8HV7f38SsL/iozDfYVBCrX7cGZJhRnPHUInY6w7TJ6v2BopSuBYuux/vP26z2ux9o4Xj3TaALStBqas8rMOXeMeu57HsE9KXzrwr4QBlWWDeytOVL4zcKcl1QI8+CAlxLlJg2xpd4JrqMHxIAOFe4MPZaVBUrxyZcG3USZ0r3Nom2vLw1Zu9OesbQFBBl7scdwMY/g/xU/tGuRbkaUyjCiYwVQxAHP/N3iqqGjKaa5FYwXBasqlN6LPX6zrjwXUSlI0dU3n0Jlwo2M+6zsTmtKn25Hh7+4QVdruavRg/UdfbppBsllhd0SaQTcbHv54O5PTL3ShfW1tN1zR0HmLDfL54EavKdJDfmaXdABIIb8y5BCjgJPzvd5JqqFjf2Lv26A7pMQwyymeMWjgaUgmJ+7g2IgNk8PVTg623iTXRznWivikhZARcW9Qmgiv5KKF1MrzkzGOnxFerrbtTzZZbYmQZh3lA=; 4:Je5rF8rnoS78lnq2G2mZynOo6/MAx+Yb8QvKS4lPW/XJ/l6cencTUVEyX6Iot9limvn8o3DdhOXq3+QEkjqBHaDTKBZ64ad8AonTKXnsFxH9NN1hBEviL39jQu0VTOG85dIzxc/VDXN2uPSuBBrw15cCcNEPrEFykyXuSdeyeajjUsvPrpCacRGpc4TxlJLGcZYvseNWUvEnNO/qH8eL5/DXkA7BTxTsw/Dg96hOx3tEyb/o+qcp0PCTporTJg5RkTm8vGhxryLABE5kJSgzDA== 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)(93006095)(3002001)(3231023)(944501075)(10201501046)(6041268)(20161123562045)(20161123564045)(20161123560045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(6072148)(201708071742011); SRVR:CY4PR07MB2885; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:CY4PR07MB2885; X-Forefront-PRVS: 0541031FF6 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(39380400002)(39860400002)(366004)(376002)(346002)(396003)(189003)(199004)(8936002)(8676002)(81166006)(81156014)(50466002)(16526018)(48376002)(6916009)(42882006)(6666003)(36756003)(316002)(16586007)(4326008)(33896004)(9686003)(50226002)(25786009)(107886003)(66066001)(47776003)(6486002)(6512007)(6116002)(68736007)(5660300001)(478600001)(2361001)(2351001)(53936002)(305945005)(106356001)(72206003)(2906002)(386003)(3846002)(97736004)(6506007)(59450400001)(51416003)(105586002)(7736002)(52116002)(16060500001)(85772001)(217873001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR07MB2885; 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; CY4PR07MB2885; 23:I94MTLOW2BP4v7KBgqZFYFo+pgkCOk5eyEeUpQ5aw?= =?us-ascii?Q?pTSd3kPT86Fa0pAktOi9YrQZ04iCNaO+mbWJUowrQ+831+kl5lVMy7VyMrx0?= =?us-ascii?Q?YeP2vNBhXHBqbRwJcJdaVxF9je3YM3PA/7P2Tptf8gnX/Rw+KIqNhqfWoJ7b?= =?us-ascii?Q?z6W0e8dfZOh9e7czY44rmy4MvYhqb//oRcWNW68ziG5IV5RgzYnF5NSXyp8B?= =?us-ascii?Q?fwRH63EO0REAY2Vh9Da93R9IH8BGj8RGWam/g2obVpdECz356z80GuGGWZuq?= =?us-ascii?Q?OQXSWzkBznueYt+JK1bqq/1Z2JrNa4mKNxxJDFqbSjD+TFYQwTXTIekJy2iK?= =?us-ascii?Q?w1s8LzsyJD8uIr8+JiHuod0VNQMipGW2Fev9EoJhtt6ZgVdHxd/ZB77Y4eo3?= =?us-ascii?Q?/cYkFDFaqpGobewknSs3/vJKWAHYle72TPWycfMWV0Co+IoqQswu8nTfb5m1?= =?us-ascii?Q?KneJjkMLEp72RWvlAGcm1KCTtVZlUnKuI8mMQ2No32cms8h7Abb7F6A7l9Vg?= =?us-ascii?Q?h8HCcpp5k/ihmXk9XBjpekDiyLYTlJxLDmUdfBO4fFTwudwolJATQ3RAPNUj?= =?us-ascii?Q?vvtqdUnSiEBREHvR8v24ADZY6mlsBKlxuqrctWi9VMQWTuJb5jDz/S7Mr+4m?= =?us-ascii?Q?qmbxySgCGLF87sZSp08cvUcaRSzIicS9ZwD0K7ZKIWp55XIB9fLglsC7y26K?= =?us-ascii?Q?8Y0zctJ2RvrN0mr62YtgxbOK0YHYJhdinMPCU/b/src9Bd0rwZKN1v+KxS1R?= =?us-ascii?Q?Evj5OnK0LLmppDc6kEWQgOPs+3FNJjFz53ZNp0TsgQse9HGtfN3+xi2ZmBFS?= =?us-ascii?Q?TtACJU5vZUrVYs4ItBWGrGXttcnd8Nx1uSLLLkdr8MlImIm5UhQNE/2ojWMh?= =?us-ascii?Q?IE32zpMAHYdrdISlIo/YNABwJOqVET+LGv6eGIUzmCbC0AD8nvoVgPUvz+ZW?= =?us-ascii?Q?zejuXh196xeGX7d4AGfTI5GFwIqibWKZWqSHXGw/mE67BfRBGjHSfq1ZPHWi?= =?us-ascii?Q?BpawV+yNvxW7eGEwz8gFwyi1GFkG+LNebZm/sm2fQX36oAo8L+6/CNJ1qucR?= =?us-ascii?Q?Fc8xqhw7zv47BdYThZSsTkJ0keUAXxd8DR7garHtvIJNwlmwfyEdImZoV+xP?= =?us-ascii?Q?r0CHKbcPpTqNx68KOnPY8UIHRkEjBziKPYigHkVLnMr3M7MaaCb0fMllo8QI?= =?us-ascii?Q?LtCT878cQlKocsxGtF2FeencA2oQOERX2N/wi6GmAYPMBcqivSgLGc181s5P?= =?us-ascii?Q?MIAJtsK2lrrJgb9A8k=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB2885; 6:446DtdqPza9AM/UcpL6ylBigxFttt87basmWbn5mzeJMy7xasQgMMI8pjSZfsi+kpg+5SP/s/6931AemSqSihG9YgYjcm5JKseahx2NI6AMYgTDJMqDVgtYBQvFhGlr9YkHuDezF0bjSUV/XNfanG1QEd5B5X7GNsroqQXBkDvbIhkP03NCQBxI6nm8lFlxEP2I0Kn+Fh+Hwn6Q1ISC4Ldwj9TqVtGWVRT5bPP7ISql4tFJpq2trowqfvqKJ5DTfNVRuQ3jFZZBIOg3jmRS2eXaacryX1dcEY70Sav3Lq6zdE5Kr6Cho7QhDBeD/TIkll51MawHDjrrIFJEJV/UpNG3VL4/AYbGqSk5HNbiDNNQ=; 5:+MIcfKkEcPlE6q2Ez5l3xOwUHI5ImQeQGD4ALNa+SBmWWvm6V0Wed2ajn4I4zFtRJYemnsodsIs34ldLj/cEeawgwDlFfmcfiLJ8h2b/liVs9hMIvwWe7vBUJ+q95SOXbwnt9rYoqqVLTNqWFwekbm/4G1Io4r/d/lw5Ry2e5Q4=; 24:nAS7xjULNeXqQJWCbt4WC9WH9/sM2tQfAqA9qJkBnHoT5ltOHEHUN28mPyvd4TFtKYiZRZvsWXDUK6NUtMB1hEuAJF4GUbfyY/PSeqelp7U=; 7:0p1quwzjgPsxOK6O2atenJJCpVQcr8DnIAXllVwIeRGUqTfCfDFF6VKD3ldI7vi+5ES5kp5JgvWcwhx2lcpJqUhZRF4NQDFAAnTdo0mpw1I0f3ydpVNZ0suyvgmR1LoMtd5OfOvoG/iPIDA4SgB1G8c+j45ferW1mMcFWTg+M7YlNQStMK3qqxx+CKrXpMjFo0ngGBx3Nsnp9GxmhZ6blYlWbM8E5qhdPUCmZPln+FqbbpMV94KaqDxUppSerHyl SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: caviumnetworks.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 03 Jan 2018 13:12:47.9589 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5e761734-bcea-454e-a303-08d552abb039 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR07MB2885 Subject: [dpdk-dev] [PATCH] 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: Wed, 03 Jan 2018 13:12:51 -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 --- drivers/net/thunderx/nicvf_ethdev.c | 143 +++++++++++++++++++++++------------- drivers/net/thunderx/nicvf_ethdev.h | 14 ++++ drivers/net/thunderx/nicvf_struct.h | 2 +- 3 files changed, 107 insertions(+), 52 deletions(-) diff --git a/drivers/net/thunderx/nicvf_ethdev.c b/drivers/net/thunderx/nicvf_ethdev.c index d65d3ce..3428ff2 100644 --- a/drivers/net/thunderx/nicvf_ethdev.c +++ b/drivers/net/thunderx/nicvf_ethdev.c @@ -179,6 +179,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(); @@ -204,15 +205,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++) @@ -903,7 +904,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; } @@ -942,9 +943,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(); @@ -958,6 +960,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"); @@ -1007,11 +1020,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) { @@ -1042,9 +1055,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)] = @@ -1270,6 +1284,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(); @@ -1283,6 +1298,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"); @@ -1363,9 +1396,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)] = @@ -1399,13 +1433,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; @@ -1416,16 +1447,16 @@ 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) { .tx_free_thresh = NICVF_DEFAULT_TX_FREE_THRESH, - .txq_flags = - ETH_TXQ_FLAGS_NOMULTSEGS | - ETH_TXQ_FLAGS_NOREFCOUNT | - ETH_TXQ_FLAGS_NOMULTMEMP | - ETH_TXQ_FLAGS_NOVLANOFFL | - ETH_TXQ_FLAGS_NOXSUMSCTP, + .txq_flags = ETH_TXQ_FLAGS_IGNORE, + .offloads = DEV_TX_OFFLOAD_MBUF_FAST_FREE | + DEV_TX_OFFLOAD_OUTER_IPV4_CKSUM | + DEV_TX_OFFLOAD_UDP_CKSUM | + DEV_TX_OFFLOAD_TCP_CKSUM, }; } @@ -1466,6 +1497,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(); @@ -1585,7 +1617,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. @@ -1713,11 +1747,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; @@ -1891,6 +1925,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(); @@ -1899,44 +1935,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%lx supported 0x%lx\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%lx supported 0x%lx\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 71bc3cf..7cd0689 100644 --- a/drivers/net/thunderx/nicvf_ethdev.h +++ b/drivers/net/thunderx/nicvf_ethdev.h @@ -57,6 +57,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 0f8208e..cf54524 100644 --- a/drivers/net/thunderx/nicvf_struct.h +++ b/drivers/net/thunderx/nicvf_struct.h @@ -67,7 +67,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