OSDN Git Service

Merge tag 'dmaengine-fix-5.0-rc6' of git://git.infradead.org/users/vkoul/slave-dma
[uclinux-h8/linux.git] / include / net / dsa.h
1 /*
2  * include/net/dsa.h - Driver for Distributed Switch Architecture switch chips
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 #ifndef __LINUX_NET_DSA_H
12 #define __LINUX_NET_DSA_H
13
14 #include <linux/if.h>
15 #include <linux/if_ether.h>
16 #include <linux/list.h>
17 #include <linux/notifier.h>
18 #include <linux/timer.h>
19 #include <linux/workqueue.h>
20 #include <linux/of.h>
21 #include <linux/ethtool.h>
22 #include <linux/net_tstamp.h>
23 #include <linux/phy.h>
24 #include <net/devlink.h>
25 #include <net/switchdev.h>
26
27 struct tc_action;
28 struct phy_device;
29 struct fixed_phy_status;
30 struct phylink_link_state;
31
32 enum dsa_tag_protocol {
33         DSA_TAG_PROTO_NONE = 0,
34         DSA_TAG_PROTO_BRCM,
35         DSA_TAG_PROTO_BRCM_PREPEND,
36         DSA_TAG_PROTO_DSA,
37         DSA_TAG_PROTO_EDSA,
38         DSA_TAG_PROTO_GSWIP,
39         DSA_TAG_PROTO_KSZ9477,
40         DSA_TAG_PROTO_LAN9303,
41         DSA_TAG_PROTO_MTK,
42         DSA_TAG_PROTO_QCA,
43         DSA_TAG_PROTO_TRAILER,
44         DSA_TAG_LAST,           /* MUST BE LAST */
45 };
46
47 #define DSA_MAX_SWITCHES        4
48 #define DSA_MAX_PORTS           12
49
50 #define DSA_RTABLE_NONE         -1
51
52 struct dsa_chip_data {
53         /*
54          * How to access the switch configuration registers.
55          */
56         struct device   *host_dev;
57         int             sw_addr;
58
59         /*
60          * Reference to network devices
61          */
62         struct device   *netdev[DSA_MAX_PORTS];
63
64         /* set to size of eeprom if supported by the switch */
65         int             eeprom_len;
66
67         /* Device tree node pointer for this specific switch chip
68          * used during switch setup in case additional properties
69          * and resources needs to be used
70          */
71         struct device_node *of_node;
72
73         /*
74          * The names of the switch's ports.  Use "cpu" to
75          * designate the switch port that the cpu is connected to,
76          * "dsa" to indicate that this port is a DSA link to
77          * another switch, NULL to indicate the port is unused,
78          * or any other string to indicate this is a physical port.
79          */
80         char            *port_names[DSA_MAX_PORTS];
81         struct device_node *port_dn[DSA_MAX_PORTS];
82
83         /*
84          * An array of which element [a] indicates which port on this
85          * switch should be used to send packets to that are destined
86          * for switch a. Can be NULL if there is only one switch chip.
87          */
88         s8              rtable[DSA_MAX_SWITCHES];
89 };
90
91 struct dsa_platform_data {
92         /*
93          * Reference to a Linux network interface that connects
94          * to the root switch chip of the tree.
95          */
96         struct device   *netdev;
97         struct net_device *of_netdev;
98
99         /*
100          * Info structs describing each of the switch chips
101          * connected via this network interface.
102          */
103         int             nr_chips;
104         struct dsa_chip_data    *chip;
105 };
106
107 struct packet_type;
108 struct dsa_switch;
109
110 struct dsa_device_ops {
111         struct sk_buff *(*xmit)(struct sk_buff *skb, struct net_device *dev);
112         struct sk_buff *(*rcv)(struct sk_buff *skb, struct net_device *dev,
113                                struct packet_type *pt);
114         int (*flow_dissect)(const struct sk_buff *skb, __be16 *proto,
115                             int *offset);
116         unsigned int overhead;
117 };
118
119 struct dsa_switch_tree {
120         struct list_head        list;
121
122         /* Notifier chain for switch-wide events */
123         struct raw_notifier_head        nh;
124
125         /* Tree identifier */
126         unsigned int index;
127
128         /* Number of switches attached to this tree */
129         struct kref refcount;
130
131         /* Has this tree been applied to the hardware? */
132         bool setup;
133
134         /*
135          * Configuration data for the platform device that owns
136          * this dsa switch tree instance.
137          */
138         struct dsa_platform_data        *pd;
139
140         /*
141          * The switch port to which the CPU is attached.
142          */
143         struct dsa_port         *cpu_dp;
144
145         /*
146          * Data for the individual switch chips.
147          */
148         struct dsa_switch       *ds[DSA_MAX_SWITCHES];
149 };
150
151 /* TC matchall action types, only mirroring for now */
152 enum dsa_port_mall_action_type {
153         DSA_PORT_MALL_MIRROR,
154 };
155
156 /* TC mirroring entry */
157 struct dsa_mall_mirror_tc_entry {
158         u8 to_local_port;
159         bool ingress;
160 };
161
162 /* TC matchall entry */
163 struct dsa_mall_tc_entry {
164         struct list_head list;
165         unsigned long cookie;
166         enum dsa_port_mall_action_type type;
167         union {
168                 struct dsa_mall_mirror_tc_entry mirror;
169         };
170 };
171
172
173 struct dsa_port {
174         /* A CPU port is physically connected to a master device.
175          * A user port exposed to userspace has a slave device.
176          */
177         union {
178                 struct net_device *master;
179                 struct net_device *slave;
180         };
181
182         /* CPU port tagging operations used by master or slave devices */
183         const struct dsa_device_ops *tag_ops;
184
185         /* Copies for faster access in master receive hot path */
186         struct dsa_switch_tree *dst;
187         struct sk_buff *(*rcv)(struct sk_buff *skb, struct net_device *dev,
188                                struct packet_type *pt);
189
190         enum {
191                 DSA_PORT_TYPE_UNUSED = 0,
192                 DSA_PORT_TYPE_CPU,
193                 DSA_PORT_TYPE_DSA,
194                 DSA_PORT_TYPE_USER,
195         } type;
196
197         struct dsa_switch       *ds;
198         unsigned int            index;
199         const char              *name;
200         const struct dsa_port   *cpu_dp;
201         struct device_node      *dn;
202         unsigned int            ageing_time;
203         u8                      stp_state;
204         struct net_device       *bridge_dev;
205         struct devlink_port     devlink_port;
206         struct phylink          *pl;
207         /*
208          * Original copy of the master netdev ethtool_ops
209          */
210         const struct ethtool_ops *orig_ethtool_ops;
211 };
212
213 struct dsa_switch {
214         struct device *dev;
215
216         /*
217          * Parent switch tree, and switch index.
218          */
219         struct dsa_switch_tree  *dst;
220         unsigned int            index;
221
222         /* Listener for switch fabric events */
223         struct notifier_block   nb;
224
225         /*
226          * Give the switch driver somewhere to hang its private data
227          * structure.
228          */
229         void *priv;
230
231         /*
232          * Configuration data for this switch.
233          */
234         struct dsa_chip_data    *cd;
235
236         /*
237          * The switch operations.
238          */
239         const struct dsa_switch_ops     *ops;
240
241         /*
242          * An array of which element [a] indicates which port on this
243          * switch should be used to send packets to that are destined
244          * for switch a. Can be NULL if there is only one switch chip.
245          */
246         s8              rtable[DSA_MAX_SWITCHES];
247
248         /*
249          * Slave mii_bus and devices for the individual ports.
250          */
251         u32                     phys_mii_mask;
252         struct mii_bus          *slave_mii_bus;
253
254         /* Ageing Time limits in msecs */
255         unsigned int ageing_time_min;
256         unsigned int ageing_time_max;
257
258         /* devlink used to represent this switch device */
259         struct devlink          *devlink;
260
261         /* Number of switch port queues */
262         unsigned int            num_tx_queues;
263
264         unsigned long           *bitmap;
265         unsigned long           _bitmap;
266
267         /* Dynamically allocated ports, keep last */
268         size_t num_ports;
269         struct dsa_port ports[];
270 };
271
272 static inline const struct dsa_port *dsa_to_port(struct dsa_switch *ds, int p)
273 {
274         return &ds->ports[p];
275 }
276
277 static inline bool dsa_is_unused_port(struct dsa_switch *ds, int p)
278 {
279         return dsa_to_port(ds, p)->type == DSA_PORT_TYPE_UNUSED;
280 }
281
282 static inline bool dsa_is_cpu_port(struct dsa_switch *ds, int p)
283 {
284         return dsa_to_port(ds, p)->type == DSA_PORT_TYPE_CPU;
285 }
286
287 static inline bool dsa_is_dsa_port(struct dsa_switch *ds, int p)
288 {
289         return dsa_to_port(ds, p)->type == DSA_PORT_TYPE_DSA;
290 }
291
292 static inline bool dsa_is_user_port(struct dsa_switch *ds, int p)
293 {
294         return dsa_to_port(ds, p)->type == DSA_PORT_TYPE_USER;
295 }
296
297 static inline u32 dsa_user_ports(struct dsa_switch *ds)
298 {
299         u32 mask = 0;
300         int p;
301
302         for (p = 0; p < ds->num_ports; p++)
303                 if (dsa_is_user_port(ds, p))
304                         mask |= BIT(p);
305
306         return mask;
307 }
308
309 /* Return the local port used to reach an arbitrary switch port */
310 static inline unsigned int dsa_towards_port(struct dsa_switch *ds, int device,
311                                             int port)
312 {
313         if (device == ds->index)
314                 return port;
315         else
316                 return ds->rtable[device];
317 }
318
319 /* Return the local port used to reach the dedicated CPU port */
320 static inline unsigned int dsa_upstream_port(struct dsa_switch *ds, int port)
321 {
322         const struct dsa_port *dp = dsa_to_port(ds, port);
323         const struct dsa_port *cpu_dp = dp->cpu_dp;
324
325         if (!cpu_dp)
326                 return port;
327
328         return dsa_towards_port(ds, cpu_dp->ds->index, cpu_dp->index);
329 }
330
331 typedef int dsa_fdb_dump_cb_t(const unsigned char *addr, u16 vid,
332                               bool is_static, void *data);
333 struct dsa_switch_ops {
334 #if IS_ENABLED(CONFIG_NET_DSA_LEGACY)
335         /*
336          * Legacy probing.
337          */
338         const char      *(*probe)(struct device *dsa_dev,
339                                   struct device *host_dev, int sw_addr,
340                                   void **priv);
341 #endif
342
343         enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *ds,
344                                                   int port);
345
346         int     (*setup)(struct dsa_switch *ds);
347         u32     (*get_phy_flags)(struct dsa_switch *ds, int port);
348
349         /*
350          * Access to the switch's PHY registers.
351          */
352         int     (*phy_read)(struct dsa_switch *ds, int port, int regnum);
353         int     (*phy_write)(struct dsa_switch *ds, int port,
354                              int regnum, u16 val);
355
356         /*
357          * Link state adjustment (called from libphy)
358          */
359         void    (*adjust_link)(struct dsa_switch *ds, int port,
360                                 struct phy_device *phydev);
361         void    (*fixed_link_update)(struct dsa_switch *ds, int port,
362                                 struct fixed_phy_status *st);
363
364         /*
365          * PHYLINK integration
366          */
367         void    (*phylink_validate)(struct dsa_switch *ds, int port,
368                                     unsigned long *supported,
369                                     struct phylink_link_state *state);
370         int     (*phylink_mac_link_state)(struct dsa_switch *ds, int port,
371                                           struct phylink_link_state *state);
372         void    (*phylink_mac_config)(struct dsa_switch *ds, int port,
373                                       unsigned int mode,
374                                       const struct phylink_link_state *state);
375         void    (*phylink_mac_an_restart)(struct dsa_switch *ds, int port);
376         void    (*phylink_mac_link_down)(struct dsa_switch *ds, int port,
377                                          unsigned int mode,
378                                          phy_interface_t interface);
379         void    (*phylink_mac_link_up)(struct dsa_switch *ds, int port,
380                                        unsigned int mode,
381                                        phy_interface_t interface,
382                                        struct phy_device *phydev);
383         void    (*phylink_fixed_state)(struct dsa_switch *ds, int port,
384                                        struct phylink_link_state *state);
385         /*
386          * ethtool hardware statistics.
387          */
388         void    (*get_strings)(struct dsa_switch *ds, int port,
389                                u32 stringset, uint8_t *data);
390         void    (*get_ethtool_stats)(struct dsa_switch *ds,
391                                      int port, uint64_t *data);
392         int     (*get_sset_count)(struct dsa_switch *ds, int port, int sset);
393         void    (*get_ethtool_phy_stats)(struct dsa_switch *ds,
394                                          int port, uint64_t *data);
395
396         /*
397          * ethtool Wake-on-LAN
398          */
399         void    (*get_wol)(struct dsa_switch *ds, int port,
400                            struct ethtool_wolinfo *w);
401         int     (*set_wol)(struct dsa_switch *ds, int port,
402                            struct ethtool_wolinfo *w);
403
404         /*
405          * ethtool timestamp info
406          */
407         int     (*get_ts_info)(struct dsa_switch *ds, int port,
408                                struct ethtool_ts_info *ts);
409
410         /*
411          * Suspend and resume
412          */
413         int     (*suspend)(struct dsa_switch *ds);
414         int     (*resume)(struct dsa_switch *ds);
415
416         /*
417          * Port enable/disable
418          */
419         int     (*port_enable)(struct dsa_switch *ds, int port,
420                                struct phy_device *phy);
421         void    (*port_disable)(struct dsa_switch *ds, int port,
422                                 struct phy_device *phy);
423
424         /*
425          * Port's MAC EEE settings
426          */
427         int     (*set_mac_eee)(struct dsa_switch *ds, int port,
428                                struct ethtool_eee *e);
429         int     (*get_mac_eee)(struct dsa_switch *ds, int port,
430                                struct ethtool_eee *e);
431
432         /* EEPROM access */
433         int     (*get_eeprom_len)(struct dsa_switch *ds);
434         int     (*get_eeprom)(struct dsa_switch *ds,
435                               struct ethtool_eeprom *eeprom, u8 *data);
436         int     (*set_eeprom)(struct dsa_switch *ds,
437                               struct ethtool_eeprom *eeprom, u8 *data);
438
439         /*
440          * Register access.
441          */
442         int     (*get_regs_len)(struct dsa_switch *ds, int port);
443         void    (*get_regs)(struct dsa_switch *ds, int port,
444                             struct ethtool_regs *regs, void *p);
445
446         /*
447          * Bridge integration
448          */
449         int     (*set_ageing_time)(struct dsa_switch *ds, unsigned int msecs);
450         int     (*port_bridge_join)(struct dsa_switch *ds, int port,
451                                     struct net_device *bridge);
452         void    (*port_bridge_leave)(struct dsa_switch *ds, int port,
453                                      struct net_device *bridge);
454         void    (*port_stp_state_set)(struct dsa_switch *ds, int port,
455                                       u8 state);
456         void    (*port_fast_age)(struct dsa_switch *ds, int port);
457
458         /*
459          * VLAN support
460          */
461         int     (*port_vlan_filtering)(struct dsa_switch *ds, int port,
462                                        bool vlan_filtering);
463         int (*port_vlan_prepare)(struct dsa_switch *ds, int port,
464                                  const struct switchdev_obj_port_vlan *vlan);
465         void (*port_vlan_add)(struct dsa_switch *ds, int port,
466                               const struct switchdev_obj_port_vlan *vlan);
467         int     (*port_vlan_del)(struct dsa_switch *ds, int port,
468                                  const struct switchdev_obj_port_vlan *vlan);
469         /*
470          * Forwarding database
471          */
472         int     (*port_fdb_add)(struct dsa_switch *ds, int port,
473                                 const unsigned char *addr, u16 vid);
474         int     (*port_fdb_del)(struct dsa_switch *ds, int port,
475                                 const unsigned char *addr, u16 vid);
476         int     (*port_fdb_dump)(struct dsa_switch *ds, int port,
477                                  dsa_fdb_dump_cb_t *cb, void *data);
478
479         /*
480          * Multicast database
481          */
482         int (*port_mdb_prepare)(struct dsa_switch *ds, int port,
483                                 const struct switchdev_obj_port_mdb *mdb);
484         void (*port_mdb_add)(struct dsa_switch *ds, int port,
485                              const struct switchdev_obj_port_mdb *mdb);
486         int     (*port_mdb_del)(struct dsa_switch *ds, int port,
487                                 const struct switchdev_obj_port_mdb *mdb);
488         /*
489          * RXNFC
490          */
491         int     (*get_rxnfc)(struct dsa_switch *ds, int port,
492                              struct ethtool_rxnfc *nfc, u32 *rule_locs);
493         int     (*set_rxnfc)(struct dsa_switch *ds, int port,
494                              struct ethtool_rxnfc *nfc);
495
496         /*
497          * TC integration
498          */
499         int     (*port_mirror_add)(struct dsa_switch *ds, int port,
500                                    struct dsa_mall_mirror_tc_entry *mirror,
501                                    bool ingress);
502         void    (*port_mirror_del)(struct dsa_switch *ds, int port,
503                                    struct dsa_mall_mirror_tc_entry *mirror);
504
505         /*
506          * Cross-chip operations
507          */
508         int     (*crosschip_bridge_join)(struct dsa_switch *ds, int sw_index,
509                                          int port, struct net_device *br);
510         void    (*crosschip_bridge_leave)(struct dsa_switch *ds, int sw_index,
511                                           int port, struct net_device *br);
512
513         /*
514          * PTP functionality
515          */
516         int     (*port_hwtstamp_get)(struct dsa_switch *ds, int port,
517                                      struct ifreq *ifr);
518         int     (*port_hwtstamp_set)(struct dsa_switch *ds, int port,
519                                      struct ifreq *ifr);
520         bool    (*port_txtstamp)(struct dsa_switch *ds, int port,
521                                  struct sk_buff *clone, unsigned int type);
522         bool    (*port_rxtstamp)(struct dsa_switch *ds, int port,
523                                  struct sk_buff *skb, unsigned int type);
524 };
525
526 struct dsa_switch_driver {
527         struct list_head        list;
528         const struct dsa_switch_ops *ops;
529 };
530
531 #if IS_ENABLED(CONFIG_NET_DSA_LEGACY)
532 /* Legacy driver registration */
533 void register_switch_driver(struct dsa_switch_driver *type);
534 void unregister_switch_driver(struct dsa_switch_driver *type);
535 struct mii_bus *dsa_host_dev_to_mii_bus(struct device *dev);
536
537 #else
538 static inline void register_switch_driver(struct dsa_switch_driver *type) { }
539 static inline void unregister_switch_driver(struct dsa_switch_driver *type) { }
540 static inline struct mii_bus *dsa_host_dev_to_mii_bus(struct device *dev)
541 {
542         return NULL;
543 }
544 #endif
545 struct net_device *dsa_dev_to_net_device(struct device *dev);
546
547 /* Keep inline for faster access in hot path */
548 static inline bool netdev_uses_dsa(struct net_device *dev)
549 {
550 #if IS_ENABLED(CONFIG_NET_DSA)
551         return dev->dsa_ptr && dev->dsa_ptr->rcv;
552 #endif
553         return false;
554 }
555
556 struct dsa_switch *dsa_switch_alloc(struct device *dev, size_t n);
557 void dsa_unregister_switch(struct dsa_switch *ds);
558 int dsa_register_switch(struct dsa_switch *ds);
559 #ifdef CONFIG_PM_SLEEP
560 int dsa_switch_suspend(struct dsa_switch *ds);
561 int dsa_switch_resume(struct dsa_switch *ds);
562 #else
563 static inline int dsa_switch_suspend(struct dsa_switch *ds)
564 {
565         return 0;
566 }
567 static inline int dsa_switch_resume(struct dsa_switch *ds)
568 {
569         return 0;
570 }
571 #endif /* CONFIG_PM_SLEEP */
572
573 enum dsa_notifier_type {
574         DSA_PORT_REGISTER,
575         DSA_PORT_UNREGISTER,
576 };
577
578 struct dsa_notifier_info {
579         struct net_device *dev;
580 };
581
582 struct dsa_notifier_register_info {
583         struct dsa_notifier_info info;  /* must be first */
584         struct net_device *master;
585         unsigned int port_number;
586         unsigned int switch_number;
587 };
588
589 static inline struct net_device *
590 dsa_notifier_info_to_dev(const struct dsa_notifier_info *info)
591 {
592         return info->dev;
593 }
594
595 #if IS_ENABLED(CONFIG_NET_DSA)
596 int register_dsa_notifier(struct notifier_block *nb);
597 int unregister_dsa_notifier(struct notifier_block *nb);
598 int call_dsa_notifiers(unsigned long val, struct net_device *dev,
599                        struct dsa_notifier_info *info);
600 #else
601 static inline int register_dsa_notifier(struct notifier_block *nb)
602 {
603         return 0;
604 }
605
606 static inline int unregister_dsa_notifier(struct notifier_block *nb)
607 {
608         return 0;
609 }
610
611 static inline int call_dsa_notifiers(unsigned long val, struct net_device *dev,
612                                      struct dsa_notifier_info *info)
613 {
614         return NOTIFY_DONE;
615 }
616 #endif
617
618 /* Broadcom tag specific helpers to insert and extract queue/port number */
619 #define BRCM_TAG_SET_PORT_QUEUE(p, q)   ((p) << 8 | q)
620 #define BRCM_TAG_GET_PORT(v)            ((v) >> 8)
621 #define BRCM_TAG_GET_QUEUE(v)           ((v) & 0xff)
622
623
624 int dsa_port_get_phy_strings(struct dsa_port *dp, uint8_t *data);
625 int dsa_port_get_ethtool_phy_stats(struct dsa_port *dp, uint64_t *data);
626 int dsa_port_get_phy_sset_count(struct dsa_port *dp);
627 void dsa_port_phylink_mac_change(struct dsa_switch *ds, int port, bool up);
628
629 #endif