linux/net/dsa/slave.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * net/dsa/slave.c - Slave device handling
   4 * Copyright (c) 2008-2009 Marvell Semiconductor
   5 */
   6
   7#include <linux/list.h>
   8#include <linux/etherdevice.h>
   9#include <linux/netdevice.h>
  10#include <linux/phy.h>
  11#include <linux/phy_fixed.h>
  12#include <linux/phylink.h>
  13#include <linux/of_net.h>
  14#include <linux/of_mdio.h>
  15#include <linux/mdio.h>
  16#include <net/rtnetlink.h>
  17#include <net/pkt_cls.h>
  18#include <net/tc_act/tc_mirred.h>
  19#include <linux/if_bridge.h>
  20#include <linux/netpoll.h>
  21#include <linux/ptp_classify.h>
  22
  23#include "dsa_priv.h"
  24
  25/* slave mii_bus handling ***************************************************/
  26static int dsa_slave_phy_read(struct mii_bus *bus, int addr, int reg)
  27{
  28        struct dsa_switch *ds = bus->priv;
  29
  30        if (ds->phys_mii_mask & (1 << addr))
  31                return ds->ops->phy_read(ds, addr, reg);
  32
  33        return 0xffff;
  34}
  35
  36static int dsa_slave_phy_write(struct mii_bus *bus, int addr, int reg, u16 val)
  37{
  38        struct dsa_switch *ds = bus->priv;
  39
  40        if (ds->phys_mii_mask & (1 << addr))
  41                return ds->ops->phy_write(ds, addr, reg, val);
  42
  43        return 0;
  44}
  45
  46void dsa_slave_mii_bus_init(struct dsa_switch *ds)
  47{
  48        ds->slave_mii_bus->priv = (void *)ds;
  49        ds->slave_mii_bus->name = "dsa slave smi";
  50        ds->slave_mii_bus->read = dsa_slave_phy_read;
  51        ds->slave_mii_bus->write = dsa_slave_phy_write;
  52        snprintf(ds->slave_mii_bus->id, MII_BUS_ID_SIZE, "dsa-%d.%d",
  53                 ds->dst->index, ds->index);
  54        ds->slave_mii_bus->parent = ds->dev;
  55        ds->slave_mii_bus->phy_mask = ~ds->phys_mii_mask;
  56}
  57
  58
  59/* slave device handling ****************************************************/
  60static int dsa_slave_get_iflink(const struct net_device *dev)
  61{
  62        return dsa_slave_to_master(dev)->ifindex;
  63}
  64
  65static int dsa_slave_open(struct net_device *dev)
  66{
  67        struct net_device *master = dsa_slave_to_master(dev);
  68        struct dsa_port *dp = dsa_slave_to_port(dev);
  69        int err;
  70
  71        if (!(master->flags & IFF_UP))
  72                return -ENETDOWN;
  73
  74        if (!ether_addr_equal(dev->dev_addr, master->dev_addr)) {
  75                err = dev_uc_add(master, dev->dev_addr);
  76                if (err < 0)
  77                        goto out;
  78        }
  79
  80        if (dev->flags & IFF_ALLMULTI) {
  81                err = dev_set_allmulti(master, 1);
  82                if (err < 0)
  83                        goto del_unicast;
  84        }
  85        if (dev->flags & IFF_PROMISC) {
  86                err = dev_set_promiscuity(master, 1);
  87                if (err < 0)
  88                        goto clear_allmulti;
  89        }
  90
  91        err = dsa_port_enable_rt(dp, dev->phydev);
  92        if (err)
  93                goto clear_promisc;
  94
  95        return 0;
  96
  97clear_promisc:
  98        if (dev->flags & IFF_PROMISC)
  99                dev_set_promiscuity(master, -1);
 100clear_allmulti:
 101        if (dev->flags & IFF_ALLMULTI)
 102                dev_set_allmulti(master, -1);
 103del_unicast:
 104        if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
 105                dev_uc_del(master, dev->dev_addr);
 106out:
 107        return err;
 108}
 109
 110static int dsa_slave_close(struct net_device *dev)
 111{
 112        struct net_device *master = dsa_slave_to_master(dev);
 113        struct dsa_port *dp = dsa_slave_to_port(dev);
 114
 115        dsa_port_disable_rt(dp);
 116
 117        dev_mc_unsync(master, dev);
 118        dev_uc_unsync(master, dev);
 119        if (dev->flags & IFF_ALLMULTI)
 120                dev_set_allmulti(master, -1);
 121        if (dev->flags & IFF_PROMISC)
 122                dev_set_promiscuity(master, -1);
 123
 124        if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
 125                dev_uc_del(master, dev->dev_addr);
 126
 127        return 0;
 128}
 129
 130static void dsa_slave_change_rx_flags(struct net_device *dev, int change)
 131{
 132        struct net_device *master = dsa_slave_to_master(dev);
 133        if (dev->flags & IFF_UP) {
 134                if (change & IFF_ALLMULTI)
 135                        dev_set_allmulti(master,
 136                                         dev->flags & IFF_ALLMULTI ? 1 : -1);
 137                if (change & IFF_PROMISC)
 138                        dev_set_promiscuity(master,
 139                                            dev->flags & IFF_PROMISC ? 1 : -1);
 140        }
 141}
 142
 143static void dsa_slave_set_rx_mode(struct net_device *dev)
 144{
 145        struct net_device *master = dsa_slave_to_master(dev);
 146
 147        dev_mc_sync(master, dev);
 148        dev_uc_sync(master, dev);
 149}
 150
 151static int dsa_slave_set_mac_address(struct net_device *dev, void *a)
 152{
 153        struct net_device *master = dsa_slave_to_master(dev);
 154        struct sockaddr *addr = a;
 155        int err;
 156
 157        if (!is_valid_ether_addr(addr->sa_data))
 158                return -EADDRNOTAVAIL;
 159
 160        if (!(dev->flags & IFF_UP))
 161                goto out;
 162
 163        if (!ether_addr_equal(addr->sa_data, master->dev_addr)) {
 164                err = dev_uc_add(master, addr->sa_data);
 165                if (err < 0)
 166                        return err;
 167        }
 168
 169        if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
 170                dev_uc_del(master, dev->dev_addr);
 171
 172out:
 173        ether_addr_copy(dev->dev_addr, addr->sa_data);
 174
 175        return 0;
 176}
 177
 178struct dsa_slave_dump_ctx {
 179        struct net_device *dev;
 180        struct sk_buff *skb;
 181        struct netlink_callback *cb;
 182        int idx;
 183};
 184
 185static int
 186dsa_slave_port_fdb_do_dump(const unsigned char *addr, u16 vid,
 187                           bool is_static, void *data)
 188{
 189        struct dsa_slave_dump_ctx *dump = data;
 190        u32 portid = NETLINK_CB(dump->cb->skb).portid;
 191        u32 seq = dump->cb->nlh->nlmsg_seq;
 192        struct nlmsghdr *nlh;
 193        struct ndmsg *ndm;
 194
 195        if (dump->idx < dump->cb->args[2])
 196                goto skip;
 197
 198        nlh = nlmsg_put(dump->skb, portid, seq, RTM_NEWNEIGH,
 199                        sizeof(*ndm), NLM_F_MULTI);
 200        if (!nlh)
 201                return -EMSGSIZE;
 202
 203        ndm = nlmsg_data(nlh);
 204        ndm->ndm_family  = AF_BRIDGE;
 205        ndm->ndm_pad1    = 0;
 206        ndm->ndm_pad2    = 0;
 207        ndm->ndm_flags   = NTF_SELF;
 208        ndm->ndm_type    = 0;
 209        ndm->ndm_ifindex = dump->dev->ifindex;
 210        ndm->ndm_state   = is_static ? NUD_NOARP : NUD_REACHABLE;
 211
 212        if (nla_put(dump->skb, NDA_LLADDR, ETH_ALEN, addr))
 213                goto nla_put_failure;
 214
 215        if (vid && nla_put_u16(dump->skb, NDA_VLAN, vid))
 216                goto nla_put_failure;
 217
 218        nlmsg_end(dump->skb, nlh);
 219
 220skip:
 221        dump->idx++;
 222        return 0;
 223
 224nla_put_failure:
 225        nlmsg_cancel(dump->skb, nlh);
 226        return -EMSGSIZE;
 227}
 228
 229static int
 230dsa_slave_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb,
 231                   struct net_device *dev, struct net_device *filter_dev,
 232                   int *idx)
 233{
 234        struct dsa_port *dp = dsa_slave_to_port(dev);
 235        struct dsa_slave_dump_ctx dump = {
 236                .dev = dev,
 237                .skb = skb,
 238                .cb = cb,
 239                .idx = *idx,
 240        };
 241        int err;
 242
 243        err = dsa_port_fdb_dump(dp, dsa_slave_port_fdb_do_dump, &dump);
 244        *idx = dump.idx;
 245
 246        return err;
 247}
 248
 249static int dsa_slave_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
 250{
 251        struct dsa_slave_priv *p = netdev_priv(dev);
 252        struct dsa_switch *ds = p->dp->ds;
 253        int port = p->dp->index;
 254
 255        /* Pass through to switch driver if it supports timestamping */
 256        switch (cmd) {
 257        case SIOCGHWTSTAMP:
 258                if (ds->ops->port_hwtstamp_get)
 259                        return ds->ops->port_hwtstamp_get(ds, port, ifr);
 260                break;
 261        case SIOCSHWTSTAMP:
 262                if (ds->ops->port_hwtstamp_set)
 263                        return ds->ops->port_hwtstamp_set(ds, port, ifr);
 264                break;
 265        }
 266
 267        return phylink_mii_ioctl(p->dp->pl, ifr, cmd);
 268}
 269
 270static int dsa_slave_port_attr_set(struct net_device *dev,
 271                                   const struct switchdev_attr *attr,
 272                                   struct switchdev_trans *trans)
 273{
 274        struct dsa_port *dp = dsa_slave_to_port(dev);
 275        int ret;
 276
 277        switch (attr->id) {
 278        case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
 279                ret = dsa_port_set_state(dp, attr->u.stp_state, trans);
 280                break;
 281        case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
 282                ret = dsa_port_vlan_filtering(dp, attr->u.vlan_filtering,
 283                                              trans);
 284                break;
 285        case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME:
 286                ret = dsa_port_ageing_time(dp, attr->u.ageing_time, trans);
 287                break;
 288        case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
 289                ret = dsa_port_pre_bridge_flags(dp, attr->u.brport_flags,
 290                                                trans);
 291                break;
 292        case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
 293                ret = dsa_port_bridge_flags(dp, attr->u.brport_flags, trans);
 294                break;
 295        case SWITCHDEV_ATTR_ID_BRIDGE_MROUTER:
 296                ret = dsa_port_mrouter(dp->cpu_dp, attr->u.mrouter, trans);
 297                break;
 298        default:
 299                ret = -EOPNOTSUPP;
 300                break;
 301        }
 302
 303        return ret;
 304}
 305
 306static int dsa_slave_vlan_add(struct net_device *dev,
 307                              const struct switchdev_obj *obj,
 308                              struct switchdev_trans *trans)
 309{
 310        struct dsa_port *dp = dsa_slave_to_port(dev);
 311        struct switchdev_obj_port_vlan vlan;
 312        int err;
 313
 314        if (obj->orig_dev != dev)
 315                return -EOPNOTSUPP;
 316
 317        if (dp->bridge_dev && !br_vlan_enabled(dp->bridge_dev))
 318                return 0;
 319
 320        vlan = *SWITCHDEV_OBJ_PORT_VLAN(obj);
 321
 322        err = dsa_port_vlan_add(dp, &vlan, trans);
 323        if (err)
 324                return err;
 325
 326        /* We need the dedicated CPU port to be a member of the VLAN as well.
 327         * Even though drivers often handle CPU membership in special ways,
 328         * it doesn't make sense to program a PVID, so clear this flag.
 329         */
 330        vlan.flags &= ~BRIDGE_VLAN_INFO_PVID;
 331
 332        err = dsa_port_vlan_add(dp->cpu_dp, &vlan, trans);
 333        if (err)
 334                return err;
 335
 336        return 0;
 337}
 338
 339static int dsa_slave_port_obj_add(struct net_device *dev,
 340                                  const struct switchdev_obj *obj,
 341                                  struct switchdev_trans *trans,
 342                                  struct netlink_ext_ack *extack)
 343{
 344        struct dsa_port *dp = dsa_slave_to_port(dev);
 345        int err;
 346
 347        /* For the prepare phase, ensure the full set of changes is feasable in
 348         * one go in order to signal a failure properly. If an operation is not
 349         * supported, return -EOPNOTSUPP.
 350         */
 351
 352        switch (obj->id) {
 353        case SWITCHDEV_OBJ_ID_PORT_MDB:
 354                if (obj->orig_dev != dev)
 355                        return -EOPNOTSUPP;
 356                err = dsa_port_mdb_add(dp, SWITCHDEV_OBJ_PORT_MDB(obj), trans);
 357                break;
 358        case SWITCHDEV_OBJ_ID_HOST_MDB:
 359                /* DSA can directly translate this to a normal MDB add,
 360                 * but on the CPU port.
 361                 */
 362                err = dsa_port_mdb_add(dp->cpu_dp, SWITCHDEV_OBJ_PORT_MDB(obj),
 363                                       trans);
 364                break;
 365        case SWITCHDEV_OBJ_ID_PORT_VLAN:
 366                err = dsa_slave_vlan_add(dev, obj, trans);
 367                break;
 368        default:
 369                err = -EOPNOTSUPP;
 370                break;
 371        }
 372
 373        return err;
 374}
 375
 376static int dsa_slave_vlan_del(struct net_device *dev,
 377                              const struct switchdev_obj *obj)
 378{
 379        struct dsa_port *dp = dsa_slave_to_port(dev);
 380
 381        if (obj->orig_dev != dev)
 382                return -EOPNOTSUPP;
 383
 384        if (dp->bridge_dev && !br_vlan_enabled(dp->bridge_dev))
 385                return 0;
 386
 387        /* Do not deprogram the CPU port as it may be shared with other user
 388         * ports which can be members of this VLAN as well.
 389         */
 390        return dsa_port_vlan_del(dp, SWITCHDEV_OBJ_PORT_VLAN(obj));
 391}
 392
 393static int dsa_slave_port_obj_del(struct net_device *dev,
 394                                  const struct switchdev_obj *obj)
 395{
 396        struct dsa_port *dp = dsa_slave_to_port(dev);
 397        int err;
 398
 399        switch (obj->id) {
 400        case SWITCHDEV_OBJ_ID_PORT_MDB:
 401                if (obj->orig_dev != dev)
 402                        return -EOPNOTSUPP;
 403                err = dsa_port_mdb_del(dp, SWITCHDEV_OBJ_PORT_MDB(obj));
 404                break;
 405        case SWITCHDEV_OBJ_ID_HOST_MDB:
 406                /* DSA can directly translate this to a normal MDB add,
 407                 * but on the CPU port.
 408                 */
 409                err = dsa_port_mdb_del(dp->cpu_dp, SWITCHDEV_OBJ_PORT_MDB(obj));
 410                break;
 411        case SWITCHDEV_OBJ_ID_PORT_VLAN:
 412                err = dsa_slave_vlan_del(dev, obj);
 413                break;
 414        default:
 415                err = -EOPNOTSUPP;
 416                break;
 417        }
 418
 419        return err;
 420}
 421
 422static int dsa_slave_get_port_parent_id(struct net_device *dev,
 423                                        struct netdev_phys_item_id *ppid)
 424{
 425        struct dsa_port *dp = dsa_slave_to_port(dev);
 426        struct dsa_switch *ds = dp->ds;
 427        struct dsa_switch_tree *dst = ds->dst;
 428
 429        /* For non-legacy ports, devlink is used and it takes
 430         * care of the name generation. This ndo implementation
 431         * should be removed with legacy support.
 432         */
 433        if (dp->ds->devlink)
 434                return -EOPNOTSUPP;
 435
 436        ppid->id_len = sizeof(dst->index);
 437        memcpy(&ppid->id, &dst->index, ppid->id_len);
 438
 439        return 0;
 440}
 441
 442static inline netdev_tx_t dsa_slave_netpoll_send_skb(struct net_device *dev,
 443                                                     struct sk_buff *skb)
 444{
 445#ifdef CONFIG_NET_POLL_CONTROLLER
 446        struct dsa_slave_priv *p = netdev_priv(dev);
 447
 448        if (p->netpoll)
 449                netpoll_send_skb(p->netpoll, skb);
 450#else
 451        BUG();
 452#endif
 453        return NETDEV_TX_OK;
 454}
 455
 456static void dsa_skb_tx_timestamp(struct dsa_slave_priv *p,
 457                                 struct sk_buff *skb)
 458{
 459        struct dsa_switch *ds = p->dp->ds;
 460        struct sk_buff *clone;
 461        unsigned int type;
 462
 463        type = ptp_classify_raw(skb);
 464        if (type == PTP_CLASS_NONE)
 465                return;
 466
 467        if (!ds->ops->port_txtstamp)
 468                return;
 469
 470        clone = skb_clone_sk(skb);
 471        if (!clone)
 472                return;
 473
 474        DSA_SKB_CB(skb)->clone = clone;
 475
 476        if (ds->ops->port_txtstamp(ds, p->dp->index, clone, type))
 477                return;
 478
 479        kfree_skb(clone);
 480}
 481
 482netdev_tx_t dsa_enqueue_skb(struct sk_buff *skb, struct net_device *dev)
 483{
 484        /* SKB for netpoll still need to be mangled with the protocol-specific
 485         * tag to be successfully transmitted
 486         */
 487        if (unlikely(netpoll_tx_running(dev)))
 488                return dsa_slave_netpoll_send_skb(dev, skb);
 489
 490        /* Queue the SKB for transmission on the parent interface, but
 491         * do not modify its EtherType
 492         */
 493        skb->dev = dsa_slave_to_master(dev);
 494        dev_queue_xmit(skb);
 495
 496        return NETDEV_TX_OK;
 497}
 498EXPORT_SYMBOL_GPL(dsa_enqueue_skb);
 499
 500static netdev_tx_t dsa_slave_xmit(struct sk_buff *skb, struct net_device *dev)
 501{
 502        struct dsa_slave_priv *p = netdev_priv(dev);
 503        struct pcpu_sw_netstats *s;
 504        struct sk_buff *nskb;
 505
 506        s = this_cpu_ptr(p->stats64);
 507        u64_stats_update_begin(&s->syncp);
 508        s->tx_packets++;
 509        s->tx_bytes += skb->len;
 510        u64_stats_update_end(&s->syncp);
 511
 512        DSA_SKB_CB(skb)->clone = NULL;
 513
 514        /* Identify PTP protocol packets, clone them, and pass them to the
 515         * switch driver
 516         */
 517        dsa_skb_tx_timestamp(p, skb);
 518
 519        /* Transmit function may have to reallocate the original SKB,
 520         * in which case it must have freed it. Only free it here on error.
 521         */
 522        nskb = p->xmit(skb, dev);
 523        if (!nskb) {
 524                kfree_skb(skb);
 525                return NETDEV_TX_OK;
 526        }
 527
 528        return dsa_enqueue_skb(nskb, dev);
 529}
 530
 531/* ethtool operations *******************************************************/
 532
 533static void dsa_slave_get_drvinfo(struct net_device *dev,
 534                                  struct ethtool_drvinfo *drvinfo)
 535{
 536        strlcpy(drvinfo->driver, "dsa", sizeof(drvinfo->driver));
 537        strlcpy(drvinfo->fw_version, "N/A", sizeof(drvinfo->fw_version));
 538        strlcpy(drvinfo->bus_info, "platform", sizeof(drvinfo->bus_info));
 539}
 540
 541static int dsa_slave_get_regs_len(struct net_device *dev)
 542{
 543        struct dsa_port *dp = dsa_slave_to_port(dev);
 544        struct dsa_switch *ds = dp->ds;
 545
 546        if (ds->ops->get_regs_len)
 547                return ds->ops->get_regs_len(ds, dp->index);
 548
 549        return -EOPNOTSUPP;
 550}
 551
 552static void
 553dsa_slave_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *_p)
 554{
 555        struct dsa_port *dp = dsa_slave_to_port(dev);
 556        struct dsa_switch *ds = dp->ds;
 557
 558        if (ds->ops->get_regs)
 559                ds->ops->get_regs(ds, dp->index, regs, _p);
 560}
 561
 562static int dsa_slave_nway_reset(struct net_device *dev)
 563{
 564        struct dsa_port *dp = dsa_slave_to_port(dev);
 565
 566        return phylink_ethtool_nway_reset(dp->pl);
 567}
 568
 569static int dsa_slave_get_eeprom_len(struct net_device *dev)
 570{
 571        struct dsa_port *dp = dsa_slave_to_port(dev);
 572        struct dsa_switch *ds = dp->ds;
 573
 574        if (ds->cd && ds->cd->eeprom_len)
 575                return ds->cd->eeprom_len;
 576
 577        if (ds->ops->get_eeprom_len)
 578                return ds->ops->get_eeprom_len(ds);
 579
 580        return 0;
 581}
 582
 583static int dsa_slave_get_eeprom(struct net_device *dev,
 584                                struct ethtool_eeprom *eeprom, u8 *data)
 585{
 586        struct dsa_port *dp = dsa_slave_to_port(dev);
 587        struct dsa_switch *ds = dp->ds;
 588
 589        if (ds->ops->get_eeprom)
 590                return ds->ops->get_eeprom(ds, eeprom, data);
 591
 592        return -EOPNOTSUPP;
 593}
 594
 595static int dsa_slave_set_eeprom(struct net_device *dev,
 596                                struct ethtool_eeprom *eeprom, u8 *data)
 597{
 598        struct dsa_port *dp = dsa_slave_to_port(dev);
 599        struct dsa_switch *ds = dp->ds;
 600
 601        if (ds->ops->set_eeprom)
 602                return ds->ops->set_eeprom(ds, eeprom, data);
 603
 604        return -EOPNOTSUPP;
 605}
 606
 607static void dsa_slave_get_strings(struct net_device *dev,
 608                                  uint32_t stringset, uint8_t *data)
 609{
 610        struct dsa_port *dp = dsa_slave_to_port(dev);
 611        struct dsa_switch *ds = dp->ds;
 612
 613        if (stringset == ETH_SS_STATS) {
 614                int len = ETH_GSTRING_LEN;
 615
 616                strncpy(data, "tx_packets", len);
 617                strncpy(data + len, "tx_bytes", len);
 618                strncpy(data + 2 * len, "rx_packets", len);
 619                strncpy(data + 3 * len, "rx_bytes", len);
 620                if (ds->ops->get_strings)
 621                        ds->ops->get_strings(ds, dp->index, stringset,
 622                                             data + 4 * len);
 623        }
 624}
 625
 626static void dsa_slave_get_ethtool_stats(struct net_device *dev,
 627                                        struct ethtool_stats *stats,
 628                                        uint64_t *data)
 629{
 630        struct dsa_port *dp = dsa_slave_to_port(dev);
 631        struct dsa_slave_priv *p = netdev_priv(dev);
 632        struct dsa_switch *ds = dp->ds;
 633        struct pcpu_sw_netstats *s;
 634        unsigned int start;
 635        int i;
 636
 637        for_each_possible_cpu(i) {
 638                u64 tx_packets, tx_bytes, rx_packets, rx_bytes;
 639
 640                s = per_cpu_ptr(p->stats64, i);
 641                do {
 642                        start = u64_stats_fetch_begin_irq(&s->syncp);
 643                        tx_packets = s->tx_packets;
 644                        tx_bytes = s->tx_bytes;
 645                        rx_packets = s->rx_packets;
 646                        rx_bytes = s->rx_bytes;
 647                } while (u64_stats_fetch_retry_irq(&s->syncp, start));
 648                data[0] += tx_packets;
 649                data[1] += tx_bytes;
 650                data[2] += rx_packets;
 651                data[3] += rx_bytes;
 652        }
 653        if (ds->ops->get_ethtool_stats)
 654                ds->ops->get_ethtool_stats(ds, dp->index, data + 4);
 655}
 656
 657static int dsa_slave_get_sset_count(struct net_device *dev, int sset)
 658{
 659        struct dsa_port *dp = dsa_slave_to_port(dev);
 660        struct dsa_switch *ds = dp->ds;
 661
 662        if (sset == ETH_SS_STATS) {
 663                int count;
 664
 665                count = 4;
 666                if (ds->ops->get_sset_count)
 667                        count += ds->ops->get_sset_count(ds, dp->index, sset);
 668
 669                return count;
 670        }
 671
 672        return -EOPNOTSUPP;
 673}
 674
 675static void dsa_slave_get_wol(struct net_device *dev, struct ethtool_wolinfo *w)
 676{
 677        struct dsa_port *dp = dsa_slave_to_port(dev);
 678        struct dsa_switch *ds = dp->ds;
 679
 680        phylink_ethtool_get_wol(dp->pl, w);
 681
 682        if (ds->ops->get_wol)
 683                ds->ops->get_wol(ds, dp->index, w);
 684}
 685
 686static int dsa_slave_set_wol(struct net_device *dev, struct ethtool_wolinfo *w)
 687{
 688        struct dsa_port *dp = dsa_slave_to_port(dev);
 689        struct dsa_switch *ds = dp->ds;
 690        int ret = -EOPNOTSUPP;
 691
 692        phylink_ethtool_set_wol(dp->pl, w);
 693
 694        if (ds->ops->set_wol)
 695                ret = ds->ops->set_wol(ds, dp->index, w);
 696
 697        return ret;
 698}
 699
 700static int dsa_slave_set_eee(struct net_device *dev, struct ethtool_eee *e)
 701{
 702        struct dsa_port *dp = dsa_slave_to_port(dev);
 703        struct dsa_switch *ds = dp->ds;
 704        int ret;
 705
 706        /* Port's PHY and MAC both need to be EEE capable */
 707        if (!dev->phydev || !dp->pl)
 708                return -ENODEV;
 709
 710        if (!ds->ops->set_mac_eee)
 711                return -EOPNOTSUPP;
 712
 713        ret = ds->ops->set_mac_eee(ds, dp->index, e);
 714        if (ret)
 715                return ret;
 716
 717        return phylink_ethtool_set_eee(dp->pl, e);
 718}
 719
 720static int dsa_slave_get_eee(struct net_device *dev, struct ethtool_eee *e)
 721{
 722        struct dsa_port *dp = dsa_slave_to_port(dev);
 723        struct dsa_switch *ds = dp->ds;
 724        int ret;
 725
 726        /* Port's PHY and MAC both need to be EEE capable */
 727        if (!dev->phydev || !dp->pl)
 728                return -ENODEV;
 729
 730        if (!ds->ops->get_mac_eee)
 731                return -EOPNOTSUPP;
 732
 733        ret = ds->ops->get_mac_eee(ds, dp->index, e);
 734        if (ret)
 735                return ret;
 736
 737        return phylink_ethtool_get_eee(dp->pl, e);
 738}
 739
 740static int dsa_slave_get_link_ksettings(struct net_device *dev,
 741                                        struct ethtool_link_ksettings *cmd)
 742{
 743        struct dsa_port *dp = dsa_slave_to_port(dev);
 744
 745        return phylink_ethtool_ksettings_get(dp->pl, cmd);
 746}
 747
 748static int dsa_slave_set_link_ksettings(struct net_device *dev,
 749                                        const struct ethtool_link_ksettings *cmd)
 750{
 751        struct dsa_port *dp = dsa_slave_to_port(dev);
 752
 753        return phylink_ethtool_ksettings_set(dp->pl, cmd);
 754}
 755
 756static void dsa_slave_get_pauseparam(struct net_device *dev,
 757                                     struct ethtool_pauseparam *pause)
 758{
 759        struct dsa_port *dp = dsa_slave_to_port(dev);
 760
 761        phylink_ethtool_get_pauseparam(dp->pl, pause);
 762}
 763
 764static int dsa_slave_set_pauseparam(struct net_device *dev,
 765                                    struct ethtool_pauseparam *pause)
 766{
 767        struct dsa_port *dp = dsa_slave_to_port(dev);
 768
 769        return phylink_ethtool_set_pauseparam(dp->pl, pause);
 770}
 771
 772#ifdef CONFIG_NET_POLL_CONTROLLER
 773static int dsa_slave_netpoll_setup(struct net_device *dev,
 774                                   struct netpoll_info *ni)
 775{
 776        struct net_device *master = dsa_slave_to_master(dev);
 777        struct dsa_slave_priv *p = netdev_priv(dev);
 778        struct netpoll *netpoll;
 779        int err = 0;
 780
 781        netpoll = kzalloc(sizeof(*netpoll), GFP_KERNEL);
 782        if (!netpoll)
 783                return -ENOMEM;
 784
 785        err = __netpoll_setup(netpoll, master);
 786        if (err) {
 787                kfree(netpoll);
 788                goto out;
 789        }
 790
 791        p->netpoll = netpoll;
 792out:
 793        return err;
 794}
 795
 796static void dsa_slave_netpoll_cleanup(struct net_device *dev)
 797{
 798        struct dsa_slave_priv *p = netdev_priv(dev);
 799        struct netpoll *netpoll = p->netpoll;
 800
 801        if (!netpoll)
 802                return;
 803
 804        p->netpoll = NULL;
 805
 806        __netpoll_free(netpoll);
 807}
 808
 809static void dsa_slave_poll_controller(struct net_device *dev)
 810{
 811}
 812#endif
 813
 814static int dsa_slave_get_phys_port_name(struct net_device *dev,
 815                                        char *name, size_t len)
 816{
 817        struct dsa_port *dp = dsa_slave_to_port(dev);
 818
 819        /* For non-legacy ports, devlink is used and it takes
 820         * care of the name generation. This ndo implementation
 821         * should be removed with legacy support.
 822         */
 823        if (dp->ds->devlink)
 824                return -EOPNOTSUPP;
 825
 826        if (snprintf(name, len, "p%d", dp->index) >= len)
 827                return -EINVAL;
 828
 829        return 0;
 830}
 831
 832static struct dsa_mall_tc_entry *
 833dsa_slave_mall_tc_entry_find(struct net_device *dev, unsigned long cookie)
 834{
 835        struct dsa_slave_priv *p = netdev_priv(dev);
 836        struct dsa_mall_tc_entry *mall_tc_entry;
 837
 838        list_for_each_entry(mall_tc_entry, &p->mall_tc_list, list)
 839                if (mall_tc_entry->cookie == cookie)
 840                        return mall_tc_entry;
 841
 842        return NULL;
 843}
 844
 845static int
 846dsa_slave_add_cls_matchall_mirred(struct net_device *dev,
 847                                  struct tc_cls_matchall_offload *cls,
 848                                  bool ingress)
 849{
 850        struct dsa_port *dp = dsa_slave_to_port(dev);
 851        struct dsa_slave_priv *p = netdev_priv(dev);
 852        struct dsa_mall_mirror_tc_entry *mirror;
 853        struct dsa_mall_tc_entry *mall_tc_entry;
 854        struct dsa_switch *ds = dp->ds;
 855        struct flow_action_entry *act;
 856        struct dsa_port *to_dp;
 857        int err;
 858
 859        if (!ds->ops->port_mirror_add)
 860                return -EOPNOTSUPP;
 861
 862        if (!flow_action_basic_hw_stats_check(&cls->rule->action,
 863                                              cls->common.extack))
 864                return -EOPNOTSUPP;
 865
 866        act = &cls->rule->action.entries[0];
 867
 868        if (!act->dev)
 869                return -EINVAL;
 870
 871        if (!dsa_slave_dev_check(act->dev))
 872                return -EOPNOTSUPP;
 873
 874        mall_tc_entry = kzalloc(sizeof(*mall_tc_entry), GFP_KERNEL);
 875        if (!mall_tc_entry)
 876                return -ENOMEM;
 877
 878        mall_tc_entry->cookie = cls->cookie;
 879        mall_tc_entry->type = DSA_PORT_MALL_MIRROR;
 880        mirror = &mall_tc_entry->mirror;
 881
 882        to_dp = dsa_slave_to_port(act->dev);
 883
 884        mirror->to_local_port = to_dp->index;
 885        mirror->ingress = ingress;
 886
 887        err = ds->ops->port_mirror_add(ds, dp->index, mirror, ingress);
 888        if (err) {
 889                kfree(mall_tc_entry);
 890                return err;
 891        }
 892
 893        list_add_tail(&mall_tc_entry->list, &p->mall_tc_list);
 894
 895        return err;
 896}
 897
 898static int
 899dsa_slave_add_cls_matchall_police(struct net_device *dev,
 900                                  struct tc_cls_matchall_offload *cls,
 901                                  bool ingress)
 902{
 903        struct netlink_ext_ack *extack = cls->common.extack;
 904        struct dsa_port *dp = dsa_slave_to_port(dev);
 905        struct dsa_slave_priv *p = netdev_priv(dev);
 906        struct dsa_mall_policer_tc_entry *policer;
 907        struct dsa_mall_tc_entry *mall_tc_entry;
 908        struct dsa_switch *ds = dp->ds;
 909        struct flow_action_entry *act;
 910        int err;
 911
 912        if (!ds->ops->port_policer_add) {
 913                NL_SET_ERR_MSG_MOD(extack,
 914                                   "Policing offload not implemented\n");
 915                return -EOPNOTSUPP;
 916        }
 917
 918        if (!ingress) {
 919                NL_SET_ERR_MSG_MOD(extack,
 920                                   "Only supported on ingress qdisc\n");
 921                return -EOPNOTSUPP;
 922        }
 923
 924        if (!flow_action_basic_hw_stats_check(&cls->rule->action,
 925                                              cls->common.extack))
 926                return -EOPNOTSUPP;
 927
 928        list_for_each_entry(mall_tc_entry, &p->mall_tc_list, list) {
 929                if (mall_tc_entry->type == DSA_PORT_MALL_POLICER) {
 930                        NL_SET_ERR_MSG_MOD(extack,
 931                                           "Only one port policer allowed\n");
 932                        return -EEXIST;
 933                }
 934        }
 935
 936        act = &cls->rule->action.entries[0];
 937
 938        mall_tc_entry = kzalloc(sizeof(*mall_tc_entry), GFP_KERNEL);
 939        if (!mall_tc_entry)
 940                return -ENOMEM;
 941
 942        mall_tc_entry->cookie = cls->cookie;
 943        mall_tc_entry->type = DSA_PORT_MALL_POLICER;
 944        policer = &mall_tc_entry->policer;
 945        policer->rate_bytes_per_sec = act->police.rate_bytes_ps;
 946        policer->burst = act->police.burst;
 947
 948        err = ds->ops->port_policer_add(ds, dp->index, policer);
 949        if (err) {
 950                kfree(mall_tc_entry);
 951                return err;
 952        }
 953
 954        list_add_tail(&mall_tc_entry->list, &p->mall_tc_list);
 955
 956        return err;
 957}
 958
 959static int dsa_slave_add_cls_matchall(struct net_device *dev,
 960                                      struct tc_cls_matchall_offload *cls,
 961                                      bool ingress)
 962{
 963        int err = -EOPNOTSUPP;
 964
 965        if (cls->common.protocol == htons(ETH_P_ALL) &&
 966            flow_offload_has_one_action(&cls->rule->action) &&
 967            cls->rule->action.entries[0].id == FLOW_ACTION_MIRRED)
 968                err = dsa_slave_add_cls_matchall_mirred(dev, cls, ingress);
 969        else if (flow_offload_has_one_action(&cls->rule->action) &&
 970                 cls->rule->action.entries[0].id == FLOW_ACTION_POLICE)
 971                err = dsa_slave_add_cls_matchall_police(dev, cls, ingress);
 972
 973        return err;
 974}
 975
 976static void dsa_slave_del_cls_matchall(struct net_device *dev,
 977                                       struct tc_cls_matchall_offload *cls)
 978{
 979        struct dsa_port *dp = dsa_slave_to_port(dev);
 980        struct dsa_mall_tc_entry *mall_tc_entry;
 981        struct dsa_switch *ds = dp->ds;
 982
 983        mall_tc_entry = dsa_slave_mall_tc_entry_find(dev, cls->cookie);
 984        if (!mall_tc_entry)
 985                return;
 986
 987        list_del(&mall_tc_entry->list);
 988
 989        switch (mall_tc_entry->type) {
 990        case DSA_PORT_MALL_MIRROR:
 991                if (ds->ops->port_mirror_del)
 992                        ds->ops->port_mirror_del(ds, dp->index,
 993                                                 &mall_tc_entry->mirror);
 994                break;
 995        case DSA_PORT_MALL_POLICER:
 996                if (ds->ops->port_policer_del)
 997                        ds->ops->port_policer_del(ds, dp->index);
 998                break;
 999        default:
1000                WARN_ON(1);
1001        }
1002
1003        kfree(mall_tc_entry);
1004}
1005
1006static int dsa_slave_setup_tc_cls_matchall(struct net_device *dev,
1007                                           struct tc_cls_matchall_offload *cls,
1008                                           bool ingress)
1009{
1010        if (cls->common.chain_index)
1011                return -EOPNOTSUPP;
1012
1013        switch (cls->command) {
1014        case TC_CLSMATCHALL_REPLACE:
1015                return dsa_slave_add_cls_matchall(dev, cls, ingress);
1016        case TC_CLSMATCHALL_DESTROY:
1017                dsa_slave_del_cls_matchall(dev, cls);
1018                return 0;
1019        default:
1020                return -EOPNOTSUPP;
1021        }
1022}
1023
1024static int dsa_slave_add_cls_flower(struct net_device *dev,
1025                                    struct flow_cls_offload *cls,
1026                                    bool ingress)
1027{
1028        struct dsa_port *dp = dsa_slave_to_port(dev);
1029        struct dsa_switch *ds = dp->ds;
1030        int port = dp->index;
1031
1032        if (!ds->ops->cls_flower_add)
1033                return -EOPNOTSUPP;
1034
1035        return ds->ops->cls_flower_add(ds, port, cls, ingress);
1036}
1037
1038static int dsa_slave_del_cls_flower(struct net_device *dev,
1039                                    struct flow_cls_offload *cls,
1040                                    bool ingress)
1041{
1042        struct dsa_port *dp = dsa_slave_to_port(dev);
1043        struct dsa_switch *ds = dp->ds;
1044        int port = dp->index;
1045
1046        if (!ds->ops->cls_flower_del)
1047                return -EOPNOTSUPP;
1048
1049        return ds->ops->cls_flower_del(ds, port, cls, ingress);
1050}
1051
1052static int dsa_slave_stats_cls_flower(struct net_device *dev,
1053                                      struct flow_cls_offload *cls,
1054                                      bool ingress)
1055{
1056        struct dsa_port *dp = dsa_slave_to_port(dev);
1057        struct dsa_switch *ds = dp->ds;
1058        int port = dp->index;
1059
1060        if (!ds->ops->cls_flower_stats)
1061                return -EOPNOTSUPP;
1062
1063        return ds->ops->cls_flower_stats(ds, port, cls, ingress);
1064}
1065
1066static int dsa_slave_setup_tc_cls_flower(struct net_device *dev,
1067                                         struct flow_cls_offload *cls,
1068                                         bool ingress)
1069{
1070        switch (cls->command) {
1071        case FLOW_CLS_REPLACE:
1072                return dsa_slave_add_cls_flower(dev, cls, ingress);
1073        case FLOW_CLS_DESTROY:
1074                return dsa_slave_del_cls_flower(dev, cls, ingress);
1075        case FLOW_CLS_STATS:
1076                return dsa_slave_stats_cls_flower(dev, cls, ingress);
1077        default:
1078                return -EOPNOTSUPP;
1079        }
1080}
1081
1082static int dsa_slave_setup_tc_block_cb(enum tc_setup_type type, void *type_data,
1083                                       void *cb_priv, bool ingress)
1084{
1085        struct net_device *dev = cb_priv;
1086
1087        if (!tc_can_offload(dev))
1088                return -EOPNOTSUPP;
1089
1090        switch (type) {
1091        case TC_SETUP_CLSMATCHALL:
1092                return dsa_slave_setup_tc_cls_matchall(dev, type_data, ingress);
1093        case TC_SETUP_CLSFLOWER:
1094                return dsa_slave_setup_tc_cls_flower(dev, type_data, ingress);
1095        default:
1096                return -EOPNOTSUPP;
1097        }
1098}
1099
1100static int dsa_slave_setup_tc_block_cb_ig(enum tc_setup_type type,
1101                                          void *type_data, void *cb_priv)
1102{
1103        return dsa_slave_setup_tc_block_cb(type, type_data, cb_priv, true);
1104}
1105
1106static int dsa_slave_setup_tc_block_cb_eg(enum tc_setup_type type,
1107                                          void *type_data, void *cb_priv)
1108{
1109        return dsa_slave_setup_tc_block_cb(type, type_data, cb_priv, false);
1110}
1111
1112static LIST_HEAD(dsa_slave_block_cb_list);
1113
1114static int dsa_slave_setup_tc_block(struct net_device *dev,
1115                                    struct flow_block_offload *f)
1116{
1117        struct flow_block_cb *block_cb;
1118        flow_setup_cb_t *cb;
1119
1120        if (f->binder_type == FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS)
1121                cb = dsa_slave_setup_tc_block_cb_ig;
1122        else if (f->binder_type == FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS)
1123                cb = dsa_slave_setup_tc_block_cb_eg;
1124        else
1125                return -EOPNOTSUPP;
1126
1127        f->driver_block_list = &dsa_slave_block_cb_list;
1128
1129        switch (f->command) {
1130        case FLOW_BLOCK_BIND:
1131                if (flow_block_cb_is_busy(cb, dev, &dsa_slave_block_cb_list))
1132                        return -EBUSY;
1133
1134                block_cb = flow_block_cb_alloc(cb, dev, dev, NULL);
1135                if (IS_ERR(block_cb))
1136                        return PTR_ERR(block_cb);
1137
1138                flow_block_cb_add(block_cb, f);
1139                list_add_tail(&block_cb->driver_list, &dsa_slave_block_cb_list);
1140                return 0;
1141        case FLOW_BLOCK_UNBIND:
1142                block_cb = flow_block_cb_lookup(f->block, cb, dev);
1143                if (!block_cb)
1144                        return -ENOENT;
1145
1146                flow_block_cb_remove(block_cb, f);
1147                list_del(&block_cb->driver_list);
1148                return 0;
1149        default:
1150                return -EOPNOTSUPP;
1151        }
1152}
1153
1154static int dsa_slave_setup_tc(struct net_device *dev, enum tc_setup_type type,
1155                              void *type_data)
1156{
1157        struct dsa_port *dp = dsa_slave_to_port(dev);
1158        struct dsa_switch *ds = dp->ds;
1159
1160        if (type == TC_SETUP_BLOCK)
1161                return dsa_slave_setup_tc_block(dev, type_data);
1162
1163        if (!ds->ops->port_setup_tc)
1164                return -EOPNOTSUPP;
1165
1166        return ds->ops->port_setup_tc(ds, dp->index, type, type_data);
1167}
1168
1169static void dsa_slave_get_stats64(struct net_device *dev,
1170                                  struct rtnl_link_stats64 *stats)
1171{
1172        struct dsa_slave_priv *p = netdev_priv(dev);
1173        struct pcpu_sw_netstats *s;
1174        unsigned int start;
1175        int i;
1176
1177        netdev_stats_to_stats64(stats, &dev->stats);
1178        for_each_possible_cpu(i) {
1179                u64 tx_packets, tx_bytes, rx_packets, rx_bytes;
1180
1181                s = per_cpu_ptr(p->stats64, i);
1182                do {
1183                        start = u64_stats_fetch_begin_irq(&s->syncp);
1184                        tx_packets = s->tx_packets;
1185                        tx_bytes = s->tx_bytes;
1186                        rx_packets = s->rx_packets;
1187                        rx_bytes = s->rx_bytes;
1188                } while (u64_stats_fetch_retry_irq(&s->syncp, start));
1189
1190                stats->tx_packets += tx_packets;
1191                stats->tx_bytes += tx_bytes;
1192                stats->rx_packets += rx_packets;
1193                stats->rx_bytes += rx_bytes;
1194        }
1195}
1196
1197static int dsa_slave_get_rxnfc(struct net_device *dev,
1198                               struct ethtool_rxnfc *nfc, u32 *rule_locs)
1199{
1200        struct dsa_port *dp = dsa_slave_to_port(dev);
1201        struct dsa_switch *ds = dp->ds;
1202
1203        if (!ds->ops->get_rxnfc)
1204                return -EOPNOTSUPP;
1205
1206        return ds->ops->get_rxnfc(ds, dp->index, nfc, rule_locs);
1207}
1208
1209static int dsa_slave_set_rxnfc(struct net_device *dev,
1210                               struct ethtool_rxnfc *nfc)
1211{
1212        struct dsa_port *dp = dsa_slave_to_port(dev);
1213        struct dsa_switch *ds = dp->ds;
1214
1215        if (!ds->ops->set_rxnfc)
1216                return -EOPNOTSUPP;
1217
1218        return ds->ops->set_rxnfc(ds, dp->index, nfc);
1219}
1220
1221static int dsa_slave_get_ts_info(struct net_device *dev,
1222                                 struct ethtool_ts_info *ts)
1223{
1224        struct dsa_slave_priv *p = netdev_priv(dev);
1225        struct dsa_switch *ds = p->dp->ds;
1226
1227        if (!ds->ops->get_ts_info)
1228                return -EOPNOTSUPP;
1229
1230        return ds->ops->get_ts_info(ds, p->dp->index, ts);
1231}
1232
1233static int dsa_slave_vlan_rx_add_vid(struct net_device *dev, __be16 proto,
1234                                     u16 vid)
1235{
1236        struct dsa_port *dp = dsa_slave_to_port(dev);
1237        struct bridge_vlan_info info;
1238        int ret;
1239
1240        /* Check for a possible bridge VLAN entry now since there is no
1241         * need to emulate the switchdev prepare + commit phase.
1242         */
1243        if (dp->bridge_dev) {
1244                if (!br_vlan_enabled(dp->bridge_dev))
1245                        return 0;
1246
1247                /* br_vlan_get_info() returns -EINVAL or -ENOENT if the
1248                 * device, respectively the VID is not found, returning
1249                 * 0 means success, which is a failure for us here.
1250                 */
1251                ret = br_vlan_get_info(dp->bridge_dev, vid, &info);
1252                if (ret == 0)
1253                        return -EBUSY;
1254        }
1255
1256        ret = dsa_port_vid_add(dp, vid, 0);
1257        if (ret)
1258                return ret;
1259
1260        ret = dsa_port_vid_add(dp->cpu_dp, vid, 0);
1261        if (ret)
1262                return ret;
1263
1264        return 0;
1265}
1266
1267static int dsa_slave_vlan_rx_kill_vid(struct net_device *dev, __be16 proto,
1268                                      u16 vid)
1269{
1270        struct dsa_port *dp = dsa_slave_to_port(dev);
1271        struct bridge_vlan_info info;
1272        int ret;
1273
1274        /* Check for a possible bridge VLAN entry now since there is no
1275         * need to emulate the switchdev prepare + commit phase.
1276         */
1277        if (dp->bridge_dev) {
1278                if (!br_vlan_enabled(dp->bridge_dev))
1279                        return 0;
1280
1281                /* br_vlan_get_info() returns -EINVAL or -ENOENT if the
1282                 * device, respectively the VID is not found, returning
1283                 * 0 means success, which is a failure for us here.
1284                 */
1285                ret = br_vlan_get_info(dp->bridge_dev, vid, &info);
1286                if (ret == 0)
1287                        return -EBUSY;
1288        }
1289
1290        /* Do not deprogram the CPU port as it may be shared with other user
1291         * ports which can be members of this VLAN as well.
1292         */
1293        return dsa_port_vid_del(dp, vid);
1294}
1295
1296struct dsa_hw_port {
1297        struct list_head list;
1298        struct net_device *dev;
1299        int old_mtu;
1300};
1301
1302static int dsa_hw_port_list_set_mtu(struct list_head *hw_port_list, int mtu)
1303{
1304        const struct dsa_hw_port *p;
1305        int err;
1306
1307        list_for_each_entry(p, hw_port_list, list) {
1308                if (p->dev->mtu == mtu)
1309                        continue;
1310
1311                err = dev_set_mtu(p->dev, mtu);
1312                if (err)
1313                        goto rollback;
1314        }
1315
1316        return 0;
1317
1318rollback:
1319        list_for_each_entry_continue_reverse(p, hw_port_list, list) {
1320                if (p->dev->mtu == p->old_mtu)
1321                        continue;
1322
1323                if (dev_set_mtu(p->dev, p->old_mtu))
1324                        netdev_err(p->dev, "Failed to restore MTU\n");
1325        }
1326
1327        return err;
1328}
1329
1330static void dsa_hw_port_list_free(struct list_head *hw_port_list)
1331{
1332        struct dsa_hw_port *p, *n;
1333
1334        list_for_each_entry_safe(p, n, hw_port_list, list)
1335                kfree(p);
1336}
1337
1338/* Make the hardware datapath to/from @dev limited to a common MTU */
1339static void dsa_bridge_mtu_normalization(struct dsa_port *dp)
1340{
1341        struct list_head hw_port_list;
1342        struct dsa_switch_tree *dst;
1343        int min_mtu = ETH_MAX_MTU;
1344        struct dsa_port *other_dp;
1345        int err;
1346
1347        if (!dp->ds->mtu_enforcement_ingress)
1348                return;
1349
1350        if (!dp->bridge_dev)
1351                return;
1352
1353        INIT_LIST_HEAD(&hw_port_list);
1354
1355        /* Populate the list of ports that are part of the same bridge
1356         * as the newly added/modified port
1357         */
1358        list_for_each_entry(dst, &dsa_tree_list, list) {
1359                list_for_each_entry(other_dp, &dst->ports, list) {
1360                        struct dsa_hw_port *hw_port;
1361                        struct net_device *slave;
1362
1363                        if (other_dp->type != DSA_PORT_TYPE_USER)
1364                                continue;
1365
1366                        if (other_dp->bridge_dev != dp->bridge_dev)
1367                                continue;
1368
1369                        if (!other_dp->ds->mtu_enforcement_ingress)
1370                                continue;
1371
1372                        slave = other_dp->slave;
1373
1374                        if (min_mtu > slave->mtu)
1375                                min_mtu = slave->mtu;
1376
1377                        hw_port = kzalloc(sizeof(*hw_port), GFP_KERNEL);
1378                        if (!hw_port)
1379                                goto out;
1380
1381                        hw_port->dev = slave;
1382                        hw_port->old_mtu = slave->mtu;
1383
1384                        list_add(&hw_port->list, &hw_port_list);
1385                }
1386        }
1387
1388        /* Attempt to configure the entire hardware bridge to the newly added
1389         * interface's MTU first, regardless of whether the intention of the
1390         * user was to raise or lower it.
1391         */
1392        err = dsa_hw_port_list_set_mtu(&hw_port_list, dp->slave->mtu);
1393        if (!err)
1394                goto out;
1395
1396        /* Clearly that didn't work out so well, so just set the minimum MTU on
1397         * all hardware bridge ports now. If this fails too, then all ports will
1398         * still have their old MTU rolled back anyway.
1399         */
1400        dsa_hw_port_list_set_mtu(&hw_port_list, min_mtu);
1401
1402out:
1403        dsa_hw_port_list_free(&hw_port_list);
1404}
1405
1406static int dsa_slave_change_mtu(struct net_device *dev, int new_mtu)
1407{
1408        struct net_device *master = dsa_slave_to_master(dev);
1409        struct dsa_port *dp = dsa_slave_to_port(dev);
1410        struct dsa_slave_priv *p = netdev_priv(dev);
1411        struct dsa_switch *ds = p->dp->ds;
1412        struct dsa_port *cpu_dp;
1413        int port = p->dp->index;
1414        int largest_mtu = 0;
1415        int new_master_mtu;
1416        int old_master_mtu;
1417        int mtu_limit;
1418        int cpu_mtu;
1419        int err, i;
1420
1421        if (!ds->ops->port_change_mtu)
1422                return -EOPNOTSUPP;
1423
1424        for (i = 0; i < ds->num_ports; i++) {
1425                int slave_mtu;
1426
1427                if (!dsa_is_user_port(ds, i))
1428                        continue;
1429
1430                /* During probe, this function will be called for each slave
1431                 * device, while not all of them have been allocated. That's
1432                 * ok, it doesn't change what the maximum is, so ignore it.
1433                 */
1434                if (!dsa_to_port(ds, i)->slave)
1435                        continue;
1436
1437                /* Pretend that we already applied the setting, which we
1438                 * actually haven't (still haven't done all integrity checks)
1439                 */
1440                if (i == port)
1441                        slave_mtu = new_mtu;
1442                else
1443                        slave_mtu = dsa_to_port(ds, i)->slave->mtu;
1444
1445                if (largest_mtu < slave_mtu)
1446                        largest_mtu = slave_mtu;
1447        }
1448
1449        cpu_dp = dsa_to_port(ds, port)->cpu_dp;
1450
1451        mtu_limit = min_t(int, master->max_mtu, dev->max_mtu);
1452        old_master_mtu = master->mtu;
1453        new_master_mtu = largest_mtu + cpu_dp->tag_ops->overhead;
1454        if (new_master_mtu > mtu_limit)
1455                return -ERANGE;
1456
1457        /* If the master MTU isn't over limit, there's no need to check the CPU
1458         * MTU, since that surely isn't either.
1459         */
1460        cpu_mtu = largest_mtu;
1461
1462        /* Start applying stuff */
1463        if (new_master_mtu != old_master_mtu) {
1464                err = dev_set_mtu(master, new_master_mtu);
1465                if (err < 0)
1466                        goto out_master_failed;
1467
1468                /* We only need to propagate the MTU of the CPU port to
1469                 * upstream switches.
1470                 */
1471                err = dsa_port_mtu_change(cpu_dp, cpu_mtu, true);
1472                if (err)
1473                        goto out_cpu_failed;
1474        }
1475
1476        err = dsa_port_mtu_change(dp, new_mtu, false);
1477        if (err)
1478                goto out_port_failed;
1479
1480        dev->mtu = new_mtu;
1481
1482        dsa_bridge_mtu_normalization(dp);
1483
1484        return 0;
1485
1486out_port_failed:
1487        if (new_master_mtu != old_master_mtu)
1488                dsa_port_mtu_change(cpu_dp, old_master_mtu -
1489                                    cpu_dp->tag_ops->overhead,
1490                                    true);
1491out_cpu_failed:
1492        if (new_master_mtu != old_master_mtu)
1493                dev_set_mtu(master, old_master_mtu);
1494out_master_failed:
1495        return err;
1496}
1497
1498static const struct ethtool_ops dsa_slave_ethtool_ops = {
1499        .get_drvinfo            = dsa_slave_get_drvinfo,
1500        .get_regs_len           = dsa_slave_get_regs_len,
1501        .get_regs               = dsa_slave_get_regs,
1502        .nway_reset             = dsa_slave_nway_reset,
1503        .get_link               = ethtool_op_get_link,
1504        .get_eeprom_len         = dsa_slave_get_eeprom_len,
1505        .get_eeprom             = dsa_slave_get_eeprom,
1506        .set_eeprom             = dsa_slave_set_eeprom,
1507        .get_strings            = dsa_slave_get_strings,
1508        .get_ethtool_stats      = dsa_slave_get_ethtool_stats,
1509        .get_sset_count         = dsa_slave_get_sset_count,
1510        .set_wol                = dsa_slave_set_wol,
1511        .get_wol                = dsa_slave_get_wol,
1512        .set_eee                = dsa_slave_set_eee,
1513        .get_eee                = dsa_slave_get_eee,
1514        .get_link_ksettings     = dsa_slave_get_link_ksettings,
1515        .set_link_ksettings     = dsa_slave_set_link_ksettings,
1516        .get_pauseparam         = dsa_slave_get_pauseparam,
1517        .set_pauseparam         = dsa_slave_set_pauseparam,
1518        .get_rxnfc              = dsa_slave_get_rxnfc,
1519        .set_rxnfc              = dsa_slave_set_rxnfc,
1520        .get_ts_info            = dsa_slave_get_ts_info,
1521};
1522
1523/* legacy way, bypassing the bridge *****************************************/
1524int dsa_legacy_fdb_add(struct ndmsg *ndm, struct nlattr *tb[],
1525                       struct net_device *dev,
1526                       const unsigned char *addr, u16 vid,
1527                       u16 flags,
1528                       struct netlink_ext_ack *extack)
1529{
1530        struct dsa_port *dp = dsa_slave_to_port(dev);
1531
1532        return dsa_port_fdb_add(dp, addr, vid);
1533}
1534
1535int dsa_legacy_fdb_del(struct ndmsg *ndm, struct nlattr *tb[],
1536                       struct net_device *dev,
1537                       const unsigned char *addr, u16 vid)
1538{
1539        struct dsa_port *dp = dsa_slave_to_port(dev);
1540
1541        return dsa_port_fdb_del(dp, addr, vid);
1542}
1543
1544static struct devlink_port *dsa_slave_get_devlink_port(struct net_device *dev)
1545{
1546        struct dsa_port *dp = dsa_slave_to_port(dev);
1547
1548        return dp->ds->devlink ? &dp->devlink_port : NULL;
1549}
1550
1551static const struct net_device_ops dsa_slave_netdev_ops = {
1552        .ndo_open               = dsa_slave_open,
1553        .ndo_stop               = dsa_slave_close,
1554        .ndo_start_xmit         = dsa_slave_xmit,
1555        .ndo_change_rx_flags    = dsa_slave_change_rx_flags,
1556        .ndo_set_rx_mode        = dsa_slave_set_rx_mode,
1557        .ndo_set_mac_address    = dsa_slave_set_mac_address,
1558        .ndo_fdb_add            = dsa_legacy_fdb_add,
1559        .ndo_fdb_del            = dsa_legacy_fdb_del,
1560        .ndo_fdb_dump           = dsa_slave_fdb_dump,
1561        .ndo_do_ioctl           = dsa_slave_ioctl,
1562        .ndo_get_iflink         = dsa_slave_get_iflink,
1563#ifdef CONFIG_NET_POLL_CONTROLLER
1564        .ndo_netpoll_setup      = dsa_slave_netpoll_setup,
1565        .ndo_netpoll_cleanup    = dsa_slave_netpoll_cleanup,
1566        .ndo_poll_controller    = dsa_slave_poll_controller,
1567#endif
1568        .ndo_get_phys_port_name = dsa_slave_get_phys_port_name,
1569        .ndo_setup_tc           = dsa_slave_setup_tc,
1570        .ndo_get_stats64        = dsa_slave_get_stats64,
1571        .ndo_get_port_parent_id = dsa_slave_get_port_parent_id,
1572        .ndo_vlan_rx_add_vid    = dsa_slave_vlan_rx_add_vid,
1573        .ndo_vlan_rx_kill_vid   = dsa_slave_vlan_rx_kill_vid,
1574        .ndo_get_devlink_port   = dsa_slave_get_devlink_port,
1575        .ndo_change_mtu         = dsa_slave_change_mtu,
1576};
1577
1578static struct device_type dsa_type = {
1579        .name   = "dsa",
1580};
1581
1582void dsa_port_phylink_mac_change(struct dsa_switch *ds, int port, bool up)
1583{
1584        const struct dsa_port *dp = dsa_to_port(ds, port);
1585
1586        if (dp->pl)
1587                phylink_mac_change(dp->pl, up);
1588}
1589EXPORT_SYMBOL_GPL(dsa_port_phylink_mac_change);
1590
1591static void dsa_slave_phylink_fixed_state(struct net_device *dev,
1592                                          struct phylink_link_state *state)
1593{
1594        struct dsa_port *dp = dsa_slave_to_port(dev);
1595        struct dsa_switch *ds = dp->ds;
1596
1597        /* No need to check that this operation is valid, the callback would
1598         * not be called if it was not.
1599         */
1600        ds->ops->phylink_fixed_state(ds, dp->index, state);
1601}
1602
1603/* slave device setup *******************************************************/
1604static int dsa_slave_phy_connect(struct net_device *slave_dev, int addr)
1605{
1606        struct dsa_port *dp = dsa_slave_to_port(slave_dev);
1607        struct dsa_switch *ds = dp->ds;
1608
1609        slave_dev->phydev = mdiobus_get_phy(ds->slave_mii_bus, addr);
1610        if (!slave_dev->phydev) {
1611                netdev_err(slave_dev, "no phy at %d\n", addr);
1612                return -ENODEV;
1613        }
1614
1615        return phylink_connect_phy(dp->pl, slave_dev->phydev);
1616}
1617
1618static int dsa_slave_phy_setup(struct net_device *slave_dev)
1619{
1620        struct dsa_port *dp = dsa_slave_to_port(slave_dev);
1621        struct device_node *port_dn = dp->dn;
1622        struct dsa_switch *ds = dp->ds;
1623        phy_interface_t mode;
1624        u32 phy_flags = 0;
1625        int ret;
1626
1627        ret = of_get_phy_mode(port_dn, &mode);
1628        if (ret)
1629                mode = PHY_INTERFACE_MODE_NA;
1630
1631        dp->pl_config.dev = &slave_dev->dev;
1632        dp->pl_config.type = PHYLINK_NETDEV;
1633
1634        dp->pl = phylink_create(&dp->pl_config, of_fwnode_handle(port_dn), mode,
1635                                &dsa_port_phylink_mac_ops);
1636        if (IS_ERR(dp->pl)) {
1637                netdev_err(slave_dev,
1638                           "error creating PHYLINK: %ld\n", PTR_ERR(dp->pl));
1639                return PTR_ERR(dp->pl);
1640        }
1641
1642        /* Register only if the switch provides such a callback, since this
1643         * callback takes precedence over polling the link GPIO in PHYLINK
1644         * (see phylink_get_fixed_state).
1645         */
1646        if (ds->ops->phylink_fixed_state)
1647                phylink_fixed_state_cb(dp->pl, dsa_slave_phylink_fixed_state);
1648
1649        if (ds->ops->get_phy_flags)
1650                phy_flags = ds->ops->get_phy_flags(ds, dp->index);
1651
1652        ret = phylink_of_phy_connect(dp->pl, port_dn, phy_flags);
1653        if (ret == -ENODEV && ds->slave_mii_bus) {
1654                /* We could not connect to a designated PHY or SFP, so try to
1655                 * use the switch internal MDIO bus instead
1656                 */
1657                ret = dsa_slave_phy_connect(slave_dev, dp->index);
1658                if (ret) {
1659                        netdev_err(slave_dev,
1660                                   "failed to connect to port %d: %d\n",
1661                                   dp->index, ret);
1662                        phylink_destroy(dp->pl);
1663                        return ret;
1664                }
1665        }
1666
1667        return ret;
1668}
1669
1670int dsa_slave_suspend(struct net_device *slave_dev)
1671{
1672        struct dsa_port *dp = dsa_slave_to_port(slave_dev);
1673
1674        if (!netif_running(slave_dev))
1675                return 0;
1676
1677        netif_device_detach(slave_dev);
1678
1679        rtnl_lock();
1680        phylink_stop(dp->pl);
1681        rtnl_unlock();
1682
1683        return 0;
1684}
1685
1686int dsa_slave_resume(struct net_device *slave_dev)
1687{
1688        struct dsa_port *dp = dsa_slave_to_port(slave_dev);
1689
1690        if (!netif_running(slave_dev))
1691                return 0;
1692
1693        netif_device_attach(slave_dev);
1694
1695        rtnl_lock();
1696        phylink_start(dp->pl);
1697        rtnl_unlock();
1698
1699        return 0;
1700}
1701
1702static void dsa_slave_notify(struct net_device *dev, unsigned long val)
1703{
1704        struct net_device *master = dsa_slave_to_master(dev);
1705        struct dsa_port *dp = dsa_slave_to_port(dev);
1706        struct dsa_notifier_register_info rinfo = {
1707                .switch_number = dp->ds->index,
1708                .port_number = dp->index,
1709                .master = master,
1710                .info.dev = dev,
1711        };
1712
1713        call_dsa_notifiers(val, dev, &rinfo.info);
1714}
1715
1716int dsa_slave_create(struct dsa_port *port)
1717{
1718        const struct dsa_port *cpu_dp = port->cpu_dp;
1719        struct net_device *master = cpu_dp->master;
1720        struct dsa_switch *ds = port->ds;
1721        const char *name = port->name;
1722        struct net_device *slave_dev;
1723        struct dsa_slave_priv *p;
1724        int ret;
1725
1726        if (!ds->num_tx_queues)
1727                ds->num_tx_queues = 1;
1728
1729        slave_dev = alloc_netdev_mqs(sizeof(struct dsa_slave_priv), name,
1730                                     NET_NAME_UNKNOWN, ether_setup,
1731                                     ds->num_tx_queues, 1);
1732        if (slave_dev == NULL)
1733                return -ENOMEM;
1734
1735        slave_dev->features = master->vlan_features | NETIF_F_HW_TC;
1736        if (ds->ops->port_vlan_add && ds->ops->port_vlan_del)
1737                slave_dev->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
1738        slave_dev->hw_features |= NETIF_F_HW_TC;
1739        slave_dev->features |= NETIF_F_LLTX;
1740        slave_dev->ethtool_ops = &dsa_slave_ethtool_ops;
1741        if (!IS_ERR_OR_NULL(port->mac))
1742                ether_addr_copy(slave_dev->dev_addr, port->mac);
1743        else
1744                eth_hw_addr_inherit(slave_dev, master);
1745        slave_dev->priv_flags |= IFF_NO_QUEUE;
1746        slave_dev->netdev_ops = &dsa_slave_netdev_ops;
1747        slave_dev->min_mtu = 0;
1748        if (ds->ops->port_max_mtu)
1749                slave_dev->max_mtu = ds->ops->port_max_mtu(ds, port->index);
1750        else
1751                slave_dev->max_mtu = ETH_MAX_MTU;
1752        SET_NETDEV_DEVTYPE(slave_dev, &dsa_type);
1753
1754        SET_NETDEV_DEV(slave_dev, port->ds->dev);
1755        slave_dev->dev.of_node = port->dn;
1756        slave_dev->vlan_features = master->vlan_features;
1757
1758        p = netdev_priv(slave_dev);
1759        p->stats64 = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
1760        if (!p->stats64) {
1761                free_netdev(slave_dev);
1762                return -ENOMEM;
1763        }
1764        p->dp = port;
1765        INIT_LIST_HEAD(&p->mall_tc_list);
1766        p->xmit = cpu_dp->tag_ops->xmit;
1767        port->slave = slave_dev;
1768
1769        rtnl_lock();
1770        ret = dsa_slave_change_mtu(slave_dev, ETH_DATA_LEN);
1771        rtnl_unlock();
1772        if (ret)
1773                dev_warn(ds->dev, "nonfatal error %d setting MTU on port %d\n",
1774                         ret, port->index);
1775
1776        netif_carrier_off(slave_dev);
1777
1778        ret = dsa_slave_phy_setup(slave_dev);
1779        if (ret) {
1780                netdev_err(master, "error %d setting up slave phy\n", ret);
1781                goto out_free;
1782        }
1783
1784        dsa_slave_notify(slave_dev, DSA_PORT_REGISTER);
1785
1786        ret = register_netdev(slave_dev);
1787        if (ret) {
1788                netdev_err(master, "error %d registering interface %s\n",
1789                           ret, slave_dev->name);
1790                goto out_phy;
1791        }
1792
1793        return 0;
1794
1795out_phy:
1796        rtnl_lock();
1797        phylink_disconnect_phy(p->dp->pl);
1798        rtnl_unlock();
1799        phylink_destroy(p->dp->pl);
1800out_free:
1801        free_percpu(p->stats64);
1802        free_netdev(slave_dev);
1803        port->slave = NULL;
1804        return ret;
1805}
1806
1807void dsa_slave_destroy(struct net_device *slave_dev)
1808{
1809        struct dsa_port *dp = dsa_slave_to_port(slave_dev);
1810        struct dsa_slave_priv *p = netdev_priv(slave_dev);
1811
1812        netif_carrier_off(slave_dev);
1813        rtnl_lock();
1814        phylink_disconnect_phy(dp->pl);
1815        rtnl_unlock();
1816
1817        dsa_slave_notify(slave_dev, DSA_PORT_UNREGISTER);
1818        unregister_netdev(slave_dev);
1819        phylink_destroy(dp->pl);
1820        free_percpu(p->stats64);
1821        free_netdev(slave_dev);
1822}
1823
1824bool dsa_slave_dev_check(const struct net_device *dev)
1825{
1826        return dev->netdev_ops == &dsa_slave_netdev_ops;
1827}
1828
1829static int dsa_slave_changeupper(struct net_device *dev,
1830                                 struct netdev_notifier_changeupper_info *info)
1831{
1832        struct dsa_port *dp = dsa_slave_to_port(dev);
1833        int err = NOTIFY_DONE;
1834
1835        if (netif_is_bridge_master(info->upper_dev)) {
1836                if (info->linking) {
1837                        err = dsa_port_bridge_join(dp, info->upper_dev);
1838                        if (!err)
1839                                dsa_bridge_mtu_normalization(dp);
1840                        err = notifier_from_errno(err);
1841                } else {
1842                        dsa_port_bridge_leave(dp, info->upper_dev);
1843                        err = NOTIFY_OK;
1844                }
1845        }
1846
1847        return err;
1848}
1849
1850static int dsa_slave_upper_vlan_check(struct net_device *dev,
1851                                      struct netdev_notifier_changeupper_info *
1852                                      info)
1853{
1854        struct netlink_ext_ack *ext_ack;
1855        struct net_device *slave;
1856        struct dsa_port *dp;
1857
1858        ext_ack = netdev_notifier_info_to_extack(&info->info);
1859
1860        if (!is_vlan_dev(dev))
1861                return NOTIFY_DONE;
1862
1863        slave = vlan_dev_real_dev(dev);
1864        if (!dsa_slave_dev_check(slave))
1865                return NOTIFY_DONE;
1866
1867        dp = dsa_slave_to_port(slave);
1868        if (!dp->bridge_dev)
1869                return NOTIFY_DONE;
1870
1871        /* Deny enslaving a VLAN device into a VLAN-aware bridge */
1872        if (br_vlan_enabled(dp->bridge_dev) &&
1873            netif_is_bridge_master(info->upper_dev) && info->linking) {
1874                NL_SET_ERR_MSG_MOD(ext_ack,
1875                                   "Cannot enslave VLAN device into VLAN aware bridge");
1876                return notifier_from_errno(-EINVAL);
1877        }
1878
1879        return NOTIFY_DONE;
1880}
1881
1882static int dsa_slave_netdevice_event(struct notifier_block *nb,
1883                                     unsigned long event, void *ptr)
1884{
1885        struct net_device *dev = netdev_notifier_info_to_dev(ptr);
1886
1887        if (event == NETDEV_CHANGEUPPER) {
1888                if (!dsa_slave_dev_check(dev))
1889                        return dsa_slave_upper_vlan_check(dev, ptr);
1890
1891                return dsa_slave_changeupper(dev, ptr);
1892        }
1893
1894        return NOTIFY_DONE;
1895}
1896
1897struct dsa_switchdev_event_work {
1898        struct work_struct work;
1899        struct switchdev_notifier_fdb_info fdb_info;
1900        struct net_device *dev;
1901        unsigned long event;
1902};
1903
1904static void dsa_slave_switchdev_event_work(struct work_struct *work)
1905{
1906        struct dsa_switchdev_event_work *switchdev_work =
1907                container_of(work, struct dsa_switchdev_event_work, work);
1908        struct net_device *dev = switchdev_work->dev;
1909        struct switchdev_notifier_fdb_info *fdb_info;
1910        struct dsa_port *dp = dsa_slave_to_port(dev);
1911        int err;
1912
1913        rtnl_lock();
1914        switch (switchdev_work->event) {
1915        case SWITCHDEV_FDB_ADD_TO_DEVICE:
1916                fdb_info = &switchdev_work->fdb_info;
1917                if (!fdb_info->added_by_user)
1918                        break;
1919
1920                err = dsa_port_fdb_add(dp, fdb_info->addr, fdb_info->vid);
1921                if (err) {
1922                        netdev_dbg(dev, "fdb add failed err=%d\n", err);
1923                        break;
1924                }
1925                fdb_info->offloaded = true;
1926                call_switchdev_notifiers(SWITCHDEV_FDB_OFFLOADED, dev,
1927                                         &fdb_info->info, NULL);
1928                break;
1929
1930        case SWITCHDEV_FDB_DEL_TO_DEVICE:
1931                fdb_info = &switchdev_work->fdb_info;
1932                if (!fdb_info->added_by_user)
1933                        break;
1934
1935                err = dsa_port_fdb_del(dp, fdb_info->addr, fdb_info->vid);
1936                if (err) {
1937                        netdev_dbg(dev, "fdb del failed err=%d\n", err);
1938                        dev_close(dev);
1939                }
1940                break;
1941        }
1942        rtnl_unlock();
1943
1944        kfree(switchdev_work->fdb_info.addr);
1945        kfree(switchdev_work);
1946        dev_put(dev);
1947}
1948
1949static int
1950dsa_slave_switchdev_fdb_work_init(struct dsa_switchdev_event_work *
1951                                  switchdev_work,
1952                                  const struct switchdev_notifier_fdb_info *
1953                                  fdb_info)
1954{
1955        memcpy(&switchdev_work->fdb_info, fdb_info,
1956               sizeof(switchdev_work->fdb_info));
1957        switchdev_work->fdb_info.addr = kzalloc(ETH_ALEN, GFP_ATOMIC);
1958        if (!switchdev_work->fdb_info.addr)
1959                return -ENOMEM;
1960        ether_addr_copy((u8 *)switchdev_work->fdb_info.addr,
1961                        fdb_info->addr);
1962        return 0;
1963}
1964
1965/* Called under rcu_read_lock() */
1966static int dsa_slave_switchdev_event(struct notifier_block *unused,
1967                                     unsigned long event, void *ptr)
1968{
1969        struct net_device *dev = switchdev_notifier_info_to_dev(ptr);
1970        struct dsa_switchdev_event_work *switchdev_work;
1971        int err;
1972
1973        if (event == SWITCHDEV_PORT_ATTR_SET) {
1974                err = switchdev_handle_port_attr_set(dev, ptr,
1975                                                     dsa_slave_dev_check,
1976                                                     dsa_slave_port_attr_set);
1977                return notifier_from_errno(err);
1978        }
1979
1980        if (!dsa_slave_dev_check(dev))
1981                return NOTIFY_DONE;
1982
1983        switchdev_work = kzalloc(sizeof(*switchdev_work), GFP_ATOMIC);
1984        if (!switchdev_work)
1985                return NOTIFY_BAD;
1986
1987        INIT_WORK(&switchdev_work->work,
1988                  dsa_slave_switchdev_event_work);
1989        switchdev_work->dev = dev;
1990        switchdev_work->event = event;
1991
1992        switch (event) {
1993        case SWITCHDEV_FDB_ADD_TO_DEVICE: /* fall through */
1994        case SWITCHDEV_FDB_DEL_TO_DEVICE:
1995                if (dsa_slave_switchdev_fdb_work_init(switchdev_work, ptr))
1996                        goto err_fdb_work_init;
1997                dev_hold(dev);
1998                break;
1999        default:
2000                kfree(switchdev_work);
2001                return NOTIFY_DONE;
2002        }
2003
2004        dsa_schedule_work(&switchdev_work->work);
2005        return NOTIFY_OK;
2006
2007err_fdb_work_init:
2008        kfree(switchdev_work);
2009        return NOTIFY_BAD;
2010}
2011
2012static int dsa_slave_switchdev_blocking_event(struct notifier_block *unused,
2013                                              unsigned long event, void *ptr)
2014{
2015        struct net_device *dev = switchdev_notifier_info_to_dev(ptr);
2016        int err;
2017
2018        switch (event) {
2019        case SWITCHDEV_PORT_OBJ_ADD:
2020                err = switchdev_handle_port_obj_add(dev, ptr,
2021                                                    dsa_slave_dev_check,
2022                                                    dsa_slave_port_obj_add);
2023                return notifier_from_errno(err);
2024        case SWITCHDEV_PORT_OBJ_DEL:
2025                err = switchdev_handle_port_obj_del(dev, ptr,
2026                                                    dsa_slave_dev_check,
2027                                                    dsa_slave_port_obj_del);
2028                return notifier_from_errno(err);
2029        case SWITCHDEV_PORT_ATTR_SET:
2030                err = switchdev_handle_port_attr_set(dev, ptr,
2031                                                     dsa_slave_dev_check,
2032                                                     dsa_slave_port_attr_set);
2033                return notifier_from_errno(err);
2034        }
2035
2036        return NOTIFY_DONE;
2037}
2038
2039static struct notifier_block dsa_slave_nb __read_mostly = {
2040        .notifier_call  = dsa_slave_netdevice_event,
2041};
2042
2043static struct notifier_block dsa_slave_switchdev_notifier = {
2044        .notifier_call = dsa_slave_switchdev_event,
2045};
2046
2047static struct notifier_block dsa_slave_switchdev_blocking_notifier = {
2048        .notifier_call = dsa_slave_switchdev_blocking_event,
2049};
2050
2051int dsa_slave_register_notifier(void)
2052{
2053        struct notifier_block *nb;
2054        int err;
2055
2056        err = register_netdevice_notifier(&dsa_slave_nb);
2057        if (err)
2058                return err;
2059
2060        err = register_switchdev_notifier(&dsa_slave_switchdev_notifier);
2061        if (err)
2062                goto err_switchdev_nb;
2063
2064        nb = &dsa_slave_switchdev_blocking_notifier;
2065        err = register_switchdev_blocking_notifier(nb);
2066        if (err)
2067                goto err_switchdev_blocking_nb;
2068
2069        return 0;
2070
2071err_switchdev_blocking_nb:
2072        unregister_switchdev_notifier(&dsa_slave_switchdev_notifier);
2073err_switchdev_nb:
2074        unregister_netdevice_notifier(&dsa_slave_nb);
2075        return err;
2076}
2077
2078void dsa_slave_unregister_notifier(void)
2079{
2080        struct notifier_block *nb;
2081        int err;
2082
2083        nb = &dsa_slave_switchdev_blocking_notifier;
2084        err = unregister_switchdev_blocking_notifier(nb);
2085        if (err)
2086                pr_err("DSA: failed to unregister switchdev blocking notifier (%d)\n", err);
2087
2088        err = unregister_switchdev_notifier(&dsa_slave_switchdev_notifier);
2089        if (err)
2090                pr_err("DSA: failed to unregister switchdev notifier (%d)\n", err);
2091
2092        err = unregister_netdevice_notifier(&dsa_slave_nb);
2093        if (err)
2094                pr_err("DSA: failed to unregister slave notifier (%d)\n", err);
2095}
2096