18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
28c2ecf20Sopenharmony_ci/* QLogic qede NIC Driver
38c2ecf20Sopenharmony_ci * Copyright (c) 2015 QLogic Corporation
48c2ecf20Sopenharmony_ci * Copyright (c) 2019-2020 Marvell International Ltd.
58c2ecf20Sopenharmony_ci */
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci#include <linux/types.h>
88c2ecf20Sopenharmony_ci#include <linux/netdevice.h>
98c2ecf20Sopenharmony_ci#include <linux/rtnetlink.h>
108c2ecf20Sopenharmony_ci#include <net/dcbnl.h>
118c2ecf20Sopenharmony_ci#include "qede.h"
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_cistatic u8 qede_dcbnl_getstate(struct net_device *netdev)
148c2ecf20Sopenharmony_ci{
158c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci	return edev->ops->dcb->getstate(edev->cdev);
188c2ecf20Sopenharmony_ci}
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_cistatic u8 qede_dcbnl_setstate(struct net_device *netdev, u8 state)
218c2ecf20Sopenharmony_ci{
228c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci	return edev->ops->dcb->setstate(edev->cdev, state);
258c2ecf20Sopenharmony_ci}
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_cistatic void qede_dcbnl_getpermhwaddr(struct net_device *netdev,
288c2ecf20Sopenharmony_ci				     u8 *perm_addr)
298c2ecf20Sopenharmony_ci{
308c2ecf20Sopenharmony_ci	memcpy(perm_addr, netdev->dev_addr, netdev->addr_len);
318c2ecf20Sopenharmony_ci}
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_cistatic void qede_dcbnl_getpgtccfgtx(struct net_device *netdev, int prio,
348c2ecf20Sopenharmony_ci				    u8 *prio_type, u8 *pgid, u8 *bw_pct,
358c2ecf20Sopenharmony_ci				    u8 *up_map)
368c2ecf20Sopenharmony_ci{
378c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
388c2ecf20Sopenharmony_ci
398c2ecf20Sopenharmony_ci	edev->ops->dcb->getpgtccfgtx(edev->cdev, prio, prio_type,
408c2ecf20Sopenharmony_ci				     pgid, bw_pct, up_map);
418c2ecf20Sopenharmony_ci}
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_cistatic void qede_dcbnl_getpgbwgcfgtx(struct net_device *netdev,
448c2ecf20Sopenharmony_ci				     int pgid, u8 *bw_pct)
458c2ecf20Sopenharmony_ci{
468c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_ci	edev->ops->dcb->getpgbwgcfgtx(edev->cdev, pgid, bw_pct);
498c2ecf20Sopenharmony_ci}
508c2ecf20Sopenharmony_ci
518c2ecf20Sopenharmony_cistatic void qede_dcbnl_getpgtccfgrx(struct net_device *netdev, int prio,
528c2ecf20Sopenharmony_ci				    u8 *prio_type, u8 *pgid, u8 *bw_pct,
538c2ecf20Sopenharmony_ci				    u8 *up_map)
548c2ecf20Sopenharmony_ci{
558c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
568c2ecf20Sopenharmony_ci
578c2ecf20Sopenharmony_ci	edev->ops->dcb->getpgtccfgrx(edev->cdev, prio, prio_type, pgid, bw_pct,
588c2ecf20Sopenharmony_ci				     up_map);
598c2ecf20Sopenharmony_ci}
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_cistatic void qede_dcbnl_getpgbwgcfgrx(struct net_device *netdev,
628c2ecf20Sopenharmony_ci				     int pgid, u8 *bw_pct)
638c2ecf20Sopenharmony_ci{
648c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
658c2ecf20Sopenharmony_ci
668c2ecf20Sopenharmony_ci	edev->ops->dcb->getpgbwgcfgrx(edev->cdev, pgid, bw_pct);
678c2ecf20Sopenharmony_ci}
688c2ecf20Sopenharmony_ci
698c2ecf20Sopenharmony_cistatic void qede_dcbnl_getpfccfg(struct net_device *netdev, int prio,
708c2ecf20Sopenharmony_ci				 u8 *setting)
718c2ecf20Sopenharmony_ci{
728c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
738c2ecf20Sopenharmony_ci
748c2ecf20Sopenharmony_ci	edev->ops->dcb->getpfccfg(edev->cdev, prio, setting);
758c2ecf20Sopenharmony_ci}
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_cistatic void qede_dcbnl_setpfccfg(struct net_device *netdev, int prio,
788c2ecf20Sopenharmony_ci				 u8 setting)
798c2ecf20Sopenharmony_ci{
808c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
818c2ecf20Sopenharmony_ci
828c2ecf20Sopenharmony_ci	edev->ops->dcb->setpfccfg(edev->cdev, prio, setting);
838c2ecf20Sopenharmony_ci}
848c2ecf20Sopenharmony_ci
858c2ecf20Sopenharmony_cistatic u8 qede_dcbnl_getcap(struct net_device *netdev, int capid, u8 *cap)
868c2ecf20Sopenharmony_ci{
878c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
888c2ecf20Sopenharmony_ci
898c2ecf20Sopenharmony_ci	return edev->ops->dcb->getcap(edev->cdev, capid, cap);
908c2ecf20Sopenharmony_ci}
918c2ecf20Sopenharmony_ci
928c2ecf20Sopenharmony_cistatic int qede_dcbnl_getnumtcs(struct net_device *netdev, int tcid, u8 *num)
938c2ecf20Sopenharmony_ci{
948c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
958c2ecf20Sopenharmony_ci
968c2ecf20Sopenharmony_ci	return edev->ops->dcb->getnumtcs(edev->cdev, tcid, num);
978c2ecf20Sopenharmony_ci}
988c2ecf20Sopenharmony_ci
998c2ecf20Sopenharmony_cistatic u8 qede_dcbnl_getpfcstate(struct net_device *netdev)
1008c2ecf20Sopenharmony_ci{
1018c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
1028c2ecf20Sopenharmony_ci
1038c2ecf20Sopenharmony_ci	return edev->ops->dcb->getpfcstate(edev->cdev);
1048c2ecf20Sopenharmony_ci}
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_cistatic int qede_dcbnl_getapp(struct net_device *netdev, u8 idtype, u16 id)
1078c2ecf20Sopenharmony_ci{
1088c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
1098c2ecf20Sopenharmony_ci
1108c2ecf20Sopenharmony_ci	return edev->ops->dcb->getapp(edev->cdev, idtype, id);
1118c2ecf20Sopenharmony_ci}
1128c2ecf20Sopenharmony_ci
1138c2ecf20Sopenharmony_cistatic u8 qede_dcbnl_getdcbx(struct net_device *netdev)
1148c2ecf20Sopenharmony_ci{
1158c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
1168c2ecf20Sopenharmony_ci
1178c2ecf20Sopenharmony_ci	return edev->ops->dcb->getdcbx(edev->cdev);
1188c2ecf20Sopenharmony_ci}
1198c2ecf20Sopenharmony_ci
1208c2ecf20Sopenharmony_cistatic void qede_dcbnl_setpgtccfgtx(struct net_device *netdev, int prio,
1218c2ecf20Sopenharmony_ci				    u8 pri_type, u8 pgid, u8 bw_pct, u8 up_map)
1228c2ecf20Sopenharmony_ci{
1238c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
1248c2ecf20Sopenharmony_ci
1258c2ecf20Sopenharmony_ci	return edev->ops->dcb->setpgtccfgtx(edev->cdev, prio, pri_type, pgid,
1268c2ecf20Sopenharmony_ci					    bw_pct, up_map);
1278c2ecf20Sopenharmony_ci}
1288c2ecf20Sopenharmony_ci
1298c2ecf20Sopenharmony_cistatic void qede_dcbnl_setpgtccfgrx(struct net_device *netdev, int prio,
1308c2ecf20Sopenharmony_ci				    u8 pri_type, u8 pgid, u8 bw_pct, u8 up_map)
1318c2ecf20Sopenharmony_ci{
1328c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
1338c2ecf20Sopenharmony_ci
1348c2ecf20Sopenharmony_ci	return edev->ops->dcb->setpgtccfgrx(edev->cdev, prio, pri_type, pgid,
1358c2ecf20Sopenharmony_ci					    bw_pct, up_map);
1368c2ecf20Sopenharmony_ci}
1378c2ecf20Sopenharmony_ci
1388c2ecf20Sopenharmony_cistatic void qede_dcbnl_setpgbwgcfgtx(struct net_device *netdev, int pgid,
1398c2ecf20Sopenharmony_ci				     u8 bw_pct)
1408c2ecf20Sopenharmony_ci{
1418c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
1428c2ecf20Sopenharmony_ci
1438c2ecf20Sopenharmony_ci	return edev->ops->dcb->setpgbwgcfgtx(edev->cdev, pgid, bw_pct);
1448c2ecf20Sopenharmony_ci}
1458c2ecf20Sopenharmony_ci
1468c2ecf20Sopenharmony_cistatic void qede_dcbnl_setpgbwgcfgrx(struct net_device *netdev, int pgid,
1478c2ecf20Sopenharmony_ci				     u8 bw_pct)
1488c2ecf20Sopenharmony_ci{
1498c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
1508c2ecf20Sopenharmony_ci
1518c2ecf20Sopenharmony_ci	return edev->ops->dcb->setpgbwgcfgrx(edev->cdev, pgid, bw_pct);
1528c2ecf20Sopenharmony_ci}
1538c2ecf20Sopenharmony_ci
1548c2ecf20Sopenharmony_cistatic u8 qede_dcbnl_setall(struct net_device *netdev)
1558c2ecf20Sopenharmony_ci{
1568c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
1578c2ecf20Sopenharmony_ci
1588c2ecf20Sopenharmony_ci	return edev->ops->dcb->setall(edev->cdev);
1598c2ecf20Sopenharmony_ci}
1608c2ecf20Sopenharmony_ci
1618c2ecf20Sopenharmony_cistatic int qede_dcbnl_setnumtcs(struct net_device *netdev, int tcid, u8 num)
1628c2ecf20Sopenharmony_ci{
1638c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
1648c2ecf20Sopenharmony_ci
1658c2ecf20Sopenharmony_ci	return edev->ops->dcb->setnumtcs(edev->cdev, tcid, num);
1668c2ecf20Sopenharmony_ci}
1678c2ecf20Sopenharmony_ci
1688c2ecf20Sopenharmony_cistatic void qede_dcbnl_setpfcstate(struct net_device *netdev, u8 state)
1698c2ecf20Sopenharmony_ci{
1708c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
1718c2ecf20Sopenharmony_ci
1728c2ecf20Sopenharmony_ci	return edev->ops->dcb->setpfcstate(edev->cdev, state);
1738c2ecf20Sopenharmony_ci}
1748c2ecf20Sopenharmony_ci
1758c2ecf20Sopenharmony_cistatic int qede_dcbnl_setapp(struct net_device *netdev, u8 idtype, u16 idval,
1768c2ecf20Sopenharmony_ci			     u8 up)
1778c2ecf20Sopenharmony_ci{
1788c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
1798c2ecf20Sopenharmony_ci
1808c2ecf20Sopenharmony_ci	return edev->ops->dcb->setapp(edev->cdev, idtype, idval, up);
1818c2ecf20Sopenharmony_ci}
1828c2ecf20Sopenharmony_ci
1838c2ecf20Sopenharmony_cistatic u8 qede_dcbnl_setdcbx(struct net_device *netdev, u8 state)
1848c2ecf20Sopenharmony_ci{
1858c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
1868c2ecf20Sopenharmony_ci
1878c2ecf20Sopenharmony_ci	return edev->ops->dcb->setdcbx(edev->cdev, state);
1888c2ecf20Sopenharmony_ci}
1898c2ecf20Sopenharmony_ci
1908c2ecf20Sopenharmony_cistatic u8 qede_dcbnl_getfeatcfg(struct net_device *netdev, int featid,
1918c2ecf20Sopenharmony_ci				u8 *flags)
1928c2ecf20Sopenharmony_ci{
1938c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
1948c2ecf20Sopenharmony_ci
1958c2ecf20Sopenharmony_ci	return edev->ops->dcb->getfeatcfg(edev->cdev, featid, flags);
1968c2ecf20Sopenharmony_ci}
1978c2ecf20Sopenharmony_ci
1988c2ecf20Sopenharmony_cistatic u8 qede_dcbnl_setfeatcfg(struct net_device *netdev, int featid, u8 flags)
1998c2ecf20Sopenharmony_ci{
2008c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
2018c2ecf20Sopenharmony_ci
2028c2ecf20Sopenharmony_ci	return edev->ops->dcb->setfeatcfg(edev->cdev, featid, flags);
2038c2ecf20Sopenharmony_ci}
2048c2ecf20Sopenharmony_ci
2058c2ecf20Sopenharmony_cistatic int qede_dcbnl_peer_getappinfo(struct net_device *netdev,
2068c2ecf20Sopenharmony_ci				      struct dcb_peer_app_info *info,
2078c2ecf20Sopenharmony_ci				      u16 *count)
2088c2ecf20Sopenharmony_ci{
2098c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
2108c2ecf20Sopenharmony_ci
2118c2ecf20Sopenharmony_ci	return edev->ops->dcb->peer_getappinfo(edev->cdev, info, count);
2128c2ecf20Sopenharmony_ci}
2138c2ecf20Sopenharmony_ci
2148c2ecf20Sopenharmony_cistatic int qede_dcbnl_peer_getapptable(struct net_device *netdev,
2158c2ecf20Sopenharmony_ci				       struct dcb_app *app)
2168c2ecf20Sopenharmony_ci{
2178c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
2188c2ecf20Sopenharmony_ci
2198c2ecf20Sopenharmony_ci	return edev->ops->dcb->peer_getapptable(edev->cdev, app);
2208c2ecf20Sopenharmony_ci}
2218c2ecf20Sopenharmony_ci
2228c2ecf20Sopenharmony_cistatic int qede_dcbnl_cee_peer_getpfc(struct net_device *netdev,
2238c2ecf20Sopenharmony_ci				      struct cee_pfc *pfc)
2248c2ecf20Sopenharmony_ci{
2258c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
2268c2ecf20Sopenharmony_ci
2278c2ecf20Sopenharmony_ci	return edev->ops->dcb->cee_peer_getpfc(edev->cdev, pfc);
2288c2ecf20Sopenharmony_ci}
2298c2ecf20Sopenharmony_ci
2308c2ecf20Sopenharmony_cistatic int qede_dcbnl_cee_peer_getpg(struct net_device *netdev,
2318c2ecf20Sopenharmony_ci				     struct cee_pg *pg)
2328c2ecf20Sopenharmony_ci{
2338c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
2348c2ecf20Sopenharmony_ci
2358c2ecf20Sopenharmony_ci	return edev->ops->dcb->cee_peer_getpg(edev->cdev, pg);
2368c2ecf20Sopenharmony_ci}
2378c2ecf20Sopenharmony_ci
2388c2ecf20Sopenharmony_cistatic int qede_dcbnl_ieee_getpfc(struct net_device *netdev,
2398c2ecf20Sopenharmony_ci				  struct ieee_pfc *pfc)
2408c2ecf20Sopenharmony_ci{
2418c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
2428c2ecf20Sopenharmony_ci
2438c2ecf20Sopenharmony_ci	return edev->ops->dcb->ieee_getpfc(edev->cdev, pfc);
2448c2ecf20Sopenharmony_ci}
2458c2ecf20Sopenharmony_ci
2468c2ecf20Sopenharmony_cistatic int qede_dcbnl_ieee_setpfc(struct net_device *netdev,
2478c2ecf20Sopenharmony_ci				  struct ieee_pfc *pfc)
2488c2ecf20Sopenharmony_ci{
2498c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
2508c2ecf20Sopenharmony_ci
2518c2ecf20Sopenharmony_ci	return edev->ops->dcb->ieee_setpfc(edev->cdev, pfc);
2528c2ecf20Sopenharmony_ci}
2538c2ecf20Sopenharmony_ci
2548c2ecf20Sopenharmony_cistatic int qede_dcbnl_ieee_getets(struct net_device *netdev,
2558c2ecf20Sopenharmony_ci				  struct ieee_ets *ets)
2568c2ecf20Sopenharmony_ci{
2578c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
2588c2ecf20Sopenharmony_ci
2598c2ecf20Sopenharmony_ci	return edev->ops->dcb->ieee_getets(edev->cdev, ets);
2608c2ecf20Sopenharmony_ci}
2618c2ecf20Sopenharmony_ci
2628c2ecf20Sopenharmony_cistatic int qede_dcbnl_ieee_setets(struct net_device *netdev,
2638c2ecf20Sopenharmony_ci				  struct ieee_ets *ets)
2648c2ecf20Sopenharmony_ci{
2658c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
2668c2ecf20Sopenharmony_ci
2678c2ecf20Sopenharmony_ci	return edev->ops->dcb->ieee_setets(edev->cdev, ets);
2688c2ecf20Sopenharmony_ci}
2698c2ecf20Sopenharmony_ci
2708c2ecf20Sopenharmony_cistatic int qede_dcbnl_ieee_getapp(struct net_device *netdev,
2718c2ecf20Sopenharmony_ci				  struct dcb_app *app)
2728c2ecf20Sopenharmony_ci{
2738c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
2748c2ecf20Sopenharmony_ci
2758c2ecf20Sopenharmony_ci	return edev->ops->dcb->ieee_getapp(edev->cdev, app);
2768c2ecf20Sopenharmony_ci}
2778c2ecf20Sopenharmony_ci
2788c2ecf20Sopenharmony_cistatic int qede_dcbnl_ieee_setapp(struct net_device *netdev,
2798c2ecf20Sopenharmony_ci				  struct dcb_app *app)
2808c2ecf20Sopenharmony_ci{
2818c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
2828c2ecf20Sopenharmony_ci	int err;
2838c2ecf20Sopenharmony_ci
2848c2ecf20Sopenharmony_ci	err = dcb_ieee_setapp(netdev, app);
2858c2ecf20Sopenharmony_ci	if (err)
2868c2ecf20Sopenharmony_ci		return err;
2878c2ecf20Sopenharmony_ci
2888c2ecf20Sopenharmony_ci	return edev->ops->dcb->ieee_setapp(edev->cdev, app);
2898c2ecf20Sopenharmony_ci}
2908c2ecf20Sopenharmony_ci
2918c2ecf20Sopenharmony_cistatic int qede_dcbnl_ieee_peer_getpfc(struct net_device *netdev,
2928c2ecf20Sopenharmony_ci				       struct ieee_pfc *pfc)
2938c2ecf20Sopenharmony_ci{
2948c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
2958c2ecf20Sopenharmony_ci
2968c2ecf20Sopenharmony_ci	return edev->ops->dcb->ieee_peer_getpfc(edev->cdev, pfc);
2978c2ecf20Sopenharmony_ci}
2988c2ecf20Sopenharmony_ci
2998c2ecf20Sopenharmony_cistatic int qede_dcbnl_ieee_peer_getets(struct net_device *netdev,
3008c2ecf20Sopenharmony_ci				       struct ieee_ets *ets)
3018c2ecf20Sopenharmony_ci{
3028c2ecf20Sopenharmony_ci	struct qede_dev *edev = netdev_priv(netdev);
3038c2ecf20Sopenharmony_ci
3048c2ecf20Sopenharmony_ci	return edev->ops->dcb->ieee_peer_getets(edev->cdev, ets);
3058c2ecf20Sopenharmony_ci}
3068c2ecf20Sopenharmony_ci
3078c2ecf20Sopenharmony_cistatic const struct dcbnl_rtnl_ops qede_dcbnl_ops = {
3088c2ecf20Sopenharmony_ci	.ieee_getpfc = qede_dcbnl_ieee_getpfc,
3098c2ecf20Sopenharmony_ci	.ieee_setpfc = qede_dcbnl_ieee_setpfc,
3108c2ecf20Sopenharmony_ci	.ieee_getets = qede_dcbnl_ieee_getets,
3118c2ecf20Sopenharmony_ci	.ieee_setets = qede_dcbnl_ieee_setets,
3128c2ecf20Sopenharmony_ci	.ieee_getapp = qede_dcbnl_ieee_getapp,
3138c2ecf20Sopenharmony_ci	.ieee_setapp = qede_dcbnl_ieee_setapp,
3148c2ecf20Sopenharmony_ci	.ieee_peer_getpfc = qede_dcbnl_ieee_peer_getpfc,
3158c2ecf20Sopenharmony_ci	.ieee_peer_getets = qede_dcbnl_ieee_peer_getets,
3168c2ecf20Sopenharmony_ci	.getstate = qede_dcbnl_getstate,
3178c2ecf20Sopenharmony_ci	.setstate = qede_dcbnl_setstate,
3188c2ecf20Sopenharmony_ci	.getpermhwaddr = qede_dcbnl_getpermhwaddr,
3198c2ecf20Sopenharmony_ci	.getpgtccfgtx = qede_dcbnl_getpgtccfgtx,
3208c2ecf20Sopenharmony_ci	.getpgbwgcfgtx = qede_dcbnl_getpgbwgcfgtx,
3218c2ecf20Sopenharmony_ci	.getpgtccfgrx = qede_dcbnl_getpgtccfgrx,
3228c2ecf20Sopenharmony_ci	.getpgbwgcfgrx = qede_dcbnl_getpgbwgcfgrx,
3238c2ecf20Sopenharmony_ci	.getpfccfg = qede_dcbnl_getpfccfg,
3248c2ecf20Sopenharmony_ci	.setpfccfg = qede_dcbnl_setpfccfg,
3258c2ecf20Sopenharmony_ci	.getcap = qede_dcbnl_getcap,
3268c2ecf20Sopenharmony_ci	.getnumtcs = qede_dcbnl_getnumtcs,
3278c2ecf20Sopenharmony_ci	.getpfcstate = qede_dcbnl_getpfcstate,
3288c2ecf20Sopenharmony_ci	.getapp = qede_dcbnl_getapp,
3298c2ecf20Sopenharmony_ci	.getdcbx = qede_dcbnl_getdcbx,
3308c2ecf20Sopenharmony_ci	.setpgtccfgtx = qede_dcbnl_setpgtccfgtx,
3318c2ecf20Sopenharmony_ci	.setpgtccfgrx = qede_dcbnl_setpgtccfgrx,
3328c2ecf20Sopenharmony_ci	.setpgbwgcfgtx = qede_dcbnl_setpgbwgcfgtx,
3338c2ecf20Sopenharmony_ci	.setpgbwgcfgrx = qede_dcbnl_setpgbwgcfgrx,
3348c2ecf20Sopenharmony_ci	.setall = qede_dcbnl_setall,
3358c2ecf20Sopenharmony_ci	.setnumtcs = qede_dcbnl_setnumtcs,
3368c2ecf20Sopenharmony_ci	.setpfcstate = qede_dcbnl_setpfcstate,
3378c2ecf20Sopenharmony_ci	.setapp = qede_dcbnl_setapp,
3388c2ecf20Sopenharmony_ci	.setdcbx = qede_dcbnl_setdcbx,
3398c2ecf20Sopenharmony_ci	.setfeatcfg = qede_dcbnl_setfeatcfg,
3408c2ecf20Sopenharmony_ci	.getfeatcfg = qede_dcbnl_getfeatcfg,
3418c2ecf20Sopenharmony_ci	.peer_getappinfo = qede_dcbnl_peer_getappinfo,
3428c2ecf20Sopenharmony_ci	.peer_getapptable = qede_dcbnl_peer_getapptable,
3438c2ecf20Sopenharmony_ci	.cee_peer_getpfc = qede_dcbnl_cee_peer_getpfc,
3448c2ecf20Sopenharmony_ci	.cee_peer_getpg = qede_dcbnl_cee_peer_getpg,
3458c2ecf20Sopenharmony_ci};
3468c2ecf20Sopenharmony_ci
3478c2ecf20Sopenharmony_civoid qede_set_dcbnl_ops(struct net_device *dev)
3488c2ecf20Sopenharmony_ci{
3498c2ecf20Sopenharmony_ci	dev->dcbnl_ops = &qede_dcbnl_ops;
3508c2ecf20Sopenharmony_ci}
351