1356c3e9aSEgil Hjelmeland /* Included by drivers/net/dsa/lan9303.h and net/dsa/tag_lan9303.c */ 2356c3e9aSEgil Hjelmeland #include <linux/if_ether.h> 3356c3e9aSEgil Hjelmeland 4356c3e9aSEgil Hjelmeland struct lan9303; 5356c3e9aSEgil Hjelmeland 6356c3e9aSEgil Hjelmeland struct lan9303_phy_ops { 7356c3e9aSEgil Hjelmeland /* PHY 1 and 2 access*/ 8356c3e9aSEgil Hjelmeland int (*phy_read)(struct lan9303 *chip, int port, int regnum); 9356c3e9aSEgil Hjelmeland int (*phy_write)(struct lan9303 *chip, int port, 10356c3e9aSEgil Hjelmeland int regnum, u16 val); 11356c3e9aSEgil Hjelmeland }; 12356c3e9aSEgil Hjelmeland 13356c3e9aSEgil Hjelmeland #define LAN9303_NUM_ALR_RECORDS 512 14356c3e9aSEgil Hjelmeland struct lan9303_alr_cache_entry { 15356c3e9aSEgil Hjelmeland u8 mac_addr[ETH_ALEN]; 16356c3e9aSEgil Hjelmeland u8 port_map; /* Bitmap of ports. Zero if unused entry */ 17620a5c86SEgil Hjelmeland u8 stp_override; /* non zero if set LAN9303_ALR_DAT1_AGE_OVERRID */ 18356c3e9aSEgil Hjelmeland }; 19356c3e9aSEgil Hjelmeland 20356c3e9aSEgil Hjelmeland struct lan9303 { 21356c3e9aSEgil Hjelmeland struct device *dev; 22356c3e9aSEgil Hjelmeland struct regmap *regmap; 23356c3e9aSEgil Hjelmeland struct regmap_irq_chip_data *irq_data; 24356c3e9aSEgil Hjelmeland struct gpio_desc *reset_gpio; 25356c3e9aSEgil Hjelmeland u32 reset_duration; /* in [ms] */ 26*b17c6b1fSEgil Hjelmeland int phy_addr_base; 27356c3e9aSEgil Hjelmeland struct dsa_switch *ds; 28356c3e9aSEgil Hjelmeland struct mutex indirect_mutex; /* protect indexed register access */ 292e8d243eSEgil Hjelmeland struct mutex alr_mutex; /* protect ALR access */ 30356c3e9aSEgil Hjelmeland const struct lan9303_phy_ops *ops; 31356c3e9aSEgil Hjelmeland bool is_bridged; /* true if port 1 and 2 are bridged */ 32620a5c86SEgil Hjelmeland 33620a5c86SEgil Hjelmeland /* remember LAN9303_SWE_PORT_STATE while not bridged */ 34620a5c86SEgil Hjelmeland u32 swe_port_state; 35356c3e9aSEgil Hjelmeland /* LAN9303 do not offer reading specific ALR entry. Cache all 36356c3e9aSEgil Hjelmeland * static entries in a flat table 37356c3e9aSEgil Hjelmeland **/ 38356c3e9aSEgil Hjelmeland struct lan9303_alr_cache_entry alr_cache[LAN9303_NUM_ALR_RECORDS]; 39356c3e9aSEgil Hjelmeland }; 40