162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci#ifndef __DSA_PORT_H
462306a36Sopenharmony_ci#define __DSA_PORT_H
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#include <linux/types.h>
762306a36Sopenharmony_ci#include <net/dsa.h>
862306a36Sopenharmony_ci
962306a36Sopenharmony_cistruct ifreq;
1062306a36Sopenharmony_cistruct netdev_lag_lower_state_info;
1162306a36Sopenharmony_cistruct netdev_lag_upper_info;
1262306a36Sopenharmony_cistruct netlink_ext_ack;
1362306a36Sopenharmony_cistruct switchdev_mst_state;
1462306a36Sopenharmony_cistruct switchdev_obj_port_mdb;
1562306a36Sopenharmony_cistruct switchdev_vlan_msti;
1662306a36Sopenharmony_cistruct phy_device;
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_cibool dsa_port_supports_hwtstamp(struct dsa_port *dp);
1962306a36Sopenharmony_civoid dsa_port_set_tag_protocol(struct dsa_port *cpu_dp,
2062306a36Sopenharmony_ci			       const struct dsa_device_ops *tag_ops);
2162306a36Sopenharmony_ciint dsa_port_set_state(struct dsa_port *dp, u8 state, bool do_fast_age);
2262306a36Sopenharmony_ciint dsa_port_set_mst_state(struct dsa_port *dp,
2362306a36Sopenharmony_ci			   const struct switchdev_mst_state *state,
2462306a36Sopenharmony_ci			   struct netlink_ext_ack *extack);
2562306a36Sopenharmony_ciint dsa_port_enable_rt(struct dsa_port *dp, struct phy_device *phy);
2662306a36Sopenharmony_ciint dsa_port_enable(struct dsa_port *dp, struct phy_device *phy);
2762306a36Sopenharmony_civoid dsa_port_disable_rt(struct dsa_port *dp);
2862306a36Sopenharmony_civoid dsa_port_disable(struct dsa_port *dp);
2962306a36Sopenharmony_ciint dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br,
3062306a36Sopenharmony_ci			 struct netlink_ext_ack *extack);
3162306a36Sopenharmony_civoid dsa_port_pre_bridge_leave(struct dsa_port *dp, struct net_device *br);
3262306a36Sopenharmony_civoid dsa_port_bridge_leave(struct dsa_port *dp, struct net_device *br);
3362306a36Sopenharmony_ciint dsa_port_lag_change(struct dsa_port *dp,
3462306a36Sopenharmony_ci			struct netdev_lag_lower_state_info *linfo);
3562306a36Sopenharmony_ciint dsa_port_lag_join(struct dsa_port *dp, struct net_device *lag_dev,
3662306a36Sopenharmony_ci		      struct netdev_lag_upper_info *uinfo,
3762306a36Sopenharmony_ci		      struct netlink_ext_ack *extack);
3862306a36Sopenharmony_civoid dsa_port_pre_lag_leave(struct dsa_port *dp, struct net_device *lag_dev);
3962306a36Sopenharmony_civoid dsa_port_lag_leave(struct dsa_port *dp, struct net_device *lag_dev);
4062306a36Sopenharmony_ciint dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering,
4162306a36Sopenharmony_ci			    struct netlink_ext_ack *extack);
4262306a36Sopenharmony_cibool dsa_port_skip_vlan_configuration(struct dsa_port *dp);
4362306a36Sopenharmony_ciint dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock);
4462306a36Sopenharmony_ciint dsa_port_mst_enable(struct dsa_port *dp, bool on,
4562306a36Sopenharmony_ci			struct netlink_ext_ack *extack);
4662306a36Sopenharmony_ciint dsa_port_vlan_msti(struct dsa_port *dp,
4762306a36Sopenharmony_ci		       const struct switchdev_vlan_msti *msti);
4862306a36Sopenharmony_ciint dsa_port_mtu_change(struct dsa_port *dp, int new_mtu);
4962306a36Sopenharmony_ciint dsa_port_fdb_add(struct dsa_port *dp, const unsigned char *addr,
5062306a36Sopenharmony_ci		     u16 vid);
5162306a36Sopenharmony_ciint dsa_port_fdb_del(struct dsa_port *dp, const unsigned char *addr,
5262306a36Sopenharmony_ci		     u16 vid);
5362306a36Sopenharmony_ciint dsa_port_standalone_host_fdb_add(struct dsa_port *dp,
5462306a36Sopenharmony_ci				     const unsigned char *addr, u16 vid);
5562306a36Sopenharmony_ciint dsa_port_standalone_host_fdb_del(struct dsa_port *dp,
5662306a36Sopenharmony_ci				     const unsigned char *addr, u16 vid);
5762306a36Sopenharmony_ciint dsa_port_bridge_host_fdb_add(struct dsa_port *dp, const unsigned char *addr,
5862306a36Sopenharmony_ci				 u16 vid);
5962306a36Sopenharmony_ciint dsa_port_bridge_host_fdb_del(struct dsa_port *dp, const unsigned char *addr,
6062306a36Sopenharmony_ci				 u16 vid);
6162306a36Sopenharmony_ciint dsa_port_lag_fdb_add(struct dsa_port *dp, const unsigned char *addr,
6262306a36Sopenharmony_ci			 u16 vid);
6362306a36Sopenharmony_ciint dsa_port_lag_fdb_del(struct dsa_port *dp, const unsigned char *addr,
6462306a36Sopenharmony_ci			 u16 vid);
6562306a36Sopenharmony_ciint dsa_port_fdb_dump(struct dsa_port *dp, dsa_fdb_dump_cb_t *cb, void *data);
6662306a36Sopenharmony_ciint dsa_port_mdb_add(const struct dsa_port *dp,
6762306a36Sopenharmony_ci		     const struct switchdev_obj_port_mdb *mdb);
6862306a36Sopenharmony_ciint dsa_port_mdb_del(const struct dsa_port *dp,
6962306a36Sopenharmony_ci		     const struct switchdev_obj_port_mdb *mdb);
7062306a36Sopenharmony_ciint dsa_port_standalone_host_mdb_add(const struct dsa_port *dp,
7162306a36Sopenharmony_ci				     const struct switchdev_obj_port_mdb *mdb);
7262306a36Sopenharmony_ciint dsa_port_standalone_host_mdb_del(const struct dsa_port *dp,
7362306a36Sopenharmony_ci				     const struct switchdev_obj_port_mdb *mdb);
7462306a36Sopenharmony_ciint dsa_port_bridge_host_mdb_add(const struct dsa_port *dp,
7562306a36Sopenharmony_ci				 const struct switchdev_obj_port_mdb *mdb);
7662306a36Sopenharmony_ciint dsa_port_bridge_host_mdb_del(const struct dsa_port *dp,
7762306a36Sopenharmony_ci				 const struct switchdev_obj_port_mdb *mdb);
7862306a36Sopenharmony_ciint dsa_port_pre_bridge_flags(const struct dsa_port *dp,
7962306a36Sopenharmony_ci			      struct switchdev_brport_flags flags,
8062306a36Sopenharmony_ci			      struct netlink_ext_ack *extack);
8162306a36Sopenharmony_ciint dsa_port_bridge_flags(struct dsa_port *dp,
8262306a36Sopenharmony_ci			  struct switchdev_brport_flags flags,
8362306a36Sopenharmony_ci			  struct netlink_ext_ack *extack);
8462306a36Sopenharmony_ciint dsa_port_vlan_add(struct dsa_port *dp,
8562306a36Sopenharmony_ci		      const struct switchdev_obj_port_vlan *vlan,
8662306a36Sopenharmony_ci		      struct netlink_ext_ack *extack);
8762306a36Sopenharmony_ciint dsa_port_vlan_del(struct dsa_port *dp,
8862306a36Sopenharmony_ci		      const struct switchdev_obj_port_vlan *vlan);
8962306a36Sopenharmony_ciint dsa_port_host_vlan_add(struct dsa_port *dp,
9062306a36Sopenharmony_ci			   const struct switchdev_obj_port_vlan *vlan,
9162306a36Sopenharmony_ci			   struct netlink_ext_ack *extack);
9262306a36Sopenharmony_ciint dsa_port_host_vlan_del(struct dsa_port *dp,
9362306a36Sopenharmony_ci			   const struct switchdev_obj_port_vlan *vlan);
9462306a36Sopenharmony_ciint dsa_port_mrp_add(const struct dsa_port *dp,
9562306a36Sopenharmony_ci		     const struct switchdev_obj_mrp *mrp);
9662306a36Sopenharmony_ciint dsa_port_mrp_del(const struct dsa_port *dp,
9762306a36Sopenharmony_ci		     const struct switchdev_obj_mrp *mrp);
9862306a36Sopenharmony_ciint dsa_port_mrp_add_ring_role(const struct dsa_port *dp,
9962306a36Sopenharmony_ci			       const struct switchdev_obj_ring_role_mrp *mrp);
10062306a36Sopenharmony_ciint dsa_port_mrp_del_ring_role(const struct dsa_port *dp,
10162306a36Sopenharmony_ci			       const struct switchdev_obj_ring_role_mrp *mrp);
10262306a36Sopenharmony_ciint dsa_port_phylink_create(struct dsa_port *dp);
10362306a36Sopenharmony_civoid dsa_port_phylink_destroy(struct dsa_port *dp);
10462306a36Sopenharmony_ciint dsa_shared_port_link_register_of(struct dsa_port *dp);
10562306a36Sopenharmony_civoid dsa_shared_port_link_unregister_of(struct dsa_port *dp);
10662306a36Sopenharmony_ciint dsa_port_hsr_join(struct dsa_port *dp, struct net_device *hsr);
10762306a36Sopenharmony_civoid dsa_port_hsr_leave(struct dsa_port *dp, struct net_device *hsr);
10862306a36Sopenharmony_ciint dsa_port_tag_8021q_vlan_add(struct dsa_port *dp, u16 vid, bool broadcast);
10962306a36Sopenharmony_civoid dsa_port_tag_8021q_vlan_del(struct dsa_port *dp, u16 vid, bool broadcast);
11062306a36Sopenharmony_civoid dsa_port_set_host_flood(struct dsa_port *dp, bool uc, bool mc);
11162306a36Sopenharmony_ciint dsa_port_change_master(struct dsa_port *dp, struct net_device *master,
11262306a36Sopenharmony_ci			   struct netlink_ext_ack *extack);
11362306a36Sopenharmony_ci
11462306a36Sopenharmony_ci#endif
115