net: dsa: add switch notifier
[linux-2.6-block.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_ether.h>
15 #include <linux/list.h>
16 #include <linux/notifier.h>
17 #include <linux/timer.h>
18 #include <linux/workqueue.h>
19 #include <linux/of.h>
20 #include <linux/phy.h>
21 #include <linux/phy_fixed.h>
22 #include <linux/ethtool.h>
23
24 struct tc_action;
25
26 enum dsa_tag_protocol {
27         DSA_TAG_PROTO_NONE = 0,
28         DSA_TAG_PROTO_DSA,
29         DSA_TAG_PROTO_TRAILER,
30         DSA_TAG_PROTO_EDSA,
31         DSA_TAG_PROTO_BRCM,
32         DSA_TAG_PROTO_QCA,
33         DSA_TAG_LAST,           /* MUST BE LAST */
34 };
35
36 #define DSA_MAX_SWITCHES        4
37 #define DSA_MAX_PORTS           12
38
39 #define DSA_RTABLE_NONE         -1
40
41 struct dsa_chip_data {
42         /*
43          * How to access the switch configuration registers.
44          */
45         struct device   *host_dev;
46         int             sw_addr;
47
48         /* set to size of eeprom if supported by the switch */
49         int             eeprom_len;
50
51         /* Device tree node pointer for this specific switch chip
52          * used during switch setup in case additional properties
53          * and resources needs to be used
54          */
55         struct device_node *of_node;
56
57         /*
58          * The names of the switch's ports.  Use "cpu" to
59          * designate the switch port that the cpu is connected to,
60          * "dsa" to indicate that this port is a DSA link to
61          * another switch, NULL to indicate the port is unused,
62          * or any other string to indicate this is a physical port.
63          */
64         char            *port_names[DSA_MAX_PORTS];
65         struct device_node *port_dn[DSA_MAX_PORTS];
66
67         /*
68          * An array of which element [a] indicates which port on this
69          * switch should be used to send packets to that are destined
70          * for switch a. Can be NULL if there is only one switch chip.
71          */
72         s8              rtable[DSA_MAX_SWITCHES];
73 };
74
75 struct dsa_platform_data {
76         /*
77          * Reference to a Linux network interface that connects
78          * to the root switch chip of the tree.
79          */
80         struct device   *netdev;
81         struct net_device *of_netdev;
82
83         /*
84          * Info structs describing each of the switch chips
85          * connected via this network interface.
86          */
87         int             nr_chips;
88         struct dsa_chip_data    *chip;
89 };
90
91 struct packet_type;
92
93 struct dsa_switch_tree {
94         struct list_head        list;
95
96         /* Notifier chain for switch-wide events */
97         struct raw_notifier_head        nh;
98
99         /* Tree identifier */
100         u32 tree;
101
102         /* Number of switches attached to this tree */
103         struct kref refcount;
104
105         /* Has this tree been applied to the hardware? */
106         bool applied;
107
108         /*
109          * Configuration data for the platform device that owns
110          * this dsa switch tree instance.
111          */
112         struct dsa_platform_data        *pd;
113
114         /*
115          * Reference to network device to use, and which tagging
116          * protocol to use.
117          */
118         struct net_device       *master_netdev;
119         int                     (*rcv)(struct sk_buff *skb,
120                                        struct net_device *dev,
121                                        struct packet_type *pt,
122                                        struct net_device *orig_dev);
123
124         /*
125          * Original copy of the master netdev ethtool_ops
126          */
127         struct ethtool_ops      master_ethtool_ops;
128         const struct ethtool_ops *master_orig_ethtool_ops;
129
130         /*
131          * The switch and port to which the CPU is attached.
132          */
133         struct dsa_switch       *cpu_switch;
134         s8                      cpu_port;
135
136         /*
137          * Data for the individual switch chips.
138          */
139         struct dsa_switch       *ds[DSA_MAX_SWITCHES];
140
141         /*
142          * Tagging protocol operations for adding and removing an
143          * encapsulation tag.
144          */
145         const struct dsa_device_ops *tag_ops;
146 };
147
148 /* TC matchall action types, only mirroring for now */
149 enum dsa_port_mall_action_type {
150         DSA_PORT_MALL_MIRROR,
151 };
152
153 /* TC mirroring entry */
154 struct dsa_mall_mirror_tc_entry {
155         u8 to_local_port;
156         bool ingress;
157 };
158
159 /* TC matchall entry */
160 struct dsa_mall_tc_entry {
161         struct list_head list;
162         unsigned long cookie;
163         enum dsa_port_mall_action_type type;
164         union {
165                 struct dsa_mall_mirror_tc_entry mirror;
166         };
167 };
168
169
170 struct dsa_port {
171         struct dsa_switch       *ds;
172         unsigned int            index;
173         struct net_device       *netdev;
174         struct device_node      *dn;
175         unsigned int            ageing_time;
176         u8                      stp_state;
177         struct net_device       *bridge_dev;
178 };
179
180 struct dsa_switch {
181         struct device *dev;
182
183         /*
184          * Parent switch tree, and switch index.
185          */
186         struct dsa_switch_tree  *dst;
187         int                     index;
188
189         /* Listener for switch fabric events */
190         struct notifier_block   nb;
191
192         /*
193          * Give the switch driver somewhere to hang its private data
194          * structure.
195          */
196         void *priv;
197
198         /*
199          * Configuration data for this switch.
200          */
201         struct dsa_chip_data    *cd;
202
203         /*
204          * The switch operations.
205          */
206         const struct dsa_switch_ops     *ops;
207
208         /*
209          * An array of which element [a] indicates which port on this
210          * switch should be used to send packets to that are destined
211          * for switch a. Can be NULL if there is only one switch chip.
212          */
213         s8              rtable[DSA_MAX_SWITCHES];
214
215         /*
216          * The lower device this switch uses to talk to the host
217          */
218         struct net_device *master_netdev;
219
220         /*
221          * Slave mii_bus and devices for the individual ports.
222          */
223         u32                     dsa_port_mask;
224         u32                     cpu_port_mask;
225         u32                     enabled_port_mask;
226         u32                     phys_mii_mask;
227         struct mii_bus          *slave_mii_bus;
228
229         /* Dynamically allocated ports, keep last */
230         size_t num_ports;
231         struct dsa_port ports[];
232 };
233
234 static inline bool dsa_is_cpu_port(struct dsa_switch *ds, int p)
235 {
236         return !!(ds == ds->dst->cpu_switch && p == ds->dst->cpu_port);
237 }
238
239 static inline bool dsa_is_dsa_port(struct dsa_switch *ds, int p)
240 {
241         return !!((ds->dsa_port_mask) & (1 << p));
242 }
243
244 static inline bool dsa_is_port_initialized(struct dsa_switch *ds, int p)
245 {
246         return ds->enabled_port_mask & (1 << p) && ds->ports[p].netdev;
247 }
248
249 static inline u8 dsa_upstream_port(struct dsa_switch *ds)
250 {
251         struct dsa_switch_tree *dst = ds->dst;
252
253         /*
254          * If this is the root switch (i.e. the switch that connects
255          * to the CPU), return the cpu port number on this switch.
256          * Else return the (DSA) port number that connects to the
257          * switch that is one hop closer to the cpu.
258          */
259         if (dst->cpu_switch == ds)
260                 return dst->cpu_port;
261         else
262                 return ds->rtable[dst->cpu_switch->index];
263 }
264
265 struct switchdev_trans;
266 struct switchdev_obj;
267 struct switchdev_obj_port_fdb;
268 struct switchdev_obj_port_mdb;
269 struct switchdev_obj_port_vlan;
270
271 struct dsa_switch_ops {
272         /*
273          * Probing and setup.
274          */
275         const char      *(*probe)(struct device *dsa_dev,
276                                   struct device *host_dev, int sw_addr,
277                                   void **priv);
278
279         enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *ds);
280
281         int     (*setup)(struct dsa_switch *ds);
282         int     (*set_addr)(struct dsa_switch *ds, u8 *addr);
283         u32     (*get_phy_flags)(struct dsa_switch *ds, int port);
284
285         /*
286          * Access to the switch's PHY registers.
287          */
288         int     (*phy_read)(struct dsa_switch *ds, int port, int regnum);
289         int     (*phy_write)(struct dsa_switch *ds, int port,
290                              int regnum, u16 val);
291
292         /*
293          * Link state adjustment (called from libphy)
294          */
295         void    (*adjust_link)(struct dsa_switch *ds, int port,
296                                 struct phy_device *phydev);
297         void    (*fixed_link_update)(struct dsa_switch *ds, int port,
298                                 struct fixed_phy_status *st);
299
300         /*
301          * ethtool hardware statistics.
302          */
303         void    (*get_strings)(struct dsa_switch *ds, int port, uint8_t *data);
304         void    (*get_ethtool_stats)(struct dsa_switch *ds,
305                                      int port, uint64_t *data);
306         int     (*get_sset_count)(struct dsa_switch *ds);
307
308         /*
309          * ethtool Wake-on-LAN
310          */
311         void    (*get_wol)(struct dsa_switch *ds, int port,
312                            struct ethtool_wolinfo *w);
313         int     (*set_wol)(struct dsa_switch *ds, int port,
314                            struct ethtool_wolinfo *w);
315
316         /*
317          * Suspend and resume
318          */
319         int     (*suspend)(struct dsa_switch *ds);
320         int     (*resume)(struct dsa_switch *ds);
321
322         /*
323          * Port enable/disable
324          */
325         int     (*port_enable)(struct dsa_switch *ds, int port,
326                                struct phy_device *phy);
327         void    (*port_disable)(struct dsa_switch *ds, int port,
328                                 struct phy_device *phy);
329
330         /*
331          * EEE setttings
332          */
333         int     (*set_eee)(struct dsa_switch *ds, int port,
334                            struct phy_device *phydev,
335                            struct ethtool_eee *e);
336         int     (*get_eee)(struct dsa_switch *ds, int port,
337                            struct ethtool_eee *e);
338
339         /* EEPROM access */
340         int     (*get_eeprom_len)(struct dsa_switch *ds);
341         int     (*get_eeprom)(struct dsa_switch *ds,
342                               struct ethtool_eeprom *eeprom, u8 *data);
343         int     (*set_eeprom)(struct dsa_switch *ds,
344                               struct ethtool_eeprom *eeprom, u8 *data);
345
346         /*
347          * Register access.
348          */
349         int     (*get_regs_len)(struct dsa_switch *ds, int port);
350         void    (*get_regs)(struct dsa_switch *ds, int port,
351                             struct ethtool_regs *regs, void *p);
352
353         /*
354          * Bridge integration
355          */
356         int     (*set_ageing_time)(struct dsa_switch *ds, unsigned int msecs);
357         int     (*port_bridge_join)(struct dsa_switch *ds, int port,
358                                     struct net_device *bridge);
359         void    (*port_bridge_leave)(struct dsa_switch *ds, int port,
360                                      struct net_device *bridge);
361         void    (*port_stp_state_set)(struct dsa_switch *ds, int port,
362                                       u8 state);
363         void    (*port_fast_age)(struct dsa_switch *ds, int port);
364
365         /*
366          * VLAN support
367          */
368         int     (*port_vlan_filtering)(struct dsa_switch *ds, int port,
369                                        bool vlan_filtering);
370         int     (*port_vlan_prepare)(struct dsa_switch *ds, int port,
371                                      const struct switchdev_obj_port_vlan *vlan,
372                                      struct switchdev_trans *trans);
373         void    (*port_vlan_add)(struct dsa_switch *ds, int port,
374                                  const struct switchdev_obj_port_vlan *vlan,
375                                  struct switchdev_trans *trans);
376         int     (*port_vlan_del)(struct dsa_switch *ds, int port,
377                                  const struct switchdev_obj_port_vlan *vlan);
378         int     (*port_vlan_dump)(struct dsa_switch *ds, int port,
379                                   struct switchdev_obj_port_vlan *vlan,
380                                   int (*cb)(struct switchdev_obj *obj));
381
382         /*
383          * Forwarding database
384          */
385         int     (*port_fdb_prepare)(struct dsa_switch *ds, int port,
386                                     const struct switchdev_obj_port_fdb *fdb,
387                                     struct switchdev_trans *trans);
388         void    (*port_fdb_add)(struct dsa_switch *ds, int port,
389                                 const struct switchdev_obj_port_fdb *fdb,
390                                 struct switchdev_trans *trans);
391         int     (*port_fdb_del)(struct dsa_switch *ds, int port,
392                                 const struct switchdev_obj_port_fdb *fdb);
393         int     (*port_fdb_dump)(struct dsa_switch *ds, int port,
394                                  struct switchdev_obj_port_fdb *fdb,
395                                  int (*cb)(struct switchdev_obj *obj));
396
397         /*
398          * Multicast database
399          */
400         int     (*port_mdb_prepare)(struct dsa_switch *ds, int port,
401                                     const struct switchdev_obj_port_mdb *mdb,
402                                     struct switchdev_trans *trans);
403         void    (*port_mdb_add)(struct dsa_switch *ds, int port,
404                                 const struct switchdev_obj_port_mdb *mdb,
405                                 struct switchdev_trans *trans);
406         int     (*port_mdb_del)(struct dsa_switch *ds, int port,
407                                 const struct switchdev_obj_port_mdb *mdb);
408         int     (*port_mdb_dump)(struct dsa_switch *ds, int port,
409                                  struct switchdev_obj_port_mdb *mdb,
410                                  int (*cb)(struct switchdev_obj *obj));
411
412         /*
413          * RXNFC
414          */
415         int     (*get_rxnfc)(struct dsa_switch *ds, int port,
416                              struct ethtool_rxnfc *nfc, u32 *rule_locs);
417         int     (*set_rxnfc)(struct dsa_switch *ds, int port,
418                              struct ethtool_rxnfc *nfc);
419
420         /*
421          * TC integration
422          */
423         int     (*port_mirror_add)(struct dsa_switch *ds, int port,
424                                    struct dsa_mall_mirror_tc_entry *mirror,
425                                    bool ingress);
426         void    (*port_mirror_del)(struct dsa_switch *ds, int port,
427                                    struct dsa_mall_mirror_tc_entry *mirror);
428 };
429
430 struct dsa_switch_driver {
431         struct list_head        list;
432         const struct dsa_switch_ops *ops;
433 };
434
435 void register_switch_driver(struct dsa_switch_driver *type);
436 void unregister_switch_driver(struct dsa_switch_driver *type);
437 struct mii_bus *dsa_host_dev_to_mii_bus(struct device *dev);
438
439 static inline bool dsa_uses_tagged_protocol(struct dsa_switch_tree *dst)
440 {
441         return dst->rcv != NULL;
442 }
443
444 struct dsa_switch *dsa_switch_alloc(struct device *dev, size_t n);
445 void dsa_unregister_switch(struct dsa_switch *ds);
446 int dsa_register_switch(struct dsa_switch *ds, struct device *dev);
447 #ifdef CONFIG_PM_SLEEP
448 int dsa_switch_suspend(struct dsa_switch *ds);
449 int dsa_switch_resume(struct dsa_switch *ds);
450 #else
451 static inline int dsa_switch_suspend(struct dsa_switch *ds)
452 {
453         return 0;
454 }
455 static inline int dsa_switch_resume(struct dsa_switch *ds)
456 {
457         return 0;
458 }
459 #endif /* CONFIG_PM_SLEEP */
460
461 #endif