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