net/mlx5: add device configuration structure
[dpdk.git] / drivers / net / mlx5 / mlx5_rxtx_vec.c
index 3aca17c..ae398dc 100644 (file)
 #error "This should not be compiled if SIMD instructions are not supported."
 #endif
 
-/**
- * Count the number of continuous single segment packets.
- *
- * @param pkts
- *   Pointer to array of packets.
- * @param pkts_n
- *   Number of packets.
- *
- * @return
- *   Number of continuous single segment packets.
- */
-static inline unsigned int
-txq_check_multiseg(struct rte_mbuf **pkts, uint16_t pkts_n)
-{
-       unsigned int pos;
-
-       if (!pkts_n)
-               return 0;
-       /* Count the number of continuous single segment packets. */
-       for (pos = 0; pos < pkts_n; ++pos)
-               if (NB_SEGS(pkts[pos]) > 1)
-                       break;
-       return pos;
-}
-
 /**
  * Count the number of packets having same ol_flags and calculate cs_flags.
  *
@@ -192,7 +167,7 @@ mlx5_tx_burst_vec(void *dpdk_txq, struct rte_mbuf **pkts, uint16_t pkts_n)
                                               pkts_n - nb_tx);
                n = RTE_MIN((uint16_t)(pkts_n - nb_tx), MLX5_VPMD_TX_MAX_BURST);
                if (!(txq->flags & ETH_TXQ_FLAGS_NOMULTSEGS))
-                       n = txq_check_multiseg(&pkts[nb_tx], n);
+                       n = txq_count_contig_single_seg(&pkts[nb_tx], n);
                if (!(txq->flags & ETH_TXQ_FLAGS_NOOFFLOADS))
                        n = txq_calc_offload(txq, &pkts[nb_tx], n, &cs_flags);
                ret = txq_burst_v(txq, &pkts[nb_tx], n, cs_flags);
@@ -244,7 +219,6 @@ rxq_handle_pending_error(struct mlx5_rxq_data *rxq, struct rte_mbuf **pkts,
        rxq->stats.ipackets -= (pkts_n - n);
        rxq->stats.ibytes -= err_bytes;
 #endif
-       rxq->pending_err = 0;
        return n;
 }
 
@@ -266,9 +240,10 @@ mlx5_rx_burst_vec(void *dpdk_rxq, struct rte_mbuf **pkts, uint16_t pkts_n)
 {
        struct mlx5_rxq_data *rxq = dpdk_rxq;
        uint16_t nb_rx;
+       uint64_t err = 0;
 
-       nb_rx = rxq_burst_v(rxq, pkts, pkts_n);
-       if (unlikely(rxq->pending_err))
+       nb_rx = rxq_burst_v(rxq, pkts, pkts_n, &err);
+       if (unlikely(err))
                nb_rx = rxq_handle_pending_error(rxq, pkts, nb_rx);
        return nb_rx;
 }
@@ -312,10 +287,10 @@ priv_check_raw_vec_tx_support(struct priv *priv)
 int __attribute__((cold))
 priv_check_vec_tx_support(struct priv *priv)
 {
-       if (!priv->tx_vec_en ||
+       if (!priv->config.tx_vec_en ||
            priv->txqs_n > MLX5_VPMD_MIN_TXQS ||
-           priv->mps != MLX5_MPW_ENHANCED ||
-           priv->tso)
+           priv->config.mps != MLX5_MPW_ENHANCED ||
+           priv->config.tso)
                return -ENOTSUP;
        return 1;
 }
@@ -335,7 +310,7 @@ rxq_check_vec_support(struct mlx5_rxq_data *rxq)
        struct mlx5_rxq_ctrl *ctrl =
                container_of(rxq, struct mlx5_rxq_ctrl, rxq);
 
-       if (!ctrl->priv->rx_vec_en || rxq->sges_n != 0)
+       if (!ctrl->priv->config.rx_vec_en || rxq->sges_n != 0)
                return -ENOTSUP;
        return 1;
 }
@@ -354,7 +329,7 @@ priv_check_vec_rx_support(struct priv *priv)
 {
        uint16_t i;
 
-       if (!priv->rx_vec_en)
+       if (!priv->config.rx_vec_en)
                return -ENOTSUP;
        /* All the configured queues should support. */
        for (i = 0; i < priv->rxqs_n; ++i) {