123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- // SPDX-License-Identifier: GPL-2.0+
- // Copyright (c) 2016-2017 Hisilicon Limited.
- #include "hnae3.h"
- #include "hns3_enet.h"
- static int hns3_dcbnl_ieee_getets(struct net_device *ndev, struct ieee_ets *ets)
- {
- struct hnae3_handle *h = hns3_get_handle(ndev);
- if (hns3_nic_resetting(ndev))
- return -EBUSY;
- if (h->kinfo.dcb_ops->ieee_getets)
- return h->kinfo.dcb_ops->ieee_getets(h, ets);
- return -EOPNOTSUPP;
- }
- static int hns3_dcbnl_ieee_setets(struct net_device *ndev, struct ieee_ets *ets)
- {
- struct hnae3_handle *h = hns3_get_handle(ndev);
- if (hns3_nic_resetting(ndev))
- return -EBUSY;
- if (h->kinfo.dcb_ops->ieee_setets)
- return h->kinfo.dcb_ops->ieee_setets(h, ets);
- return -EOPNOTSUPP;
- }
- static int hns3_dcbnl_ieee_getpfc(struct net_device *ndev, struct ieee_pfc *pfc)
- {
- struct hnae3_handle *h = hns3_get_handle(ndev);
- if (hns3_nic_resetting(ndev))
- return -EBUSY;
- if (h->kinfo.dcb_ops->ieee_getpfc)
- return h->kinfo.dcb_ops->ieee_getpfc(h, pfc);
- return -EOPNOTSUPP;
- }
- static int hns3_dcbnl_ieee_setpfc(struct net_device *ndev, struct ieee_pfc *pfc)
- {
- struct hnae3_handle *h = hns3_get_handle(ndev);
- if (hns3_nic_resetting(ndev))
- return -EBUSY;
- if (h->kinfo.dcb_ops->ieee_setpfc)
- return h->kinfo.dcb_ops->ieee_setpfc(h, pfc);
- return -EOPNOTSUPP;
- }
- /* DCBX configuration */
- static u8 hns3_dcbnl_getdcbx(struct net_device *ndev)
- {
- struct hnae3_handle *h = hns3_get_handle(ndev);
- if (h->kinfo.dcb_ops->getdcbx)
- return h->kinfo.dcb_ops->getdcbx(h);
- return 0;
- }
- /* return 0 if successful, otherwise fail */
- static u8 hns3_dcbnl_setdcbx(struct net_device *ndev, u8 mode)
- {
- struct hnae3_handle *h = hns3_get_handle(ndev);
- if (h->kinfo.dcb_ops->setdcbx)
- return h->kinfo.dcb_ops->setdcbx(h, mode);
- return 1;
- }
- static const struct dcbnl_rtnl_ops hns3_dcbnl_ops = {
- .ieee_getets = hns3_dcbnl_ieee_getets,
- .ieee_setets = hns3_dcbnl_ieee_setets,
- .ieee_getpfc = hns3_dcbnl_ieee_getpfc,
- .ieee_setpfc = hns3_dcbnl_ieee_setpfc,
- .getdcbx = hns3_dcbnl_getdcbx,
- .setdcbx = hns3_dcbnl_setdcbx,
- };
- /* hclge_dcbnl_setup - DCBNL setup
- * @handle: the corresponding vport handle
- * Set up DCBNL
- */
- void hns3_dcbnl_setup(struct hnae3_handle *handle)
- {
- struct net_device *dev = handle->kinfo.netdev;
- if ((!handle->kinfo.dcb_ops) || (handle->flags & HNAE3_SUPPORT_VF))
- return;
- dev->dcbnl_ops = &hns3_dcbnl_ops;
- }
|