drivers/net: remove queue xstats auto-fill flag
[dpdk.git] / drivers / net / sfc / sfc_repr_proxy.h
index e4a6213..b49b1a2 100644 (file)
 
 #include <stdint.h>
 
+#include <rte_ring.h>
+#include <rte_mempool.h>
+
 #include "efx.h"
 
+#include "sfc_repr.h"
+#include "sfc_dp.h"
+#include "sfc_flow.h"
+#include "sfc_mae.h"
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -26,16 +34,76 @@ extern "C" {
 #define SFC_REPR_PROXY_NB_TXQ_MIN      (1)
 #define SFC_REPR_PROXY_NB_TXQ_MAX      (1)
 
+#define SFC_REPR_PROXY_RX_DESC_COUNT   256
+#define SFC_REPR_PROXY_RXQ_REFILL_LEVEL        (SFC_REPR_PROXY_RX_DESC_COUNT / 4)
+#define SFC_REPR_PROXY_RX_BURST                32
+
+#define SFC_REPR_PROXY_TX_DESC_COUNT   256
+#define SFC_REPR_PROXY_TXQ_FREE_THRESH (SFC_REPR_PROXY_TX_DESC_COUNT / 4)
+#define SFC_REPR_PROXY_TX_BURST                32
+
+struct sfc_repr_proxy_rxq {
+       struct rte_ring                 *ring;
+       struct rte_mempool              *mb_pool;
+};
+
+struct sfc_repr_proxy_txq {
+       struct rte_ring                 *ring;
+};
+
+struct sfc_repr_proxy_filter {
+       /*
+        * 2 filters are required to match all incoming traffic, unknown
+        * unicast and unknown multicast.
+        */
+       efx_filter_spec_t specs[2];
+};
+
 struct sfc_repr_proxy_port {
        TAILQ_ENTRY(sfc_repr_proxy_port)        entries;
        uint16_t                                repr_id;
        uint16_t                                rte_port_id;
        efx_mport_id_t                          egress_mport;
+       struct sfc_repr_proxy_rxq               rxq[SFC_REPR_RXQ_MAX];
+       struct sfc_repr_proxy_txq               txq[SFC_REPR_TXQ_MAX];
+       struct sfc_mae_rule                     *mae_rule;
+       bool                                    enabled;
+       bool                                    started;
+};
+
+struct sfc_repr_proxy_dp_rxq {
+       struct rte_mempool              *mp;
+       unsigned int                    ref_count;
+
+       eth_rx_burst_t                  pkt_burst;
+       struct sfc_dp_rxq               *dp;
+
+       uint16_t                        route_port_id;
+       bool                            stop_route;
+       unsigned int                    available;
+       unsigned int                    forwarded;
+       unsigned int                    routed;
+       struct rte_mbuf                 *pkts[SFC_REPR_PROXY_TX_BURST];
+
+       sfc_sw_index_t                  sw_index;
+};
+
+struct sfc_repr_proxy_dp_txq {
+       eth_tx_burst_t                  pkt_burst;
+       struct sfc_dp_txq               *dp;
+
+       unsigned int                    available;
+       unsigned int                    transmitted;
+       struct rte_mbuf                 *tx_pkts[SFC_REPR_PROXY_TX_BURST];
+
+       sfc_sw_index_t                  sw_index;
 };
 
 enum sfc_repr_proxy_mbox_op {
        SFC_REPR_PROXY_MBOX_ADD_PORT,
        SFC_REPR_PROXY_MBOX_DEL_PORT,
+       SFC_REPR_PROXY_MBOX_START_PORT,
+       SFC_REPR_PROXY_MBOX_STOP_PORT,
 };
 
 struct sfc_repr_proxy_mbox {
@@ -54,8 +122,13 @@ struct sfc_repr_proxy {
        efx_mport_id_t                  mport_alias;
        struct sfc_repr_proxy_ports     ports;
        bool                            started;
+       struct sfc_repr_proxy_dp_rxq    dp_rxq[SFC_REPR_PROXY_NB_RXQ_MAX];
+       struct sfc_repr_proxy_dp_txq    dp_txq[SFC_REPR_PROXY_NB_TXQ_MAX];
+       struct sfc_repr_proxy_filter    mport_filter;
 
        struct sfc_repr_proxy_mbox      mbox;
+       unsigned int                    nb_txq;
+       unsigned int                    nb_rxq;
 };
 
 struct sfc_adapter;
@@ -63,6 +136,8 @@ struct sfc_adapter;
 int sfc_repr_proxy_attach(struct sfc_adapter *sa);
 void sfc_repr_proxy_pre_detach(struct sfc_adapter *sa);
 void sfc_repr_proxy_detach(struct sfc_adapter *sa);
+int sfc_repr_proxy_txq_init(struct sfc_adapter *sa);
+void sfc_repr_proxy_txq_fini(struct sfc_adapter *sa);
 int sfc_repr_proxy_start(struct sfc_adapter *sa);
 void sfc_repr_proxy_stop(struct sfc_adapter *sa);