net/bnxt: refactor HW ptype mapping table
[dpdk.git] / drivers / net / bnxt / bnxt_rxtx_vec_sse.c
index 7a58434..6dd18a0 100644 (file)
@@ -66,8 +66,7 @@ descs_to_mbufs(__m128i mm_rxcmp[4], __m128i mm_rxcmp1[4],
        const __m128i flags_type_mask =
                _mm_set1_epi32(RX_PKT_CMPL_FLAGS_ITYPE_MASK);
        const __m128i flags2_mask1 =
-               _mm_set1_epi32(RX_PKT_CMPL_FLAGS2_META_FORMAT_VLAN |
-                              RX_PKT_CMPL_FLAGS2_T_IP_CS_CALC);
+               _mm_set1_epi32(CMPL_FLAGS2_VLAN_TUN_MSK);
        const __m128i flags2_mask2 =
                _mm_set1_epi32(RX_PKT_CMPL_FLAGS2_IP_TYPE);
        const __m128i rss_mask =
@@ -76,21 +75,28 @@ descs_to_mbufs(__m128i mm_rxcmp[4], __m128i mm_rxcmp1[4],
        __m128i ptype_idx, is_tunnel;
        uint32_t ol_flags;
 
+       /* Validate ptype table indexing at build time. */
+       bnxt_check_ptype_constants();
+
        /* Compute packet type table indexes for four packets */
        t0 = _mm_unpacklo_epi32(mm_rxcmp[0], mm_rxcmp[1]);
        t1 = _mm_unpacklo_epi32(mm_rxcmp[2], mm_rxcmp[3]);
        flags_type = _mm_unpacklo_epi64(t0, t1);
-       ptype_idx =
-               _mm_srli_epi32(_mm_and_si128(flags_type, flags_type_mask), 9);
+       ptype_idx = _mm_srli_epi32(_mm_and_si128(flags_type, flags_type_mask),
+                       RX_PKT_CMPL_FLAGS_ITYPE_SFT - BNXT_PTYPE_TBL_TYPE_SFT);
 
        t0 = _mm_unpacklo_epi32(mm_rxcmp1[0], mm_rxcmp1[1]);
        t1 = _mm_unpacklo_epi32(mm_rxcmp1[2], mm_rxcmp1[3]);
        flags2 = _mm_unpacklo_epi64(t0, t1);
 
        ptype_idx = _mm_or_si128(ptype_idx,
-                       _mm_srli_epi32(_mm_and_si128(flags2, flags2_mask1), 2));
+                       _mm_srli_epi32(_mm_and_si128(flags2, flags2_mask1),
+                                      RX_PKT_CMPL_FLAGS2_META_FORMAT_SFT -
+                                      BNXT_PTYPE_TBL_VLAN_SFT));
        ptype_idx = _mm_or_si128(ptype_idx,
-                       _mm_srli_epi32(_mm_and_si128(flags2, flags2_mask2), 7));
+                       _mm_srli_epi32(_mm_and_si128(flags2, flags2_mask2),
+                                      RX_PKT_CMPL_FLAGS2_IP_TYPE_SFT -
+                                      BNXT_PTYPE_TBL_IP_VER_SFT));
 
        /* Extract RSS valid flags for four packets. */
        rss_flags = _mm_srli_epi32(_mm_and_si128(flags_type, rss_mask), 9);
@@ -321,12 +327,11 @@ bnxt_handle_tx_cp_vec(struct bnxt_tx_queue *txq)
 
 static inline void
 bnxt_xmit_one(struct rte_mbuf *mbuf, struct tx_bd_long *txbd,
-             struct bnxt_sw_tx_bd *tx_buf)
+             struct rte_mbuf **tx_buf)
 {
        __m128i desc;
 
-       tx_buf->mbuf = mbuf;
-       tx_buf->nr_bds = 1;
+       *tx_buf = mbuf;
 
        desc = _mm_set_epi64x(mbuf->buf_iova + mbuf->data_off,
                              bnxt_xmit_flags_len(mbuf->data_len,
@@ -343,7 +348,7 @@ bnxt_xmit_fixed_burst_vec(struct bnxt_tx_queue *txq, struct rte_mbuf **tx_pkts,
        struct bnxt_tx_ring_info *txr = txq->tx_ring;
        uint16_t tx_prod, tx_raw_prod = txr->tx_raw_prod;
        struct tx_bd_long *txbd;
-       struct bnxt_sw_tx_bd *tx_buf;
+       struct rte_mbuf **tx_buf;
        uint16_t to_send;
 
        tx_prod = RING_IDX(txr->tx_ring_struct, tx_raw_prod);