19a22d5d8SMaxim Mikityanskiy /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 29a22d5d8SMaxim Mikityanskiy /* Copyright (c) 2019 Mellanox Technologies. */ 39a22d5d8SMaxim Mikityanskiy 49a22d5d8SMaxim Mikityanskiy #ifndef __MLX5_EN_PARAMS_H__ 59a22d5d8SMaxim Mikityanskiy #define __MLX5_EN_PARAMS_H__ 69a22d5d8SMaxim Mikityanskiy 79a22d5d8SMaxim Mikityanskiy #include "en.h" 89a22d5d8SMaxim Mikityanskiy 9a069e977SMaxim Mikityanskiy struct mlx5e_xsk_param { 10a069e977SMaxim Mikityanskiy u16 headroom; 11a069e977SMaxim Mikityanskiy u16 chunk_size; 12a069e977SMaxim Mikityanskiy }; 13a069e977SMaxim Mikityanskiy 1432a23653SMaxim Mikityanskiy struct mlx5e_cq_param { 1532a23653SMaxim Mikityanskiy u32 cqc[MLX5_ST_SZ_DW(cqc)]; 1632a23653SMaxim Mikityanskiy struct mlx5_wq_param wq; 1732a23653SMaxim Mikityanskiy u16 eq_ix; 1832a23653SMaxim Mikityanskiy u8 cq_period_mode; 1932a23653SMaxim Mikityanskiy }; 2032a23653SMaxim Mikityanskiy 21c293ac92STariq Toukan struct mlx5e_rq_param { 22c293ac92STariq Toukan struct mlx5e_cq_param cqp; 23c293ac92STariq Toukan u32 rqc[MLX5_ST_SZ_DW(rqc)]; 24c293ac92STariq Toukan struct mlx5_wq_param wq; 25c293ac92STariq Toukan struct mlx5e_rq_frags_info frags_info; 26c293ac92STariq Toukan }; 27c293ac92STariq Toukan 28c293ac92STariq Toukan struct mlx5e_sq_param { 29c293ac92STariq Toukan struct mlx5e_cq_param cqp; 30c293ac92STariq Toukan u32 sqc[MLX5_ST_SZ_DW(sqc)]; 31c293ac92STariq Toukan struct mlx5_wq_param wq; 32c293ac92STariq Toukan bool is_mpw; 33579524c6SVladyslav Tarasiuk u16 stop_room; 34c293ac92STariq Toukan }; 35c293ac92STariq Toukan 3632a23653SMaxim Mikityanskiy struct mlx5e_channel_param { 3732a23653SMaxim Mikityanskiy struct mlx5e_rq_param rq; 38c293ac92STariq Toukan struct mlx5e_sq_param txq_sq; 3932a23653SMaxim Mikityanskiy struct mlx5e_sq_param xdp_sq; 4032a23653SMaxim Mikityanskiy struct mlx5e_sq_param icosq; 41c293ac92STariq Toukan struct mlx5e_sq_param async_icosq; 4232a23653SMaxim Mikityanskiy }; 4332a23653SMaxim Mikityanskiy 44145e5637SEran Ben Elisha struct mlx5e_create_sq_param { 45145e5637SEran Ben Elisha struct mlx5_wq_ctrl *wq_ctrl; 46145e5637SEran Ben Elisha u32 cqn; 471880bc4eSEran Ben Elisha u32 ts_cqe_to_dest_cqn; 48145e5637SEran Ben Elisha u32 tisn; 49145e5637SEran Ben Elisha u8 tis_lst_sz; 50145e5637SEran Ben Elisha u8 min_inline_mode; 51145e5637SEran Ben Elisha }; 52145e5637SEran Ben Elisha 53db05815bSMaxim Mikityanskiy static inline bool mlx5e_qid_get_ch_if_in_group(struct mlx5e_params *params, 54db05815bSMaxim Mikityanskiy u16 qid, 55db05815bSMaxim Mikityanskiy enum mlx5e_rq_group group, 56db05815bSMaxim Mikityanskiy u16 *ix) 57db05815bSMaxim Mikityanskiy { 58db05815bSMaxim Mikityanskiy int nch = params->num_channels; 59db05815bSMaxim Mikityanskiy int ch = qid - nch * group; 60db05815bSMaxim Mikityanskiy 61db05815bSMaxim Mikityanskiy if (ch < 0 || ch >= nch) 62db05815bSMaxim Mikityanskiy return false; 63db05815bSMaxim Mikityanskiy 64db05815bSMaxim Mikityanskiy *ix = ch; 65db05815bSMaxim Mikityanskiy return true; 66db05815bSMaxim Mikityanskiy } 67db05815bSMaxim Mikityanskiy 68db05815bSMaxim Mikityanskiy static inline void mlx5e_qid_get_ch_and_group(struct mlx5e_params *params, 69db05815bSMaxim Mikityanskiy u16 qid, 70db05815bSMaxim Mikityanskiy u16 *ix, 71db05815bSMaxim Mikityanskiy enum mlx5e_rq_group *group) 72db05815bSMaxim Mikityanskiy { 73db05815bSMaxim Mikityanskiy u16 nch = params->num_channels; 74db05815bSMaxim Mikityanskiy 75db05815bSMaxim Mikityanskiy *ix = qid % nch; 76db05815bSMaxim Mikityanskiy *group = qid / nch; 77db05815bSMaxim Mikityanskiy } 78db05815bSMaxim Mikityanskiy 79694826e3STariq Toukan static inline bool mlx5e_qid_validate(const struct mlx5e_profile *profile, 80694826e3STariq Toukan struct mlx5e_params *params, u64 qid) 81db05815bSMaxim Mikityanskiy { 82694826e3STariq Toukan return qid < params->num_channels * profile->rq_groups; 83db05815bSMaxim Mikityanskiy } 84db05815bSMaxim Mikityanskiy 8532a23653SMaxim Mikityanskiy /* Parameter calculations */ 8632a23653SMaxim Mikityanskiy 87a011b49fSMaxim Mikityanskiy u16 mlx5e_get_linear_rq_headroom(struct mlx5e_params *params, 88a011b49fSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 89282c0c79SMaxim Mikityanskiy u32 mlx5e_rx_get_min_frag_sz(struct mlx5e_params *params, 90282c0c79SMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 91a069e977SMaxim Mikityanskiy u32 mlx5e_rx_get_linear_frag_sz(struct mlx5e_params *params, 92a069e977SMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 93db05815bSMaxim Mikityanskiy u8 mlx5e_mpwqe_log_pkts_per_wqe(struct mlx5e_params *params, 94db05815bSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 95db05815bSMaxim Mikityanskiy bool mlx5e_rx_is_linear_skb(struct mlx5e_params *params, 96db05815bSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 979a22d5d8SMaxim Mikityanskiy bool mlx5e_rx_mpwqe_is_linear_skb(struct mlx5_core_dev *mdev, 98db05815bSMaxim Mikityanskiy struct mlx5e_params *params, 99db05815bSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 100db05815bSMaxim Mikityanskiy u8 mlx5e_mpwqe_get_log_rq_size(struct mlx5e_params *params, 101db05815bSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 1029a22d5d8SMaxim Mikityanskiy u8 mlx5e_mpwqe_get_log_stride_size(struct mlx5_core_dev *mdev, 103db05815bSMaxim Mikityanskiy struct mlx5e_params *params, 104db05815bSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 1059a22d5d8SMaxim Mikityanskiy u8 mlx5e_mpwqe_get_log_num_strides(struct mlx5_core_dev *mdev, 106db05815bSMaxim Mikityanskiy struct mlx5e_params *params, 107db05815bSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 1089a22d5d8SMaxim Mikityanskiy u16 mlx5e_get_rq_headroom(struct mlx5_core_dev *mdev, 109db05815bSMaxim Mikityanskiy struct mlx5e_params *params, 110db05815bSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 111db05815bSMaxim Mikityanskiy 112db05815bSMaxim Mikityanskiy /* Build queue parameters */ 113db05815bSMaxim Mikityanskiy 114*2f6b379cSMaxim Mikityanskiy void mlx5e_build_create_cq_param(struct mlx5e_create_cq_param *ccp, struct mlx5e_channel *c); 115db05815bSMaxim Mikityanskiy void mlx5e_build_rq_param(struct mlx5e_priv *priv, 116db05815bSMaxim Mikityanskiy struct mlx5e_params *params, 117db05815bSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk, 118db05815bSMaxim Mikityanskiy struct mlx5e_rq_param *param); 119db05815bSMaxim Mikityanskiy void mlx5e_build_sq_param_common(struct mlx5e_priv *priv, 120db05815bSMaxim Mikityanskiy struct mlx5e_sq_param *param); 121db05815bSMaxim Mikityanskiy void mlx5e_build_rx_cq_param(struct mlx5e_priv *priv, 122db05815bSMaxim Mikityanskiy struct mlx5e_params *params, 123db05815bSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk, 124db05815bSMaxim Mikityanskiy struct mlx5e_cq_param *param); 125db05815bSMaxim Mikityanskiy void mlx5e_build_tx_cq_param(struct mlx5e_priv *priv, 126db05815bSMaxim Mikityanskiy struct mlx5e_params *params, 127db05815bSMaxim Mikityanskiy struct mlx5e_cq_param *param); 128db05815bSMaxim Mikityanskiy void mlx5e_build_ico_cq_param(struct mlx5e_priv *priv, 129db05815bSMaxim Mikityanskiy u8 log_wq_size, 130db05815bSMaxim Mikityanskiy struct mlx5e_cq_param *param); 131db05815bSMaxim Mikityanskiy void mlx5e_build_icosq_param(struct mlx5e_priv *priv, 132db05815bSMaxim Mikityanskiy u8 log_wq_size, 133db05815bSMaxim Mikityanskiy struct mlx5e_sq_param *param); 134db05815bSMaxim Mikityanskiy void mlx5e_build_xdpsq_param(struct mlx5e_priv *priv, 135db05815bSMaxim Mikityanskiy struct mlx5e_params *params, 136db05815bSMaxim Mikityanskiy struct mlx5e_sq_param *param); 1379a22d5d8SMaxim Mikityanskiy 138579524c6SVladyslav Tarasiuk u16 mlx5e_calc_sq_stop_room(struct mlx5_core_dev *mdev, struct mlx5e_params *params); 139579524c6SVladyslav Tarasiuk int mlx5e_validate_params(struct mlx5e_priv *priv, struct mlx5e_params *params); 140579524c6SVladyslav Tarasiuk 1419a22d5d8SMaxim Mikityanskiy #endif /* __MLX5_EN_PARAMS_H__ */ 142