net/i40e: move RSS to flow API
[dpdk.git] / drivers / net / sfc / sfc_tx.c
index 4d2882f..ee22049 100644 (file)
@@ -1,32 +1,10 @@
-/*-
- *   BSD LICENSE
+/* SPDX-License-Identifier: BSD-3-Clause
  *
- * Copyright (c) 2016-2017 Solarflare Communications Inc.
+ * Copyright (c) 2016-2018 Solarflare Communications Inc.
  * All rights reserved.
  *
  * This software was jointly developed between OKTET Labs (under contract
  * for Solarflare) and Solarflare Communications, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice,
- *    this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- *    this list of conditions and the following disclaimer in the documentation
- *    and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
- * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
- * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
 #include "sfc.h"
@@ -160,6 +138,10 @@ sfc_tx_qinit(struct sfc_adapter *sa, unsigned int sw_index,
                                       &txq_max_fill_level);
        if (rc != 0)
                goto fail_size_up_rings;
+       SFC_ASSERT(txq_entries >= EFX_TXQ_MINNDESCS);
+       SFC_ASSERT(txq_entries <= sa->txq_max_entries);
+       SFC_ASSERT(txq_entries >= nb_tx_desc);
+       SFC_ASSERT(txq_max_fill_level <= nb_tx_desc);
 
        rc = sfc_tx_qcheck_conf(sa, txq_max_fill_level, tx_conf);
        if (rc != 0)
@@ -168,7 +150,6 @@ sfc_tx_qinit(struct sfc_adapter *sa, unsigned int sw_index,
        SFC_ASSERT(sw_index < sa->txq_count);
        txq_info = &sa->txq_info[sw_index];
 
-       SFC_ASSERT(txq_entries <= sa->txq_max_entries);
        txq_info->entries = txq_entries;
 
        rc = sfc_ev_qinit(sa, SFC_EVQ_TYPE_TX, sw_index,
@@ -196,6 +177,7 @@ sfc_tx_qinit(struct sfc_adapter *sa, unsigned int sw_index,
                goto fail_dma_alloc;
 
        memset(&info, 0, sizeof(info));
+       info.max_fill_level = txq_max_fill_level;
        info.free_thresh = txq->free_thresh;
        info.flags = tx_conf->txq_flags;
        info.txq_entries = txq_info->entries;
@@ -695,7 +677,7 @@ sfc_efx_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
        unsigned int pushed = added;
        unsigned int pkts_sent = 0;
        efx_desc_t *pend = &txq->pend_desc[0];
-       const unsigned int hard_max_fill = EFX_TXQ_LIMIT(txq->ptr_mask + 1);
+       const unsigned int hard_max_fill = txq->max_fill_level;
        const unsigned int soft_max_fill = hard_max_fill - txq->free_thresh;
        unsigned int fill_level = added - txq->completed;
        boolean_t reap_done;
@@ -941,6 +923,7 @@ sfc_efx_tx_qcreate(uint16_t port_id, uint16_t queue_id,
 
        txq->evq = ctrl_txq->evq;
        txq->ptr_mask = info->txq_entries - 1;
+       txq->max_fill_level = info->max_fill_level;
        txq->free_thresh = info->free_thresh;
        txq->dma_desc_size_max = info->dma_desc_size_max;
 
@@ -1030,7 +1013,7 @@ sfc_efx_tx_qdesc_status(struct sfc_dp_txq *dp_txq, uint16_t offset)
        if (unlikely(offset > txq->ptr_mask))
                return -EINVAL;
 
-       if (unlikely(offset >= EFX_TXQ_LIMIT(txq->ptr_mask + 1)))
+       if (unlikely(offset >= txq->max_fill_level))
                return RTE_ETH_TX_DESC_UNAVAIL;
 
        /*