linux/drivers/net/ethernet/qlogic/qede/qede_dcbnl.c
<<
>>
Prefs
   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
   9#include <linux/types.h>
  10#include <linux/netdevice.h>
  11#include <linux/rtnetlink.h>
  12#include <net/dcbnl.h>
  13#include "qede.h"
  14
  15static u8 qede_dcbnl_getstate(struct net_device *netdev)
  16{
  17        struct qede_dev *edev = netdev_priv(netdev);
  18
  19        return edev->ops->dcb->getstate(edev->cdev);
  20}
  21
  22static u8 qede_dcbnl_setstate(struct net_device *netdev, u8 state)
  23{
  24        struct qede_dev *edev = netdev_priv(netdev);
  25
  26        return edev->ops->dcb->setstate(edev->cdev, state);
  27}
  28
  29static void qede_dcbnl_getpermhwaddr(struct net_device *netdev,
  30                                     u8 *perm_addr)
  31{
  32        memcpy(perm_addr, netdev->dev_addr, netdev->addr_len);
  33}
  34
  35static void qede_dcbnl_getpgtccfgtx(struct net_device *netdev, int prio,
  36                                    u8 *prio_type, u8 *pgid, u8 *bw_pct,
  37                                    u8 *up_map)
  38{
  39        struct qede_dev *edev = netdev_priv(netdev);
  40
  41        edev->ops->dcb->getpgtccfgtx(edev->cdev, prio, prio_type,
  42                                     pgid, bw_pct, up_map);
  43}
  44
  45static void qede_dcbnl_getpgbwgcfgtx(struct net_device *netdev,
  46                                     int pgid, u8 *bw_pct)
  47{
  48        struct qede_dev *edev = netdev_priv(netdev);
  49
  50        edev->ops->dcb->getpgbwgcfgtx(edev->cdev, pgid, bw_pct);
  51}
  52
  53static void qede_dcbnl_getpgtccfgrx(struct net_device *netdev, int prio,
  54                                    u8 *prio_type, u8 *pgid, u8 *bw_pct,
  55                                    u8 *up_map)
  56{
  57        struct qede_dev *edev = netdev_priv(netdev);
  58
  59        edev->ops->dcb->getpgtccfgrx(edev->cdev, prio, prio_type, pgid, bw_pct,
  60                                     up_map);
  61}
  62
  63static void qede_dcbnl_getpgbwgcfgrx(struct net_device *netdev,
  64                                     int pgid, u8 *bw_pct)
  65{
  66        struct qede_dev *edev = netdev_priv(netdev);
  67
  68        edev->ops->dcb->getpgbwgcfgrx(edev->cdev, pgid, bw_pct);
  69}
  70
  71static void qede_dcbnl_getpfccfg(struct net_device *netdev, int prio,
  72                                 u8 *setting)
  73{
  74        struct qede_dev *edev = netdev_priv(netdev);
  75
  76        edev->ops->dcb->getpfccfg(edev->cdev, prio, setting);
  77}
  78
  79static void qede_dcbnl_setpfccfg(struct net_device *netdev, int prio,
  80                                 u8 setting)
  81{
  82        struct qede_dev *edev = netdev_priv(netdev);
  83
  84        edev->ops->dcb->setpfccfg(edev->cdev, prio, setting);
  85}
  86
  87static u8 qede_dcbnl_getcap(struct net_device *netdev, int capid, u8 *cap)
  88{
  89        struct qede_dev *edev = netdev_priv(netdev);
  90
  91        return edev->ops->dcb->getcap(edev->cdev, capid, cap);
  92}
  93
  94static int qede_dcbnl_getnumtcs(struct net_device *netdev, int tcid, u8 *num)
  95{
  96        struct qede_dev *edev = netdev_priv(netdev);
  97
  98        return edev->ops->dcb->getnumtcs(edev->cdev, tcid, num);
  99}
 100
 101static u8 qede_dcbnl_getpfcstate(struct net_device *netdev)
 102{
 103        struct qede_dev *edev = netdev_priv(netdev);
 104
 105        return edev->ops->dcb->getpfcstate(edev->cdev);
 106}
 107
 108static int qede_dcbnl_getapp(struct net_device *netdev, u8 idtype, u16 id)
 109{
 110        struct qede_dev *edev = netdev_priv(netdev);
 111
 112        return edev->ops->dcb->getapp(edev->cdev, idtype, id);
 113}
 114
 115static u8 qede_dcbnl_getdcbx(struct net_device *netdev)
 116{
 117        struct qede_dev *edev = netdev_priv(netdev);
 118
 119        return edev->ops->dcb->getdcbx(edev->cdev);
 120}
 121
 122static void qede_dcbnl_setpgtccfgtx(struct net_device *netdev, int prio,
 123                                    u8 pri_type, u8 pgid, u8 bw_pct, u8 up_map)
 124{
 125        struct qede_dev *edev = netdev_priv(netdev);
 126
 127        return edev->ops->dcb->setpgtccfgtx(edev->cdev, prio, pri_type, pgid,
 128                                            bw_pct, up_map);
 129}
 130
 131static void qede_dcbnl_setpgtccfgrx(struct net_device *netdev, int prio,
 132                                    u8 pri_type, u8 pgid, u8 bw_pct, u8 up_map)
 133{
 134        struct qede_dev *edev = netdev_priv(netdev);
 135
 136        return edev->ops->dcb->setpgtccfgrx(edev->cdev, prio, pri_type, pgid,
 137                                            bw_pct, up_map);
 138}
 139
 140static void qede_dcbnl_setpgbwgcfgtx(struct net_device *netdev, int pgid,
 141                                     u8 bw_pct)
 142{
 143        struct qede_dev *edev = netdev_priv(netdev);
 144
 145        return edev->ops->dcb->setpgbwgcfgtx(edev->cdev, pgid, bw_pct);
 146}
 147
 148static void qede_dcbnl_setpgbwgcfgrx(struct net_device *netdev, int pgid,
 149                                     u8 bw_pct)
 150{
 151        struct qede_dev *edev = netdev_priv(netdev);
 152
 153        return edev->ops->dcb->setpgbwgcfgrx(edev->cdev, pgid, bw_pct);
 154}
 155
 156static u8 qede_dcbnl_setall(struct net_device *netdev)
 157{
 158        struct qede_dev *edev = netdev_priv(netdev);
 159
 160        return edev->ops->dcb->setall(edev->cdev);
 161}
 162
 163static int qede_dcbnl_setnumtcs(struct net_device *netdev, int tcid, u8 num)
 164{
 165        struct qede_dev *edev = netdev_priv(netdev);
 166
 167        return edev->ops->dcb->setnumtcs(edev->cdev, tcid, num);
 168}
 169
 170static void qede_dcbnl_setpfcstate(struct net_device *netdev, u8 state)
 171{
 172        struct qede_dev *edev = netdev_priv(netdev);
 173
 174        return edev->ops->dcb->setpfcstate(edev->cdev, state);
 175}
 176
 177static int qede_dcbnl_setapp(struct net_device *netdev, u8 idtype, u16 idval,
 178                             u8 up)
 179{
 180        struct qede_dev *edev = netdev_priv(netdev);
 181
 182        return edev->ops->dcb->setapp(edev->cdev, idtype, idval, up);
 183}
 184
 185static u8 qede_dcbnl_setdcbx(struct net_device *netdev, u8 state)
 186{
 187        struct qede_dev *edev = netdev_priv(netdev);
 188
 189        return edev->ops->dcb->setdcbx(edev->cdev, state);
 190}
 191
 192static u8 qede_dcbnl_getfeatcfg(struct net_device *netdev, int featid,
 193                                u8 *flags)
 194{
 195        struct qede_dev *edev = netdev_priv(netdev);
 196
 197        return edev->ops->dcb->getfeatcfg(edev->cdev, featid, flags);
 198}
 199
 200static u8 qede_dcbnl_setfeatcfg(struct net_device *netdev, int featid, u8 flags)
 201{
 202        struct qede_dev *edev = netdev_priv(netdev);
 203
 204        return edev->ops->dcb->setfeatcfg(edev->cdev, featid, flags);
 205}
 206
 207static int qede_dcbnl_peer_getappinfo(struct net_device *netdev,
 208                                      struct dcb_peer_app_info *info,
 209                                      u16 *count)
 210{
 211        struct qede_dev *edev = netdev_priv(netdev);
 212
 213        return edev->ops->dcb->peer_getappinfo(edev->cdev, info, count);
 214}
 215
 216static int qede_dcbnl_peer_getapptable(struct net_device *netdev,
 217                                       struct dcb_app *app)
 218{
 219        struct qede_dev *edev = netdev_priv(netdev);
 220
 221        return edev->ops->dcb->peer_getapptable(edev->cdev, app);
 222}
 223
 224static int qede_dcbnl_cee_peer_getpfc(struct net_device *netdev,
 225                                      struct cee_pfc *pfc)
 226{
 227        struct qede_dev *edev = netdev_priv(netdev);
 228
 229        return edev->ops->dcb->cee_peer_getpfc(edev->cdev, pfc);
 230}
 231
 232static int qede_dcbnl_cee_peer_getpg(struct net_device *netdev,
 233                                     struct cee_pg *pg)
 234{
 235        struct qede_dev *edev = netdev_priv(netdev);
 236
 237        return edev->ops->dcb->cee_peer_getpg(edev->cdev, pg);
 238}
 239
 240static int qede_dcbnl_ieee_getpfc(struct net_device *netdev,
 241                                  struct ieee_pfc *pfc)
 242{
 243        struct qede_dev *edev = netdev_priv(netdev);
 244
 245        return edev->ops->dcb->ieee_getpfc(edev->cdev, pfc);
 246}
 247
 248static int qede_dcbnl_ieee_setpfc(struct net_device *netdev,
 249                                  struct ieee_pfc *pfc)
 250{
 251        struct qede_dev *edev = netdev_priv(netdev);
 252
 253        return edev->ops->dcb->ieee_setpfc(edev->cdev, pfc);
 254}
 255
 256static int qede_dcbnl_ieee_getets(struct net_device *netdev,
 257                                  struct ieee_ets *ets)
 258{
 259        struct qede_dev *edev = netdev_priv(netdev);
 260
 261        return edev->ops->dcb->ieee_getets(edev->cdev, ets);
 262}
 263
 264static int qede_dcbnl_ieee_setets(struct net_device *netdev,
 265                                  struct ieee_ets *ets)
 266{
 267        struct qede_dev *edev = netdev_priv(netdev);
 268
 269        return edev->ops->dcb->ieee_setets(edev->cdev, ets);
 270}
 271
 272static int qede_dcbnl_ieee_getapp(struct net_device *netdev,
 273                                  struct dcb_app *app)
 274{
 275        struct qede_dev *edev = netdev_priv(netdev);
 276
 277        return edev->ops->dcb->ieee_getapp(edev->cdev, app);
 278}
 279
 280static int qede_dcbnl_ieee_setapp(struct net_device *netdev,
 281                                  struct dcb_app *app)
 282{
 283        struct qede_dev *edev = netdev_priv(netdev);
 284        int err;
 285
 286        err = dcb_ieee_setapp(netdev, app);
 287        if (err)
 288                return err;
 289
 290        return edev->ops->dcb->ieee_setapp(edev->cdev, app);
 291}
 292
 293static int qede_dcbnl_ieee_peer_getpfc(struct net_device *netdev,
 294                                       struct ieee_pfc *pfc)
 295{
 296        struct qede_dev *edev = netdev_priv(netdev);
 297
 298        return edev->ops->dcb->ieee_peer_getpfc(edev->cdev, pfc);
 299}
 300
 301static int qede_dcbnl_ieee_peer_getets(struct net_device *netdev,
 302                                       struct ieee_ets *ets)
 303{
 304        struct qede_dev *edev = netdev_priv(netdev);
 305
 306        return edev->ops->dcb->ieee_peer_getets(edev->cdev, ets);
 307}
 308
 309static const struct dcbnl_rtnl_ops qede_dcbnl_ops = {
 310        .ieee_getpfc = qede_dcbnl_ieee_getpfc,
 311        .ieee_setpfc = qede_dcbnl_ieee_setpfc,
 312        .ieee_getets = qede_dcbnl_ieee_getets,
 313        .ieee_setets = qede_dcbnl_ieee_setets,
 314        .ieee_getapp = qede_dcbnl_ieee_getapp,
 315        .ieee_setapp = qede_dcbnl_ieee_setapp,
 316        .ieee_peer_getpfc = qede_dcbnl_ieee_peer_getpfc,
 317        .ieee_peer_getets = qede_dcbnl_ieee_peer_getets,
 318        .getstate = qede_dcbnl_getstate,
 319        .setstate = qede_dcbnl_setstate,
 320        .getpermhwaddr = qede_dcbnl_getpermhwaddr,
 321        .getpgtccfgtx = qede_dcbnl_getpgtccfgtx,
 322        .getpgbwgcfgtx = qede_dcbnl_getpgbwgcfgtx,
 323        .getpgtccfgrx = qede_dcbnl_getpgtccfgrx,
 324        .getpgbwgcfgrx = qede_dcbnl_getpgbwgcfgrx,
 325        .getpfccfg = qede_dcbnl_getpfccfg,
 326        .setpfccfg = qede_dcbnl_setpfccfg,
 327        .getcap = qede_dcbnl_getcap,
 328        .getnumtcs = qede_dcbnl_getnumtcs,
 329        .getpfcstate = qede_dcbnl_getpfcstate,
 330        .getapp = qede_dcbnl_getapp,
 331        .getdcbx = qede_dcbnl_getdcbx,
 332        .setpgtccfgtx = qede_dcbnl_setpgtccfgtx,
 333        .setpgtccfgrx = qede_dcbnl_setpgtccfgrx,
 334        .setpgbwgcfgtx = qede_dcbnl_setpgbwgcfgtx,
 335        .setpgbwgcfgrx = qede_dcbnl_setpgbwgcfgrx,
 336        .setall = qede_dcbnl_setall,
 337        .setnumtcs = qede_dcbnl_setnumtcs,
 338        .setpfcstate = qede_dcbnl_setpfcstate,
 339        .setapp = qede_dcbnl_setapp,
 340        .setdcbx = qede_dcbnl_setdcbx,
 341        .setfeatcfg = qede_dcbnl_setfeatcfg,
 342        .getfeatcfg = qede_dcbnl_getfeatcfg,
 343        .peer_getappinfo = qede_dcbnl_peer_getappinfo,
 344        .peer_getapptable = qede_dcbnl_peer_getapptable,
 345        .cee_peer_getpfc = qede_dcbnl_cee_peer_getpfc,
 346        .cee_peer_getpg = qede_dcbnl_cee_peer_getpg,
 347};
 348
 349void qede_set_dcbnl_ops(struct net_device *dev)
 350{
 351        dev->dcbnl_ops = &qede_dcbnl_ops;
 352}
 353