16c84a589SFlorian Fainelli /* SPDX-License-Identifier: GPL-2.0 */ 26c84a589SFlorian Fainelli #ifndef DSA_LOOP_H 36c84a589SFlorian Fainelli #define DSA_LOOP_H 46c84a589SFlorian Fainelli 5*b6459415SJakub Kicinski #include <linux/if_vlan.h> 66c84a589SFlorian Fainelli #include <linux/types.h> 76c84a589SFlorian Fainelli #include <linux/ethtool.h> 86c84a589SFlorian Fainelli #include <net/dsa.h> 96c84a589SFlorian Fainelli 106c84a589SFlorian Fainelli struct dsa_loop_vlan { 116c84a589SFlorian Fainelli u16 members; 126c84a589SFlorian Fainelli u16 untagged; 136c84a589SFlorian Fainelli }; 146c84a589SFlorian Fainelli 156c84a589SFlorian Fainelli struct dsa_loop_mib_entry { 166c84a589SFlorian Fainelli char name[ETH_GSTRING_LEN]; 176c84a589SFlorian Fainelli unsigned long val; 186c84a589SFlorian Fainelli }; 196c84a589SFlorian Fainelli 206c84a589SFlorian Fainelli enum dsa_loop_mib_counters { 216c84a589SFlorian Fainelli DSA_LOOP_PHY_READ_OK, 226c84a589SFlorian Fainelli DSA_LOOP_PHY_READ_ERR, 236c84a589SFlorian Fainelli DSA_LOOP_PHY_WRITE_OK, 246c84a589SFlorian Fainelli DSA_LOOP_PHY_WRITE_ERR, 256c84a589SFlorian Fainelli __DSA_LOOP_CNT_MAX, 266c84a589SFlorian Fainelli }; 276c84a589SFlorian Fainelli 286c84a589SFlorian Fainelli struct dsa_loop_port { 296c84a589SFlorian Fainelli struct dsa_loop_mib_entry mib[__DSA_LOOP_CNT_MAX]; 306c84a589SFlorian Fainelli u16 pvid; 31c99194edSFlorian Fainelli int mtu; 326c84a589SFlorian Fainelli }; 336c84a589SFlorian Fainelli 346c84a589SFlorian Fainelli struct dsa_loop_priv { 356c84a589SFlorian Fainelli struct mii_bus *bus; 366c84a589SFlorian Fainelli unsigned int port_base; 376c84a589SFlorian Fainelli struct dsa_loop_vlan vlans[VLAN_N_VID]; 386c84a589SFlorian Fainelli struct net_device *netdev; 396c84a589SFlorian Fainelli struct dsa_loop_port ports[DSA_MAX_PORTS]; 406c84a589SFlorian Fainelli }; 416c84a589SFlorian Fainelli 426c84a589SFlorian Fainelli #endif /* DSA_LOOP_H */ 43