Lines Matching refs:params

4 #include "en/params.h"
219 u16 mlx5e_get_linear_rq_headroom(struct mlx5e_params *params,
228 if (params->xdp_prog)
236 static u32 mlx5e_rx_get_linear_sz_xsk(struct mlx5e_params *params,
239 u32 hw_mtu = MLX5E_SW2HW_MTU(params, params->sw_mtu);
244 static u32 mlx5e_rx_get_linear_sz_skb(struct mlx5e_params *params, bool no_head_tail_room)
246 u32 hw_mtu = MLX5E_SW2HW_MTU(params, params->sw_mtu);
251 headroom = mlx5e_get_linear_rq_headroom(params, NULL);
257 struct mlx5e_params *params,
270 no_head_tail_room = params->xdp_prog && mpwqe && !mlx5e_rx_is_linear_skb(mdev, params, xsk);
276 sz = roundup_pow_of_two(mlx5e_rx_get_linear_sz_skb(params, no_head_tail_room));
279 * Do not assume sz <= PAGE_SIZE if params->xdp_prog is set.
281 return params->xdp_prog && sz < PAGE_SIZE ? PAGE_SIZE : sz;
285 struct mlx5e_params *params,
288 u32 linear_stride_sz = mlx5e_rx_get_linear_stride_sz(mdev, params, xsk, true);
297 struct mlx5e_params *params,
300 if (params->packet_merge.type != MLX5E_PACKET_MERGE_NONE)
310 if (mlx5e_rx_get_linear_sz_skb(params, xsk) > PAGE_SIZE)
314 if (xsk && mlx5e_rx_get_linear_sz_xsk(params, xsk) > xsk->chunk_size)
343 struct mlx5e_params *params,
346 u8 log_wqe_num_of_strides = mlx5e_mpwqe_get_log_num_strides(mdev, params, xsk);
347 u8 log_wqe_stride_size = mlx5e_mpwqe_get_log_stride_size(mdev, params, xsk);
357 struct mlx5e_params *params,
366 if (!mlx5e_rx_is_linear_skb(mdev, params, xsk))
369 log_stride_sz = order_base_2(mlx5e_rx_get_linear_stride_sz(mdev, params, xsk, true));
383 struct mlx5e_params *params,
389 log_pkts_per_wqe = mlx5e_mpwqe_log_pkts_per_wqe(mdev, params, xsk);
394 if (params->log_rq_mtu_frames <
404 if (WARN_ON_ONCE(params->log_rq_mtu_frames > log_pkts_per_wqe + max_log_rq_size))
407 return params->log_rq_mtu_frames - log_pkts_per_wqe;
411 struct mlx5e_params *params)
417 struct mlx5e_params *params)
423 struct mlx5e_params *params)
425 u32 resrv_size = BIT(mlx5e_shampo_get_log_rsrv_size(mdev, params)) *
428 return order_base_2(DIV_ROUND_UP(resrv_size, params->sw_mtu));
432 struct mlx5e_params *params,
435 if (mlx5e_rx_mpwqe_is_linear_skb(mdev, params, xsk))
436 return order_base_2(mlx5e_rx_get_linear_stride_sz(mdev, params, xsk, true));
439 if (params->xdp_prog)
446 struct mlx5e_params *params,
454 log_stride_size = mlx5e_mpwqe_get_log_stride_size(mdev, params, xsk);
468 struct mlx5e_params *params,
471 u16 linear_headroom = mlx5e_get_linear_rq_headroom(params, xsk);
473 if (params->rq_wq_type == MLX5_WQ_TYPE_CYCLIC)
476 if (mlx5e_rx_mpwqe_is_linear_skb(mdev, params, xsk))
479 if (params->packet_merge.type == MLX5E_PACKET_MERGE_SHAMPO)
485 u16 mlx5e_calc_sq_stop_room(struct mlx5_core_dev *mdev, struct mlx5e_params *params)
487 bool is_mpwqe = MLX5E_GET_PFLAG(params, MLX5E_PFLAG_SKB_TX_MPWQE);
490 stop_room = mlx5e_ktls_get_stop_room(mdev, params);
502 int mlx5e_validate_params(struct mlx5_core_dev *mdev, struct mlx5e_params *params)
504 size_t sq_size = 1 << params->log_sq_size;
507 stop_room = mlx5e_calc_sq_stop_room(mdev, params);
533 int mlx5e_mpwrq_validate_regular(struct mlx5_core_dev *mdev, struct mlx5e_params *params)
544 int mlx5e_mpwrq_validate_xsk(struct mlx5_core_dev *mdev, struct mlx5e_params *params,
557 if (!mlx5e_rx_mpwqe_is_linear_skb(mdev, params, xsk)) {
558 mlx5_core_err(mdev, "Striding RQ linear mode for XSK can't be activated with current params\n");
567 if (params->log_rq_mtu_frames > max_mtu_pkts) {
569 1 << params->log_rq_mtu_frames, xsk->chunk_size);
577 struct mlx5e_params *params)
579 params->log_rq_mtu_frames = is_kdump_kernel() ?
584 void mlx5e_set_rq_type(struct mlx5_core_dev *mdev, struct mlx5e_params *params)
586 params->rq_wq_type = MLX5E_GET_PFLAG(params, MLX5E_PFLAG_RX_STRIDING_RQ) ?
592 struct mlx5e_params *params)
599 * No XSK params: checking the availability of striding RQ in general.
601 if ((!MLX5E_GET_PFLAG(params, MLX5E_PFLAG_RX_CQE_COMPRESS) ||
603 !mlx5e_mpwrq_validate_regular(mdev, params) &&
604 (mlx5e_rx_mpwqe_is_linear_skb(mdev, params, NULL) ||
605 !mlx5e_rx_is_linear_skb(mdev, params, NULL)))
606 MLX5E_SET_PFLAG(params, MLX5E_PFLAG_RX_STRIDING_RQ, true);
607 mlx5e_set_rq_type(mdev, params);
608 mlx5e_init_rq_type_params(mdev, params);
635 static void mlx5e_rx_compute_wqe_bulk_params(struct mlx5e_params *params,
638 u16 bulk_bound_rq_size = (1 << params->log_rq_mtu_frames) / 4;
663 wqe_bulk_in_bytes = min_t(u32, MAX_WQE_BULK_BYTES(params->xdp_prog),
672 split_factor = DIV_ROUND_UP(MAX_WQE_BULK_BYTES(params->xdp_prog),
680 struct mlx5e_params *params,
685 u32 byte_count = MLX5E_SW2HW_MTU(params, params->sw_mtu);
693 if (mlx5e_rx_is_linear_skb(mdev, params, xsk)) {
696 frag_stride = mlx5e_rx_get_linear_stride_sz(mdev, params, xsk, false);
712 headroom = mlx5e_get_linear_rq_headroom(params, xsk);
716 params->xdp_prog);
717 if (byte_count > max_mtu || params->xdp_prog) {
722 params->xdp_prog);
725 params->sw_mtu, max_mtu);
742 if (params->xdp_prog) {
789 mlx5e_rx_compute_wqe_bulk_params(params, info);
796 *xdp_frag_size = info->num_frags > 1 && params->xdp_prog ? PAGE_SIZE : 0;
827 struct mlx5e_params *params,
830 int rsrv_size = BIT(mlx5e_shampo_get_log_rsrv_size(mdev, params)) * PAGE_SIZE;
831 u16 num_strides = BIT(mlx5e_mpwqe_get_log_num_strides(mdev, params, xsk));
832 int pkt_per_rsrv = BIT(mlx5e_shampo_get_log_pkt_per_rsrv(mdev, params));
833 u8 log_stride_sz = mlx5e_mpwqe_get_log_stride_size(mdev, params, xsk);
834 int wq_size = BIT(mlx5e_mpwqe_get_log_rq_size(mdev, params, xsk));
844 struct mlx5e_params *params,
852 switch (params->rq_wq_type) {
855 if (params->packet_merge.type == MLX5E_PACKET_MERGE_SHAMPO)
856 log_cq_size = mlx5e_shampo_get_log_cq_size(mdev, params, xsk);
858 log_cq_size = mlx5e_mpwqe_get_log_rq_size(mdev, params, xsk) +
859 mlx5e_mpwqe_get_log_num_strides(mdev, params, xsk);
862 log_cq_size = params->log_rq_mtu_frames;
866 if (MLX5E_GET_PFLAG(params, MLX5E_PFLAG_RX_CQE_COMPRESS)) {
877 param->cq_period_mode = params->rx_cq_moderation.cq_period_mode;
880 static u8 rq_end_pad_mode(struct mlx5_core_dev *mdev, struct mlx5e_params *params)
882 bool lro_en = params->packet_merge.type == MLX5E_PACKET_MERGE_LRO;
890 struct mlx5e_params *params,
899 switch (params->rq_wq_type) {
901 u8 log_wqe_num_of_strides = mlx5e_mpwqe_get_log_num_strides(mdev, params, xsk);
902 u8 log_wqe_stride_size = mlx5e_mpwqe_get_log_stride_size(mdev, params, xsk);
910 "Bad RX MPWQE params: log_stride_size %u, log_num_strides %u, umr_mode %d\n",
920 MLX5_SET(wq, wq, log_wq_sz, mlx5e_mpwqe_get_log_rq_size(mdev, params, xsk));
921 if (params->packet_merge.type == MLX5E_PACKET_MERGE_SHAMPO) {
924 mlx5e_shampo_get_log_rsrv_size(mdev, params));
927 mlx5e_shampo_get_log_pkt_per_rsrv(mdev, params));
929 mlx5e_shampo_get_log_hd_entry_size(mdev, params));
931 params->packet_merge.timeout);
933 params->packet_merge.shampo.match_criteria_type);
935 params->packet_merge.shampo.alignment_granularity);
940 MLX5_SET(wq, wq, log_wq_sz, params->log_rq_mtu_frames);
941 err = mlx5e_build_rq_frags_info(mdev, params, xsk, &param->frags_info,
948 MLX5_SET(wq, wq, wq_type, params->rq_wq_type);
949 MLX5_SET(wq, wq, end_padding_mode, rq_end_pad_mode(mdev, params));
951 mlx5e_get_rqwq_log_stride(params->rq_wq_type, ndsegs));
953 MLX5_SET(rqc, rqc, vsd, params->vlan_strip_disable);
954 MLX5_SET(rqc, rqc, scatter_fcs, params->scatter_fcs_en);
957 mlx5e_build_rx_cq_param(mdev, params, xsk, &param->cqp);
976 struct mlx5e_params *params,
981 MLX5_SET(cqc, cqc, log_cq_size, params->log_sq_size);
984 param->cq_period_mode = params->tx_cq_moderation.cq_period_mode;
1000 struct mlx5e_params *params,
1010 MLX5_SET(wq, wq, log_wq_sz, params->log_sq_size);
1012 param->is_mpw = MLX5E_GET_PFLAG(params, MLX5E_PFLAG_SKB_TX_MPWQE);
1013 param->stop_room = mlx5e_calc_sq_stop_room(mdev, params);
1014 mlx5e_build_tx_cq_param(mdev, params, &param->cqp);
1036 struct mlx5e_params *params,
1039 int resv_size = BIT(mlx5e_shampo_get_log_rsrv_size(mdev, params)) * PAGE_SIZE;
1040 u16 num_strides = BIT(mlx5e_mpwqe_get_log_num_strides(mdev, params, NULL));
1041 int pkt_per_resv = BIT(mlx5e_shampo_get_log_pkt_per_rsrv(mdev, params));
1042 u8 log_stride_sz = mlx5e_mpwqe_get_log_stride_size(mdev, params, NULL);
1058 struct mlx5e_params *params,
1065 hd_per_wqe = mlx5e_shampo_hd_per_wqe(mdev, params, rq_param);
1071 struct mlx5e_params *params,
1080 max_hd_per_wqe = mlx5e_shampo_hd_per_wqe(mdev, params, rq_param);
1091 struct mlx5e_params *params,
1100 return umr_wqebbs * (1 << mlx5e_mpwqe_get_log_rq_size(mdev, params, xsk));
1104 struct mlx5e_params *params,
1110 if (params->rq_wq_type != MLX5_WQ_TYPE_LINKED_LIST_STRIDING_RQ)
1114 wqebbs = mlx5e_mpwrq_total_umr_wqebbs(mdev, params, NULL);
1126 if (params->xdp_prog) {
1140 mlx5e_mpwrq_total_umr_wqebbs(mdev, params, &xsk));
1145 mlx5e_mpwrq_total_umr_wqebbs(mdev, params, &xsk));
1150 mlx5e_mpwrq_total_umr_wqebbs(mdev, params, &xsk));
1155 mlx5e_mpwrq_total_umr_wqebbs(mdev, params, &xsk));
1161 if (params->packet_merge.type == MLX5E_PACKET_MERGE_SHAMPO)
1162 wqebbs += mlx5e_shampo_icosq_sz(mdev, params, rqp);
1219 struct mlx5e_params *params,
1227 MLX5_SET(wq, wq, log_wq_sz, params->log_sq_size);
1228 param->is_mpw = MLX5E_GET_PFLAG(params, MLX5E_PFLAG_XDP_TX_MPWQE);
1229 param->is_xdp_mb = !mlx5e_rx_is_linear_skb(mdev, params, xsk);
1230 mlx5e_build_tx_cq_param(mdev, params, &param->cqp);
1234 struct mlx5e_params *params,
1240 err = mlx5e_build_rq_param(mdev, params, NULL, &cparam->rq);
1244 icosq_log_wq_sz = mlx5e_build_icosq_log_wq_sz(mdev, params, &cparam->rq);
1247 mlx5e_build_sq_param(mdev, params, &cparam->txq_sq);
1248 mlx5e_build_xdpsq_param(mdev, params, NULL, &cparam->xdp_sq);