Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
[linux-2.6-microblaze.git] / drivers / net / ethernet / mellanox / mlx5 / core / en.h
index 356f585..2f05b0f 100644 (file)
@@ -226,6 +226,7 @@ enum mlx5e_priv_flag {
        MLX5E_PFLAG_RX_STRIDING_RQ,
        MLX5E_PFLAG_RX_NO_CSUM_COMPLETE,
        MLX5E_PFLAG_XDP_TX_MPWQE,
+       MLX5E_PFLAG_SKB_TX_MPWQE,
        MLX5E_NUM_PFLAGS, /* Keep last */
 };
 
@@ -270,6 +271,7 @@ enum {
        MLX5E_RQ_STATE_NO_CSUM_COMPLETE,
        MLX5E_RQ_STATE_CSUM_FULL, /* cqe_csum_full hw bit is set */
        MLX5E_RQ_STATE_FPGA_TLS, /* FPGA TLS enabled */
+       MLX5E_RQ_STATE_MINI_CQE_HW_STRIDX /* set when mini_cqe_resp_stride_index cap is used */
 };
 
 struct mlx5e_cq {
@@ -309,6 +311,7 @@ struct mlx5e_sq_dma {
 
 enum {
        MLX5E_SQ_STATE_ENABLED,
+       MLX5E_SQ_STATE_MPWQE,
        MLX5E_SQ_STATE_RECOVERING,
        MLX5E_SQ_STATE_IPSEC,
        MLX5E_SQ_STATE_AM,
@@ -317,26 +320,40 @@ enum {
        MLX5E_SQ_STATE_PENDING_XSK_TX,
 };
 
+struct mlx5e_tx_mpwqe {
+       /* Current MPWQE session */
+       struct mlx5e_tx_wqe *wqe;
+       u32 bytes_count;
+       u8 ds_count;
+       u8 pkt_count;
+       u8 inline_on;
+};
+
 struct mlx5e_txqsq {
        /* data path */
 
        /* dirtied @completion */
        u16                        cc;
+       u16                        skb_fifo_cc;
        u32                        dma_fifo_cc;
        struct dim                 dim; /* Adaptive Moderation */
 
        /* dirtied @xmit */
        u16                        pc ____cacheline_aligned_in_smp;
+       u16                        skb_fifo_pc;
        u32                        dma_fifo_pc;
+       struct mlx5e_tx_mpwqe      mpwqe;
 
        struct mlx5e_cq            cq;
 
        /* read only */
        struct mlx5_wq_cyc         wq;
        u32                        dma_fifo_mask;
+       u16                        skb_fifo_mask;
        struct mlx5e_sq_stats     *stats;
        struct {
                struct mlx5e_sq_dma       *dma_fifo;
+               struct sk_buff           **skb_fifo;
                struct mlx5e_tx_wqe_info  *wqe_info;
        } db;
        void __iomem              *uar_map;
@@ -403,7 +420,7 @@ struct mlx5e_xdp_info {
        };
 };
 
-struct mlx5e_xdp_xmit_data {
+struct mlx5e_xmit_data {
        dma_addr_t  dma_addr;
        void       *data;
        u32         len;
@@ -416,18 +433,10 @@ struct mlx5e_xdp_info_fifo {
        u32 mask;
 };
 
-struct mlx5e_xdp_mpwqe {
-       /* Current MPWQE session */
-       struct mlx5e_tx_wqe *wqe;
-       u8                   ds_count;
-       u8                   pkt_count;
-       u8                   inline_on;
-};
-
 struct mlx5e_xdpsq;
 typedef int (*mlx5e_fp_xmit_xdp_frame_check)(struct mlx5e_xdpsq *);
 typedef bool (*mlx5e_fp_xmit_xdp_frame)(struct mlx5e_xdpsq *,
-                                       struct mlx5e_xdp_xmit_data *,
+                                       struct mlx5e_xmit_data *,
                                        struct mlx5e_xdp_info *,
                                        int);
 
@@ -442,12 +451,12 @@ struct mlx5e_xdpsq {
        u32                        xdpi_fifo_pc ____cacheline_aligned_in_smp;
        u16                        pc;
        struct mlx5_wqe_ctrl_seg   *doorbell_cseg;
-       struct mlx5e_xdp_mpwqe     mpwqe;
+       struct mlx5e_tx_mpwqe      mpwqe;
 
        struct mlx5e_cq            cq;
 
        /* read only */
-       struct xdp_umem           *umem;
+       struct xsk_buff_pool      *xsk_pool;
        struct mlx5_wq_cyc         wq;
        struct mlx5e_xdpsq_stats  *stats;
        mlx5e_fp_xmit_xdp_frame_check xmit_xdp_frame_check;
@@ -611,7 +620,7 @@ struct mlx5e_rq {
        struct page_pool      *page_pool;
 
        /* AF_XDP zero-copy */
-       struct xdp_umem       *umem;
+       struct xsk_buff_pool  *xsk_pool;
 
        struct work_struct     recover_work;
 
@@ -735,12 +744,13 @@ struct mlx5e_hv_vhca_stats_agent {
 #endif
 
 struct mlx5e_xsk {
-       /* UMEMs are stored separately from channels, because we don't want to
-        * lose them when channels are recreated. The kernel also stores UMEMs,
-        * but it doesn't distinguish between zero-copy and non-zero-copy UMEMs,
-        * so rely on our mechanism.
+       /* XSK buffer pools are stored separately from channels,
+        * because we don't want to lose them when channels are
+        * recreated. The kernel also stores buffer pool, but it doesn't
+        * distinguish between zero-copy and non-zero-copy UMEMs, so
+        * rely on our mechanism.
         */
-       struct xdp_umem **umems;
+       struct xsk_buff_pool **pools;
        u16 refcnt;
        bool ever_used;
 };
@@ -899,7 +909,7 @@ struct mlx5e_xsk_param;
 struct mlx5e_rq_param;
 int mlx5e_open_rq(struct mlx5e_channel *c, struct mlx5e_params *params,
                  struct mlx5e_rq_param *param, struct mlx5e_xsk_param *xsk,
-                 struct xdp_umem *umem, struct mlx5e_rq *rq);
+                 struct xsk_buff_pool *xsk_pool, struct mlx5e_rq *rq);
 int mlx5e_wait_for_min_rx_wqes(struct mlx5e_rq *rq, int wait_time);
 void mlx5e_deactivate_rq(struct mlx5e_rq *rq);
 void mlx5e_close_rq(struct mlx5e_rq *rq);
@@ -909,7 +919,7 @@ int mlx5e_open_icosq(struct mlx5e_channel *c, struct mlx5e_params *params,
                     struct mlx5e_sq_param *param, struct mlx5e_icosq *sq);
 void mlx5e_close_icosq(struct mlx5e_icosq *sq);
 int mlx5e_open_xdpsq(struct mlx5e_channel *c, struct mlx5e_params *params,
-                    struct mlx5e_sq_param *param, struct xdp_umem *umem,
+                    struct mlx5e_sq_param *param, struct xsk_buff_pool *xsk_pool,
                     struct mlx5e_xdpsq *sq, bool is_redirect);
 void mlx5e_close_xdpsq(struct mlx5e_xdpsq *sq);