X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fsfc%2Fsfc_dp_rx.h;h=b6c44085ceac95e0dd455e210f26788e6d149692;hb=8089aa75c513e76a0afc029389a52e545786a9d1;hp=a3743117c042e0b339a3f04f497b83162afe7735;hpb=f08d113d5511284c2e35dba21d69e91c0bc7dbf4;p=dpdk.git diff --git a/drivers/net/sfc/sfc_dp_rx.h b/drivers/net/sfc/sfc_dp_rx.h index a3743117c0..b6c44085ce 100644 --- a/drivers/net/sfc/sfc_dp_rx.h +++ b/drivers/net/sfc/sfc_dp_rx.h @@ -1,7 +1,7 @@ /* SPDX-License-Identifier: BSD-3-Clause * - * Copyright (c) 2017-2018 Solarflare Communications Inc. - * All rights reserved. + * Copyright(c) 2019-2021 Xilinx, Inc. + * Copyright(c) 2017-2019 Solarflare Communications Inc. * * This software was jointly developed between OKTET Labs (under contract * for Solarflare) and Solarflare Communications, Inc. @@ -11,7 +11,7 @@ #define _SFC_DP_RX_H #include -#include +#include #include "sfc_dp.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 */ @@ -86,6 +88,8 @@ struct sfc_dp_rx_qcreate_info { * doorbell */ volatile void *mem_bar; + /** Function control window offset */ + efsys_dma_addr_t fcw_offset; /** VI window size shift */ unsigned int vi_window_shift; }; @@ -157,7 +161,8 @@ typedef void (sfc_dp_rx_qdestroy_t)(struct sfc_dp_rxq *dp_rxq); * It handovers EvQ to the datapath. */ typedef int (sfc_dp_rx_qstart_t)(struct sfc_dp_rxq *dp_rxq, - unsigned int evq_read_ptr); + unsigned int evq_read_ptr, + const efx_rx_prefix_layout_t *pinfo); /** * Receive queue stop function called before flush. @@ -193,6 +198,14 @@ 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); + +/** Get number of pushed Rx buffers */ +typedef unsigned int (sfc_dp_rx_get_pushed_t)(struct sfc_dp_rxq *dp_rxq); /** Receive datapath definition */ struct sfc_dp_rx { @@ -202,6 +215,7 @@ struct sfc_dp_rx { #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. @@ -225,6 +239,9 @@ 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; + sfc_dp_rx_get_pushed_t *get_pushed; eth_rx_burst_t pkt_burst; }; @@ -256,6 +273,7 @@ const struct sfc_dp_rx *sfc_dp_rx_by_dp_rxq(const struct sfc_dp_rxq *dp_rxq); extern struct sfc_dp_rx sfc_efx_rx; extern struct sfc_dp_rx sfc_ef10_rx; extern struct sfc_dp_rx sfc_ef10_essb_rx; +extern struct sfc_dp_rx sfc_ef100_rx; #ifdef __cplusplus }