doc: update metadata feature in mlx5 guide
[dpdk.git] / drivers / net / i40e / i40e_rxtx.c
index 692c3ba..17dc8c7 100644 (file)
@@ -172,12 +172,6 @@ i40e_get_iee15888_flags(struct rte_mbuf *mb, uint64_t qword)
 }
 #endif
 
-#define I40E_RX_DESC_EXT_STATUS_FLEXBH_MASK   0x03
-#define I40E_RX_DESC_EXT_STATUS_FLEXBH_FD_ID  0x01
-#define I40E_RX_DESC_EXT_STATUS_FLEXBH_FLEX   0x02
-#define I40E_RX_DESC_EXT_STATUS_FLEXBL_MASK   0x03
-#define I40E_RX_DESC_EXT_STATUS_FLEXBL_FLEX   0x01
-
 static inline uint64_t
 i40e_rxd_build_fdir(volatile union i40e_rx_desc *rxdp, struct rte_mbuf *mb)
 {
@@ -564,8 +558,7 @@ i40e_rx_alloc_bufs(struct i40e_rx_queue *rxq)
        }
 
        /* Update rx tail regsiter */
-       rte_wmb();
-       I40E_PCI_REG_WRITE_RELAXED(rxq->qrx_tail, rxq->rx_free_trigger);
+       I40E_PCI_REG_WRITE(rxq->qrx_tail, rxq->rx_free_trigger);
 
        rxq->rx_free_trigger =
                (uint16_t)(rxq->rx_free_trigger + rxq->rx_free_thresh);
@@ -1208,13 +1201,11 @@ i40e_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
        }
 
 end_of_tx:
-       rte_wmb();
-
        PMD_TX_LOG(DEBUG, "port_id=%u queue_id=%u tx_tail=%u nb_tx=%u",
                   (unsigned) txq->port_id, (unsigned) txq->queue_id,
                   (unsigned) tx_id, (unsigned) nb_tx);
 
-       I40E_PCI_REG_WRITE_RELAXED(txq->qtx_tail, tx_id);
+       I40E_PCI_REG_WRITE(txq->qtx_tail, tx_id);
        txq->tx_tail = tx_id;
 
        return nb_tx;
@@ -1365,8 +1356,7 @@ tx_xmit_pkts(struct i40e_tx_queue *txq,
                txq->tx_tail = 0;
 
        /* Update the tx tail register */
-       rte_wmb();
-       I40E_PCI_REG_WRITE_RELAXED(txq->qtx_tail, txq->tx_tail);
+       I40E_PCI_REG_WRITE(txq->qtx_tail, txq->tx_tail);
 
        return nb_pkts;
 }
@@ -1544,8 +1534,6 @@ i40e_dev_rx_queue_start(struct rte_eth_dev *dev, uint16_t rx_queue_id)
                return err;
        }
 
-       rte_wmb();
-
        /* Init the RX tail regieter. */
        I40E_PCI_REG_WRITE(rxq->qrx_tail, rxq->nb_rx_desc - 1);
 
@@ -2602,7 +2590,7 @@ i40e_rx_queue_config(struct i40e_rx_queue *rxq)
        struct i40e_pf *pf = I40E_VSI_TO_PF(rxq->vsi);
        struct i40e_hw *hw = I40E_VSI_TO_HW(rxq->vsi);
        struct rte_eth_dev_data *data = pf->dev_data;
-       uint16_t buf_size, len;
+       uint16_t buf_size;
 
        buf_size = (uint16_t)(rte_pktmbuf_data_room_size(rxq->mp) -
                RTE_PKTMBUF_HEADROOM);
@@ -2625,8 +2613,9 @@ i40e_rx_queue_config(struct i40e_rx_queue *rxq)
                break;
        }
 
-       len = hw->func_caps.rx_buf_chain_len * rxq->rx_buf_len;
-       rxq->max_pkt_len = RTE_MIN(len, data->dev_conf.rxmode.max_rx_pkt_len);
+       rxq->max_pkt_len =
+               RTE_MIN((uint32_t)(hw->func_caps.rx_buf_chain_len *
+                       rxq->rx_buf_len), data->dev_conf.rxmode.max_rx_pkt_len);
        if (data->dev_conf.rxmode.offloads & DEV_RX_OFFLOAD_JUMBO_FRAME) {
                if (rxq->max_pkt_len <= RTE_ETHER_MAX_LEN ||
                        rxq->max_pkt_len > I40E_FRAME_SIZE_MAX) {
@@ -3028,6 +3017,47 @@ i40e_set_rx_function(struct rte_eth_dev *dev)
        }
 }
 
+static const struct {
+       eth_rx_burst_t pkt_burst;
+       const char *info;
+} i40e_rx_burst_infos[] = {
+       { i40e_recv_scattered_pkts,          "Scalar Scattered" },
+       { i40e_recv_pkts_bulk_alloc,         "Scalar Bulk Alloc" },
+       { i40e_recv_pkts,                    "Scalar" },
+#ifdef RTE_ARCH_X86
+       { i40e_recv_scattered_pkts_vec_avx2, "Vector AVX2 Scattered" },
+       { i40e_recv_pkts_vec_avx2,           "Vector AVX2" },
+       { i40e_recv_scattered_pkts_vec,      "Vector SSE Scattered" },
+       { i40e_recv_pkts_vec,                "Vector SSE" },
+#elif defined(RTE_ARCH_ARM64)
+       { i40e_recv_scattered_pkts_vec,      "Vector Neon Scattered" },
+       { i40e_recv_pkts_vec,                "Vector Neon" },
+#elif defined(RTE_ARCH_PPC_64)
+       { i40e_recv_scattered_pkts_vec,      "Vector AltiVec Scattered" },
+       { i40e_recv_pkts_vec,                "Vector AltiVec" },
+#endif
+};
+
+int
+i40e_rx_burst_mode_get(struct rte_eth_dev *dev, __rte_unused uint16_t queue_id,
+                      struct rte_eth_burst_mode *mode)
+{
+       eth_rx_burst_t pkt_burst = dev->rx_pkt_burst;
+       int ret = -EINVAL;
+       unsigned int i;
+
+       for (i = 0; i < RTE_DIM(i40e_rx_burst_infos); ++i) {
+               if (pkt_burst == i40e_rx_burst_infos[i].pkt_burst) {
+                       snprintf(mode->info, sizeof(mode->info), "%s",
+                                i40e_rx_burst_infos[i].info);
+                       ret = 0;
+                       break;
+               }
+       }
+
+       return ret;
+}
+
 void __attribute__((cold))
 i40e_set_tx_function_flag(struct rte_eth_dev *dev, struct i40e_tx_queue *txq)
 {
@@ -3121,6 +3151,42 @@ i40e_set_tx_function(struct rte_eth_dev *dev)
        }
 }
 
+static const struct {
+       eth_tx_burst_t pkt_burst;
+       const char *info;
+} i40e_tx_burst_infos[] = {
+       { i40e_xmit_pkts_simple,   "Scalar Simple" },
+       { i40e_xmit_pkts,          "Scalar" },
+#ifdef RTE_ARCH_X86
+       { i40e_xmit_pkts_vec_avx2, "Vector AVX2" },
+       { i40e_xmit_pkts_vec,      "Vector SSE" },
+#elif defined(RTE_ARCH_ARM64)
+       { i40e_xmit_pkts_vec,      "Vector Neon" },
+#elif defined(RTE_ARCH_PPC_64)
+       { i40e_xmit_pkts_vec,      "Vector AltiVec" },
+#endif
+};
+
+int
+i40e_tx_burst_mode_get(struct rte_eth_dev *dev, __rte_unused uint16_t queue_id,
+                      struct rte_eth_burst_mode *mode)
+{
+       eth_tx_burst_t pkt_burst = dev->tx_pkt_burst;
+       int ret = -EINVAL;
+       unsigned int i;
+
+       for (i = 0; i < RTE_DIM(i40e_tx_burst_infos); ++i) {
+               if (pkt_burst == i40e_tx_burst_infos[i].pkt_burst) {
+                       snprintf(mode->info, sizeof(mode->info), "%s",
+                                i40e_tx_burst_infos[i].info);
+                       ret = 0;
+                       break;
+               }
+       }
+
+       return ret;
+}
+
 void __attribute__((cold))
 i40e_set_default_ptype_table(struct rte_eth_dev *dev)
 {