qede_dcbnl.c 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349
  1. /* QLogic qede NIC Driver
  2. * Copyright (c) 2015 QLogic Corporation
  3. *
  4. * This software is available under the terms of the GNU General Public License
  5. * (GPL) Version 2, available from the file COPYING in the main directory of
  6. * this source tree.
  7. */
  8. #include <linux/types.h>
  9. #include <linux/netdevice.h>
  10. #include <linux/rtnetlink.h>
  11. #include <net/dcbnl.h>
  12. #include "qede.h"
  13. static u8 qede_dcbnl_getstate(struct net_device *netdev)
  14. {
  15. struct qede_dev *edev = netdev_priv(netdev);
  16. return edev->ops->dcb->getstate(edev->cdev);
  17. }
  18. static u8 qede_dcbnl_setstate(struct net_device *netdev, u8 state)
  19. {
  20. struct qede_dev *edev = netdev_priv(netdev);
  21. return edev->ops->dcb->setstate(edev->cdev, state);
  22. }
  23. static void qede_dcbnl_getpermhwaddr(struct net_device *netdev,
  24. u8 *perm_addr)
  25. {
  26. memcpy(perm_addr, netdev->dev_addr, netdev->addr_len);
  27. }
  28. static void qede_dcbnl_getpgtccfgtx(struct net_device *netdev, int prio,
  29. u8 *prio_type, u8 *pgid, u8 *bw_pct,
  30. u8 *up_map)
  31. {
  32. struct qede_dev *edev = netdev_priv(netdev);
  33. edev->ops->dcb->getpgtccfgtx(edev->cdev, prio, prio_type,
  34. pgid, bw_pct, up_map);
  35. }
  36. static void qede_dcbnl_getpgbwgcfgtx(struct net_device *netdev,
  37. int pgid, u8 *bw_pct)
  38. {
  39. struct qede_dev *edev = netdev_priv(netdev);
  40. edev->ops->dcb->getpgbwgcfgtx(edev->cdev, pgid, bw_pct);
  41. }
  42. static void qede_dcbnl_getpgtccfgrx(struct net_device *netdev, int prio,
  43. u8 *prio_type, u8 *pgid, u8 *bw_pct,
  44. u8 *up_map)
  45. {
  46. struct qede_dev *edev = netdev_priv(netdev);
  47. edev->ops->dcb->getpgtccfgrx(edev->cdev, prio, prio_type, pgid, bw_pct,
  48. up_map);
  49. }
  50. static void qede_dcbnl_getpgbwgcfgrx(struct net_device *netdev,
  51. int pgid, u8 *bw_pct)
  52. {
  53. struct qede_dev *edev = netdev_priv(netdev);
  54. edev->ops->dcb->getpgbwgcfgrx(edev->cdev, pgid, bw_pct);
  55. }
  56. static void qede_dcbnl_getpfccfg(struct net_device *netdev, int prio,
  57. u8 *setting)
  58. {
  59. struct qede_dev *edev = netdev_priv(netdev);
  60. edev->ops->dcb->getpfccfg(edev->cdev, prio, setting);
  61. }
  62. static void qede_dcbnl_setpfccfg(struct net_device *netdev, int prio,
  63. u8 setting)
  64. {
  65. struct qede_dev *edev = netdev_priv(netdev);
  66. edev->ops->dcb->setpfccfg(edev->cdev, prio, setting);
  67. }
  68. static u8 qede_dcbnl_getcap(struct net_device *netdev, int capid, u8 *cap)
  69. {
  70. struct qede_dev *edev = netdev_priv(netdev);
  71. return edev->ops->dcb->getcap(edev->cdev, capid, cap);
  72. }
  73. static int qede_dcbnl_getnumtcs(struct net_device *netdev, int tcid, u8 *num)
  74. {
  75. struct qede_dev *edev = netdev_priv(netdev);
  76. return edev->ops->dcb->getnumtcs(edev->cdev, tcid, num);
  77. }
  78. static u8 qede_dcbnl_getpfcstate(struct net_device *netdev)
  79. {
  80. struct qede_dev *edev = netdev_priv(netdev);
  81. return edev->ops->dcb->getpfcstate(edev->cdev);
  82. }
  83. static int qede_dcbnl_getapp(struct net_device *netdev, u8 idtype, u16 id)
  84. {
  85. struct qede_dev *edev = netdev_priv(netdev);
  86. return edev->ops->dcb->getapp(edev->cdev, idtype, id);
  87. }
  88. static u8 qede_dcbnl_getdcbx(struct net_device *netdev)
  89. {
  90. struct qede_dev *edev = netdev_priv(netdev);
  91. return edev->ops->dcb->getdcbx(edev->cdev);
  92. }
  93. static void qede_dcbnl_setpgtccfgtx(struct net_device *netdev, int prio,
  94. u8 pri_type, u8 pgid, u8 bw_pct, u8 up_map)
  95. {
  96. struct qede_dev *edev = netdev_priv(netdev);
  97. return edev->ops->dcb->setpgtccfgtx(edev->cdev, prio, pri_type, pgid,
  98. bw_pct, up_map);
  99. }
  100. static void qede_dcbnl_setpgtccfgrx(struct net_device *netdev, int prio,
  101. u8 pri_type, u8 pgid, u8 bw_pct, u8 up_map)
  102. {
  103. struct qede_dev *edev = netdev_priv(netdev);
  104. return edev->ops->dcb->setpgtccfgrx(edev->cdev, prio, pri_type, pgid,
  105. bw_pct, up_map);
  106. }
  107. static void qede_dcbnl_setpgbwgcfgtx(struct net_device *netdev, int pgid,
  108. u8 bw_pct)
  109. {
  110. struct qede_dev *edev = netdev_priv(netdev);
  111. return edev->ops->dcb->setpgbwgcfgtx(edev->cdev, pgid, bw_pct);
  112. }
  113. static void qede_dcbnl_setpgbwgcfgrx(struct net_device *netdev, int pgid,
  114. u8 bw_pct)
  115. {
  116. struct qede_dev *edev = netdev_priv(netdev);
  117. return edev->ops->dcb->setpgbwgcfgrx(edev->cdev, pgid, bw_pct);
  118. }
  119. static u8 qede_dcbnl_setall(struct net_device *netdev)
  120. {
  121. struct qede_dev *edev = netdev_priv(netdev);
  122. return edev->ops->dcb->setall(edev->cdev);
  123. }
  124. static int qede_dcbnl_setnumtcs(struct net_device *netdev, int tcid, u8 num)
  125. {
  126. struct qede_dev *edev = netdev_priv(netdev);
  127. return edev->ops->dcb->setnumtcs(edev->cdev, tcid, num);
  128. }
  129. static void qede_dcbnl_setpfcstate(struct net_device *netdev, u8 state)
  130. {
  131. struct qede_dev *edev = netdev_priv(netdev);
  132. return edev->ops->dcb->setpfcstate(edev->cdev, state);
  133. }
  134. static int qede_dcbnl_setapp(struct net_device *netdev, u8 idtype, u16 idval,
  135. u8 up)
  136. {
  137. struct qede_dev *edev = netdev_priv(netdev);
  138. return edev->ops->dcb->setapp(edev->cdev, idtype, idval, up);
  139. }
  140. static u8 qede_dcbnl_setdcbx(struct net_device *netdev, u8 state)
  141. {
  142. struct qede_dev *edev = netdev_priv(netdev);
  143. return edev->ops->dcb->setdcbx(edev->cdev, state);
  144. }
  145. static u8 qede_dcbnl_getfeatcfg(struct net_device *netdev, int featid,
  146. u8 *flags)
  147. {
  148. struct qede_dev *edev = netdev_priv(netdev);
  149. return edev->ops->dcb->getfeatcfg(edev->cdev, featid, flags);
  150. }
  151. static u8 qede_dcbnl_setfeatcfg(struct net_device *netdev, int featid, u8 flags)
  152. {
  153. struct qede_dev *edev = netdev_priv(netdev);
  154. return edev->ops->dcb->setfeatcfg(edev->cdev, featid, flags);
  155. }
  156. static int qede_dcbnl_peer_getappinfo(struct net_device *netdev,
  157. struct dcb_peer_app_info *info,
  158. u16 *count)
  159. {
  160. struct qede_dev *edev = netdev_priv(netdev);
  161. return edev->ops->dcb->peer_getappinfo(edev->cdev, info, count);
  162. }
  163. static int qede_dcbnl_peer_getapptable(struct net_device *netdev,
  164. struct dcb_app *app)
  165. {
  166. struct qede_dev *edev = netdev_priv(netdev);
  167. return edev->ops->dcb->peer_getapptable(edev->cdev, app);
  168. }
  169. static int qede_dcbnl_cee_peer_getpfc(struct net_device *netdev,
  170. struct cee_pfc *pfc)
  171. {
  172. struct qede_dev *edev = netdev_priv(netdev);
  173. return edev->ops->dcb->cee_peer_getpfc(edev->cdev, pfc);
  174. }
  175. static int qede_dcbnl_cee_peer_getpg(struct net_device *netdev,
  176. struct cee_pg *pg)
  177. {
  178. struct qede_dev *edev = netdev_priv(netdev);
  179. return edev->ops->dcb->cee_peer_getpg(edev->cdev, pg);
  180. }
  181. static int qede_dcbnl_ieee_getpfc(struct net_device *netdev,
  182. struct ieee_pfc *pfc)
  183. {
  184. struct qede_dev *edev = netdev_priv(netdev);
  185. return edev->ops->dcb->ieee_getpfc(edev->cdev, pfc);
  186. }
  187. static int qede_dcbnl_ieee_setpfc(struct net_device *netdev,
  188. struct ieee_pfc *pfc)
  189. {
  190. struct qede_dev *edev = netdev_priv(netdev);
  191. return edev->ops->dcb->ieee_setpfc(edev->cdev, pfc);
  192. }
  193. static int qede_dcbnl_ieee_getets(struct net_device *netdev,
  194. struct ieee_ets *ets)
  195. {
  196. struct qede_dev *edev = netdev_priv(netdev);
  197. return edev->ops->dcb->ieee_getets(edev->cdev, ets);
  198. }
  199. static int qede_dcbnl_ieee_setets(struct net_device *netdev,
  200. struct ieee_ets *ets)
  201. {
  202. struct qede_dev *edev = netdev_priv(netdev);
  203. return edev->ops->dcb->ieee_setets(edev->cdev, ets);
  204. }
  205. static int qede_dcbnl_ieee_getapp(struct net_device *netdev,
  206. struct dcb_app *app)
  207. {
  208. struct qede_dev *edev = netdev_priv(netdev);
  209. return edev->ops->dcb->ieee_getapp(edev->cdev, app);
  210. }
  211. static int qede_dcbnl_ieee_setapp(struct net_device *netdev,
  212. struct dcb_app *app)
  213. {
  214. struct qede_dev *edev = netdev_priv(netdev);
  215. return edev->ops->dcb->ieee_setapp(edev->cdev, app);
  216. }
  217. static int qede_dcbnl_ieee_peer_getpfc(struct net_device *netdev,
  218. struct ieee_pfc *pfc)
  219. {
  220. struct qede_dev *edev = netdev_priv(netdev);
  221. return edev->ops->dcb->ieee_peer_getpfc(edev->cdev, pfc);
  222. }
  223. static int qede_dcbnl_ieee_peer_getets(struct net_device *netdev,
  224. struct ieee_ets *ets)
  225. {
  226. struct qede_dev *edev = netdev_priv(netdev);
  227. return edev->ops->dcb->ieee_peer_getets(edev->cdev, ets);
  228. }
  229. static const struct dcbnl_rtnl_ops qede_dcbnl_ops = {
  230. .ieee_getpfc = qede_dcbnl_ieee_getpfc,
  231. .ieee_setpfc = qede_dcbnl_ieee_setpfc,
  232. .ieee_getets = qede_dcbnl_ieee_getets,
  233. .ieee_setets = qede_dcbnl_ieee_setets,
  234. .ieee_getapp = qede_dcbnl_ieee_getapp,
  235. .ieee_setapp = qede_dcbnl_ieee_setapp,
  236. .getdcbx = qede_dcbnl_getdcbx,
  237. .ieee_peer_getpfc = qede_dcbnl_ieee_peer_getpfc,
  238. .ieee_peer_getets = qede_dcbnl_ieee_peer_getets,
  239. .getstate = qede_dcbnl_getstate,
  240. .setstate = qede_dcbnl_setstate,
  241. .getpermhwaddr = qede_dcbnl_getpermhwaddr,
  242. .getpgtccfgtx = qede_dcbnl_getpgtccfgtx,
  243. .getpgbwgcfgtx = qede_dcbnl_getpgbwgcfgtx,
  244. .getpgtccfgrx = qede_dcbnl_getpgtccfgrx,
  245. .getpgbwgcfgrx = qede_dcbnl_getpgbwgcfgrx,
  246. .getpfccfg = qede_dcbnl_getpfccfg,
  247. .setpfccfg = qede_dcbnl_setpfccfg,
  248. .getcap = qede_dcbnl_getcap,
  249. .getnumtcs = qede_dcbnl_getnumtcs,
  250. .getpfcstate = qede_dcbnl_getpfcstate,
  251. .getapp = qede_dcbnl_getapp,
  252. .getdcbx = qede_dcbnl_getdcbx,
  253. .setpgtccfgtx = qede_dcbnl_setpgtccfgtx,
  254. .setpgtccfgrx = qede_dcbnl_setpgtccfgrx,
  255. .setpgbwgcfgtx = qede_dcbnl_setpgbwgcfgtx,
  256. .setpgbwgcfgrx = qede_dcbnl_setpgbwgcfgrx,
  257. .setall = qede_dcbnl_setall,
  258. .setnumtcs = qede_dcbnl_setnumtcs,
  259. .setpfcstate = qede_dcbnl_setpfcstate,
  260. .setapp = qede_dcbnl_setapp,
  261. .setdcbx = qede_dcbnl_setdcbx,
  262. .setfeatcfg = qede_dcbnl_setfeatcfg,
  263. .getfeatcfg = qede_dcbnl_getfeatcfg,
  264. .peer_getappinfo = qede_dcbnl_peer_getappinfo,
  265. .peer_getapptable = qede_dcbnl_peer_getapptable,
  266. .cee_peer_getpfc = qede_dcbnl_cee_peer_getpfc,
  267. .cee_peer_getpg = qede_dcbnl_cee_peer_getpg,
  268. };
  269. void qede_set_dcbnl_ops(struct net_device *dev)
  270. {
  271. dev->dcbnl_ops = &qede_dcbnl_ops;
  272. }