X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fsfc%2Fsfc_repr_proxy.h;h=b49b1a2a96fea911b63e79bb2bab0a0383cd61d7;hb=64c952ec78d35ab3a1a229f9e9901d6092c6189c;hp=bd7ad7148ab78a5469ad0c507da12b420c295e21;hpb=155583abe63cee8ffb5fc4a276c03641f492d750;p=dpdk.git diff --git a/drivers/net/sfc/sfc_repr_proxy.h b/drivers/net/sfc/sfc_repr_proxy.h index bd7ad7148a..b49b1a2a96 100644 --- a/drivers/net/sfc/sfc_repr_proxy.h +++ b/drivers/net/sfc/sfc_repr_proxy.h @@ -18,6 +18,9 @@ #include "efx.h" #include "sfc_repr.h" +#include "sfc_dp.h" +#include "sfc_flow.h" +#include "sfc_mae.h" #ifdef __cplusplus extern "C" { @@ -31,6 +34,14 @@ 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; @@ -40,6 +51,14 @@ 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; @@ -47,16 +66,44 @@ struct sfc_repr_proxy_port { 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 { @@ -76,8 +123,12 @@ struct sfc_repr_proxy { 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; @@ -85,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);