net/sfc: support API to negotiate delivery of Rx metadata
[dpdk.git] / drivers / net / sfc / sfc_dp_rx.h
index a374311..d037aca 100644 (file)
@@ -1,7 +1,7 @@
 /* SPDX-License-Identifier: BSD-3-Clause
  *
- * Copyright (c) 2017-2018 Solarflare Communications Inc.
- * All rights reserved.
+ * Copyright(c) 2019-2021 Xilinx, Inc.
+ * Copyright(c) 2017-2019 Solarflare Communications Inc.
  *
  * This software was jointly developed between OKTET Labs (under contract
  * for Solarflare) and Solarflare Communications, Inc.
@@ -11,7 +11,7 @@
 #define _SFC_DP_RX_H
 
 #include <rte_mempool.h>
-#include <rte_ethdev_driver.h>
+#include <ethdev_driver.h>
 
 #include "sfc_dp.h"
 
@@ -74,6 +74,8 @@ struct sfc_dp_rx_qcreate_info {
        /** DMA-mapped Rx descriptors ring */
        void                    *rxq_hw_ring;
 
+       /** Event queue index in hardware */
+       unsigned int            evq_hw_index;
        /** Associated event queue size */
        unsigned int            evq_entries;
        /** Hardware event ring */
@@ -86,6 +88,8 @@ struct sfc_dp_rx_qcreate_info {
         * doorbell
         */
        volatile void           *mem_bar;
+       /** Function control window offset */
+       efsys_dma_addr_t        fcw_offset;
        /** VI window size shift */
        unsigned int            vi_window_shift;
 };
@@ -157,7 +161,8 @@ typedef void (sfc_dp_rx_qdestroy_t)(struct sfc_dp_rxq *dp_rxq);
  * It handovers EvQ to the datapath.
  */
 typedef int (sfc_dp_rx_qstart_t)(struct sfc_dp_rxq *dp_rxq,
-                                unsigned int evq_read_ptr);
+                                unsigned int evq_read_ptr,
+                                const efx_rx_prefix_layout_t *pinfo);
 
 /**
  * Receive queue stop function called before flush.
@@ -193,6 +198,14 @@ typedef unsigned int (sfc_dp_rx_qdesc_npending_t)(struct sfc_dp_rxq *dp_rxq);
 /** Check Rx descriptor status */
 typedef int (sfc_dp_rx_qdesc_status_t)(struct sfc_dp_rxq *dp_rxq,
                                       uint16_t offset);
+/** Enable Rx interrupts */
+typedef int (sfc_dp_rx_intr_enable_t)(struct sfc_dp_rxq *dp_rxq);
+
+/** Disable Rx interrupts */
+typedef int (sfc_dp_rx_intr_disable_t)(struct sfc_dp_rxq *dp_rxq);
+
+/** Get number of pushed Rx buffers */
+typedef unsigned int (sfc_dp_rx_get_pushed_t)(struct sfc_dp_rxq *dp_rxq);
 
 /** Receive datapath definition */
 struct sfc_dp_rx {
@@ -202,6 +215,8 @@ struct sfc_dp_rx {
 #define SFC_DP_RX_FEAT_MULTI_PROCESS           0x1
 #define SFC_DP_RX_FEAT_FLOW_FLAG               0x2
 #define SFC_DP_RX_FEAT_FLOW_MARK               0x4
+#define SFC_DP_RX_FEAT_INTR                    0x8
+#define SFC_DP_RX_FEAT_STATS                   0x10
        /**
         * Rx offload capabilities supported by the datapath on device
         * level only if HW/FW supports it.
@@ -225,6 +240,9 @@ struct sfc_dp_rx {
        sfc_dp_rx_supported_ptypes_get_t        *supported_ptypes_get;
        sfc_dp_rx_qdesc_npending_t              *qdesc_npending;
        sfc_dp_rx_qdesc_status_t                *qdesc_status;
+       sfc_dp_rx_intr_enable_t                 *intr_enable;
+       sfc_dp_rx_intr_disable_t                *intr_disable;
+       sfc_dp_rx_get_pushed_t                  *get_pushed;
        eth_rx_burst_t                          pkt_burst;
 };
 
@@ -256,6 +274,7 @@ const struct sfc_dp_rx *sfc_dp_rx_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq);
 extern struct sfc_dp_rx sfc_efx_rx;
 extern struct sfc_dp_rx sfc_ef10_rx;
 extern struct sfc_dp_rx sfc_ef10_essb_rx;
+extern struct sfc_dp_rx sfc_ef100_rx;
 
 #ifdef __cplusplus
 }