root/drivers/net/ethernet/mellanox/mlx5/core/en/dcbnl.h
/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
/* Copyright (c) 2020 Mellanox Technologies. */

#ifndef __MLX5E_DCBNL_H__
#define __MLX5E_DCBNL_H__

#ifdef CONFIG_MLX5_CORE_EN_DCB

#define MLX5E_MAX_PRIORITY (8)

struct mlx5e_cee_config {
        /* bw pct for priority group */
        u8                         pg_bw_pct[CEE_DCBX_MAX_PGS];
        u8                         prio_to_pg_map[CEE_DCBX_MAX_PRIO];
        bool                       pfc_setting[CEE_DCBX_MAX_PRIO];
        bool                       pfc_enable;
};

struct mlx5e_dcbx {
        enum mlx5_dcbx_oper_mode   mode;
        struct mlx5e_cee_config    cee_cfg; /* pending configuration */
        u8                         dscp_app_cnt;

        /* The only setting that cannot be read from FW */
        u8                         tc_tsa[IEEE_8021QAZ_MAX_TCS];
        u8                         cap;

        /* Buffer configuration */
        u32                        cable_len;
        u32                        xoff;
        u16                        port_buff_cell_sz;

        /* Upper limit for 100Mbps and 1Gbps in Kbps units */
        u64                        upper_limit_100mbps;
        u64                        upper_limit_gbps;
};

#define MLX5E_MAX_DSCP (64)

struct mlx5e_dcbx_dp {
        u8                         dscp2prio[MLX5E_MAX_DSCP];
        u8                         trust_state;
};

void mlx5e_dcbnl_build_netdev(struct net_device *netdev);
void mlx5e_dcbnl_initialize(struct mlx5e_priv *priv);
void mlx5e_dcbnl_init_app(struct mlx5e_priv *priv);
void mlx5e_dcbnl_delete_app(struct mlx5e_priv *priv);
#else
static inline void mlx5e_dcbnl_build_netdev(struct net_device *netdev) {}
static inline void mlx5e_dcbnl_initialize(struct mlx5e_priv *priv) {}
static inline void mlx5e_dcbnl_init_app(struct mlx5e_priv *priv) {}
static inline void mlx5e_dcbnl_delete_app(struct mlx5e_priv *priv) {}
#endif

#endif /* __MLX5E_DCBNL_H__ */