1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * net/dsa/slave.c - Slave device handling
4 * Copyright (c) 2008-2009 Marvell Semiconductor
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>
25 static bool dsa_slave_dev_check(const struct net_device
*dev
);
27 /* slave mii_bus handling ***************************************************/
28 static int dsa_slave_phy_read(struct mii_bus
*bus
, int addr
, int reg
)
30 struct dsa_switch
*ds
= bus
->priv
;
32 if (ds
->phys_mii_mask
& (1 << addr
))
33 return ds
->ops
->phy_read(ds
, addr
, reg
);
38 static int dsa_slave_phy_write(struct mii_bus
*bus
, int addr
, int reg
, u16 val
)
40 struct dsa_switch
*ds
= bus
->priv
;
42 if (ds
->phys_mii_mask
& (1 << addr
))
43 return ds
->ops
->phy_write(ds
, addr
, reg
, val
);
48 void dsa_slave_mii_bus_init(struct dsa_switch
*ds
)
50 ds
->slave_mii_bus
->priv
= (void *)ds
;
51 ds
->slave_mii_bus
->name
= "dsa slave smi";
52 ds
->slave_mii_bus
->read
= dsa_slave_phy_read
;
53 ds
->slave_mii_bus
->write
= dsa_slave_phy_write
;
54 snprintf(ds
->slave_mii_bus
->id
, MII_BUS_ID_SIZE
, "dsa-%d.%d",
55 ds
->dst
->index
, ds
->index
);
56 ds
->slave_mii_bus
->parent
= ds
->dev
;
57 ds
->slave_mii_bus
->phy_mask
= ~ds
->phys_mii_mask
;
61 /* slave device handling ****************************************************/
62 static int dsa_slave_get_iflink(const struct net_device
*dev
)
64 return dsa_slave_to_master(dev
)->ifindex
;
67 static int dsa_slave_open(struct net_device
*dev
)
69 struct net_device
*master
= dsa_slave_to_master(dev
);
70 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
73 if (!(master
->flags
& IFF_UP
))
76 if (!ether_addr_equal(dev
->dev_addr
, master
->dev_addr
)) {
77 err
= dev_uc_add(master
, dev
->dev_addr
);
82 if (dev
->flags
& IFF_ALLMULTI
) {
83 err
= dev_set_allmulti(master
, 1);
87 if (dev
->flags
& IFF_PROMISC
) {
88 err
= dev_set_promiscuity(master
, 1);
93 err
= dsa_port_enable(dp
, dev
->phydev
);
97 phylink_start(dp
->pl
);
102 if (dev
->flags
& IFF_PROMISC
)
103 dev_set_promiscuity(master
, -1);
105 if (dev
->flags
& IFF_ALLMULTI
)
106 dev_set_allmulti(master
, -1);
108 if (!ether_addr_equal(dev
->dev_addr
, master
->dev_addr
))
109 dev_uc_del(master
, dev
->dev_addr
);
114 static int dsa_slave_close(struct net_device
*dev
)
116 struct net_device
*master
= dsa_slave_to_master(dev
);
117 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
119 cancel_work_sync(&dp
->xmit_work
);
120 skb_queue_purge(&dp
->xmit_queue
);
122 phylink_stop(dp
->pl
);
124 dsa_port_disable(dp
);
126 dev_mc_unsync(master
, dev
);
127 dev_uc_unsync(master
, dev
);
128 if (dev
->flags
& IFF_ALLMULTI
)
129 dev_set_allmulti(master
, -1);
130 if (dev
->flags
& IFF_PROMISC
)
131 dev_set_promiscuity(master
, -1);
133 if (!ether_addr_equal(dev
->dev_addr
, master
->dev_addr
))
134 dev_uc_del(master
, dev
->dev_addr
);
139 static void dsa_slave_change_rx_flags(struct net_device
*dev
, int change
)
141 struct net_device
*master
= dsa_slave_to_master(dev
);
142 if (dev
->flags
& IFF_UP
) {
143 if (change
& IFF_ALLMULTI
)
144 dev_set_allmulti(master
,
145 dev
->flags
& IFF_ALLMULTI
? 1 : -1);
146 if (change
& IFF_PROMISC
)
147 dev_set_promiscuity(master
,
148 dev
->flags
& IFF_PROMISC
? 1 : -1);
152 static void dsa_slave_set_rx_mode(struct net_device
*dev
)
154 struct net_device
*master
= dsa_slave_to_master(dev
);
156 dev_mc_sync(master
, dev
);
157 dev_uc_sync(master
, dev
);
160 static int dsa_slave_set_mac_address(struct net_device
*dev
, void *a
)
162 struct net_device
*master
= dsa_slave_to_master(dev
);
163 struct sockaddr
*addr
= a
;
166 if (!is_valid_ether_addr(addr
->sa_data
))
167 return -EADDRNOTAVAIL
;
169 if (!(dev
->flags
& IFF_UP
))
172 if (!ether_addr_equal(addr
->sa_data
, master
->dev_addr
)) {
173 err
= dev_uc_add(master
, addr
->sa_data
);
178 if (!ether_addr_equal(dev
->dev_addr
, master
->dev_addr
))
179 dev_uc_del(master
, dev
->dev_addr
);
182 ether_addr_copy(dev
->dev_addr
, addr
->sa_data
);
187 struct dsa_slave_dump_ctx
{
188 struct net_device
*dev
;
190 struct netlink_callback
*cb
;
195 dsa_slave_port_fdb_do_dump(const unsigned char *addr
, u16 vid
,
196 bool is_static
, void *data
)
198 struct dsa_slave_dump_ctx
*dump
= data
;
199 u32 portid
= NETLINK_CB(dump
->cb
->skb
).portid
;
200 u32 seq
= dump
->cb
->nlh
->nlmsg_seq
;
201 struct nlmsghdr
*nlh
;
204 if (dump
->idx
< dump
->cb
->args
[2])
207 nlh
= nlmsg_put(dump
->skb
, portid
, seq
, RTM_NEWNEIGH
,
208 sizeof(*ndm
), NLM_F_MULTI
);
212 ndm
= nlmsg_data(nlh
);
213 ndm
->ndm_family
= AF_BRIDGE
;
216 ndm
->ndm_flags
= NTF_SELF
;
218 ndm
->ndm_ifindex
= dump
->dev
->ifindex
;
219 ndm
->ndm_state
= is_static
? NUD_NOARP
: NUD_REACHABLE
;
221 if (nla_put(dump
->skb
, NDA_LLADDR
, ETH_ALEN
, addr
))
222 goto nla_put_failure
;
224 if (vid
&& nla_put_u16(dump
->skb
, NDA_VLAN
, vid
))
225 goto nla_put_failure
;
227 nlmsg_end(dump
->skb
, nlh
);
234 nlmsg_cancel(dump
->skb
, nlh
);
239 dsa_slave_fdb_dump(struct sk_buff
*skb
, struct netlink_callback
*cb
,
240 struct net_device
*dev
, struct net_device
*filter_dev
,
243 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
244 struct dsa_slave_dump_ctx dump
= {
252 err
= dsa_port_fdb_dump(dp
, dsa_slave_port_fdb_do_dump
, &dump
);
258 static int dsa_slave_ioctl(struct net_device
*dev
, struct ifreq
*ifr
, int cmd
)
260 struct dsa_slave_priv
*p
= netdev_priv(dev
);
261 struct dsa_switch
*ds
= p
->dp
->ds
;
262 int port
= p
->dp
->index
;
264 /* Pass through to switch driver if it supports timestamping */
267 if (ds
->ops
->port_hwtstamp_get
)
268 return ds
->ops
->port_hwtstamp_get(ds
, port
, ifr
);
271 if (ds
->ops
->port_hwtstamp_set
)
272 return ds
->ops
->port_hwtstamp_set(ds
, port
, ifr
);
276 return phylink_mii_ioctl(p
->dp
->pl
, ifr
, cmd
);
279 static int dsa_slave_port_attr_set(struct net_device
*dev
,
280 const struct switchdev_attr
*attr
,
281 struct switchdev_trans
*trans
)
283 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
287 case SWITCHDEV_ATTR_ID_PORT_STP_STATE
:
288 ret
= dsa_port_set_state(dp
, attr
->u
.stp_state
, trans
);
290 case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING
:
291 ret
= dsa_port_vlan_filtering(dp
, attr
->u
.vlan_filtering
,
294 case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME
:
295 ret
= dsa_port_ageing_time(dp
, attr
->u
.ageing_time
, trans
);
297 case SWITCHDEV_ATTR_ID_PORT_PRE_BRIDGE_FLAGS
:
298 ret
= dsa_port_pre_bridge_flags(dp
, attr
->u
.brport_flags
,
301 case SWITCHDEV_ATTR_ID_PORT_BRIDGE_FLAGS
:
302 ret
= dsa_port_bridge_flags(dp
, attr
->u
.brport_flags
, trans
);
304 case SWITCHDEV_ATTR_ID_BRIDGE_MROUTER
:
305 ret
= dsa_port_mrouter(dp
->cpu_dp
, attr
->u
.mrouter
, trans
);
315 static int dsa_slave_vlan_add(struct net_device
*dev
,
316 const struct switchdev_obj
*obj
,
317 struct switchdev_trans
*trans
)
319 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
320 struct switchdev_obj_port_vlan vlan
;
323 if (obj
->orig_dev
!= dev
)
326 if (dp
->bridge_dev
&& !br_vlan_enabled(dp
->bridge_dev
))
329 vlan
= *SWITCHDEV_OBJ_PORT_VLAN(obj
);
331 err
= dsa_port_vlan_add(dp
, &vlan
, trans
);
335 /* We need the dedicated CPU port to be a member of the VLAN as well.
336 * Even though drivers often handle CPU membership in special ways,
337 * it doesn't make sense to program a PVID, so clear this flag.
339 vlan
.flags
&= ~BRIDGE_VLAN_INFO_PVID
;
341 err
= dsa_port_vlan_add(dp
->cpu_dp
, &vlan
, trans
);
348 static int dsa_slave_port_obj_add(struct net_device
*dev
,
349 const struct switchdev_obj
*obj
,
350 struct switchdev_trans
*trans
,
351 struct netlink_ext_ack
*extack
)
353 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
356 /* For the prepare phase, ensure the full set of changes is feasable in
357 * one go in order to signal a failure properly. If an operation is not
358 * supported, return -EOPNOTSUPP.
362 case SWITCHDEV_OBJ_ID_PORT_MDB
:
363 if (obj
->orig_dev
!= dev
)
365 err
= dsa_port_mdb_add(dp
, SWITCHDEV_OBJ_PORT_MDB(obj
), trans
);
367 case SWITCHDEV_OBJ_ID_HOST_MDB
:
368 /* DSA can directly translate this to a normal MDB add,
369 * but on the CPU port.
371 err
= dsa_port_mdb_add(dp
->cpu_dp
, SWITCHDEV_OBJ_PORT_MDB(obj
),
374 case SWITCHDEV_OBJ_ID_PORT_VLAN
:
375 err
= dsa_slave_vlan_add(dev
, obj
, trans
);
385 static int dsa_slave_vlan_del(struct net_device
*dev
,
386 const struct switchdev_obj
*obj
)
388 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
390 if (obj
->orig_dev
!= dev
)
393 if (dp
->bridge_dev
&& !br_vlan_enabled(dp
->bridge_dev
))
396 /* Do not deprogram the CPU port as it may be shared with other user
397 * ports which can be members of this VLAN as well.
399 return dsa_port_vlan_del(dp
, SWITCHDEV_OBJ_PORT_VLAN(obj
));
402 static int dsa_slave_port_obj_del(struct net_device
*dev
,
403 const struct switchdev_obj
*obj
)
405 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
409 case SWITCHDEV_OBJ_ID_PORT_MDB
:
410 if (obj
->orig_dev
!= dev
)
412 err
= dsa_port_mdb_del(dp
, SWITCHDEV_OBJ_PORT_MDB(obj
));
414 case SWITCHDEV_OBJ_ID_HOST_MDB
:
415 /* DSA can directly translate this to a normal MDB add,
416 * but on the CPU port.
418 err
= dsa_port_mdb_del(dp
->cpu_dp
, SWITCHDEV_OBJ_PORT_MDB(obj
));
420 case SWITCHDEV_OBJ_ID_PORT_VLAN
:
421 err
= dsa_slave_vlan_del(dev
, obj
);
431 static int dsa_slave_get_port_parent_id(struct net_device
*dev
,
432 struct netdev_phys_item_id
*ppid
)
434 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
435 struct dsa_switch
*ds
= dp
->ds
;
436 struct dsa_switch_tree
*dst
= ds
->dst
;
438 /* For non-legacy ports, devlink is used and it takes
439 * care of the name generation. This ndo implementation
440 * should be removed with legacy support.
445 ppid
->id_len
= sizeof(dst
->index
);
446 memcpy(&ppid
->id
, &dst
->index
, ppid
->id_len
);
451 static inline netdev_tx_t
dsa_slave_netpoll_send_skb(struct net_device
*dev
,
454 #ifdef CONFIG_NET_POLL_CONTROLLER
455 struct dsa_slave_priv
*p
= netdev_priv(dev
);
458 netpoll_send_skb(p
->netpoll
, skb
);
465 static void dsa_skb_tx_timestamp(struct dsa_slave_priv
*p
,
468 struct dsa_switch
*ds
= p
->dp
->ds
;
469 struct sk_buff
*clone
;
472 type
= ptp_classify_raw(skb
);
473 if (type
== PTP_CLASS_NONE
)
476 if (!ds
->ops
->port_txtstamp
)
479 clone
= skb_clone_sk(skb
);
483 DSA_SKB_CB(skb
)->clone
= clone
;
485 if (ds
->ops
->port_txtstamp(ds
, p
->dp
->index
, clone
, type
))
491 netdev_tx_t
dsa_enqueue_skb(struct sk_buff
*skb
, struct net_device
*dev
)
493 /* SKB for netpoll still need to be mangled with the protocol-specific
494 * tag to be successfully transmitted
496 if (unlikely(netpoll_tx_running(dev
)))
497 return dsa_slave_netpoll_send_skb(dev
, skb
);
499 /* Queue the SKB for transmission on the parent interface, but
500 * do not modify its EtherType
502 skb
->dev
= dsa_slave_to_master(dev
);
507 EXPORT_SYMBOL_GPL(dsa_enqueue_skb
);
509 static netdev_tx_t
dsa_slave_xmit(struct sk_buff
*skb
, struct net_device
*dev
)
511 struct dsa_slave_priv
*p
= netdev_priv(dev
);
512 struct pcpu_sw_netstats
*s
;
513 struct sk_buff
*nskb
;
515 s
= this_cpu_ptr(p
->stats64
);
516 u64_stats_update_begin(&s
->syncp
);
518 s
->tx_bytes
+= skb
->len
;
519 u64_stats_update_end(&s
->syncp
);
521 DSA_SKB_CB(skb
)->deferred_xmit
= false;
522 DSA_SKB_CB(skb
)->clone
= NULL
;
524 /* Identify PTP protocol packets, clone them, and pass them to the
527 dsa_skb_tx_timestamp(p
, skb
);
529 /* Transmit function may have to reallocate the original SKB,
530 * in which case it must have freed it. Only free it here on error.
532 nskb
= p
->xmit(skb
, dev
);
534 if (!DSA_SKB_CB(skb
)->deferred_xmit
)
539 return dsa_enqueue_skb(nskb
, dev
);
542 void *dsa_defer_xmit(struct sk_buff
*skb
, struct net_device
*dev
)
544 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
546 DSA_SKB_CB(skb
)->deferred_xmit
= true;
548 skb_queue_tail(&dp
->xmit_queue
, skb
);
549 schedule_work(&dp
->xmit_work
);
552 EXPORT_SYMBOL_GPL(dsa_defer_xmit
);
554 static void dsa_port_xmit_work(struct work_struct
*work
)
556 struct dsa_port
*dp
= container_of(work
, struct dsa_port
, xmit_work
);
557 struct dsa_switch
*ds
= dp
->ds
;
560 if (unlikely(!ds
->ops
->port_deferred_xmit
))
563 while ((skb
= skb_dequeue(&dp
->xmit_queue
)) != NULL
)
564 ds
->ops
->port_deferred_xmit(ds
, dp
->index
, skb
);
567 /* ethtool operations *******************************************************/
569 static void dsa_slave_get_drvinfo(struct net_device
*dev
,
570 struct ethtool_drvinfo
*drvinfo
)
572 strlcpy(drvinfo
->driver
, "dsa", sizeof(drvinfo
->driver
));
573 strlcpy(drvinfo
->fw_version
, "N/A", sizeof(drvinfo
->fw_version
));
574 strlcpy(drvinfo
->bus_info
, "platform", sizeof(drvinfo
->bus_info
));
577 static int dsa_slave_get_regs_len(struct net_device
*dev
)
579 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
580 struct dsa_switch
*ds
= dp
->ds
;
582 if (ds
->ops
->get_regs_len
)
583 return ds
->ops
->get_regs_len(ds
, dp
->index
);
589 dsa_slave_get_regs(struct net_device
*dev
, struct ethtool_regs
*regs
, void *_p
)
591 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
592 struct dsa_switch
*ds
= dp
->ds
;
594 if (ds
->ops
->get_regs
)
595 ds
->ops
->get_regs(ds
, dp
->index
, regs
, _p
);
598 static int dsa_slave_nway_reset(struct net_device
*dev
)
600 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
602 return phylink_ethtool_nway_reset(dp
->pl
);
605 static int dsa_slave_get_eeprom_len(struct net_device
*dev
)
607 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
608 struct dsa_switch
*ds
= dp
->ds
;
610 if (ds
->cd
&& ds
->cd
->eeprom_len
)
611 return ds
->cd
->eeprom_len
;
613 if (ds
->ops
->get_eeprom_len
)
614 return ds
->ops
->get_eeprom_len(ds
);
619 static int dsa_slave_get_eeprom(struct net_device
*dev
,
620 struct ethtool_eeprom
*eeprom
, u8
*data
)
622 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
623 struct dsa_switch
*ds
= dp
->ds
;
625 if (ds
->ops
->get_eeprom
)
626 return ds
->ops
->get_eeprom(ds
, eeprom
, data
);
631 static int dsa_slave_set_eeprom(struct net_device
*dev
,
632 struct ethtool_eeprom
*eeprom
, u8
*data
)
634 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
635 struct dsa_switch
*ds
= dp
->ds
;
637 if (ds
->ops
->set_eeprom
)
638 return ds
->ops
->set_eeprom(ds
, eeprom
, data
);
643 static void dsa_slave_get_strings(struct net_device
*dev
,
644 uint32_t stringset
, uint8_t *data
)
646 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
647 struct dsa_switch
*ds
= dp
->ds
;
649 if (stringset
== ETH_SS_STATS
) {
650 int len
= ETH_GSTRING_LEN
;
652 strncpy(data
, "tx_packets", len
);
653 strncpy(data
+ len
, "tx_bytes", len
);
654 strncpy(data
+ 2 * len
, "rx_packets", len
);
655 strncpy(data
+ 3 * len
, "rx_bytes", len
);
656 if (ds
->ops
->get_strings
)
657 ds
->ops
->get_strings(ds
, dp
->index
, stringset
,
662 static void dsa_slave_get_ethtool_stats(struct net_device
*dev
,
663 struct ethtool_stats
*stats
,
666 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
667 struct dsa_slave_priv
*p
= netdev_priv(dev
);
668 struct dsa_switch
*ds
= dp
->ds
;
669 struct pcpu_sw_netstats
*s
;
673 for_each_possible_cpu(i
) {
674 u64 tx_packets
, tx_bytes
, rx_packets
, rx_bytes
;
676 s
= per_cpu_ptr(p
->stats64
, i
);
678 start
= u64_stats_fetch_begin_irq(&s
->syncp
);
679 tx_packets
= s
->tx_packets
;
680 tx_bytes
= s
->tx_bytes
;
681 rx_packets
= s
->rx_packets
;
682 rx_bytes
= s
->rx_bytes
;
683 } while (u64_stats_fetch_retry_irq(&s
->syncp
, start
));
684 data
[0] += tx_packets
;
686 data
[2] += rx_packets
;
689 if (ds
->ops
->get_ethtool_stats
)
690 ds
->ops
->get_ethtool_stats(ds
, dp
->index
, data
+ 4);
693 static int dsa_slave_get_sset_count(struct net_device
*dev
, int sset
)
695 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
696 struct dsa_switch
*ds
= dp
->ds
;
698 if (sset
== ETH_SS_STATS
) {
702 if (ds
->ops
->get_sset_count
)
703 count
+= ds
->ops
->get_sset_count(ds
, dp
->index
, sset
);
711 static void dsa_slave_get_wol(struct net_device
*dev
, struct ethtool_wolinfo
*w
)
713 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
714 struct dsa_switch
*ds
= dp
->ds
;
716 phylink_ethtool_get_wol(dp
->pl
, w
);
718 if (ds
->ops
->get_wol
)
719 ds
->ops
->get_wol(ds
, dp
->index
, w
);
722 static int dsa_slave_set_wol(struct net_device
*dev
, struct ethtool_wolinfo
*w
)
724 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
725 struct dsa_switch
*ds
= dp
->ds
;
726 int ret
= -EOPNOTSUPP
;
728 phylink_ethtool_set_wol(dp
->pl
, w
);
730 if (ds
->ops
->set_wol
)
731 ret
= ds
->ops
->set_wol(ds
, dp
->index
, w
);
736 static int dsa_slave_set_eee(struct net_device
*dev
, struct ethtool_eee
*e
)
738 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
739 struct dsa_switch
*ds
= dp
->ds
;
742 /* Port's PHY and MAC both need to be EEE capable */
743 if (!dev
->phydev
|| !dp
->pl
)
746 if (!ds
->ops
->set_mac_eee
)
749 ret
= ds
->ops
->set_mac_eee(ds
, dp
->index
, e
);
753 return phylink_ethtool_set_eee(dp
->pl
, e
);
756 static int dsa_slave_get_eee(struct net_device
*dev
, struct ethtool_eee
*e
)
758 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
759 struct dsa_switch
*ds
= dp
->ds
;
762 /* Port's PHY and MAC both need to be EEE capable */
763 if (!dev
->phydev
|| !dp
->pl
)
766 if (!ds
->ops
->get_mac_eee
)
769 ret
= ds
->ops
->get_mac_eee(ds
, dp
->index
, e
);
773 return phylink_ethtool_get_eee(dp
->pl
, e
);
776 static int dsa_slave_get_link_ksettings(struct net_device
*dev
,
777 struct ethtool_link_ksettings
*cmd
)
779 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
781 return phylink_ethtool_ksettings_get(dp
->pl
, cmd
);
784 static int dsa_slave_set_link_ksettings(struct net_device
*dev
,
785 const struct ethtool_link_ksettings
*cmd
)
787 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
789 return phylink_ethtool_ksettings_set(dp
->pl
, cmd
);
792 static void dsa_slave_get_pauseparam(struct net_device
*dev
,
793 struct ethtool_pauseparam
*pause
)
795 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
797 phylink_ethtool_get_pauseparam(dp
->pl
, pause
);
800 static int dsa_slave_set_pauseparam(struct net_device
*dev
,
801 struct ethtool_pauseparam
*pause
)
803 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
805 return phylink_ethtool_set_pauseparam(dp
->pl
, pause
);
808 #ifdef CONFIG_NET_POLL_CONTROLLER
809 static int dsa_slave_netpoll_setup(struct net_device
*dev
,
810 struct netpoll_info
*ni
)
812 struct net_device
*master
= dsa_slave_to_master(dev
);
813 struct dsa_slave_priv
*p
= netdev_priv(dev
);
814 struct netpoll
*netpoll
;
817 netpoll
= kzalloc(sizeof(*netpoll
), GFP_KERNEL
);
821 err
= __netpoll_setup(netpoll
, master
);
827 p
->netpoll
= netpoll
;
832 static void dsa_slave_netpoll_cleanup(struct net_device
*dev
)
834 struct dsa_slave_priv
*p
= netdev_priv(dev
);
835 struct netpoll
*netpoll
= p
->netpoll
;
842 __netpoll_free(netpoll
);
845 static void dsa_slave_poll_controller(struct net_device
*dev
)
850 static int dsa_slave_get_phys_port_name(struct net_device
*dev
,
851 char *name
, size_t len
)
853 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
855 /* For non-legacy ports, devlink is used and it takes
856 * care of the name generation. This ndo implementation
857 * should be removed with legacy support.
862 if (snprintf(name
, len
, "p%d", dp
->index
) >= len
)
868 static struct dsa_mall_tc_entry
*
869 dsa_slave_mall_tc_entry_find(struct net_device
*dev
, unsigned long cookie
)
871 struct dsa_slave_priv
*p
= netdev_priv(dev
);
872 struct dsa_mall_tc_entry
*mall_tc_entry
;
874 list_for_each_entry(mall_tc_entry
, &p
->mall_tc_list
, list
)
875 if (mall_tc_entry
->cookie
== cookie
)
876 return mall_tc_entry
;
881 static int dsa_slave_add_cls_matchall(struct net_device
*dev
,
882 struct tc_cls_matchall_offload
*cls
,
885 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
886 struct dsa_slave_priv
*p
= netdev_priv(dev
);
887 struct dsa_mall_tc_entry
*mall_tc_entry
;
888 __be16 protocol
= cls
->common
.protocol
;
889 struct dsa_switch
*ds
= dp
->ds
;
890 struct flow_action_entry
*act
;
891 struct dsa_port
*to_dp
;
892 int err
= -EOPNOTSUPP
;
894 if (!ds
->ops
->port_mirror_add
)
897 if (!flow_offload_has_one_action(&cls
->rule
->action
))
900 act
= &cls
->rule
->action
.entries
[0];
902 if (act
->id
== FLOW_ACTION_MIRRED
&& protocol
== htons(ETH_P_ALL
)) {
903 struct dsa_mall_mirror_tc_entry
*mirror
;
908 if (!dsa_slave_dev_check(act
->dev
))
911 mall_tc_entry
= kzalloc(sizeof(*mall_tc_entry
), GFP_KERNEL
);
915 mall_tc_entry
->cookie
= cls
->cookie
;
916 mall_tc_entry
->type
= DSA_PORT_MALL_MIRROR
;
917 mirror
= &mall_tc_entry
->mirror
;
919 to_dp
= dsa_slave_to_port(act
->dev
);
921 mirror
->to_local_port
= to_dp
->index
;
922 mirror
->ingress
= ingress
;
924 err
= ds
->ops
->port_mirror_add(ds
, dp
->index
, mirror
, ingress
);
926 kfree(mall_tc_entry
);
930 list_add_tail(&mall_tc_entry
->list
, &p
->mall_tc_list
);
936 static void dsa_slave_del_cls_matchall(struct net_device
*dev
,
937 struct tc_cls_matchall_offload
*cls
)
939 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
940 struct dsa_mall_tc_entry
*mall_tc_entry
;
941 struct dsa_switch
*ds
= dp
->ds
;
943 if (!ds
->ops
->port_mirror_del
)
946 mall_tc_entry
= dsa_slave_mall_tc_entry_find(dev
, cls
->cookie
);
950 list_del(&mall_tc_entry
->list
);
952 switch (mall_tc_entry
->type
) {
953 case DSA_PORT_MALL_MIRROR
:
954 ds
->ops
->port_mirror_del(ds
, dp
->index
, &mall_tc_entry
->mirror
);
960 kfree(mall_tc_entry
);
963 static int dsa_slave_setup_tc_cls_matchall(struct net_device
*dev
,
964 struct tc_cls_matchall_offload
*cls
,
967 if (cls
->common
.chain_index
)
970 switch (cls
->command
) {
971 case TC_CLSMATCHALL_REPLACE
:
972 return dsa_slave_add_cls_matchall(dev
, cls
, ingress
);
973 case TC_CLSMATCHALL_DESTROY
:
974 dsa_slave_del_cls_matchall(dev
, cls
);
981 static int dsa_slave_setup_tc_block_cb(enum tc_setup_type type
, void *type_data
,
982 void *cb_priv
, bool ingress
)
984 struct net_device
*dev
= cb_priv
;
986 if (!tc_can_offload(dev
))
990 case TC_SETUP_CLSMATCHALL
:
991 return dsa_slave_setup_tc_cls_matchall(dev
, type_data
, ingress
);
997 static int dsa_slave_setup_tc_block_cb_ig(enum tc_setup_type type
,
998 void *type_data
, void *cb_priv
)
1000 return dsa_slave_setup_tc_block_cb(type
, type_data
, cb_priv
, true);
1003 static int dsa_slave_setup_tc_block_cb_eg(enum tc_setup_type type
,
1004 void *type_data
, void *cb_priv
)
1006 return dsa_slave_setup_tc_block_cb(type
, type_data
, cb_priv
, false);
1009 static LIST_HEAD(dsa_slave_block_cb_list
);
1011 static int dsa_slave_setup_tc_block(struct net_device
*dev
,
1012 struct flow_block_offload
*f
)
1014 struct flow_block_cb
*block_cb
;
1015 flow_setup_cb_t
*cb
;
1017 if (f
->binder_type
== FLOW_BLOCK_BINDER_TYPE_CLSACT_INGRESS
)
1018 cb
= dsa_slave_setup_tc_block_cb_ig
;
1019 else if (f
->binder_type
== FLOW_BLOCK_BINDER_TYPE_CLSACT_EGRESS
)
1020 cb
= dsa_slave_setup_tc_block_cb_eg
;
1024 f
->driver_block_list
= &dsa_slave_block_cb_list
;
1026 switch (f
->command
) {
1027 case FLOW_BLOCK_BIND
:
1028 if (flow_block_cb_is_busy(cb
, dev
, &dsa_slave_block_cb_list
))
1031 block_cb
= flow_block_cb_alloc(cb
, dev
, dev
, NULL
);
1032 if (IS_ERR(block_cb
))
1033 return PTR_ERR(block_cb
);
1035 flow_block_cb_add(block_cb
, f
);
1036 list_add_tail(&block_cb
->driver_list
, &dsa_slave_block_cb_list
);
1038 case FLOW_BLOCK_UNBIND
:
1039 block_cb
= flow_block_cb_lookup(f
->block
, cb
, dev
);
1043 flow_block_cb_remove(block_cb
, f
);
1044 list_del(&block_cb
->driver_list
);
1051 static int dsa_slave_setup_tc(struct net_device
*dev
, enum tc_setup_type type
,
1054 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
1055 struct dsa_switch
*ds
= dp
->ds
;
1057 if (type
== TC_SETUP_BLOCK
)
1058 return dsa_slave_setup_tc_block(dev
, type_data
);
1060 if (!ds
->ops
->port_setup_tc
)
1063 return ds
->ops
->port_setup_tc(ds
, dp
->index
, type
, type_data
);
1066 static void dsa_slave_get_stats64(struct net_device
*dev
,
1067 struct rtnl_link_stats64
*stats
)
1069 struct dsa_slave_priv
*p
= netdev_priv(dev
);
1070 struct pcpu_sw_netstats
*s
;
1074 netdev_stats_to_stats64(stats
, &dev
->stats
);
1075 for_each_possible_cpu(i
) {
1076 u64 tx_packets
, tx_bytes
, rx_packets
, rx_bytes
;
1078 s
= per_cpu_ptr(p
->stats64
, i
);
1080 start
= u64_stats_fetch_begin_irq(&s
->syncp
);
1081 tx_packets
= s
->tx_packets
;
1082 tx_bytes
= s
->tx_bytes
;
1083 rx_packets
= s
->rx_packets
;
1084 rx_bytes
= s
->rx_bytes
;
1085 } while (u64_stats_fetch_retry_irq(&s
->syncp
, start
));
1087 stats
->tx_packets
+= tx_packets
;
1088 stats
->tx_bytes
+= tx_bytes
;
1089 stats
->rx_packets
+= rx_packets
;
1090 stats
->rx_bytes
+= rx_bytes
;
1094 static int dsa_slave_get_rxnfc(struct net_device
*dev
,
1095 struct ethtool_rxnfc
*nfc
, u32
*rule_locs
)
1097 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
1098 struct dsa_switch
*ds
= dp
->ds
;
1100 if (!ds
->ops
->get_rxnfc
)
1103 return ds
->ops
->get_rxnfc(ds
, dp
->index
, nfc
, rule_locs
);
1106 static int dsa_slave_set_rxnfc(struct net_device
*dev
,
1107 struct ethtool_rxnfc
*nfc
)
1109 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
1110 struct dsa_switch
*ds
= dp
->ds
;
1112 if (!ds
->ops
->set_rxnfc
)
1115 return ds
->ops
->set_rxnfc(ds
, dp
->index
, nfc
);
1118 static int dsa_slave_get_ts_info(struct net_device
*dev
,
1119 struct ethtool_ts_info
*ts
)
1121 struct dsa_slave_priv
*p
= netdev_priv(dev
);
1122 struct dsa_switch
*ds
= p
->dp
->ds
;
1124 if (!ds
->ops
->get_ts_info
)
1127 return ds
->ops
->get_ts_info(ds
, p
->dp
->index
, ts
);
1130 static int dsa_slave_vlan_rx_add_vid(struct net_device
*dev
, __be16 proto
,
1133 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
1134 struct bridge_vlan_info info
;
1137 /* Check for a possible bridge VLAN entry now since there is no
1138 * need to emulate the switchdev prepare + commit phase.
1140 if (dp
->bridge_dev
) {
1141 if (!br_vlan_enabled(dp
->bridge_dev
))
1144 /* br_vlan_get_info() returns -EINVAL or -ENOENT if the
1145 * device, respectively the VID is not found, returning
1146 * 0 means success, which is a failure for us here.
1148 ret
= br_vlan_get_info(dp
->bridge_dev
, vid
, &info
);
1153 ret
= dsa_port_vid_add(dp
, vid
, 0);
1157 ret
= dsa_port_vid_add(dp
->cpu_dp
, vid
, 0);
1164 static int dsa_slave_vlan_rx_kill_vid(struct net_device
*dev
, __be16 proto
,
1167 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
1168 struct bridge_vlan_info info
;
1171 /* Check for a possible bridge VLAN entry now since there is no
1172 * need to emulate the switchdev prepare + commit phase.
1174 if (dp
->bridge_dev
) {
1175 if (!br_vlan_enabled(dp
->bridge_dev
))
1178 /* br_vlan_get_info() returns -EINVAL or -ENOENT if the
1179 * device, respectively the VID is not found, returning
1180 * 0 means success, which is a failure for us here.
1182 ret
= br_vlan_get_info(dp
->bridge_dev
, vid
, &info
);
1187 /* Do not deprogram the CPU port as it may be shared with other user
1188 * ports which can be members of this VLAN as well.
1190 return dsa_port_vid_del(dp
, vid
);
1193 static const struct ethtool_ops dsa_slave_ethtool_ops
= {
1194 .get_drvinfo
= dsa_slave_get_drvinfo
,
1195 .get_regs_len
= dsa_slave_get_regs_len
,
1196 .get_regs
= dsa_slave_get_regs
,
1197 .nway_reset
= dsa_slave_nway_reset
,
1198 .get_link
= ethtool_op_get_link
,
1199 .get_eeprom_len
= dsa_slave_get_eeprom_len
,
1200 .get_eeprom
= dsa_slave_get_eeprom
,
1201 .set_eeprom
= dsa_slave_set_eeprom
,
1202 .get_strings
= dsa_slave_get_strings
,
1203 .get_ethtool_stats
= dsa_slave_get_ethtool_stats
,
1204 .get_sset_count
= dsa_slave_get_sset_count
,
1205 .set_wol
= dsa_slave_set_wol
,
1206 .get_wol
= dsa_slave_get_wol
,
1207 .set_eee
= dsa_slave_set_eee
,
1208 .get_eee
= dsa_slave_get_eee
,
1209 .get_link_ksettings
= dsa_slave_get_link_ksettings
,
1210 .set_link_ksettings
= dsa_slave_set_link_ksettings
,
1211 .get_pauseparam
= dsa_slave_get_pauseparam
,
1212 .set_pauseparam
= dsa_slave_set_pauseparam
,
1213 .get_rxnfc
= dsa_slave_get_rxnfc
,
1214 .set_rxnfc
= dsa_slave_set_rxnfc
,
1215 .get_ts_info
= dsa_slave_get_ts_info
,
1218 /* legacy way, bypassing the bridge *****************************************/
1219 int dsa_legacy_fdb_add(struct ndmsg
*ndm
, struct nlattr
*tb
[],
1220 struct net_device
*dev
,
1221 const unsigned char *addr
, u16 vid
,
1223 struct netlink_ext_ack
*extack
)
1225 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
1227 return dsa_port_fdb_add(dp
, addr
, vid
);
1230 int dsa_legacy_fdb_del(struct ndmsg
*ndm
, struct nlattr
*tb
[],
1231 struct net_device
*dev
,
1232 const unsigned char *addr
, u16 vid
)
1234 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
1236 return dsa_port_fdb_del(dp
, addr
, vid
);
1239 static struct devlink_port
*dsa_slave_get_devlink_port(struct net_device
*dev
)
1241 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
1243 return dp
->ds
->devlink
? &dp
->devlink_port
: NULL
;
1246 static const struct net_device_ops dsa_slave_netdev_ops
= {
1247 .ndo_open
= dsa_slave_open
,
1248 .ndo_stop
= dsa_slave_close
,
1249 .ndo_start_xmit
= dsa_slave_xmit
,
1250 .ndo_change_rx_flags
= dsa_slave_change_rx_flags
,
1251 .ndo_set_rx_mode
= dsa_slave_set_rx_mode
,
1252 .ndo_set_mac_address
= dsa_slave_set_mac_address
,
1253 .ndo_fdb_add
= dsa_legacy_fdb_add
,
1254 .ndo_fdb_del
= dsa_legacy_fdb_del
,
1255 .ndo_fdb_dump
= dsa_slave_fdb_dump
,
1256 .ndo_do_ioctl
= dsa_slave_ioctl
,
1257 .ndo_get_iflink
= dsa_slave_get_iflink
,
1258 #ifdef CONFIG_NET_POLL_CONTROLLER
1259 .ndo_netpoll_setup
= dsa_slave_netpoll_setup
,
1260 .ndo_netpoll_cleanup
= dsa_slave_netpoll_cleanup
,
1261 .ndo_poll_controller
= dsa_slave_poll_controller
,
1263 .ndo_get_phys_port_name
= dsa_slave_get_phys_port_name
,
1264 .ndo_setup_tc
= dsa_slave_setup_tc
,
1265 .ndo_get_stats64
= dsa_slave_get_stats64
,
1266 .ndo_get_port_parent_id
= dsa_slave_get_port_parent_id
,
1267 .ndo_vlan_rx_add_vid
= dsa_slave_vlan_rx_add_vid
,
1268 .ndo_vlan_rx_kill_vid
= dsa_slave_vlan_rx_kill_vid
,
1269 .ndo_get_devlink_port
= dsa_slave_get_devlink_port
,
1272 static struct device_type dsa_type
= {
1276 void dsa_port_phylink_mac_change(struct dsa_switch
*ds
, int port
, bool up
)
1278 const struct dsa_port
*dp
= dsa_to_port(ds
, port
);
1280 phylink_mac_change(dp
->pl
, up
);
1282 EXPORT_SYMBOL_GPL(dsa_port_phylink_mac_change
);
1284 static void dsa_slave_phylink_fixed_state(struct net_device
*dev
,
1285 struct phylink_link_state
*state
)
1287 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
1288 struct dsa_switch
*ds
= dp
->ds
;
1290 /* No need to check that this operation is valid, the callback would
1291 * not be called if it was not.
1293 ds
->ops
->phylink_fixed_state(ds
, dp
->index
, state
);
1296 /* slave device setup *******************************************************/
1297 static int dsa_slave_phy_connect(struct net_device
*slave_dev
, int addr
)
1299 struct dsa_port
*dp
= dsa_slave_to_port(slave_dev
);
1300 struct dsa_switch
*ds
= dp
->ds
;
1302 slave_dev
->phydev
= mdiobus_get_phy(ds
->slave_mii_bus
, addr
);
1303 if (!slave_dev
->phydev
) {
1304 netdev_err(slave_dev
, "no phy at %d\n", addr
);
1308 return phylink_connect_phy(dp
->pl
, slave_dev
->phydev
);
1311 static int dsa_slave_phy_setup(struct net_device
*slave_dev
)
1313 struct dsa_port
*dp
= dsa_slave_to_port(slave_dev
);
1314 struct device_node
*port_dn
= dp
->dn
;
1315 struct dsa_switch
*ds
= dp
->ds
;
1316 phy_interface_t mode
;
1320 ret
= of_get_phy_mode(port_dn
, &mode
);
1322 mode
= PHY_INTERFACE_MODE_NA
;
1324 dp
->pl_config
.dev
= &slave_dev
->dev
;
1325 dp
->pl_config
.type
= PHYLINK_NETDEV
;
1327 dp
->pl
= phylink_create(&dp
->pl_config
, of_fwnode_handle(port_dn
), mode
,
1328 &dsa_port_phylink_mac_ops
);
1329 if (IS_ERR(dp
->pl
)) {
1330 netdev_err(slave_dev
,
1331 "error creating PHYLINK: %ld\n", PTR_ERR(dp
->pl
));
1332 return PTR_ERR(dp
->pl
);
1335 /* Register only if the switch provides such a callback, since this
1336 * callback takes precedence over polling the link GPIO in PHYLINK
1337 * (see phylink_get_fixed_state).
1339 if (ds
->ops
->phylink_fixed_state
)
1340 phylink_fixed_state_cb(dp
->pl
, dsa_slave_phylink_fixed_state
);
1342 if (ds
->ops
->get_phy_flags
)
1343 phy_flags
= ds
->ops
->get_phy_flags(ds
, dp
->index
);
1345 ret
= phylink_of_phy_connect(dp
->pl
, port_dn
, phy_flags
);
1346 if (ret
== -ENODEV
&& ds
->slave_mii_bus
) {
1347 /* We could not connect to a designated PHY or SFP, so try to
1348 * use the switch internal MDIO bus instead
1350 ret
= dsa_slave_phy_connect(slave_dev
, dp
->index
);
1352 netdev_err(slave_dev
,
1353 "failed to connect to port %d: %d\n",
1355 phylink_destroy(dp
->pl
);
1363 int dsa_slave_suspend(struct net_device
*slave_dev
)
1365 struct dsa_port
*dp
= dsa_slave_to_port(slave_dev
);
1367 if (!netif_running(slave_dev
))
1370 cancel_work_sync(&dp
->xmit_work
);
1371 skb_queue_purge(&dp
->xmit_queue
);
1373 netif_device_detach(slave_dev
);
1376 phylink_stop(dp
->pl
);
1382 int dsa_slave_resume(struct net_device
*slave_dev
)
1384 struct dsa_port
*dp
= dsa_slave_to_port(slave_dev
);
1386 if (!netif_running(slave_dev
))
1389 netif_device_attach(slave_dev
);
1392 phylink_start(dp
->pl
);
1398 static void dsa_slave_notify(struct net_device
*dev
, unsigned long val
)
1400 struct net_device
*master
= dsa_slave_to_master(dev
);
1401 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
1402 struct dsa_notifier_register_info rinfo
= {
1403 .switch_number
= dp
->ds
->index
,
1404 .port_number
= dp
->index
,
1409 call_dsa_notifiers(val
, dev
, &rinfo
.info
);
1412 int dsa_slave_create(struct dsa_port
*port
)
1414 const struct dsa_port
*cpu_dp
= port
->cpu_dp
;
1415 struct net_device
*master
= cpu_dp
->master
;
1416 struct dsa_switch
*ds
= port
->ds
;
1417 const char *name
= port
->name
;
1418 struct net_device
*slave_dev
;
1419 struct dsa_slave_priv
*p
;
1422 if (!ds
->num_tx_queues
)
1423 ds
->num_tx_queues
= 1;
1425 slave_dev
= alloc_netdev_mqs(sizeof(struct dsa_slave_priv
), name
,
1426 NET_NAME_UNKNOWN
, ether_setup
,
1427 ds
->num_tx_queues
, 1);
1428 if (slave_dev
== NULL
)
1431 slave_dev
->features
= master
->vlan_features
| NETIF_F_HW_TC
;
1432 if (ds
->ops
->port_vlan_add
&& ds
->ops
->port_vlan_del
)
1433 slave_dev
->features
|= NETIF_F_HW_VLAN_CTAG_FILTER
;
1434 slave_dev
->hw_features
|= NETIF_F_HW_TC
;
1435 slave_dev
->ethtool_ops
= &dsa_slave_ethtool_ops
;
1436 if (!IS_ERR_OR_NULL(port
->mac
))
1437 ether_addr_copy(slave_dev
->dev_addr
, port
->mac
);
1439 eth_hw_addr_inherit(slave_dev
, master
);
1440 slave_dev
->priv_flags
|= IFF_NO_QUEUE
;
1441 slave_dev
->netdev_ops
= &dsa_slave_netdev_ops
;
1442 slave_dev
->min_mtu
= 0;
1443 slave_dev
->max_mtu
= ETH_MAX_MTU
;
1444 SET_NETDEV_DEVTYPE(slave_dev
, &dsa_type
);
1446 SET_NETDEV_DEV(slave_dev
, port
->ds
->dev
);
1447 slave_dev
->dev
.of_node
= port
->dn
;
1448 slave_dev
->vlan_features
= master
->vlan_features
;
1450 p
= netdev_priv(slave_dev
);
1451 p
->stats64
= netdev_alloc_pcpu_stats(struct pcpu_sw_netstats
);
1453 free_netdev(slave_dev
);
1457 INIT_LIST_HEAD(&p
->mall_tc_list
);
1458 INIT_WORK(&port
->xmit_work
, dsa_port_xmit_work
);
1459 skb_queue_head_init(&port
->xmit_queue
);
1460 p
->xmit
= cpu_dp
->tag_ops
->xmit
;
1461 port
->slave
= slave_dev
;
1463 netif_carrier_off(slave_dev
);
1465 ret
= dsa_slave_phy_setup(slave_dev
);
1467 netdev_err(master
, "error %d setting up slave phy\n", ret
);
1471 dsa_slave_notify(slave_dev
, DSA_PORT_REGISTER
);
1473 ret
= register_netdev(slave_dev
);
1475 netdev_err(master
, "error %d registering interface %s\n",
1476 ret
, slave_dev
->name
);
1484 phylink_disconnect_phy(p
->dp
->pl
);
1486 phylink_destroy(p
->dp
->pl
);
1488 free_percpu(p
->stats64
);
1489 free_netdev(slave_dev
);
1494 void dsa_slave_destroy(struct net_device
*slave_dev
)
1496 struct dsa_port
*dp
= dsa_slave_to_port(slave_dev
);
1497 struct dsa_slave_priv
*p
= netdev_priv(slave_dev
);
1499 netif_carrier_off(slave_dev
);
1501 phylink_disconnect_phy(dp
->pl
);
1504 dsa_slave_notify(slave_dev
, DSA_PORT_UNREGISTER
);
1505 unregister_netdev(slave_dev
);
1506 phylink_destroy(dp
->pl
);
1507 free_percpu(p
->stats64
);
1508 free_netdev(slave_dev
);
1511 static bool dsa_slave_dev_check(const struct net_device
*dev
)
1513 return dev
->netdev_ops
== &dsa_slave_netdev_ops
;
1516 static int dsa_slave_changeupper(struct net_device
*dev
,
1517 struct netdev_notifier_changeupper_info
*info
)
1519 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
1520 int err
= NOTIFY_DONE
;
1522 if (netif_is_bridge_master(info
->upper_dev
)) {
1523 if (info
->linking
) {
1524 err
= dsa_port_bridge_join(dp
, info
->upper_dev
);
1525 err
= notifier_from_errno(err
);
1527 dsa_port_bridge_leave(dp
, info
->upper_dev
);
1535 static int dsa_slave_upper_vlan_check(struct net_device
*dev
,
1536 struct netdev_notifier_changeupper_info
*
1539 struct netlink_ext_ack
*ext_ack
;
1540 struct net_device
*slave
;
1541 struct dsa_port
*dp
;
1543 ext_ack
= netdev_notifier_info_to_extack(&info
->info
);
1545 if (!is_vlan_dev(dev
))
1548 slave
= vlan_dev_real_dev(dev
);
1549 if (!dsa_slave_dev_check(slave
))
1552 dp
= dsa_slave_to_port(slave
);
1553 if (!dp
->bridge_dev
)
1556 /* Deny enslaving a VLAN device into a VLAN-aware bridge */
1557 if (br_vlan_enabled(dp
->bridge_dev
) &&
1558 netif_is_bridge_master(info
->upper_dev
) && info
->linking
) {
1559 NL_SET_ERR_MSG_MOD(ext_ack
,
1560 "Cannot enslave VLAN device into VLAN aware bridge");
1561 return notifier_from_errno(-EINVAL
);
1567 static int dsa_slave_netdevice_event(struct notifier_block
*nb
,
1568 unsigned long event
, void *ptr
)
1570 struct net_device
*dev
= netdev_notifier_info_to_dev(ptr
);
1572 if (event
== NETDEV_CHANGEUPPER
) {
1573 if (!dsa_slave_dev_check(dev
))
1574 return dsa_slave_upper_vlan_check(dev
, ptr
);
1576 return dsa_slave_changeupper(dev
, ptr
);
1582 struct dsa_switchdev_event_work
{
1583 struct work_struct work
;
1584 struct switchdev_notifier_fdb_info fdb_info
;
1585 struct net_device
*dev
;
1586 unsigned long event
;
1589 static void dsa_slave_switchdev_event_work(struct work_struct
*work
)
1591 struct dsa_switchdev_event_work
*switchdev_work
=
1592 container_of(work
, struct dsa_switchdev_event_work
, work
);
1593 struct net_device
*dev
= switchdev_work
->dev
;
1594 struct switchdev_notifier_fdb_info
*fdb_info
;
1595 struct dsa_port
*dp
= dsa_slave_to_port(dev
);
1599 switch (switchdev_work
->event
) {
1600 case SWITCHDEV_FDB_ADD_TO_DEVICE
:
1601 fdb_info
= &switchdev_work
->fdb_info
;
1602 if (!fdb_info
->added_by_user
)
1605 err
= dsa_port_fdb_add(dp
, fdb_info
->addr
, fdb_info
->vid
);
1607 netdev_dbg(dev
, "fdb add failed err=%d\n", err
);
1610 fdb_info
->offloaded
= true;
1611 call_switchdev_notifiers(SWITCHDEV_FDB_OFFLOADED
, dev
,
1612 &fdb_info
->info
, NULL
);
1615 case SWITCHDEV_FDB_DEL_TO_DEVICE
:
1616 fdb_info
= &switchdev_work
->fdb_info
;
1617 if (!fdb_info
->added_by_user
)
1620 err
= dsa_port_fdb_del(dp
, fdb_info
->addr
, fdb_info
->vid
);
1622 netdev_dbg(dev
, "fdb del failed err=%d\n", err
);
1629 kfree(switchdev_work
->fdb_info
.addr
);
1630 kfree(switchdev_work
);
1635 dsa_slave_switchdev_fdb_work_init(struct dsa_switchdev_event_work
*
1637 const struct switchdev_notifier_fdb_info
*
1640 memcpy(&switchdev_work
->fdb_info
, fdb_info
,
1641 sizeof(switchdev_work
->fdb_info
));
1642 switchdev_work
->fdb_info
.addr
= kzalloc(ETH_ALEN
, GFP_ATOMIC
);
1643 if (!switchdev_work
->fdb_info
.addr
)
1645 ether_addr_copy((u8
*)switchdev_work
->fdb_info
.addr
,
1650 /* Called under rcu_read_lock() */
1651 static int dsa_slave_switchdev_event(struct notifier_block
*unused
,
1652 unsigned long event
, void *ptr
)
1654 struct net_device
*dev
= switchdev_notifier_info_to_dev(ptr
);
1655 struct dsa_switchdev_event_work
*switchdev_work
;
1658 if (event
== SWITCHDEV_PORT_ATTR_SET
) {
1659 err
= switchdev_handle_port_attr_set(dev
, ptr
,
1660 dsa_slave_dev_check
,
1661 dsa_slave_port_attr_set
);
1662 return notifier_from_errno(err
);
1665 if (!dsa_slave_dev_check(dev
))
1668 switchdev_work
= kzalloc(sizeof(*switchdev_work
), GFP_ATOMIC
);
1669 if (!switchdev_work
)
1672 INIT_WORK(&switchdev_work
->work
,
1673 dsa_slave_switchdev_event_work
);
1674 switchdev_work
->dev
= dev
;
1675 switchdev_work
->event
= event
;
1678 case SWITCHDEV_FDB_ADD_TO_DEVICE
: /* fall through */
1679 case SWITCHDEV_FDB_DEL_TO_DEVICE
:
1680 if (dsa_slave_switchdev_fdb_work_init(switchdev_work
, ptr
))
1681 goto err_fdb_work_init
;
1685 kfree(switchdev_work
);
1689 dsa_schedule_work(&switchdev_work
->work
);
1693 kfree(switchdev_work
);
1697 static int dsa_slave_switchdev_blocking_event(struct notifier_block
*unused
,
1698 unsigned long event
, void *ptr
)
1700 struct net_device
*dev
= switchdev_notifier_info_to_dev(ptr
);
1704 case SWITCHDEV_PORT_OBJ_ADD
:
1705 err
= switchdev_handle_port_obj_add(dev
, ptr
,
1706 dsa_slave_dev_check
,
1707 dsa_slave_port_obj_add
);
1708 return notifier_from_errno(err
);
1709 case SWITCHDEV_PORT_OBJ_DEL
:
1710 err
= switchdev_handle_port_obj_del(dev
, ptr
,
1711 dsa_slave_dev_check
,
1712 dsa_slave_port_obj_del
);
1713 return notifier_from_errno(err
);
1714 case SWITCHDEV_PORT_ATTR_SET
:
1715 err
= switchdev_handle_port_attr_set(dev
, ptr
,
1716 dsa_slave_dev_check
,
1717 dsa_slave_port_attr_set
);
1718 return notifier_from_errno(err
);
1724 static struct notifier_block dsa_slave_nb __read_mostly
= {
1725 .notifier_call
= dsa_slave_netdevice_event
,
1728 static struct notifier_block dsa_slave_switchdev_notifier
= {
1729 .notifier_call
= dsa_slave_switchdev_event
,
1732 static struct notifier_block dsa_slave_switchdev_blocking_notifier
= {
1733 .notifier_call
= dsa_slave_switchdev_blocking_event
,
1736 int dsa_slave_register_notifier(void)
1738 struct notifier_block
*nb
;
1741 err
= register_netdevice_notifier(&dsa_slave_nb
);
1745 err
= register_switchdev_notifier(&dsa_slave_switchdev_notifier
);
1747 goto err_switchdev_nb
;
1749 nb
= &dsa_slave_switchdev_blocking_notifier
;
1750 err
= register_switchdev_blocking_notifier(nb
);
1752 goto err_switchdev_blocking_nb
;
1756 err_switchdev_blocking_nb
:
1757 unregister_switchdev_notifier(&dsa_slave_switchdev_notifier
);
1759 unregister_netdevice_notifier(&dsa_slave_nb
);
1763 void dsa_slave_unregister_notifier(void)
1765 struct notifier_block
*nb
;
1768 nb
= &dsa_slave_switchdev_blocking_notifier
;
1769 err
= unregister_switchdev_blocking_notifier(nb
);
1771 pr_err("DSA: failed to unregister switchdev blocking notifier (%d)\n", err
);
1773 err
= unregister_switchdev_notifier(&dsa_slave_switchdev_notifier
);
1775 pr_err("DSA: failed to unregister switchdev notifier (%d)\n", err
);
1777 err
= unregister_netdevice_notifier(&dsa_slave_nb
);
1779 pr_err("DSA: failed to unregister slave notifier (%d)\n", err
);