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