net/ice: support L4 for QinQ switch filter
[dpdk.git] / drivers / net / sfc / sfc_ef10_rx_ev.h
index 615bd29..a7f5b91 100644 (file)
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: BSD-3-Clause
  *
- * Copyright (c) 2018 Solarflare Communications Inc.
- * All rights reserved.
+ * Copyright(c) 2019-2021 Xilinx, Inc.
+ * Copyright(c) 2018-2019 Solarflare Communications Inc.
  *
  * This software was jointly developed between OKTET Labs (under contract
  * for Solarflare) and Solarflare Communications, Inc.
@@ -16,6 +16,8 @@
 #include "efx_regs.h"
 #include "efx_regs_ef10.h"
 
+#include "sfc_debug.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -37,8 +39,10 @@ sfc_ef10_rx_ev_to_offloads(const efx_qword_t rx_ev, struct rte_mbuf *m,
        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))))
+                                (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)) {
@@ -72,7 +76,7 @@ sfc_ef10_rx_ev_to_offloads(const efx_qword_t rx_ev, struct rte_mbuf *m,
                l4_csum_err_bit = ESF_EZ_RX_TCP_UDP_INNER_CHKSUM_ERR_LBN;
                if (unlikely(EFX_TEST_QWORD_BIT(rx_ev,
                                                ESF_DZ_RX_IPCKSUM_ERR_LBN)))
-                       ol_flags |= PKT_RX_EIP_CKSUM_BAD;
+                       ol_flags |= PKT_RX_OUTER_IP_CKSUM_BAD;
        }
 
        switch (EFX_QWORD_FIELD(rx_ev, ESF_DZ_RX_ETH_TAG_CLASS)) {
@@ -120,6 +124,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);
@@ -157,6 +163,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;