19b7fe804SBin Chen /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ 29b7fe804SBin Chen /* Copyright (C) 2023 Corigine, Inc. */ 39b7fe804SBin Chen 49b7fe804SBin Chen #ifndef __NFP_NIC_H__ 59b7fe804SBin Chen #define __NFP_NIC_H__ 1 69b7fe804SBin Chen 79b7fe804SBin Chen #include <linux/netdevice.h> 89b7fe804SBin Chen 99b7fe804SBin Chen #ifdef CONFIG_DCB 109b7fe804SBin Chen /* DCB feature definitions */ 11*de9c1a23SHuayu Chen #define NFP_NET_MAX_DSCP 64 129b7fe804SBin Chen #define NFP_NET_MAX_TC IEEE_8021QAZ_MAX_TCS 139b7fe804SBin Chen #define NFP_NET_MAX_PRIO 8 149b7fe804SBin Chen #define NFP_DCB_CFG_STRIDE 256 159b7fe804SBin Chen 169b7fe804SBin Chen struct nfp_dcb { 179b7fe804SBin Chen u8 dscp2prio[NFP_NET_MAX_DSCP]; 189b7fe804SBin Chen u8 prio2tc[NFP_NET_MAX_PRIO]; 199b7fe804SBin Chen u8 tc2idx[IEEE_8021QAZ_MAX_TCS]; 209b7fe804SBin Chen u64 tc_maxrate[IEEE_8021QAZ_MAX_TCS]; 219b7fe804SBin Chen u8 tc_tx_pct[IEEE_8021QAZ_MAX_TCS]; 229b7fe804SBin Chen u8 tc_tsa[IEEE_8021QAZ_MAX_TCS]; 239b7fe804SBin Chen u8 dscp_cnt; 249b7fe804SBin Chen u8 trust_status; 259b7fe804SBin Chen bool rate_init; 269b7fe804SBin Chen bool ets_init; 279b7fe804SBin Chen 289b7fe804SBin Chen struct nfp_cpp_area *dcbcfg_tbl_area; 299b7fe804SBin Chen u8 __iomem *dcbcfg_tbl; 309b7fe804SBin Chen u32 cfg_offset; 319b7fe804SBin Chen }; 329b7fe804SBin Chen 339b7fe804SBin Chen int nfp_nic_dcb_init(struct nfp_net *nn); 349b7fe804SBin Chen void nfp_nic_dcb_clean(struct nfp_net *nn); 359b7fe804SBin Chen #else nfp_nic_dcb_init(struct nfp_net * nn)369b7fe804SBin Chenstatic inline int nfp_nic_dcb_init(struct nfp_net *nn) { return 0; } nfp_nic_dcb_clean(struct nfp_net * nn)379b7fe804SBin Chenstatic inline void nfp_nic_dcb_clean(struct nfp_net *nn) {} 389b7fe804SBin Chen #endif 399b7fe804SBin Chen 409b7fe804SBin Chen struct nfp_app_nic_private { 419b7fe804SBin Chen #ifdef CONFIG_DCB 429b7fe804SBin Chen struct nfp_dcb dcb; 439b7fe804SBin Chen #endif 449b7fe804SBin Chen }; 459b7fe804SBin Chen 469b7fe804SBin Chen #endif 47