X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fnet%2Fsfc%2Fsfc_dp_rx.h;h=73e58574221939cc870db3288bd2832667c794f7;hb=2048f3a965d85f264ffe62a5dc7b272a85464331;hp=042c014ee5b88bcbf4449b78a98e3c92f99861d1;hpb=d5371f3dfa595951899ffc2f41dcd6711675d5b5;p=dpdk.git diff --git a/drivers/net/sfc/sfc_dp_rx.h b/drivers/net/sfc/sfc_dp_rx.h index 042c014ee5..73e5857422 100644 --- a/drivers/net/sfc/sfc_dp_rx.h +++ b/drivers/net/sfc/sfc_dp_rx.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 */ @@ -193,18 +195,31 @@ 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); /** Receive datapath definition */ struct sfc_dp_rx { struct sfc_dp dp; unsigned int features; -#define SFC_DP_RX_FEAT_SCATTER 0x1 -#define SFC_DP_RX_FEAT_MULTI_PROCESS 0x2 -#define SFC_DP_RX_FEAT_TUNNELS 0x4 -#define SFC_DP_RX_FEAT_FLOW_FLAG 0x8 -#define SFC_DP_RX_FEAT_FLOW_MARK 0x10 -#define SFC_DP_RX_FEAT_CHECKSUM 0x20 +#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 + /** + * Rx offload capabilities supported by the datapath on device + * level only if HW/FW supports it. + */ + uint64_t dev_offload_capa; + /** + * Rx offload capabilities supported by the datapath per-queue + * if HW/FW supports it. + */ + uint64_t queue_offload_capa; sfc_dp_rx_get_dev_info_t *get_dev_info; sfc_dp_rx_pool_ops_supported_t *pool_ops_supported; sfc_dp_rx_qsize_up_rings_t *qsize_up_rings; @@ -218,6 +233,8 @@ 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; eth_rx_burst_t pkt_burst; }; @@ -237,6 +254,12 @@ sfc_dp_find_rx_by_caps(struct sfc_dp_list *head, unsigned int avail_caps) return (p == NULL) ? NULL : container_of(p, struct sfc_dp_rx, dp); } +static inline uint64_t +sfc_dp_rx_offload_capa(const struct sfc_dp_rx *dp_rx) +{ + return dp_rx->dev_offload_capa | dp_rx->queue_offload_capa; +} + /** Get Rx datapath ops by the datapath RxQ handle */ const struct sfc_dp_rx *sfc_dp_rx_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq);