hns3_dcbnl.c 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. // SPDX-License-Identifier: GPL-2.0+
  2. // Copyright (c) 2016-2017 Hisilicon Limited.
  3. #include "hnae3.h"
  4. #include "hns3_enet.h"
  5. static
  6. int hns3_dcbnl_ieee_getets(struct net_device *ndev, struct ieee_ets *ets)
  7. {
  8. struct hnae3_handle *h = hns3_get_handle(ndev);
  9. if (h->kinfo.dcb_ops->ieee_getets)
  10. return h->kinfo.dcb_ops->ieee_getets(h, ets);
  11. return -EOPNOTSUPP;
  12. }
  13. static
  14. int hns3_dcbnl_ieee_setets(struct net_device *ndev, struct ieee_ets *ets)
  15. {
  16. struct hnae3_handle *h = hns3_get_handle(ndev);
  17. if (h->kinfo.dcb_ops->ieee_setets)
  18. return h->kinfo.dcb_ops->ieee_setets(h, ets);
  19. return -EOPNOTSUPP;
  20. }
  21. static
  22. int hns3_dcbnl_ieee_getpfc(struct net_device *ndev, struct ieee_pfc *pfc)
  23. {
  24. struct hnae3_handle *h = hns3_get_handle(ndev);
  25. if (h->kinfo.dcb_ops->ieee_getpfc)
  26. return h->kinfo.dcb_ops->ieee_getpfc(h, pfc);
  27. return -EOPNOTSUPP;
  28. }
  29. static
  30. int hns3_dcbnl_ieee_setpfc(struct net_device *ndev, struct ieee_pfc *pfc)
  31. {
  32. struct hnae3_handle *h = hns3_get_handle(ndev);
  33. if (h->kinfo.dcb_ops->ieee_setpfc)
  34. return h->kinfo.dcb_ops->ieee_setpfc(h, pfc);
  35. return -EOPNOTSUPP;
  36. }
  37. /* DCBX configuration */
  38. static u8 hns3_dcbnl_getdcbx(struct net_device *ndev)
  39. {
  40. struct hnae3_handle *h = hns3_get_handle(ndev);
  41. if (h->kinfo.dcb_ops->getdcbx)
  42. return h->kinfo.dcb_ops->getdcbx(h);
  43. return 0;
  44. }
  45. /* return 0 if successful, otherwise fail */
  46. static u8 hns3_dcbnl_setdcbx(struct net_device *ndev, u8 mode)
  47. {
  48. struct hnae3_handle *h = hns3_get_handle(ndev);
  49. if (h->kinfo.dcb_ops->setdcbx)
  50. return h->kinfo.dcb_ops->setdcbx(h, mode);
  51. return 1;
  52. }
  53. static const struct dcbnl_rtnl_ops hns3_dcbnl_ops = {
  54. .ieee_getets = hns3_dcbnl_ieee_getets,
  55. .ieee_setets = hns3_dcbnl_ieee_setets,
  56. .ieee_getpfc = hns3_dcbnl_ieee_getpfc,
  57. .ieee_setpfc = hns3_dcbnl_ieee_setpfc,
  58. .getdcbx = hns3_dcbnl_getdcbx,
  59. .setdcbx = hns3_dcbnl_setdcbx,
  60. };
  61. /* hclge_dcbnl_setup - DCBNL setup
  62. * @handle: the corresponding vport handle
  63. * Set up DCBNL
  64. */
  65. void hns3_dcbnl_setup(struct hnae3_handle *handle)
  66. {
  67. struct net_device *dev = handle->kinfo.netdev;
  68. if ((!handle->kinfo.dcb_ops) || (handle->flags & HNAE3_SUPPORT_VF))
  69. return;
  70. dev->dcbnl_ops = &hns3_dcbnl_ops;
  71. }