net/sfc: support Tx preparation in EF10 simple datapath
[dpdk.git] / drivers / net / sfc / sfc_ef10_rx_ev.h
index 9054fb9..868c755 100644 (file)
@@ -34,8 +34,13 @@ sfc_ef10_rx_ev_to_offloads(const efx_qword_t rx_ev, struct rte_mbuf *m,
        uint32_t l4_ptype = 0;
        uint64_t ol_flags = 0;
 
-       if (unlikely(EFX_TEST_QWORD_BIT(rx_ev, ESF_DZ_RX_PARSE_INCOMPLETE_LBN)))
+       if (unlikely(rx_ev.eq_u64[0] &
+               rte_cpu_to_le_64((1ull << ESF_DZ_RX_ECC_ERR_LBN) |
+                                (1ull << ESF_DZ_RX_ECRC_ERR_LBN) |
+                                (1ull << ESF_DZ_RX_PARSE_INCOMPLETE_LBN)))) {
+               /* Zero packet type is used as a marker to dicard bad packets */
                goto done;
+       }
 
 #if SFC_EF10_RX_EV_ENCAP_SUPPORT
        switch (EFX_QWORD_FIELD(rx_ev, ESF_EZ_RX_ENCAP_HDR)) {
@@ -117,6 +122,8 @@ sfc_ef10_rx_ev_to_offloads(const efx_qword_t rx_ev, struct rte_mbuf *m,
                if (tun_ptype == 0)
                        l2_ptype = RTE_PTYPE_L2_ETHER_ARP;
                break;
+       case ESE_DZ_L3_CLASS_UNKNOWN:
+               break;
        default:
                /* Unexpected Layer 3 class */
                SFC_ASSERT(false);
@@ -154,6 +161,8 @@ sfc_ef10_rx_ev_to_offloads(const efx_qword_t rx_ev, struct rte_mbuf *m,
                SFC_ASSERT(false);
        }
 
+       SFC_ASSERT(l2_ptype != 0);
+
 done:
        m->ol_flags = ol_flags & ol_mask;
        m->packet_type = tun_ptype | l2_ptype | l3_ptype | l4_ptype;