1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef DSA_LOOP_H 3*4882a593Smuzhiyun #define DSA_LOOP_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/types.h> 6*4882a593Smuzhiyun #include <linux/ethtool.h> 7*4882a593Smuzhiyun #include <net/dsa.h> 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun struct dsa_loop_vlan { 10*4882a593Smuzhiyun u16 members; 11*4882a593Smuzhiyun u16 untagged; 12*4882a593Smuzhiyun }; 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun struct dsa_loop_mib_entry { 15*4882a593Smuzhiyun char name[ETH_GSTRING_LEN]; 16*4882a593Smuzhiyun unsigned long val; 17*4882a593Smuzhiyun }; 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun enum dsa_loop_mib_counters { 20*4882a593Smuzhiyun DSA_LOOP_PHY_READ_OK, 21*4882a593Smuzhiyun DSA_LOOP_PHY_READ_ERR, 22*4882a593Smuzhiyun DSA_LOOP_PHY_WRITE_OK, 23*4882a593Smuzhiyun DSA_LOOP_PHY_WRITE_ERR, 24*4882a593Smuzhiyun __DSA_LOOP_CNT_MAX, 25*4882a593Smuzhiyun }; 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun struct dsa_loop_port { 28*4882a593Smuzhiyun struct dsa_loop_mib_entry mib[__DSA_LOOP_CNT_MAX]; 29*4882a593Smuzhiyun u16 pvid; 30*4882a593Smuzhiyun int mtu; 31*4882a593Smuzhiyun }; 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun struct dsa_loop_priv { 34*4882a593Smuzhiyun struct mii_bus *bus; 35*4882a593Smuzhiyun unsigned int port_base; 36*4882a593Smuzhiyun struct dsa_loop_vlan vlans[VLAN_N_VID]; 37*4882a593Smuzhiyun struct net_device *netdev; 38*4882a593Smuzhiyun struct dsa_loop_port ports[DSA_MAX_PORTS]; 39*4882a593Smuzhiyun }; 40*4882a593Smuzhiyun 41*4882a593Smuzhiyun #endif /* DSA_LOOP_H */ 42