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