xref: /linux-6.15/include/linux/dsa/loop.h (revision b6459415)
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