Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
0002 /* QLogic qede NIC Driver
0003  * Copyright (c) 2015 QLogic Corporation
0004  * Copyright (c) 2019-2020 Marvell International Ltd.
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 }