xref: /openbmc/linux/include/net/dsa.h (revision 5ff32883)
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
630