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 Toukan static inline void mlx5e_dcbnl_build_netdev(struct net_device *netdev) {}
mlx5e_dcbnl_initialize(struct mlx5e_priv * priv)483f3ab178STariq Toukan static inline void mlx5e_dcbnl_initialize(struct mlx5e_priv *priv) {}
mlx5e_dcbnl_init_app(struct mlx5e_priv * priv)493f3ab178STariq Toukan static inline void mlx5e_dcbnl_init_app(struct mlx5e_priv *priv) {}
mlx5e_dcbnl_delete_app(struct mlx5e_priv * priv)503f3ab178STariq Toukan static inline void mlx5e_dcbnl_delete_app(struct mlx5e_priv *priv) {}
513f3ab178STariq Toukan #endif
523f3ab178STariq Toukan 
533f3ab178STariq Toukan #endif /* __MLX5E_DCBNL_H__ */
54