Lines Matching refs:priv

73 mlx5e_ethtool_sync_tx_completion_fact(struct mlx5e_priv *priv)  in mlx5e_ethtool_sync_tx_completion_fact()  argument
84 uint64_t max = priv->params_ethtool.tx_queue_size / in mlx5e_ethtool_sync_tx_completion_fact()
96 priv->params_ethtool.tx_completion_fact_max = max; in mlx5e_ethtool_sync_tx_completion_fact()
102 if (priv->params_ethtool.tx_completion_fact < 1) in mlx5e_ethtool_sync_tx_completion_fact()
103 priv->params_ethtool.tx_completion_fact = 1; in mlx5e_ethtool_sync_tx_completion_fact()
104 else if (priv->params_ethtool.tx_completion_fact > max) in mlx5e_ethtool_sync_tx_completion_fact()
105 priv->params_ethtool.tx_completion_fact = max; in mlx5e_ethtool_sync_tx_completion_fact()
109 mlx5e_getmaxrate(struct mlx5e_priv *priv) in mlx5e_getmaxrate() argument
111 struct mlx5_core_dev *mdev = priv->mdev; in mlx5e_getmaxrate()
117 PRIV_LOCK(priv); in mlx5e_getmaxrate()
125 priv->params_ethtool.max_bw_value[i] = max_bw_value[i] * MLX5E_100MB; in mlx5e_getmaxrate()
128 priv->params_ethtool.max_bw_value[i] = max_bw_value[i] * MLX5E_1GB; in mlx5e_getmaxrate()
131 priv->params_ethtool.max_bw_value[i] = 0; in mlx5e_getmaxrate()
134 priv->params_ethtool.max_bw_value[i] = -1; in mlx5e_getmaxrate()
140 PRIV_UNLOCK(priv); in mlx5e_getmaxrate()
145 mlx5e_get_max_alloc(struct mlx5e_priv *priv) in mlx5e_get_max_alloc() argument
147 struct mlx5_core_dev *mdev = priv->mdev; in mlx5e_get_max_alloc()
151 PRIV_LOCK(priv); in mlx5e_get_max_alloc()
152 err = -mlx5_query_port_tc_bw_alloc(mdev, priv->params_ethtool.max_bw_share); in mlx5e_get_max_alloc()
156 priv->params_ethtool.max_bw_share[x] = in mlx5e_get_max_alloc()
160 priv->params_ethtool.max_bw_share); in mlx5e_get_max_alloc()
162 PRIV_UNLOCK(priv); in mlx5e_get_max_alloc()
168 mlx5e_get_dscp(struct mlx5e_priv *priv) in mlx5e_get_dscp() argument
170 struct mlx5_core_dev *mdev = priv->mdev; in mlx5e_get_dscp()
178 PRIV_LOCK(priv); in mlx5e_get_dscp()
179 err = -mlx5_query_dscp2prio(mdev, priv->params_ethtool.dscp2prio); in mlx5e_get_dscp()
183 err = -mlx5_query_trust_state(mdev, &priv->params_ethtool.trust_state); in mlx5e_get_dscp()
187 PRIV_UNLOCK(priv); in mlx5e_get_dscp()
192 mlx5e_tc_get_parameters(struct mlx5e_priv *priv, in mlx5e_tc_get_parameters() argument
203 for (i = 0; i <= mlx5_max_tc(priv->mdev); i++) { in mlx5e_tc_get_parameters()
205 new_bw_value[i] : priv->params_ethtool.max_bw_value[i]; in mlx5e_tc_get_parameters()
224 struct mlx5e_priv *priv = arg1; in mlx5e_tc_maxrate_handler() local
225 struct mlx5_core_dev *mdev = priv->mdev; in mlx5e_tc_maxrate_handler()
233 PRIV_LOCK(priv); in mlx5e_tc_maxrate_handler()
234 err = SYSCTL_OUT(req, priv->params_ethtool.max_bw_value, in mlx5e_tc_maxrate_handler()
235 sizeof(priv->params_ethtool.max_bw_value[0]) * max_rates); in mlx5e_tc_maxrate_handler()
251 mlx5e_tc_get_parameters(priv, new_bw_value, max_bw_value, max_bw_unit); in mlx5e_tc_maxrate_handler()
257 memcpy(priv->params_ethtool.max_bw_value, new_bw_value, in mlx5e_tc_maxrate_handler()
258 sizeof(priv->params_ethtool.max_bw_value)); in mlx5e_tc_maxrate_handler()
260 PRIV_UNLOCK(priv); in mlx5e_tc_maxrate_handler()
267 struct mlx5e_priv *priv = arg1; in mlx5e_tc_rate_share_handler() local
268 struct mlx5_core_dev *mdev = priv->mdev; in mlx5e_tc_rate_share_handler()
275 PRIV_LOCK(priv); in mlx5e_tc_rate_share_handler()
276 err = SYSCTL_OUT(req, priv->params_ethtool.max_bw_share, max_rates); in mlx5e_tc_rate_share_handler()
302 memcpy(priv->params_ethtool.max_bw_share, max_bw_share, in mlx5e_tc_rate_share_handler()
303 sizeof(priv->params_ethtool.max_bw_share)); in mlx5e_tc_rate_share_handler()
305 PRIV_UNLOCK(priv); in mlx5e_tc_rate_share_handler()
310 mlx5e_get_prio_tc(struct mlx5e_priv *priv) in mlx5e_get_prio_tc() argument
312 struct mlx5_core_dev *mdev = priv->mdev; in mlx5e_get_prio_tc()
316 PRIV_LOCK(priv); in mlx5e_get_prio_tc()
317 if (!MLX5_CAP_GEN(priv->mdev, ets)) { in mlx5e_get_prio_tc()
318 PRIV_UNLOCK(priv); in mlx5e_get_prio_tc()
323 err = -mlx5_query_port_prio_tc(mdev, i, priv->params_ethtool.prio_tc + i); in mlx5e_get_prio_tc()
327 PRIV_UNLOCK(priv); in mlx5e_get_prio_tc()
334 struct mlx5e_priv *priv = arg1; in mlx5e_prio_to_tc_handler() local
335 struct mlx5_core_dev *mdev = priv->mdev; in mlx5e_prio_to_tc_handler()
340 PRIV_LOCK(priv); in mlx5e_prio_to_tc_handler()
341 err = SYSCTL_OUT(req, priv->params_ethtool.prio_tc, MLX5E_MAX_PRIORITY); in mlx5e_prio_to_tc_handler()
356 if (temp[i] == priv->params_ethtool.prio_tc[i]) in mlx5e_prio_to_tc_handler()
362 priv->params_ethtool.prio_tc[i] = temp[i]; in mlx5e_prio_to_tc_handler()
365 PRIV_UNLOCK(priv); in mlx5e_prio_to_tc_handler()
370 mlx5e_fec_update(struct mlx5e_priv *priv) in mlx5e_fec_update() argument
372 struct mlx5_core_dev *mdev = priv->mdev; in mlx5e_fec_update()
390 priv->params_ethtool.fec_mask_10x_25x[0] = in mlx5e_fec_update()
392 priv->params_ethtool.fec_mask_10x_25x[1] = in mlx5e_fec_update()
395 priv->params_ethtool.fec_mask_10x_25x[2] = in mlx5e_fec_update()
397 priv->params_ethtool.fec_mask_10x_25x[3] = in mlx5e_fec_update()
401 priv->params_ethtool.fec_avail_10x_25x[0] = in mlx5e_fec_update()
403 priv->params_ethtool.fec_avail_10x_25x[1] = in mlx5e_fec_update()
406 priv->params_ethtool.fec_avail_10x_25x[2] = in mlx5e_fec_update()
408 priv->params_ethtool.fec_avail_10x_25x[3] = in mlx5e_fec_update()
412 priv->params_ethtool.fec_mask_50x[0] = in mlx5e_fec_update()
414 priv->params_ethtool.fec_mask_50x[1] = in mlx5e_fec_update()
416 priv->params_ethtool.fec_mask_50x[2] = in mlx5e_fec_update()
418 priv->params_ethtool.fec_mask_50x[3] = in mlx5e_fec_update()
422 priv->params_ethtool.fec_avail_50x[0] = in mlx5e_fec_update()
424 priv->params_ethtool.fec_avail_50x[1] = in mlx5e_fec_update()
426 priv->params_ethtool.fec_avail_50x[2] = in mlx5e_fec_update()
428 priv->params_ethtool.fec_avail_50x[3] = in mlx5e_fec_update()
432 priv->params_ethtool.fec_mode_active = in mlx5e_fec_update()
441 struct mlx5e_priv *priv = arg1; in mlx5e_fec_mask_10x_25x_handler() local
442 struct mlx5_core_dev *mdev = priv->mdev; in mlx5e_fec_mask_10x_25x_handler()
451 PRIV_LOCK(priv); in mlx5e_fec_mask_10x_25x_handler()
452 err = SYSCTL_OUT(req, priv->params_ethtool.fec_mask_10x_25x, in mlx5e_fec_mask_10x_25x_handler()
453 sizeof(priv->params_ethtool.fec_mask_10x_25x)); in mlx5e_fec_mask_10x_25x_handler()
487 ~priv->params_ethtool.fec_avail_10x_25x[x]) { in mlx5e_fec_mask_10x_25x_handler()
492 priv->params_ethtool.fec_mask_10x_25x[x]); in mlx5e_fec_mask_10x_25x_handler()
511 MLX5_SET(pplm_reg, in, fec_override_admin_50g_1x, priv->params_ethtool.fec_mask_50x[0]); in mlx5e_fec_mask_10x_25x_handler()
512 MLX5_SET(pplm_reg, in, fec_override_admin_100g_2x, priv->params_ethtool.fec_mask_50x[1]); in mlx5e_fec_mask_10x_25x_handler()
513 MLX5_SET(pplm_reg, in, fec_override_admin_200g_4x, priv->params_ethtool.fec_mask_50x[2]); in mlx5e_fec_mask_10x_25x_handler()
514 MLX5_SET(pplm_reg, in, fec_override_admin_400g_8x, priv->params_ethtool.fec_mask_50x[3]); in mlx5e_fec_mask_10x_25x_handler()
521 memcpy(priv->params_ethtool.fec_mask_10x_25x, fec_mask_10x_25x, in mlx5e_fec_mask_10x_25x_handler()
522 sizeof(priv->params_ethtool.fec_mask_10x_25x)); in mlx5e_fec_mask_10x_25x_handler()
524 mlx5_toggle_port_link(priv->mdev); in mlx5e_fec_mask_10x_25x_handler()
526 PRIV_UNLOCK(priv); in mlx5e_fec_mask_10x_25x_handler()
533 struct mlx5e_priv *priv = arg1; in mlx5e_fec_avail_10x_25x_handler() local
536 PRIV_LOCK(priv); in mlx5e_fec_avail_10x_25x_handler()
537 err = SYSCTL_OUT(req, priv->params_ethtool.fec_avail_10x_25x, in mlx5e_fec_avail_10x_25x_handler()
538 sizeof(priv->params_ethtool.fec_avail_10x_25x)); in mlx5e_fec_avail_10x_25x_handler()
539 PRIV_UNLOCK(priv); in mlx5e_fec_avail_10x_25x_handler()
546 struct mlx5e_priv *priv = arg1; in mlx5e_fec_mask_50x_handler() local
547 struct mlx5_core_dev *mdev = priv->mdev; in mlx5e_fec_mask_50x_handler()
556 PRIV_LOCK(priv); in mlx5e_fec_mask_50x_handler()
557 err = SYSCTL_OUT(req, priv->params_ethtool.fec_mask_50x, in mlx5e_fec_mask_50x_handler()
558 sizeof(priv->params_ethtool.fec_mask_50x)); in mlx5e_fec_mask_50x_handler()
592 ~priv->params_ethtool.fec_avail_50x[x]) { in mlx5e_fec_mask_50x_handler()
597 priv->params_ethtool.fec_mask_50x[x]); in mlx5e_fec_mask_50x_handler()
615 MLX5_SET(pplm_reg, in, fec_override_admin_10g_40g, priv->params_ethtool.fec_mask_10x_25x[0]); in mlx5e_fec_mask_50x_handler()
616 MLX5_SET(pplm_reg, in, fec_override_admin_25g, priv->params_ethtool.fec_mask_10x_25x[1]); in mlx5e_fec_mask_50x_handler()
617 MLX5_SET(pplm_reg, in, fec_override_admin_50g, priv->params_ethtool.fec_mask_10x_25x[1]); in mlx5e_fec_mask_50x_handler()
618 MLX5_SET(pplm_reg, in, fec_override_admin_56g, priv->params_ethtool.fec_mask_10x_25x[2]); in mlx5e_fec_mask_50x_handler()
619 MLX5_SET(pplm_reg, in, fec_override_admin_100g, priv->params_ethtool.fec_mask_10x_25x[3]); in mlx5e_fec_mask_50x_handler()
626 memcpy(priv->params_ethtool.fec_mask_50x, fec_mask_50x, in mlx5e_fec_mask_50x_handler()
627 sizeof(priv->params_ethtool.fec_mask_50x)); in mlx5e_fec_mask_50x_handler()
629 mlx5_toggle_port_link(priv->mdev); in mlx5e_fec_mask_50x_handler()
631 PRIV_UNLOCK(priv); in mlx5e_fec_mask_50x_handler()
638 struct mlx5e_priv *priv = arg1; in mlx5e_fec_avail_50x_handler() local
641 PRIV_LOCK(priv); in mlx5e_fec_avail_50x_handler()
642 err = SYSCTL_OUT(req, priv->params_ethtool.fec_avail_50x, in mlx5e_fec_avail_50x_handler()
643 sizeof(priv->params_ethtool.fec_avail_50x)); in mlx5e_fec_avail_50x_handler()
644 PRIV_UNLOCK(priv); in mlx5e_fec_avail_50x_handler()
651 struct mlx5e_priv *priv = arg1; in mlx5e_trust_state_handler() local
652 struct mlx5_core_dev *mdev = priv->mdev; in mlx5e_trust_state_handler()
656 PRIV_LOCK(priv); in mlx5e_trust_state_handler()
657 result = priv->params_ethtool.trust_state; in mlx5e_trust_state_handler()
660 result == priv->params_ethtool.trust_state) in mlx5e_trust_state_handler()
682 priv->params_ethtool.trust_state = result; in mlx5e_trust_state_handler()
685 mlx5e_refresh_sq_inline(priv); in mlx5e_trust_state_handler()
687 mlx5e_rl_refresh_sq_inline(&priv->rl); in mlx5e_trust_state_handler()
690 PRIV_UNLOCK(priv); in mlx5e_trust_state_handler()
697 struct mlx5e_priv *priv = arg1; in mlx5e_dscp_prio_handler() local
699 struct mlx5_core_dev *mdev = priv->mdev; in mlx5e_dscp_prio_handler()
704 PRIV_LOCK(priv); in mlx5e_dscp_prio_handler()
705 err = SYSCTL_OUT(req, priv->params_ethtool.dscp2prio + prio_index, in mlx5e_dscp_prio_handler()
706 sizeof(priv->params_ethtool.dscp2prio) / 8); in mlx5e_dscp_prio_handler()
710 memcpy(dscp2prio, priv->params_ethtool.dscp2prio, sizeof(dscp2prio)); in mlx5e_dscp_prio_handler()
725 memcpy(priv->params_ethtool.dscp2prio, dscp2prio, in mlx5e_dscp_prio_handler()
726 sizeof(priv->params_ethtool.dscp2prio)); in mlx5e_dscp_prio_handler()
728 PRIV_UNLOCK(priv); in mlx5e_dscp_prio_handler()
733 mlx5e_update_buf_lossy(struct mlx5e_priv *priv) in mlx5e_update_buf_lossy() argument
737 PRIV_ASSERT_LOCKED(priv); in mlx5e_update_buf_lossy()
739 pfc.pfc_en = priv->params.rx_priority_flow_control; in mlx5e_update_buf_lossy()
740 return (-mlx5e_port_manual_buffer_config(priv, MLX5E_PORT_BUFFER_PFC, in mlx5e_update_buf_lossy()
741 priv->params_ethtool.hw_mtu, &pfc, NULL, NULL)); in mlx5e_update_buf_lossy()
747 struct mlx5e_priv *priv; in mlx5e_buf_size_handler() local
752 priv = arg1; in mlx5e_buf_size_handler()
753 PRIV_LOCK(priv); in mlx5e_buf_size_handler()
754 error = -mlx5e_port_query_buffer(priv, &port_buffer); in mlx5e_buf_size_handler()
765 error = -mlx5e_port_manual_buffer_config(priv, MLX5E_PORT_BUFFER_SIZE, in mlx5e_buf_size_handler()
766 priv->params_ethtool.hw_mtu, NULL, buf_size, NULL); in mlx5e_buf_size_handler()
768 PRIV_UNLOCK(priv); in mlx5e_buf_size_handler()
775 struct mlx5e_priv *priv; in mlx5e_buf_prio_handler() local
780 priv = arg1; in mlx5e_buf_prio_handler()
781 mdev = priv->mdev; in mlx5e_buf_prio_handler()
782 PRIV_LOCK(priv); in mlx5e_buf_prio_handler()
792 error = -mlx5e_port_manual_buffer_config(priv, in mlx5e_buf_prio_handler()
794 priv->params_ethtool.hw_mtu, NULL, NULL, buffer); in mlx5e_buf_prio_handler()
796 error = mlx5e_update_buf_lossy(priv); in mlx5e_buf_prio_handler()
798 PRIV_UNLOCK(priv); in mlx5e_buf_prio_handler()
805 struct mlx5e_priv *priv; in mlx5e_cable_length_handler() local
809 priv = arg1; in mlx5e_cable_length_handler()
810 PRIV_LOCK(priv); in mlx5e_cable_length_handler()
811 cable_len = priv->dcbx.cable_len; in mlx5e_cable_length_handler()
814 cable_len != priv->dcbx.cable_len) { in mlx5e_cable_length_handler()
815 error = -mlx5e_port_manual_buffer_config(priv, in mlx5e_cable_length_handler()
816 MLX5E_PORT_BUFFER_CABLE_LEN, priv->params_ethtool.hw_mtu, in mlx5e_cable_length_handler()
819 priv->dcbx.cable_len = cable_len; in mlx5e_cable_length_handler()
821 PRIV_UNLOCK(priv); in mlx5e_cable_length_handler()
828 struct mlx5e_priv *priv = arg1; in mlx5e_hw_temperature_handler() local
831 PRIV_LOCK(priv); in mlx5e_hw_temperature_handler()
832 err = SYSCTL_OUT(req, priv->params_ethtool.hw_val_temp, in mlx5e_hw_temperature_handler()
833 sizeof(priv->params_ethtool.hw_val_temp[0]) * in mlx5e_hw_temperature_handler()
834 priv->params_ethtool.hw_num_temp); in mlx5e_hw_temperature_handler()
837 PRIV_UNLOCK(priv); in mlx5e_hw_temperature_handler()
842 mlx5e_hw_temperature_update(struct mlx5e_priv *priv) in mlx5e_hw_temperature_update() argument
847 if (priv->params_ethtool.hw_num_temp == 0) { in mlx5e_hw_temperature_update()
852 err = -mlx5_core_access_reg(priv->mdev, NULL, 0, out_cap, sz_cap, in mlx5e_hw_temperature_update()
862 priv->params_ethtool.hw_num_temp = value; in mlx5e_hw_temperature_update()
865 for (x = 0; x != priv->params_ethtool.hw_num_temp; x++) { in mlx5e_hw_temperature_update()
871 err = -mlx5_core_access_reg(priv->mdev, out_sensor, sz_sensor, in mlx5e_hw_temperature_update()
877 priv->params_ethtool.hw_val_temp[x] = in mlx5e_hw_temperature_update()
890 struct mlx5e_priv *priv = arg1; in mlx5e_ethtool_handler() local
896 PRIV_LOCK(priv); in mlx5e_ethtool_handler()
897 value = priv->params_ethtool.arg[arg2]; in mlx5e_ethtool_handler()
901 value == priv->params_ethtool.arg[arg2]) in mlx5e_ethtool_handler()
905 priv->params_ethtool.arg[arg2] = value; in mlx5e_ethtool_handler()
910 if (priv->gone) { in mlx5e_ethtool_handler()
914 was_opened = test_bit(MLX5E_STATE_OPENED, &priv->state); in mlx5e_ethtool_handler()
915 mode_modify = MLX5_CAP_GEN(priv->mdev, cq_period_mode_modify); in mlx5e_ethtool_handler()
920 if (priv->params_ethtool.rx_coalesce_usecs < 1) in mlx5e_ethtool_handler()
921 priv->params_ethtool.rx_coalesce_usecs = 0; in mlx5e_ethtool_handler()
922 else if (priv->params_ethtool.rx_coalesce_usecs > in mlx5e_ethtool_handler()
924 priv->params_ethtool.rx_coalesce_usecs = in mlx5e_ethtool_handler()
927 priv->params.rx_cq_moderation_usec = in mlx5e_ethtool_handler()
928 priv->params_ethtool.rx_coalesce_usecs; in mlx5e_ethtool_handler()
932 error = mlx5e_refresh_channel_params(priv); in mlx5e_ethtool_handler()
937 if (priv->params_ethtool.rx_coalesce_pkts < 1) in mlx5e_ethtool_handler()
938 priv->params_ethtool.rx_coalesce_pkts = 0; in mlx5e_ethtool_handler()
939 else if (priv->params_ethtool.rx_coalesce_pkts > in mlx5e_ethtool_handler()
941 priv->params_ethtool.rx_coalesce_pkts = in mlx5e_ethtool_handler()
944 priv->params.rx_cq_moderation_pkts = in mlx5e_ethtool_handler()
945 priv->params_ethtool.rx_coalesce_pkts; in mlx5e_ethtool_handler()
949 error = mlx5e_refresh_channel_params(priv); in mlx5e_ethtool_handler()
954 if (priv->params_ethtool.tx_coalesce_usecs < 1) in mlx5e_ethtool_handler()
955 priv->params_ethtool.tx_coalesce_usecs = 0; in mlx5e_ethtool_handler()
956 else if (priv->params_ethtool.tx_coalesce_usecs > in mlx5e_ethtool_handler()
958 priv->params_ethtool.tx_coalesce_usecs = in mlx5e_ethtool_handler()
961 priv->params.tx_cq_moderation_usec = in mlx5e_ethtool_handler()
962 priv->params_ethtool.tx_coalesce_usecs; in mlx5e_ethtool_handler()
966 error = mlx5e_refresh_channel_params(priv); in mlx5e_ethtool_handler()
971 if (priv->params_ethtool.tx_coalesce_pkts < 1) in mlx5e_ethtool_handler()
972 priv->params_ethtool.tx_coalesce_pkts = 0; in mlx5e_ethtool_handler()
973 else if (priv->params_ethtool.tx_coalesce_pkts > in mlx5e_ethtool_handler()
975 priv->params_ethtool.tx_coalesce_pkts = in mlx5e_ethtool_handler()
978 priv->params.tx_cq_moderation_pkts = in mlx5e_ethtool_handler()
979 priv->params_ethtool.tx_coalesce_pkts; in mlx5e_ethtool_handler()
983 error = mlx5e_refresh_channel_params(priv); in mlx5e_ethtool_handler()
989 mlx5e_close_locked(priv->ifp); in mlx5e_ethtool_handler()
992 if (priv->params_ethtool.tx_queue_size < in mlx5e_ethtool_handler()
994 priv->params_ethtool.tx_queue_size = in mlx5e_ethtool_handler()
996 } else if (priv->params_ethtool.tx_queue_size > in mlx5e_ethtool_handler()
997 priv->params_ethtool.tx_queue_size_max) { in mlx5e_ethtool_handler()
998 priv->params_ethtool.tx_queue_size = in mlx5e_ethtool_handler()
999 priv->params_ethtool.tx_queue_size_max; in mlx5e_ethtool_handler()
1002 priv->params.log_sq_size = in mlx5e_ethtool_handler()
1003 order_base_2(priv->params_ethtool.tx_queue_size); in mlx5e_ethtool_handler()
1004 priv->params_ethtool.tx_queue_size = in mlx5e_ethtool_handler()
1005 1 << priv->params.log_sq_size; in mlx5e_ethtool_handler()
1008 mlx5e_ethtool_sync_tx_completion_fact(priv); in mlx5e_ethtool_handler()
1012 mlx5e_open_locked(priv->ifp); in mlx5e_ethtool_handler()
1018 mlx5e_close_locked(priv->ifp); in mlx5e_ethtool_handler()
1021 if (priv->params_ethtool.rx_queue_size < in mlx5e_ethtool_handler()
1023 priv->params_ethtool.rx_queue_size = in mlx5e_ethtool_handler()
1025 } else if (priv->params_ethtool.rx_queue_size > in mlx5e_ethtool_handler()
1026 priv->params_ethtool.rx_queue_size_max) { in mlx5e_ethtool_handler()
1027 priv->params_ethtool.rx_queue_size = in mlx5e_ethtool_handler()
1028 priv->params_ethtool.rx_queue_size_max; in mlx5e_ethtool_handler()
1031 priv->params.log_rq_size = in mlx5e_ethtool_handler()
1032 order_base_2(priv->params_ethtool.rx_queue_size); in mlx5e_ethtool_handler()
1033 priv->params_ethtool.rx_queue_size = in mlx5e_ethtool_handler()
1034 1 << priv->params.log_rq_size; in mlx5e_ethtool_handler()
1038 mlx5e_open_locked(priv->ifp); in mlx5e_ethtool_handler()
1044 mlx5e_close_locked(priv->ifp); in mlx5e_ethtool_handler()
1047 if (priv->params_ethtool.channels_rsss < 1) in mlx5e_ethtool_handler()
1048 priv->params_ethtool.channels_rsss = 1; in mlx5e_ethtool_handler()
1049 else if (priv->params_ethtool.channels_rsss > 128) in mlx5e_ethtool_handler()
1050 priv->params_ethtool.channels_rsss = 128; in mlx5e_ethtool_handler()
1052 priv->params.channels_rsss = priv->params_ethtool.channels_rsss; in mlx5e_ethtool_handler()
1056 mlx5e_open_locked(priv->ifp); in mlx5e_ethtool_handler()
1062 mlx5e_close_locked(priv->ifp); in mlx5e_ethtool_handler()
1065 if (priv->params_ethtool.channels < 1) in mlx5e_ethtool_handler()
1066 priv->params_ethtool.channels = 1; in mlx5e_ethtool_handler()
1067 else if (priv->params_ethtool.channels > in mlx5e_ethtool_handler()
1068 (u64) priv->mdev->priv.eq_table.num_comp_vectors) { in mlx5e_ethtool_handler()
1069 priv->params_ethtool.channels = in mlx5e_ethtool_handler()
1070 (u64) priv->mdev->priv.eq_table.num_comp_vectors; in mlx5e_ethtool_handler()
1072 priv->params.num_channels = priv->params_ethtool.channels; in mlx5e_ethtool_handler()
1076 mlx5e_open_locked(priv->ifp); in mlx5e_ethtool_handler()
1082 mlx5e_close_locked(priv->ifp); in mlx5e_ethtool_handler()
1085 if (priv->params_ethtool.rx_coalesce_mode > 3) in mlx5e_ethtool_handler()
1086 priv->params_ethtool.rx_coalesce_mode = 3; in mlx5e_ethtool_handler()
1087 priv->params.rx_cq_moderation_mode = in mlx5e_ethtool_handler()
1088 priv->params_ethtool.rx_coalesce_mode; in mlx5e_ethtool_handler()
1093 mlx5e_open_locked(priv->ifp); in mlx5e_ethtool_handler()
1095 error = mlx5e_refresh_channel_params(priv); in mlx5e_ethtool_handler()
1102 mlx5e_close_locked(priv->ifp); in mlx5e_ethtool_handler()
1105 if (priv->params_ethtool.tx_coalesce_mode != 0) in mlx5e_ethtool_handler()
1106 priv->params_ethtool.tx_coalesce_mode = 1; in mlx5e_ethtool_handler()
1107 priv->params.tx_cq_moderation_mode = in mlx5e_ethtool_handler()
1108 priv->params_ethtool.tx_coalesce_mode; in mlx5e_ethtool_handler()
1113 mlx5e_open_locked(priv->ifp); in mlx5e_ethtool_handler()
1115 error = mlx5e_refresh_channel_params(priv); in mlx5e_ethtool_handler()
1122 mlx5e_close_locked(priv->ifp); in mlx5e_ethtool_handler()
1125 if (priv->params_ethtool.hw_lro != 0 && in mlx5e_ethtool_handler()
1126 MLX5_CAP_ETH(priv->mdev, lro_cap)) { in mlx5e_ethtool_handler()
1127 priv->params.hw_lro_en = true; in mlx5e_ethtool_handler()
1128 priv->params_ethtool.hw_lro = 1; in mlx5e_ethtool_handler()
1131 if (priv->params_ethtool.hw_lro != 0) in mlx5e_ethtool_handler()
1133 priv->params.hw_lro_en = false; in mlx5e_ethtool_handler()
1134 priv->params_ethtool.hw_lro = 0; in mlx5e_ethtool_handler()
1137 error = mlx5e_hw_lro_update_tirs(priv); in mlx5e_ethtool_handler()
1144 mlx5e_open_locked(priv->ifp); in mlx5e_ethtool_handler()
1150 mlx5e_close_locked(priv->ifp); in mlx5e_ethtool_handler()
1153 if (priv->params_ethtool.cqe_zipping && in mlx5e_ethtool_handler()
1154 MLX5_CAP_GEN(priv->mdev, cqe_compression)) { in mlx5e_ethtool_handler()
1155 priv->params.cqe_zipping_en = true; in mlx5e_ethtool_handler()
1156 priv->params_ethtool.cqe_zipping = 1; in mlx5e_ethtool_handler()
1158 priv->params.cqe_zipping_en = false; in mlx5e_ethtool_handler()
1159 priv->params_ethtool.cqe_zipping = 0; in mlx5e_ethtool_handler()
1163 mlx5e_open_locked(priv->ifp); in mlx5e_ethtool_handler()
1169 mlx5e_close_locked(priv->ifp); in mlx5e_ethtool_handler()
1172 mlx5e_ethtool_sync_tx_completion_fact(priv); in mlx5e_ethtool_handler()
1176 mlx5e_open_locked(priv->ifp); in mlx5e_ethtool_handler()
1182 priv->params_ethtool.modify_tx_dma = in mlx5e_ethtool_handler()
1183 priv->params_ethtool.modify_tx_dma ? 1 : 0; in mlx5e_ethtool_handler()
1185 mlx5e_modify_tx_dma(priv, value != 0); in mlx5e_ethtool_handler()
1188 priv->params_ethtool.modify_tx_dma = 0; in mlx5e_ethtool_handler()
1195 priv->params_ethtool.modify_rx_dma = in mlx5e_ethtool_handler()
1196 priv->params_ethtool.modify_rx_dma ? 1 : 0; in mlx5e_ethtool_handler()
1198 mlx5e_modify_rx_dma(priv, value != 0); in mlx5e_ethtool_handler()
1201 priv->params_ethtool.modify_rx_dma = 0; in mlx5e_ethtool_handler()
1206 priv->params_ethtool.diag_pci_enable = in mlx5e_ethtool_handler()
1207 priv->params_ethtool.diag_pci_enable ? 1 : 0; in mlx5e_ethtool_handler()
1209 error = -mlx5_core_set_diagnostics_full(priv->mdev, in mlx5e_ethtool_handler()
1210 priv->params_ethtool.diag_pci_enable, in mlx5e_ethtool_handler()
1211 priv->params_ethtool.diag_general_enable); in mlx5e_ethtool_handler()
1215 priv->params_ethtool.diag_general_enable = in mlx5e_ethtool_handler()
1216 priv->params_ethtool.diag_general_enable ? 1 : 0; in mlx5e_ethtool_handler()
1218 error = -mlx5_core_set_diagnostics_full(priv->mdev, in mlx5e_ethtool_handler()
1219 priv->params_ethtool.diag_pci_enable, in mlx5e_ethtool_handler()
1220 priv->params_ethtool.diag_general_enable); in mlx5e_ethtool_handler()
1225 if (MLX5_CAP_GEN(priv->mdev, port_type) != MLX5_CAP_PORT_TYPE_ETH) { in mlx5e_ethtool_handler()
1230 priv->params_ethtool.mc_local_lb = in mlx5e_ethtool_handler()
1231 priv->params_ethtool.mc_local_lb ? 1 : 0; in mlx5e_ethtool_handler()
1233 if (MLX5_CAP_GEN(priv->mdev, disable_local_lb_mc)) { in mlx5e_ethtool_handler()
1234 error = mlx5_nic_vport_modify_local_lb(priv->mdev, in mlx5e_ethtool_handler()
1235 MLX5_LOCAL_MC_LB, priv->params_ethtool.mc_local_lb); in mlx5e_ethtool_handler()
1243 if (MLX5_CAP_GEN(priv->mdev, port_type) != MLX5_CAP_PORT_TYPE_ETH) { in mlx5e_ethtool_handler()
1248 priv->params_ethtool.uc_local_lb = in mlx5e_ethtool_handler()
1249 priv->params_ethtool.uc_local_lb ? 1 : 0; in mlx5e_ethtool_handler()
1251 if (MLX5_CAP_GEN(priv->mdev, disable_local_lb_uc)) { in mlx5e_ethtool_handler()
1252 error = mlx5_nic_vport_modify_local_lb(priv->mdev, in mlx5e_ethtool_handler()
1253 MLX5_LOCAL_UC_LB, priv->params_ethtool.uc_local_lb); in mlx5e_ethtool_handler()
1263 mlx5e_close_locked(priv->ifp); in mlx5e_ethtool_handler()
1264 mlx5e_open_locked(priv->ifp); in mlx5e_ethtool_handler()
1272 PRIV_UNLOCK(priv); in mlx5e_ethtool_handler()
1287 struct mlx5e_priv *priv; in mlx5e_ethtool_debug_channel_info() local
1295 priv = arg1; in mlx5e_ethtool_debug_channel_info()
1303 PRIV_LOCK(priv); in mlx5e_ethtool_debug_channel_info()
1304 opened = test_bit(MLX5E_STATE_OPENED, &priv->state); in mlx5e_ethtool_debug_channel_info()
1307 priv->mdev->priv.msix_arr[MLX5_EQ_VEC_PAGES].vector); in mlx5e_ethtool_debug_channel_info()
1309 priv->mdev->priv.msix_arr[MLX5_EQ_VEC_CMD].vector); in mlx5e_ethtool_debug_channel_info()
1311 priv->mdev->priv.msix_arr[MLX5_EQ_VEC_ASYNC].vector); in mlx5e_ethtool_debug_channel_info()
1313 for (i = 0; i != priv->params.num_channels; i++) { in mlx5e_ethtool_debug_channel_info()
1317 if (mlx5_vector2eqn(priv->mdev, i, &eqn_not_used, &irqn) != 0) in mlx5e_ethtool_debug_channel_info()
1320 c = opened ? &priv->channel[i] : NULL; in mlx5e_ethtool_debug_channel_info()
1325 priv->mdev->priv.msix_arr[irqn].vector); in mlx5e_ethtool_debug_channel_info()
1327 for (tc = 0; tc != priv->num_tc; tc++) { in mlx5e_ethtool_debug_channel_info()
1333 priv->mdev->priv.msix_arr[irqn].vector); in mlx5e_ethtool_debug_channel_info()
1336 PRIV_UNLOCK(priv); in mlx5e_ethtool_debug_channel_info()
1345 struct mlx5e_priv *priv = arg1; in mlx5e_ethtool_debug_stats() local
1349 PRIV_LOCK(priv); in mlx5e_ethtool_debug_stats()
1350 if (priv->gone != 0) { in mlx5e_ethtool_debug_stats()
1354 sys_debug = priv->sysctl_debug; in mlx5e_ethtool_debug_stats()
1359 if (sys_debug == priv->sysctl_debug) in mlx5e_ethtool_debug_stats()
1362 if ((priv->sysctl_debug = sys_debug)) { in mlx5e_ethtool_debug_stats()
1363 mlx5e_create_stats(&priv->stats.port_stats_debug.ctx, in mlx5e_ethtool_debug_stats()
1364 SYSCTL_CHILDREN(priv->sysctl_ifnet), "debug_stats", in mlx5e_ethtool_debug_stats()
1366 priv->stats.port_stats_debug.arg); in mlx5e_ethtool_debug_stats()
1367 SYSCTL_ADD_PROC(&priv->stats.port_stats_debug.ctx, in mlx5e_ethtool_debug_stats()
1368 SYSCTL_CHILDREN(priv->sysctl_ifnet), OID_AUTO, in mlx5e_ethtool_debug_stats()
1370 CTLFLAG_RD | CTLFLAG_MPSAFE | CTLTYPE_STRING, priv, 0, in mlx5e_ethtool_debug_stats()
1373 sysctl_ctx_free(&priv->stats.port_stats_debug.ctx); in mlx5e_ethtool_debug_stats()
1376 PRIV_UNLOCK(priv); in mlx5e_ethtool_debug_stats()
1381 mlx5e_create_diagnostics(struct mlx5e_priv *priv) in mlx5e_create_diagnostics() argument
1389 ctx = &priv->sysctl_ctx; in mlx5e_create_diagnostics()
1393 SYSCTL_CHILDREN(priv->sysctl_ifnet), OID_AUTO, in mlx5e_create_diagnostics()
1401 if (mlx5_core_supports_diagnostics(priv->mdev, entry.counter_id) == 0) in mlx5e_create_diagnostics()
1404 entry.desc, CTLFLAG_RD, priv->params_pci.array + x, in mlx5e_create_diagnostics()
1411 if (mlx5_core_supports_diagnostics(priv->mdev, entry.counter_id) == 0) in mlx5e_create_diagnostics()
1414 entry.desc, CTLFLAG_RD, priv->params_general.array + x, in mlx5e_create_diagnostics()
1420 mlx5e_create_ethtool(struct mlx5e_priv *priv) in mlx5e_create_ethtool() argument
1431 priv->params_ethtool.irq_cpu_base = -1; /* disabled */ in mlx5e_create_ethtool()
1432 priv->params_ethtool.irq_cpu_stride = 1; in mlx5e_create_ethtool()
1433 priv->params_ethtool.tx_queue_size_max = 1 << MLX5E_PARAMS_MAXIMUM_LOG_SQ_SIZE; in mlx5e_create_ethtool()
1434 priv->params_ethtool.rx_queue_size_max = 1 << MLX5E_PARAMS_MAXIMUM_LOG_RQ_SIZE; in mlx5e_create_ethtool()
1435 priv->params_ethtool.tx_queue_size = 1 << priv->params.log_sq_size; in mlx5e_create_ethtool()
1436 priv->params_ethtool.rx_queue_size = 1 << priv->params.log_rq_size; in mlx5e_create_ethtool()
1437 priv->params_ethtool.channels = priv->params.num_channels; in mlx5e_create_ethtool()
1438 priv->params_ethtool.channels_rsss = priv->params.channels_rsss; in mlx5e_create_ethtool()
1439 priv->params_ethtool.coalesce_pkts_max = MLX5E_FLD_MAX(cqc, cq_max_count); in mlx5e_create_ethtool()
1440 priv->params_ethtool.coalesce_usecs_max = MLX5E_FLD_MAX(cqc, cq_period); in mlx5e_create_ethtool()
1441 priv->params_ethtool.rx_coalesce_mode = priv->params.rx_cq_moderation_mode; in mlx5e_create_ethtool()
1442 priv->params_ethtool.rx_coalesce_usecs = priv->params.rx_cq_moderation_usec; in mlx5e_create_ethtool()
1443 priv->params_ethtool.rx_coalesce_pkts = priv->params.rx_cq_moderation_pkts; in mlx5e_create_ethtool()
1444 priv->params_ethtool.tx_coalesce_mode = priv->params.tx_cq_moderation_mode; in mlx5e_create_ethtool()
1445 priv->params_ethtool.tx_coalesce_usecs = priv->params.tx_cq_moderation_usec; in mlx5e_create_ethtool()
1446 priv->params_ethtool.tx_coalesce_pkts = priv->params.tx_cq_moderation_pkts; in mlx5e_create_ethtool()
1447 priv->params_ethtool.hw_lro = priv->params.hw_lro_en; in mlx5e_create_ethtool()
1448 priv->params_ethtool.cqe_zipping = priv->params.cqe_zipping_en; in mlx5e_create_ethtool()
1449 mlx5e_ethtool_sync_tx_completion_fact(priv); in mlx5e_create_ethtool()
1452 if (MLX5_CAP_GEN(priv->mdev, disable_local_lb_mc) || in mlx5e_create_ethtool()
1453 MLX5_CAP_GEN(priv->mdev, disable_local_lb_uc)) { in mlx5e_create_ethtool()
1457 err = mlx5_nic_vport_query_local_lb(priv->mdev, MLX5_LOCAL_MC_LB, &val); in mlx5e_create_ethtool()
1459 priv->params_ethtool.mc_local_lb = val; in mlx5e_create_ethtool()
1461 err = mlx5_nic_vport_query_local_lb(priv->mdev, MLX5_LOCAL_UC_LB, &val); in mlx5e_create_ethtool()
1463 priv->params_ethtool.uc_local_lb = val; in mlx5e_create_ethtool()
1467 node = SYSCTL_ADD_NODE(&priv->sysctl_ctx, in mlx5e_create_ethtool()
1468 SYSCTL_CHILDREN(priv->sysctl_ifnet), OID_AUTO, in mlx5e_create_ethtool()
1476 SYSCTL_ADD_PROC(&priv->sysctl_ctx, SYSCTL_CHILDREN(node), OID_AUTO, in mlx5e_create_ethtool()
1478 CTLFLAG_MPSAFE, priv, x, &mlx5e_ethtool_handler, "QU", in mlx5e_create_ethtool()
1487 SYSCTL_ADD_PROC(&priv->sysctl_ctx, SYSCTL_CHILDREN(node), OID_AUTO, in mlx5e_create_ethtool()
1489 CTLFLAG_MPSAFE, priv, x, &mlx5e_ethtool_handler, "QU", in mlx5e_create_ethtool()
1495 fec_node = SYSCTL_ADD_NODE(&priv->sysctl_ctx, in mlx5e_create_ethtool()
1502 if (mlx5e_fec_update(priv) == 0) { in mlx5e_create_ethtool()
1503 SYSCTL_ADD_U32(&priv->sysctl_ctx, SYSCTL_CHILDREN(fec_node), OID_AUTO, in mlx5e_create_ethtool()
1505 &priv->params_ethtool.fec_mode_active, 0, in mlx5e_create_ethtool()
1508 SYSCTL_ADD_PROC(&priv->sysctl_ctx, SYSCTL_CHILDREN(fec_node), OID_AUTO, in mlx5e_create_ethtool()
1510 priv, 0, &mlx5e_fec_mask_10x_25x_handler, "CU", in mlx5e_create_ethtool()
1517 SYSCTL_ADD_PROC(&priv->sysctl_ctx, SYSCTL_CHILDREN(fec_node), OID_AUTO, in mlx5e_create_ethtool()
1519 priv, 0, &mlx5e_fec_avail_10x_25x_handler, "CU", in mlx5e_create_ethtool()
1526 SYSCTL_ADD_PROC(&priv->sysctl_ctx, SYSCTL_CHILDREN(fec_node), OID_AUTO, in mlx5e_create_ethtool()
1528 priv, 0, &mlx5e_fec_mask_50x_handler, "SU", in mlx5e_create_ethtool()
1534 SYSCTL_ADD_PROC(&priv->sysctl_ctx, SYSCTL_CHILDREN(fec_node), OID_AUTO, in mlx5e_create_ethtool()
1536 priv, 0, &mlx5e_fec_avail_50x_handler, "SU", in mlx5e_create_ethtool()
1543 SYSCTL_ADD_PROC(&priv->sysctl_ctx, SYSCTL_CHILDREN(node), OID_AUTO, in mlx5e_create_ethtool()
1544 "debug_stats", CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, priv, in mlx5e_create_ethtool()
1547 pnameunit = device_get_nameunit(priv->mdev->pdev->dev.bsddev); in mlx5e_create_ethtool()
1549 SYSCTL_ADD_STRING(&priv->sysctl_ctx, SYSCTL_CHILDREN(node), in mlx5e_create_ethtool()
1555 mlx5e_create_diagnostics(priv); in mlx5e_create_ethtool()
1558 qos_node = SYSCTL_ADD_NODE(&priv->sysctl_ctx, in mlx5e_create_ethtool()
1566 if (mlx5e_getmaxrate(priv) == 0) { in mlx5e_create_ethtool()
1567 SYSCTL_ADD_PROC(&priv->sysctl_ctx, SYSCTL_CHILDREN(qos_node), in mlx5e_create_ethtool()
1569 priv, 0, mlx5e_tc_maxrate_handler, "QU", in mlx5e_create_ethtool()
1575 if (mlx5e_get_max_alloc(priv) == 0) { in mlx5e_create_ethtool()
1576 SYSCTL_ADD_PROC(&priv->sysctl_ctx, SYSCTL_CHILDREN(qos_node), in mlx5e_create_ethtool()
1578 priv, 0, mlx5e_tc_rate_share_handler, "QU", in mlx5e_create_ethtool()
1584 if (mlx5e_get_prio_tc(priv) == 0) { in mlx5e_create_ethtool()
1585 SYSCTL_ADD_PROC(&priv->sysctl_ctx, SYSCTL_CHILDREN(qos_node), in mlx5e_create_ethtool()
1587 priv, 0, mlx5e_prio_to_tc_handler, "CU", in mlx5e_create_ethtool()
1592 if (mlx5e_get_dscp(priv) == 0) { in mlx5e_create_ethtool()
1596 SYSCTL_ADD_PROC(&priv->sysctl_ctx, SYSCTL_CHILDREN(qos_node), in mlx5e_create_ethtool()
1598 priv, i, mlx5e_dscp_prio_handler, "CU", in mlx5e_create_ethtool()
1603 SYSCTL_ADD_PROC(&priv->sysctl_ctx, SYSCTL_CHILDREN(qos_node), in mlx5e_create_ethtool()
1605 priv, 0, mlx5e_trust_state_handler, "CU", in mlx5e_create_ethtool()
1606 MLX5_CAP_QCAM_FEATURE(priv->mdev, qpts_trust_both) ? in mlx5e_create_ethtool()
1612 if (mlx5e_port_query_buffer(priv, &port_buffer) == 0) { in mlx5e_create_ethtool()
1613 SYSCTL_ADD_PROC(&priv->sysctl_ctx, SYSCTL_CHILDREN(qos_node), in mlx5e_create_ethtool()
1616 priv, 0, mlx5e_buf_size_handler, "IU", in mlx5e_create_ethtool()
1618 SYSCTL_ADD_PROC(&priv->sysctl_ctx, SYSCTL_CHILDREN(qos_node), in mlx5e_create_ethtool()
1621 priv, 0, mlx5e_buf_prio_handler, "CU", in mlx5e_create_ethtool()
1623 SYSCTL_ADD_PROC(&priv->sysctl_ctx, SYSCTL_CHILDREN(qos_node), in mlx5e_create_ethtool()
1626 priv, 0, mlx5e_cable_length_handler, "IU", in mlx5e_create_ethtool()
1630 if (mlx5e_hw_temperature_update(priv) == 0) { in mlx5e_create_ethtool()
1631 SYSCTL_ADD_PROC(&priv->sysctl_ctx, SYSCTL_CHILDREN(priv->sysctl_ifnet), in mlx5e_create_ethtool()
1634 priv, 0, mlx5e_hw_temperature_handler, "I", in mlx5e_create_ethtool()