xref: /openbmc/linux/net/dsa/port.h (revision ff6ac4d0)
1022bba63SVladimir Oltean /* SPDX-License-Identifier: GPL-2.0-or-later */
2022bba63SVladimir Oltean 
3022bba63SVladimir Oltean #ifndef __DSA_PORT_H
4022bba63SVladimir Oltean #define __DSA_PORT_H
5022bba63SVladimir Oltean 
6022bba63SVladimir Oltean #include <linux/types.h>
7022bba63SVladimir Oltean #include <net/dsa.h>
8022bba63SVladimir Oltean 
9022bba63SVladimir Oltean struct ifreq;
10022bba63SVladimir Oltean struct netdev_lag_lower_state_info;
11022bba63SVladimir Oltean struct netdev_lag_upper_info;
12022bba63SVladimir Oltean struct netlink_ext_ack;
13022bba63SVladimir Oltean struct switchdev_mst_state;
14022bba63SVladimir Oltean struct switchdev_obj_port_mdb;
15022bba63SVladimir Oltean struct switchdev_vlan_msti;
16022bba63SVladimir Oltean struct phy_device;
17022bba63SVladimir Oltean 
18*ff6ac4d0SVladimir Oltean bool dsa_port_supports_hwtstamp(struct dsa_port *dp);
19022bba63SVladimir Oltean void dsa_port_set_tag_protocol(struct dsa_port *cpu_dp,
20022bba63SVladimir Oltean 			       const struct dsa_device_ops *tag_ops);
21022bba63SVladimir Oltean int dsa_port_set_state(struct dsa_port *dp, u8 state, bool do_fast_age);
22022bba63SVladimir Oltean int dsa_port_set_mst_state(struct dsa_port *dp,
23022bba63SVladimir Oltean 			   const struct switchdev_mst_state *state,
24022bba63SVladimir Oltean 			   struct netlink_ext_ack *extack);
25022bba63SVladimir Oltean int dsa_port_enable_rt(struct dsa_port *dp, struct phy_device *phy);
26022bba63SVladimir Oltean int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy);
27022bba63SVladimir Oltean void dsa_port_disable_rt(struct dsa_port *dp);
28022bba63SVladimir Oltean void dsa_port_disable(struct dsa_port *dp);
29022bba63SVladimir Oltean int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br,
30022bba63SVladimir Oltean 			 struct netlink_ext_ack *extack);
31022bba63SVladimir Oltean void dsa_port_pre_bridge_leave(struct dsa_port *dp, struct net_device *br);
32022bba63SVladimir Oltean void dsa_port_bridge_leave(struct dsa_port *dp, struct net_device *br);
33022bba63SVladimir Oltean int dsa_port_lag_change(struct dsa_port *dp,
34022bba63SVladimir Oltean 			struct netdev_lag_lower_state_info *linfo);
35022bba63SVladimir Oltean int dsa_port_lag_join(struct dsa_port *dp, struct net_device *lag_dev,
36022bba63SVladimir Oltean 		      struct netdev_lag_upper_info *uinfo,
37022bba63SVladimir Oltean 		      struct netlink_ext_ack *extack);
38022bba63SVladimir Oltean void dsa_port_pre_lag_leave(struct dsa_port *dp, struct net_device *lag_dev);
39022bba63SVladimir Oltean void dsa_port_lag_leave(struct dsa_port *dp, struct net_device *lag_dev);
40022bba63SVladimir Oltean int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering,
41022bba63SVladimir Oltean 			    struct netlink_ext_ack *extack);
42022bba63SVladimir Oltean bool dsa_port_skip_vlan_configuration(struct dsa_port *dp);
43022bba63SVladimir Oltean int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock);
44022bba63SVladimir Oltean int dsa_port_mst_enable(struct dsa_port *dp, bool on,
45022bba63SVladimir Oltean 			struct netlink_ext_ack *extack);
46022bba63SVladimir Oltean int dsa_port_vlan_msti(struct dsa_port *dp,
47022bba63SVladimir Oltean 		       const struct switchdev_vlan_msti *msti);
48022bba63SVladimir Oltean int dsa_port_mtu_change(struct dsa_port *dp, int new_mtu);
49022bba63SVladimir Oltean int dsa_port_fdb_add(struct dsa_port *dp, const unsigned char *addr,
50022bba63SVladimir Oltean 		     u16 vid);
51022bba63SVladimir Oltean int dsa_port_fdb_del(struct dsa_port *dp, const unsigned char *addr,
52022bba63SVladimir Oltean 		     u16 vid);
53022bba63SVladimir Oltean int dsa_port_standalone_host_fdb_add(struct dsa_port *dp,
54022bba63SVladimir Oltean 				     const unsigned char *addr, u16 vid);
55022bba63SVladimir Oltean int dsa_port_standalone_host_fdb_del(struct dsa_port *dp,
56022bba63SVladimir Oltean 				     const unsigned char *addr, u16 vid);
57022bba63SVladimir Oltean int dsa_port_bridge_host_fdb_add(struct dsa_port *dp, const unsigned char *addr,
58022bba63SVladimir Oltean 				 u16 vid);
59022bba63SVladimir Oltean int dsa_port_bridge_host_fdb_del(struct dsa_port *dp, const unsigned char *addr,
60022bba63SVladimir Oltean 				 u16 vid);
61022bba63SVladimir Oltean int dsa_port_lag_fdb_add(struct dsa_port *dp, const unsigned char *addr,
62022bba63SVladimir Oltean 			 u16 vid);
63022bba63SVladimir Oltean int dsa_port_lag_fdb_del(struct dsa_port *dp, const unsigned char *addr,
64022bba63SVladimir Oltean 			 u16 vid);
65022bba63SVladimir Oltean int dsa_port_fdb_dump(struct dsa_port *dp, dsa_fdb_dump_cb_t *cb, void *data);
66022bba63SVladimir Oltean int dsa_port_mdb_add(const struct dsa_port *dp,
67022bba63SVladimir Oltean 		     const struct switchdev_obj_port_mdb *mdb);
68022bba63SVladimir Oltean int dsa_port_mdb_del(const struct dsa_port *dp,
69022bba63SVladimir Oltean 		     const struct switchdev_obj_port_mdb *mdb);
70022bba63SVladimir Oltean int dsa_port_standalone_host_mdb_add(const struct dsa_port *dp,
71022bba63SVladimir Oltean 				     const struct switchdev_obj_port_mdb *mdb);
72022bba63SVladimir Oltean int dsa_port_standalone_host_mdb_del(const struct dsa_port *dp,
73022bba63SVladimir Oltean 				     const struct switchdev_obj_port_mdb *mdb);
74022bba63SVladimir Oltean int dsa_port_bridge_host_mdb_add(const struct dsa_port *dp,
75022bba63SVladimir Oltean 				 const struct switchdev_obj_port_mdb *mdb);
76022bba63SVladimir Oltean int dsa_port_bridge_host_mdb_del(const struct dsa_port *dp,
77022bba63SVladimir Oltean 				 const struct switchdev_obj_port_mdb *mdb);
78022bba63SVladimir Oltean int dsa_port_pre_bridge_flags(const struct dsa_port *dp,
79022bba63SVladimir Oltean 			      struct switchdev_brport_flags flags,
80022bba63SVladimir Oltean 			      struct netlink_ext_ack *extack);
81022bba63SVladimir Oltean int dsa_port_bridge_flags(struct dsa_port *dp,
82022bba63SVladimir Oltean 			  struct switchdev_brport_flags flags,
83022bba63SVladimir Oltean 			  struct netlink_ext_ack *extack);
84022bba63SVladimir Oltean int dsa_port_vlan_add(struct dsa_port *dp,
85022bba63SVladimir Oltean 		      const struct switchdev_obj_port_vlan *vlan,
86022bba63SVladimir Oltean 		      struct netlink_ext_ack *extack);
87022bba63SVladimir Oltean int dsa_port_vlan_del(struct dsa_port *dp,
88022bba63SVladimir Oltean 		      const struct switchdev_obj_port_vlan *vlan);
89022bba63SVladimir Oltean int dsa_port_host_vlan_add(struct dsa_port *dp,
90022bba63SVladimir Oltean 			   const struct switchdev_obj_port_vlan *vlan,
91022bba63SVladimir Oltean 			   struct netlink_ext_ack *extack);
92022bba63SVladimir Oltean int dsa_port_host_vlan_del(struct dsa_port *dp,
93022bba63SVladimir Oltean 			   const struct switchdev_obj_port_vlan *vlan);
94022bba63SVladimir Oltean int dsa_port_mrp_add(const struct dsa_port *dp,
95022bba63SVladimir Oltean 		     const struct switchdev_obj_mrp *mrp);
96022bba63SVladimir Oltean int dsa_port_mrp_del(const struct dsa_port *dp,
97022bba63SVladimir Oltean 		     const struct switchdev_obj_mrp *mrp);
98022bba63SVladimir Oltean int dsa_port_mrp_add_ring_role(const struct dsa_port *dp,
99022bba63SVladimir Oltean 			       const struct switchdev_obj_ring_role_mrp *mrp);
100022bba63SVladimir Oltean int dsa_port_mrp_del_ring_role(const struct dsa_port *dp,
101022bba63SVladimir Oltean 			       const struct switchdev_obj_ring_role_mrp *mrp);
102022bba63SVladimir Oltean int dsa_port_phylink_create(struct dsa_port *dp);
103022bba63SVladimir Oltean void dsa_port_phylink_destroy(struct dsa_port *dp);
104022bba63SVladimir Oltean int dsa_shared_port_link_register_of(struct dsa_port *dp);
105022bba63SVladimir Oltean void dsa_shared_port_link_unregister_of(struct dsa_port *dp);
106022bba63SVladimir Oltean int dsa_port_hsr_join(struct dsa_port *dp, struct net_device *hsr);
107022bba63SVladimir Oltean void dsa_port_hsr_leave(struct dsa_port *dp, struct net_device *hsr);
108022bba63SVladimir Oltean int dsa_port_tag_8021q_vlan_add(struct dsa_port *dp, u16 vid, bool broadcast);
109022bba63SVladimir Oltean void dsa_port_tag_8021q_vlan_del(struct dsa_port *dp, u16 vid, bool broadcast);
110022bba63SVladimir Oltean void dsa_port_set_host_flood(struct dsa_port *dp, bool uc, bool mc);
111022bba63SVladimir Oltean int dsa_port_change_master(struct dsa_port *dp, struct net_device *master,
112022bba63SVladimir Oltean 			   struct netlink_ext_ack *extack);
113022bba63SVladimir Oltean 
114022bba63SVladimir Oltean #endif
115