Merge branch 'linux-4.12' of git://github.com/skeggsb/linux into drm-next
[sfrench/cifs-2.6.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 <linux/mdio.h>
19 #include <linux/list.h>
20 #include <net/dsa.h>
21 #include <net/rtnetlink.h>
22 #include <net/switchdev.h>
23 #include <net/pkt_cls.h>
24 #include <net/tc_act/tc_mirred.h>
25 #include <linux/if_bridge.h>
26 #include <linux/netpoll.h>
27 #include "dsa_priv.h"
28
29 static bool dsa_slave_dev_check(struct net_device *dev);
30
31 static int dsa_slave_notify(struct net_device *dev, unsigned long e, void *v)
32 {
33         struct dsa_slave_priv *p = netdev_priv(dev);
34         struct raw_notifier_head *nh = &p->dp->ds->dst->nh;
35         int err;
36
37         err = raw_notifier_call_chain(nh, e, v);
38
39         return notifier_to_errno(err);
40 }
41
42 /* slave mii_bus handling ***************************************************/
43 static int dsa_slave_phy_read(struct mii_bus *bus, int addr, int reg)
44 {
45         struct dsa_switch *ds = bus->priv;
46
47         if (ds->phys_mii_mask & (1 << addr))
48                 return ds->ops->phy_read(ds, addr, reg);
49
50         return 0xffff;
51 }
52
53 static int dsa_slave_phy_write(struct mii_bus *bus, int addr, int reg, u16 val)
54 {
55         struct dsa_switch *ds = bus->priv;
56
57         if (ds->phys_mii_mask & (1 << addr))
58                 return ds->ops->phy_write(ds, addr, reg, val);
59
60         return 0;
61 }
62
63 void dsa_slave_mii_bus_init(struct dsa_switch *ds)
64 {
65         ds->slave_mii_bus->priv = (void *)ds;
66         ds->slave_mii_bus->name = "dsa slave smi";
67         ds->slave_mii_bus->read = dsa_slave_phy_read;
68         ds->slave_mii_bus->write = dsa_slave_phy_write;
69         snprintf(ds->slave_mii_bus->id, MII_BUS_ID_SIZE, "dsa-%d.%d",
70                  ds->dst->tree, ds->index);
71         ds->slave_mii_bus->parent = ds->dev;
72         ds->slave_mii_bus->phy_mask = ~ds->phys_mii_mask;
73 }
74
75
76 /* slave device handling ****************************************************/
77 static int dsa_slave_get_iflink(const struct net_device *dev)
78 {
79         struct dsa_slave_priv *p = netdev_priv(dev);
80
81         return p->dp->ds->dst->master_netdev->ifindex;
82 }
83
84 static inline bool dsa_port_is_bridged(struct dsa_port *dp)
85 {
86         return !!dp->bridge_dev;
87 }
88
89 static void dsa_slave_set_state(struct net_device *dev, u8 state)
90 {
91         struct dsa_slave_priv *p = netdev_priv(dev);
92         struct dsa_port *dp = p->dp;
93         struct dsa_switch *ds = dp->ds;
94         int port = dp->index;
95
96         if (ds->ops->port_stp_state_set)
97                 ds->ops->port_stp_state_set(ds, port, state);
98
99         if (ds->ops->port_fast_age) {
100                 /* Fast age FDB entries or flush appropriate forwarding database
101                  * for the given port, if we are moving it from Learning or
102                  * Forwarding state, to Disabled or Blocking or Listening state.
103                  */
104
105                 if ((dp->stp_state == BR_STATE_LEARNING ||
106                      dp->stp_state == BR_STATE_FORWARDING) &&
107                     (state == BR_STATE_DISABLED ||
108                      state == BR_STATE_BLOCKING ||
109                      state == BR_STATE_LISTENING))
110                         ds->ops->port_fast_age(ds, port);
111         }
112
113         dp->stp_state = state;
114 }
115
116 static int dsa_slave_open(struct net_device *dev)
117 {
118         struct dsa_slave_priv *p = netdev_priv(dev);
119         struct net_device *master = p->dp->ds->dst->master_netdev;
120         struct dsa_switch *ds = p->dp->ds;
121         u8 stp_state = dsa_port_is_bridged(p->dp) ?
122                         BR_STATE_BLOCKING : BR_STATE_FORWARDING;
123         int err;
124
125         if (!(master->flags & IFF_UP))
126                 return -ENETDOWN;
127
128         if (!ether_addr_equal(dev->dev_addr, master->dev_addr)) {
129                 err = dev_uc_add(master, dev->dev_addr);
130                 if (err < 0)
131                         goto out;
132         }
133
134         if (dev->flags & IFF_ALLMULTI) {
135                 err = dev_set_allmulti(master, 1);
136                 if (err < 0)
137                         goto del_unicast;
138         }
139         if (dev->flags & IFF_PROMISC) {
140                 err = dev_set_promiscuity(master, 1);
141                 if (err < 0)
142                         goto clear_allmulti;
143         }
144
145         if (ds->ops->port_enable) {
146                 err = ds->ops->port_enable(ds, p->dp->index, p->phy);
147                 if (err)
148                         goto clear_promisc;
149         }
150
151         dsa_slave_set_state(dev, stp_state);
152
153         if (p->phy)
154                 phy_start(p->phy);
155
156         return 0;
157
158 clear_promisc:
159         if (dev->flags & IFF_PROMISC)
160                 dev_set_promiscuity(master, -1);
161 clear_allmulti:
162         if (dev->flags & IFF_ALLMULTI)
163                 dev_set_allmulti(master, -1);
164 del_unicast:
165         if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
166                 dev_uc_del(master, dev->dev_addr);
167 out:
168         return err;
169 }
170
171 static int dsa_slave_close(struct net_device *dev)
172 {
173         struct dsa_slave_priv *p = netdev_priv(dev);
174         struct net_device *master = p->dp->ds->dst->master_netdev;
175         struct dsa_switch *ds = p->dp->ds;
176
177         if (p->phy)
178                 phy_stop(p->phy);
179
180         dev_mc_unsync(master, dev);
181         dev_uc_unsync(master, dev);
182         if (dev->flags & IFF_ALLMULTI)
183                 dev_set_allmulti(master, -1);
184         if (dev->flags & IFF_PROMISC)
185                 dev_set_promiscuity(master, -1);
186
187         if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
188                 dev_uc_del(master, dev->dev_addr);
189
190         if (ds->ops->port_disable)
191                 ds->ops->port_disable(ds, p->dp->index, p->phy);
192
193         dsa_slave_set_state(dev, BR_STATE_DISABLED);
194
195         return 0;
196 }
197
198 static void dsa_slave_change_rx_flags(struct net_device *dev, int change)
199 {
200         struct dsa_slave_priv *p = netdev_priv(dev);
201         struct net_device *master = p->dp->ds->dst->master_netdev;
202
203         if (change & IFF_ALLMULTI)
204                 dev_set_allmulti(master, dev->flags & IFF_ALLMULTI ? 1 : -1);
205         if (change & IFF_PROMISC)
206                 dev_set_promiscuity(master, dev->flags & IFF_PROMISC ? 1 : -1);
207 }
208
209 static void dsa_slave_set_rx_mode(struct net_device *dev)
210 {
211         struct dsa_slave_priv *p = netdev_priv(dev);
212         struct net_device *master = p->dp->ds->dst->master_netdev;
213
214         dev_mc_sync(master, dev);
215         dev_uc_sync(master, dev);
216 }
217
218 static int dsa_slave_set_mac_address(struct net_device *dev, void *a)
219 {
220         struct dsa_slave_priv *p = netdev_priv(dev);
221         struct net_device *master = p->dp->ds->dst->master_netdev;
222         struct sockaddr *addr = a;
223         int err;
224
225         if (!is_valid_ether_addr(addr->sa_data))
226                 return -EADDRNOTAVAIL;
227
228         if (!(dev->flags & IFF_UP))
229                 goto out;
230
231         if (!ether_addr_equal(addr->sa_data, master->dev_addr)) {
232                 err = dev_uc_add(master, addr->sa_data);
233                 if (err < 0)
234                         return err;
235         }
236
237         if (!ether_addr_equal(dev->dev_addr, master->dev_addr))
238                 dev_uc_del(master, dev->dev_addr);
239
240 out:
241         ether_addr_copy(dev->dev_addr, addr->sa_data);
242
243         return 0;
244 }
245
246 static int dsa_slave_port_vlan_add(struct net_device *dev,
247                                    const struct switchdev_obj_port_vlan *vlan,
248                                    struct switchdev_trans *trans)
249 {
250         struct dsa_slave_priv *p = netdev_priv(dev);
251         struct dsa_port *dp = p->dp;
252         struct dsa_switch *ds = dp->ds;
253
254         if (switchdev_trans_ph_prepare(trans)) {
255                 if (!ds->ops->port_vlan_prepare || !ds->ops->port_vlan_add)
256                         return -EOPNOTSUPP;
257
258                 return ds->ops->port_vlan_prepare(ds, dp->index, vlan, trans);
259         }
260
261         ds->ops->port_vlan_add(ds, dp->index, vlan, trans);
262
263         return 0;
264 }
265
266 static int dsa_slave_port_vlan_del(struct net_device *dev,
267                                    const struct switchdev_obj_port_vlan *vlan)
268 {
269         struct dsa_slave_priv *p = netdev_priv(dev);
270         struct dsa_switch *ds = p->dp->ds;
271
272         if (!ds->ops->port_vlan_del)
273                 return -EOPNOTSUPP;
274
275         return ds->ops->port_vlan_del(ds, p->dp->index, vlan);
276 }
277
278 static int dsa_slave_port_vlan_dump(struct net_device *dev,
279                                     struct switchdev_obj_port_vlan *vlan,
280                                     switchdev_obj_dump_cb_t *cb)
281 {
282         struct dsa_slave_priv *p = netdev_priv(dev);
283         struct dsa_switch *ds = p->dp->ds;
284
285         if (ds->ops->port_vlan_dump)
286                 return ds->ops->port_vlan_dump(ds, p->dp->index, vlan, cb);
287
288         return -EOPNOTSUPP;
289 }
290
291 static int dsa_slave_port_fdb_add(struct net_device *dev,
292                                   const struct switchdev_obj_port_fdb *fdb,
293                                   struct switchdev_trans *trans)
294 {
295         struct dsa_slave_priv *p = netdev_priv(dev);
296         struct dsa_switch *ds = p->dp->ds;
297
298         if (switchdev_trans_ph_prepare(trans)) {
299                 if (!ds->ops->port_fdb_prepare || !ds->ops->port_fdb_add)
300                         return -EOPNOTSUPP;
301
302                 return ds->ops->port_fdb_prepare(ds, p->dp->index, fdb, trans);
303         }
304
305         ds->ops->port_fdb_add(ds, p->dp->index, fdb, trans);
306
307         return 0;
308 }
309
310 static int dsa_slave_port_fdb_del(struct net_device *dev,
311                                   const struct switchdev_obj_port_fdb *fdb)
312 {
313         struct dsa_slave_priv *p = netdev_priv(dev);
314         struct dsa_switch *ds = p->dp->ds;
315         int ret = -EOPNOTSUPP;
316
317         if (ds->ops->port_fdb_del)
318                 ret = ds->ops->port_fdb_del(ds, p->dp->index, fdb);
319
320         return ret;
321 }
322
323 static int dsa_slave_port_fdb_dump(struct net_device *dev,
324                                    struct switchdev_obj_port_fdb *fdb,
325                                    switchdev_obj_dump_cb_t *cb)
326 {
327         struct dsa_slave_priv *p = netdev_priv(dev);
328         struct dsa_switch *ds = p->dp->ds;
329
330         if (ds->ops->port_fdb_dump)
331                 return ds->ops->port_fdb_dump(ds, p->dp->index, fdb, cb);
332
333         return -EOPNOTSUPP;
334 }
335
336 static int dsa_slave_port_mdb_add(struct net_device *dev,
337                                   const struct switchdev_obj_port_mdb *mdb,
338                                   struct switchdev_trans *trans)
339 {
340         struct dsa_slave_priv *p = netdev_priv(dev);
341         struct dsa_switch *ds = p->dp->ds;
342
343         if (switchdev_trans_ph_prepare(trans)) {
344                 if (!ds->ops->port_mdb_prepare || !ds->ops->port_mdb_add)
345                         return -EOPNOTSUPP;
346
347                 return ds->ops->port_mdb_prepare(ds, p->dp->index, mdb, trans);
348         }
349
350         ds->ops->port_mdb_add(ds, p->dp->index, mdb, trans);
351
352         return 0;
353 }
354
355 static int dsa_slave_port_mdb_del(struct net_device *dev,
356                                   const struct switchdev_obj_port_mdb *mdb)
357 {
358         struct dsa_slave_priv *p = netdev_priv(dev);
359         struct dsa_switch *ds = p->dp->ds;
360
361         if (ds->ops->port_mdb_del)
362                 return ds->ops->port_mdb_del(ds, p->dp->index, mdb);
363
364         return -EOPNOTSUPP;
365 }
366
367 static int dsa_slave_port_mdb_dump(struct net_device *dev,
368                                    struct switchdev_obj_port_mdb *mdb,
369                                    switchdev_obj_dump_cb_t *cb)
370 {
371         struct dsa_slave_priv *p = netdev_priv(dev);
372         struct dsa_switch *ds = p->dp->ds;
373
374         if (ds->ops->port_mdb_dump)
375                 return ds->ops->port_mdb_dump(ds, p->dp->index, mdb, cb);
376
377         return -EOPNOTSUPP;
378 }
379
380 static int dsa_slave_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
381 {
382         struct dsa_slave_priv *p = netdev_priv(dev);
383
384         if (p->phy != NULL)
385                 return phy_mii_ioctl(p->phy, ifr, cmd);
386
387         return -EOPNOTSUPP;
388 }
389
390 static int dsa_slave_stp_state_set(struct net_device *dev,
391                                    const struct switchdev_attr *attr,
392                                    struct switchdev_trans *trans)
393 {
394         struct dsa_slave_priv *p = netdev_priv(dev);
395         struct dsa_switch *ds = p->dp->ds;
396
397         if (switchdev_trans_ph_prepare(trans))
398                 return ds->ops->port_stp_state_set ? 0 : -EOPNOTSUPP;
399
400         dsa_slave_set_state(dev, attr->u.stp_state);
401
402         return 0;
403 }
404
405 static int dsa_slave_vlan_filtering(struct net_device *dev,
406                                     const struct switchdev_attr *attr,
407                                     struct switchdev_trans *trans)
408 {
409         struct dsa_slave_priv *p = netdev_priv(dev);
410         struct dsa_switch *ds = p->dp->ds;
411
412         /* bridge skips -EOPNOTSUPP, so skip the prepare phase */
413         if (switchdev_trans_ph_prepare(trans))
414                 return 0;
415
416         if (ds->ops->port_vlan_filtering)
417                 return ds->ops->port_vlan_filtering(ds, p->dp->index,
418                                                     attr->u.vlan_filtering);
419
420         return 0;
421 }
422
423 static unsigned int dsa_fastest_ageing_time(struct dsa_switch *ds,
424                                             unsigned int ageing_time)
425 {
426         int i;
427
428         for (i = 0; i < ds->num_ports; ++i) {
429                 struct dsa_port *dp = &ds->ports[i];
430
431                 if (dp && dp->ageing_time && dp->ageing_time < ageing_time)
432                         ageing_time = dp->ageing_time;
433         }
434
435         return ageing_time;
436 }
437
438 static int dsa_slave_ageing_time(struct net_device *dev,
439                                  const struct switchdev_attr *attr,
440                                  struct switchdev_trans *trans)
441 {
442         struct dsa_slave_priv *p = netdev_priv(dev);
443         struct dsa_switch *ds = p->dp->ds;
444         unsigned long ageing_jiffies = clock_t_to_jiffies(attr->u.ageing_time);
445         unsigned int ageing_time = jiffies_to_msecs(ageing_jiffies);
446
447         if (switchdev_trans_ph_prepare(trans)) {
448                 if (ds->ageing_time_min && ageing_time < ds->ageing_time_min)
449                         return -ERANGE;
450                 if (ds->ageing_time_max && ageing_time > ds->ageing_time_max)
451                         return -ERANGE;
452                 return 0;
453         }
454
455         /* Keep the fastest ageing time in case of multiple bridges */
456         p->dp->ageing_time = ageing_time;
457         ageing_time = dsa_fastest_ageing_time(ds, ageing_time);
458
459         if (ds->ops->set_ageing_time)
460                 return ds->ops->set_ageing_time(ds, ageing_time);
461
462         return 0;
463 }
464
465 static int dsa_slave_port_attr_set(struct net_device *dev,
466                                    const struct switchdev_attr *attr,
467                                    struct switchdev_trans *trans)
468 {
469         int ret;
470
471         switch (attr->id) {
472         case SWITCHDEV_ATTR_ID_PORT_STP_STATE:
473                 ret = dsa_slave_stp_state_set(dev, attr, trans);
474                 break;
475         case SWITCHDEV_ATTR_ID_BRIDGE_VLAN_FILTERING:
476                 ret = dsa_slave_vlan_filtering(dev, attr, trans);
477                 break;
478         case SWITCHDEV_ATTR_ID_BRIDGE_AGEING_TIME:
479                 ret = dsa_slave_ageing_time(dev, attr, trans);
480                 break;
481         default:
482                 ret = -EOPNOTSUPP;
483                 break;
484         }
485
486         return ret;
487 }
488
489 static int dsa_slave_port_obj_add(struct net_device *dev,
490                                   const struct switchdev_obj *obj,
491                                   struct switchdev_trans *trans)
492 {
493         int err;
494
495         /* For the prepare phase, ensure the full set of changes is feasable in
496          * one go in order to signal a failure properly. If an operation is not
497          * supported, return -EOPNOTSUPP.
498          */
499
500         switch (obj->id) {
501         case SWITCHDEV_OBJ_ID_PORT_FDB:
502                 err = dsa_slave_port_fdb_add(dev,
503                                              SWITCHDEV_OBJ_PORT_FDB(obj),
504                                              trans);
505                 break;
506         case SWITCHDEV_OBJ_ID_PORT_MDB:
507                 err = dsa_slave_port_mdb_add(dev, SWITCHDEV_OBJ_PORT_MDB(obj),
508                                              trans);
509                 break;
510         case SWITCHDEV_OBJ_ID_PORT_VLAN:
511                 err = dsa_slave_port_vlan_add(dev,
512                                               SWITCHDEV_OBJ_PORT_VLAN(obj),
513                                               trans);
514                 break;
515         default:
516                 err = -EOPNOTSUPP;
517                 break;
518         }
519
520         return err;
521 }
522
523 static int dsa_slave_port_obj_del(struct net_device *dev,
524                                   const struct switchdev_obj *obj)
525 {
526         int err;
527
528         switch (obj->id) {
529         case SWITCHDEV_OBJ_ID_PORT_FDB:
530                 err = dsa_slave_port_fdb_del(dev,
531                                              SWITCHDEV_OBJ_PORT_FDB(obj));
532                 break;
533         case SWITCHDEV_OBJ_ID_PORT_MDB:
534                 err = dsa_slave_port_mdb_del(dev, SWITCHDEV_OBJ_PORT_MDB(obj));
535                 break;
536         case SWITCHDEV_OBJ_ID_PORT_VLAN:
537                 err = dsa_slave_port_vlan_del(dev,
538                                               SWITCHDEV_OBJ_PORT_VLAN(obj));
539                 break;
540         default:
541                 err = -EOPNOTSUPP;
542                 break;
543         }
544
545         return err;
546 }
547
548 static int dsa_slave_port_obj_dump(struct net_device *dev,
549                                    struct switchdev_obj *obj,
550                                    switchdev_obj_dump_cb_t *cb)
551 {
552         int err;
553
554         switch (obj->id) {
555         case SWITCHDEV_OBJ_ID_PORT_FDB:
556                 err = dsa_slave_port_fdb_dump(dev,
557                                               SWITCHDEV_OBJ_PORT_FDB(obj),
558                                               cb);
559                 break;
560         case SWITCHDEV_OBJ_ID_PORT_MDB:
561                 err = dsa_slave_port_mdb_dump(dev, SWITCHDEV_OBJ_PORT_MDB(obj),
562                                               cb);
563                 break;
564         case SWITCHDEV_OBJ_ID_PORT_VLAN:
565                 err = dsa_slave_port_vlan_dump(dev,
566                                                SWITCHDEV_OBJ_PORT_VLAN(obj),
567                                                cb);
568                 break;
569         default:
570                 err = -EOPNOTSUPP;
571                 break;
572         }
573
574         return err;
575 }
576
577 static int dsa_slave_bridge_port_join(struct net_device *dev,
578                                       struct net_device *br)
579 {
580         struct dsa_slave_priv *p = netdev_priv(dev);
581         struct dsa_notifier_bridge_info info = {
582                 .sw_index = p->dp->ds->index,
583                 .port = p->dp->index,
584                 .br = br,
585         };
586         int err;
587
588         /* Here the port is already bridged. Reflect the current configuration
589          * so that drivers can program their chips accordingly.
590          */
591         p->dp->bridge_dev = br;
592
593         err = dsa_slave_notify(dev, DSA_NOTIFIER_BRIDGE_JOIN, &info);
594
595         /* The bridging is rolled back on error */
596         if (err)
597                 p->dp->bridge_dev = NULL;
598
599         return err;
600 }
601
602 static void dsa_slave_bridge_port_leave(struct net_device *dev,
603                                         struct net_device *br)
604 {
605         struct dsa_slave_priv *p = netdev_priv(dev);
606         struct dsa_notifier_bridge_info info = {
607                 .sw_index = p->dp->ds->index,
608                 .port = p->dp->index,
609                 .br = br,
610         };
611         int err;
612
613         /* Here the port is already unbridged. Reflect the current configuration
614          * so that drivers can program their chips accordingly.
615          */
616         p->dp->bridge_dev = NULL;
617
618         err = dsa_slave_notify(dev, DSA_NOTIFIER_BRIDGE_LEAVE, &info);
619         if (err)
620                 netdev_err(dev, "failed to notify DSA_NOTIFIER_BRIDGE_LEAVE\n");
621
622         /* Port left the bridge, put in BR_STATE_DISABLED by the bridge layer,
623          * so allow it to be in BR_STATE_FORWARDING to be kept functional
624          */
625         dsa_slave_set_state(dev, BR_STATE_FORWARDING);
626 }
627
628 static int dsa_slave_port_attr_get(struct net_device *dev,
629                                    struct switchdev_attr *attr)
630 {
631         struct dsa_slave_priv *p = netdev_priv(dev);
632         struct dsa_switch *ds = p->dp->ds;
633
634         switch (attr->id) {
635         case SWITCHDEV_ATTR_ID_PORT_PARENT_ID:
636                 attr->u.ppid.id_len = sizeof(ds->index);
637                 memcpy(&attr->u.ppid.id, &ds->index, attr->u.ppid.id_len);
638                 break;
639         default:
640                 return -EOPNOTSUPP;
641         }
642
643         return 0;
644 }
645
646 static inline netdev_tx_t dsa_netpoll_send_skb(struct dsa_slave_priv *p,
647                                                struct sk_buff *skb)
648 {
649 #ifdef CONFIG_NET_POLL_CONTROLLER
650         if (p->netpoll)
651                 netpoll_send_skb(p->netpoll, skb);
652 #else
653         BUG();
654 #endif
655         return NETDEV_TX_OK;
656 }
657
658 static netdev_tx_t dsa_slave_xmit(struct sk_buff *skb, struct net_device *dev)
659 {
660         struct dsa_slave_priv *p = netdev_priv(dev);
661         struct sk_buff *nskb;
662
663         dev->stats.tx_packets++;
664         dev->stats.tx_bytes += skb->len;
665
666         /* Transmit function may have to reallocate the original SKB */
667         nskb = p->xmit(skb, dev);
668         if (!nskb)
669                 return NETDEV_TX_OK;
670
671         /* SKB for netpoll still need to be mangled with the protocol-specific
672          * tag to be successfully transmitted
673          */
674         if (unlikely(netpoll_tx_running(dev)))
675                 return dsa_netpoll_send_skb(p, nskb);
676
677         /* Queue the SKB for transmission on the parent interface, but
678          * do not modify its EtherType
679          */
680         nskb->dev = p->dp->ds->dst->master_netdev;
681         dev_queue_xmit(nskb);
682
683         return NETDEV_TX_OK;
684 }
685
686 /* ethtool operations *******************************************************/
687 static int
688 dsa_slave_get_link_ksettings(struct net_device *dev,
689                              struct ethtool_link_ksettings *cmd)
690 {
691         struct dsa_slave_priv *p = netdev_priv(dev);
692         int err = -EOPNOTSUPP;
693
694         if (p->phy != NULL)
695                 err = phy_ethtool_ksettings_get(p->phy, cmd);
696
697         return err;
698 }
699
700 static int
701 dsa_slave_set_link_ksettings(struct net_device *dev,
702                              const struct ethtool_link_ksettings *cmd)
703 {
704         struct dsa_slave_priv *p = netdev_priv(dev);
705
706         if (p->phy != NULL)
707                 return phy_ethtool_ksettings_set(p->phy, cmd);
708
709         return -EOPNOTSUPP;
710 }
711
712 static void dsa_slave_get_drvinfo(struct net_device *dev,
713                                   struct ethtool_drvinfo *drvinfo)
714 {
715         strlcpy(drvinfo->driver, "dsa", sizeof(drvinfo->driver));
716         strlcpy(drvinfo->fw_version, "N/A", sizeof(drvinfo->fw_version));
717         strlcpy(drvinfo->bus_info, "platform", sizeof(drvinfo->bus_info));
718 }
719
720 static int dsa_slave_get_regs_len(struct net_device *dev)
721 {
722         struct dsa_slave_priv *p = netdev_priv(dev);
723         struct dsa_switch *ds = p->dp->ds;
724
725         if (ds->ops->get_regs_len)
726                 return ds->ops->get_regs_len(ds, p->dp->index);
727
728         return -EOPNOTSUPP;
729 }
730
731 static void
732 dsa_slave_get_regs(struct net_device *dev, struct ethtool_regs *regs, void *_p)
733 {
734         struct dsa_slave_priv *p = netdev_priv(dev);
735         struct dsa_switch *ds = p->dp->ds;
736
737         if (ds->ops->get_regs)
738                 ds->ops->get_regs(ds, p->dp->index, regs, _p);
739 }
740
741 static int dsa_slave_nway_reset(struct net_device *dev)
742 {
743         struct dsa_slave_priv *p = netdev_priv(dev);
744
745         if (p->phy != NULL)
746                 return genphy_restart_aneg(p->phy);
747
748         return -EOPNOTSUPP;
749 }
750
751 static u32 dsa_slave_get_link(struct net_device *dev)
752 {
753         struct dsa_slave_priv *p = netdev_priv(dev);
754
755         if (p->phy != NULL) {
756                 genphy_update_link(p->phy);
757                 return p->phy->link;
758         }
759
760         return -EOPNOTSUPP;
761 }
762
763 static int dsa_slave_get_eeprom_len(struct net_device *dev)
764 {
765         struct dsa_slave_priv *p = netdev_priv(dev);
766         struct dsa_switch *ds = p->dp->ds;
767
768         if (ds->cd && ds->cd->eeprom_len)
769                 return ds->cd->eeprom_len;
770
771         if (ds->ops->get_eeprom_len)
772                 return ds->ops->get_eeprom_len(ds);
773
774         return 0;
775 }
776
777 static int dsa_slave_get_eeprom(struct net_device *dev,
778                                 struct ethtool_eeprom *eeprom, u8 *data)
779 {
780         struct dsa_slave_priv *p = netdev_priv(dev);
781         struct dsa_switch *ds = p->dp->ds;
782
783         if (ds->ops->get_eeprom)
784                 return ds->ops->get_eeprom(ds, eeprom, data);
785
786         return -EOPNOTSUPP;
787 }
788
789 static int dsa_slave_set_eeprom(struct net_device *dev,
790                                 struct ethtool_eeprom *eeprom, u8 *data)
791 {
792         struct dsa_slave_priv *p = netdev_priv(dev);
793         struct dsa_switch *ds = p->dp->ds;
794
795         if (ds->ops->set_eeprom)
796                 return ds->ops->set_eeprom(ds, eeprom, data);
797
798         return -EOPNOTSUPP;
799 }
800
801 static void dsa_slave_get_strings(struct net_device *dev,
802                                   uint32_t stringset, uint8_t *data)
803 {
804         struct dsa_slave_priv *p = netdev_priv(dev);
805         struct dsa_switch *ds = p->dp->ds;
806
807         if (stringset == ETH_SS_STATS) {
808                 int len = ETH_GSTRING_LEN;
809
810                 strncpy(data, "tx_packets", len);
811                 strncpy(data + len, "tx_bytes", len);
812                 strncpy(data + 2 * len, "rx_packets", len);
813                 strncpy(data + 3 * len, "rx_bytes", len);
814                 if (ds->ops->get_strings)
815                         ds->ops->get_strings(ds, p->dp->index, data + 4 * len);
816         }
817 }
818
819 static void dsa_cpu_port_get_ethtool_stats(struct net_device *dev,
820                                            struct ethtool_stats *stats,
821                                            uint64_t *data)
822 {
823         struct dsa_switch_tree *dst = dev->dsa_ptr;
824         struct dsa_switch *ds = dst->cpu_switch;
825         s8 cpu_port = dst->cpu_port;
826         int count = 0;
827
828         if (dst->master_ethtool_ops.get_sset_count) {
829                 count = dst->master_ethtool_ops.get_sset_count(dev,
830                                                                ETH_SS_STATS);
831                 dst->master_ethtool_ops.get_ethtool_stats(dev, stats, data);
832         }
833
834         if (ds->ops->get_ethtool_stats)
835                 ds->ops->get_ethtool_stats(ds, cpu_port, data + count);
836 }
837
838 static int dsa_cpu_port_get_sset_count(struct net_device *dev, int sset)
839 {
840         struct dsa_switch_tree *dst = dev->dsa_ptr;
841         struct dsa_switch *ds = dst->cpu_switch;
842         int count = 0;
843
844         if (dst->master_ethtool_ops.get_sset_count)
845                 count += dst->master_ethtool_ops.get_sset_count(dev, sset);
846
847         if (sset == ETH_SS_STATS && ds->ops->get_sset_count)
848                 count += ds->ops->get_sset_count(ds);
849
850         return count;
851 }
852
853 static void dsa_cpu_port_get_strings(struct net_device *dev,
854                                      uint32_t stringset, uint8_t *data)
855 {
856         struct dsa_switch_tree *dst = dev->dsa_ptr;
857         struct dsa_switch *ds = dst->cpu_switch;
858         s8 cpu_port = dst->cpu_port;
859         int len = ETH_GSTRING_LEN;
860         int mcount = 0, count;
861         unsigned int i;
862         uint8_t pfx[4];
863         uint8_t *ndata;
864
865         snprintf(pfx, sizeof(pfx), "p%.2d", cpu_port);
866         /* We do not want to be NULL-terminated, since this is a prefix */
867         pfx[sizeof(pfx) - 1] = '_';
868
869         if (dst->master_ethtool_ops.get_sset_count) {
870                 mcount = dst->master_ethtool_ops.get_sset_count(dev,
871                                                                 ETH_SS_STATS);
872                 dst->master_ethtool_ops.get_strings(dev, stringset, data);
873         }
874
875         if (stringset == ETH_SS_STATS && ds->ops->get_strings) {
876                 ndata = data + mcount * len;
877                 /* This function copies ETH_GSTRINGS_LEN bytes, we will mangle
878                  * the output after to prepend our CPU port prefix we
879                  * constructed earlier
880                  */
881                 ds->ops->get_strings(ds, cpu_port, ndata);
882                 count = ds->ops->get_sset_count(ds);
883                 for (i = 0; i < count; i++) {
884                         memmove(ndata + (i * len + sizeof(pfx)),
885                                 ndata + i * len, len - sizeof(pfx));
886                         memcpy(ndata + i * len, pfx, sizeof(pfx));
887                 }
888         }
889 }
890
891 static void dsa_slave_get_ethtool_stats(struct net_device *dev,
892                                         struct ethtool_stats *stats,
893                                         uint64_t *data)
894 {
895         struct dsa_slave_priv *p = netdev_priv(dev);
896         struct dsa_switch *ds = p->dp->ds;
897
898         data[0] = dev->stats.tx_packets;
899         data[1] = dev->stats.tx_bytes;
900         data[2] = dev->stats.rx_packets;
901         data[3] = dev->stats.rx_bytes;
902         if (ds->ops->get_ethtool_stats)
903                 ds->ops->get_ethtool_stats(ds, p->dp->index, data + 4);
904 }
905
906 static int dsa_slave_get_sset_count(struct net_device *dev, int sset)
907 {
908         struct dsa_slave_priv *p = netdev_priv(dev);
909         struct dsa_switch *ds = p->dp->ds;
910
911         if (sset == ETH_SS_STATS) {
912                 int count;
913
914                 count = 4;
915                 if (ds->ops->get_sset_count)
916                         count += ds->ops->get_sset_count(ds);
917
918                 return count;
919         }
920
921         return -EOPNOTSUPP;
922 }
923
924 static void dsa_slave_get_wol(struct net_device *dev, struct ethtool_wolinfo *w)
925 {
926         struct dsa_slave_priv *p = netdev_priv(dev);
927         struct dsa_switch *ds = p->dp->ds;
928
929         if (ds->ops->get_wol)
930                 ds->ops->get_wol(ds, p->dp->index, w);
931 }
932
933 static int dsa_slave_set_wol(struct net_device *dev, struct ethtool_wolinfo *w)
934 {
935         struct dsa_slave_priv *p = netdev_priv(dev);
936         struct dsa_switch *ds = p->dp->ds;
937         int ret = -EOPNOTSUPP;
938
939         if (ds->ops->set_wol)
940                 ret = ds->ops->set_wol(ds, p->dp->index, w);
941
942         return ret;
943 }
944
945 static int dsa_slave_set_eee(struct net_device *dev, struct ethtool_eee *e)
946 {
947         struct dsa_slave_priv *p = netdev_priv(dev);
948         struct dsa_switch *ds = p->dp->ds;
949         int ret;
950
951         if (!ds->ops->set_eee)
952                 return -EOPNOTSUPP;
953
954         ret = ds->ops->set_eee(ds, p->dp->index, p->phy, e);
955         if (ret)
956                 return ret;
957
958         if (p->phy)
959                 ret = phy_ethtool_set_eee(p->phy, e);
960
961         return ret;
962 }
963
964 static int dsa_slave_get_eee(struct net_device *dev, struct ethtool_eee *e)
965 {
966         struct dsa_slave_priv *p = netdev_priv(dev);
967         struct dsa_switch *ds = p->dp->ds;
968         int ret;
969
970         if (!ds->ops->get_eee)
971                 return -EOPNOTSUPP;
972
973         ret = ds->ops->get_eee(ds, p->dp->index, e);
974         if (ret)
975                 return ret;
976
977         if (p->phy)
978                 ret = phy_ethtool_get_eee(p->phy, e);
979
980         return ret;
981 }
982
983 #ifdef CONFIG_NET_POLL_CONTROLLER
984 static int dsa_slave_netpoll_setup(struct net_device *dev,
985                                    struct netpoll_info *ni)
986 {
987         struct dsa_slave_priv *p = netdev_priv(dev);
988         struct dsa_switch *ds = p->dp->ds;
989         struct net_device *master = ds->dst->master_netdev;
990         struct netpoll *netpoll;
991         int err = 0;
992
993         netpoll = kzalloc(sizeof(*netpoll), GFP_KERNEL);
994         if (!netpoll)
995                 return -ENOMEM;
996
997         err = __netpoll_setup(netpoll, master);
998         if (err) {
999                 kfree(netpoll);
1000                 goto out;
1001         }
1002
1003         p->netpoll = netpoll;
1004 out:
1005         return err;
1006 }
1007
1008 static void dsa_slave_netpoll_cleanup(struct net_device *dev)
1009 {
1010         struct dsa_slave_priv *p = netdev_priv(dev);
1011         struct netpoll *netpoll = p->netpoll;
1012
1013         if (!netpoll)
1014                 return;
1015
1016         p->netpoll = NULL;
1017
1018         __netpoll_free_async(netpoll);
1019 }
1020
1021 static void dsa_slave_poll_controller(struct net_device *dev)
1022 {
1023 }
1024 #endif
1025
1026 static int dsa_slave_get_phys_port_name(struct net_device *dev,
1027                                         char *name, size_t len)
1028 {
1029         struct dsa_slave_priv *p = netdev_priv(dev);
1030
1031         if (snprintf(name, len, "p%d", p->dp->index) >= len)
1032                 return -EINVAL;
1033
1034         return 0;
1035 }
1036
1037 static struct dsa_mall_tc_entry *
1038 dsa_slave_mall_tc_entry_find(struct dsa_slave_priv *p,
1039                              unsigned long cookie)
1040 {
1041         struct dsa_mall_tc_entry *mall_tc_entry;
1042
1043         list_for_each_entry(mall_tc_entry, &p->mall_tc_list, list)
1044                 if (mall_tc_entry->cookie == cookie)
1045                         return mall_tc_entry;
1046
1047         return NULL;
1048 }
1049
1050 static int dsa_slave_add_cls_matchall(struct net_device *dev,
1051                                       __be16 protocol,
1052                                       struct tc_cls_matchall_offload *cls,
1053                                       bool ingress)
1054 {
1055         struct dsa_slave_priv *p = netdev_priv(dev);
1056         struct dsa_mall_tc_entry *mall_tc_entry;
1057         struct dsa_switch *ds = p->dp->ds;
1058         struct net *net = dev_net(dev);
1059         struct dsa_slave_priv *to_p;
1060         struct net_device *to_dev;
1061         const struct tc_action *a;
1062         int err = -EOPNOTSUPP;
1063         LIST_HEAD(actions);
1064         int ifindex;
1065
1066         if (!ds->ops->port_mirror_add)
1067                 return err;
1068
1069         if (!tc_single_action(cls->exts))
1070                 return err;
1071
1072         tcf_exts_to_list(cls->exts, &actions);
1073         a = list_first_entry(&actions, struct tc_action, list);
1074
1075         if (is_tcf_mirred_egress_mirror(a) && protocol == htons(ETH_P_ALL)) {
1076                 struct dsa_mall_mirror_tc_entry *mirror;
1077
1078                 ifindex = tcf_mirred_ifindex(a);
1079                 to_dev = __dev_get_by_index(net, ifindex);
1080                 if (!to_dev)
1081                         return -EINVAL;
1082
1083                 if (!dsa_slave_dev_check(to_dev))
1084                         return -EOPNOTSUPP;
1085
1086                 mall_tc_entry = kzalloc(sizeof(*mall_tc_entry), GFP_KERNEL);
1087                 if (!mall_tc_entry)
1088                         return -ENOMEM;
1089
1090                 mall_tc_entry->cookie = cls->cookie;
1091                 mall_tc_entry->type = DSA_PORT_MALL_MIRROR;
1092                 mirror = &mall_tc_entry->mirror;
1093
1094                 to_p = netdev_priv(to_dev);
1095
1096                 mirror->to_local_port = to_p->dp->index;
1097                 mirror->ingress = ingress;
1098
1099                 err = ds->ops->port_mirror_add(ds, p->dp->index, mirror,
1100                                                ingress);
1101                 if (err) {
1102                         kfree(mall_tc_entry);
1103                         return err;
1104                 }
1105
1106                 list_add_tail(&mall_tc_entry->list, &p->mall_tc_list);
1107         }
1108
1109         return 0;
1110 }
1111
1112 static void dsa_slave_del_cls_matchall(struct net_device *dev,
1113                                        struct tc_cls_matchall_offload *cls)
1114 {
1115         struct dsa_slave_priv *p = netdev_priv(dev);
1116         struct dsa_mall_tc_entry *mall_tc_entry;
1117         struct dsa_switch *ds = p->dp->ds;
1118
1119         if (!ds->ops->port_mirror_del)
1120                 return;
1121
1122         mall_tc_entry = dsa_slave_mall_tc_entry_find(p, cls->cookie);
1123         if (!mall_tc_entry)
1124                 return;
1125
1126         list_del(&mall_tc_entry->list);
1127
1128         switch (mall_tc_entry->type) {
1129         case DSA_PORT_MALL_MIRROR:
1130                 ds->ops->port_mirror_del(ds, p->dp->index,
1131                                          &mall_tc_entry->mirror);
1132                 break;
1133         default:
1134                 WARN_ON(1);
1135         }
1136
1137         kfree(mall_tc_entry);
1138 }
1139
1140 static int dsa_slave_setup_tc(struct net_device *dev, u32 handle,
1141                               __be16 protocol, struct tc_to_netdev *tc)
1142 {
1143         bool ingress = TC_H_MAJ(handle) == TC_H_MAJ(TC_H_INGRESS);
1144         int ret = -EOPNOTSUPP;
1145
1146         switch (tc->type) {
1147         case TC_SETUP_MATCHALL:
1148                 switch (tc->cls_mall->command) {
1149                 case TC_CLSMATCHALL_REPLACE:
1150                         return dsa_slave_add_cls_matchall(dev, protocol,
1151                                                           tc->cls_mall,
1152                                                           ingress);
1153                 case TC_CLSMATCHALL_DESTROY:
1154                         dsa_slave_del_cls_matchall(dev, tc->cls_mall);
1155                         return 0;
1156                 }
1157         default:
1158                 break;
1159         }
1160
1161         return ret;
1162 }
1163
1164 void dsa_cpu_port_ethtool_init(struct ethtool_ops *ops)
1165 {
1166         ops->get_sset_count = dsa_cpu_port_get_sset_count;
1167         ops->get_ethtool_stats = dsa_cpu_port_get_ethtool_stats;
1168         ops->get_strings = dsa_cpu_port_get_strings;
1169 }
1170
1171 static int dsa_slave_get_rxnfc(struct net_device *dev,
1172                                struct ethtool_rxnfc *nfc, u32 *rule_locs)
1173 {
1174         struct dsa_slave_priv *p = netdev_priv(dev);
1175         struct dsa_switch *ds = p->dp->ds;
1176
1177         if (!ds->ops->get_rxnfc)
1178                 return -EOPNOTSUPP;
1179
1180         return ds->ops->get_rxnfc(ds, p->dp->index, nfc, rule_locs);
1181 }
1182
1183 static int dsa_slave_set_rxnfc(struct net_device *dev,
1184                                struct ethtool_rxnfc *nfc)
1185 {
1186         struct dsa_slave_priv *p = netdev_priv(dev);
1187         struct dsa_switch *ds = p->dp->ds;
1188
1189         if (!ds->ops->set_rxnfc)
1190                 return -EOPNOTSUPP;
1191
1192         return ds->ops->set_rxnfc(ds, p->dp->index, nfc);
1193 }
1194
1195 static const struct ethtool_ops dsa_slave_ethtool_ops = {
1196         .get_drvinfo            = dsa_slave_get_drvinfo,
1197         .get_regs_len           = dsa_slave_get_regs_len,
1198         .get_regs               = dsa_slave_get_regs,
1199         .nway_reset             = dsa_slave_nway_reset,
1200         .get_link               = dsa_slave_get_link,
1201         .get_eeprom_len         = dsa_slave_get_eeprom_len,
1202         .get_eeprom             = dsa_slave_get_eeprom,
1203         .set_eeprom             = dsa_slave_set_eeprom,
1204         .get_strings            = dsa_slave_get_strings,
1205         .get_ethtool_stats      = dsa_slave_get_ethtool_stats,
1206         .get_sset_count         = dsa_slave_get_sset_count,
1207         .set_wol                = dsa_slave_set_wol,
1208         .get_wol                = dsa_slave_get_wol,
1209         .set_eee                = dsa_slave_set_eee,
1210         .get_eee                = dsa_slave_get_eee,
1211         .get_link_ksettings     = dsa_slave_get_link_ksettings,
1212         .set_link_ksettings     = dsa_slave_set_link_ksettings,
1213         .get_rxnfc              = dsa_slave_get_rxnfc,
1214         .set_rxnfc              = dsa_slave_set_rxnfc,
1215 };
1216
1217 static const struct net_device_ops dsa_slave_netdev_ops = {
1218         .ndo_open               = dsa_slave_open,
1219         .ndo_stop               = dsa_slave_close,
1220         .ndo_start_xmit         = dsa_slave_xmit,
1221         .ndo_change_rx_flags    = dsa_slave_change_rx_flags,
1222         .ndo_set_rx_mode        = dsa_slave_set_rx_mode,
1223         .ndo_set_mac_address    = dsa_slave_set_mac_address,
1224         .ndo_fdb_add            = switchdev_port_fdb_add,
1225         .ndo_fdb_del            = switchdev_port_fdb_del,
1226         .ndo_fdb_dump           = switchdev_port_fdb_dump,
1227         .ndo_do_ioctl           = dsa_slave_ioctl,
1228         .ndo_get_iflink         = dsa_slave_get_iflink,
1229 #ifdef CONFIG_NET_POLL_CONTROLLER
1230         .ndo_netpoll_setup      = dsa_slave_netpoll_setup,
1231         .ndo_netpoll_cleanup    = dsa_slave_netpoll_cleanup,
1232         .ndo_poll_controller    = dsa_slave_poll_controller,
1233 #endif
1234         .ndo_bridge_getlink     = switchdev_port_bridge_getlink,
1235         .ndo_bridge_setlink     = switchdev_port_bridge_setlink,
1236         .ndo_bridge_dellink     = switchdev_port_bridge_dellink,
1237         .ndo_get_phys_port_name = dsa_slave_get_phys_port_name,
1238         .ndo_setup_tc           = dsa_slave_setup_tc,
1239 };
1240
1241 static const struct switchdev_ops dsa_slave_switchdev_ops = {
1242         .switchdev_port_attr_get        = dsa_slave_port_attr_get,
1243         .switchdev_port_attr_set        = dsa_slave_port_attr_set,
1244         .switchdev_port_obj_add         = dsa_slave_port_obj_add,
1245         .switchdev_port_obj_del         = dsa_slave_port_obj_del,
1246         .switchdev_port_obj_dump        = dsa_slave_port_obj_dump,
1247 };
1248
1249 static struct device_type dsa_type = {
1250         .name   = "dsa",
1251 };
1252
1253 static void dsa_slave_adjust_link(struct net_device *dev)
1254 {
1255         struct dsa_slave_priv *p = netdev_priv(dev);
1256         struct dsa_switch *ds = p->dp->ds;
1257         unsigned int status_changed = 0;
1258
1259         if (p->old_link != p->phy->link) {
1260                 status_changed = 1;
1261                 p->old_link = p->phy->link;
1262         }
1263
1264         if (p->old_duplex != p->phy->duplex) {
1265                 status_changed = 1;
1266                 p->old_duplex = p->phy->duplex;
1267         }
1268
1269         if (p->old_pause != p->phy->pause) {
1270                 status_changed = 1;
1271                 p->old_pause = p->phy->pause;
1272         }
1273
1274         if (ds->ops->adjust_link && status_changed)
1275                 ds->ops->adjust_link(ds, p->dp->index, p->phy);
1276
1277         if (status_changed)
1278                 phy_print_status(p->phy);
1279 }
1280
1281 static int dsa_slave_fixed_link_update(struct net_device *dev,
1282                                        struct fixed_phy_status *status)
1283 {
1284         struct dsa_slave_priv *p;
1285         struct dsa_switch *ds;
1286
1287         if (dev) {
1288                 p = netdev_priv(dev);
1289                 ds = p->dp->ds;
1290                 if (ds->ops->fixed_link_update)
1291                         ds->ops->fixed_link_update(ds, p->dp->index, status);
1292         }
1293
1294         return 0;
1295 }
1296
1297 /* slave device setup *******************************************************/
1298 static int dsa_slave_phy_connect(struct dsa_slave_priv *p,
1299                                  struct net_device *slave_dev,
1300                                  int addr)
1301 {
1302         struct dsa_switch *ds = p->dp->ds;
1303
1304         p->phy = mdiobus_get_phy(ds->slave_mii_bus, addr);
1305         if (!p->phy) {
1306                 netdev_err(slave_dev, "no phy at %d\n", addr);
1307                 return -ENODEV;
1308         }
1309
1310         /* Use already configured phy mode */
1311         if (p->phy_interface == PHY_INTERFACE_MODE_NA)
1312                 p->phy_interface = p->phy->interface;
1313         return phy_connect_direct(slave_dev, p->phy, dsa_slave_adjust_link,
1314                                   p->phy_interface);
1315 }
1316
1317 static int dsa_slave_phy_setup(struct dsa_slave_priv *p,
1318                                 struct net_device *slave_dev)
1319 {
1320         struct dsa_switch *ds = p->dp->ds;
1321         struct device_node *phy_dn, *port_dn;
1322         bool phy_is_fixed = false;
1323         u32 phy_flags = 0;
1324         int mode, ret;
1325
1326         port_dn = p->dp->dn;
1327         mode = of_get_phy_mode(port_dn);
1328         if (mode < 0)
1329                 mode = PHY_INTERFACE_MODE_NA;
1330         p->phy_interface = mode;
1331
1332         phy_dn = of_parse_phandle(port_dn, "phy-handle", 0);
1333         if (!phy_dn && of_phy_is_fixed_link(port_dn)) {
1334                 /* In the case of a fixed PHY, the DT node associated
1335                  * to the fixed PHY is the Port DT node
1336                  */
1337                 ret = of_phy_register_fixed_link(port_dn);
1338                 if (ret) {
1339                         netdev_err(slave_dev, "failed to register fixed PHY: %d\n", ret);
1340                         return ret;
1341                 }
1342                 phy_is_fixed = true;
1343                 phy_dn = of_node_get(port_dn);
1344         }
1345
1346         if (ds->ops->get_phy_flags)
1347                 phy_flags = ds->ops->get_phy_flags(ds, p->dp->index);
1348
1349         if (phy_dn) {
1350                 int phy_id = of_mdio_parse_addr(&slave_dev->dev, phy_dn);
1351
1352                 /* If this PHY address is part of phys_mii_mask, which means
1353                  * that we need to divert reads and writes to/from it, then we
1354                  * want to bind this device using the slave MII bus created by
1355                  * DSA to make that happen.
1356                  */
1357                 if (!phy_is_fixed && phy_id >= 0 &&
1358                     (ds->phys_mii_mask & (1 << phy_id))) {
1359                         ret = dsa_slave_phy_connect(p, slave_dev, phy_id);
1360                         if (ret) {
1361                                 netdev_err(slave_dev, "failed to connect to phy%d: %d\n", phy_id, ret);
1362                                 of_node_put(phy_dn);
1363                                 return ret;
1364                         }
1365                 } else {
1366                         p->phy = of_phy_connect(slave_dev, phy_dn,
1367                                                 dsa_slave_adjust_link,
1368                                                 phy_flags,
1369                                                 p->phy_interface);
1370                 }
1371
1372                 of_node_put(phy_dn);
1373         }
1374
1375         if (p->phy && phy_is_fixed)
1376                 fixed_phy_set_link_update(p->phy, dsa_slave_fixed_link_update);
1377
1378         /* We could not connect to a designated PHY, so use the switch internal
1379          * MDIO bus instead
1380          */
1381         if (!p->phy) {
1382                 ret = dsa_slave_phy_connect(p, slave_dev, p->dp->index);
1383                 if (ret) {
1384                         netdev_err(slave_dev, "failed to connect to port %d: %d\n",
1385                                    p->dp->index, ret);
1386                         if (phy_is_fixed)
1387                                 of_phy_deregister_fixed_link(port_dn);
1388                         return ret;
1389                 }
1390         }
1391
1392         phy_attached_info(p->phy);
1393
1394         return 0;
1395 }
1396
1397 static struct lock_class_key dsa_slave_netdev_xmit_lock_key;
1398 static void dsa_slave_set_lockdep_class_one(struct net_device *dev,
1399                                             struct netdev_queue *txq,
1400                                             void *_unused)
1401 {
1402         lockdep_set_class(&txq->_xmit_lock,
1403                           &dsa_slave_netdev_xmit_lock_key);
1404 }
1405
1406 int dsa_slave_suspend(struct net_device *slave_dev)
1407 {
1408         struct dsa_slave_priv *p = netdev_priv(slave_dev);
1409
1410         netif_device_detach(slave_dev);
1411
1412         if (p->phy) {
1413                 phy_stop(p->phy);
1414                 p->old_pause = -1;
1415                 p->old_link = -1;
1416                 p->old_duplex = -1;
1417                 phy_suspend(p->phy);
1418         }
1419
1420         return 0;
1421 }
1422
1423 int dsa_slave_resume(struct net_device *slave_dev)
1424 {
1425         struct dsa_slave_priv *p = netdev_priv(slave_dev);
1426
1427         netif_device_attach(slave_dev);
1428
1429         if (p->phy) {
1430                 phy_resume(p->phy);
1431                 phy_start(p->phy);
1432         }
1433
1434         return 0;
1435 }
1436
1437 int dsa_slave_create(struct dsa_switch *ds, struct device *parent,
1438                      int port, const char *name)
1439 {
1440         struct dsa_switch_tree *dst = ds->dst;
1441         struct net_device *master;
1442         struct net_device *slave_dev;
1443         struct dsa_slave_priv *p;
1444         int ret;
1445
1446         master = ds->dst->master_netdev;
1447         if (ds->master_netdev)
1448                 master = ds->master_netdev;
1449
1450         slave_dev = alloc_netdev(sizeof(struct dsa_slave_priv), name,
1451                                  NET_NAME_UNKNOWN, ether_setup);
1452         if (slave_dev == NULL)
1453                 return -ENOMEM;
1454
1455         slave_dev->features = master->vlan_features | NETIF_F_HW_TC;
1456         slave_dev->hw_features |= NETIF_F_HW_TC;
1457         slave_dev->ethtool_ops = &dsa_slave_ethtool_ops;
1458         eth_hw_addr_inherit(slave_dev, master);
1459         slave_dev->priv_flags |= IFF_NO_QUEUE;
1460         slave_dev->netdev_ops = &dsa_slave_netdev_ops;
1461         slave_dev->switchdev_ops = &dsa_slave_switchdev_ops;
1462         slave_dev->min_mtu = 0;
1463         slave_dev->max_mtu = ETH_MAX_MTU;
1464         SET_NETDEV_DEVTYPE(slave_dev, &dsa_type);
1465
1466         netdev_for_each_tx_queue(slave_dev, dsa_slave_set_lockdep_class_one,
1467                                  NULL);
1468
1469         SET_NETDEV_DEV(slave_dev, parent);
1470         slave_dev->dev.of_node = ds->ports[port].dn;
1471         slave_dev->vlan_features = master->vlan_features;
1472
1473         p = netdev_priv(slave_dev);
1474         p->dp = &ds->ports[port];
1475         INIT_LIST_HEAD(&p->mall_tc_list);
1476         p->xmit = dst->tag_ops->xmit;
1477
1478         p->old_pause = -1;
1479         p->old_link = -1;
1480         p->old_duplex = -1;
1481
1482         ds->ports[port].netdev = slave_dev;
1483         ret = register_netdev(slave_dev);
1484         if (ret) {
1485                 netdev_err(master, "error %d registering interface %s\n",
1486                            ret, slave_dev->name);
1487                 ds->ports[port].netdev = NULL;
1488                 free_netdev(slave_dev);
1489                 return ret;
1490         }
1491
1492         netif_carrier_off(slave_dev);
1493
1494         ret = dsa_slave_phy_setup(p, slave_dev);
1495         if (ret) {
1496                 netdev_err(master, "error %d setting up slave phy\n", ret);
1497                 unregister_netdev(slave_dev);
1498                 free_netdev(slave_dev);
1499                 return ret;
1500         }
1501
1502         return 0;
1503 }
1504
1505 void dsa_slave_destroy(struct net_device *slave_dev)
1506 {
1507         struct dsa_slave_priv *p = netdev_priv(slave_dev);
1508         struct device_node *port_dn;
1509
1510         port_dn = p->dp->dn;
1511
1512         netif_carrier_off(slave_dev);
1513         if (p->phy) {
1514                 phy_disconnect(p->phy);
1515
1516                 if (of_phy_is_fixed_link(port_dn))
1517                         of_phy_deregister_fixed_link(port_dn);
1518         }
1519         unregister_netdev(slave_dev);
1520         free_netdev(slave_dev);
1521 }
1522
1523 static bool dsa_slave_dev_check(struct net_device *dev)
1524 {
1525         return dev->netdev_ops == &dsa_slave_netdev_ops;
1526 }
1527
1528 static int dsa_slave_changeupper(struct net_device *dev,
1529                                  struct netdev_notifier_changeupper_info *info)
1530 {
1531         int err = NOTIFY_DONE;
1532
1533         if (netif_is_bridge_master(info->upper_dev)) {
1534                 if (info->linking) {
1535                         err = dsa_slave_bridge_port_join(dev, info->upper_dev);
1536                         err = notifier_from_errno(err);
1537                 } else {
1538                         dsa_slave_bridge_port_leave(dev, info->upper_dev);
1539                         err = NOTIFY_OK;
1540                 }
1541         }
1542
1543         return err;
1544 }
1545
1546 static int dsa_slave_netdevice_event(struct notifier_block *nb,
1547                                      unsigned long event, void *ptr)
1548 {
1549         struct net_device *dev = netdev_notifier_info_to_dev(ptr);
1550
1551         if (dev->netdev_ops != &dsa_slave_netdev_ops)
1552                 return NOTIFY_DONE;
1553
1554         if (event == NETDEV_CHANGEUPPER)
1555                 return dsa_slave_changeupper(dev, ptr);
1556
1557         return NOTIFY_DONE;
1558 }
1559
1560 static struct notifier_block dsa_slave_nb __read_mostly = {
1561         .notifier_call  = dsa_slave_netdevice_event,
1562 };
1563
1564 int dsa_slave_register_notifier(void)
1565 {
1566         return register_netdevice_notifier(&dsa_slave_nb);
1567 }
1568
1569 void dsa_slave_unregister_notifier(void)
1570 {
1571         int err;
1572
1573         err = unregister_netdevice_notifier(&dsa_slave_nb);
1574         if (err)
1575                 pr_err("DSA: failed to unregister slave notifier (%d)\n", err);
1576 }