162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */ 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci#ifndef __DSA_SWITCH_H 462306a36Sopenharmony_ci#define __DSA_SWITCH_H 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include <net/dsa.h> 762306a36Sopenharmony_ci 862306a36Sopenharmony_cistruct netlink_ext_ack; 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cienum { 1162306a36Sopenharmony_ci DSA_NOTIFIER_AGEING_TIME, 1262306a36Sopenharmony_ci DSA_NOTIFIER_BRIDGE_JOIN, 1362306a36Sopenharmony_ci DSA_NOTIFIER_BRIDGE_LEAVE, 1462306a36Sopenharmony_ci DSA_NOTIFIER_FDB_ADD, 1562306a36Sopenharmony_ci DSA_NOTIFIER_FDB_DEL, 1662306a36Sopenharmony_ci DSA_NOTIFIER_HOST_FDB_ADD, 1762306a36Sopenharmony_ci DSA_NOTIFIER_HOST_FDB_DEL, 1862306a36Sopenharmony_ci DSA_NOTIFIER_LAG_FDB_ADD, 1962306a36Sopenharmony_ci DSA_NOTIFIER_LAG_FDB_DEL, 2062306a36Sopenharmony_ci DSA_NOTIFIER_LAG_CHANGE, 2162306a36Sopenharmony_ci DSA_NOTIFIER_LAG_JOIN, 2262306a36Sopenharmony_ci DSA_NOTIFIER_LAG_LEAVE, 2362306a36Sopenharmony_ci DSA_NOTIFIER_MDB_ADD, 2462306a36Sopenharmony_ci DSA_NOTIFIER_MDB_DEL, 2562306a36Sopenharmony_ci DSA_NOTIFIER_HOST_MDB_ADD, 2662306a36Sopenharmony_ci DSA_NOTIFIER_HOST_MDB_DEL, 2762306a36Sopenharmony_ci DSA_NOTIFIER_VLAN_ADD, 2862306a36Sopenharmony_ci DSA_NOTIFIER_VLAN_DEL, 2962306a36Sopenharmony_ci DSA_NOTIFIER_HOST_VLAN_ADD, 3062306a36Sopenharmony_ci DSA_NOTIFIER_HOST_VLAN_DEL, 3162306a36Sopenharmony_ci DSA_NOTIFIER_MTU, 3262306a36Sopenharmony_ci DSA_NOTIFIER_TAG_PROTO, 3362306a36Sopenharmony_ci DSA_NOTIFIER_TAG_PROTO_CONNECT, 3462306a36Sopenharmony_ci DSA_NOTIFIER_TAG_PROTO_DISCONNECT, 3562306a36Sopenharmony_ci DSA_NOTIFIER_TAG_8021Q_VLAN_ADD, 3662306a36Sopenharmony_ci DSA_NOTIFIER_TAG_8021Q_VLAN_DEL, 3762306a36Sopenharmony_ci DSA_NOTIFIER_MASTER_STATE_CHANGE, 3862306a36Sopenharmony_ci}; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci/* DSA_NOTIFIER_AGEING_TIME */ 4162306a36Sopenharmony_cistruct dsa_notifier_ageing_time_info { 4262306a36Sopenharmony_ci unsigned int ageing_time; 4362306a36Sopenharmony_ci}; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci/* DSA_NOTIFIER_BRIDGE_* */ 4662306a36Sopenharmony_cistruct dsa_notifier_bridge_info { 4762306a36Sopenharmony_ci const struct dsa_port *dp; 4862306a36Sopenharmony_ci struct dsa_bridge bridge; 4962306a36Sopenharmony_ci bool tx_fwd_offload; 5062306a36Sopenharmony_ci struct netlink_ext_ack *extack; 5162306a36Sopenharmony_ci}; 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_ci/* DSA_NOTIFIER_FDB_* */ 5462306a36Sopenharmony_cistruct dsa_notifier_fdb_info { 5562306a36Sopenharmony_ci const struct dsa_port *dp; 5662306a36Sopenharmony_ci const unsigned char *addr; 5762306a36Sopenharmony_ci u16 vid; 5862306a36Sopenharmony_ci struct dsa_db db; 5962306a36Sopenharmony_ci}; 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci/* DSA_NOTIFIER_LAG_FDB_* */ 6262306a36Sopenharmony_cistruct dsa_notifier_lag_fdb_info { 6362306a36Sopenharmony_ci struct dsa_lag *lag; 6462306a36Sopenharmony_ci const unsigned char *addr; 6562306a36Sopenharmony_ci u16 vid; 6662306a36Sopenharmony_ci struct dsa_db db; 6762306a36Sopenharmony_ci}; 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci/* DSA_NOTIFIER_MDB_* */ 7062306a36Sopenharmony_cistruct dsa_notifier_mdb_info { 7162306a36Sopenharmony_ci const struct dsa_port *dp; 7262306a36Sopenharmony_ci const struct switchdev_obj_port_mdb *mdb; 7362306a36Sopenharmony_ci struct dsa_db db; 7462306a36Sopenharmony_ci}; 7562306a36Sopenharmony_ci 7662306a36Sopenharmony_ci/* DSA_NOTIFIER_LAG_* */ 7762306a36Sopenharmony_cistruct dsa_notifier_lag_info { 7862306a36Sopenharmony_ci const struct dsa_port *dp; 7962306a36Sopenharmony_ci struct dsa_lag lag; 8062306a36Sopenharmony_ci struct netdev_lag_upper_info *info; 8162306a36Sopenharmony_ci struct netlink_ext_ack *extack; 8262306a36Sopenharmony_ci}; 8362306a36Sopenharmony_ci 8462306a36Sopenharmony_ci/* DSA_NOTIFIER_VLAN_* */ 8562306a36Sopenharmony_cistruct dsa_notifier_vlan_info { 8662306a36Sopenharmony_ci const struct dsa_port *dp; 8762306a36Sopenharmony_ci const struct switchdev_obj_port_vlan *vlan; 8862306a36Sopenharmony_ci struct netlink_ext_ack *extack; 8962306a36Sopenharmony_ci}; 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci/* DSA_NOTIFIER_MTU */ 9262306a36Sopenharmony_cistruct dsa_notifier_mtu_info { 9362306a36Sopenharmony_ci const struct dsa_port *dp; 9462306a36Sopenharmony_ci int mtu; 9562306a36Sopenharmony_ci}; 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci/* DSA_NOTIFIER_TAG_PROTO_* */ 9862306a36Sopenharmony_cistruct dsa_notifier_tag_proto_info { 9962306a36Sopenharmony_ci const struct dsa_device_ops *tag_ops; 10062306a36Sopenharmony_ci}; 10162306a36Sopenharmony_ci 10262306a36Sopenharmony_ci/* DSA_NOTIFIER_TAG_8021Q_VLAN_* */ 10362306a36Sopenharmony_cistruct dsa_notifier_tag_8021q_vlan_info { 10462306a36Sopenharmony_ci const struct dsa_port *dp; 10562306a36Sopenharmony_ci u16 vid; 10662306a36Sopenharmony_ci}; 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci/* DSA_NOTIFIER_MASTER_STATE_CHANGE */ 10962306a36Sopenharmony_cistruct dsa_notifier_master_state_info { 11062306a36Sopenharmony_ci const struct net_device *master; 11162306a36Sopenharmony_ci bool operational; 11262306a36Sopenharmony_ci}; 11362306a36Sopenharmony_ci 11462306a36Sopenharmony_cistruct dsa_vlan *dsa_vlan_find(struct list_head *vlan_list, 11562306a36Sopenharmony_ci const struct switchdev_obj_port_vlan *vlan); 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_ciint dsa_tree_notify(struct dsa_switch_tree *dst, unsigned long e, void *v); 11862306a36Sopenharmony_ciint dsa_broadcast(unsigned long e, void *v); 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ciint dsa_switch_register_notifier(struct dsa_switch *ds); 12162306a36Sopenharmony_civoid dsa_switch_unregister_notifier(struct dsa_switch *ds); 12262306a36Sopenharmony_ci 12362306a36Sopenharmony_ci#endif 124