Add definitions for fixed-length header splitting at TOTAL_HEADERS, and pointers for the upcoming netdma work. This reuses the same structures as xsk, so both cannot be run simultaneously.
Signed-off-by: Jonathan Lemon <jonathan.le...@gmail.com> --- drivers/net/ethernet/mellanox/mlx5/core/en.h | 22 +++++++++++++++++-- .../net/ethernet/mellanox/mlx5/core/en/txrx.h | 3 +++ 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en.h b/drivers/net/ethernet/mellanox/mlx5/core/en.h index 842db20493df..0483cc815340 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en.h @@ -58,6 +58,12 @@ extern const struct net_device_ops mlx5e_netdev_ops; struct page_pool; +#define TCP_HDRS_LEN (20 + 20) /* headers + options */ +#define IP6_HDRS_LEN (40) +#define MAC_HDR_LEN (14) +#define TOTAL_HEADERS (TCP_HDRS_LEN + IP6_HDRS_LEN + MAC_HDR_LEN) +#define HD_SPLIT_DEFAULT_FRAG_SIZE (4096) +#define MLX5E_HD_SPLIT(params) (params->hd_split) #define MLX5E_METADATA_ETHER_TYPE (0x8CE4) #define MLX5E_METADATA_ETHER_LEN 8 @@ -228,6 +234,7 @@ enum mlx5e_priv_flag { MLX5E_PFLAG_RX_STRIDING_RQ, MLX5E_PFLAG_RX_NO_CSUM_COMPLETE, MLX5E_PFLAG_XDP_TX_MPWQE, + MLX5E_PFLAG_RX_HD_SPLIT, MLX5E_NUM_PFLAGS, /* Keep last */ }; @@ -263,6 +270,7 @@ struct mlx5e_params { struct mlx5e_xsk *xsk; unsigned int sw_mtu; int hard_mtu; + bool hd_split; }; enum { @@ -299,7 +307,8 @@ struct mlx5e_cq_decomp { enum mlx5e_dma_map_type { MLX5E_DMA_MAP_SINGLE, - MLX5E_DMA_MAP_PAGE + MLX5E_DMA_MAP_PAGE, + MLX5E_DMA_MAP_FIXED }; struct mlx5e_sq_dma { @@ -367,6 +376,7 @@ struct mlx5e_dma_info { struct page *page; struct xdp_buff *xsk; }; + bool netgpu_source; }; /* XDP packets can be transmitted in different ways. On completion, we need to @@ -545,6 +555,7 @@ enum mlx5e_rq_flag { struct mlx5e_rq_frag_info { int frag_size; int frag_stride; + int frag_source; }; struct mlx5e_rq_frags_info { @@ -554,6 +565,7 @@ struct mlx5e_rq_frags_info { u8 wqe_bulk; }; +struct netgpu_ctx; struct mlx5e_rq { /* data path */ union { @@ -611,6 +623,7 @@ struct mlx5e_rq { /* AF_XDP zero-copy */ struct xdp_umem *umem; + struct netgpu_ctx *netgpu; struct work_struct recover_work; @@ -628,6 +641,7 @@ struct mlx5e_rq { enum mlx5e_channel_state { MLX5E_CHANNEL_STATE_XSK, + MLX5E_CHANNEL_STATE_NETGPU, MLX5E_CHANNEL_NUM_STATES }; @@ -736,9 +750,13 @@ struct mlx5e_xsk { * but it doesn't distinguish between zero-copy and non-zero-copy UMEMs, * so rely on our mechanism. */ - struct xdp_umem **umems; + union { + struct xdp_umem **umems; + struct netgpu_ctx **ctx_tbl; + }; u16 refcnt; bool ever_used; + bool is_netgpu; }; /* Temporary storage for variables that are allocated when struct mlx5e_priv is diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h b/drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h index bfd3e1161bc6..dfd20c30de02 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h @@ -238,6 +238,9 @@ mlx5e_tx_dma_unmap(struct device *pdev, struct mlx5e_sq_dma *dma) case MLX5E_DMA_MAP_PAGE: dma_unmap_page(pdev, dma->addr, dma->size, DMA_TO_DEVICE); break; + case MLX5E_DMA_MAP_FIXED: + /* DMA mappings are fixed, or managed elsewhere. */ + break; default: WARN_ONCE(true, "mlx5e_tx_dma_unmap unknown DMA type!\n"); } -- 2.24.1