Merge tag 'drm-intel-fixes-2022-09-01' of git://anongit.freedesktop.org/drm/drm-intel...
[platform/kernel/linux-rpi.git] / net / dsa / slave.c
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/selftests.h>
19 #include <net/tc_act/tc_mirred.h>
20 #include <linux/if_bridge.h>
21 #include <linux/if_hsr.h>
22 #include <net/dcbnl.h>
23 #include <linux/netpoll.h>
24
25 #include "dsa_priv.h"
26
27 static void dsa_slave_standalone_event_work(struct work_struct *work)
28 {
29         struct dsa_standalone_event_work *standalone_work =
30                 container_of(work, struct dsa_standalone_event_work, work);
31         const unsigned char *addr = standalone_work->addr;
32         struct net_device *dev = standalone_work->dev;
33         struct dsa_port *dp = dsa_slave_to_port(dev);
34         struct switchdev_obj_port_mdb mdb;
35         struct dsa_switch *ds = dp->ds;
36         u16 vid = standalone_work->vid;
37         int err;
38
39         switch (standalone_work->event) {
40         case DSA_UC_ADD:
41                 err = dsa_port_standalone_host_fdb_add(dp, addr, vid);
42                 if (err) {
43                         dev_err(ds->dev,
44                                 "port %d failed to add %pM vid %d to fdb: %d\n",
45                                 dp->index, addr, vid, err);
46                         break;
47                 }
48                 break;
49
50         case DSA_UC_DEL:
51                 err = dsa_port_standalone_host_fdb_del(dp, addr, vid);
52                 if (err) {
53                         dev_err(ds->dev,
54                                 "port %d failed to delete %pM vid %d from fdb: %d\n",
55                                 dp->index, addr, vid, err);
56                 }
57
58                 break;
59         case DSA_MC_ADD:
60                 ether_addr_copy(mdb.addr, addr);
61                 mdb.vid = vid;
62
63                 err = dsa_port_standalone_host_mdb_add(dp, &mdb);
64                 if (err) {
65                         dev_err(ds->dev,
66                                 "port %d failed to add %pM vid %d to mdb: %d\n",
67                                 dp->index, addr, vid, err);
68                         break;
69                 }
70                 break;
71         case DSA_MC_DEL:
72                 ether_addr_copy(mdb.addr, addr);
73                 mdb.vid = vid;
74
75                 err = dsa_port_standalone_host_mdb_del(dp, &mdb);
76                 if (err) {
77                         dev_err(ds->dev,
78                                 "port %d failed to delete %pM vid %d from mdb: %d\n",
79                                 dp->index, addr, vid, err);
80                 }
81
82                 break;
83         }
84
85         kfree(standalone_work);
86 }
87
88 static int dsa_slave_schedule_standalone_work(struct net_device *dev,
89                                               enum dsa_standalone_event event,
90                                               const unsigned char *addr,
91                                               u16 vid)
92 {
93         struct dsa_standalone_event_work *standalone_work;
94
95         standalone_work = kzalloc(sizeof(*standalone_work), GFP_ATOMIC);
96         if (!standalone_work)
97                 return -ENOMEM;
98
99         INIT_WORK(&standalone_work->work, dsa_slave_standalone_event_work);
100         standalone_work->event = event;
101         standalone_work->dev = dev;
102
103         ether_addr_copy(standalone_work->addr, addr);
104         standalone_work->vid = vid;
105
106         dsa_schedule_work(&standalone_work->work);
107
108         return 0;
109 }
110
111 static int dsa_slave_sync_uc(struct net_device *dev,
112                              const unsigned char *addr)
113 {
114         struct net_device *master = dsa_slave_to_master(dev);
115         struct dsa_port *dp = dsa_slave_to_port(dev);
116
117         dev_uc_add(master, addr);
118
119         if (!dsa_switch_supports_uc_filtering(dp->ds))
120                 return 0;
121
122         return dsa_slave_schedule_standalone_work(dev, DSA_UC_ADD, addr, 0);
123 }
124
125 static int dsa_slave_unsync_uc(struct net_device *dev,
126                                const unsigned char *addr)
127 {
128         struct net_device *master = dsa_slave_to_master(dev);
129         struct dsa_port *dp = dsa_slave_to_port(dev);
130
131         dev_uc_del(master, addr);
132
133         if (!dsa_switch_supports_uc_filtering(dp->ds))
134                 return 0;
135
136         return dsa_slave_schedule_standalone_work(dev, DSA_UC_DEL, addr, 0);
137 }
138
139 static int dsa_slave_sync_mc(struct net_device *dev,
140                              const unsigned char *addr)
141 {
142         struct net_device *master = dsa_slave_to_master(dev);
143         struct dsa_port *dp = dsa_slave_to_port(dev);
144
145         dev_mc_add(master, addr);
146
147         if (!dsa_switch_supports_mc_filtering(dp->ds))
148                 return 0;
149
150         return dsa_slave_schedule_standalone_work(dev, DSA_MC_ADD, addr, 0);
151 }
152
153 static int dsa_slave_unsync_mc(struct net_device *dev,
154                                const unsigned char *addr)
155 {
156         struct net_device *master = dsa_slave_to_master(dev);
157         struct dsa_port *dp = dsa_slave_to_port(dev);
158
159         dev_mc_del(master, addr);
160
161         if (!dsa_switch_supports_mc_filtering(dp->ds))
162                 return 0;
163
164         return dsa_slave_schedule_standalone_work(dev, DSA_MC_DEL, addr, 0);
165 }
166
167 /* slave mii_bus handling ***************************************************/
168 static int dsa_slave_phy_read(struct mii_bus *bus, int addr, int reg)
169 {
170         struct dsa_switch *ds = bus->priv;
171
172         if (ds->phys_mii_mask & (1 << addr))
173                 return ds->ops->phy_read(ds, addr, reg);
174
175         return 0xffff;
176 }
177
178 static int dsa_slave_phy_write(struct mii_bus *bus, int addr, int reg, u16 val)
179 {
180         struct dsa_switch *ds = bus->priv;
181
182         if (ds->phys_mii_mask & (1 << addr))
183                 return ds->ops->phy_write(ds, addr, reg, val);
184
185         return 0;
186 }
187
188 void dsa_slave_mii_bus_init(struct dsa_switch *ds)
189 {
190         ds->slave_mii_bus->priv = (void *)ds;
191         ds->slave_mii_bus->name = "dsa slave smi";
192         ds->slave_mii_bus->read = dsa_slave_phy_read;
193         ds->slave_mii_bus->write = dsa_slave_phy_write;
194         snprintf(ds->slave_mii_bus->id, MII_BUS_ID_SIZE, "dsa-%d.%d",
195                  ds->dst->index, ds->index);
196         ds->slave_mii_bus->parent = ds->dev;
197         ds->slave_mii_bus->phy_mask = ~ds->phys_mii_mask;
198 }
199
200
201 /* slave device handling ****************************************************/
202 static int dsa_slave_get_iflink(const struct net_device *dev)
203 {
204         return dsa_slave_to_master(dev)->ifindex;
205 }
206
207 static int dsa_slave_open(struct net_device *dev)
208 {
209         struct net_device *master = dsa_slave_to_master(dev);
210         struct dsa_port *dp = dsa_slave_to_port(dev);
211         struct dsa_switch *ds = dp->ds;
212         int err;
213
214         err = dev_open(master, NULL);
215         if (err < 0) {
216                 netdev_err(dev, "failed to open master %s\n", master->name);
217                 goto out;
218         }
219
220         if (dsa_switch_supports_uc_filtering(ds)) {
221                 err = dsa_port_standalone_host_fdb_add(dp, dev->dev_addr, 0);
222                 if (err)
223                         goto out;
224         }
225
226         if (!ether_addr_equal(dev->dev_addr, master->dev_addr)) {
227                 err = dev_uc_add(master, dev->dev_addr);
228                 if (err < 0)
229                         goto del_host_addr;
230         }
231
232         err = dsa_port_enable_rt(dp, dev->phydev);
233         if (err)
234                 goto del_unicast;
235
236         return 0;
237
238 del_unicast:
239         if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
240                 dev_uc_del(master, dev->dev_addr);
241 del_host_addr:
242         if (dsa_switch_supports_uc_filtering(ds))
243                 dsa_port_standalone_host_fdb_del(dp, dev->dev_addr, 0);
244 out:
245         return err;
246 }
247
248 static int dsa_slave_close(struct net_device *dev)
249 {
250         struct net_device *master = dsa_slave_to_master(dev);
251         struct dsa_port *dp = dsa_slave_to_port(dev);
252         struct dsa_switch *ds = dp->ds;
253
254         dsa_port_disable_rt(dp);
255
256         if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
257                 dev_uc_del(master, dev->dev_addr);
258
259         if (dsa_switch_supports_uc_filtering(ds))
260                 dsa_port_standalone_host_fdb_del(dp, dev->dev_addr, 0);
261
262         return 0;
263 }
264
265 static void dsa_slave_manage_host_flood(struct net_device *dev)
266 {
267         bool mc = dev->flags & (IFF_PROMISC | IFF_ALLMULTI);
268         struct dsa_port *dp = dsa_slave_to_port(dev);
269         bool uc = dev->flags & IFF_PROMISC;
270
271         dsa_port_set_host_flood(dp, uc, mc);
272 }
273
274 static void dsa_slave_change_rx_flags(struct net_device *dev, int change)
275 {
276         struct net_device *master = dsa_slave_to_master(dev);
277         struct dsa_port *dp = dsa_slave_to_port(dev);
278         struct dsa_switch *ds = dp->ds;
279
280         if (change & IFF_ALLMULTI)
281                 dev_set_allmulti(master,
282                                  dev->flags & IFF_ALLMULTI ? 1 : -1);
283         if (change & IFF_PROMISC)
284                 dev_set_promiscuity(master,
285                                     dev->flags & IFF_PROMISC ? 1 : -1);
286
287         if (dsa_switch_supports_uc_filtering(ds) &&
288             dsa_switch_supports_mc_filtering(ds))
289                 dsa_slave_manage_host_flood(dev);
290 }
291
292 static void dsa_slave_set_rx_mode(struct net_device *dev)
293 {
294         __dev_mc_sync(dev, dsa_slave_sync_mc, dsa_slave_unsync_mc);
295         __dev_uc_sync(dev, dsa_slave_sync_uc, dsa_slave_unsync_uc);
296 }
297
298 static int dsa_slave_set_mac_address(struct net_device *dev, void *a)
299 {
300         struct net_device *master = dsa_slave_to_master(dev);
301         struct dsa_port *dp = dsa_slave_to_port(dev);
302         struct dsa_switch *ds = dp->ds;
303         struct sockaddr *addr = a;
304         int err;
305
306         if (!is_valid_ether_addr(addr->sa_data))
307                 return -EADDRNOTAVAIL;
308
309         /* If the port is down, the address isn't synced yet to hardware or
310          * to the DSA master, so there is nothing to change.
311          */
312         if (!(dev->flags & IFF_UP))
313                 goto out_change_dev_addr;
314
315         if (dsa_switch_supports_uc_filtering(ds)) {
316                 err = dsa_port_standalone_host_fdb_add(dp, addr->sa_data, 0);
317                 if (err)
318                         return err;
319         }
320
321         if (!ether_addr_equal(addr->sa_data, master->dev_addr)) {
322                 err = dev_uc_add(master, addr->sa_data);
323                 if (err < 0)
324                         goto del_unicast;
325         }
326
327         if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
328                 dev_uc_del(master, dev->dev_addr);
329
330         if (dsa_switch_supports_uc_filtering(ds))
331                 dsa_port_standalone_host_fdb_del(dp, dev->dev_addr, 0);
332
333 out_change_dev_addr:
334         eth_hw_addr_set(dev, addr->sa_data);
335
336         return 0;
337
338 del_unicast:
339         if (dsa_switch_supports_uc_filtering(ds))
340                 dsa_port_standalone_host_fdb_del(dp, addr->sa_data, 0);
341
342         return err;
343 }
344
345 struct dsa_slave_dump_ctx {
346         struct net_device *dev;
347         struct sk_buff *skb;
348         struct netlink_callback *cb;
349         int idx;
350 };
351
352 static int
353 dsa_slave_port_fdb_do_dump(const unsigned char *addr, u16 vid,
354                            bool is_static, void *data)
355 {
356         struct dsa_slave_dump_ctx *dump = data;
357         u32 portid = NETLINK_CB(dump->cb->skb).portid;
358         u32 seq = dump->cb->nlh->nlmsg_seq;
359         struct nlmsghdr *nlh;
360         struct ndmsg *ndm;
361
362         if (dump->idx < dump->cb->args[2])
363                 goto skip;
364
365         nlh = nlmsg_put(dump->skb, portid, seq, RTM_NEWNEIGH,
366                         sizeof(*ndm), NLM_F_MULTI);
367         if (!nlh)
368                 return -EMSGSIZE;
369
370         ndm = nlmsg_data(nlh);
371         ndm->ndm_family  = AF_BRIDGE;
372         ndm->ndm_pad1    = 0;
373         ndm->ndm_pad2    = 0;
374         ndm->ndm_flags   = NTF_SELF;
375         ndm->ndm_type    = 0;
376         ndm->ndm_ifindex = dump->dev->ifindex;
377         ndm->ndm_state   = is_static ? NUD_NOARP : NUD_REACHABLE;
378
379         if (nla_put(dump->skb, NDA_LLADDR, ETH_ALEN, addr))
380                 goto nla_put_failure;
381
382         if (vid && nla_put_u16(dump->skb, NDA_VLAN, vid))
383                 goto nla_put_failure;
384
385         nlmsg_end(dump->skb, nlh);
386
387 skip:
388         dump->idx++;
389         return 0;
390
391 nla_put_failure:
392         nlmsg_cancel(dump->skb, nlh);
393         return -EMSGSIZE;
394 }
395
396 static int
397 dsa_slave_fdb_dump(struct sk_buff *skb, struct netlink_callback *cb,
398                    struct net_device *dev, struct net_device *filter_dev,
399                    int *idx)
400 {
401         struct dsa_port *dp = dsa_slave_to_port(dev);
402         struct dsa_slave_dump_ctx dump = {
403                 .dev = dev,
404                 .skb = skb,
405                 .cb = cb,
406                 .idx = *idx,
407         };
408         int err;
409
410         err = dsa_port_fdb_dump(dp, dsa_slave_port_fdb_do_dump, &dump);
411         *idx = dump.idx;
412
413         return err;
414 }
415
416 static int dsa_slave_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
417 {
418         struct dsa_slave_priv *p = netdev_priv(dev);
419         struct dsa_switch *ds = p->dp->ds;
420         int port = p->dp->index;
421
422         /* Pass through to switch driver if it supports timestamping */
423         switch (cmd) {
424         case SIOCGHWTSTAMP:
425                 if (ds->ops->port_hwtstamp_get)
426                         return ds->ops->port_hwtstamp_get(ds, port, ifr);
427                 break;
428         case SIOCSHWTSTAMP:
429                 if (ds->ops->port_hwtstamp_set)
430                         return ds->ops->port_hwtstamp_set(ds, port, ifr);
431                 break;
432         }
433
434         return phylink_mii_ioctl(p->dp->pl, ifr, cmd);
435 }
436
437 static int dsa_slave_port_attr_set(struct net_device *dev, const void *ctx,
438                                    const struct switchdev_attr *attr,
439                                    struct netlink_ext_ack *extack)
440 {
441         struct dsa_port *dp = dsa_slave_to_port(dev);
442         int ret;
443
444         if (ctx && ctx != dp)
445                 return 0;
446
447         switch (attr->id) {
448         case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
449                 if (!dsa_port_offloads_bridge_port(dp, attr->orig_dev))
450                         return -EOPNOTSUPP;
451
452                 ret = dsa_port_set_state(dp, attr->u.stp_state, true);
453                 break;
454         case SWITCHDEV_ATTR_ID_PORT_MST_STATE:
455                 if (!dsa_port_offloads_bridge_port(dp, attr->orig_dev))
456                         return -EOPNOTSUPP;
457
458                 ret = dsa_port_set_mst_state(dp, &attr->u.mst_state, extack);
459                 break;
460         case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
461                 if (!dsa_port_offloads_bridge_dev(dp, attr->orig_dev))
462                         return -EOPNOTSUPP;
463
464                 ret = dsa_port_vlan_filtering(dp, attr->u.vlan_filtering,
465                                               extack);
466                 break;
467         case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME:
468                 if (!dsa_port_offloads_bridge_dev(dp, attr->orig_dev))
469                         return -EOPNOTSUPP;
470
471                 ret = dsa_port_ageing_time(dp, attr->u.ageing_time);
472                 break;
473         case SWITCHDEV_ATTR_ID_BRIDGE_MST:
474                 if (!dsa_port_offloads_bridge_dev(dp, attr->orig_dev))
475                         return -EOPNOTSUPP;
476
477                 ret = dsa_port_mst_enable(dp, attr->u.mst, extack);
478                 break;
479         case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS:
480                 if (!dsa_port_offloads_bridge_port(dp, attr->orig_dev))
481                         return -EOPNOTSUPP;
482
483                 ret = dsa_port_pre_bridge_flags(dp, attr->u.brport_flags,
484                                                 extack);
485                 break;
486         case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS:
487                 if (!dsa_port_offloads_bridge_port(dp, attr->orig_dev))
488                         return -EOPNOTSUPP;
489
490                 ret = dsa_port_bridge_flags(dp, attr->u.brport_flags, extack);
491                 break;
492         case SWITCHDEV_ATTR_ID_VLAN_MSTI:
493                 if (!dsa_port_offloads_bridge_dev(dp, attr->orig_dev))
494                         return -EOPNOTSUPP;
495
496                 ret = dsa_port_vlan_msti(dp, &attr->u.vlan_msti);
497                 break;
498         default:
499                 ret = -EOPNOTSUPP;
500                 break;
501         }
502
503         return ret;
504 }
505
506 /* Must be called under rcu_read_lock() */
507 static int
508 dsa_slave_vlan_check_for_8021q_uppers(struct net_device *slave,
509                                       const struct switchdev_obj_port_vlan *vlan)
510 {
511         struct net_device *upper_dev;
512         struct list_head *iter;
513
514         netdev_for_each_upper_dev_rcu(slave, upper_dev, iter) {
515                 u16 vid;
516
517                 if (!is_vlan_dev(upper_dev))
518                         continue;
519
520                 vid = vlan_dev_vlan_id(upper_dev);
521                 if (vid == vlan->vid)
522                         return -EBUSY;
523         }
524
525         return 0;
526 }
527
528 static int dsa_slave_vlan_add(struct net_device *dev,
529                               const struct switchdev_obj *obj,
530                               struct netlink_ext_ack *extack)
531 {
532         struct dsa_port *dp = dsa_slave_to_port(dev);
533         struct switchdev_obj_port_vlan *vlan;
534         int err;
535
536         if (dsa_port_skip_vlan_configuration(dp)) {
537                 NL_SET_ERR_MSG_MOD(extack, "skipping configuration of VLAN");
538                 return 0;
539         }
540
541         vlan = SWITCHDEV_OBJ_PORT_VLAN(obj);
542
543         /* Deny adding a bridge VLAN when there is already an 802.1Q upper with
544          * the same VID.
545          */
546         if (br_vlan_enabled(dsa_port_bridge_dev_get(dp))) {
547                 rcu_read_lock();
548                 err = dsa_slave_vlan_check_for_8021q_uppers(dev, vlan);
549                 rcu_read_unlock();
550                 if (err) {
551                         NL_SET_ERR_MSG_MOD(extack,
552                                            "Port already has a VLAN upper with this VID");
553                         return err;
554                 }
555         }
556
557         return dsa_port_vlan_add(dp, vlan, extack);
558 }
559
560 /* Offload a VLAN installed on the bridge or on a foreign interface by
561  * installing it as a VLAN towards the CPU port.
562  */
563 static int dsa_slave_host_vlan_add(struct net_device *dev,
564                                    const struct switchdev_obj *obj,
565                                    struct netlink_ext_ack *extack)
566 {
567         struct dsa_port *dp = dsa_slave_to_port(dev);
568         struct switchdev_obj_port_vlan vlan;
569
570         /* Do nothing if this is a software bridge */
571         if (!dp->bridge)
572                 return -EOPNOTSUPP;
573
574         if (dsa_port_skip_vlan_configuration(dp)) {
575                 NL_SET_ERR_MSG_MOD(extack, "skipping configuration of VLAN");
576                 return 0;
577         }
578
579         vlan = *SWITCHDEV_OBJ_PORT_VLAN(obj);
580
581         /* Even though drivers often handle CPU membership in special ways,
582          * it doesn't make sense to program a PVID, so clear this flag.
583          */
584         vlan.flags &= ~BRIDGE_VLAN_INFO_PVID;
585
586         return dsa_port_host_vlan_add(dp, &vlan, extack);
587 }
588
589 static int dsa_slave_port_obj_add(struct net_device *dev, const void *ctx,
590                                   const struct switchdev_obj *obj,
591                                   struct netlink_ext_ack *extack)
592 {
593         struct dsa_port *dp = dsa_slave_to_port(dev);
594         int err;
595
596         if (ctx && ctx != dp)
597                 return 0;
598
599         switch (obj->id) {
600         case SWITCHDEV_OBJ_ID_PORT_MDB:
601                 if (!dsa_port_offloads_bridge_port(dp, obj->orig_dev))
602                         return -EOPNOTSUPP;
603
604                 err = dsa_port_mdb_add(dp, SWITCHDEV_OBJ_PORT_MDB(obj));
605                 break;
606         case SWITCHDEV_OBJ_ID_HOST_MDB:
607                 if (!dsa_port_offloads_bridge_dev(dp, obj->orig_dev))
608                         return -EOPNOTSUPP;
609
610                 err = dsa_port_bridge_host_mdb_add(dp, SWITCHDEV_OBJ_PORT_MDB(obj));
611                 break;
612         case SWITCHDEV_OBJ_ID_PORT_VLAN:
613                 if (dsa_port_offloads_bridge_port(dp, obj->orig_dev))
614                         err = dsa_slave_vlan_add(dev, obj, extack);
615                 else
616                         err = dsa_slave_host_vlan_add(dev, obj, extack);
617                 break;
618         case SWITCHDEV_OBJ_ID_MRP:
619                 if (!dsa_port_offloads_bridge_dev(dp, obj->orig_dev))
620                         return -EOPNOTSUPP;
621
622                 err = dsa_port_mrp_add(dp, SWITCHDEV_OBJ_MRP(obj));
623                 break;
624         case SWITCHDEV_OBJ_ID_RING_ROLE_MRP:
625                 if (!dsa_port_offloads_bridge_dev(dp, obj->orig_dev))
626                         return -EOPNOTSUPP;
627
628                 err = dsa_port_mrp_add_ring_role(dp,
629                                                  SWITCHDEV_OBJ_RING_ROLE_MRP(obj));
630                 break;
631         default:
632                 err = -EOPNOTSUPP;
633                 break;
634         }
635
636         return err;
637 }
638
639 static int dsa_slave_vlan_del(struct net_device *dev,
640                               const struct switchdev_obj *obj)
641 {
642         struct dsa_port *dp = dsa_slave_to_port(dev);
643         struct switchdev_obj_port_vlan *vlan;
644
645         if (dsa_port_skip_vlan_configuration(dp))
646                 return 0;
647
648         vlan = SWITCHDEV_OBJ_PORT_VLAN(obj);
649
650         return dsa_port_vlan_del(dp, vlan);
651 }
652
653 static int dsa_slave_host_vlan_del(struct net_device *dev,
654                                    const struct switchdev_obj *obj)
655 {
656         struct dsa_port *dp = dsa_slave_to_port(dev);
657         struct switchdev_obj_port_vlan *vlan;
658
659         /* Do nothing if this is a software bridge */
660         if (!dp->bridge)
661                 return -EOPNOTSUPP;
662
663         if (dsa_port_skip_vlan_configuration(dp))
664                 return 0;
665
666         vlan = SWITCHDEV_OBJ_PORT_VLAN(obj);
667
668         return dsa_port_host_vlan_del(dp, vlan);
669 }
670
671 static int dsa_slave_port_obj_del(struct net_device *dev, const void *ctx,
672                                   const struct switchdev_obj *obj)
673 {
674         struct dsa_port *dp = dsa_slave_to_port(dev);
675         int err;
676
677         if (ctx && ctx != dp)
678                 return 0;
679
680         switch (obj->id) {
681         case SWITCHDEV_OBJ_ID_PORT_MDB:
682                 if (!dsa_port_offloads_bridge_port(dp, obj->orig_dev))
683                         return -EOPNOTSUPP;
684
685                 err = dsa_port_mdb_del(dp, SWITCHDEV_OBJ_PORT_MDB(obj));
686                 break;
687         case SWITCHDEV_OBJ_ID_HOST_MDB:
688                 if (!dsa_port_offloads_bridge_dev(dp, obj->orig_dev))
689                         return -EOPNOTSUPP;
690
691                 err = dsa_port_bridge_host_mdb_del(dp, SWITCHDEV_OBJ_PORT_MDB(obj));
692                 break;
693         case SWITCHDEV_OBJ_ID_PORT_VLAN:
694                 if (dsa_port_offloads_bridge_port(dp, obj->orig_dev))
695                         err = dsa_slave_vlan_del(dev, obj);
696                 else
697                         err = dsa_slave_host_vlan_del(dev, obj);
698                 break;
699         case SWITCHDEV_OBJ_ID_MRP:
700                 if (!dsa_port_offloads_bridge_dev(dp, obj->orig_dev))
701                         return -EOPNOTSUPP;
702
703                 err = dsa_port_mrp_del(dp, SWITCHDEV_OBJ_MRP(obj));
704                 break;
705         case SWITCHDEV_OBJ_ID_RING_ROLE_MRP:
706                 if (!dsa_port_offloads_bridge_dev(dp, obj->orig_dev))
707                         return -EOPNOTSUPP;
708
709                 err = dsa_port_mrp_del_ring_role(dp,
710                                                  SWITCHDEV_OBJ_RING_ROLE_MRP(obj));
711                 break;
712         default:
713                 err = -EOPNOTSUPP;
714                 break;
715         }
716
717         return err;
718 }
719
720 static inline netdev_tx_t dsa_slave_netpoll_send_skb(struct net_device *dev,
721                                                      struct sk_buff *skb)
722 {
723 #ifdef CONFIG_NET_POLL_CONTROLLER
724         struct dsa_slave_priv *p = netdev_priv(dev);
725
726         return netpoll_send_skb(p->netpoll, skb);
727 #else
728         BUG();
729         return NETDEV_TX_OK;
730 #endif
731 }
732
733 static void dsa_skb_tx_timestamp(struct dsa_slave_priv *p,
734                                  struct sk_buff *skb)
735 {
736         struct dsa_switch *ds = p->dp->ds;
737
738         if (!(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP))
739                 return;
740
741         if (!ds->ops->port_txtstamp)
742                 return;
743
744         ds->ops->port_txtstamp(ds, p->dp->index, skb);
745 }
746
747 netdev_tx_t dsa_enqueue_skb(struct sk_buff *skb, struct net_device *dev)
748 {
749         /* SKB for netpoll still need to be mangled with the protocol-specific
750          * tag to be successfully transmitted
751          */
752         if (unlikely(netpoll_tx_running(dev)))
753                 return dsa_slave_netpoll_send_skb(dev, skb);
754
755         /* Queue the SKB for transmission on the parent interface, but
756          * do not modify its EtherType
757          */
758         skb->dev = dsa_slave_to_master(dev);
759         dev_queue_xmit(skb);
760
761         return NETDEV_TX_OK;
762 }
763 EXPORT_SYMBOL_GPL(dsa_enqueue_skb);
764
765 static int dsa_realloc_skb(struct sk_buff *skb, struct net_device *dev)
766 {
767         int needed_headroom = dev->needed_headroom;
768         int needed_tailroom = dev->needed_tailroom;
769
770         /* For tail taggers, we need to pad short frames ourselves, to ensure
771          * that the tail tag does not fail at its role of being at the end of
772          * the packet, once the master interface pads the frame. Account for
773          * that pad length here, and pad later.
774          */
775         if (unlikely(needed_tailroom && skb->len < ETH_ZLEN))
776                 needed_tailroom += ETH_ZLEN - skb->len;
777         /* skb_headroom() returns unsigned int... */
778         needed_headroom = max_t(int, needed_headroom - skb_headroom(skb), 0);
779         needed_tailroom = max_t(int, needed_tailroom - skb_tailroom(skb), 0);
780
781         if (likely(!needed_headroom && !needed_tailroom && !skb_cloned(skb)))
782                 /* No reallocation needed, yay! */
783                 return 0;
784
785         return pskb_expand_head(skb, needed_headroom, needed_tailroom,
786                                 GFP_ATOMIC);
787 }
788
789 static netdev_tx_t dsa_slave_xmit(struct sk_buff *skb, struct net_device *dev)
790 {
791         struct dsa_slave_priv *p = netdev_priv(dev);
792         struct sk_buff *nskb;
793
794         dev_sw_netstats_tx_add(dev, 1, skb->len);
795
796         memset(skb->cb, 0, sizeof(skb->cb));
797
798         /* Handle tx timestamp if any */
799         dsa_skb_tx_timestamp(p, skb);
800
801         if (dsa_realloc_skb(skb, dev)) {
802                 dev_kfree_skb_any(skb);
803                 return NETDEV_TX_OK;
804         }
805
806         /* needed_tailroom should still be 'warm' in the cache line from
807          * dsa_realloc_skb(), which has also ensured that padding is safe.
808          */
809         if (dev->needed_tailroom)
810                 eth_skb_pad(skb);
811
812         /* Transmit function may have to reallocate the original SKB,
813          * in which case it must have freed it. Only free it here on error.
814          */
815         nskb = p->xmit(skb, dev);
816         if (!nskb) {
817                 kfree_skb(skb);
818                 return NETDEV_TX_OK;
819         }
820
821         return dsa_enqueue_skb(nskb, dev);
822 }
823
824 /* ethtool operations *******************************************************/
825
826 static void dsa_slave_get_drvinfo(struct net_device *dev,
827                                   struct ethtool_drvinfo *drvinfo)
828 {
829         strlcpy(drvinfo->driver, "dsa", sizeof(drvinfo->driver));
830         strlcpy(drvinfo->fw_version, "N/A", sizeof(drvinfo->fw_version));
831         strlcpy(drvinfo->bus_info, "platform", sizeof(drvinfo->bus_info));
832 }
833
834 static int dsa_slave_get_regs_len(struct net_device *dev)
835 {
836         struct dsa_port *dp = dsa_slave_to_port(dev);
837         struct dsa_switch *ds = dp->ds;
838
839         if (ds->ops->get_regs_len)
840                 return ds->ops->get_regs_len(ds, dp->index);
841
842         return -EOPNOTSUPP;
843 }
844
845 static void
846 dsa_slave_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *_p)
847 {
848         struct dsa_port *dp = dsa_slave_to_port(dev);
849         struct dsa_switch *ds = dp->ds;
850
851         if (ds->ops->get_regs)
852                 ds->ops->get_regs(ds, dp->index, regs, _p);
853 }
854
855 static int dsa_slave_nway_reset(struct net_device *dev)
856 {
857         struct dsa_port *dp = dsa_slave_to_port(dev);
858
859         return phylink_ethtool_nway_reset(dp->pl);
860 }
861
862 static int dsa_slave_get_eeprom_len(struct net_device *dev)
863 {
864         struct dsa_port *dp = dsa_slave_to_port(dev);
865         struct dsa_switch *ds = dp->ds;
866
867         if (ds->cd && ds->cd->eeprom_len)
868                 return ds->cd->eeprom_len;
869
870         if (ds->ops->get_eeprom_len)
871                 return ds->ops->get_eeprom_len(ds);
872
873         return 0;
874 }
875
876 static int dsa_slave_get_eeprom(struct net_device *dev,
877                                 struct ethtool_eeprom *eeprom, u8 *data)
878 {
879         struct dsa_port *dp = dsa_slave_to_port(dev);
880         struct dsa_switch *ds = dp->ds;
881
882         if (ds->ops->get_eeprom)
883                 return ds->ops->get_eeprom(ds, eeprom, data);
884
885         return -EOPNOTSUPP;
886 }
887
888 static int dsa_slave_set_eeprom(struct net_device *dev,
889                                 struct ethtool_eeprom *eeprom, u8 *data)
890 {
891         struct dsa_port *dp = dsa_slave_to_port(dev);
892         struct dsa_switch *ds = dp->ds;
893
894         if (ds->ops->set_eeprom)
895                 return ds->ops->set_eeprom(ds, eeprom, data);
896
897         return -EOPNOTSUPP;
898 }
899
900 static void dsa_slave_get_strings(struct net_device *dev,
901                                   uint32_t stringset, uint8_t *data)
902 {
903         struct dsa_port *dp = dsa_slave_to_port(dev);
904         struct dsa_switch *ds = dp->ds;
905
906         if (stringset == ETH_SS_STATS) {
907                 int len = ETH_GSTRING_LEN;
908
909                 strncpy(data, "tx_packets", len);
910                 strncpy(data + len, "tx_bytes", len);
911                 strncpy(data + 2 * len, "rx_packets", len);
912                 strncpy(data + 3 * len, "rx_bytes", len);
913                 if (ds->ops->get_strings)
914                         ds->ops->get_strings(ds, dp->index, stringset,
915                                              data + 4 * len);
916         } else if (stringset ==  ETH_SS_TEST) {
917                 net_selftest_get_strings(data);
918         }
919
920 }
921
922 static void dsa_slave_get_ethtool_stats(struct net_device *dev,
923                                         struct ethtool_stats *stats,
924                                         uint64_t *data)
925 {
926         struct dsa_port *dp = dsa_slave_to_port(dev);
927         struct dsa_switch *ds = dp->ds;
928         struct pcpu_sw_netstats *s;
929         unsigned int start;
930         int i;
931
932         for_each_possible_cpu(i) {
933                 u64 tx_packets, tx_bytes, rx_packets, rx_bytes;
934
935                 s = per_cpu_ptr(dev->tstats, i);
936                 do {
937                         start = u64_stats_fetch_begin_irq(&s->syncp);
938                         tx_packets = u64_stats_read(&s->tx_packets);
939                         tx_bytes = u64_stats_read(&s->tx_bytes);
940                         rx_packets = u64_stats_read(&s->rx_packets);
941                         rx_bytes = u64_stats_read(&s->rx_bytes);
942                 } while (u64_stats_fetch_retry_irq(&s->syncp, start));
943                 data[0] += tx_packets;
944                 data[1] += tx_bytes;
945                 data[2] += rx_packets;
946                 data[3] += rx_bytes;
947         }
948         if (ds->ops->get_ethtool_stats)
949                 ds->ops->get_ethtool_stats(ds, dp->index, data + 4);
950 }
951
952 static int dsa_slave_get_sset_count(struct net_device *dev, int sset)
953 {
954         struct dsa_port *dp = dsa_slave_to_port(dev);
955         struct dsa_switch *ds = dp->ds;
956
957         if (sset == ETH_SS_STATS) {
958                 int count = 0;
959
960                 if (ds->ops->get_sset_count) {
961                         count = ds->ops->get_sset_count(ds, dp->index, sset);
962                         if (count < 0)
963                                 return count;
964                 }
965
966                 return count + 4;
967         } else if (sset ==  ETH_SS_TEST) {
968                 return net_selftest_get_count();
969         }
970
971         return -EOPNOTSUPP;
972 }
973
974 static void dsa_slave_get_eth_phy_stats(struct net_device *dev,
975                                         struct ethtool_eth_phy_stats *phy_stats)
976 {
977         struct dsa_port *dp = dsa_slave_to_port(dev);
978         struct dsa_switch *ds = dp->ds;
979
980         if (ds->ops->get_eth_phy_stats)
981                 ds->ops->get_eth_phy_stats(ds, dp->index, phy_stats);
982 }
983
984 static void dsa_slave_get_eth_mac_stats(struct net_device *dev,
985                                         struct ethtool_eth_mac_stats *mac_stats)
986 {
987         struct dsa_port *dp = dsa_slave_to_port(dev);
988         struct dsa_switch *ds = dp->ds;
989
990         if (ds->ops->get_eth_mac_stats)
991                 ds->ops->get_eth_mac_stats(ds, dp->index, mac_stats);
992 }
993
994 static void
995 dsa_slave_get_eth_ctrl_stats(struct net_device *dev,
996                              struct ethtool_eth_ctrl_stats *ctrl_stats)
997 {
998         struct dsa_port *dp = dsa_slave_to_port(dev);
999         struct dsa_switch *ds = dp->ds;
1000
1001         if (ds->ops->get_eth_ctrl_stats)
1002                 ds->ops->get_eth_ctrl_stats(ds, dp->index, ctrl_stats);
1003 }
1004
1005 static void
1006 dsa_slave_get_rmon_stats(struct net_device *dev,
1007                          struct ethtool_rmon_stats *rmon_stats,
1008                          const struct ethtool_rmon_hist_range **ranges)
1009 {
1010         struct dsa_port *dp = dsa_slave_to_port(dev);
1011         struct dsa_switch *ds = dp->ds;
1012
1013         if (ds->ops->get_rmon_stats)
1014                 ds->ops->get_rmon_stats(ds, dp->index, rmon_stats, ranges);
1015 }
1016
1017 static void dsa_slave_net_selftest(struct net_device *ndev,
1018                                    struct ethtool_test *etest, u64 *buf)
1019 {
1020         struct dsa_port *dp = dsa_slave_to_port(ndev);
1021         struct dsa_switch *ds = dp->ds;
1022
1023         if (ds->ops->self_test) {
1024                 ds->ops->self_test(ds, dp->index, etest, buf);
1025                 return;
1026         }
1027
1028         net_selftest(ndev, etest, buf);
1029 }
1030
1031 static void dsa_slave_get_wol(struct net_device *dev, struct ethtool_wolinfo *w)
1032 {
1033         struct dsa_port *dp = dsa_slave_to_port(dev);
1034         struct dsa_switch *ds = dp->ds;
1035
1036         phylink_ethtool_get_wol(dp->pl, w);
1037
1038         if (ds->ops->get_wol)
1039                 ds->ops->get_wol(ds, dp->index, w);
1040 }
1041
1042 static int dsa_slave_set_wol(struct net_device *dev, struct ethtool_wolinfo *w)
1043 {
1044         struct dsa_port *dp = dsa_slave_to_port(dev);
1045         struct dsa_switch *ds = dp->ds;
1046         int ret = -EOPNOTSUPP;
1047
1048         phylink_ethtool_set_wol(dp->pl, w);
1049
1050         if (ds->ops->set_wol)
1051                 ret = ds->ops->set_wol(ds, dp->index, w);
1052
1053         return ret;
1054 }
1055
1056 static int dsa_slave_set_eee(struct net_device *dev, struct ethtool_eee *e)
1057 {
1058         struct dsa_port *dp = dsa_slave_to_port(dev);
1059         struct dsa_switch *ds = dp->ds;
1060         int ret;
1061
1062         /* Port's PHY and MAC both need to be EEE capable */
1063         if (!dev->phydev || !dp->pl)
1064                 return -ENODEV;
1065
1066         if (!ds->ops->set_mac_eee)
1067                 return -EOPNOTSUPP;
1068
1069         ret = ds->ops->set_mac_eee(ds, dp->index, e);
1070         if (ret)
1071                 return ret;
1072
1073         return phylink_ethtool_set_eee(dp->pl, e);
1074 }
1075
1076 static int dsa_slave_get_eee(struct net_device *dev, struct ethtool_eee *e)
1077 {
1078         struct dsa_port *dp = dsa_slave_to_port(dev);
1079         struct dsa_switch *ds = dp->ds;
1080         int ret;
1081
1082         /* Port's PHY and MAC both need to be EEE capable */
1083         if (!dev->phydev || !dp->pl)
1084                 return -ENODEV;
1085
1086         if (!ds->ops->get_mac_eee)
1087                 return -EOPNOTSUPP;
1088
1089         ret = ds->ops->get_mac_eee(ds, dp->index, e);
1090         if (ret)
1091                 return ret;
1092
1093         return phylink_ethtool_get_eee(dp->pl, e);
1094 }
1095
1096 static int dsa_slave_get_link_ksettings(struct net_device *dev,
1097                                         struct ethtool_link_ksettings *cmd)
1098 {
1099         struct dsa_port *dp = dsa_slave_to_port(dev);
1100
1101         return phylink_ethtool_ksettings_get(dp->pl, cmd);
1102 }
1103
1104 static int dsa_slave_set_link_ksettings(struct net_device *dev,
1105                                         const struct ethtool_link_ksettings *cmd)
1106 {
1107         struct dsa_port *dp = dsa_slave_to_port(dev);
1108
1109         return phylink_ethtool_ksettings_set(dp->pl, cmd);
1110 }
1111
1112 static void dsa_slave_get_pause_stats(struct net_device *dev,
1113                                   struct ethtool_pause_stats *pause_stats)
1114 {
1115         struct dsa_port *dp = dsa_slave_to_port(dev);
1116         struct dsa_switch *ds = dp->ds;
1117
1118         if (ds->ops->get_pause_stats)
1119                 ds->ops->get_pause_stats(ds, dp->index, pause_stats);
1120 }
1121
1122 static void dsa_slave_get_pauseparam(struct net_device *dev,
1123                                      struct ethtool_pauseparam *pause)
1124 {
1125         struct dsa_port *dp = dsa_slave_to_port(dev);
1126
1127         phylink_ethtool_get_pauseparam(dp->pl, pause);
1128 }
1129
1130 static int dsa_slave_set_pauseparam(struct net_device *dev,
1131                                     struct ethtool_pauseparam *pause)
1132 {
1133         struct dsa_port *dp = dsa_slave_to_port(dev);
1134
1135         return phylink_ethtool_set_pauseparam(dp->pl, pause);
1136 }
1137
1138 #ifdef CONFIG_NET_POLL_CONTROLLER
1139 static int dsa_slave_netpoll_setup(struct net_device *dev,
1140                                    struct netpoll_info *ni)
1141 {
1142         struct net_device *master = dsa_slave_to_master(dev);
1143         struct dsa_slave_priv *p = netdev_priv(dev);
1144         struct netpoll *netpoll;
1145         int err = 0;
1146
1147         netpoll = kzalloc(sizeof(*netpoll), GFP_KERNEL);
1148         if (!netpoll)
1149                 return -ENOMEM;
1150
1151         err = __netpoll_setup(netpoll, master);
1152         if (err) {
1153                 kfree(netpoll);
1154                 goto out;
1155         }
1156
1157         p->netpoll = netpoll;
1158 out:
1159         return err;
1160 }
1161
1162 static void dsa_slave_netpoll_cleanup(struct net_device *dev)
1163 {
1164         struct dsa_slave_priv *p = netdev_priv(dev);
1165         struct netpoll *netpoll = p->netpoll;
1166
1167         if (!netpoll)
1168                 return;
1169
1170         p->netpoll = NULL;
1171
1172         __netpoll_free(netpoll);
1173 }
1174
1175 static void dsa_slave_poll_controller(struct net_device *dev)
1176 {
1177 }
1178 #endif
1179
1180 static struct dsa_mall_tc_entry *
1181 dsa_slave_mall_tc_entry_find(struct net_device *dev, unsigned long cookie)
1182 {
1183         struct dsa_slave_priv *p = netdev_priv(dev);
1184         struct dsa_mall_tc_entry *mall_tc_entry;
1185
1186         list_for_each_entry(mall_tc_entry, &p->mall_tc_list, list)
1187                 if (mall_tc_entry->cookie == cookie)
1188                         return mall_tc_entry;
1189
1190         return NULL;
1191 }
1192
1193 static int
1194 dsa_slave_add_cls_matchall_mirred(struct net_device *dev,
1195                                   struct tc_cls_matchall_offload *cls,
1196                                   bool ingress)
1197 {
1198         struct netlink_ext_ack *extack = cls->common.extack;
1199         struct dsa_port *dp = dsa_slave_to_port(dev);
1200         struct dsa_slave_priv *p = netdev_priv(dev);
1201         struct dsa_mall_mirror_tc_entry *mirror;
1202         struct dsa_mall_tc_entry *mall_tc_entry;
1203         struct dsa_switch *ds = dp->ds;
1204         struct flow_action_entry *act;
1205         struct dsa_port *to_dp;
1206         int err;
1207
1208         if (!ds->ops->port_mirror_add)
1209                 return -EOPNOTSUPP;
1210
1211         if (!flow_action_basic_hw_stats_check(&cls->rule->action,
1212                                               cls->common.extack))
1213                 return -EOPNOTSUPP;
1214
1215         act = &cls->rule->action.entries[0];
1216
1217         if (!act->dev)
1218                 return -EINVAL;
1219
1220         if (!dsa_slave_dev_check(act->dev))
1221                 return -EOPNOTSUPP;
1222
1223         mall_tc_entry = kzalloc(sizeof(*mall_tc_entry), GFP_KERNEL);
1224         if (!mall_tc_entry)
1225                 return -ENOMEM;
1226
1227         mall_tc_entry->cookie = cls->cookie;
1228         mall_tc_entry->type = DSA_PORT_MALL_MIRROR;
1229         mirror = &mall_tc_entry->mirror;
1230
1231         to_dp = dsa_slave_to_port(act->dev);
1232
1233         mirror->to_local_port = to_dp->index;
1234         mirror->ingress = ingress;
1235
1236         err = ds->ops->port_mirror_add(ds, dp->index, mirror, ingress, extack);
1237         if (err) {
1238                 kfree(mall_tc_entry);
1239                 return err;
1240         }
1241
1242         list_add_tail(&mall_tc_entry->list, &p->mall_tc_list);
1243
1244         return err;
1245 }
1246
1247 static int
1248 dsa_slave_add_cls_matchall_police(struct net_device *dev,
1249                                   struct tc_cls_matchall_offload *cls,
1250                                   bool ingress)
1251 {
1252         struct netlink_ext_ack *extack = cls->common.extack;
1253         struct dsa_port *dp = dsa_slave_to_port(dev);
1254         struct dsa_slave_priv *p = netdev_priv(dev);
1255         struct dsa_mall_policer_tc_entry *policer;
1256         struct dsa_mall_tc_entry *mall_tc_entry;
1257         struct dsa_switch *ds = dp->ds;
1258         struct flow_action_entry *act;
1259         int err;
1260
1261         if (!ds->ops->port_policer_add) {
1262                 NL_SET_ERR_MSG_MOD(extack,
1263                                    "Policing offload not implemented");
1264                 return -EOPNOTSUPP;
1265         }
1266
1267         if (!ingress) {
1268                 NL_SET_ERR_MSG_MOD(extack,
1269                                    "Only supported on ingress qdisc");
1270                 return -EOPNOTSUPP;
1271         }
1272
1273         if (!flow_action_basic_hw_stats_check(&cls->rule->action,
1274                                               cls->common.extack))
1275                 return -EOPNOTSUPP;
1276
1277         list_for_each_entry(mall_tc_entry, &p->mall_tc_list, list) {
1278                 if (mall_tc_entry->type == DSA_PORT_MALL_POLICER) {
1279                         NL_SET_ERR_MSG_MOD(extack,
1280                                            "Only one port policer allowed");
1281                         return -EEXIST;
1282                 }
1283         }
1284
1285         act = &cls->rule->action.entries[0];
1286
1287         mall_tc_entry = kzalloc(sizeof(*mall_tc_entry), GFP_KERNEL);
1288         if (!mall_tc_entry)
1289                 return -ENOMEM;
1290
1291         mall_tc_entry->cookie = cls->cookie;
1292         mall_tc_entry->type = DSA_PORT_MALL_POLICER;
1293         policer = &mall_tc_entry->policer;
1294         policer->rate_bytes_per_sec = act->police.rate_bytes_ps;
1295         policer->burst = act->police.burst;
1296
1297         err = ds->ops->port_policer_add(ds, dp->index, policer);
1298         if (err) {
1299                 kfree(mall_tc_entry);
1300                 return err;
1301         }
1302
1303         list_add_tail(&mall_tc_entry->list, &p->mall_tc_list);
1304
1305         return err;
1306 }
1307
1308 static int dsa_slave_add_cls_matchall(struct net_device *dev,
1309                                       struct tc_cls_matchall_offload *cls,
1310                                       bool ingress)
1311 {
1312         int err = -EOPNOTSUPP;
1313
1314         if (cls->common.protocol == htons(ETH_P_ALL) &&
1315             flow_offload_has_one_action(&cls->rule->action) &&
1316             cls->rule->action.entries[0].id == FLOW_ACTION_MIRRED)
1317                 err = dsa_slave_add_cls_matchall_mirred(dev, cls, ingress);
1318         else if (flow_offload_has_one_action(&cls->rule->action) &&
1319                  cls->rule->action.entries[0].id == FLOW_ACTION_POLICE)
1320                 err = dsa_slave_add_cls_matchall_police(dev, cls, ingress);
1321
1322         return err;
1323 }
1324
1325 static void dsa_slave_del_cls_matchall(struct net_device *dev,
1326                                        struct tc_cls_matchall_offload *cls)
1327 {
1328         struct dsa_port *dp = dsa_slave_to_port(dev);
1329         struct dsa_mall_tc_entry *mall_tc_entry;
1330         struct dsa_switch *ds = dp->ds;
1331
1332         mall_tc_entry = dsa_slave_mall_tc_entry_find(dev, cls->cookie);
1333         if (!mall_tc_entry)
1334                 return;
1335
1336         list_del(&mall_tc_entry->list);
1337
1338         switch (mall_tc_entry->type) {
1339         case DSA_PORT_MALL_MIRROR:
1340                 if (ds->ops->port_mirror_del)
1341                         ds->ops->port_mirror_del(ds, dp->index,
1342                                                  &mall_tc_entry->mirror);
1343                 break;
1344         case DSA_PORT_MALL_POLICER:
1345                 if (ds->ops->port_policer_del)
1346                         ds->ops->port_policer_del(ds, dp->index);
1347                 break;
1348         default:
1349                 WARN_ON(1);
1350         }
1351
1352         kfree(mall_tc_entry);
1353 }
1354
1355 static int dsa_slave_setup_tc_cls_matchall(struct net_device *dev,
1356                                            struct tc_cls_matchall_offload *cls,
1357                                            bool ingress)
1358 {
1359         if (cls->common.chain_index)
1360                 return -EOPNOTSUPP;
1361
1362         switch (cls->command) {
1363         case TC_CLSMATCHALL_REPLACE:
1364                 return dsa_slave_add_cls_matchall(dev, cls, ingress);
1365         case TC_CLSMATCHALL_DESTROY:
1366                 dsa_slave_del_cls_matchall(dev, cls);
1367                 return 0;
1368         default:
1369                 return -EOPNOTSUPP;
1370         }
1371 }
1372
1373 static int dsa_slave_add_cls_flower(struct net_device *dev,
1374                                     struct flow_cls_offload *cls,
1375                                     bool ingress)
1376 {
1377         struct dsa_port *dp = dsa_slave_to_port(dev);
1378         struct dsa_switch *ds = dp->ds;
1379         int port = dp->index;
1380
1381         if (!ds->ops->cls_flower_add)
1382                 return -EOPNOTSUPP;
1383
1384         return ds->ops->cls_flower_add(ds, port, cls, ingress);
1385 }
1386
1387 static int dsa_slave_del_cls_flower(struct net_device *dev,
1388                                     struct flow_cls_offload *cls,
1389                                     bool ingress)
1390 {
1391         struct dsa_port *dp = dsa_slave_to_port(dev);
1392         struct dsa_switch *ds = dp->ds;
1393         int port = dp->index;
1394
1395         if (!ds->ops->cls_flower_del)
1396                 return -EOPNOTSUPP;
1397
1398         return ds->ops->cls_flower_del(ds, port, cls, ingress);
1399 }
1400
1401 static int dsa_slave_stats_cls_flower(struct net_device *dev,
1402                                       struct flow_cls_offload *cls,
1403                                       bool ingress)
1404 {
1405         struct dsa_port *dp = dsa_slave_to_port(dev);
1406         struct dsa_switch *ds = dp->ds;
1407         int port = dp->index;
1408
1409         if (!ds->ops->cls_flower_stats)
1410                 return -EOPNOTSUPP;
1411
1412         return ds->ops->cls_flower_stats(ds, port, cls, ingress);
1413 }
1414
1415 static int dsa_slave_setup_tc_cls_flower(struct net_device *dev,
1416                                          struct flow_cls_offload *cls,
1417                                          bool ingress)
1418 {
1419         switch (cls->command) {
1420         case FLOW_CLS_REPLACE:
1421                 return dsa_slave_add_cls_flower(dev, cls, ingress);
1422         case FLOW_CLS_DESTROY:
1423                 return dsa_slave_del_cls_flower(dev, cls, ingress);
1424         case FLOW_CLS_STATS:
1425                 return dsa_slave_stats_cls_flower(dev, cls, ingress);
1426         default:
1427                 return -EOPNOTSUPP;
1428         }
1429 }
1430
1431 static int dsa_slave_setup_tc_block_cb(enum tc_setup_type type, void *type_data,
1432                                        void *cb_priv, bool ingress)
1433 {
1434         struct net_device *dev = cb_priv;
1435
1436         if (!tc_can_offload(dev))
1437                 return -EOPNOTSUPP;
1438
1439         switch (type) {
1440         case TC_SETUP_CLSMATCHALL:
1441                 return dsa_slave_setup_tc_cls_matchall(dev, type_data, ingress);
1442         case TC_SETUP_CLSFLOWER:
1443                 return dsa_slave_setup_tc_cls_flower(dev, type_data, ingress);
1444         default:
1445                 return -EOPNOTSUPP;
1446         }
1447 }
1448
1449 static int dsa_slave_setup_tc_block_cb_ig(enum tc_setup_type type,
1450                                           void *type_data, void *cb_priv)
1451 {
1452         return dsa_slave_setup_tc_block_cb(type, type_data, cb_priv, true);
1453 }
1454
1455 static int dsa_slave_setup_tc_block_cb_eg(enum tc_setup_type type,
1456                                           void *type_data, void *cb_priv)
1457 {
1458         return dsa_slave_setup_tc_block_cb(type, type_data, cb_priv, false);
1459 }
1460
1461 static LIST_HEAD(dsa_slave_block_cb_list);
1462
1463 static int dsa_slave_setup_tc_block(struct net_device *dev,
1464                                     struct flow_block_offload *f)
1465 {
1466         struct flow_block_cb *block_cb;
1467         flow_setup_cb_t *cb;
1468
1469         if (f->binder_type == FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS)
1470                 cb = dsa_slave_setup_tc_block_cb_ig;
1471         else if (f->binder_type == FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS)
1472                 cb = dsa_slave_setup_tc_block_cb_eg;
1473         else
1474                 return -EOPNOTSUPP;
1475
1476         f->driver_block_list = &dsa_slave_block_cb_list;
1477
1478         switch (f->command) {
1479         case FLOW_BLOCK_BIND:
1480                 if (flow_block_cb_is_busy(cb, dev, &dsa_slave_block_cb_list))
1481                         return -EBUSY;
1482
1483                 block_cb = flow_block_cb_alloc(cb, dev, dev, NULL);
1484                 if (IS_ERR(block_cb))
1485                         return PTR_ERR(block_cb);
1486
1487                 flow_block_cb_add(block_cb, f);
1488                 list_add_tail(&block_cb->driver_list, &dsa_slave_block_cb_list);
1489                 return 0;
1490         case FLOW_BLOCK_UNBIND:
1491                 block_cb = flow_block_cb_lookup(f->block, cb, dev);
1492                 if (!block_cb)
1493                         return -ENOENT;
1494
1495                 flow_block_cb_remove(block_cb, f);
1496                 list_del(&block_cb->driver_list);
1497                 return 0;
1498         default:
1499                 return -EOPNOTSUPP;
1500         }
1501 }
1502
1503 static int dsa_slave_setup_ft_block(struct dsa_switch *ds, int port,
1504                                     void *type_data)
1505 {
1506         struct dsa_port *cpu_dp = dsa_to_port(ds, port)->cpu_dp;
1507         struct net_device *master = cpu_dp->master;
1508
1509         if (!master->netdev_ops->ndo_setup_tc)
1510                 return -EOPNOTSUPP;
1511
1512         return master->netdev_ops->ndo_setup_tc(master, TC_SETUP_FT, type_data);
1513 }
1514
1515 static int dsa_slave_setup_tc(struct net_device *dev, enum tc_setup_type type,
1516                               void *type_data)
1517 {
1518         struct dsa_port *dp = dsa_slave_to_port(dev);
1519         struct dsa_switch *ds = dp->ds;
1520
1521         switch (type) {
1522         case TC_SETUP_BLOCK:
1523                 return dsa_slave_setup_tc_block(dev, type_data);
1524         case TC_SETUP_FT:
1525                 return dsa_slave_setup_ft_block(ds, dp->index, type_data);
1526         default:
1527                 break;
1528         }
1529
1530         if (!ds->ops->port_setup_tc)
1531                 return -EOPNOTSUPP;
1532
1533         return ds->ops->port_setup_tc(ds, dp->index, type, type_data);
1534 }
1535
1536 static int dsa_slave_get_rxnfc(struct net_device *dev,
1537                                struct ethtool_rxnfc *nfc, u32 *rule_locs)
1538 {
1539         struct dsa_port *dp = dsa_slave_to_port(dev);
1540         struct dsa_switch *ds = dp->ds;
1541
1542         if (!ds->ops->get_rxnfc)
1543                 return -EOPNOTSUPP;
1544
1545         return ds->ops->get_rxnfc(ds, dp->index, nfc, rule_locs);
1546 }
1547
1548 static int dsa_slave_set_rxnfc(struct net_device *dev,
1549                                struct ethtool_rxnfc *nfc)
1550 {
1551         struct dsa_port *dp = dsa_slave_to_port(dev);
1552         struct dsa_switch *ds = dp->ds;
1553
1554         if (!ds->ops->set_rxnfc)
1555                 return -EOPNOTSUPP;
1556
1557         return ds->ops->set_rxnfc(ds, dp->index, nfc);
1558 }
1559
1560 static int dsa_slave_get_ts_info(struct net_device *dev,
1561                                  struct ethtool_ts_info *ts)
1562 {
1563         struct dsa_slave_priv *p = netdev_priv(dev);
1564         struct dsa_switch *ds = p->dp->ds;
1565
1566         if (!ds->ops->get_ts_info)
1567                 return -EOPNOTSUPP;
1568
1569         return ds->ops->get_ts_info(ds, p->dp->index, ts);
1570 }
1571
1572 static int dsa_slave_vlan_rx_add_vid(struct net_device *dev, __be16 proto,
1573                                      u16 vid)
1574 {
1575         struct dsa_port *dp = dsa_slave_to_port(dev);
1576         struct switchdev_obj_port_vlan vlan = {
1577                 .obj.id = SWITCHDEV_OBJ_ID_PORT_VLAN,
1578                 .vid = vid,
1579                 /* This API only allows programming tagged, non-PVID VIDs */
1580                 .flags = 0,
1581         };
1582         struct netlink_ext_ack extack = {0};
1583         int ret;
1584
1585         /* User port... */
1586         ret = dsa_port_vlan_add(dp, &vlan, &extack);
1587         if (ret) {
1588                 if (extack._msg)
1589                         netdev_err(dev, "%s\n", extack._msg);
1590                 return ret;
1591         }
1592
1593         /* And CPU port... */
1594         ret = dsa_port_host_vlan_add(dp, &vlan, &extack);
1595         if (ret) {
1596                 if (extack._msg)
1597                         netdev_err(dev, "CPU port %d: %s\n", dp->cpu_dp->index,
1598                                    extack._msg);
1599                 return ret;
1600         }
1601
1602         return 0;
1603 }
1604
1605 static int dsa_slave_vlan_rx_kill_vid(struct net_device *dev, __be16 proto,
1606                                       u16 vid)
1607 {
1608         struct dsa_port *dp = dsa_slave_to_port(dev);
1609         struct switchdev_obj_port_vlan vlan = {
1610                 .vid = vid,
1611                 /* This API only allows programming tagged, non-PVID VIDs */
1612                 .flags = 0,
1613         };
1614         int err;
1615
1616         err = dsa_port_vlan_del(dp, &vlan);
1617         if (err)
1618                 return err;
1619
1620         return dsa_port_host_vlan_del(dp, &vlan);
1621 }
1622
1623 static int dsa_slave_restore_vlan(struct net_device *vdev, int vid, void *arg)
1624 {
1625         __be16 proto = vdev ? vlan_dev_vlan_proto(vdev) : htons(ETH_P_8021Q);
1626
1627         return dsa_slave_vlan_rx_add_vid(arg, proto, vid);
1628 }
1629
1630 static int dsa_slave_clear_vlan(struct net_device *vdev, int vid, void *arg)
1631 {
1632         __be16 proto = vdev ? vlan_dev_vlan_proto(vdev) : htons(ETH_P_8021Q);
1633
1634         return dsa_slave_vlan_rx_kill_vid(arg, proto, vid);
1635 }
1636
1637 /* Keep the VLAN RX filtering list in sync with the hardware only if VLAN
1638  * filtering is enabled. The baseline is that only ports that offload a
1639  * VLAN-aware bridge are VLAN-aware, and standalone ports are VLAN-unaware,
1640  * but there are exceptions for quirky hardware.
1641  *
1642  * If ds->vlan_filtering_is_global = true, then standalone ports which share
1643  * the same switch with other ports that offload a VLAN-aware bridge are also
1644  * inevitably VLAN-aware.
1645  *
1646  * To summarize, a DSA switch port offloads:
1647  *
1648  * - If standalone (this includes software bridge, software LAG):
1649  *     - if ds->needs_standalone_vlan_filtering = true, OR if
1650  *       (ds->vlan_filtering_is_global = true AND there are bridges spanning
1651  *       this switch chip which have vlan_filtering=1)
1652  *         - the 8021q upper VLANs
1653  *     - else (standalone VLAN filtering is not needed, VLAN filtering is not
1654  *       global, or it is, but no port is under a VLAN-aware bridge):
1655  *         - no VLAN (any 8021q upper is a software VLAN)
1656  *
1657  * - If under a vlan_filtering=0 bridge which it offload:
1658  *     - if ds->configure_vlan_while_not_filtering = true (default):
1659  *         - the bridge VLANs. These VLANs are committed to hardware but inactive.
1660  *     - else (deprecated):
1661  *         - no VLAN. The bridge VLANs are not restored when VLAN awareness is
1662  *           enabled, so this behavior is broken and discouraged.
1663  *
1664  * - If under a vlan_filtering=1 bridge which it offload:
1665  *     - the bridge VLANs
1666  *     - the 8021q upper VLANs
1667  */
1668 int dsa_slave_manage_vlan_filtering(struct net_device *slave,
1669                                     bool vlan_filtering)
1670 {
1671         int err;
1672
1673         if (vlan_filtering) {
1674                 slave->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
1675
1676                 err = vlan_for_each(slave, dsa_slave_restore_vlan, slave);
1677                 if (err) {
1678                         vlan_for_each(slave, dsa_slave_clear_vlan, slave);
1679                         slave->features &= ~NETIF_F_HW_VLAN_CTAG_FILTER;
1680                         return err;
1681                 }
1682         } else {
1683                 err = vlan_for_each(slave, dsa_slave_clear_vlan, slave);
1684                 if (err)
1685                         return err;
1686
1687                 slave->features &= ~NETIF_F_HW_VLAN_CTAG_FILTER;
1688         }
1689
1690         return 0;
1691 }
1692
1693 struct dsa_hw_port {
1694         struct list_head list;
1695         struct net_device *dev;
1696         int old_mtu;
1697 };
1698
1699 static int dsa_hw_port_list_set_mtu(struct list_head *hw_port_list, int mtu)
1700 {
1701         const struct dsa_hw_port *p;
1702         int err;
1703
1704         list_for_each_entry(p, hw_port_list, list) {
1705                 if (p->dev->mtu == mtu)
1706                         continue;
1707
1708                 err = dev_set_mtu(p->dev, mtu);
1709                 if (err)
1710                         goto rollback;
1711         }
1712
1713         return 0;
1714
1715 rollback:
1716         list_for_each_entry_continue_reverse(p, hw_port_list, list) {
1717                 if (p->dev->mtu == p->old_mtu)
1718                         continue;
1719
1720                 if (dev_set_mtu(p->dev, p->old_mtu))
1721                         netdev_err(p->dev, "Failed to restore MTU\n");
1722         }
1723
1724         return err;
1725 }
1726
1727 static void dsa_hw_port_list_free(struct list_head *hw_port_list)
1728 {
1729         struct dsa_hw_port *p, *n;
1730
1731         list_for_each_entry_safe(p, n, hw_port_list, list)
1732                 kfree(p);
1733 }
1734
1735 /* Make the hardware datapath to/from @dev limited to a common MTU */
1736 static void dsa_bridge_mtu_normalization(struct dsa_port *dp)
1737 {
1738         struct list_head hw_port_list;
1739         struct dsa_switch_tree *dst;
1740         int min_mtu = ETH_MAX_MTU;
1741         struct dsa_port *other_dp;
1742         int err;
1743
1744         if (!dp->ds->mtu_enforcement_ingress)
1745                 return;
1746
1747         if (!dp->bridge)
1748                 return;
1749
1750         INIT_LIST_HEAD(&hw_port_list);
1751
1752         /* Populate the list of ports that are part of the same bridge
1753          * as the newly added/modified port
1754          */
1755         list_for_each_entry(dst, &dsa_tree_list, list) {
1756                 list_for_each_entry(other_dp, &dst->ports, list) {
1757                         struct dsa_hw_port *hw_port;
1758                         struct net_device *slave;
1759
1760                         if (other_dp->type != DSA_PORT_TYPE_USER)
1761                                 continue;
1762
1763                         if (!dsa_port_bridge_same(dp, other_dp))
1764                                 continue;
1765
1766                         if (!other_dp->ds->mtu_enforcement_ingress)
1767                                 continue;
1768
1769                         slave = other_dp->slave;
1770
1771                         if (min_mtu > slave->mtu)
1772                                 min_mtu = slave->mtu;
1773
1774                         hw_port = kzalloc(sizeof(*hw_port), GFP_KERNEL);
1775                         if (!hw_port)
1776                                 goto out;
1777
1778                         hw_port->dev = slave;
1779                         hw_port->old_mtu = slave->mtu;
1780
1781                         list_add(&hw_port->list, &hw_port_list);
1782                 }
1783         }
1784
1785         /* Attempt to configure the entire hardware bridge to the newly added
1786          * interface's MTU first, regardless of whether the intention of the
1787          * user was to raise or lower it.
1788          */
1789         err = dsa_hw_port_list_set_mtu(&hw_port_list, dp->slave->mtu);
1790         if (!err)
1791                 goto out;
1792
1793         /* Clearly that didn't work out so well, so just set the minimum MTU on
1794          * all hardware bridge ports now. If this fails too, then all ports will
1795          * still have their old MTU rolled back anyway.
1796          */
1797         dsa_hw_port_list_set_mtu(&hw_port_list, min_mtu);
1798
1799 out:
1800         dsa_hw_port_list_free(&hw_port_list);
1801 }
1802
1803 int dsa_slave_change_mtu(struct net_device *dev, int new_mtu)
1804 {
1805         struct net_device *master = dsa_slave_to_master(dev);
1806         struct dsa_port *dp = dsa_slave_to_port(dev);
1807         struct dsa_port *cpu_dp = dp->cpu_dp;
1808         struct dsa_switch *ds = dp->ds;
1809         struct dsa_port *other_dp;
1810         int largest_mtu = 0;
1811         int new_master_mtu;
1812         int old_master_mtu;
1813         int mtu_limit;
1814         int cpu_mtu;
1815         int err;
1816
1817         if (!ds->ops->port_change_mtu)
1818                 return -EOPNOTSUPP;
1819
1820         dsa_tree_for_each_user_port(other_dp, ds->dst) {
1821                 int slave_mtu;
1822
1823                 /* During probe, this function will be called for each slave
1824                  * device, while not all of them have been allocated. That's
1825                  * ok, it doesn't change what the maximum is, so ignore it.
1826                  */
1827                 if (!other_dp->slave)
1828                         continue;
1829
1830                 /* Pretend that we already applied the setting, which we
1831                  * actually haven't (still haven't done all integrity checks)
1832                  */
1833                 if (dp == other_dp)
1834                         slave_mtu = new_mtu;
1835                 else
1836                         slave_mtu = other_dp->slave->mtu;
1837
1838                 if (largest_mtu < slave_mtu)
1839                         largest_mtu = slave_mtu;
1840         }
1841
1842         mtu_limit = min_t(int, master->max_mtu, dev->max_mtu);
1843         old_master_mtu = master->mtu;
1844         new_master_mtu = largest_mtu + dsa_tag_protocol_overhead(cpu_dp->tag_ops);
1845         if (new_master_mtu > mtu_limit)
1846                 return -ERANGE;
1847
1848         /* If the master MTU isn't over limit, there's no need to check the CPU
1849          * MTU, since that surely isn't either.
1850          */
1851         cpu_mtu = largest_mtu;
1852
1853         /* Start applying stuff */
1854         if (new_master_mtu != old_master_mtu) {
1855                 err = dev_set_mtu(master, new_master_mtu);
1856                 if (err < 0)
1857                         goto out_master_failed;
1858
1859                 /* We only need to propagate the MTU of the CPU port to
1860                  * upstream switches, so emit a notifier which updates them.
1861                  */
1862                 err = dsa_port_mtu_change(cpu_dp, cpu_mtu);
1863                 if (err)
1864                         goto out_cpu_failed;
1865         }
1866
1867         err = ds->ops->port_change_mtu(ds, dp->index, new_mtu);
1868         if (err)
1869                 goto out_port_failed;
1870
1871         dev->mtu = new_mtu;
1872
1873         dsa_bridge_mtu_normalization(dp);
1874
1875         return 0;
1876
1877 out_port_failed:
1878         if (new_master_mtu != old_master_mtu)
1879                 dsa_port_mtu_change(cpu_dp, old_master_mtu -
1880                                     dsa_tag_protocol_overhead(cpu_dp->tag_ops));
1881 out_cpu_failed:
1882         if (new_master_mtu != old_master_mtu)
1883                 dev_set_mtu(master, old_master_mtu);
1884 out_master_failed:
1885         return err;
1886 }
1887
1888 static int __maybe_unused
1889 dsa_slave_dcbnl_set_default_prio(struct net_device *dev, struct dcb_app *app)
1890 {
1891         struct dsa_port *dp = dsa_slave_to_port(dev);
1892         struct dsa_switch *ds = dp->ds;
1893         unsigned long mask, new_prio;
1894         int err, port = dp->index;
1895
1896         if (!ds->ops->port_set_default_prio)
1897                 return -EOPNOTSUPP;
1898
1899         err = dcb_ieee_setapp(dev, app);
1900         if (err)
1901                 return err;
1902
1903         mask = dcb_ieee_getapp_mask(dev, app);
1904         new_prio = __fls(mask);
1905
1906         err = ds->ops->port_set_default_prio(ds, port, new_prio);
1907         if (err) {
1908                 dcb_ieee_delapp(dev, app);
1909                 return err;
1910         }
1911
1912         return 0;
1913 }
1914
1915 static int __maybe_unused
1916 dsa_slave_dcbnl_add_dscp_prio(struct net_device *dev, struct dcb_app *app)
1917 {
1918         struct dsa_port *dp = dsa_slave_to_port(dev);
1919         struct dsa_switch *ds = dp->ds;
1920         unsigned long mask, new_prio;
1921         int err, port = dp->index;
1922         u8 dscp = app->protocol;
1923
1924         if (!ds->ops->port_add_dscp_prio)
1925                 return -EOPNOTSUPP;
1926
1927         if (dscp >= 64) {
1928                 netdev_err(dev, "DSCP APP entry with protocol value %u is invalid\n",
1929                            dscp);
1930                 return -EINVAL;
1931         }
1932
1933         err = dcb_ieee_setapp(dev, app);
1934         if (err)
1935                 return err;
1936
1937         mask = dcb_ieee_getapp_mask(dev, app);
1938         new_prio = __fls(mask);
1939
1940         err = ds->ops->port_add_dscp_prio(ds, port, dscp, new_prio);
1941         if (err) {
1942                 dcb_ieee_delapp(dev, app);
1943                 return err;
1944         }
1945
1946         return 0;
1947 }
1948
1949 static int __maybe_unused dsa_slave_dcbnl_ieee_setapp(struct net_device *dev,
1950                                                       struct dcb_app *app)
1951 {
1952         switch (app->selector) {
1953         case IEEE_8021QAZ_APP_SEL_ETHERTYPE:
1954                 switch (app->protocol) {
1955                 case 0:
1956                         return dsa_slave_dcbnl_set_default_prio(dev, app);
1957                 default:
1958                         return -EOPNOTSUPP;
1959                 }
1960                 break;
1961         case IEEE_8021QAZ_APP_SEL_DSCP:
1962                 return dsa_slave_dcbnl_add_dscp_prio(dev, app);
1963         default:
1964                 return -EOPNOTSUPP;
1965         }
1966 }
1967
1968 static int __maybe_unused
1969 dsa_slave_dcbnl_del_default_prio(struct net_device *dev, struct dcb_app *app)
1970 {
1971         struct dsa_port *dp = dsa_slave_to_port(dev);
1972         struct dsa_switch *ds = dp->ds;
1973         unsigned long mask, new_prio;
1974         int err, port = dp->index;
1975
1976         if (!ds->ops->port_set_default_prio)
1977                 return -EOPNOTSUPP;
1978
1979         err = dcb_ieee_delapp(dev, app);
1980         if (err)
1981                 return err;
1982
1983         mask = dcb_ieee_getapp_mask(dev, app);
1984         new_prio = mask ? __fls(mask) : 0;
1985
1986         err = ds->ops->port_set_default_prio(ds, port, new_prio);
1987         if (err) {
1988                 dcb_ieee_setapp(dev, app);
1989                 return err;
1990         }
1991
1992         return 0;
1993 }
1994
1995 static int __maybe_unused
1996 dsa_slave_dcbnl_del_dscp_prio(struct net_device *dev, struct dcb_app *app)
1997 {
1998         struct dsa_port *dp = dsa_slave_to_port(dev);
1999         struct dsa_switch *ds = dp->ds;
2000         int err, port = dp->index;
2001         u8 dscp = app->protocol;
2002
2003         if (!ds->ops->port_del_dscp_prio)
2004                 return -EOPNOTSUPP;
2005
2006         err = dcb_ieee_delapp(dev, app);
2007         if (err)
2008                 return err;
2009
2010         err = ds->ops->port_del_dscp_prio(ds, port, dscp, app->priority);
2011         if (err) {
2012                 dcb_ieee_setapp(dev, app);
2013                 return err;
2014         }
2015
2016         return 0;
2017 }
2018
2019 static int __maybe_unused dsa_slave_dcbnl_ieee_delapp(struct net_device *dev,
2020                                                       struct dcb_app *app)
2021 {
2022         switch (app->selector) {
2023         case IEEE_8021QAZ_APP_SEL_ETHERTYPE:
2024                 switch (app->protocol) {
2025                 case 0:
2026                         return dsa_slave_dcbnl_del_default_prio(dev, app);
2027                 default:
2028                         return -EOPNOTSUPP;
2029                 }
2030                 break;
2031         case IEEE_8021QAZ_APP_SEL_DSCP:
2032                 return dsa_slave_dcbnl_del_dscp_prio(dev, app);
2033         default:
2034                 return -EOPNOTSUPP;
2035         }
2036 }
2037
2038 /* Pre-populate the DCB application priority table with the priorities
2039  * configured during switch setup, which we read from hardware here.
2040  */
2041 static int dsa_slave_dcbnl_init(struct net_device *dev)
2042 {
2043         struct dsa_port *dp = dsa_slave_to_port(dev);
2044         struct dsa_switch *ds = dp->ds;
2045         int port = dp->index;
2046         int err;
2047
2048         if (ds->ops->port_get_default_prio) {
2049                 int prio = ds->ops->port_get_default_prio(ds, port);
2050                 struct dcb_app app = {
2051                         .selector = IEEE_8021QAZ_APP_SEL_ETHERTYPE,
2052                         .protocol = 0,
2053                         .priority = prio,
2054                 };
2055
2056                 if (prio < 0)
2057                         return prio;
2058
2059                 err = dcb_ieee_setapp(dev, &app);
2060                 if (err)
2061                         return err;
2062         }
2063
2064         if (ds->ops->port_get_dscp_prio) {
2065                 int protocol;
2066
2067                 for (protocol = 0; protocol < 64; protocol++) {
2068                         struct dcb_app app = {
2069                                 .selector = IEEE_8021QAZ_APP_SEL_DSCP,
2070                                 .protocol = protocol,
2071                         };
2072                         int prio;
2073
2074                         prio = ds->ops->port_get_dscp_prio(ds, port, protocol);
2075                         if (prio == -EOPNOTSUPP)
2076                                 continue;
2077                         if (prio < 0)
2078                                 return prio;
2079
2080                         app.priority = prio;
2081
2082                         err = dcb_ieee_setapp(dev, &app);
2083                         if (err)
2084                                 return err;
2085                 }
2086         }
2087
2088         return 0;
2089 }
2090
2091 static const struct ethtool_ops dsa_slave_ethtool_ops = {
2092         .get_drvinfo            = dsa_slave_get_drvinfo,
2093         .get_regs_len           = dsa_slave_get_regs_len,
2094         .get_regs               = dsa_slave_get_regs,
2095         .nway_reset             = dsa_slave_nway_reset,
2096         .get_link               = ethtool_op_get_link,
2097         .get_eeprom_len         = dsa_slave_get_eeprom_len,
2098         .get_eeprom             = dsa_slave_get_eeprom,
2099         .set_eeprom             = dsa_slave_set_eeprom,
2100         .get_strings            = dsa_slave_get_strings,
2101         .get_ethtool_stats      = dsa_slave_get_ethtool_stats,
2102         .get_sset_count         = dsa_slave_get_sset_count,
2103         .get_eth_phy_stats      = dsa_slave_get_eth_phy_stats,
2104         .get_eth_mac_stats      = dsa_slave_get_eth_mac_stats,
2105         .get_eth_ctrl_stats     = dsa_slave_get_eth_ctrl_stats,
2106         .get_rmon_stats         = dsa_slave_get_rmon_stats,
2107         .set_wol                = dsa_slave_set_wol,
2108         .get_wol                = dsa_slave_get_wol,
2109         .set_eee                = dsa_slave_set_eee,
2110         .get_eee                = dsa_slave_get_eee,
2111         .get_link_ksettings     = dsa_slave_get_link_ksettings,
2112         .set_link_ksettings     = dsa_slave_set_link_ksettings,
2113         .get_pause_stats        = dsa_slave_get_pause_stats,
2114         .get_pauseparam         = dsa_slave_get_pauseparam,
2115         .set_pauseparam         = dsa_slave_set_pauseparam,
2116         .get_rxnfc              = dsa_slave_get_rxnfc,
2117         .set_rxnfc              = dsa_slave_set_rxnfc,
2118         .get_ts_info            = dsa_slave_get_ts_info,
2119         .self_test              = dsa_slave_net_selftest,
2120 };
2121
2122 static const struct dcbnl_rtnl_ops __maybe_unused dsa_slave_dcbnl_ops = {
2123         .ieee_setapp            = dsa_slave_dcbnl_ieee_setapp,
2124         .ieee_delapp            = dsa_slave_dcbnl_ieee_delapp,
2125 };
2126
2127 static struct devlink_port *dsa_slave_get_devlink_port(struct net_device *dev)
2128 {
2129         struct dsa_port *dp = dsa_slave_to_port(dev);
2130
2131         return &dp->devlink_port;
2132 }
2133
2134 static void dsa_slave_get_stats64(struct net_device *dev,
2135                                   struct rtnl_link_stats64 *s)
2136 {
2137         struct dsa_port *dp = dsa_slave_to_port(dev);
2138         struct dsa_switch *ds = dp->ds;
2139
2140         if (ds->ops->get_stats64)
2141                 ds->ops->get_stats64(ds, dp->index, s);
2142         else
2143                 dev_get_tstats64(dev, s);
2144 }
2145
2146 static int dsa_slave_fill_forward_path(struct net_device_path_ctx *ctx,
2147                                        struct net_device_path *path)
2148 {
2149         struct dsa_port *dp = dsa_slave_to_port(ctx->dev);
2150         struct dsa_port *cpu_dp = dp->cpu_dp;
2151
2152         path->dev = ctx->dev;
2153         path->type = DEV_PATH_DSA;
2154         path->dsa.proto = cpu_dp->tag_ops->proto;
2155         path->dsa.port = dp->index;
2156         ctx->dev = cpu_dp->master;
2157
2158         return 0;
2159 }
2160
2161 static const struct net_device_ops dsa_slave_netdev_ops = {
2162         .ndo_open               = dsa_slave_open,
2163         .ndo_stop               = dsa_slave_close,
2164         .ndo_start_xmit         = dsa_slave_xmit,
2165         .ndo_change_rx_flags    = dsa_slave_change_rx_flags,
2166         .ndo_set_rx_mode        = dsa_slave_set_rx_mode,
2167         .ndo_set_mac_address    = dsa_slave_set_mac_address,
2168         .ndo_fdb_dump           = dsa_slave_fdb_dump,
2169         .ndo_eth_ioctl          = dsa_slave_ioctl,
2170         .ndo_get_iflink         = dsa_slave_get_iflink,
2171 #ifdef CONFIG_NET_POLL_CONTROLLER
2172         .ndo_netpoll_setup      = dsa_slave_netpoll_setup,
2173         .ndo_netpoll_cleanup    = dsa_slave_netpoll_cleanup,
2174         .ndo_poll_controller    = dsa_slave_poll_controller,
2175 #endif
2176         .ndo_setup_tc           = dsa_slave_setup_tc,
2177         .ndo_get_stats64        = dsa_slave_get_stats64,
2178         .ndo_vlan_rx_add_vid    = dsa_slave_vlan_rx_add_vid,
2179         .ndo_vlan_rx_kill_vid   = dsa_slave_vlan_rx_kill_vid,
2180         .ndo_get_devlink_port   = dsa_slave_get_devlink_port,
2181         .ndo_change_mtu         = dsa_slave_change_mtu,
2182         .ndo_fill_forward_path  = dsa_slave_fill_forward_path,
2183 };
2184
2185 static struct device_type dsa_type = {
2186         .name   = "dsa",
2187 };
2188
2189 void dsa_port_phylink_mac_change(struct dsa_switch *ds, int port, bool up)
2190 {
2191         const struct dsa_port *dp = dsa_to_port(ds, port);
2192
2193         if (dp->pl)
2194                 phylink_mac_change(dp->pl, up);
2195 }
2196 EXPORT_SYMBOL_GPL(dsa_port_phylink_mac_change);
2197
2198 static void dsa_slave_phylink_fixed_state(struct phylink_config *config,
2199                                           struct phylink_link_state *state)
2200 {
2201         struct dsa_port *dp = container_of(config, struct dsa_port, pl_config);
2202         struct dsa_switch *ds = dp->ds;
2203
2204         /* No need to check that this operation is valid, the callback would
2205          * not be called if it was not.
2206          */
2207         ds->ops->phylink_fixed_state(ds, dp->index, state);
2208 }
2209
2210 /* slave device setup *******************************************************/
2211 static int dsa_slave_phy_connect(struct net_device *slave_dev, int addr,
2212                                  u32 flags)
2213 {
2214         struct dsa_port *dp = dsa_slave_to_port(slave_dev);
2215         struct dsa_switch *ds = dp->ds;
2216
2217         slave_dev->phydev = mdiobus_get_phy(ds->slave_mii_bus, addr);
2218         if (!slave_dev->phydev) {
2219                 netdev_err(slave_dev, "no phy at %d\n", addr);
2220                 return -ENODEV;
2221         }
2222
2223         slave_dev->phydev->dev_flags |= flags;
2224
2225         return phylink_connect_phy(dp->pl, slave_dev->phydev);
2226 }
2227
2228 static int dsa_slave_phy_setup(struct net_device *slave_dev)
2229 {
2230         struct dsa_port *dp = dsa_slave_to_port(slave_dev);
2231         struct device_node *port_dn = dp->dn;
2232         struct dsa_switch *ds = dp->ds;
2233         u32 phy_flags = 0;
2234         int ret;
2235
2236         dp->pl_config.dev = &slave_dev->dev;
2237         dp->pl_config.type = PHYLINK_NETDEV;
2238
2239         /* The get_fixed_state callback takes precedence over polling the
2240          * link GPIO in PHYLINK (see phylink_get_fixed_state).  Only set
2241          * this if the switch provides such a callback.
2242          */
2243         if (ds->ops->phylink_fixed_state) {
2244                 dp->pl_config.get_fixed_state = dsa_slave_phylink_fixed_state;
2245                 dp->pl_config.poll_fixed_state = true;
2246         }
2247
2248         ret = dsa_port_phylink_create(dp);
2249         if (ret)
2250                 return ret;
2251
2252         if (ds->ops->get_phy_flags)
2253                 phy_flags = ds->ops->get_phy_flags(ds, dp->index);
2254
2255         ret = phylink_of_phy_connect(dp->pl, port_dn, phy_flags);
2256         if (ret == -ENODEV && ds->slave_mii_bus) {
2257                 /* We could not connect to a designated PHY or SFP, so try to
2258                  * use the switch internal MDIO bus instead
2259                  */
2260                 ret = dsa_slave_phy_connect(slave_dev, dp->index, phy_flags);
2261         }
2262         if (ret) {
2263                 netdev_err(slave_dev, "failed to connect to PHY: %pe\n",
2264                            ERR_PTR(ret));
2265                 phylink_destroy(dp->pl);
2266         }
2267
2268         return ret;
2269 }
2270
2271 void dsa_slave_setup_tagger(struct net_device *slave)
2272 {
2273         struct dsa_port *dp = dsa_slave_to_port(slave);
2274         struct dsa_slave_priv *p = netdev_priv(slave);
2275         const struct dsa_port *cpu_dp = dp->cpu_dp;
2276         struct net_device *master = cpu_dp->master;
2277         const struct dsa_switch *ds = dp->ds;
2278
2279         slave->needed_headroom = cpu_dp->tag_ops->needed_headroom;
2280         slave->needed_tailroom = cpu_dp->tag_ops->needed_tailroom;
2281         /* Try to save one extra realloc later in the TX path (in the master)
2282          * by also inheriting the master's needed headroom and tailroom.
2283          * The 8021q driver also does this.
2284          */
2285         slave->needed_headroom += master->needed_headroom;
2286         slave->needed_tailroom += master->needed_tailroom;
2287
2288         p->xmit = cpu_dp->tag_ops->xmit;
2289
2290         slave->features = master->vlan_features | NETIF_F_HW_TC;
2291         slave->hw_features |= NETIF_F_HW_TC;
2292         slave->features |= NETIF_F_LLTX;
2293         if (slave->needed_tailroom)
2294                 slave->features &= ~(NETIF_F_SG | NETIF_F_FRAGLIST);
2295         if (ds->needs_standalone_vlan_filtering)
2296                 slave->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
2297 }
2298
2299 int dsa_slave_suspend(struct net_device *slave_dev)
2300 {
2301         struct dsa_port *dp = dsa_slave_to_port(slave_dev);
2302
2303         if (!netif_running(slave_dev))
2304                 return 0;
2305
2306         netif_device_detach(slave_dev);
2307
2308         rtnl_lock();
2309         phylink_stop(dp->pl);
2310         rtnl_unlock();
2311
2312         return 0;
2313 }
2314
2315 int dsa_slave_resume(struct net_device *slave_dev)
2316 {
2317         struct dsa_port *dp = dsa_slave_to_port(slave_dev);
2318
2319         if (!netif_running(slave_dev))
2320                 return 0;
2321
2322         netif_device_attach(slave_dev);
2323
2324         rtnl_lock();
2325         phylink_start(dp->pl);
2326         rtnl_unlock();
2327
2328         return 0;
2329 }
2330
2331 int dsa_slave_create(struct dsa_port *port)
2332 {
2333         const struct dsa_port *cpu_dp = port->cpu_dp;
2334         struct net_device *master = cpu_dp->master;
2335         struct dsa_switch *ds = port->ds;
2336         const char *name = port->name;
2337         struct net_device *slave_dev;
2338         struct dsa_slave_priv *p;
2339         int ret;
2340
2341         if (!ds->num_tx_queues)
2342                 ds->num_tx_queues = 1;
2343
2344         slave_dev = alloc_netdev_mqs(sizeof(struct dsa_slave_priv), name,
2345                                      NET_NAME_UNKNOWN, ether_setup,
2346                                      ds->num_tx_queues, 1);
2347         if (slave_dev == NULL)
2348                 return -ENOMEM;
2349
2350         slave_dev->ethtool_ops = &dsa_slave_ethtool_ops;
2351 #if IS_ENABLED(CONFIG_DCB)
2352         slave_dev->dcbnl_ops = &dsa_slave_dcbnl_ops;
2353 #endif
2354         if (!is_zero_ether_addr(port->mac))
2355                 eth_hw_addr_set(slave_dev, port->mac);
2356         else
2357                 eth_hw_addr_inherit(slave_dev, master);
2358         slave_dev->priv_flags |= IFF_NO_QUEUE;
2359         if (dsa_switch_supports_uc_filtering(ds))
2360                 slave_dev->priv_flags |= IFF_UNICAST_FLT;
2361         slave_dev->netdev_ops = &dsa_slave_netdev_ops;
2362         if (ds->ops->port_max_mtu)
2363                 slave_dev->max_mtu = ds->ops->port_max_mtu(ds, port->index);
2364         SET_NETDEV_DEVTYPE(slave_dev, &dsa_type);
2365
2366         SET_NETDEV_DEV(slave_dev, port->ds->dev);
2367         slave_dev->dev.of_node = port->dn;
2368         slave_dev->vlan_features = master->vlan_features;
2369
2370         p = netdev_priv(slave_dev);
2371         slave_dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
2372         if (!slave_dev->tstats) {
2373                 free_netdev(slave_dev);
2374                 return -ENOMEM;
2375         }
2376
2377         ret = gro_cells_init(&p->gcells, slave_dev);
2378         if (ret)
2379                 goto out_free;
2380
2381         p->dp = port;
2382         INIT_LIST_HEAD(&p->mall_tc_list);
2383         port->slave = slave_dev;
2384         dsa_slave_setup_tagger(slave_dev);
2385
2386         netif_carrier_off(slave_dev);
2387
2388         ret = dsa_slave_phy_setup(slave_dev);
2389         if (ret) {
2390                 netdev_err(slave_dev,
2391                            "error %d setting up PHY for tree %d, switch %d, port %d\n",
2392                            ret, ds->dst->index, ds->index, port->index);
2393                 goto out_gcells;
2394         }
2395
2396         rtnl_lock();
2397
2398         ret = dsa_slave_change_mtu(slave_dev, ETH_DATA_LEN);
2399         if (ret && ret != -EOPNOTSUPP)
2400                 dev_warn(ds->dev, "nonfatal error %d setting MTU to %d on port %d\n",
2401                          ret, ETH_DATA_LEN, port->index);
2402
2403         ret = register_netdevice(slave_dev);
2404         if (ret) {
2405                 netdev_err(master, "error %d registering interface %s\n",
2406                            ret, slave_dev->name);
2407                 rtnl_unlock();
2408                 goto out_phy;
2409         }
2410
2411         if (IS_ENABLED(CONFIG_DCB)) {
2412                 ret = dsa_slave_dcbnl_init(slave_dev);
2413                 if (ret) {
2414                         netdev_err(slave_dev,
2415                                    "failed to initialize DCB: %pe\n",
2416                                    ERR_PTR(ret));
2417                         rtnl_unlock();
2418                         goto out_unregister;
2419                 }
2420         }
2421
2422         ret = netdev_upper_dev_link(master, slave_dev, NULL);
2423
2424         rtnl_unlock();
2425
2426         if (ret)
2427                 goto out_unregister;
2428
2429         return 0;
2430
2431 out_unregister:
2432         unregister_netdev(slave_dev);
2433 out_phy:
2434         rtnl_lock();
2435         phylink_disconnect_phy(p->dp->pl);
2436         rtnl_unlock();
2437         phylink_destroy(p->dp->pl);
2438 out_gcells:
2439         gro_cells_destroy(&p->gcells);
2440 out_free:
2441         free_percpu(slave_dev->tstats);
2442         free_netdev(slave_dev);
2443         port->slave = NULL;
2444         return ret;
2445 }
2446
2447 void dsa_slave_destroy(struct net_device *slave_dev)
2448 {
2449         struct net_device *master = dsa_slave_to_master(slave_dev);
2450         struct dsa_port *dp = dsa_slave_to_port(slave_dev);
2451         struct dsa_slave_priv *p = netdev_priv(slave_dev);
2452
2453         netif_carrier_off(slave_dev);
2454         rtnl_lock();
2455         netdev_upper_dev_unlink(master, slave_dev);
2456         unregister_netdevice(slave_dev);
2457         phylink_disconnect_phy(dp->pl);
2458         rtnl_unlock();
2459
2460         phylink_destroy(dp->pl);
2461         gro_cells_destroy(&p->gcells);
2462         free_percpu(slave_dev->tstats);
2463         free_netdev(slave_dev);
2464 }
2465
2466 bool dsa_slave_dev_check(const struct net_device *dev)
2467 {
2468         return dev->netdev_ops == &dsa_slave_netdev_ops;
2469 }
2470 EXPORT_SYMBOL_GPL(dsa_slave_dev_check);
2471
2472 static int dsa_slave_changeupper(struct net_device *dev,
2473                                  struct netdev_notifier_changeupper_info *info)
2474 {
2475         struct dsa_port *dp = dsa_slave_to_port(dev);
2476         struct netlink_ext_ack *extack;
2477         int err = NOTIFY_DONE;
2478
2479         extack = netdev_notifier_info_to_extack(&info->info);
2480
2481         if (netif_is_bridge_master(info->upper_dev)) {
2482                 if (info->linking) {
2483                         err = dsa_port_bridge_join(dp, info->upper_dev, extack);
2484                         if (!err)
2485                                 dsa_bridge_mtu_normalization(dp);
2486                         if (err == -EOPNOTSUPP) {
2487                                 if (extack && !extack->_msg)
2488                                         NL_SET_ERR_MSG_MOD(extack,
2489                                                            "Offloading not supported");
2490                                 err = 0;
2491                         }
2492                         err = notifier_from_errno(err);
2493                 } else {
2494                         dsa_port_bridge_leave(dp, info->upper_dev);
2495                         err = NOTIFY_OK;
2496                 }
2497         } else if (netif_is_lag_master(info->upper_dev)) {
2498                 if (info->linking) {
2499                         err = dsa_port_lag_join(dp, info->upper_dev,
2500                                                 info->upper_info, extack);
2501                         if (err == -EOPNOTSUPP) {
2502                                 NL_SET_ERR_MSG_MOD(info->info.extack,
2503                                                    "Offloading not supported");
2504                                 err = 0;
2505                         }
2506                         err = notifier_from_errno(err);
2507                 } else {
2508                         dsa_port_lag_leave(dp, info->upper_dev);
2509                         err = NOTIFY_OK;
2510                 }
2511         } else if (is_hsr_master(info->upper_dev)) {
2512                 if (info->linking) {
2513                         err = dsa_port_hsr_join(dp, info->upper_dev);
2514                         if (err == -EOPNOTSUPP) {
2515                                 NL_SET_ERR_MSG_MOD(info->info.extack,
2516                                                    "Offloading not supported");
2517                                 err = 0;
2518                         }
2519                         err = notifier_from_errno(err);
2520                 } else {
2521                         dsa_port_hsr_leave(dp, info->upper_dev);
2522                         err = NOTIFY_OK;
2523                 }
2524         }
2525
2526         return err;
2527 }
2528
2529 static int dsa_slave_prechangeupper(struct net_device *dev,
2530                                     struct netdev_notifier_changeupper_info *info)
2531 {
2532         struct dsa_port *dp = dsa_slave_to_port(dev);
2533
2534         if (netif_is_bridge_master(info->upper_dev) && !info->linking)
2535                 dsa_port_pre_bridge_leave(dp, info->upper_dev);
2536         else if (netif_is_lag_master(info->upper_dev) && !info->linking)
2537                 dsa_port_pre_lag_leave(dp, info->upper_dev);
2538         /* dsa_port_pre_hsr_leave is not yet necessary since hsr cannot be
2539          * meaningfully enslaved to a bridge yet
2540          */
2541
2542         return NOTIFY_DONE;
2543 }
2544
2545 static int
2546 dsa_slave_lag_changeupper(struct net_device *dev,
2547                           struct netdev_notifier_changeupper_info *info)
2548 {
2549         struct net_device *lower;
2550         struct list_head *iter;
2551         int err = NOTIFY_DONE;
2552         struct dsa_port *dp;
2553
2554         netdev_for_each_lower_dev(dev, lower, iter) {
2555                 if (!dsa_slave_dev_check(lower))
2556                         continue;
2557
2558                 dp = dsa_slave_to_port(lower);
2559                 if (!dp->lag)
2560                         /* Software LAG */
2561                         continue;
2562
2563                 err = dsa_slave_changeupper(lower, info);
2564                 if (notifier_to_errno(err))
2565                         break;
2566         }
2567
2568         return err;
2569 }
2570
2571 /* Same as dsa_slave_lag_changeupper() except that it calls
2572  * dsa_slave_prechangeupper()
2573  */
2574 static int
2575 dsa_slave_lag_prechangeupper(struct net_device *dev,
2576                              struct netdev_notifier_changeupper_info *info)
2577 {
2578         struct net_device *lower;
2579         struct list_head *iter;
2580         int err = NOTIFY_DONE;
2581         struct dsa_port *dp;
2582
2583         netdev_for_each_lower_dev(dev, lower, iter) {
2584                 if (!dsa_slave_dev_check(lower))
2585                         continue;
2586
2587                 dp = dsa_slave_to_port(lower);
2588                 if (!dp->lag)
2589                         /* Software LAG */
2590                         continue;
2591
2592                 err = dsa_slave_prechangeupper(lower, info);
2593                 if (notifier_to_errno(err))
2594                         break;
2595         }
2596
2597         return err;
2598 }
2599
2600 static int
2601 dsa_prevent_bridging_8021q_upper(struct net_device *dev,
2602                                  struct netdev_notifier_changeupper_info *info)
2603 {
2604         struct netlink_ext_ack *ext_ack;
2605         struct net_device *slave, *br;
2606         struct dsa_port *dp;
2607
2608         ext_ack = netdev_notifier_info_to_extack(&info->info);
2609
2610         if (!is_vlan_dev(dev))
2611                 return NOTIFY_DONE;
2612
2613         slave = vlan_dev_real_dev(dev);
2614         if (!dsa_slave_dev_check(slave))
2615                 return NOTIFY_DONE;
2616
2617         dp = dsa_slave_to_port(slave);
2618         br = dsa_port_bridge_dev_get(dp);
2619         if (!br)
2620                 return NOTIFY_DONE;
2621
2622         /* Deny enslaving a VLAN device into a VLAN-aware bridge */
2623         if (br_vlan_enabled(br) &&
2624             netif_is_bridge_master(info->upper_dev) && info->linking) {
2625                 NL_SET_ERR_MSG_MOD(ext_ack,
2626                                    "Cannot enslave VLAN device into VLAN aware bridge");
2627                 return notifier_from_errno(-EINVAL);
2628         }
2629
2630         return NOTIFY_DONE;
2631 }
2632
2633 static int
2634 dsa_slave_check_8021q_upper(struct net_device *dev,
2635                             struct netdev_notifier_changeupper_info *info)
2636 {
2637         struct dsa_port *dp = dsa_slave_to_port(dev);
2638         struct net_device *br = dsa_port_bridge_dev_get(dp);
2639         struct bridge_vlan_info br_info;
2640         struct netlink_ext_ack *extack;
2641         int err = NOTIFY_DONE;
2642         u16 vid;
2643
2644         if (!br || !br_vlan_enabled(br))
2645                 return NOTIFY_DONE;
2646
2647         extack = netdev_notifier_info_to_extack(&info->info);
2648         vid = vlan_dev_vlan_id(info->upper_dev);
2649
2650         /* br_vlan_get_info() returns -EINVAL or -ENOENT if the
2651          * device, respectively the VID is not found, returning
2652          * 0 means success, which is a failure for us here.
2653          */
2654         err = br_vlan_get_info(br, vid, &br_info);
2655         if (err == 0) {
2656                 NL_SET_ERR_MSG_MOD(extack,
2657                                    "This VLAN is already configured by the bridge");
2658                 return notifier_from_errno(-EBUSY);
2659         }
2660
2661         return NOTIFY_DONE;
2662 }
2663
2664 static int
2665 dsa_slave_prechangeupper_sanity_check(struct net_device *dev,
2666                                       struct netdev_notifier_changeupper_info *info)
2667 {
2668         struct dsa_switch *ds;
2669         struct dsa_port *dp;
2670         int err;
2671
2672         if (!dsa_slave_dev_check(dev))
2673                 return dsa_prevent_bridging_8021q_upper(dev, info);
2674
2675         dp = dsa_slave_to_port(dev);
2676         ds = dp->ds;
2677
2678         if (ds->ops->port_prechangeupper) {
2679                 err = ds->ops->port_prechangeupper(ds, dp->index, info);
2680                 if (err)
2681                         return notifier_from_errno(err);
2682         }
2683
2684         if (is_vlan_dev(info->upper_dev))
2685                 return dsa_slave_check_8021q_upper(dev, info);
2686
2687         return NOTIFY_DONE;
2688 }
2689
2690 static int dsa_slave_netdevice_event(struct notifier_block *nb,
2691                                      unsigned long event, void *ptr)
2692 {
2693         struct net_device *dev = netdev_notifier_info_to_dev(ptr);
2694
2695         switch (event) {
2696         case NETDEV_PRECHANGEUPPER: {
2697                 struct netdev_notifier_changeupper_info *info = ptr;
2698                 int err;
2699
2700                 err = dsa_slave_prechangeupper_sanity_check(dev, info);
2701                 if (err != NOTIFY_DONE)
2702                         return err;
2703
2704                 if (dsa_slave_dev_check(dev))
2705                         return dsa_slave_prechangeupper(dev, ptr);
2706
2707                 if (netif_is_lag_master(dev))
2708                         return dsa_slave_lag_prechangeupper(dev, ptr);
2709
2710                 break;
2711         }
2712         case NETDEV_CHANGEUPPER:
2713                 if (dsa_slave_dev_check(dev))
2714                         return dsa_slave_changeupper(dev, ptr);
2715
2716                 if (netif_is_lag_master(dev))
2717                         return dsa_slave_lag_changeupper(dev, ptr);
2718
2719                 break;
2720         case NETDEV_CHANGELOWERSTATE: {
2721                 struct netdev_notifier_changelowerstate_info *info = ptr;
2722                 struct dsa_port *dp;
2723                 int err;
2724
2725                 if (!dsa_slave_dev_check(dev))
2726                         break;
2727
2728                 dp = dsa_slave_to_port(dev);
2729
2730                 err = dsa_port_lag_change(dp, info->lower_state_info);
2731                 return notifier_from_errno(err);
2732         }
2733         case NETDEV_CHANGE:
2734         case NETDEV_UP: {
2735                 /* Track state of master port.
2736                  * DSA driver may require the master port (and indirectly
2737                  * the tagger) to be available for some special operation.
2738                  */
2739                 if (netdev_uses_dsa(dev)) {
2740                         struct dsa_port *cpu_dp = dev->dsa_ptr;
2741                         struct dsa_switch_tree *dst = cpu_dp->ds->dst;
2742
2743                         /* Track when the master port is UP */
2744                         dsa_tree_master_oper_state_change(dst, dev,
2745                                                           netif_oper_up(dev));
2746
2747                         /* Track when the master port is ready and can accept
2748                          * packet.
2749                          * NETDEV_UP event is not enough to flag a port as ready.
2750                          * We also have to wait for linkwatch_do_dev to dev_activate
2751                          * and emit a NETDEV_CHANGE event.
2752                          * We check if a master port is ready by checking if the dev
2753                          * have a qdisc assigned and is not noop.
2754                          */
2755                         dsa_tree_master_admin_state_change(dst, dev,
2756                                                            !qdisc_tx_is_noop(dev));
2757
2758                         return NOTIFY_OK;
2759                 }
2760
2761                 return NOTIFY_DONE;
2762         }
2763         case NETDEV_GOING_DOWN: {
2764                 struct dsa_port *dp, *cpu_dp;
2765                 struct dsa_switch_tree *dst;
2766                 LIST_HEAD(close_list);
2767
2768                 if (!netdev_uses_dsa(dev))
2769                         return NOTIFY_DONE;
2770
2771                 cpu_dp = dev->dsa_ptr;
2772                 dst = cpu_dp->ds->dst;
2773
2774                 dsa_tree_master_admin_state_change(dst, dev, false);
2775
2776                 list_for_each_entry(dp, &dst->ports, list) {
2777                         if (!dsa_port_is_user(dp))
2778                                 continue;
2779
2780                         list_add(&dp->slave->close_list, &close_list);
2781                 }
2782
2783                 dev_close_many(&close_list, true);
2784
2785                 return NOTIFY_OK;
2786         }
2787         default:
2788                 break;
2789         }
2790
2791         return NOTIFY_DONE;
2792 }
2793
2794 static void
2795 dsa_fdb_offload_notify(struct dsa_switchdev_event_work *switchdev_work)
2796 {
2797         struct switchdev_notifier_fdb_info info = {};
2798
2799         info.addr = switchdev_work->addr;
2800         info.vid = switchdev_work->vid;
2801         info.offloaded = true;
2802         call_switchdev_notifiers(SWITCHDEV_FDB_OFFLOADED,
2803                                  switchdev_work->orig_dev, &info.info, NULL);
2804 }
2805
2806 static void dsa_slave_switchdev_event_work(struct work_struct *work)
2807 {
2808         struct dsa_switchdev_event_work *switchdev_work =
2809                 container_of(work, struct dsa_switchdev_event_work, work);
2810         const unsigned char *addr = switchdev_work->addr;
2811         struct net_device *dev = switchdev_work->dev;
2812         u16 vid = switchdev_work->vid;
2813         struct dsa_switch *ds;
2814         struct dsa_port *dp;
2815         int err;
2816
2817         dp = dsa_slave_to_port(dev);
2818         ds = dp->ds;
2819
2820         switch (switchdev_work->event) {
2821         case SWITCHDEV_FDB_ADD_TO_DEVICE:
2822                 if (switchdev_work->host_addr)
2823                         err = dsa_port_bridge_host_fdb_add(dp, addr, vid);
2824                 else if (dp->lag)
2825                         err = dsa_port_lag_fdb_add(dp, addr, vid);
2826                 else
2827                         err = dsa_port_fdb_add(dp, addr, vid);
2828                 if (err) {
2829                         dev_err(ds->dev,
2830                                 "port %d failed to add %pM vid %d to fdb: %d\n",
2831                                 dp->index, addr, vid, err);
2832                         break;
2833                 }
2834                 dsa_fdb_offload_notify(switchdev_work);
2835                 break;
2836
2837         case SWITCHDEV_FDB_DEL_TO_DEVICE:
2838                 if (switchdev_work->host_addr)
2839                         err = dsa_port_bridge_host_fdb_del(dp, addr, vid);
2840                 else if (dp->lag)
2841                         err = dsa_port_lag_fdb_del(dp, addr, vid);
2842                 else
2843                         err = dsa_port_fdb_del(dp, addr, vid);
2844                 if (err) {
2845                         dev_err(ds->dev,
2846                                 "port %d failed to delete %pM vid %d from fdb: %d\n",
2847                                 dp->index, addr, vid, err);
2848                 }
2849
2850                 break;
2851         }
2852
2853         kfree(switchdev_work);
2854 }
2855
2856 static bool dsa_foreign_dev_check(const struct net_device *dev,
2857                                   const struct net_device *foreign_dev)
2858 {
2859         const struct dsa_port *dp = dsa_slave_to_port(dev);
2860         struct dsa_switch_tree *dst = dp->ds->dst;
2861
2862         if (netif_is_bridge_master(foreign_dev))
2863                 return !dsa_tree_offloads_bridge_dev(dst, foreign_dev);
2864
2865         if (netif_is_bridge_port(foreign_dev))
2866                 return !dsa_tree_offloads_bridge_port(dst, foreign_dev);
2867
2868         /* Everything else is foreign */
2869         return true;
2870 }
2871
2872 static int dsa_slave_fdb_event(struct net_device *dev,
2873                                struct net_device *orig_dev,
2874                                unsigned long event, const void *ctx,
2875                                const struct switchdev_notifier_fdb_info *fdb_info)
2876 {
2877         struct dsa_switchdev_event_work *switchdev_work;
2878         struct dsa_port *dp = dsa_slave_to_port(dev);
2879         bool host_addr = fdb_info->is_local;
2880         struct dsa_switch *ds = dp->ds;
2881
2882         if (ctx && ctx != dp)
2883                 return 0;
2884
2885         if (!dp->bridge)
2886                 return 0;
2887
2888         if (switchdev_fdb_is_dynamically_learned(fdb_info)) {
2889                 if (dsa_port_offloads_bridge_port(dp, orig_dev))
2890                         return 0;
2891
2892                 /* FDB entries learned by the software bridge or by foreign
2893                  * bridge ports should be installed as host addresses only if
2894                  * the driver requests assisted learning.
2895                  */
2896                 if (!ds->assisted_learning_on_cpu_port)
2897                         return 0;
2898         }
2899
2900         /* Also treat FDB entries on foreign interfaces bridged with us as host
2901          * addresses.
2902          */
2903         if (dsa_foreign_dev_check(dev, orig_dev))
2904                 host_addr = true;
2905
2906         /* Check early that we're not doing work in vain.
2907          * Host addresses on LAG ports still require regular FDB ops,
2908          * since the CPU port isn't in a LAG.
2909          */
2910         if (dp->lag && !host_addr) {
2911                 if (!ds->ops->lag_fdb_add || !ds->ops->lag_fdb_del)
2912                         return -EOPNOTSUPP;
2913         } else {
2914                 if (!ds->ops->port_fdb_add || !ds->ops->port_fdb_del)
2915                         return -EOPNOTSUPP;
2916         }
2917
2918         switchdev_work = kzalloc(sizeof(*switchdev_work), GFP_ATOMIC);
2919         if (!switchdev_work)
2920                 return -ENOMEM;
2921
2922         netdev_dbg(dev, "%s FDB entry towards %s, addr %pM vid %d%s\n",
2923                    event == SWITCHDEV_FDB_ADD_TO_DEVICE ? "Adding" : "Deleting",
2924                    orig_dev->name, fdb_info->addr, fdb_info->vid,
2925                    host_addr ? " as host address" : "");
2926
2927         INIT_WORK(&switchdev_work->work, dsa_slave_switchdev_event_work);
2928         switchdev_work->event = event;
2929         switchdev_work->dev = dev;
2930         switchdev_work->orig_dev = orig_dev;
2931
2932         ether_addr_copy(switchdev_work->addr, fdb_info->addr);
2933         switchdev_work->vid = fdb_info->vid;
2934         switchdev_work->host_addr = host_addr;
2935
2936         dsa_schedule_work(&switchdev_work->work);
2937
2938         return 0;
2939 }
2940
2941 /* Called under rcu_read_lock() */
2942 static int dsa_slave_switchdev_event(struct notifier_block *unused,
2943                                      unsigned long event, void *ptr)
2944 {
2945         struct net_device *dev = switchdev_notifier_info_to_dev(ptr);
2946         int err;
2947
2948         switch (event) {
2949         case SWITCHDEV_PORT_ATTR_SET:
2950                 err = switchdev_handle_port_attr_set(dev, ptr,
2951                                                      dsa_slave_dev_check,
2952                                                      dsa_slave_port_attr_set);
2953                 return notifier_from_errno(err);
2954         case SWITCHDEV_FDB_ADD_TO_DEVICE:
2955         case SWITCHDEV_FDB_DEL_TO_DEVICE:
2956                 err = switchdev_handle_fdb_event_to_device(dev, event, ptr,
2957                                                            dsa_slave_dev_check,
2958                                                            dsa_foreign_dev_check,
2959                                                            dsa_slave_fdb_event);
2960                 return notifier_from_errno(err);
2961         default:
2962                 return NOTIFY_DONE;
2963         }
2964
2965         return NOTIFY_OK;
2966 }
2967
2968 static int dsa_slave_switchdev_blocking_event(struct notifier_block *unused,
2969                                               unsigned long event, void *ptr)
2970 {
2971         struct net_device *dev = switchdev_notifier_info_to_dev(ptr);
2972         int err;
2973
2974         switch (event) {
2975         case SWITCHDEV_PORT_OBJ_ADD:
2976                 err = switchdev_handle_port_obj_add_foreign(dev, ptr,
2977                                                             dsa_slave_dev_check,
2978                                                             dsa_foreign_dev_check,
2979                                                             dsa_slave_port_obj_add);
2980                 return notifier_from_errno(err);
2981         case SWITCHDEV_PORT_OBJ_DEL:
2982                 err = switchdev_handle_port_obj_del_foreign(dev, ptr,
2983                                                             dsa_slave_dev_check,
2984                                                             dsa_foreign_dev_check,
2985                                                             dsa_slave_port_obj_del);
2986                 return notifier_from_errno(err);
2987         case SWITCHDEV_PORT_ATTR_SET:
2988                 err = switchdev_handle_port_attr_set(dev, ptr,
2989                                                      dsa_slave_dev_check,
2990                                                      dsa_slave_port_attr_set);
2991                 return notifier_from_errno(err);
2992         }
2993
2994         return NOTIFY_DONE;
2995 }
2996
2997 static struct notifier_block dsa_slave_nb __read_mostly = {
2998         .notifier_call  = dsa_slave_netdevice_event,
2999 };
3000
3001 struct notifier_block dsa_slave_switchdev_notifier = {
3002         .notifier_call = dsa_slave_switchdev_event,
3003 };
3004
3005 struct notifier_block dsa_slave_switchdev_blocking_notifier = {
3006         .notifier_call = dsa_slave_switchdev_blocking_event,
3007 };
3008
3009 int dsa_slave_register_notifier(void)
3010 {
3011         struct notifier_block *nb;
3012         int err;
3013
3014         err = register_netdevice_notifier(&dsa_slave_nb);
3015         if (err)
3016                 return err;
3017
3018         err = register_switchdev_notifier(&dsa_slave_switchdev_notifier);
3019         if (err)
3020                 goto err_switchdev_nb;
3021
3022         nb = &dsa_slave_switchdev_blocking_notifier;
3023         err = register_switchdev_blocking_notifier(nb);
3024         if (err)
3025                 goto err_switchdev_blocking_nb;
3026
3027         return 0;
3028
3029 err_switchdev_blocking_nb:
3030         unregister_switchdev_notifier(&dsa_slave_switchdev_notifier);
3031 err_switchdev_nb:
3032         unregister_netdevice_notifier(&dsa_slave_nb);
3033         return err;
3034 }
3035
3036 void dsa_slave_unregister_notifier(void)
3037 {
3038         struct notifier_block *nb;
3039         int err;
3040
3041         nb = &dsa_slave_switchdev_blocking_notifier;
3042         err = unregister_switchdev_blocking_notifier(nb);
3043         if (err)
3044                 pr_err("DSA: failed to unregister switchdev blocking notifier (%d)\n", err);
3045
3046         err = unregister_switchdev_notifier(&dsa_slave_switchdev_notifier);
3047         if (err)
3048                 pr_err("DSA: failed to unregister switchdev notifier (%d)\n", err);
3049
3050         err = unregister_netdevice_notifier(&dsa_slave_nb);
3051         if (err)
3052                 pr_err("DSA: failed to unregister slave notifier (%d)\n", err);
3053 }