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 87*b3a131c2STariq Toukan void mlx5e_reset_tx_moderation(struct mlx5e_params *params, u8 cq_period_mode); 88*b3a131c2STariq Toukan void mlx5e_reset_rx_moderation(struct mlx5e_params *params, u8 cq_period_mode); 89*b3a131c2STariq Toukan void mlx5e_set_tx_cq_mode_params(struct mlx5e_params *params, u8 cq_period_mode); 90*b3a131c2STariq Toukan void mlx5e_set_rx_cq_mode_params(struct mlx5e_params *params, u8 cq_period_mode); 91*b3a131c2STariq Toukan 92*b3a131c2STariq Toukan bool slow_pci_heuristic(struct mlx5_core_dev *mdev); 93*b3a131c2STariq Toukan bool mlx5e_striding_rq_possible(struct mlx5_core_dev *mdev, struct mlx5e_params *params); 94*b3a131c2STariq Toukan void mlx5e_build_rq_params(struct mlx5_core_dev *mdev, struct mlx5e_params *params); 95*b3a131c2STariq Toukan void mlx5e_set_rq_type(struct mlx5_core_dev *mdev, struct mlx5e_params *params); 96*b3a131c2STariq Toukan void mlx5e_init_rq_type_params(struct mlx5_core_dev *mdev, struct mlx5e_params *params); 97*b3a131c2STariq Toukan 98a011b49fSMaxim Mikityanskiy u16 mlx5e_get_linear_rq_headroom(struct mlx5e_params *params, 99a011b49fSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 100282c0c79SMaxim Mikityanskiy u32 mlx5e_rx_get_min_frag_sz(struct mlx5e_params *params, 101282c0c79SMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 102db05815bSMaxim Mikityanskiy u8 mlx5e_mpwqe_log_pkts_per_wqe(struct mlx5e_params *params, 103db05815bSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 104db05815bSMaxim Mikityanskiy bool mlx5e_rx_is_linear_skb(struct mlx5e_params *params, 105db05815bSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 1069a22d5d8SMaxim Mikityanskiy bool mlx5e_rx_mpwqe_is_linear_skb(struct mlx5_core_dev *mdev, 107db05815bSMaxim Mikityanskiy struct mlx5e_params *params, 108db05815bSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 109db05815bSMaxim Mikityanskiy u8 mlx5e_mpwqe_get_log_rq_size(struct mlx5e_params *params, 110db05815bSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 1119a22d5d8SMaxim Mikityanskiy u8 mlx5e_mpwqe_get_log_stride_size(struct mlx5_core_dev *mdev, 112db05815bSMaxim Mikityanskiy struct mlx5e_params *params, 113db05815bSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 1149a22d5d8SMaxim Mikityanskiy u8 mlx5e_mpwqe_get_log_num_strides(struct mlx5_core_dev *mdev, 115db05815bSMaxim Mikityanskiy struct mlx5e_params *params, 116db05815bSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 1179a22d5d8SMaxim Mikityanskiy u16 mlx5e_get_rq_headroom(struct mlx5_core_dev *mdev, 118db05815bSMaxim Mikityanskiy struct mlx5e_params *params, 119db05815bSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk); 120db05815bSMaxim Mikityanskiy 121db05815bSMaxim Mikityanskiy /* Build queue parameters */ 122db05815bSMaxim Mikityanskiy 1232f6b379cSMaxim Mikityanskiy void mlx5e_build_create_cq_param(struct mlx5e_create_cq_param *ccp, struct mlx5e_channel *c); 124db05815bSMaxim Mikityanskiy void mlx5e_build_rq_param(struct mlx5e_priv *priv, 125db05815bSMaxim Mikityanskiy struct mlx5e_params *params, 126db05815bSMaxim Mikityanskiy struct mlx5e_xsk_param *xsk, 1276debae2aSTariq Toukan u16 q_counter, 128db05815bSMaxim Mikityanskiy struct mlx5e_rq_param *param); 129*b3a131c2STariq Toukan void mlx5e_build_drop_rq_param(struct mlx5e_priv *priv, 130*b3a131c2STariq Toukan u16 q_counter, 131*b3a131c2STariq Toukan struct mlx5e_rq_param *param); 132db05815bSMaxim Mikityanskiy void mlx5e_build_sq_param_common(struct mlx5e_priv *priv, 133db05815bSMaxim Mikityanskiy struct mlx5e_sq_param *param); 134214baf22SMaxim Mikityanskiy void mlx5e_build_sq_param(struct mlx5e_priv *priv, struct mlx5e_params *params, 135214baf22SMaxim Mikityanskiy struct mlx5e_sq_param *param); 136db05815bSMaxim Mikityanskiy void mlx5e_build_tx_cq_param(struct mlx5e_priv *priv, 137db05815bSMaxim Mikityanskiy struct mlx5e_params *params, 138db05815bSMaxim Mikityanskiy struct mlx5e_cq_param *param); 139db05815bSMaxim Mikityanskiy void mlx5e_build_xdpsq_param(struct mlx5e_priv *priv, 140db05815bSMaxim Mikityanskiy struct mlx5e_params *params, 141db05815bSMaxim Mikityanskiy struct mlx5e_sq_param *param); 142*b3a131c2STariq Toukan void mlx5e_build_channel_param(struct mlx5e_priv *priv, 143*b3a131c2STariq Toukan struct mlx5e_params *params, 144*b3a131c2STariq Toukan u16 q_counter, 145*b3a131c2STariq Toukan struct mlx5e_channel_param *cparam); 1469a22d5d8SMaxim Mikityanskiy 147579524c6SVladyslav Tarasiuk u16 mlx5e_calc_sq_stop_room(struct mlx5_core_dev *mdev, struct mlx5e_params *params); 148579524c6SVladyslav Tarasiuk int mlx5e_validate_params(struct mlx5e_priv *priv, struct mlx5e_params *params); 149579524c6SVladyslav Tarasiuk 1509a22d5d8SMaxim Mikityanskiy #endif /* __MLX5_EN_PARAMS_H__ */ 151