#include <linux/if_bridge.h>
#include <linux/netdevice.h>
#include <linux/notifier.h>
#include <linux/of_mdio.h>
#include <linux/of_net.h>
#include "dsa.h"
#include "port.h"
#include "switch.h"
#include "tag_8021q.h"
#include "user.h"
static int dsa_port_notify(const struct dsa_port *dp, unsigned long e, void *v)
{ … }
static void dsa_port_notify_bridge_fdb_flush(const struct dsa_port *dp, u16 vid)
{ … }
static void dsa_port_fast_age(const struct dsa_port *dp)
{ … }
static int dsa_port_vlan_fast_age(const struct dsa_port *dp, u16 vid)
{ … }
static int dsa_port_msti_fast_age(const struct dsa_port *dp, u16 msti)
{ … }
static bool dsa_port_can_configure_learning(struct dsa_port *dp)
{ … }
bool dsa_port_supports_hwtstamp(struct dsa_port *dp)
{ … }
int dsa_port_set_state(struct dsa_port *dp, u8 state, bool do_fast_age)
{ … }
static void dsa_port_set_state_now(struct dsa_port *dp, u8 state,
bool do_fast_age)
{ … }
int dsa_port_set_mst_state(struct dsa_port *dp,
const struct switchdev_mst_state *state,
struct netlink_ext_ack *extack)
{ … }
int dsa_port_enable_rt(struct dsa_port *dp, struct phy_device *phy)
{ … }
int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy)
{ … }
void dsa_port_disable_rt(struct dsa_port *dp)
{ … }
void dsa_port_disable(struct dsa_port *dp)
{ … }
static void dsa_port_reset_vlan_filtering(struct dsa_port *dp,
struct dsa_bridge bridge)
{ … }
static int dsa_port_inherit_brport_flags(struct dsa_port *dp,
struct netlink_ext_ack *extack)
{ … }
static void dsa_port_clear_brport_flags(struct dsa_port *dp)
{ … }
static int dsa_port_switchdev_sync_attrs(struct dsa_port *dp,
struct netlink_ext_ack *extack)
{ … }
static void dsa_port_switchdev_unsync_attrs(struct dsa_port *dp,
struct dsa_bridge bridge)
{ … }
static int dsa_port_bridge_create(struct dsa_port *dp,
struct net_device *br,
struct netlink_ext_ack *extack)
{ … }
static void dsa_port_bridge_destroy(struct dsa_port *dp,
const struct net_device *br)
{ … }
static bool dsa_port_supports_mst(struct dsa_port *dp)
{ … }
int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br,
struct netlink_ext_ack *extack)
{ … }
void dsa_port_pre_bridge_leave(struct dsa_port *dp, struct net_device *br)
{ … }
void dsa_port_bridge_leave(struct dsa_port *dp, struct net_device *br)
{ … }
int dsa_port_lag_change(struct dsa_port *dp,
struct netdev_lag_lower_state_info *linfo)
{ … }
static int dsa_port_lag_create(struct dsa_port *dp,
struct net_device *lag_dev)
{ … }
static void dsa_port_lag_destroy(struct dsa_port *dp)
{ … }
int dsa_port_lag_join(struct dsa_port *dp, struct net_device *lag_dev,
struct netdev_lag_upper_info *uinfo,
struct netlink_ext_ack *extack)
{ … }
void dsa_port_pre_lag_leave(struct dsa_port *dp, struct net_device *lag_dev)
{ … }
void dsa_port_lag_leave(struct dsa_port *dp, struct net_device *lag_dev)
{ … }
static bool dsa_port_can_apply_vlan_filtering(struct dsa_port *dp,
bool vlan_filtering,
struct netlink_ext_ack *extack)
{ … }
int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering,
struct netlink_ext_ack *extack)
{ … }
bool dsa_port_skip_vlan_configuration(struct dsa_port *dp)
{ … }
int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock)
{ … }
int dsa_port_mst_enable(struct dsa_port *dp, bool on,
struct netlink_ext_ack *extack)
{ … }
int dsa_port_pre_bridge_flags(const struct dsa_port *dp,
struct switchdev_brport_flags flags,
struct netlink_ext_ack *extack)
{ … }
int dsa_port_bridge_flags(struct dsa_port *dp,
struct switchdev_brport_flags flags,
struct netlink_ext_ack *extack)
{ … }
void dsa_port_set_host_flood(struct dsa_port *dp, bool uc, bool mc)
{ … }
int dsa_port_vlan_msti(struct dsa_port *dp,
const struct switchdev_vlan_msti *msti)
{ … }
int dsa_port_mtu_change(struct dsa_port *dp, int new_mtu)
{ … }
int dsa_port_fdb_add(struct dsa_port *dp, const unsigned char *addr,
u16 vid)
{ … }
int dsa_port_fdb_del(struct dsa_port *dp, const unsigned char *addr,
u16 vid)
{ … }
static int dsa_port_host_fdb_add(struct dsa_port *dp,
const unsigned char *addr, u16 vid,
struct dsa_db db)
{ … }
int dsa_port_standalone_host_fdb_add(struct dsa_port *dp,
const unsigned char *addr, u16 vid)
{ … }
int dsa_port_bridge_host_fdb_add(struct dsa_port *dp,
const unsigned char *addr, u16 vid)
{ … }
static int dsa_port_host_fdb_del(struct dsa_port *dp,
const unsigned char *addr, u16 vid,
struct dsa_db db)
{ … }
int dsa_port_standalone_host_fdb_del(struct dsa_port *dp,
const unsigned char *addr, u16 vid)
{ … }
int dsa_port_bridge_host_fdb_del(struct dsa_port *dp,
const unsigned char *addr, u16 vid)
{ … }
int dsa_port_lag_fdb_add(struct dsa_port *dp, const unsigned char *addr,
u16 vid)
{ … }
int dsa_port_lag_fdb_del(struct dsa_port *dp, const unsigned char *addr,
u16 vid)
{ … }
int dsa_port_fdb_dump(struct dsa_port *dp, dsa_fdb_dump_cb_t *cb, void *data)
{ … }
int dsa_port_mdb_add(const struct dsa_port *dp,
const struct switchdev_obj_port_mdb *mdb)
{ … }
int dsa_port_mdb_del(const struct dsa_port *dp,
const struct switchdev_obj_port_mdb *mdb)
{ … }
static int dsa_port_host_mdb_add(const struct dsa_port *dp,
const struct switchdev_obj_port_mdb *mdb,
struct dsa_db db)
{ … }
int dsa_port_standalone_host_mdb_add(const struct dsa_port *dp,
const struct switchdev_obj_port_mdb *mdb)
{ … }
int dsa_port_bridge_host_mdb_add(const struct dsa_port *dp,
const struct switchdev_obj_port_mdb *mdb)
{ … }
static int dsa_port_host_mdb_del(const struct dsa_port *dp,
const struct switchdev_obj_port_mdb *mdb,
struct dsa_db db)
{ … }
int dsa_port_standalone_host_mdb_del(const struct dsa_port *dp,
const struct switchdev_obj_port_mdb *mdb)
{ … }
int dsa_port_bridge_host_mdb_del(const struct dsa_port *dp,
const struct switchdev_obj_port_mdb *mdb)
{ … }
int dsa_port_vlan_add(struct dsa_port *dp,
const struct switchdev_obj_port_vlan *vlan,
struct netlink_ext_ack *extack)
{ … }
int dsa_port_vlan_del(struct dsa_port *dp,
const struct switchdev_obj_port_vlan *vlan)
{ … }
int dsa_port_host_vlan_add(struct dsa_port *dp,
const struct switchdev_obj_port_vlan *vlan,
struct netlink_ext_ack *extack)
{ … }
int dsa_port_host_vlan_del(struct dsa_port *dp,
const struct switchdev_obj_port_vlan *vlan)
{ … }
int dsa_port_mrp_add(const struct dsa_port *dp,
const struct switchdev_obj_mrp *mrp)
{ … }
int dsa_port_mrp_del(const struct dsa_port *dp,
const struct switchdev_obj_mrp *mrp)
{ … }
int dsa_port_mrp_add_ring_role(const struct dsa_port *dp,
const struct switchdev_obj_ring_role_mrp *mrp)
{ … }
int dsa_port_mrp_del_ring_role(const struct dsa_port *dp,
const struct switchdev_obj_ring_role_mrp *mrp)
{ … }
static int dsa_port_assign_conduit(struct dsa_port *dp,
struct net_device *conduit,
struct netlink_ext_ack *extack,
bool fail_on_err)
{ … }
int dsa_port_change_conduit(struct dsa_port *dp, struct net_device *conduit,
struct netlink_ext_ack *extack)
{ … }
void dsa_port_set_tag_protocol(struct dsa_port *cpu_dp,
const struct dsa_device_ops *tag_ops)
{ … }
static struct phylink_pcs *
dsa_port_phylink_mac_select_pcs(struct phylink_config *config,
phy_interface_t interface)
{ … }
static void dsa_port_phylink_mac_config(struct phylink_config *config,
unsigned int mode,
const struct phylink_link_state *state)
{ … }
static void dsa_port_phylink_mac_link_down(struct phylink_config *config,
unsigned int mode,
phy_interface_t interface)
{ … }
static void dsa_port_phylink_mac_link_up(struct phylink_config *config,
struct phy_device *phydev,
unsigned int mode,
phy_interface_t interface,
int speed, int duplex,
bool tx_pause, bool rx_pause)
{ … }
static const struct phylink_mac_ops dsa_port_phylink_mac_ops = …;
int dsa_port_phylink_create(struct dsa_port *dp)
{ … }
void dsa_port_phylink_destroy(struct dsa_port *dp)
{ … }
static int dsa_shared_port_phylink_register(struct dsa_port *dp)
{ … }
static const char * const dsa_switches_apply_workarounds[] = …;
static void dsa_shared_port_validate_of(struct dsa_port *dp,
bool *missing_phy_mode,
bool *missing_link_description)
{ … }
static void dsa_shared_port_link_down(struct dsa_port *dp)
{ … }
int dsa_shared_port_link_register_of(struct dsa_port *dp)
{ … }
void dsa_shared_port_link_unregister_of(struct dsa_port *dp)
{ … }
int dsa_port_hsr_join(struct dsa_port *dp, struct net_device *hsr,
struct netlink_ext_ack *extack)
{ … }
void dsa_port_hsr_leave(struct dsa_port *dp, struct net_device *hsr)
{ … }
int dsa_port_tag_8021q_vlan_add(struct dsa_port *dp, u16 vid, bool broadcast)
{ … }
void dsa_port_tag_8021q_vlan_del(struct dsa_port *dp, u16 vid, bool broadcast)
{ … }