GNU Linux-libre 4.4.284-gnu1
[releases.git] / net / dsa / slave.c
1 /*
2  * net/dsa/slave.c - Slave device handling
3  * Copyright (c) 2008-2009 Marvell Semiconductor
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2 of the License, or
8  * (at your option) any later version.
9  */
10
11 #include <linux/list.h>
12 #include <linux/etherdevice.h>
13 #include <linux/netdevice.h>
14 #include <linux/phy.h>
15 #include <linux/phy_fixed.h>
16 #include <linux/of_net.h>
17 #include <linux/of_mdio.h>
18 #include <net/rtnetlink.h>
19 #include <net/switchdev.h>
20 #include <linux/if_bridge.h>
21 #include <linux/netpoll.h>
22 #include "dsa_priv.h"
23
24 /* slave mii_bus handling ***************************************************/
25 static int dsa_slave_phy_read(struct mii_bus *bus, int addr, int reg)
26 {
27         struct dsa_switch *ds = bus->priv;
28
29         if (ds->phys_mii_mask & (1 << addr))
30                 return ds->drv->phy_read(ds, addr, reg);
31
32         return 0xffff;
33 }
34
35 static int dsa_slave_phy_write(struct mii_bus *bus, int addr, int reg, u16 val)
36 {
37         struct dsa_switch *ds = bus->priv;
38
39         if (ds->phys_mii_mask & (1 << addr))
40                 return ds->drv->phy_write(ds, addr, reg, val);
41
42         return 0;
43 }
44
45 void dsa_slave_mii_bus_init(struct dsa_switch *ds)
46 {
47         ds->slave_mii_bus->priv = (void *)ds;
48         ds->slave_mii_bus->name = "dsa slave smi";
49         ds->slave_mii_bus->read = dsa_slave_phy_read;
50         ds->slave_mii_bus->write = dsa_slave_phy_write;
51         snprintf(ds->slave_mii_bus->id, MII_BUS_ID_SIZE, "dsa-%d:%.2x",
52                         ds->index, ds->pd->sw_addr);
53         ds->slave_mii_bus->parent = ds->master_dev;
54         ds->slave_mii_bus->phy_mask = ~ds->phys_mii_mask;
55 }
56
57
58 /* slave device handling ****************************************************/
59 static int dsa_slave_get_iflink(const struct net_device *dev)
60 {
61         struct dsa_slave_priv *p = netdev_priv(dev);
62
63         return p->parent->dst->master_netdev->ifindex;
64 }
65
66 static inline bool dsa_port_is_bridged(struct dsa_slave_priv *p)
67 {
68         return !!p->bridge_dev;
69 }
70
71 static int dsa_slave_open(struct net_device *dev)
72 {
73         struct dsa_slave_priv *p = netdev_priv(dev);
74         struct net_device *master = p->parent->dst->master_netdev;
75         struct dsa_switch *ds = p->parent;
76         u8 stp_state = dsa_port_is_bridged(p) ?
77                         BR_STATE_BLOCKING : BR_STATE_FORWARDING;
78         int err;
79
80         if (!(master->flags & IFF_UP))
81                 return -ENETDOWN;
82
83         if (!ether_addr_equal(dev->dev_addr, master->dev_addr)) {
84                 err = dev_uc_add(master, dev->dev_addr);
85                 if (err < 0)
86                         goto out;
87         }
88
89         if (dev->flags & IFF_ALLMULTI) {
90                 err = dev_set_allmulti(master, 1);
91                 if (err < 0)
92                         goto del_unicast;
93         }
94         if (dev->flags & IFF_PROMISC) {
95                 err = dev_set_promiscuity(master, 1);
96                 if (err < 0)
97                         goto clear_allmulti;
98         }
99
100         if (ds->drv->port_enable) {
101                 err = ds->drv->port_enable(ds, p->port, p->phy);
102                 if (err)
103                         goto clear_promisc;
104         }
105
106         if (ds->drv->port_stp_update)
107                 ds->drv->port_stp_update(ds, p->port, stp_state);
108
109         if (p->phy)
110                 phy_start(p->phy);
111
112         return 0;
113
114 clear_promisc:
115         if (dev->flags & IFF_PROMISC)
116                 dev_set_promiscuity(master, -1);
117 clear_allmulti:
118         if (dev->flags & IFF_ALLMULTI)
119                 dev_set_allmulti(master, -1);
120 del_unicast:
121         if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
122                 dev_uc_del(master, dev->dev_addr);
123 out:
124         return err;
125 }
126
127 static int dsa_slave_close(struct net_device *dev)
128 {
129         struct dsa_slave_priv *p = netdev_priv(dev);
130         struct net_device *master = p->parent->dst->master_netdev;
131         struct dsa_switch *ds = p->parent;
132
133         if (p->phy)
134                 phy_stop(p->phy);
135
136         dev_mc_unsync(master, dev);
137         dev_uc_unsync(master, dev);
138         if (dev->flags & IFF_ALLMULTI)
139                 dev_set_allmulti(master, -1);
140         if (dev->flags & IFF_PROMISC)
141                 dev_set_promiscuity(master, -1);
142
143         if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
144                 dev_uc_del(master, dev->dev_addr);
145
146         if (ds->drv->port_disable)
147                 ds->drv->port_disable(ds, p->port, p->phy);
148
149         if (ds->drv->port_stp_update)
150                 ds->drv->port_stp_update(ds, p->port, BR_STATE_DISABLED);
151
152         return 0;
153 }
154
155 static void dsa_slave_change_rx_flags(struct net_device *dev, int change)
156 {
157         struct dsa_slave_priv *p = netdev_priv(dev);
158         struct net_device *master = p->parent->dst->master_netdev;
159
160         if (dev->flags & IFF_UP) {
161                 if (change & IFF_ALLMULTI)
162                         dev_set_allmulti(master,
163                                          dev->flags & IFF_ALLMULTI ? 1 : -1);
164                 if (change & IFF_PROMISC)
165                         dev_set_promiscuity(master,
166                                             dev->flags & IFF_PROMISC ? 1 : -1);
167         }
168 }
169
170 static void dsa_slave_set_rx_mode(struct net_device *dev)
171 {
172         struct dsa_slave_priv *p = netdev_priv(dev);
173         struct net_device *master = p->parent->dst->master_netdev;
174
175         dev_mc_sync(master, dev);
176         dev_uc_sync(master, dev);
177 }
178
179 static int dsa_slave_set_mac_address(struct net_device *dev, void *a)
180 {
181         struct dsa_slave_priv *p = netdev_priv(dev);
182         struct net_device *master = p->parent->dst->master_netdev;
183         struct sockaddr *addr = a;
184         int err;
185
186         if (!is_valid_ether_addr(addr->sa_data))
187                 return -EADDRNOTAVAIL;
188
189         if (!(dev->flags & IFF_UP))
190                 goto out;
191
192         if (!ether_addr_equal(addr->sa_data, master->dev_addr)) {
193                 err = dev_uc_add(master, addr->sa_data);
194                 if (err < 0)
195                         return err;
196         }
197
198         if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
199                 dev_uc_del(master, dev->dev_addr);
200
201 out:
202         ether_addr_copy(dev->dev_addr, addr->sa_data);
203
204         return 0;
205 }
206
207 static int dsa_bridge_check_vlan_range(struct dsa_switch *ds,
208                                        const struct net_device *bridge,
209                                        u16 vid_begin, u16 vid_end)
210 {
211         struct dsa_slave_priv *p;
212         struct net_device *dev, *vlan_br;
213         DECLARE_BITMAP(members, DSA_MAX_PORTS);
214         DECLARE_BITMAP(untagged, DSA_MAX_PORTS);
215         u16 vid;
216         int member, err;
217
218         if (!ds->drv->vlan_getnext || !vid_begin)
219                 return -EOPNOTSUPP;
220
221         vid = vid_begin - 1;
222
223         do {
224                 err = ds->drv->vlan_getnext(ds, &vid, members, untagged);
225                 if (err)
226                         break;
227
228                 if (vid > vid_end)
229                         break;
230
231                 member = find_first_bit(members, DSA_MAX_PORTS);
232                 if (member == DSA_MAX_PORTS)
233                         continue;
234
235                 dev = ds->ports[member];
236                 p = netdev_priv(dev);
237                 vlan_br = p->bridge_dev;
238                 if (vlan_br == bridge)
239                         continue;
240
241                 netdev_dbg(vlan_br, "hardware VLAN %d already in use\n", vid);
242                 return -EOPNOTSUPP;
243         } while (vid < vid_end);
244
245         return err == -ENOENT ? 0 : err;
246 }
247
248 static int dsa_slave_port_vlan_add(struct net_device *dev,
249                                    const struct switchdev_obj_port_vlan *vlan,
250                                    struct switchdev_trans *trans)
251 {
252         struct dsa_slave_priv *p = netdev_priv(dev);
253         struct dsa_switch *ds = p->parent;
254         int err;
255
256         if (switchdev_trans_ph_prepare(trans)) {
257                 if (!ds->drv->port_vlan_prepare || !ds->drv->port_vlan_add)
258                         return -EOPNOTSUPP;
259
260                 /* If the requested port doesn't belong to the same bridge as
261                  * the VLAN members, fallback to software VLAN (hopefully).
262                  */
263                 err = dsa_bridge_check_vlan_range(ds, p->bridge_dev,
264                                                   vlan->vid_begin,
265                                                   vlan->vid_end);
266                 if (err)
267                         return err;
268
269                 err = ds->drv->port_vlan_prepare(ds, p->port, vlan, trans);
270                 if (err)
271                         return err;
272         } else {
273                 err = ds->drv->port_vlan_add(ds, p->port, vlan, trans);
274                 if (err)
275                         return err;
276         }
277
278         return 0;
279 }
280
281 static int dsa_slave_port_vlan_del(struct net_device *dev,
282                                    const struct switchdev_obj_port_vlan *vlan)
283 {
284         struct dsa_slave_priv *p = netdev_priv(dev);
285         struct dsa_switch *ds = p->parent;
286
287         if (!ds->drv->port_vlan_del)
288                 return -EOPNOTSUPP;
289
290         return ds->drv->port_vlan_del(ds, p->port, vlan);
291 }
292
293 static int dsa_slave_port_vlan_dump(struct net_device *dev,
294                                     struct switchdev_obj_port_vlan *vlan,
295                                     switchdev_obj_dump_cb_t *cb)
296 {
297         struct dsa_slave_priv *p = netdev_priv(dev);
298         struct dsa_switch *ds = p->parent;
299         DECLARE_BITMAP(members, DSA_MAX_PORTS);
300         DECLARE_BITMAP(untagged, DSA_MAX_PORTS);
301         u16 pvid, vid = 0;
302         int err;
303
304         if (!ds->drv->vlan_getnext || !ds->drv->port_pvid_get)
305                 return -EOPNOTSUPP;
306
307         err = ds->drv->port_pvid_get(ds, p->port, &pvid);
308         if (err)
309                 return err;
310
311         for (;;) {
312                 err = ds->drv->vlan_getnext(ds, &vid, members, untagged);
313                 if (err)
314                         break;
315
316                 if (!test_bit(p->port, members))
317                         continue;
318
319                 memset(vlan, 0, sizeof(*vlan));
320                 vlan->vid_begin = vlan->vid_end = vid;
321
322                 if (vid == pvid)
323                         vlan->flags |= BRIDGE_VLAN_INFO_PVID;
324
325                 if (test_bit(p->port, untagged))
326                         vlan->flags |= BRIDGE_VLAN_INFO_UNTAGGED;
327
328                 err = cb(&vlan->obj);
329                 if (err)
330                         break;
331         }
332
333         return err == -ENOENT ? 0 : err;
334 }
335
336 static int dsa_slave_port_fdb_add(struct net_device *dev,
337                                   const struct switchdev_obj_port_fdb *fdb,
338                                   struct switchdev_trans *trans)
339 {
340         struct dsa_slave_priv *p = netdev_priv(dev);
341         struct dsa_switch *ds = p->parent;
342         int ret;
343
344         if (!ds->drv->port_fdb_prepare || !ds->drv->port_fdb_add)
345                 return -EOPNOTSUPP;
346
347         if (switchdev_trans_ph_prepare(trans))
348                 ret = ds->drv->port_fdb_prepare(ds, p->port, fdb, trans);
349         else
350                 ret = ds->drv->port_fdb_add(ds, p->port, fdb, trans);
351
352         return ret;
353 }
354
355 static int dsa_slave_port_fdb_del(struct net_device *dev,
356                                   const struct switchdev_obj_port_fdb *fdb)
357 {
358         struct dsa_slave_priv *p = netdev_priv(dev);
359         struct dsa_switch *ds = p->parent;
360         int ret = -EOPNOTSUPP;
361
362         if (ds->drv->port_fdb_del)
363                 ret = ds->drv->port_fdb_del(ds, p->port, fdb);
364
365         return ret;
366 }
367
368 static int dsa_slave_port_fdb_dump(struct net_device *dev,
369                                    struct switchdev_obj_port_fdb *fdb,
370                                    switchdev_obj_dump_cb_t *cb)
371 {
372         struct dsa_slave_priv *p = netdev_priv(dev);
373         struct dsa_switch *ds = p->parent;
374
375         if (ds->drv->port_fdb_dump)
376                 return ds->drv->port_fdb_dump(ds, p->port, fdb, cb);
377
378         return -EOPNOTSUPP;
379 }
380
381 static int dsa_slave_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
382 {
383         struct dsa_slave_priv *p = netdev_priv(dev);
384
385         if (p->phy != NULL)
386                 return phy_mii_ioctl(p->phy, ifr, cmd);
387
388         return -EOPNOTSUPP;
389 }
390
391 /* Return a bitmask of all ports being currently bridged within a given bridge
392  * device. Note that on leave, the mask will still return the bitmask of ports
393  * currently bridged, prior to port removal, and this is exactly what we want.
394  */
395 static u32 dsa_slave_br_port_mask(struct dsa_switch *ds,
396                                   struct net_device *bridge)
397 {
398         struct dsa_slave_priv *p;
399         unsigned int port;
400         u32 mask = 0;
401
402         for (port = 0; port < DSA_MAX_PORTS; port++) {
403                 if (!dsa_is_port_initialized(ds, port))
404                         continue;
405
406                 p = netdev_priv(ds->ports[port]);
407
408                 if (ds->ports[port]->priv_flags & IFF_BRIDGE_PORT &&
409                     p->bridge_dev == bridge)
410                         mask |= 1 << port;
411         }
412
413         return mask;
414 }
415
416 static int dsa_slave_stp_update(struct net_device *dev, u8 state)
417 {
418         struct dsa_slave_priv *p = netdev_priv(dev);
419         struct dsa_switch *ds = p->parent;
420         int ret = -EOPNOTSUPP;
421
422         if (ds->drv->port_stp_update)
423                 ret = ds->drv->port_stp_update(ds, p->port, state);
424
425         return ret;
426 }
427
428 static int dsa_slave_port_attr_set(struct net_device *dev,
429                                    const struct switchdev_attr *attr,
430                                    struct switchdev_trans *trans)
431 {
432         struct dsa_slave_priv *p = netdev_priv(dev);
433         struct dsa_switch *ds = p->parent;
434         int ret;
435
436         switch (attr->id) {
437         case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
438                 if (switchdev_trans_ph_prepare(trans))
439                         ret = ds->drv->port_stp_update ? 0 : -EOPNOTSUPP;
440                 else
441                         ret = ds->drv->port_stp_update(ds, p->port,
442                                                        attr->u.stp_state);
443                 break;
444         default:
445                 ret = -EOPNOTSUPP;
446                 break;
447         }
448
449         return ret;
450 }
451
452 static int dsa_slave_port_obj_add(struct net_device *dev,
453                                   const struct switchdev_obj *obj,
454                                   struct switchdev_trans *trans)
455 {
456         int err;
457
458         /* For the prepare phase, ensure the full set of changes is feasable in
459          * one go in order to signal a failure properly. If an operation is not
460          * supported, return -EOPNOTSUPP.
461          */
462
463         switch (obj->id) {
464         case SWITCHDEV_OBJ_ID_PORT_FDB:
465                 err = dsa_slave_port_fdb_add(dev,
466                                              SWITCHDEV_OBJ_PORT_FDB(obj),
467                                              trans);
468                 break;
469         case SWITCHDEV_OBJ_ID_PORT_VLAN:
470                 err = dsa_slave_port_vlan_add(dev,
471                                               SWITCHDEV_OBJ_PORT_VLAN(obj),
472                                               trans);
473                 break;
474         default:
475                 err = -EOPNOTSUPP;
476                 break;
477         }
478
479         return err;
480 }
481
482 static int dsa_slave_port_obj_del(struct net_device *dev,
483                                   const struct switchdev_obj *obj)
484 {
485         int err;
486
487         switch (obj->id) {
488         case SWITCHDEV_OBJ_ID_PORT_FDB:
489                 err = dsa_slave_port_fdb_del(dev,
490                                              SWITCHDEV_OBJ_PORT_FDB(obj));
491                 break;
492         case SWITCHDEV_OBJ_ID_PORT_VLAN:
493                 err = dsa_slave_port_vlan_del(dev,
494                                               SWITCHDEV_OBJ_PORT_VLAN(obj));
495                 break;
496         default:
497                 err = -EOPNOTSUPP;
498                 break;
499         }
500
501         return err;
502 }
503
504 static int dsa_slave_port_obj_dump(struct net_device *dev,
505                                    struct switchdev_obj *obj,
506                                    switchdev_obj_dump_cb_t *cb)
507 {
508         int err;
509
510         switch (obj->id) {
511         case SWITCHDEV_OBJ_ID_PORT_FDB:
512                 err = dsa_slave_port_fdb_dump(dev,
513                                               SWITCHDEV_OBJ_PORT_FDB(obj),
514                                               cb);
515                 break;
516         case SWITCHDEV_OBJ_ID_PORT_VLAN:
517                 err = dsa_slave_port_vlan_dump(dev,
518                                                SWITCHDEV_OBJ_PORT_VLAN(obj),
519                                                cb);
520                 break;
521         default:
522                 err = -EOPNOTSUPP;
523                 break;
524         }
525
526         return err;
527 }
528
529 static int dsa_slave_bridge_port_join(struct net_device *dev,
530                                       struct net_device *br)
531 {
532         struct dsa_slave_priv *p = netdev_priv(dev);
533         struct dsa_switch *ds = p->parent;
534         int ret = -EOPNOTSUPP;
535
536         p->bridge_dev = br;
537
538         if (ds->drv->port_join_bridge)
539                 ret = ds->drv->port_join_bridge(ds, p->port,
540                                                 dsa_slave_br_port_mask(ds, br));
541
542         return ret;
543 }
544
545 static int dsa_slave_bridge_port_leave(struct net_device *dev)
546 {
547         struct dsa_slave_priv *p = netdev_priv(dev);
548         struct dsa_switch *ds = p->parent;
549         int ret = -EOPNOTSUPP;
550
551
552         if (ds->drv->port_leave_bridge)
553                 ret = ds->drv->port_leave_bridge(ds, p->port,
554                                                  dsa_slave_br_port_mask(ds, p->bridge_dev));
555
556         p->bridge_dev = NULL;
557
558         /* Port left the bridge, put in BR_STATE_DISABLED by the bridge layer,
559          * so allow it to be in BR_STATE_FORWARDING to be kept functional
560          */
561         dsa_slave_stp_update(dev, BR_STATE_FORWARDING);
562
563         return ret;
564 }
565
566 static int dsa_slave_port_attr_get(struct net_device *dev,
567                                    struct switchdev_attr *attr)
568 {
569         struct dsa_slave_priv *p = netdev_priv(dev);
570         struct dsa_switch *ds = p->parent;
571
572         switch (attr->id) {
573         case SWITCHDEV_ATTR_ID_PORT_PARENT_ID:
574                 attr->u.ppid.id_len = sizeof(ds->index);
575                 memcpy(&attr->u.ppid.id, &ds->index, attr->u.ppid.id_len);
576                 break;
577         default:
578                 return -EOPNOTSUPP;
579         }
580
581         return 0;
582 }
583
584 static inline netdev_tx_t dsa_netpoll_send_skb(struct dsa_slave_priv *p,
585                                                struct sk_buff *skb)
586 {
587 #ifdef CONFIG_NET_POLL_CONTROLLER
588         if (p->netpoll)
589                 netpoll_send_skb(p->netpoll, skb);
590 #else
591         BUG();
592 #endif
593         return NETDEV_TX_OK;
594 }
595
596 static netdev_tx_t dsa_slave_xmit(struct sk_buff *skb, struct net_device *dev)
597 {
598         struct dsa_slave_priv *p = netdev_priv(dev);
599         struct sk_buff *nskb;
600
601         dev->stats.tx_packets++;
602         dev->stats.tx_bytes += skb->len;
603
604         /* Transmit function may have to reallocate the original SKB */
605         nskb = p->xmit(skb, dev);
606         if (!nskb)
607                 return NETDEV_TX_OK;
608
609         /* SKB for netpoll still need to be mangled with the protocol-specific
610          * tag to be successfully transmitted
611          */
612         if (unlikely(netpoll_tx_running(dev)))
613                 return dsa_netpoll_send_skb(p, nskb);
614
615         /* Queue the SKB for transmission on the parent interface, but
616          * do not modify its EtherType
617          */
618         nskb->dev = p->parent->dst->master_netdev;
619         dev_queue_xmit(nskb);
620
621         return NETDEV_TX_OK;
622 }
623
624 static struct sk_buff *dsa_slave_notag_xmit(struct sk_buff *skb,
625                                             struct net_device *dev)
626 {
627         /* Just return the original SKB */
628         return skb;
629 }
630
631
632 /* ethtool operations *******************************************************/
633 static int
634 dsa_slave_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
635 {
636         struct dsa_slave_priv *p = netdev_priv(dev);
637         int err;
638
639         err = -EOPNOTSUPP;
640         if (p->phy != NULL) {
641                 err = phy_read_status(p->phy);
642                 if (err == 0)
643                         err = phy_ethtool_gset(p->phy, cmd);
644         }
645
646         return err;
647 }
648
649 static int
650 dsa_slave_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
651 {
652         struct dsa_slave_priv *p = netdev_priv(dev);
653
654         if (p->phy != NULL)
655                 return phy_ethtool_sset(p->phy, cmd);
656
657         return -EOPNOTSUPP;
658 }
659
660 static void dsa_slave_get_drvinfo(struct net_device *dev,
661                                   struct ethtool_drvinfo *drvinfo)
662 {
663         strlcpy(drvinfo->driver, "dsa", sizeof(drvinfo->driver));
664         strlcpy(drvinfo->version, dsa_driver_version, sizeof(drvinfo->version));
665         strlcpy(drvinfo->fw_version, "N/A", sizeof(drvinfo->fw_version));
666         strlcpy(drvinfo->bus_info, "platform", sizeof(drvinfo->bus_info));
667 }
668
669 static int dsa_slave_get_regs_len(struct net_device *dev)
670 {
671         struct dsa_slave_priv *p = netdev_priv(dev);
672         struct dsa_switch *ds = p->parent;
673
674         if (ds->drv->get_regs_len)
675                 return ds->drv->get_regs_len(ds, p->port);
676
677         return -EOPNOTSUPP;
678 }
679
680 static void
681 dsa_slave_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *_p)
682 {
683         struct dsa_slave_priv *p = netdev_priv(dev);
684         struct dsa_switch *ds = p->parent;
685
686         if (ds->drv->get_regs)
687                 ds->drv->get_regs(ds, p->port, regs, _p);
688 }
689
690 static int dsa_slave_nway_reset(struct net_device *dev)
691 {
692         struct dsa_slave_priv *p = netdev_priv(dev);
693
694         if (p->phy != NULL)
695                 return genphy_restart_aneg(p->phy);
696
697         return -EOPNOTSUPP;
698 }
699
700 static u32 dsa_slave_get_link(struct net_device *dev)
701 {
702         struct dsa_slave_priv *p = netdev_priv(dev);
703
704         if (p->phy != NULL) {
705                 genphy_update_link(p->phy);
706                 return p->phy->link;
707         }
708
709         return -EOPNOTSUPP;
710 }
711
712 static int dsa_slave_get_eeprom_len(struct net_device *dev)
713 {
714         struct dsa_slave_priv *p = netdev_priv(dev);
715         struct dsa_switch *ds = p->parent;
716
717         if (ds->pd->eeprom_len)
718                 return ds->pd->eeprom_len;
719
720         if (ds->drv->get_eeprom_len)
721                 return ds->drv->get_eeprom_len(ds);
722
723         return 0;
724 }
725
726 static int dsa_slave_get_eeprom(struct net_device *dev,
727                                 struct ethtool_eeprom *eeprom, u8 *data)
728 {
729         struct dsa_slave_priv *p = netdev_priv(dev);
730         struct dsa_switch *ds = p->parent;
731
732         if (ds->drv->get_eeprom)
733                 return ds->drv->get_eeprom(ds, eeprom, data);
734
735         return -EOPNOTSUPP;
736 }
737
738 static int dsa_slave_set_eeprom(struct net_device *dev,
739                                 struct ethtool_eeprom *eeprom, u8 *data)
740 {
741         struct dsa_slave_priv *p = netdev_priv(dev);
742         struct dsa_switch *ds = p->parent;
743
744         if (ds->drv->set_eeprom)
745                 return ds->drv->set_eeprom(ds, eeprom, data);
746
747         return -EOPNOTSUPP;
748 }
749
750 static void dsa_slave_get_strings(struct net_device *dev,
751                                   uint32_t stringset, uint8_t *data)
752 {
753         struct dsa_slave_priv *p = netdev_priv(dev);
754         struct dsa_switch *ds = p->parent;
755
756         if (stringset == ETH_SS_STATS) {
757                 int len = ETH_GSTRING_LEN;
758
759                 strncpy(data, "tx_packets", len);
760                 strncpy(data + len, "tx_bytes", len);
761                 strncpy(data + 2 * len, "rx_packets", len);
762                 strncpy(data + 3 * len, "rx_bytes", len);
763                 if (ds->drv->get_strings != NULL)
764                         ds->drv->get_strings(ds, p->port, data + 4 * len);
765         }
766 }
767
768 static void dsa_slave_get_ethtool_stats(struct net_device *dev,
769                                         struct ethtool_stats *stats,
770                                         uint64_t *data)
771 {
772         struct dsa_slave_priv *p = netdev_priv(dev);
773         struct dsa_switch *ds = p->parent;
774
775         data[0] = p->dev->stats.tx_packets;
776         data[1] = p->dev->stats.tx_bytes;
777         data[2] = p->dev->stats.rx_packets;
778         data[3] = p->dev->stats.rx_bytes;
779         if (ds->drv->get_ethtool_stats != NULL)
780                 ds->drv->get_ethtool_stats(ds, p->port, data + 4);
781 }
782
783 static int dsa_slave_get_sset_count(struct net_device *dev, int sset)
784 {
785         struct dsa_slave_priv *p = netdev_priv(dev);
786         struct dsa_switch *ds = p->parent;
787
788         if (sset == ETH_SS_STATS) {
789                 int count;
790
791                 count = 4;
792                 if (ds->drv->get_sset_count != NULL)
793                         count += ds->drv->get_sset_count(ds);
794
795                 return count;
796         }
797
798         return -EOPNOTSUPP;
799 }
800
801 static void dsa_slave_get_wol(struct net_device *dev, struct ethtool_wolinfo *w)
802 {
803         struct dsa_slave_priv *p = netdev_priv(dev);
804         struct dsa_switch *ds = p->parent;
805
806         if (ds->drv->get_wol)
807                 ds->drv->get_wol(ds, p->port, w);
808 }
809
810 static int dsa_slave_set_wol(struct net_device *dev, struct ethtool_wolinfo *w)
811 {
812         struct dsa_slave_priv *p = netdev_priv(dev);
813         struct dsa_switch *ds = p->parent;
814         int ret = -EOPNOTSUPP;
815
816         if (ds->drv->set_wol)
817                 ret = ds->drv->set_wol(ds, p->port, w);
818
819         return ret;
820 }
821
822 static int dsa_slave_set_eee(struct net_device *dev, struct ethtool_eee *e)
823 {
824         struct dsa_slave_priv *p = netdev_priv(dev);
825         struct dsa_switch *ds = p->parent;
826         int ret;
827
828         if (!ds->drv->set_eee)
829                 return -EOPNOTSUPP;
830
831         ret = ds->drv->set_eee(ds, p->port, p->phy, e);
832         if (ret)
833                 return ret;
834
835         if (p->phy)
836                 ret = phy_ethtool_set_eee(p->phy, e);
837
838         return ret;
839 }
840
841 static int dsa_slave_get_eee(struct net_device *dev, struct ethtool_eee *e)
842 {
843         struct dsa_slave_priv *p = netdev_priv(dev);
844         struct dsa_switch *ds = p->parent;
845         int ret;
846
847         if (!ds->drv->get_eee)
848                 return -EOPNOTSUPP;
849
850         ret = ds->drv->get_eee(ds, p->port, e);
851         if (ret)
852                 return ret;
853
854         if (p->phy)
855                 ret = phy_ethtool_get_eee(p->phy, e);
856
857         return ret;
858 }
859
860 #ifdef CONFIG_NET_POLL_CONTROLLER
861 static int dsa_slave_netpoll_setup(struct net_device *dev,
862                                    struct netpoll_info *ni)
863 {
864         struct dsa_slave_priv *p = netdev_priv(dev);
865         struct dsa_switch *ds = p->parent;
866         struct net_device *master = ds->dst->master_netdev;
867         struct netpoll *netpoll;
868         int err = 0;
869
870         netpoll = kzalloc(sizeof(*netpoll), GFP_KERNEL);
871         if (!netpoll)
872                 return -ENOMEM;
873
874         err = __netpoll_setup(netpoll, master);
875         if (err) {
876                 kfree(netpoll);
877                 goto out;
878         }
879
880         p->netpoll = netpoll;
881 out:
882         return err;
883 }
884
885 static void dsa_slave_netpoll_cleanup(struct net_device *dev)
886 {
887         struct dsa_slave_priv *p = netdev_priv(dev);
888         struct netpoll *netpoll = p->netpoll;
889
890         if (!netpoll)
891                 return;
892
893         p->netpoll = NULL;
894
895         __netpoll_free_async(netpoll);
896 }
897
898 static void dsa_slave_poll_controller(struct net_device *dev)
899 {
900 }
901 #endif
902
903 static const struct ethtool_ops dsa_slave_ethtool_ops = {
904         .get_settings           = dsa_slave_get_settings,
905         .set_settings           = dsa_slave_set_settings,
906         .get_drvinfo            = dsa_slave_get_drvinfo,
907         .get_regs_len           = dsa_slave_get_regs_len,
908         .get_regs               = dsa_slave_get_regs,
909         .nway_reset             = dsa_slave_nway_reset,
910         .get_link               = dsa_slave_get_link,
911         .get_eeprom_len         = dsa_slave_get_eeprom_len,
912         .get_eeprom             = dsa_slave_get_eeprom,
913         .set_eeprom             = dsa_slave_set_eeprom,
914         .get_strings            = dsa_slave_get_strings,
915         .get_ethtool_stats      = dsa_slave_get_ethtool_stats,
916         .get_sset_count         = dsa_slave_get_sset_count,
917         .set_wol                = dsa_slave_set_wol,
918         .get_wol                = dsa_slave_get_wol,
919         .set_eee                = dsa_slave_set_eee,
920         .get_eee                = dsa_slave_get_eee,
921 };
922
923 static const struct net_device_ops dsa_slave_netdev_ops = {
924         .ndo_open               = dsa_slave_open,
925         .ndo_stop               = dsa_slave_close,
926         .ndo_start_xmit         = dsa_slave_xmit,
927         .ndo_change_rx_flags    = dsa_slave_change_rx_flags,
928         .ndo_set_rx_mode        = dsa_slave_set_rx_mode,
929         .ndo_set_mac_address    = dsa_slave_set_mac_address,
930         .ndo_fdb_add            = switchdev_port_fdb_add,
931         .ndo_fdb_del            = switchdev_port_fdb_del,
932         .ndo_fdb_dump           = switchdev_port_fdb_dump,
933         .ndo_do_ioctl           = dsa_slave_ioctl,
934         .ndo_get_iflink         = dsa_slave_get_iflink,
935 #ifdef CONFIG_NET_POLL_CONTROLLER
936         .ndo_netpoll_setup      = dsa_slave_netpoll_setup,
937         .ndo_netpoll_cleanup    = dsa_slave_netpoll_cleanup,
938         .ndo_poll_controller    = dsa_slave_poll_controller,
939 #endif
940         .ndo_bridge_getlink     = switchdev_port_bridge_getlink,
941         .ndo_bridge_setlink     = switchdev_port_bridge_setlink,
942         .ndo_bridge_dellink     = switchdev_port_bridge_dellink,
943 };
944
945 static const struct switchdev_ops dsa_slave_switchdev_ops = {
946         .switchdev_port_attr_get        = dsa_slave_port_attr_get,
947         .switchdev_port_attr_set        = dsa_slave_port_attr_set,
948         .switchdev_port_obj_add         = dsa_slave_port_obj_add,
949         .switchdev_port_obj_del         = dsa_slave_port_obj_del,
950         .switchdev_port_obj_dump        = dsa_slave_port_obj_dump,
951 };
952
953 static struct device_type dsa_type = {
954         .name   = "dsa",
955 };
956
957 static void dsa_slave_adjust_link(struct net_device *dev)
958 {
959         struct dsa_slave_priv *p = netdev_priv(dev);
960         struct dsa_switch *ds = p->parent;
961         unsigned int status_changed = 0;
962
963         if (p->old_link != p->phy->link) {
964                 status_changed = 1;
965                 p->old_link = p->phy->link;
966         }
967
968         if (p->old_duplex != p->phy->duplex) {
969                 status_changed = 1;
970                 p->old_duplex = p->phy->duplex;
971         }
972
973         if (p->old_pause != p->phy->pause) {
974                 status_changed = 1;
975                 p->old_pause = p->phy->pause;
976         }
977
978         if (ds->drv->adjust_link && status_changed)
979                 ds->drv->adjust_link(ds, p->port, p->phy);
980
981         if (status_changed)
982                 phy_print_status(p->phy);
983 }
984
985 static int dsa_slave_fixed_link_update(struct net_device *dev,
986                                        struct fixed_phy_status *status)
987 {
988         struct dsa_slave_priv *p = netdev_priv(dev);
989         struct dsa_switch *ds = p->parent;
990
991         if (ds->drv->fixed_link_update)
992                 ds->drv->fixed_link_update(ds, p->port, status);
993
994         return 0;
995 }
996
997 /* slave device setup *******************************************************/
998 static int dsa_slave_phy_connect(struct dsa_slave_priv *p,
999                                  struct net_device *slave_dev,
1000                                  int addr)
1001 {
1002         struct dsa_switch *ds = p->parent;
1003
1004         p->phy = ds->slave_mii_bus->phy_map[addr];
1005         if (!p->phy) {
1006                 netdev_err(slave_dev, "no phy at %d\n", addr);
1007                 return -ENODEV;
1008         }
1009
1010         /* Use already configured phy mode */
1011         if (p->phy_interface == PHY_INTERFACE_MODE_NA)
1012                 p->phy_interface = p->phy->interface;
1013         return phy_connect_direct(slave_dev, p->phy, dsa_slave_adjust_link,
1014                                   p->phy_interface);
1015 }
1016
1017 static int dsa_slave_phy_setup(struct dsa_slave_priv *p,
1018                                 struct net_device *slave_dev)
1019 {
1020         struct dsa_switch *ds = p->parent;
1021         struct dsa_chip_data *cd = ds->pd;
1022         struct device_node *phy_dn, *port_dn;
1023         bool phy_is_fixed = false;
1024         u32 phy_flags = 0;
1025         int mode, ret;
1026
1027         port_dn = cd->port_dn[p->port];
1028         mode = of_get_phy_mode(port_dn);
1029         if (mode < 0)
1030                 mode = PHY_INTERFACE_MODE_NA;
1031         p->phy_interface = mode;
1032
1033         phy_dn = of_parse_phandle(port_dn, "phy-handle", 0);
1034         if (!phy_dn && of_phy_is_fixed_link(port_dn)) {
1035                 /* In the case of a fixed PHY, the DT node associated
1036                  * to the fixed PHY is the Port DT node
1037                  */
1038                 ret = of_phy_register_fixed_link(port_dn);
1039                 if (ret) {
1040                         netdev_err(slave_dev, "failed to register fixed PHY: %d\n", ret);
1041                         return ret;
1042                 }
1043                 phy_is_fixed = true;
1044                 phy_dn = of_node_get(port_dn);
1045         }
1046
1047         if (ds->drv->get_phy_flags)
1048                 phy_flags = ds->drv->get_phy_flags(ds, p->port);
1049
1050         if (phy_dn) {
1051                 int phy_id = of_mdio_parse_addr(&slave_dev->dev, phy_dn);
1052
1053                 /* If this PHY address is part of phys_mii_mask, which means
1054                  * that we need to divert reads and writes to/from it, then we
1055                  * want to bind this device using the slave MII bus created by
1056                  * DSA to make that happen.
1057                  */
1058                 if (!phy_is_fixed && phy_id >= 0 &&
1059                     (ds->phys_mii_mask & (1 << phy_id))) {
1060                         ret = dsa_slave_phy_connect(p, slave_dev, phy_id);
1061                         if (ret) {
1062                                 netdev_err(slave_dev, "failed to connect to phy%d: %d\n", phy_id, ret);
1063                                 of_node_put(phy_dn);
1064                                 return ret;
1065                         }
1066                 } else {
1067                         p->phy = of_phy_connect(slave_dev, phy_dn,
1068                                                 dsa_slave_adjust_link,
1069                                                 phy_flags,
1070                                                 p->phy_interface);
1071                 }
1072
1073                 of_node_put(phy_dn);
1074         }
1075
1076         if (p->phy && phy_is_fixed)
1077                 fixed_phy_set_link_update(p->phy, dsa_slave_fixed_link_update);
1078
1079         /* We could not connect to a designated PHY, so use the switch internal
1080          * MDIO bus instead
1081          */
1082         if (!p->phy) {
1083                 ret = dsa_slave_phy_connect(p, slave_dev, p->port);
1084                 if (ret) {
1085                         netdev_err(slave_dev, "failed to connect to port %d: %d\n", p->port, ret);
1086                         return ret;
1087                 }
1088         } else {
1089                 netdev_info(slave_dev, "attached PHY at address %d [%s]\n",
1090                             p->phy->addr, p->phy->drv->name);
1091         }
1092
1093         return 0;
1094 }
1095
1096 static struct lock_class_key dsa_slave_netdev_xmit_lock_key;
1097 static void dsa_slave_set_lockdep_class_one(struct net_device *dev,
1098                                             struct netdev_queue *txq,
1099                                             void *_unused)
1100 {
1101         lockdep_set_class(&txq->_xmit_lock,
1102                           &dsa_slave_netdev_xmit_lock_key);
1103 }
1104
1105 int dsa_slave_suspend(struct net_device *slave_dev)
1106 {
1107         struct dsa_slave_priv *p = netdev_priv(slave_dev);
1108
1109         if (!netif_running(slave_dev))
1110                 return 0;
1111
1112         netif_device_detach(slave_dev);
1113
1114         if (p->phy) {
1115                 phy_stop(p->phy);
1116                 p->old_pause = -1;
1117                 p->old_link = -1;
1118                 p->old_duplex = -1;
1119                 phy_suspend(p->phy);
1120         }
1121
1122         return 0;
1123 }
1124
1125 int dsa_slave_resume(struct net_device *slave_dev)
1126 {
1127         struct dsa_slave_priv *p = netdev_priv(slave_dev);
1128
1129         if (!netif_running(slave_dev))
1130                 return 0;
1131
1132         netif_device_attach(slave_dev);
1133
1134         if (p->phy) {
1135                 phy_resume(p->phy);
1136                 phy_start(p->phy);
1137         }
1138
1139         return 0;
1140 }
1141
1142 int dsa_slave_create(struct dsa_switch *ds, struct device *parent,
1143                      int port, char *name)
1144 {
1145         struct net_device *master = ds->dst->master_netdev;
1146         struct net_device *slave_dev;
1147         struct dsa_slave_priv *p;
1148         int ret;
1149
1150         slave_dev = alloc_netdev(sizeof(struct dsa_slave_priv), name,
1151                                  NET_NAME_UNKNOWN, ether_setup);
1152         if (slave_dev == NULL)
1153                 return -ENOMEM;
1154
1155         slave_dev->features = master->vlan_features;
1156         slave_dev->ethtool_ops = &dsa_slave_ethtool_ops;
1157         eth_hw_addr_inherit(slave_dev, master);
1158         slave_dev->priv_flags |= IFF_NO_QUEUE;
1159         slave_dev->netdev_ops = &dsa_slave_netdev_ops;
1160         slave_dev->switchdev_ops = &dsa_slave_switchdev_ops;
1161         SET_NETDEV_DEVTYPE(slave_dev, &dsa_type);
1162
1163         netdev_for_each_tx_queue(slave_dev, dsa_slave_set_lockdep_class_one,
1164                                  NULL);
1165
1166         SET_NETDEV_DEV(slave_dev, parent);
1167         slave_dev->dev.of_node = ds->pd->port_dn[port];
1168         slave_dev->vlan_features = master->vlan_features;
1169
1170         p = netdev_priv(slave_dev);
1171         p->dev = slave_dev;
1172         p->parent = ds;
1173         p->port = port;
1174
1175         switch (ds->dst->tag_protocol) {
1176 #ifdef CONFIG_NET_DSA_TAG_DSA
1177         case DSA_TAG_PROTO_DSA:
1178                 p->xmit = dsa_netdev_ops.xmit;
1179                 break;
1180 #endif
1181 #ifdef CONFIG_NET_DSA_TAG_EDSA
1182         case DSA_TAG_PROTO_EDSA:
1183                 p->xmit = edsa_netdev_ops.xmit;
1184                 break;
1185 #endif
1186 #ifdef CONFIG_NET_DSA_TAG_TRAILER
1187         case DSA_TAG_PROTO_TRAILER:
1188                 p->xmit = trailer_netdev_ops.xmit;
1189                 break;
1190 #endif
1191 #ifdef CONFIG_NET_DSA_TAG_BRCM
1192         case DSA_TAG_PROTO_BRCM:
1193                 p->xmit = brcm_netdev_ops.xmit;
1194                 break;
1195 #endif
1196         default:
1197                 p->xmit = dsa_slave_notag_xmit;
1198                 break;
1199         }
1200
1201         p->old_pause = -1;
1202         p->old_link = -1;
1203         p->old_duplex = -1;
1204
1205         ret = dsa_slave_phy_setup(p, slave_dev);
1206         if (ret) {
1207                 netdev_err(master, "error %d setting up slave phy\n", ret);
1208                 free_netdev(slave_dev);
1209                 return ret;
1210         }
1211
1212         ds->ports[port] = slave_dev;
1213         ret = register_netdev(slave_dev);
1214         if (ret) {
1215                 netdev_err(master, "error %d registering interface %s\n",
1216                            ret, slave_dev->name);
1217                 phy_disconnect(p->phy);
1218                 ds->ports[port] = NULL;
1219                 free_netdev(slave_dev);
1220                 return ret;
1221         }
1222
1223         netif_carrier_off(slave_dev);
1224
1225         return 0;
1226 }
1227
1228 static bool dsa_slave_dev_check(struct net_device *dev)
1229 {
1230         return dev->netdev_ops == &dsa_slave_netdev_ops;
1231 }
1232
1233 static int dsa_slave_master_changed(struct net_device *dev)
1234 {
1235         struct net_device *master = netdev_master_upper_dev_get(dev);
1236         struct dsa_slave_priv *p = netdev_priv(dev);
1237         int err = 0;
1238
1239         if (master && master->rtnl_link_ops &&
1240             !strcmp(master->rtnl_link_ops->kind, "bridge"))
1241                 err = dsa_slave_bridge_port_join(dev, master);
1242         else if (dsa_port_is_bridged(p))
1243                 err = dsa_slave_bridge_port_leave(dev);
1244
1245         return err;
1246 }
1247
1248 int dsa_slave_netdevice_event(struct notifier_block *unused,
1249                               unsigned long event, void *ptr)
1250 {
1251         struct net_device *dev;
1252         int err = 0;
1253
1254         switch (event) {
1255         case NETDEV_CHANGEUPPER:
1256                 dev = netdev_notifier_info_to_dev(ptr);
1257                 if (!dsa_slave_dev_check(dev))
1258                         goto out;
1259
1260                 err = dsa_slave_master_changed(dev);
1261                 if (err && err != -EOPNOTSUPP)
1262                         netdev_warn(dev, "failed to reflect master change\n");
1263
1264                 break;
1265         }
1266
1267 out:
1268         return NOTIFY_DONE;
1269 }