13f3ab178STariq Toukan /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ 23f3ab178STariq Toukan /* Copyright (c) 2020 Mellanox Technologies. */ 33f3ab178STariq Toukan 43f3ab178STariq Toukan #ifndef __MLX5E_DCBNL_H__ 53f3ab178STariq Toukan #define __MLX5E_DCBNL_H__ 63f3ab178STariq Toukan 73f3ab178STariq Toukan #ifdef CONFIG_MLX5_CORE_EN_DCB 83f3ab178STariq Toukan 93f3ab178STariq Toukan #define MLX5E_MAX_PRIORITY (8) 103f3ab178STariq Toukan 113f3ab178STariq Toukan struct mlx5e_cee_config { 123f3ab178STariq Toukan /* bw pct for priority group */ 133f3ab178STariq Toukan u8 pg_bw_pct[CEE_DCBX_MAX_PGS]; 143f3ab178STariq Toukan u8 prio_to_pg_map[CEE_DCBX_MAX_PRIO]; 153f3ab178STariq Toukan bool pfc_setting[CEE_DCBX_MAX_PRIO]; 163f3ab178STariq Toukan bool pfc_enable; 173f3ab178STariq Toukan }; 183f3ab178STariq Toukan 193f3ab178STariq Toukan struct mlx5e_dcbx { 203f3ab178STariq Toukan enum mlx5_dcbx_oper_mode mode; 213f3ab178STariq Toukan struct mlx5e_cee_config cee_cfg; /* pending configuration */ 223f3ab178STariq Toukan u8 dscp_app_cnt; 233f3ab178STariq Toukan 243f3ab178STariq Toukan /* The only setting that cannot be read from FW */ 253f3ab178STariq Toukan u8 tc_tsa[IEEE_8021QAZ_MAX_TCS]; 263f3ab178STariq Toukan u8 cap; 273f3ab178STariq Toukan 283f3ab178STariq Toukan /* Buffer configuration */ 293f3ab178STariq Toukan bool manual_buffer; 303f3ab178STariq Toukan u32 cable_len; 313f3ab178STariq Toukan u32 xoff; 3288b3d5c9SEran Ben Elisha u16 port_buff_cell_sz; 333f3ab178STariq Toukan }; 343f3ab178STariq Toukan 353f3ab178STariq Toukan #define MLX5E_MAX_DSCP (64) 363f3ab178STariq Toukan 373f3ab178STariq Toukan struct mlx5e_dcbx_dp { 383f3ab178STariq Toukan u8 dscp2prio[MLX5E_MAX_DSCP]; 393f3ab178STariq Toukan u8 trust_state; 403f3ab178STariq Toukan }; 413f3ab178STariq Toukan 423f3ab178STariq Toukan void mlx5e_dcbnl_build_netdev(struct net_device *netdev); 433f3ab178STariq Toukan void mlx5e_dcbnl_initialize(struct mlx5e_priv *priv); 443f3ab178STariq Toukan void mlx5e_dcbnl_init_app(struct mlx5e_priv *priv); 453f3ab178STariq Toukan void mlx5e_dcbnl_delete_app(struct mlx5e_priv *priv); 463f3ab178STariq Toukan #else mlx5e_dcbnl_build_netdev(struct net_device * netdev)473f3ab178STariq Toukanstatic inline void mlx5e_dcbnl_build_netdev(struct net_device *netdev) {} mlx5e_dcbnl_initialize(struct mlx5e_priv * priv)483f3ab178STariq Toukanstatic inline void mlx5e_dcbnl_initialize(struct mlx5e_priv *priv) {} mlx5e_dcbnl_init_app(struct mlx5e_priv * priv)493f3ab178STariq Toukanstatic inline void mlx5e_dcbnl_init_app(struct mlx5e_priv *priv) {} mlx5e_dcbnl_delete_app(struct mlx5e_priv * priv)503f3ab178STariq Toukanstatic inline void mlx5e_dcbnl_delete_app(struct mlx5e_priv *priv) {} 513f3ab178STariq Toukan #endif 523f3ab178STariq Toukan 533f3ab178STariq Toukan #endif /* __MLX5E_DCBNL_H__ */ 54