X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fsfc%2Fsfc_rx.h;h=9e6282eadd2afa5f45b7f7fbe18fd1259de24c43;hb=1e3a39f72d5d088cd3038241d799dd102e50f0d2;hp=c0cb17a70355026cf31c6d2bf2b85de629cea8ef;hpb=4ec1fc3ba88183071cf4441d74fdc5a6d5525ade;p=dpdk.git diff --git a/drivers/net/sfc/sfc_rx.h b/drivers/net/sfc/sfc_rx.h index c0cb17a703..9e6282eadd 100644 --- a/drivers/net/sfc/sfc_rx.h +++ b/drivers/net/sfc/sfc_rx.h @@ -1,5 +1,7 @@ /*- - * Copyright (c) 2016 Solarflare Communications Inc. + * BSD LICENSE + * + * Copyright (c) 2016-2017 Solarflare Communications Inc. * All rights reserved. * * This software was jointly developed between OKTET Labs (under contract @@ -36,6 +38,8 @@ #include "efx.h" +#include "sfc_dp_rx.h" + #ifdef __cplusplus extern "C" { #endif @@ -47,7 +51,7 @@ struct sfc_evq; * Software Rx descriptor information associated with hardware Rx * descriptor. */ -struct sfc_rx_sw_desc { +struct sfc_efx_rx_sw_desc { struct rte_mbuf *mbuf; unsigned int flags; unsigned int size; @@ -59,8 +63,6 @@ enum sfc_rxq_state_bit { #define SFC_RXQ_INITIALIZED (1 << SFC_RXQ_INITIALIZED_BIT) SFC_RXQ_STARTED_BIT, #define SFC_RXQ_STARTED (1 << SFC_RXQ_STARTED_BIT) - SFC_RXQ_RUNNING_BIT, -#define SFC_RXQ_RUNNING (1 << SFC_RXQ_RUNNING_BIT) SFC_RXQ_FLUSHING_BIT, #define SFC_RXQ_FLUSHING (1 << SFC_RXQ_FLUSHING_BIT) SFC_RXQ_FLUSHED_BIT, @@ -70,36 +72,18 @@ enum sfc_rxq_state_bit { }; /** - * Receive queue information used on data path. + * Receive queue control information. * Allocated on the socket specified on the queue setup. */ struct sfc_rxq { - /* Used on data path */ struct sfc_evq *evq; - struct sfc_rx_sw_desc *sw_desc; - unsigned int state; - unsigned int ptr_mask; - unsigned int pending; - unsigned int completed; - uint16_t batch_max; - uint16_t prefix_size; -#if EFSYS_OPT_RX_SCALE - unsigned int flags; -#define SFC_RXQ_RSS_HASH 0x1 -#endif - - /* Used on refill */ - unsigned int added; - unsigned int pushed; - unsigned int refill_threshold; - uint8_t port_id; - uint16_t buf_size; - struct rte_mempool *refill_mb_pool; efx_rxq_t *common; efsys_mem_t mem; - - /* Not used on data path */ unsigned int hw_index; + unsigned int refill_threshold; + struct rte_mempool *refill_mb_pool; + struct sfc_dp_rxq *dp; + unsigned int state; }; static inline unsigned int @@ -114,6 +98,44 @@ sfc_rxq_sw_index(const struct sfc_rxq *rxq) return sfc_rxq_sw_index_by_hw_index(rxq->hw_index); } +struct sfc_rxq *sfc_rxq_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq); + +/** + * Receive queue information used on libefx-based data path. + * Allocated on the socket specified on the queue setup. + */ +struct sfc_efx_rxq { + /* Used on data path */ + struct sfc_evq *evq; + unsigned int flags; +#define SFC_EFX_RXQ_FLAG_STARTED 0x1 +#define SFC_EFX_RXQ_FLAG_RUNNING 0x2 +#define SFC_EFX_RXQ_FLAG_RSS_HASH 0x4 + unsigned int ptr_mask; + unsigned int pending; + unsigned int completed; + uint16_t batch_max; + uint16_t prefix_size; + struct sfc_efx_rx_sw_desc *sw_desc; + + /* Used on refill */ + unsigned int added; + unsigned int pushed; + unsigned int refill_threshold; + uint16_t buf_size; + struct rte_mempool *refill_mb_pool; + efx_rxq_t *common; + + /* Datapath receive queue anchor */ + struct sfc_dp_rxq dp; +}; + +static inline struct sfc_efx_rxq * +sfc_efx_rxq_by_dp_rxq(struct sfc_dp_rxq *dp_rxq) +{ + return container_of(dp_rxq, struct sfc_efx_rxq, dp); +} + /** * Receive queue information used during setup/release only. * Allocated on the same socket as adapter data. @@ -127,8 +149,8 @@ struct sfc_rxq_info { boolean_t deferred_started; }; -int sfc_rx_init(struct sfc_adapter *sa); -void sfc_rx_fini(struct sfc_adapter *sa); +int sfc_rx_configure(struct sfc_adapter *sa); +void sfc_rx_close(struct sfc_adapter *sa); int sfc_rx_start(struct sfc_adapter *sa); void sfc_rx_stop(struct sfc_adapter *sa); @@ -143,15 +165,13 @@ void sfc_rx_qstop(struct sfc_adapter *sa, unsigned int sw_index); void sfc_rx_qflush_done(struct sfc_rxq *rxq); void sfc_rx_qflush_failed(struct sfc_rxq *rxq); -uint16_t sfc_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, - uint16_t nb_pkts); - unsigned int sfc_rx_qdesc_npending(struct sfc_adapter *sa, unsigned int sw_index); -int sfc_rx_qdesc_done(struct sfc_rxq *rxq, unsigned int offset); +int sfc_rx_qdesc_done(struct sfc_dp_rxq *dp_rxq, unsigned int offset); #if EFSYS_OPT_RX_SCALE efx_rx_hash_type_t sfc_rte_to_efx_hash_type(uint64_t rss_hf); +uint64_t sfc_efx_to_rte_hash_type(efx_rx_hash_type_t efx_hash_types); #endif #ifdef __cplusplus