net/sfc: fix multicast address list copy memory leak
[dpdk.git] / drivers / net / sfc / sfc_dp_tx.h
index 1a6d6c1..94d1b10 100644 (file)
@@ -65,6 +65,16 @@ struct sfc_dp_tx_qcreate_info {
        unsigned int            txq_entries;
        /** Maximum size of data in the DMA descriptor */
        uint16_t                dma_desc_size_max;
+       /** DMA-mapped Tx descriptors ring */
+       void                    *txq_hw_ring;
+       /** Associated event queue size */
+       unsigned int            evq_entries;
+       /** Hardware event ring */
+       void                    *evq_hw_ring;
+       /** The queue index in hardware (required to push right doorbell) */
+       unsigned int            hw_index;
+       /** Virtual address of the memory-mapped BAR to push Tx doorbell */
+       volatile void           *mem_bar;
 };
 
 /**
@@ -107,22 +117,40 @@ typedef int (sfc_dp_tx_qstart_t)(struct sfc_dp_txq *dp_txq,
 typedef void (sfc_dp_tx_qstop_t)(struct sfc_dp_txq *dp_txq,
                                 unsigned int *evq_read_ptr);
 
+/**
+ * Transmit event handler used during queue flush only.
+ */
+typedef bool (sfc_dp_tx_qtx_ev_t)(struct sfc_dp_txq *dp_txq, unsigned int id);
+
 /**
  * Transmit queue function called after the queue flush.
  */
 typedef void (sfc_dp_tx_qreap_t)(struct sfc_dp_txq *dp_txq);
 
+/**
+ * Check Tx descriptor status
+ */
+typedef int (sfc_dp_tx_qdesc_status_t)(struct sfc_dp_txq *dp_txq,
+                                      uint16_t offset);
+
 /** Transmit datapath definition */
 struct sfc_dp_tx {
        struct sfc_dp                   dp;
 
        unsigned int                    features;
 #define SFC_DP_TX_FEAT_VLAN_INSERT     0x1
+#define SFC_DP_TX_FEAT_TSO             0x2
+#define SFC_DP_TX_FEAT_MULTI_SEG       0x4
+#define SFC_DP_TX_FEAT_MULTI_PROCESS   0x8
+#define SFC_DP_TX_FEAT_MULTI_POOL      0x10
+#define SFC_DP_TX_FEAT_REFCNT          0x20
        sfc_dp_tx_qcreate_t             *qcreate;
        sfc_dp_tx_qdestroy_t            *qdestroy;
        sfc_dp_tx_qstart_t              *qstart;
        sfc_dp_tx_qstop_t               *qstop;
+       sfc_dp_tx_qtx_ev_t              *qtx_ev;
        sfc_dp_tx_qreap_t               *qreap;
+       sfc_dp_tx_qdesc_status_t        *qdesc_status;
        eth_tx_burst_t                  pkt_burst;
 };
 
@@ -143,6 +171,8 @@ sfc_dp_find_tx_by_caps(struct sfc_dp_list *head, unsigned int avail_caps)
 }
 
 extern struct sfc_dp_tx sfc_efx_tx;
+extern struct sfc_dp_tx sfc_ef10_tx;
+extern struct sfc_dp_tx sfc_ef10_simple_tx;
 
 #ifdef __cplusplus
 }