1 /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
2 /* Copyright (c) 2019 Mellanox Technologies. */
4 #ifndef __MLX5_EN_PARAMS_H__
5 #define __MLX5_EN_PARAMS_H__
9 struct mlx5e_xsk_param {
14 struct mlx5e_rq_param {
15 u32 rqc[MLX5_ST_SZ_DW(rqc)];
16 struct mlx5_wq_param wq;
17 struct mlx5e_rq_frags_info frags_info;
20 struct mlx5e_sq_param {
21 u32 sqc[MLX5_ST_SZ_DW(sqc)];
22 struct mlx5_wq_param wq;
26 struct mlx5e_cq_param {
27 u32 cqc[MLX5_ST_SZ_DW(cqc)];
28 struct mlx5_wq_param wq;
33 struct mlx5e_channel_param {
34 struct mlx5e_rq_param rq;
35 struct mlx5e_sq_param sq;
36 struct mlx5e_sq_param xdp_sq;
37 struct mlx5e_sq_param icosq;
38 struct mlx5e_cq_param rx_cq;
39 struct mlx5e_cq_param tx_cq;
40 struct mlx5e_cq_param icosq_cq;
43 static inline bool mlx5e_qid_get_ch_if_in_group(struct mlx5e_params *params,
45 enum mlx5e_rq_group group,
48 int nch = params->num_channels;
49 int ch = qid - nch * group;
51 if (ch < 0 || ch >= nch)
58 static inline void mlx5e_qid_get_ch_and_group(struct mlx5e_params *params,
61 enum mlx5e_rq_group *group)
63 u16 nch = params->num_channels;
69 static inline bool mlx5e_qid_validate(struct mlx5e_params *params, u64 qid)
71 return qid < params->num_channels * MLX5E_NUM_RQ_GROUPS;
74 /* Parameter calculations */
76 u16 mlx5e_get_linear_rq_headroom(struct mlx5e_params *params,
77 struct mlx5e_xsk_param *xsk);
78 u32 mlx5e_rx_get_linear_frag_sz(struct mlx5e_params *params,
79 struct mlx5e_xsk_param *xsk);
80 u8 mlx5e_mpwqe_log_pkts_per_wqe(struct mlx5e_params *params,
81 struct mlx5e_xsk_param *xsk);
82 bool mlx5e_rx_is_linear_skb(struct mlx5e_params *params,
83 struct mlx5e_xsk_param *xsk);
84 bool mlx5e_rx_mpwqe_is_linear_skb(struct mlx5_core_dev *mdev,
85 struct mlx5e_params *params,
86 struct mlx5e_xsk_param *xsk);
87 u8 mlx5e_mpwqe_get_log_rq_size(struct mlx5e_params *params,
88 struct mlx5e_xsk_param *xsk);
89 u8 mlx5e_mpwqe_get_log_stride_size(struct mlx5_core_dev *mdev,
90 struct mlx5e_params *params,
91 struct mlx5e_xsk_param *xsk);
92 u8 mlx5e_mpwqe_get_log_num_strides(struct mlx5_core_dev *mdev,
93 struct mlx5e_params *params,
94 struct mlx5e_xsk_param *xsk);
95 u16 mlx5e_get_rq_headroom(struct mlx5_core_dev *mdev,
96 struct mlx5e_params *params,
97 struct mlx5e_xsk_param *xsk);
99 /* Build queue parameters */
101 void mlx5e_build_rq_param(struct mlx5e_priv *priv,
102 struct mlx5e_params *params,
103 struct mlx5e_xsk_param *xsk,
104 struct mlx5e_rq_param *param);
105 void mlx5e_build_sq_param_common(struct mlx5e_priv *priv,
106 struct mlx5e_sq_param *param);
107 void mlx5e_build_rx_cq_param(struct mlx5e_priv *priv,
108 struct mlx5e_params *params,
109 struct mlx5e_xsk_param *xsk,
110 struct mlx5e_cq_param *param);
111 void mlx5e_build_tx_cq_param(struct mlx5e_priv *priv,
112 struct mlx5e_params *params,
113 struct mlx5e_cq_param *param);
114 void mlx5e_build_ico_cq_param(struct mlx5e_priv *priv,
116 struct mlx5e_cq_param *param);
117 void mlx5e_build_icosq_param(struct mlx5e_priv *priv,
119 struct mlx5e_sq_param *param);
120 void mlx5e_build_xdpsq_param(struct mlx5e_priv *priv,
121 struct mlx5e_params *params,
122 struct mlx5e_sq_param *param);
124 #endif /* __MLX5_EN_PARAMS_H__ */