0001
0002
0003
0004
0005
0006
0007 #include <linux/types.h>
0008 #include <linux/netdevice.h>
0009 #include <linux/rtnetlink.h>
0010 #include <net/dcbnl.h>
0011 #include "qede.h"
0012
0013 static u8 qede_dcbnl_getstate(struct net_device *netdev)
0014 {
0015 struct qede_dev *edev = netdev_priv(netdev);
0016
0017 return edev->ops->dcb->getstate(edev->cdev);
0018 }
0019
0020 static u8 qede_dcbnl_setstate(struct net_device *netdev, u8 state)
0021 {
0022 struct qede_dev *edev = netdev_priv(netdev);
0023
0024 return edev->ops->dcb->setstate(edev->cdev, state);
0025 }
0026
0027 static void qede_dcbnl_getpermhwaddr(struct net_device *netdev,
0028 u8 *perm_addr)
0029 {
0030 memcpy(perm_addr, netdev->dev_addr, netdev->addr_len);
0031 }
0032
0033 static void qede_dcbnl_getpgtccfgtx(struct net_device *netdev, int prio,
0034 u8 *prio_type, u8 *pgid, u8 *bw_pct,
0035 u8 *up_map)
0036 {
0037 struct qede_dev *edev = netdev_priv(netdev);
0038
0039 edev->ops->dcb->getpgtccfgtx(edev->cdev, prio, prio_type,
0040 pgid, bw_pct, up_map);
0041 }
0042
0043 static void qede_dcbnl_getpgbwgcfgtx(struct net_device *netdev,
0044 int pgid, u8 *bw_pct)
0045 {
0046 struct qede_dev *edev = netdev_priv(netdev);
0047
0048 edev->ops->dcb->getpgbwgcfgtx(edev->cdev, pgid, bw_pct);
0049 }
0050
0051 static void qede_dcbnl_getpgtccfgrx(struct net_device *netdev, int prio,
0052 u8 *prio_type, u8 *pgid, u8 *bw_pct,
0053 u8 *up_map)
0054 {
0055 struct qede_dev *edev = netdev_priv(netdev);
0056
0057 edev->ops->dcb->getpgtccfgrx(edev->cdev, prio, prio_type, pgid, bw_pct,
0058 up_map);
0059 }
0060
0061 static void qede_dcbnl_getpgbwgcfgrx(struct net_device *netdev,
0062 int pgid, u8 *bw_pct)
0063 {
0064 struct qede_dev *edev = netdev_priv(netdev);
0065
0066 edev->ops->dcb->getpgbwgcfgrx(edev->cdev, pgid, bw_pct);
0067 }
0068
0069 static void qede_dcbnl_getpfccfg(struct net_device *netdev, int prio,
0070 u8 *setting)
0071 {
0072 struct qede_dev *edev = netdev_priv(netdev);
0073
0074 edev->ops->dcb->getpfccfg(edev->cdev, prio, setting);
0075 }
0076
0077 static void qede_dcbnl_setpfccfg(struct net_device *netdev, int prio,
0078 u8 setting)
0079 {
0080 struct qede_dev *edev = netdev_priv(netdev);
0081
0082 edev->ops->dcb->setpfccfg(edev->cdev, prio, setting);
0083 }
0084
0085 static u8 qede_dcbnl_getcap(struct net_device *netdev, int capid, u8 *cap)
0086 {
0087 struct qede_dev *edev = netdev_priv(netdev);
0088
0089 return edev->ops->dcb->getcap(edev->cdev, capid, cap);
0090 }
0091
0092 static int qede_dcbnl_getnumtcs(struct net_device *netdev, int tcid, u8 *num)
0093 {
0094 struct qede_dev *edev = netdev_priv(netdev);
0095
0096 return edev->ops->dcb->getnumtcs(edev->cdev, tcid, num);
0097 }
0098
0099 static u8 qede_dcbnl_getpfcstate(struct net_device *netdev)
0100 {
0101 struct qede_dev *edev = netdev_priv(netdev);
0102
0103 return edev->ops->dcb->getpfcstate(edev->cdev);
0104 }
0105
0106 static int qede_dcbnl_getapp(struct net_device *netdev, u8 idtype, u16 id)
0107 {
0108 struct qede_dev *edev = netdev_priv(netdev);
0109
0110 return edev->ops->dcb->getapp(edev->cdev, idtype, id);
0111 }
0112
0113 static u8 qede_dcbnl_getdcbx(struct net_device *netdev)
0114 {
0115 struct qede_dev *edev = netdev_priv(netdev);
0116
0117 return edev->ops->dcb->getdcbx(edev->cdev);
0118 }
0119
0120 static void qede_dcbnl_setpgtccfgtx(struct net_device *netdev, int prio,
0121 u8 pri_type, u8 pgid, u8 bw_pct, u8 up_map)
0122 {
0123 struct qede_dev *edev = netdev_priv(netdev);
0124
0125 return edev->ops->dcb->setpgtccfgtx(edev->cdev, prio, pri_type, pgid,
0126 bw_pct, up_map);
0127 }
0128
0129 static void qede_dcbnl_setpgtccfgrx(struct net_device *netdev, int prio,
0130 u8 pri_type, u8 pgid, u8 bw_pct, u8 up_map)
0131 {
0132 struct qede_dev *edev = netdev_priv(netdev);
0133
0134 return edev->ops->dcb->setpgtccfgrx(edev->cdev, prio, pri_type, pgid,
0135 bw_pct, up_map);
0136 }
0137
0138 static void qede_dcbnl_setpgbwgcfgtx(struct net_device *netdev, int pgid,
0139 u8 bw_pct)
0140 {
0141 struct qede_dev *edev = netdev_priv(netdev);
0142
0143 return edev->ops->dcb->setpgbwgcfgtx(edev->cdev, pgid, bw_pct);
0144 }
0145
0146 static void qede_dcbnl_setpgbwgcfgrx(struct net_device *netdev, int pgid,
0147 u8 bw_pct)
0148 {
0149 struct qede_dev *edev = netdev_priv(netdev);
0150
0151 return edev->ops->dcb->setpgbwgcfgrx(edev->cdev, pgid, bw_pct);
0152 }
0153
0154 static u8 qede_dcbnl_setall(struct net_device *netdev)
0155 {
0156 struct qede_dev *edev = netdev_priv(netdev);
0157
0158 return edev->ops->dcb->setall(edev->cdev);
0159 }
0160
0161 static int qede_dcbnl_setnumtcs(struct net_device *netdev, int tcid, u8 num)
0162 {
0163 struct qede_dev *edev = netdev_priv(netdev);
0164
0165 return edev->ops->dcb->setnumtcs(edev->cdev, tcid, num);
0166 }
0167
0168 static void qede_dcbnl_setpfcstate(struct net_device *netdev, u8 state)
0169 {
0170 struct qede_dev *edev = netdev_priv(netdev);
0171
0172 return edev->ops->dcb->setpfcstate(edev->cdev, state);
0173 }
0174
0175 static int qede_dcbnl_setapp(struct net_device *netdev, u8 idtype, u16 idval,
0176 u8 up)
0177 {
0178 struct qede_dev *edev = netdev_priv(netdev);
0179
0180 return edev->ops->dcb->setapp(edev->cdev, idtype, idval, up);
0181 }
0182
0183 static u8 qede_dcbnl_setdcbx(struct net_device *netdev, u8 state)
0184 {
0185 struct qede_dev *edev = netdev_priv(netdev);
0186
0187 return edev->ops->dcb->setdcbx(edev->cdev, state);
0188 }
0189
0190 static u8 qede_dcbnl_getfeatcfg(struct net_device *netdev, int featid,
0191 u8 *flags)
0192 {
0193 struct qede_dev *edev = netdev_priv(netdev);
0194
0195 return edev->ops->dcb->getfeatcfg(edev->cdev, featid, flags);
0196 }
0197
0198 static u8 qede_dcbnl_setfeatcfg(struct net_device *netdev, int featid, u8 flags)
0199 {
0200 struct qede_dev *edev = netdev_priv(netdev);
0201
0202 return edev->ops->dcb->setfeatcfg(edev->cdev, featid, flags);
0203 }
0204
0205 static int qede_dcbnl_peer_getappinfo(struct net_device *netdev,
0206 struct dcb_peer_app_info *info,
0207 u16 *count)
0208 {
0209 struct qede_dev *edev = netdev_priv(netdev);
0210
0211 return edev->ops->dcb->peer_getappinfo(edev->cdev, info, count);
0212 }
0213
0214 static int qede_dcbnl_peer_getapptable(struct net_device *netdev,
0215 struct dcb_app *app)
0216 {
0217 struct qede_dev *edev = netdev_priv(netdev);
0218
0219 return edev->ops->dcb->peer_getapptable(edev->cdev, app);
0220 }
0221
0222 static int qede_dcbnl_cee_peer_getpfc(struct net_device *netdev,
0223 struct cee_pfc *pfc)
0224 {
0225 struct qede_dev *edev = netdev_priv(netdev);
0226
0227 return edev->ops->dcb->cee_peer_getpfc(edev->cdev, pfc);
0228 }
0229
0230 static int qede_dcbnl_cee_peer_getpg(struct net_device *netdev,
0231 struct cee_pg *pg)
0232 {
0233 struct qede_dev *edev = netdev_priv(netdev);
0234
0235 return edev->ops->dcb->cee_peer_getpg(edev->cdev, pg);
0236 }
0237
0238 static int qede_dcbnl_ieee_getpfc(struct net_device *netdev,
0239 struct ieee_pfc *pfc)
0240 {
0241 struct qede_dev *edev = netdev_priv(netdev);
0242
0243 return edev->ops->dcb->ieee_getpfc(edev->cdev, pfc);
0244 }
0245
0246 static int qede_dcbnl_ieee_setpfc(struct net_device *netdev,
0247 struct ieee_pfc *pfc)
0248 {
0249 struct qede_dev *edev = netdev_priv(netdev);
0250
0251 return edev->ops->dcb->ieee_setpfc(edev->cdev, pfc);
0252 }
0253
0254 static int qede_dcbnl_ieee_getets(struct net_device *netdev,
0255 struct ieee_ets *ets)
0256 {
0257 struct qede_dev *edev = netdev_priv(netdev);
0258
0259 return edev->ops->dcb->ieee_getets(edev->cdev, ets);
0260 }
0261
0262 static int qede_dcbnl_ieee_setets(struct net_device *netdev,
0263 struct ieee_ets *ets)
0264 {
0265 struct qede_dev *edev = netdev_priv(netdev);
0266
0267 return edev->ops->dcb->ieee_setets(edev->cdev, ets);
0268 }
0269
0270 static int qede_dcbnl_ieee_getapp(struct net_device *netdev,
0271 struct dcb_app *app)
0272 {
0273 struct qede_dev *edev = netdev_priv(netdev);
0274
0275 return edev->ops->dcb->ieee_getapp(edev->cdev, app);
0276 }
0277
0278 static int qede_dcbnl_ieee_setapp(struct net_device *netdev,
0279 struct dcb_app *app)
0280 {
0281 struct qede_dev *edev = netdev_priv(netdev);
0282 int err;
0283
0284 err = dcb_ieee_setapp(netdev, app);
0285 if (err)
0286 return err;
0287
0288 return edev->ops->dcb->ieee_setapp(edev->cdev, app);
0289 }
0290
0291 static int qede_dcbnl_ieee_peer_getpfc(struct net_device *netdev,
0292 struct ieee_pfc *pfc)
0293 {
0294 struct qede_dev *edev = netdev_priv(netdev);
0295
0296 return edev->ops->dcb->ieee_peer_getpfc(edev->cdev, pfc);
0297 }
0298
0299 static int qede_dcbnl_ieee_peer_getets(struct net_device *netdev,
0300 struct ieee_ets *ets)
0301 {
0302 struct qede_dev *edev = netdev_priv(netdev);
0303
0304 return edev->ops->dcb->ieee_peer_getets(edev->cdev, ets);
0305 }
0306
0307 static const struct dcbnl_rtnl_ops qede_dcbnl_ops = {
0308 .ieee_getpfc = qede_dcbnl_ieee_getpfc,
0309 .ieee_setpfc = qede_dcbnl_ieee_setpfc,
0310 .ieee_getets = qede_dcbnl_ieee_getets,
0311 .ieee_setets = qede_dcbnl_ieee_setets,
0312 .ieee_getapp = qede_dcbnl_ieee_getapp,
0313 .ieee_setapp = qede_dcbnl_ieee_setapp,
0314 .ieee_peer_getpfc = qede_dcbnl_ieee_peer_getpfc,
0315 .ieee_peer_getets = qede_dcbnl_ieee_peer_getets,
0316 .getstate = qede_dcbnl_getstate,
0317 .setstate = qede_dcbnl_setstate,
0318 .getpermhwaddr = qede_dcbnl_getpermhwaddr,
0319 .getpgtccfgtx = qede_dcbnl_getpgtccfgtx,
0320 .getpgbwgcfgtx = qede_dcbnl_getpgbwgcfgtx,
0321 .getpgtccfgrx = qede_dcbnl_getpgtccfgrx,
0322 .getpgbwgcfgrx = qede_dcbnl_getpgbwgcfgrx,
0323 .getpfccfg = qede_dcbnl_getpfccfg,
0324 .setpfccfg = qede_dcbnl_setpfccfg,
0325 .getcap = qede_dcbnl_getcap,
0326 .getnumtcs = qede_dcbnl_getnumtcs,
0327 .getpfcstate = qede_dcbnl_getpfcstate,
0328 .getapp = qede_dcbnl_getapp,
0329 .getdcbx = qede_dcbnl_getdcbx,
0330 .setpgtccfgtx = qede_dcbnl_setpgtccfgtx,
0331 .setpgtccfgrx = qede_dcbnl_setpgtccfgrx,
0332 .setpgbwgcfgtx = qede_dcbnl_setpgbwgcfgtx,
0333 .setpgbwgcfgrx = qede_dcbnl_setpgbwgcfgrx,
0334 .setall = qede_dcbnl_setall,
0335 .setnumtcs = qede_dcbnl_setnumtcs,
0336 .setpfcstate = qede_dcbnl_setpfcstate,
0337 .setapp = qede_dcbnl_setapp,
0338 .setdcbx = qede_dcbnl_setdcbx,
0339 .setfeatcfg = qede_dcbnl_setfeatcfg,
0340 .getfeatcfg = qede_dcbnl_getfeatcfg,
0341 .peer_getappinfo = qede_dcbnl_peer_getappinfo,
0342 .peer_getapptable = qede_dcbnl_peer_getapptable,
0343 .cee_peer_getpfc = qede_dcbnl_cee_peer_getpfc,
0344 .cee_peer_getpg = qede_dcbnl_cee_peer_getpg,
0345 };
0346
0347 void qede_set_dcbnl_ops(struct net_device *dev)
0348 {
0349 dev->dcbnl_ops = &qede_dcbnl_ops;
0350 }