1*ecfc9372SFlorian Fainelli /* SPDX-License-Identifier: GPL-2.0 */
2*ecfc9372SFlorian Fainelli #ifndef __DSA_PDATA_H
3*ecfc9372SFlorian Fainelli #define __DSA_PDATA_H
4*ecfc9372SFlorian Fainelli 
5*ecfc9372SFlorian Fainelli struct device;
6*ecfc9372SFlorian Fainelli struct net_device;
7*ecfc9372SFlorian Fainelli 
8*ecfc9372SFlorian Fainelli #define DSA_MAX_SWITCHES	4
9*ecfc9372SFlorian Fainelli #define DSA_MAX_PORTS		12
10*ecfc9372SFlorian Fainelli #define DSA_RTABLE_NONE		-1
11*ecfc9372SFlorian Fainelli 
12*ecfc9372SFlorian Fainelli struct dsa_chip_data {
13*ecfc9372SFlorian Fainelli 	/*
14*ecfc9372SFlorian Fainelli 	 * How to access the switch configuration registers.
15*ecfc9372SFlorian Fainelli 	 */
16*ecfc9372SFlorian Fainelli 	struct device	*host_dev;
17*ecfc9372SFlorian Fainelli 	int		sw_addr;
18*ecfc9372SFlorian Fainelli 
19*ecfc9372SFlorian Fainelli 	/*
20*ecfc9372SFlorian Fainelli 	 * Reference to network devices
21*ecfc9372SFlorian Fainelli 	 */
22*ecfc9372SFlorian Fainelli 	struct device	*netdev[DSA_MAX_PORTS];
23*ecfc9372SFlorian Fainelli 
24*ecfc9372SFlorian Fainelli 	/* set to size of eeprom if supported by the switch */
25*ecfc9372SFlorian Fainelli 	int		eeprom_len;
26*ecfc9372SFlorian Fainelli 
27*ecfc9372SFlorian Fainelli 	/* Device tree node pointer for this specific switch chip
28*ecfc9372SFlorian Fainelli 	 * used during switch setup in case additional properties
29*ecfc9372SFlorian Fainelli 	 * and resources needs to be used
30*ecfc9372SFlorian Fainelli 	 */
31*ecfc9372SFlorian Fainelli 	struct device_node *of_node;
32*ecfc9372SFlorian Fainelli 
33*ecfc9372SFlorian Fainelli 	/*
34*ecfc9372SFlorian Fainelli 	 * The names of the switch's ports.  Use "cpu" to
35*ecfc9372SFlorian Fainelli 	 * designate the switch port that the cpu is connected to,
36*ecfc9372SFlorian Fainelli 	 * "dsa" to indicate that this port is a DSA link to
37*ecfc9372SFlorian Fainelli 	 * another switch, NULL to indicate the port is unused,
38*ecfc9372SFlorian Fainelli 	 * or any other string to indicate this is a physical port.
39*ecfc9372SFlorian Fainelli 	 */
40*ecfc9372SFlorian Fainelli 	char		*port_names[DSA_MAX_PORTS];
41*ecfc9372SFlorian Fainelli 	struct device_node *port_dn[DSA_MAX_PORTS];
42*ecfc9372SFlorian Fainelli 
43*ecfc9372SFlorian Fainelli 	/*
44*ecfc9372SFlorian Fainelli 	 * An array of which element [a] indicates which port on this
45*ecfc9372SFlorian Fainelli 	 * switch should be used to send packets to that are destined
46*ecfc9372SFlorian Fainelli 	 * for switch a. Can be NULL if there is only one switch chip.
47*ecfc9372SFlorian Fainelli 	 */
48*ecfc9372SFlorian Fainelli 	s8		rtable[DSA_MAX_SWITCHES];
49*ecfc9372SFlorian Fainelli };
50*ecfc9372SFlorian Fainelli 
51*ecfc9372SFlorian Fainelli struct dsa_platform_data {
52*ecfc9372SFlorian Fainelli 	/*
53*ecfc9372SFlorian Fainelli 	 * Reference to a Linux network interface that connects
54*ecfc9372SFlorian Fainelli 	 * to the root switch chip of the tree.
55*ecfc9372SFlorian Fainelli 	 */
56*ecfc9372SFlorian Fainelli 	struct device	*netdev;
57*ecfc9372SFlorian Fainelli 	struct net_device *of_netdev;
58*ecfc9372SFlorian Fainelli 
59*ecfc9372SFlorian Fainelli 	/*
60*ecfc9372SFlorian Fainelli 	 * Info structs describing each of the switch chips
61*ecfc9372SFlorian Fainelli 	 * connected via this network interface.
62*ecfc9372SFlorian Fainelli 	 */
63*ecfc9372SFlorian Fainelli 	int		nr_chips;
64*ecfc9372SFlorian Fainelli 	struct dsa_chip_data	*chip;
65*ecfc9372SFlorian Fainelli };
66*ecfc9372SFlorian Fainelli 
67*ecfc9372SFlorian Fainelli 
68*ecfc9372SFlorian Fainelli #endif /* __DSA_PDATA_H */
69