dsa_switch_ops
Regular
4.4
: Absent ⚠️
4.8
: Absent ⚠️
4.10
: ✅struct dsa_switch_ops {
struct list_head list;
const char * (*probe)(struct device *, struct device *, int, void **);
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *);
int (*setup)(struct dsa_switch *);
int (*set_addr)(struct dsa_switch *, u8 *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*get_strings)(struct dsa_switch *, int, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int, struct phy_device *);
int (*set_eee)(struct dsa_switch *, int, struct phy_device *, struct ethtool_eee *);
int (*get_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_temp)(struct dsa_switch *, int *);
int (*get_temp_limit)(struct dsa_switch *, int *);
int (*set_temp_limit)(struct dsa_switch *, int);
int (*get_temp_alarm)(struct dsa_switch *, bool *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool);
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct switchdev_trans *);
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct switchdev_trans *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_vlan_dump)(struct dsa_switch *, int, struct switchdev_obj_port_vlan *, int(*)(struct switchdev_obj *));
int (*port_fdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_fdb *, struct switchdev_trans *);
void (*port_fdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_fdb *, struct switchdev_trans *);
int (*port_fdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_fdb *);
int (*port_fdb_dump)(struct dsa_switch *, int, struct switchdev_obj_port_fdb *, int(*)(struct switchdev_obj *));
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct switchdev_trans *);
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct switchdev_trans *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_dump)(struct dsa_switch *, int, struct switchdev_obj_port_mdb *, int(*)(struct switchdev_obj *));
};
4.13
: ✅struct dsa_switch_ops {
const char * (*probe)(struct device *, struct device *, int, void **);
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *);
int (*setup)(struct dsa_switch *);
int (*set_addr)(struct dsa_switch *, u8 *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*get_strings)(struct dsa_switch *, int, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int, struct phy_device *);
int (*set_eee)(struct dsa_switch *, int, struct phy_device *, struct ethtool_eee *);
int (*get_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool);
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct switchdev_trans *);
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct switchdev_trans *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_vlan_dump)(struct dsa_switch *, int, struct switchdev_obj_port_vlan *, switchdev_obj_dump_cb_t *);
int (*port_fdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_fdb *, struct switchdev_trans *);
void (*port_fdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_fdb *, struct switchdev_trans *);
int (*port_fdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_fdb *);
int (*port_fdb_dump)(struct dsa_switch *, int, struct switchdev_obj_port_fdb *, switchdev_obj_dump_cb_t *);
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct switchdev_trans *);
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct switchdev_trans *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_dump)(struct dsa_switch *, int, struct switchdev_obj_port_mdb *, switchdev_obj_dump_cb_t *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, struct net_device *);
};
4.15
: ✅struct dsa_switch_ops {
const char * (*probe)(struct device *, struct device *, int, void **);
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int);
int (*setup)(struct dsa_switch *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*get_strings)(struct dsa_switch *, int, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int, struct phy_device *);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool);
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct switchdev_trans *);
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct switchdev_trans *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct switchdev_trans *);
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct switchdev_trans *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, struct net_device *);
};
4.18
: ✅struct dsa_switch_ops {
const char * (*probe)(struct device *, struct device *, int, void **);
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int);
int (*setup)(struct dsa_switch *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int, struct phy_device *);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool);
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, struct net_device *);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
};
5.0
: ✅struct dsa_switch_ops {
const char * (*probe)(struct device *, struct device *, int, void **);
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int);
int (*setup)(struct dsa_switch *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int, struct phy_device *);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool);
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, struct net_device *);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
};
5.3
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_egress_floods)(struct dsa_switch *, int, bool, bool);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool);
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, struct net_device *);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
netdev_tx_t (*port_deferred_xmit)(struct dsa_switch *, int, struct sk_buff *);
};
5.4
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_egress_floods)(struct dsa_switch *, int, bool, bool);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool);
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, struct net_device *);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
netdev_tx_t (*port_deferred_xmit)(struct dsa_switch *, int, struct sk_buff *);
};
5.8
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *, int, int, bool, bool);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_egress_floods)(struct dsa_switch *, int, bool, bool);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool);
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*cls_flower_add)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*cls_flower_del)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*cls_flower_stats)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*port_policer_add)(struct dsa_switch *, int, struct dsa_mall_policer_tc_entry *);
void (*port_policer_del)(struct dsa_switch *, int);
int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct net_device *);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
int (*devlink_param_get)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
int (*devlink_param_set)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
int (*port_change_mtu)(struct dsa_switch *, int, int);
int (*port_max_mtu)(struct dsa_switch *, int);
};
5.11
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *, int, int, bool, bool);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*port_prechangeupper)(struct dsa_switch *, int, struct netdev_notifier_changeupper_info *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_egress_floods)(struct dsa_switch *, int, bool, bool);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct switchdev_trans *);
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*cls_flower_add)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*cls_flower_del)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*cls_flower_stats)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*port_policer_add)(struct dsa_switch *, int, struct dsa_mall_policer_tc_entry *);
void (*port_policer_del)(struct dsa_switch *, int);
int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct net_device *);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
int (*devlink_param_get)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
int (*devlink_param_set)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
int (*devlink_info_get)(struct dsa_switch *, struct devlink_info_req *, struct netlink_ext_ack *);
int (*port_change_mtu)(struct dsa_switch *, int, int);
int (*port_max_mtu)(struct dsa_switch *, int);
};
5.13
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);
int (*change_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *, int, int, bool, bool);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_stats64)(struct dsa_switch *, int, struct rtnl_link_stats64 *);
void (*self_test)(struct dsa_switch *, int, struct ethtool_test *, u64 *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*port_prechangeupper)(struct dsa_switch *, int, struct netdev_notifier_changeupper_info *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_pre_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
int (*port_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
int (*port_set_mrouter)(struct dsa_switch *, int, bool, struct netlink_ext_ack *);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct netlink_ext_ack *);
int (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct netlink_ext_ack *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*cls_flower_add)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*cls_flower_del)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*cls_flower_stats)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*port_policer_add)(struct dsa_switch *, int, struct dsa_mall_policer_tc_entry *);
void (*port_policer_del)(struct dsa_switch *, int);
int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct net_device *);
int (*crosschip_lag_change)(struct dsa_switch *, int, int);
int (*crosschip_lag_join)(struct dsa_switch *, int, int, struct net_device *, struct netdev_lag_upper_info *);
int (*crosschip_lag_leave)(struct dsa_switch *, int, int, struct net_device *);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
void (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
int (*devlink_param_get)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
int (*devlink_param_set)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
int (*devlink_info_get)(struct dsa_switch *, struct devlink_info_req *, struct netlink_ext_ack *);
int (*devlink_sb_pool_get)(struct dsa_switch *, unsigned int, u16, struct devlink_sb_pool_info *);
int (*devlink_sb_pool_set)(struct dsa_switch *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
int (*devlink_sb_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *);
int (*devlink_sb_port_pool_set)(struct dsa_switch *, int, unsigned int, u16, u32, struct netlink_ext_ack *);
int (*devlink_sb_tc_pool_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
int (*devlink_sb_tc_pool_bind_set)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
int (*devlink_sb_occ_snapshot)(struct dsa_switch *, unsigned int);
int (*devlink_sb_occ_max_clear)(struct dsa_switch *, unsigned int);
int (*devlink_sb_occ_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *, u32 *);
int (*devlink_sb_occ_tc_port_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
int (*port_change_mtu)(struct dsa_switch *, int, int);
int (*port_max_mtu)(struct dsa_switch *, int);
int (*port_lag_change)(struct dsa_switch *, int);
int (*port_lag_join)(struct dsa_switch *, int, struct net_device *, struct netdev_lag_upper_info *);
int (*port_lag_leave)(struct dsa_switch *, int, struct net_device *);
int (*port_hsr_join)(struct dsa_switch *, int, struct net_device *);
int (*port_hsr_leave)(struct dsa_switch *, int, struct net_device *);
int (*port_mrp_add)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
int (*port_mrp_del)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
int (*port_mrp_add_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
int (*port_mrp_del_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
};
5.15
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);
int (*change_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
int (*port_setup)(struct dsa_switch *, int);
void (*port_teardown)(struct dsa_switch *, int);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *, int, int, bool, bool);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_stats64)(struct dsa_switch *, int, struct rtnl_link_stats64 *);
void (*self_test)(struct dsa_switch *, int, struct ethtool_test *, u64 *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*port_prechangeupper)(struct dsa_switch *, int, struct netdev_notifier_changeupper_info *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
int (*port_bridge_tx_fwd_offload)(struct dsa_switch *, int, struct net_device *, int);
void (*port_bridge_tx_fwd_unoffload)(struct dsa_switch *, int, struct net_device *, int);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_pre_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
int (*port_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct netlink_ext_ack *);
int (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct netlink_ext_ack *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*cls_flower_add)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*cls_flower_del)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*cls_flower_stats)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*port_policer_add)(struct dsa_switch *, int, struct dsa_mall_policer_tc_entry *);
void (*port_policer_del)(struct dsa_switch *, int);
int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct net_device *);
int (*crosschip_lag_change)(struct dsa_switch *, int, int);
int (*crosschip_lag_join)(struct dsa_switch *, int, int, struct net_device *, struct netdev_lag_upper_info *);
int (*crosschip_lag_leave)(struct dsa_switch *, int, int, struct net_device *);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
void (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
int (*devlink_param_get)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
int (*devlink_param_set)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
int (*devlink_info_get)(struct dsa_switch *, struct devlink_info_req *, struct netlink_ext_ack *);
int (*devlink_sb_pool_get)(struct dsa_switch *, unsigned int, u16, struct devlink_sb_pool_info *);
int (*devlink_sb_pool_set)(struct dsa_switch *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
int (*devlink_sb_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *);
int (*devlink_sb_port_pool_set)(struct dsa_switch *, int, unsigned int, u16, u32, struct netlink_ext_ack *);
int (*devlink_sb_tc_pool_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
int (*devlink_sb_tc_pool_bind_set)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
int (*devlink_sb_occ_snapshot)(struct dsa_switch *, unsigned int);
int (*devlink_sb_occ_max_clear)(struct dsa_switch *, unsigned int);
int (*devlink_sb_occ_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *, u32 *);
int (*devlink_sb_occ_tc_port_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
int (*port_change_mtu)(struct dsa_switch *, int, int);
int (*port_max_mtu)(struct dsa_switch *, int);
int (*port_lag_change)(struct dsa_switch *, int);
int (*port_lag_join)(struct dsa_switch *, int, struct net_device *, struct netdev_lag_upper_info *);
int (*port_lag_leave)(struct dsa_switch *, int, struct net_device *);
int (*port_hsr_join)(struct dsa_switch *, int, struct net_device *);
int (*port_hsr_leave)(struct dsa_switch *, int, struct net_device *);
int (*port_mrp_add)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
int (*port_mrp_del)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
int (*port_mrp_add_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
int (*port_mrp_del_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
int (*tag_8021q_vlan_add)(struct dsa_switch *, int, u16, u16);
int (*tag_8021q_vlan_del)(struct dsa_switch *, int, u16);
};
5.19
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);
int (*change_tag_protocol)(struct dsa_switch *, enum dsa_tag_protocol);
int (*connect_tag_protocol)(struct dsa_switch *, enum dsa_tag_protocol);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
int (*port_setup)(struct dsa_switch *, int);
void (*port_teardown)(struct dsa_switch *, int);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_get_caps)(struct dsa_switch *, int, struct phylink_config *);
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
struct phylink_pcs * (*phylink_mac_select_pcs)(struct dsa_switch *, int, phy_interface_t);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *, int, int, bool, bool);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_eth_phy_stats)(struct dsa_switch *, int, struct ethtool_eth_phy_stats *);
void (*get_eth_mac_stats)(struct dsa_switch *, int, struct ethtool_eth_mac_stats *);
void (*get_eth_ctrl_stats)(struct dsa_switch *, int, struct ethtool_eth_ctrl_stats *);
void (*get_stats64)(struct dsa_switch *, int, struct rtnl_link_stats64 *);
void (*self_test)(struct dsa_switch *, int, struct ethtool_test *, u64 *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*port_get_default_prio)(struct dsa_switch *, int);
int (*port_set_default_prio)(struct dsa_switch *, int, u8);
int (*port_get_dscp_prio)(struct dsa_switch *, int, u8);
int (*port_add_dscp_prio)(struct dsa_switch *, int, u8, u8);
int (*port_del_dscp_prio)(struct dsa_switch *, int, u8, u8);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*port_prechangeupper)(struct dsa_switch *, int, struct netdev_notifier_changeupper_info *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct dsa_bridge, bool *, struct netlink_ext_ack *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct dsa_bridge);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
int (*port_mst_state_set)(struct dsa_switch *, int, const struct switchdev_mst_state *);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_vlan_fast_age)(struct dsa_switch *, int, u16);
int (*port_pre_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
int (*port_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
void (*port_set_host_flood)(struct dsa_switch *, int, bool, bool);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct netlink_ext_ack *);
int (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct netlink_ext_ack *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*vlan_msti_set)(struct dsa_switch *, struct dsa_bridge, const struct switchdev_vlan_msti *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16, struct dsa_db);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16, struct dsa_db);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*lag_fdb_add)(struct dsa_switch *, struct dsa_lag, const unsigned char *, u16, struct dsa_db);
int (*lag_fdb_del)(struct dsa_switch *, struct dsa_lag, const unsigned char *, u16, struct dsa_db);
int (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct dsa_db);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct dsa_db);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*cls_flower_add)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*cls_flower_del)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*cls_flower_stats)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool, struct netlink_ext_ack *);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*port_policer_add)(struct dsa_switch *, int, struct dsa_mall_policer_tc_entry *);
void (*port_policer_del)(struct dsa_switch *, int);
int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct dsa_bridge, struct netlink_ext_ack *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct dsa_bridge);
int (*crosschip_lag_change)(struct dsa_switch *, int, int);
int (*crosschip_lag_join)(struct dsa_switch *, int, int, struct dsa_lag, struct netdev_lag_upper_info *);
int (*crosschip_lag_leave)(struct dsa_switch *, int, int, struct dsa_lag);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
void (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
int (*devlink_param_get)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
int (*devlink_param_set)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
int (*devlink_info_get)(struct dsa_switch *, struct devlink_info_req *, struct netlink_ext_ack *);
int (*devlink_sb_pool_get)(struct dsa_switch *, unsigned int, u16, struct devlink_sb_pool_info *);
int (*devlink_sb_pool_set)(struct dsa_switch *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
int (*devlink_sb_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *);
int (*devlink_sb_port_pool_set)(struct dsa_switch *, int, unsigned int, u16, u32, struct netlink_ext_ack *);
int (*devlink_sb_tc_pool_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
int (*devlink_sb_tc_pool_bind_set)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
int (*devlink_sb_occ_snapshot)(struct dsa_switch *, unsigned int);
int (*devlink_sb_occ_max_clear)(struct dsa_switch *, unsigned int);
int (*devlink_sb_occ_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *, u32 *);
int (*devlink_sb_occ_tc_port_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
int (*port_change_mtu)(struct dsa_switch *, int, int);
int (*port_max_mtu)(struct dsa_switch *, int);
int (*port_lag_change)(struct dsa_switch *, int);
int (*port_lag_join)(struct dsa_switch *, int, struct dsa_lag, struct netdev_lag_upper_info *);
int (*port_lag_leave)(struct dsa_switch *, int, struct dsa_lag);
int (*port_hsr_join)(struct dsa_switch *, int, struct net_device *);
int (*port_hsr_leave)(struct dsa_switch *, int, struct net_device *);
int (*port_mrp_add)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
int (*port_mrp_del)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
int (*port_mrp_add_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
int (*port_mrp_del_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
int (*tag_8021q_vlan_add)(struct dsa_switch *, int, u16, u16);
int (*tag_8021q_vlan_del)(struct dsa_switch *, int, u16);
void (*master_state_change)(struct dsa_switch *, const struct net_device *, bool);
};
6.2
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);
int (*change_tag_protocol)(struct dsa_switch *, enum dsa_tag_protocol);
int (*connect_tag_protocol)(struct dsa_switch *, enum dsa_tag_protocol);
int (*port_change_master)(struct dsa_switch *, int, struct net_device *, struct netlink_ext_ack *);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
int (*port_setup)(struct dsa_switch *, int);
void (*port_teardown)(struct dsa_switch *, int);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_get_caps)(struct dsa_switch *, int, struct phylink_config *);
struct phylink_pcs * (*phylink_mac_select_pcs)(struct dsa_switch *, int, phy_interface_t);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *, int, int, bool, bool);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_eth_phy_stats)(struct dsa_switch *, int, struct ethtool_eth_phy_stats *);
void (*get_eth_mac_stats)(struct dsa_switch *, int, struct ethtool_eth_mac_stats *);
void (*get_eth_ctrl_stats)(struct dsa_switch *, int, struct ethtool_eth_ctrl_stats *);
void (*get_rmon_stats)(struct dsa_switch *, int, struct ethtool_rmon_stats *, const struct ethtool_rmon_hist_range **);
void (*get_stats64)(struct dsa_switch *, int, struct rtnl_link_stats64 *);
void (*get_pause_stats)(struct dsa_switch *, int, struct ethtool_pause_stats *);
void (*self_test)(struct dsa_switch *, int, struct ethtool_test *, u64 *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*port_get_default_prio)(struct dsa_switch *, int);
int (*port_set_default_prio)(struct dsa_switch *, int, u8);
int (*port_get_dscp_prio)(struct dsa_switch *, int, u8);
int (*port_add_dscp_prio)(struct dsa_switch *, int, u8, u8);
int (*port_del_dscp_prio)(struct dsa_switch *, int, u8, u8);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*port_prechangeupper)(struct dsa_switch *, int, struct netdev_notifier_changeupper_info *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct dsa_bridge, bool *, struct netlink_ext_ack *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct dsa_bridge);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
int (*port_mst_state_set)(struct dsa_switch *, int, const struct switchdev_mst_state *);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_vlan_fast_age)(struct dsa_switch *, int, u16);
int (*port_pre_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
int (*port_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
void (*port_set_host_flood)(struct dsa_switch *, int, bool, bool);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct netlink_ext_ack *);
int (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct netlink_ext_ack *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*vlan_msti_set)(struct dsa_switch *, struct dsa_bridge, const struct switchdev_vlan_msti *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16, struct dsa_db);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16, struct dsa_db);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*lag_fdb_add)(struct dsa_switch *, struct dsa_lag, const unsigned char *, u16, struct dsa_db);
int (*lag_fdb_del)(struct dsa_switch *, struct dsa_lag, const unsigned char *, u16, struct dsa_db);
int (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct dsa_db);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct dsa_db);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*cls_flower_add)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*cls_flower_del)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*cls_flower_stats)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool, struct netlink_ext_ack *);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*port_policer_add)(struct dsa_switch *, int, struct dsa_mall_policer_tc_entry *);
void (*port_policer_del)(struct dsa_switch *, int);
int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct dsa_bridge, struct netlink_ext_ack *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct dsa_bridge);
int (*crosschip_lag_change)(struct dsa_switch *, int, int);
int (*crosschip_lag_join)(struct dsa_switch *, int, int, struct dsa_lag, struct netdev_lag_upper_info *, struct netlink_ext_ack *);
int (*crosschip_lag_leave)(struct dsa_switch *, int, int, struct dsa_lag);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
void (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
int (*devlink_param_get)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
int (*devlink_param_set)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
int (*devlink_info_get)(struct dsa_switch *, struct devlink_info_req *, struct netlink_ext_ack *);
int (*devlink_sb_pool_get)(struct dsa_switch *, unsigned int, u16, struct devlink_sb_pool_info *);
int (*devlink_sb_pool_set)(struct dsa_switch *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
int (*devlink_sb_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *);
int (*devlink_sb_port_pool_set)(struct dsa_switch *, int, unsigned int, u16, u32, struct netlink_ext_ack *);
int (*devlink_sb_tc_pool_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
int (*devlink_sb_tc_pool_bind_set)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
int (*devlink_sb_occ_snapshot)(struct dsa_switch *, unsigned int);
int (*devlink_sb_occ_max_clear)(struct dsa_switch *, unsigned int);
int (*devlink_sb_occ_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *, u32 *);
int (*devlink_sb_occ_tc_port_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
int (*port_change_mtu)(struct dsa_switch *, int, int);
int (*port_max_mtu)(struct dsa_switch *, int);
int (*port_lag_change)(struct dsa_switch *, int);
int (*port_lag_join)(struct dsa_switch *, int, struct dsa_lag, struct netdev_lag_upper_info *, struct netlink_ext_ack *);
int (*port_lag_leave)(struct dsa_switch *, int, struct dsa_lag);
int (*port_hsr_join)(struct dsa_switch *, int, struct net_device *);
int (*port_hsr_leave)(struct dsa_switch *, int, struct net_device *);
int (*port_mrp_add)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
int (*port_mrp_del)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
int (*port_mrp_add_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
int (*port_mrp_del_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
int (*tag_8021q_vlan_add)(struct dsa_switch *, int, u16, u16);
int (*tag_8021q_vlan_del)(struct dsa_switch *, int, u16);
void (*master_state_change)(struct dsa_switch *, const struct net_device *, bool);
};
6.5
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);
int (*change_tag_protocol)(struct dsa_switch *, enum dsa_tag_protocol);
int (*connect_tag_protocol)(struct dsa_switch *, enum dsa_tag_protocol);
int (*port_change_master)(struct dsa_switch *, int, struct net_device *, struct netlink_ext_ack *);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
int (*port_setup)(struct dsa_switch *, int);
void (*port_teardown)(struct dsa_switch *, int);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_get_caps)(struct dsa_switch *, int, struct phylink_config *);
struct phylink_pcs * (*phylink_mac_select_pcs)(struct dsa_switch *, int, phy_interface_t);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
int (*phylink_mac_prepare)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
int (*phylink_mac_finish)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *, int, int, bool, bool);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_eth_phy_stats)(struct dsa_switch *, int, struct ethtool_eth_phy_stats *);
void (*get_eth_mac_stats)(struct dsa_switch *, int, struct ethtool_eth_mac_stats *);
void (*get_eth_ctrl_stats)(struct dsa_switch *, int, struct ethtool_eth_ctrl_stats *);
void (*get_rmon_stats)(struct dsa_switch *, int, struct ethtool_rmon_stats *, const struct ethtool_rmon_hist_range **);
void (*get_stats64)(struct dsa_switch *, int, struct rtnl_link_stats64 *);
void (*get_pause_stats)(struct dsa_switch *, int, struct ethtool_pause_stats *);
void (*self_test)(struct dsa_switch *, int, struct ethtool_test *, u64 *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*get_mm)(struct dsa_switch *, int, struct ethtool_mm_state *);
int (*set_mm)(struct dsa_switch *, int, struct ethtool_mm_cfg *, struct netlink_ext_ack *);
void (*get_mm_stats)(struct dsa_switch *, int, struct ethtool_mm_stats *);
int (*port_get_default_prio)(struct dsa_switch *, int);
int (*port_set_default_prio)(struct dsa_switch *, int, u8);
int (*port_get_dscp_prio)(struct dsa_switch *, int, u8);
int (*port_add_dscp_prio)(struct dsa_switch *, int, u8, u8);
int (*port_del_dscp_prio)(struct dsa_switch *, int, u8, u8);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
struct dsa_port * (*preferred_default_local_cpu_port)(struct dsa_switch *);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*port_prechangeupper)(struct dsa_switch *, int, struct netdev_notifier_changeupper_info *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct dsa_bridge, bool *, struct netlink_ext_ack *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct dsa_bridge);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
int (*port_mst_state_set)(struct dsa_switch *, int, const struct switchdev_mst_state *);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_vlan_fast_age)(struct dsa_switch *, int, u16);
int (*port_pre_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
int (*port_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
void (*port_set_host_flood)(struct dsa_switch *, int, bool, bool);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct netlink_ext_ack *);
int (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct netlink_ext_ack *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*vlan_msti_set)(struct dsa_switch *, struct dsa_bridge, const struct switchdev_vlan_msti *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16, struct dsa_db);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16, struct dsa_db);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*lag_fdb_add)(struct dsa_switch *, struct dsa_lag, const unsigned char *, u16, struct dsa_db);
int (*lag_fdb_del)(struct dsa_switch *, struct dsa_lag, const unsigned char *, u16, struct dsa_db);
int (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct dsa_db);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct dsa_db);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*cls_flower_add)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*cls_flower_del)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*cls_flower_stats)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool, struct netlink_ext_ack *);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*port_policer_add)(struct dsa_switch *, int, struct dsa_mall_policer_tc_entry *);
void (*port_policer_del)(struct dsa_switch *, int);
int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct dsa_bridge, struct netlink_ext_ack *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct dsa_bridge);
int (*crosschip_lag_change)(struct dsa_switch *, int, int);
int (*crosschip_lag_join)(struct dsa_switch *, int, int, struct dsa_lag, struct netdev_lag_upper_info *, struct netlink_ext_ack *);
int (*crosschip_lag_leave)(struct dsa_switch *, int, int, struct dsa_lag);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
void (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
int (*devlink_param_get)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
int (*devlink_param_set)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
int (*devlink_info_get)(struct dsa_switch *, struct devlink_info_req *, struct netlink_ext_ack *);
int (*devlink_sb_pool_get)(struct dsa_switch *, unsigned int, u16, struct devlink_sb_pool_info *);
int (*devlink_sb_pool_set)(struct dsa_switch *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
int (*devlink_sb_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *);
int (*devlink_sb_port_pool_set)(struct dsa_switch *, int, unsigned int, u16, u32, struct netlink_ext_ack *);
int (*devlink_sb_tc_pool_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
int (*devlink_sb_tc_pool_bind_set)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
int (*devlink_sb_occ_snapshot)(struct dsa_switch *, unsigned int);
int (*devlink_sb_occ_max_clear)(struct dsa_switch *, unsigned int);
int (*devlink_sb_occ_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *, u32 *);
int (*devlink_sb_occ_tc_port_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
int (*port_change_mtu)(struct dsa_switch *, int, int);
int (*port_max_mtu)(struct dsa_switch *, int);
int (*port_lag_change)(struct dsa_switch *, int);
int (*port_lag_join)(struct dsa_switch *, int, struct dsa_lag, struct netdev_lag_upper_info *, struct netlink_ext_ack *);
int (*port_lag_leave)(struct dsa_switch *, int, struct dsa_lag);
int (*port_hsr_join)(struct dsa_switch *, int, struct net_device *);
int (*port_hsr_leave)(struct dsa_switch *, int, struct net_device *);
int (*port_mrp_add)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
int (*port_mrp_del)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
int (*port_mrp_add_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
int (*port_mrp_del_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
int (*tag_8021q_vlan_add)(struct dsa_switch *, int, u16, u16);
int (*tag_8021q_vlan_del)(struct dsa_switch *, int, u16);
void (*master_state_change)(struct dsa_switch *, const struct net_device *, bool);
};
6.8
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol);
int (*change_tag_protocol)(struct dsa_switch *, enum dsa_tag_protocol);
int (*connect_tag_protocol)(struct dsa_switch *, enum dsa_tag_protocol);
int (*port_change_conduit)(struct dsa_switch *, int, struct net_device *, struct netlink_ext_ack *);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
int (*port_setup)(struct dsa_switch *, int);
void (*port_teardown)(struct dsa_switch *, int);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_get_caps)(struct dsa_switch *, int, struct phylink_config *);
struct phylink_pcs * (*phylink_mac_select_pcs)(struct dsa_switch *, int, phy_interface_t);
int (*phylink_mac_prepare)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
int (*phylink_mac_finish)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *, int, int, bool, bool);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_eth_phy_stats)(struct dsa_switch *, int, struct ethtool_eth_phy_stats *);
void (*get_eth_mac_stats)(struct dsa_switch *, int, struct ethtool_eth_mac_stats *);
void (*get_eth_ctrl_stats)(struct dsa_switch *, int, struct ethtool_eth_ctrl_stats *);
void (*get_rmon_stats)(struct dsa_switch *, int, struct ethtool_rmon_stats *, const struct ethtool_rmon_hist_range **);
void (*get_stats64)(struct dsa_switch *, int, struct rtnl_link_stats64 *);
void (*get_pause_stats)(struct dsa_switch *, int, struct ethtool_pause_stats *);
void (*self_test)(struct dsa_switch *, int, struct ethtool_test *, u64 *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*get_mm)(struct dsa_switch *, int, struct ethtool_mm_state *);
int (*set_mm)(struct dsa_switch *, int, struct ethtool_mm_cfg *, struct netlink_ext_ack *);
void (*get_mm_stats)(struct dsa_switch *, int, struct ethtool_mm_stats *);
int (*port_get_default_prio)(struct dsa_switch *, int);
int (*port_set_default_prio)(struct dsa_switch *, int, u8);
int (*port_get_dscp_prio)(struct dsa_switch *, int, u8);
int (*port_add_dscp_prio)(struct dsa_switch *, int, u8, u8);
int (*port_del_dscp_prio)(struct dsa_switch *, int, u8, u8);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
int (*port_set_mac_address)(struct dsa_switch *, int, const unsigned char *);
struct dsa_port * (*preferred_default_local_cpu_port)(struct dsa_switch *);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*port_prechangeupper)(struct dsa_switch *, int, struct netdev_notifier_changeupper_info *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct dsa_bridge, bool *, struct netlink_ext_ack *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct dsa_bridge);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
int (*port_mst_state_set)(struct dsa_switch *, int, const struct switchdev_mst_state *);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_vlan_fast_age)(struct dsa_switch *, int, u16);
int (*port_pre_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
int (*port_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *);
void (*port_set_host_flood)(struct dsa_switch *, int, bool, bool);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct netlink_ext_ack *);
int (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct netlink_ext_ack *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*vlan_msti_set)(struct dsa_switch *, struct dsa_bridge, const struct switchdev_vlan_msti *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16, struct dsa_db);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16, struct dsa_db);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*lag_fdb_add)(struct dsa_switch *, struct dsa_lag, const unsigned char *, u16, struct dsa_db);
int (*lag_fdb_del)(struct dsa_switch *, struct dsa_lag, const unsigned char *, u16, struct dsa_db);
int (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct dsa_db);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct dsa_db);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*cls_flower_add)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*cls_flower_del)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*cls_flower_stats)(struct dsa_switch *, int, struct flow_cls_offload *, bool);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool, struct netlink_ext_ack *);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*port_policer_add)(struct dsa_switch *, int, struct dsa_mall_policer_tc_entry *);
void (*port_policer_del)(struct dsa_switch *, int);
int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct dsa_bridge, struct netlink_ext_ack *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct dsa_bridge);
int (*crosschip_lag_change)(struct dsa_switch *, int, int);
int (*crosschip_lag_join)(struct dsa_switch *, int, int, struct dsa_lag, struct netdev_lag_upper_info *, struct netlink_ext_ack *);
int (*crosschip_lag_leave)(struct dsa_switch *, int, int, struct dsa_lag);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
void (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
int (*devlink_param_get)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
int (*devlink_param_set)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *);
int (*devlink_info_get)(struct dsa_switch *, struct devlink_info_req *, struct netlink_ext_ack *);
int (*devlink_sb_pool_get)(struct dsa_switch *, unsigned int, u16, struct devlink_sb_pool_info *);
int (*devlink_sb_pool_set)(struct dsa_switch *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *);
int (*devlink_sb_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *);
int (*devlink_sb_port_pool_set)(struct dsa_switch *, int, unsigned int, u16, u32, struct netlink_ext_ack *);
int (*devlink_sb_tc_pool_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *);
int (*devlink_sb_tc_pool_bind_set)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *);
int (*devlink_sb_occ_snapshot)(struct dsa_switch *, unsigned int);
int (*devlink_sb_occ_max_clear)(struct dsa_switch *, unsigned int);
int (*devlink_sb_occ_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *, u32 *);
int (*devlink_sb_occ_tc_port_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *);
int (*port_change_mtu)(struct dsa_switch *, int, int);
int (*port_max_mtu)(struct dsa_switch *, int);
int (*port_lag_change)(struct dsa_switch *, int);
int (*port_lag_join)(struct dsa_switch *, int, struct dsa_lag, struct netdev_lag_upper_info *, struct netlink_ext_ack *);
int (*port_lag_leave)(struct dsa_switch *, int, struct dsa_lag);
int (*port_hsr_join)(struct dsa_switch *, int, struct net_device *, struct netlink_ext_ack *);
int (*port_hsr_leave)(struct dsa_switch *, int, struct net_device *);
int (*port_mrp_add)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
int (*port_mrp_del)(struct dsa_switch *, int, const struct switchdev_obj_mrp *);
int (*port_mrp_add_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
int (*port_mrp_del_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *);
int (*tag_8021q_vlan_add)(struct dsa_switch *, int, u16, u16);
int (*tag_8021q_vlan_del)(struct dsa_switch *, int, u16);
void (*conduit_state_change)(struct dsa_switch *, const struct net_device *, bool);
};
arm64
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_egress_floods)(struct dsa_switch *, int, bool, bool);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool);
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, struct net_device *);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
netdev_tx_t (*port_deferred_xmit)(struct dsa_switch *, int, struct sk_buff *);
};
armhf
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_egress_floods)(struct dsa_switch *, int, bool, bool);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool);
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, struct net_device *);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
netdev_tx_t (*port_deferred_xmit)(struct dsa_switch *, int, struct sk_buff *);
};
ppc64el
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_egress_floods)(struct dsa_switch *, int, bool, bool);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool);
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, struct net_device *);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
netdev_tx_t (*port_deferred_xmit)(struct dsa_switch *, int, struct sk_buff *);
};
riscv64
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_egress_floods)(struct dsa_switch *, int, bool, bool);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool);
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, struct net_device *);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
netdev_tx_t (*port_deferred_xmit)(struct dsa_switch *, int, struct sk_buff *);
};
aws
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_egress_floods)(struct dsa_switch *, int, bool, bool);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool);
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, struct net_device *);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
netdev_tx_t (*port_deferred_xmit)(struct dsa_switch *, int, struct sk_buff *);
};
azure
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_egress_floods)(struct dsa_switch *, int, bool, bool);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool);
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, struct net_device *);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
netdev_tx_t (*port_deferred_xmit)(struct dsa_switch *, int, struct sk_buff *);
};
gcp
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_egress_floods)(struct dsa_switch *, int, bool, bool);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool);
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, struct net_device *);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
netdev_tx_t (*port_deferred_xmit)(struct dsa_switch *, int, struct sk_buff *);
};
lowlatency
: ✅struct dsa_switch_ops {
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int);
int (*setup)(struct dsa_switch *);
void (*teardown)(struct dsa_switch *);
u32 (*get_phy_flags)(struct dsa_switch *, int);
int (*phy_read)(struct dsa_switch *, int, int);
int (*phy_write)(struct dsa_switch *, int, int, u16);
void (*adjust_link)(struct dsa_switch *, int, struct phy_device *);
void (*fixed_link_update)(struct dsa_switch *, int, struct fixed_phy_status *);
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *);
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *);
void (*phylink_mac_an_restart)(struct dsa_switch *, int);
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t);
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *);
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *);
void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *);
void (*get_ethtool_stats)(struct dsa_switch *, int, uint64_t *);
int (*get_sset_count)(struct dsa_switch *, int, int);
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *);
void (*get_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*set_wol)(struct dsa_switch *, int, struct ethtool_wolinfo *);
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *);
int (*suspend)(struct dsa_switch *);
int (*resume)(struct dsa_switch *);
int (*port_enable)(struct dsa_switch *, int, struct phy_device *);
void (*port_disable)(struct dsa_switch *, int);
int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *);
int (*get_eeprom_len)(struct dsa_switch *);
int (*get_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*set_eeprom)(struct dsa_switch *, struct ethtool_eeprom *, u8 *);
int (*get_regs_len)(struct dsa_switch *, int);
void (*get_regs)(struct dsa_switch *, int, struct ethtool_regs *, void *);
int (*set_ageing_time)(struct dsa_switch *, unsigned int);
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *);
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *);
void (*port_stp_state_set)(struct dsa_switch *, int, u8);
void (*port_fast_age)(struct dsa_switch *, int);
int (*port_egress_floods)(struct dsa_switch *, int, bool, bool);
int (*port_vlan_filtering)(struct dsa_switch *, int, bool);
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_vlan_del)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *);
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16);
int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *);
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *);
int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *);
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *);
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool);
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *);
int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *);
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, struct net_device *);
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, struct net_device *);
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *);
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *);
bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int);
netdev_tx_t (*port_deferred_xmit)(struct dsa_switch *, int, struct sk_buff *);
};
Regular
4.10
and 4.13
⚠️int (*get_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *, u32 *)
int (*set_rxnfc)(struct dsa_switch *, int, struct ethtool_rxnfc *)
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool)
void (*port_mirror_del)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *)
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, struct net_device *)
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, struct net_device *)
struct list_head list
int (*get_temp)(struct dsa_switch *, int *)
int (*get_temp_limit)(struct dsa_switch *, int *)
int (*set_temp_limit)(struct dsa_switch *, int)
int (*get_temp_alarm)(struct dsa_switch *, bool *)
void (*port_bridge_leave)(struct dsa_switch *, int)
➡️ void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *)
int (*port_vlan_dump)(struct dsa_switch *, int, struct switchdev_obj_port_vlan *, int(*)(struct switchdev_obj *))
➡️ int (*port_vlan_dump)(struct dsa_switch *, int, struct switchdev_obj_port_vlan *, switchdev_obj_dump_cb_t *)
int (*port_fdb_dump)(struct dsa_switch *, int, struct switchdev_obj_port_fdb *, int(*)(struct switchdev_obj *))
➡️ int (*port_fdb_dump)(struct dsa_switch *, int, struct switchdev_obj_port_fdb *, switchdev_obj_dump_cb_t *)
int (*port_mdb_dump)(struct dsa_switch *, int, struct switchdev_obj_port_mdb *, int(*)(struct switchdev_obj *))
➡️ int (*port_mdb_dump)(struct dsa_switch *, int, struct switchdev_obj_port_mdb *, switchdev_obj_dump_cb_t *)
4.13
and 4.15
⚠️int (*set_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *)
int (*get_mac_eee)(struct dsa_switch *, int, struct ethtool_eee *)
int (*set_addr)(struct dsa_switch *, u8 *)
int (*set_eee)(struct dsa_switch *, int, struct phy_device *, struct ethtool_eee *)
int (*get_eee)(struct dsa_switch *, int, struct ethtool_eee *)
int (*port_vlan_dump)(struct dsa_switch *, int, struct switchdev_obj_port_vlan *, switchdev_obj_dump_cb_t *)
int (*port_fdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_fdb *, struct switchdev_trans *)
int (*port_mdb_dump)(struct dsa_switch *, int, struct switchdev_obj_port_mdb *, switchdev_obj_dump_cb_t *)
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *)
➡️ enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int)
void (*port_fdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_fdb *, struct switchdev_trans *)
➡️ int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16)
int (*port_fdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_fdb *)
➡️ int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16)
int (*port_fdb_dump)(struct dsa_switch *, int, struct switchdev_obj_port_fdb *, switchdev_obj_dump_cb_t *)
➡️ int (*port_fdb_dump)(struct dsa_switch *, int, dsa_fdb_dump_cb_t *, void *)
4.15
and 4.18
⚠️void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *)
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *)
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *)
void (*phylink_mac_an_restart)(struct dsa_switch *, int)
void (*phylink_mac_link_down)(struct dsa_switch *, int, unsigned int, phy_interface_t)
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *)
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *)
void (*get_ethtool_phy_stats)(struct dsa_switch *, int, uint64_t *)
int (*get_ts_info)(struct dsa_switch *, int, struct ethtool_ts_info *)
int (*port_hwtstamp_get)(struct dsa_switch *, int, struct ifreq *)
int (*port_hwtstamp_set)(struct dsa_switch *, int, struct ifreq *)
bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int)
bool (*port_rxtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int)
void (*get_strings)(struct dsa_switch *, int, uint8_t *)
➡️ void (*get_strings)(struct dsa_switch *, int, u32, uint8_t *)
int (*get_sset_count)(struct dsa_switch *)
➡️ int (*get_sset_count)(struct dsa_switch *, int, int)
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct switchdev_trans *)
➡️ int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *)
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct switchdev_trans *)
➡️ void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *)
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct switchdev_trans *)
➡️ int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *)
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct switchdev_trans *)
➡️ void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *)
4.18
and 5.0
✅
5.0
and 5.3
⚠️void (*teardown)(struct dsa_switch *)
int (*port_egress_floods)(struct dsa_switch *, int, bool, bool)
netdev_tx_t (*port_deferred_xmit)(struct dsa_switch *, int, struct sk_buff *)
const char * (*probe)(struct device *, struct device *, int, void **)
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *)
➡️ void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *)
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *)
➡️ int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *)
void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *)
➡️ void (*phylink_mac_config)(struct dsa_switch *, int, unsigned int, const struct phylink_link_state *)
void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *)
➡️ void (*phylink_fixed_state)(struct dsa_switch *, int, struct phylink_link_state *)
void (*port_disable)(struct dsa_switch *, int, struct phy_device *)
➡️ void (*port_disable)(struct dsa_switch *, int)
5.3
and 5.4
⚠️int (*port_setup_tc)(struct dsa_switch *, int, enum tc_setup_type, void *)
5.4
and 5.8
⚠️int (*cls_flower_add)(struct dsa_switch *, int, struct flow_cls_offload *, bool)
int (*cls_flower_del)(struct dsa_switch *, int, struct flow_cls_offload *, bool)
int (*cls_flower_stats)(struct dsa_switch *, int, struct flow_cls_offload *, bool)
int (*port_policer_add)(struct dsa_switch *, int, struct dsa_mall_policer_tc_entry *)
void (*port_policer_del)(struct dsa_switch *, int)
int (*devlink_param_get)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *)
int (*devlink_param_set)(struct dsa_switch *, u32, struct devlink_param_gset_ctx *)
int (*port_change_mtu)(struct dsa_switch *, int, int)
int (*port_max_mtu)(struct dsa_switch *, int)
netdev_tx_t (*port_deferred_xmit)(struct dsa_switch *, int, struct sk_buff *)
enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int)
➡️ enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol)
void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *)
➡️ void (*phylink_mac_link_up)(struct dsa_switch *, int, unsigned int, phy_interface_t, struct phy_device *, int, int, bool, bool)
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, struct net_device *)
➡️ int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct net_device *)
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, struct net_device *)
➡️ void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct net_device *)
5.8
and 5.11
⚠️int (*port_prechangeupper)(struct dsa_switch *, int, struct netdev_notifier_changeupper_info *)
int (*devlink_info_get)(struct dsa_switch *, struct devlink_info_req *, struct netlink_ext_ack *)
int (*port_vlan_filtering)(struct dsa_switch *, int, bool)
➡️ int (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct switchdev_trans *)
5.11
and 5.13
⚠️int (*change_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol)
void (*get_stats64)(struct dsa_switch *, int, struct rtnl_link_stats64 *)
void (*self_test)(struct dsa_switch *, int, struct ethtool_test *, u64 *)
int (*port_pre_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *)
int (*port_bridge_flags)(struct dsa_switch *, int, struct switchdev_brport_flags, struct netlink_ext_ack *)
int (*port_set_mrouter)(struct dsa_switch *, int, bool, struct netlink_ext_ack *)
int (*crosschip_lag_change)(struct dsa_switch *, int, int)
int (*crosschip_lag_join)(struct dsa_switch *, int, int, struct net_device *, struct netdev_lag_upper_info *)
int (*crosschip_lag_leave)(struct dsa_switch *, int, int, struct net_device *)
int (*devlink_sb_pool_get)(struct dsa_switch *, unsigned int, u16, struct devlink_sb_pool_info *)
int (*devlink_sb_pool_set)(struct dsa_switch *, unsigned int, u16, u32, enum devlink_sb_threshold_type, struct netlink_ext_ack *)
int (*devlink_sb_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *)
int (*devlink_sb_port_pool_set)(struct dsa_switch *, int, unsigned int, u16, u32, struct netlink_ext_ack *)
int (*devlink_sb_tc_pool_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16 *, u32 *)
int (*devlink_sb_tc_pool_bind_set)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u16, u32, struct netlink_ext_ack *)
int (*devlink_sb_occ_snapshot)(struct dsa_switch *, unsigned int)
int (*devlink_sb_occ_max_clear)(struct dsa_switch *, unsigned int)
int (*devlink_sb_occ_port_pool_get)(struct dsa_switch *, int, unsigned int, u16, u32 *, u32 *)
int (*devlink_sb_occ_tc_port_bind_get)(struct dsa_switch *, int, unsigned int, u16, enum devlink_sb_pool_type, u32 *, u32 *)
int (*port_lag_change)(struct dsa_switch *, int)
int (*port_lag_join)(struct dsa_switch *, int, struct net_device *, struct netdev_lag_upper_info *)
int (*port_lag_leave)(struct dsa_switch *, int, struct net_device *)
int (*port_hsr_join)(struct dsa_switch *, int, struct net_device *)
int (*port_hsr_leave)(struct dsa_switch *, int, struct net_device *)
int (*port_mrp_add)(struct dsa_switch *, int, const struct switchdev_obj_mrp *)
int (*port_mrp_del)(struct dsa_switch *, int, const struct switchdev_obj_mrp *)
int (*port_mrp_add_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *)
int (*port_mrp_del_ring_role)(struct dsa_switch *, int, const struct switchdev_obj_ring_role_mrp *)
int (*port_egress_floods)(struct dsa_switch *, int, bool, bool)
int (*port_vlan_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *)
int (*port_mdb_prepare)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *)
int (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct switchdev_trans *)
➡️ int (*port_vlan_filtering)(struct dsa_switch *, int, bool, struct netlink_ext_ack *)
void (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *)
➡️ int (*port_vlan_add)(struct dsa_switch *, int, const struct switchdev_obj_port_vlan *, struct netlink_ext_ack *)
void (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *)
➡️ int (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *)
bool (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *, unsigned int)
➡️ void (*port_txtstamp)(struct dsa_switch *, int, struct sk_buff *)
5.13
and 5.15
⚠️int (*port_setup)(struct dsa_switch *, int)
void (*port_teardown)(struct dsa_switch *, int)
int (*port_bridge_tx_fwd_offload)(struct dsa_switch *, int, struct net_device *, int)
void (*port_bridge_tx_fwd_unoffload)(struct dsa_switch *, int, struct net_device *, int)
int (*tag_8021q_vlan_add)(struct dsa_switch *, int, u16, u16)
int (*tag_8021q_vlan_del)(struct dsa_switch *, int, u16)
int (*port_set_mrouter)(struct dsa_switch *, int, bool, struct netlink_ext_ack *)
5.15
and 5.19
⚠️int (*connect_tag_protocol)(struct dsa_switch *, enum dsa_tag_protocol)
void (*phylink_get_caps)(struct dsa_switch *, int, struct phylink_config *)
struct phylink_pcs * (*phylink_mac_select_pcs)(struct dsa_switch *, int, phy_interface_t)
void (*get_eth_phy_stats)(struct dsa_switch *, int, struct ethtool_eth_phy_stats *)
void (*get_eth_mac_stats)(struct dsa_switch *, int, struct ethtool_eth_mac_stats *)
void (*get_eth_ctrl_stats)(struct dsa_switch *, int, struct ethtool_eth_ctrl_stats *)
int (*port_get_default_prio)(struct dsa_switch *, int)
int (*port_set_default_prio)(struct dsa_switch *, int, u8)
int (*port_get_dscp_prio)(struct dsa_switch *, int, u8)
int (*port_add_dscp_prio)(struct dsa_switch *, int, u8, u8)
int (*port_del_dscp_prio)(struct dsa_switch *, int, u8, u8)
int (*port_mst_state_set)(struct dsa_switch *, int, const struct switchdev_mst_state *)
int (*port_vlan_fast_age)(struct dsa_switch *, int, u16)
void (*port_set_host_flood)(struct dsa_switch *, int, bool, bool)
int (*vlan_msti_set)(struct dsa_switch *, struct dsa_bridge, const struct switchdev_vlan_msti *)
int (*lag_fdb_add)(struct dsa_switch *, struct dsa_lag, const unsigned char *, u16, struct dsa_db)
int (*lag_fdb_del)(struct dsa_switch *, struct dsa_lag, const unsigned char *, u16, struct dsa_db)
void (*master_state_change)(struct dsa_switch *, const struct net_device *, bool)
int (*port_bridge_tx_fwd_offload)(struct dsa_switch *, int, struct net_device *, int)
void (*port_bridge_tx_fwd_unoffload)(struct dsa_switch *, int, struct net_device *, int)
int (*change_tag_protocol)(struct dsa_switch *, int, enum dsa_tag_protocol)
➡️ int (*change_tag_protocol)(struct dsa_switch *, enum dsa_tag_protocol)
int (*port_bridge_join)(struct dsa_switch *, int, struct net_device *)
➡️ int (*port_bridge_join)(struct dsa_switch *, int, struct dsa_bridge, bool *, struct netlink_ext_ack *)
void (*port_bridge_leave)(struct dsa_switch *, int, struct net_device *)
➡️ void (*port_bridge_leave)(struct dsa_switch *, int, struct dsa_bridge)
int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16)
➡️ int (*port_fdb_add)(struct dsa_switch *, int, const unsigned char *, u16, struct dsa_db)
int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16)
➡️ int (*port_fdb_del)(struct dsa_switch *, int, const unsigned char *, u16, struct dsa_db)
int (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *)
➡️ int (*port_mdb_add)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct dsa_db)
int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *)
➡️ int (*port_mdb_del)(struct dsa_switch *, int, const struct switchdev_obj_port_mdb *, struct dsa_db)
int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool)
➡️ int (*port_mirror_add)(struct dsa_switch *, int, struct dsa_mall_mirror_tc_entry *, bool, struct netlink_ext_ack *)
int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct net_device *)
➡️ int (*crosschip_bridge_join)(struct dsa_switch *, int, int, int, struct dsa_bridge, struct netlink_ext_ack *)
void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct net_device *)
➡️ void (*crosschip_bridge_leave)(struct dsa_switch *, int, int, int, struct dsa_bridge)
int (*crosschip_lag_join)(struct dsa_switch *, int, int, struct net_device *, struct netdev_lag_upper_info *)
➡️ int (*crosschip_lag_join)(struct dsa_switch *, int, int, struct dsa_lag, struct netdev_lag_upper_info *)
int (*crosschip_lag_leave)(struct dsa_switch *, int, int, struct net_device *)
➡️ int (*crosschip_lag_leave)(struct dsa_switch *, int, int, struct dsa_lag)
int (*port_lag_join)(struct dsa_switch *, int, struct net_device *, struct netdev_lag_upper_info *)
➡️ int (*port_lag_join)(struct dsa_switch *, int, struct dsa_lag, struct netdev_lag_upper_info *)
int (*port_lag_leave)(struct dsa_switch *, int, struct net_device *)
➡️ int (*port_lag_leave)(struct dsa_switch *, int, struct dsa_lag)
5.19
and 6.2
⚠️int (*port_change_master)(struct dsa_switch *, int, struct net_device *, struct netlink_ext_ack *)
void (*get_rmon_stats)(struct dsa_switch *, int, struct ethtool_rmon_stats *, const struct ethtool_rmon_hist_range **)
void (*get_pause_stats)(struct dsa_switch *, int, struct ethtool_pause_stats *)
void (*phylink_validate)(struct dsa_switch *, int, long unsigned int *, struct phylink_link_state *)
int (*crosschip_lag_join)(struct dsa_switch *, int, int, struct dsa_lag, struct netdev_lag_upper_info *)
➡️ int (*crosschip_lag_join)(struct dsa_switch *, int, int, struct dsa_lag, struct netdev_lag_upper_info *, struct netlink_ext_ack *)
int (*port_lag_join)(struct dsa_switch *, int, struct dsa_lag, struct netdev_lag_upper_info *)
➡️ int (*port_lag_join)(struct dsa_switch *, int, struct dsa_lag, struct netdev_lag_upper_info *, struct netlink_ext_ack *)
6.2
and 6.5
⚠️int (*phylink_mac_prepare)(struct dsa_switch *, int, unsigned int, phy_interface_t)
int (*phylink_mac_finish)(struct dsa_switch *, int, unsigned int, phy_interface_t)
int (*get_mm)(struct dsa_switch *, int, struct ethtool_mm_state *)
int (*set_mm)(struct dsa_switch *, int, struct ethtool_mm_cfg *, struct netlink_ext_ack *)
void (*get_mm_stats)(struct dsa_switch *, int, struct ethtool_mm_stats *)
struct dsa_port * (*preferred_default_local_cpu_port)(struct dsa_switch *)
6.5
and 6.8
⚠️int (*port_change_conduit)(struct dsa_switch *, int, struct net_device *, struct netlink_ext_ack *)
int (*port_set_mac_address)(struct dsa_switch *, int, const unsigned char *)
void (*conduit_state_change)(struct dsa_switch *, const struct net_device *, bool)
int (*port_change_master)(struct dsa_switch *, int, struct net_device *, struct netlink_ext_ack *)
int (*phylink_mac_link_state)(struct dsa_switch *, int, struct phylink_link_state *)
void (*phylink_mac_an_restart)(struct dsa_switch *, int)
void (*master_state_change)(struct dsa_switch *, const struct net_device *, bool)
int (*port_hsr_join)(struct dsa_switch *, int, struct net_device *)
➡️ int (*port_hsr_join)(struct dsa_switch *, int, struct net_device *, struct netlink_ext_ack *)
amd64
and arm64
✅
amd64
and armhf
✅
amd64
and ppc64el
✅
amd64
and riscv64
✅
generic
and aws
✅
generic
and azure
✅
generic
and gcp
✅
generic
and lowlatency
✅