net/sfc: support VXLAN and NVGRE packet types classification
[dpdk.git] / drivers / net / sfc / sfc_rx.c
index 79ed046..70a72b3 100644 (file)
@@ -128,7 +128,7 @@ sfc_efx_rx_qrefill(struct sfc_efx_rxq *rxq)
                        SFC_ASSERT(m->nb_segs == 1);
                        m->port = port_id;
 
-                       addr[i] = rte_pktmbuf_mtophys(m);
+                       addr[i] = rte_pktmbuf_iova(m);
                }
 
                efx_rx_qpost(rxq->common, addr, rxq->buf_size,
@@ -193,7 +193,7 @@ sfc_efx_rx_desc_flags_to_packet_type(const unsigned int desc_flags)
 }
 
 static const uint32_t *
-sfc_efx_supported_ptypes_get(void)
+sfc_efx_supported_ptypes_get(__rte_unused uint32_t tunnel_encaps)
 {
        static const uint32_t ptypes[] = {
                RTE_PTYPE_L2_ETHER,
@@ -697,8 +697,8 @@ sfc_rx_qstart(struct sfc_adapter *sa, unsigned int sw_index)
 
        rc = efx_rx_qcreate(sa->nic, rxq->hw_index, 0, rxq_info->type,
                            &rxq->mem, rxq_info->entries,
-                           0 /* not used on EF10 */, evq->common,
-                           &rxq->common);
+                           0 /* not used on EF10 */, rxq_info->type_flags,
+                           evq->common, &rxq->common);
        if (rc != 0)
                goto fail_rx_qcreate;
 
@@ -780,9 +780,8 @@ sfc_rx_qcheck_conf(struct sfc_adapter *sa, uint16_t nb_rx_desc,
        if (rx_conf->rx_thresh.pthresh != 0 ||
            rx_conf->rx_thresh.hthresh != 0 ||
            rx_conf->rx_thresh.wthresh != 0) {
-               sfc_err(sa,
+               sfc_warn(sa,
                        "RxQ prefetch/host/writeback thresholds are not supported");
-               rc = EINVAL;
        }
 
        if (rx_conf->rx_free_thresh > rx_free_thresh_max) {
@@ -943,9 +942,14 @@ sfc_rx_qinit(struct sfc_adapter *sa, unsigned int sw_index,
 
        SFC_ASSERT(nb_rx_desc <= rxq_info->max_entries);
        rxq_info->entries = nb_rx_desc;
-       rxq_info->type =
+       rxq_info->type = EFX_RXQ_TYPE_DEFAULT;
+       rxq_info->type_flags =
                sa->eth_dev->data->dev_conf.rxmode.enable_scatter ?
-               EFX_RXQ_TYPE_SCATTER : EFX_RXQ_TYPE_DEFAULT;
+               EFX_RXQ_FLAG_SCATTER : EFX_RXQ_FLAG_NONE;
+
+       if ((encp->enc_tunnel_encapsulations_supported != 0) &&
+           (sa->dp_rx->features & SFC_DP_RX_FEAT_TUNNELS))
+               rxq_info->type_flags |= EFX_RXQ_FLAG_INNER_CLASSES;
 
        rc = sfc_ev_qinit(sa, SFC_EVQ_TYPE_RX, sw_index,
                          rxq_info->entries, socket_id, &evq);