Lines Matching refs:mlxsw_sp

29 	struct mlxsw_sp *mlxsw_sp;  member
103 void (*init)(struct mlxsw_sp *mlxsw_sp);
134 mlxsw_sp_bridge_port_fdb_flush(struct mlxsw_sp *mlxsw_sp,
144 mlxsw_sp_bridge_mdb_mc_enable_sync(struct mlxsw_sp *mlxsw_sp,
166 bool mlxsw_sp_bridge_device_is_offloaded(const struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_bridge_device_is_offloaded() argument
169 return !!mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, br_dev); in mlxsw_sp_bridge_device_is_offloaded()
175 struct mlxsw_sp *mlxsw_sp = priv->data; in mlxsw_sp_bridge_device_upper_rif_destroy() local
177 mlxsw_sp_rif_destroy_by_dev(mlxsw_sp, dev); in mlxsw_sp_bridge_device_upper_rif_destroy()
181 static void mlxsw_sp_bridge_device_rifs_destroy(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_bridge_device_rifs_destroy() argument
185 .data = (void *)mlxsw_sp, in mlxsw_sp_bridge_device_rifs_destroy()
188 mlxsw_sp_rif_destroy_by_dev(mlxsw_sp, dev); in mlxsw_sp_bridge_device_rifs_destroy()
204 err = mlxsw_sp_bridge_vxlan_join(bridge->mlxsw_sp, in mlxsw_sp_bridge_device_vxlan_init()
221 mlxsw_sp_bridge_vxlan_leave(bridge->mlxsw_sp, dev); in mlxsw_sp_bridge_device_vxlan_init()
235 mlxsw_sp_bridge_vxlan_leave(bridge->mlxsw_sp, dev); in mlxsw_sp_bridge_device_vxlan_fini()
239 static void mlxsw_sp_fdb_notify_work_schedule(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_fdb_notify_work_schedule() argument
242 struct mlxsw_sp_bridge *bridge = mlxsw_sp->bridge; in mlxsw_sp_fdb_notify_work_schedule()
254 struct device *dev = bridge->mlxsw_sp->bus_info->dev; in mlxsw_sp_bridge_device_create()
293 mlxsw_sp_fdb_notify_work_schedule(bridge->mlxsw_sp, false); in mlxsw_sp_bridge_device_create()
321 mlxsw_sp_bridge_device_rifs_destroy(bridge->mlxsw_sp, in mlxsw_sp_bridge_device_destroy()
609 bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp_port->mlxsw_sp->bridge, in mlxsw_sp_port_attr_stp_state_set()
800 bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp_port->mlxsw_sp->bridge, in mlxsw_sp_port_attr_br_flags_set()
839 static int mlxsw_sp_ageing_set(struct mlxsw_sp *mlxsw_sp, u32 ageing_time) in mlxsw_sp_ageing_set() argument
845 err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sfdat), sfdat_pl); in mlxsw_sp_ageing_set()
848 mlxsw_sp->bridge->ageing_time = ageing_time; in mlxsw_sp_ageing_set()
855 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp; in mlxsw_sp_port_attr_br_ageing_set() local
863 return mlxsw_sp_ageing_set(mlxsw_sp, ageing_time); in mlxsw_sp_port_attr_br_ageing_set()
870 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp; in mlxsw_sp_port_attr_br_vlan_set() local
873 bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, orig_dev); in mlxsw_sp_port_attr_br_vlan_set()
888 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp; in mlxsw_sp_port_attr_br_vlan_proto_set() local
891 bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, orig_dev); in mlxsw_sp_port_attr_br_vlan_proto_set()
906 bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp_port->mlxsw_sp->bridge, in mlxsw_sp_port_attr_mrouter_set()
942 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp; in mlxsw_sp_port_mc_disabled_set() local
950 bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, orig_dev); in mlxsw_sp_port_mc_disabled_set()
958 err = mlxsw_sp_bridge_mdb_mc_enable_sync(mlxsw_sp, bridge_device, in mlxsw_sp_port_mc_disabled_set()
983 mlxsw_sp_bridge_mdb_mc_enable_sync(mlxsw_sp, bridge_device, in mlxsw_sp_port_mc_disabled_set()
1005 mlxsw_sp_mdb_entry_port_get(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_mdb_entry_port_get() argument
1022 err = mlxsw_sp_pgt_entry_port_set(mlxsw_sp, mdb_entry->mid, in mlxsw_sp_mdb_entry_port_get()
1041 mlxsw_sp_pgt_entry_port_set(mlxsw_sp, mdb_entry->mid, in mlxsw_sp_mdb_entry_port_get()
1047 mlxsw_sp_mdb_entry_port_put(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_mdb_entry_port_put() argument
1067 mlxsw_sp_pgt_entry_port_set(mlxsw_sp, mdb_entry->mid, in mlxsw_sp_mdb_entry_port_put()
1072 mlxsw_sp_mdb_entry_mrouter_port_get(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_mdb_entry_mrouter_port_get() argument
1086 err = mlxsw_sp_pgt_entry_port_set(mlxsw_sp, mdb_entry->mid, in mlxsw_sp_mdb_entry_mrouter_port_get()
1105 mlxsw_sp_pgt_entry_port_set(mlxsw_sp, mdb_entry->mid, in mlxsw_sp_mdb_entry_mrouter_port_get()
1111 mlxsw_sp_mdb_entry_mrouter_port_put(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_mdb_entry_mrouter_port_put() argument
1130 mlxsw_sp_pgt_entry_port_set(mlxsw_sp, mdb_entry->mid, in mlxsw_sp_mdb_entry_mrouter_port_put()
1135 mlxsw_sp_bridge_mrouter_update_mdb(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_bridge_mrouter_update_mdb() argument
1139 u16 local_port = mlxsw_sp_router_port(mlxsw_sp); in mlxsw_sp_bridge_mrouter_update_mdb()
1144 mlxsw_sp_mdb_entry_mrouter_port_get(mlxsw_sp, mdb_entry, in mlxsw_sp_bridge_mrouter_update_mdb()
1147 mlxsw_sp_mdb_entry_mrouter_port_put(mlxsw_sp, mdb_entry, in mlxsw_sp_bridge_mrouter_update_mdb()
1157 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp; in mlxsw_sp_port_attr_br_mrouter_set() local
1163 bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, orig_dev); in mlxsw_sp_port_attr_br_mrouter_set()
1168 mlxsw_sp_bridge_mrouter_update_mdb(mlxsw_sp, bridge_device, in mlxsw_sp_port_attr_br_mrouter_set()
1230 mlxsw_sp_span_respin(mlxsw_sp_port->mlxsw_sp); in mlxsw_sp_port_attr_set()
1352 mlxsw_sp_bridge_port_get(mlxsw_sp_port->mlxsw_sp->bridge, in mlxsw_sp_port_vlan_bridge_join()
1390 mlxsw_sp_bridge_port_fdb_flush(mlxsw_sp_port->mlxsw_sp, in mlxsw_sp_port_vlan_bridge_leave()
1399 mlxsw_sp_bridge_port_put(mlxsw_sp_port->mlxsw_sp->bridge, bridge_port); in mlxsw_sp_port_vlan_bridge_leave()
1458 mlxsw_sp_br_ban_rif_pvid_change(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_br_ban_rif_pvid_change() argument
1464 pvid = mlxsw_sp_rif_vid(mlxsw_sp, br_dev); in mlxsw_sp_br_ban_rif_pvid_change()
1489 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp; in mlxsw_sp_port_vlans_add() local
1497 err = mlxsw_sp_br_ban_rif_pvid_change(mlxsw_sp, in mlxsw_sp_port_vlans_add()
1504 bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp->bridge, orig_dev); in mlxsw_sp_port_vlans_add()
1523 mlxsw_sp_bridge_port_fdb_flush(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_bridge_port_fdb_flush() argument
1536 return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sfdf), sfdf_pl); in mlxsw_sp_bridge_port_fdb_flush()
1552 mlxsw_sp_port_fdb_tun_uc_op4(struct mlxsw_sp *mlxsw_sp, bool dynamic, in mlxsw_sp_port_fdb_tun_uc_op4() argument
1570 err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sfd), sfd_pl); in mlxsw_sp_port_fdb_tun_uc_op4()
1582 static int mlxsw_sp_port_fdb_tun_uc_op6_sfd_write(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_port_fdb_tun_uc_op6_sfd_write() argument
1598 err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sfd), sfd_pl); in mlxsw_sp_port_fdb_tun_uc_op6_sfd_write()
1610 static int mlxsw_sp_port_fdb_tun_uc_op6_add(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_port_fdb_tun_uc_op6_add() argument
1617 err = mlxsw_sp_nve_ipv6_addr_kvdl_set(mlxsw_sp, addr, &kvdl_index); in mlxsw_sp_port_fdb_tun_uc_op6_add()
1621 err = mlxsw_sp_port_fdb_tun_uc_op6_sfd_write(mlxsw_sp, mac, fid, in mlxsw_sp_port_fdb_tun_uc_op6_add()
1626 err = mlxsw_sp_nve_ipv6_addr_map_replace(mlxsw_sp, mac, fid, addr); in mlxsw_sp_port_fdb_tun_uc_op6_add()
1636 mlxsw_sp_port_fdb_tun_uc_op6_sfd_write(mlxsw_sp, mac, fid, kvdl_index, in mlxsw_sp_port_fdb_tun_uc_op6_add()
1639 mlxsw_sp_nve_ipv6_addr_kvdl_unset(mlxsw_sp, addr); in mlxsw_sp_port_fdb_tun_uc_op6_add()
1643 static void mlxsw_sp_port_fdb_tun_uc_op6_del(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_port_fdb_tun_uc_op6_del() argument
1647 mlxsw_sp_nve_ipv6_addr_map_del(mlxsw_sp, mac, fid); in mlxsw_sp_port_fdb_tun_uc_op6_del()
1648 mlxsw_sp_port_fdb_tun_uc_op6_sfd_write(mlxsw_sp, mac, fid, 0, false); in mlxsw_sp_port_fdb_tun_uc_op6_del()
1649 mlxsw_sp_nve_ipv6_addr_kvdl_unset(mlxsw_sp, addr); in mlxsw_sp_port_fdb_tun_uc_op6_del()
1653 mlxsw_sp_port_fdb_tun_uc_op6(struct mlxsw_sp *mlxsw_sp, const char *mac, in mlxsw_sp_port_fdb_tun_uc_op6() argument
1657 return mlxsw_sp_port_fdb_tun_uc_op6_add(mlxsw_sp, mac, fid, in mlxsw_sp_port_fdb_tun_uc_op6()
1660 mlxsw_sp_port_fdb_tun_uc_op6_del(mlxsw_sp, mac, fid, addr); in mlxsw_sp_port_fdb_tun_uc_op6()
1664 static int mlxsw_sp_port_fdb_tunnel_uc_op(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_port_fdb_tunnel_uc_op() argument
1672 return mlxsw_sp_port_fdb_tun_uc_op4(mlxsw_sp, dynamic, mac, fid, in mlxsw_sp_port_fdb_tunnel_uc_op()
1675 return mlxsw_sp_port_fdb_tun_uc_op6(mlxsw_sp, mac, fid, in mlxsw_sp_port_fdb_tunnel_uc_op()
1683 static int __mlxsw_sp_port_fdb_uc_op(struct mlxsw_sp *mlxsw_sp, u16 local_port, in __mlxsw_sp_port_fdb_uc_op() argument
1701 err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sfd), sfd_pl); in __mlxsw_sp_port_fdb_uc_op()
1713 static int mlxsw_sp_port_fdb_uc_op(struct mlxsw_sp *mlxsw_sp, u16 local_port, in mlxsw_sp_port_fdb_uc_op() argument
1717 return __mlxsw_sp_port_fdb_uc_op(mlxsw_sp, local_port, mac, fid, vid, in mlxsw_sp_port_fdb_uc_op()
1722 int mlxsw_sp_rif_fdb_op(struct mlxsw_sp *mlxsw_sp, const char *mac, u16 fid, in mlxsw_sp_rif_fdb_op() argument
1725 return __mlxsw_sp_port_fdb_uc_op(mlxsw_sp, 0, mac, fid, 0, adding, in mlxsw_sp_rif_fdb_op()
1730 static int mlxsw_sp_port_fdb_uc_lag_op(struct mlxsw_sp *mlxsw_sp, u16 lag_id, in mlxsw_sp_port_fdb_uc_lag_op() argument
1747 err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sfd), sfd_pl); in mlxsw_sp_port_fdb_uc_lag_op()
1763 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp; in mlxsw_sp_port_fdb_set() local
1770 bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp->bridge, orig_dev); in mlxsw_sp_port_fdb_set()
1785 return mlxsw_sp_port_fdb_uc_op(mlxsw_sp, in mlxsw_sp_port_fdb_set()
1790 return mlxsw_sp_port_fdb_uc_lag_op(mlxsw_sp, in mlxsw_sp_port_fdb_set()
1796 static int mlxsw_sp_mdb_entry_write(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_mdb_entry_write() argument
1813 err = mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(sfd), sfd_pl); in mlxsw_sp_mdb_entry_write()
1826 mlxsw_sp_bridge_port_get_ports_bitmap(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_bridge_port_get_ports_bitmap() argument
1837 max_lag_members = MLXSW_CORE_RES_GET(mlxsw_sp->core, in mlxsw_sp_bridge_port_get_ports_bitmap()
1841 mlxsw_sp_port = mlxsw_sp_port_lagged_get(mlxsw_sp, in mlxsw_sp_bridge_port_get_ports_bitmap()
1853 struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_mc_get_mrouters_bitmap() argument
1859 mlxsw_sp_bridge_port_get_ports_bitmap(mlxsw_sp, in mlxsw_sp_mc_get_mrouters_bitmap()
1866 static int mlxsw_sp_mc_mdb_mrouters_add(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_mc_mdb_mrouters_add() argument
1875 mdb_entry_port = mlxsw_sp_mdb_entry_mrouter_port_get(mlxsw_sp, in mlxsw_sp_mc_mdb_mrouters_add()
1888 mlxsw_sp_mdb_entry_mrouter_port_put(mlxsw_sp, mdb_entry, i); in mlxsw_sp_mc_mdb_mrouters_add()
1892 static void mlxsw_sp_mc_mdb_mrouters_del(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_mc_mdb_mrouters_del() argument
1899 mlxsw_sp_mdb_entry_mrouter_port_put(mlxsw_sp, mdb_entry, i); in mlxsw_sp_mc_mdb_mrouters_del()
1903 mlxsw_sp_mc_mdb_mrouters_set(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_mc_mdb_mrouters_set() argument
1910 err = mlxsw_sp_port_bitmap_init(mlxsw_sp, &ports_bm); in mlxsw_sp_mc_mdb_mrouters_set()
1914 mlxsw_sp_mc_get_mrouters_bitmap(&ports_bm, bridge_device, mlxsw_sp); in mlxsw_sp_mc_mdb_mrouters_set()
1917 err = mlxsw_sp_mc_mdb_mrouters_add(mlxsw_sp, &ports_bm, in mlxsw_sp_mc_mdb_mrouters_set()
1920 mlxsw_sp_mc_mdb_mrouters_del(mlxsw_sp, &ports_bm, mdb_entry); in mlxsw_sp_mc_mdb_mrouters_set()
1927 mlxsw_sp_mc_mdb_entry_init(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_mc_mdb_entry_init() argument
1941 err = mlxsw_sp_pgt_mid_alloc(mlxsw_sp, &mdb_entry->mid); in mlxsw_sp_mc_mdb_entry_init()
1947 err = mlxsw_sp_mc_mdb_mrouters_set(mlxsw_sp, bridge_device, mdb_entry, in mlxsw_sp_mc_mdb_entry_init()
1952 mdb_entry_port = mlxsw_sp_mdb_entry_port_get(mlxsw_sp, mdb_entry, in mlxsw_sp_mc_mdb_entry_init()
1960 err = mlxsw_sp_mdb_entry_write(mlxsw_sp, mdb_entry, true); in mlxsw_sp_mc_mdb_entry_init()
1977 mlxsw_sp_mdb_entry_write(mlxsw_sp, mdb_entry, false); in mlxsw_sp_mc_mdb_entry_init()
1979 mlxsw_sp_mdb_entry_port_put(mlxsw_sp, mdb_entry, local_port, false); in mlxsw_sp_mc_mdb_entry_init()
1981 mlxsw_sp_mc_mdb_mrouters_set(mlxsw_sp, bridge_device, mdb_entry, false); in mlxsw_sp_mc_mdb_entry_init()
1983 mlxsw_sp_pgt_mid_free(mlxsw_sp, mdb_entry->mid); in mlxsw_sp_mc_mdb_entry_init()
1990 mlxsw_sp_mc_mdb_entry_fini(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_mc_mdb_entry_fini() argument
1999 mlxsw_sp_mdb_entry_write(mlxsw_sp, mdb_entry, false); in mlxsw_sp_mc_mdb_entry_fini()
2000 mlxsw_sp_mdb_entry_port_put(mlxsw_sp, mdb_entry, local_port, force); in mlxsw_sp_mc_mdb_entry_fini()
2001 mlxsw_sp_mc_mdb_mrouters_set(mlxsw_sp, bridge_device, mdb_entry, false); in mlxsw_sp_mc_mdb_entry_fini()
2003 mlxsw_sp_pgt_mid_free(mlxsw_sp, mdb_entry->mid); in mlxsw_sp_mc_mdb_entry_fini()
2008 mlxsw_sp_mc_mdb_entry_get(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_mc_mdb_entry_get() argument
2022 mdb_entry_port = mlxsw_sp_mdb_entry_port_get(mlxsw_sp, in mlxsw_sp_mc_mdb_entry_get()
2031 return mlxsw_sp_mc_mdb_entry_init(mlxsw_sp, bridge_device, addr, fid, in mlxsw_sp_mc_mdb_entry_get()
2058 mlxsw_sp_mc_mdb_entry_put(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_mc_mdb_entry_put() argument
2076 mlxsw_sp_mc_mdb_entry_fini(mlxsw_sp, mdb_entry, bridge_device, in mlxsw_sp_mc_mdb_entry_put()
2079 mlxsw_sp_mdb_entry_port_put(mlxsw_sp, mdb_entry, local_port, in mlxsw_sp_mc_mdb_entry_put()
2086 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp; in mlxsw_sp_port_mdb_add() local
2094 bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp->bridge, orig_dev); in mlxsw_sp_port_mdb_add()
2107 mdb_entry = mlxsw_sp_mc_mdb_entry_get(mlxsw_sp, bridge_device, in mlxsw_sp_port_mdb_add()
2117 mlxsw_sp_bridge_mdb_mc_enable_sync(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_bridge_mdb_mc_enable_sync() argument
2125 err = mlxsw_sp_mdb_entry_write(mlxsw_sp, mdb_entry, mc_enabled); in mlxsw_sp_bridge_mdb_mc_enable_sync()
2134 mlxsw_sp_mdb_entry_write(mlxsw_sp, mdb_entry, !mc_enabled); in mlxsw_sp_bridge_mdb_mc_enable_sync()
2143 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp; in mlxsw_sp_port_mrouter_update_mdb() local
2152 mlxsw_sp_mdb_entry_mrouter_port_get(mlxsw_sp, mdb_entry, in mlxsw_sp_port_mrouter_update_mdb()
2155 mlxsw_sp_mdb_entry_mrouter_port_put(mlxsw_sp, mdb_entry, in mlxsw_sp_port_mrouter_update_mdb()
2179 mlxsw_sp_span_respin(mlxsw_sp_port->mlxsw_sp); in mlxsw_sp_port_obj_add()
2215 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp; in mlxsw_sp_port_vlans_del() local
2222 bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp->bridge, orig_dev); in mlxsw_sp_port_vlans_del()
2237 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp; in mlxsw_sp_port_mdb_del() local
2247 bridge_port = mlxsw_sp_bridge_port_find(mlxsw_sp->bridge, orig_dev); in mlxsw_sp_port_mdb_del()
2269 mlxsw_sp_mc_mdb_entry_put(mlxsw_sp, bridge_device, mdb_entry, in mlxsw_sp_port_mdb_del()
2279 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp; in mlxsw_sp_bridge_port_mdb_flush() local
2292 mlxsw_sp_mdb_entry_mrouter_port_put(mlxsw_sp, in mlxsw_sp_bridge_port_mdb_flush()
2296 mlxsw_sp_mc_mdb_entry_put(mlxsw_sp, bridge_device, mdb_entry, in mlxsw_sp_bridge_port_mdb_flush()
2321 mlxsw_sp_span_respin(mlxsw_sp_port->mlxsw_sp); in mlxsw_sp_port_obj_del()
2326 static struct mlxsw_sp_port *mlxsw_sp_lag_rep_port(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_lag_rep_port() argument
2333 max_lag_members = MLXSW_CORE_RES_GET(mlxsw_sp->core, in mlxsw_sp_lag_rep_port()
2336 mlxsw_sp_port = mlxsw_sp_port_lagged_get(mlxsw_sp, lag_id, i); in mlxsw_sp_lag_rep_port()
2392 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_lower_get(bridge_device->dev); in mlxsw_sp_bridge_vlan_aware_vxlan_join() local
2413 fid = mlxsw_sp_fid_8021q_get(mlxsw_sp, vid); in mlxsw_sp_bridge_vlan_aware_vxlan_join()
2425 err = mlxsw_sp_nve_fid_enable(mlxsw_sp, fid, &params, extack); in mlxsw_sp_bridge_vlan_aware_vxlan_join()
2473 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_lower_get(bridge_device->dev); in mlxsw_sp_bridge_8021q_fid_get() local
2475 return mlxsw_sp_fid_8021q_get(mlxsw_sp, vid); in mlxsw_sp_bridge_8021q_fid_get()
2482 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_lower_get(bridge_device->dev); in mlxsw_sp_bridge_8021q_fid_lookup() local
2484 return mlxsw_sp_fid_8021q_lookup(mlxsw_sp, vid); in mlxsw_sp_bridge_8021q_fid_lookup()
2570 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_lower_get(bridge_device->dev); in mlxsw_sp_bridge_8021d_vxlan_join() local
2581 fid = mlxsw_sp_fid_8021d_get(mlxsw_sp, bridge_device->dev->ifindex); in mlxsw_sp_bridge_8021d_vxlan_join()
2593 err = mlxsw_sp_nve_fid_enable(mlxsw_sp, fid, &params, extack); in mlxsw_sp_bridge_8021d_vxlan_join()
2609 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_lower_get(bridge_device->dev); in mlxsw_sp_bridge_8021d_fid_get() local
2611 return mlxsw_sp_fid_8021d_get(mlxsw_sp, bridge_device->dev->ifindex); in mlxsw_sp_bridge_8021d_fid_get()
2618 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_lower_get(bridge_device->dev); in mlxsw_sp_bridge_8021d_fid_lookup() local
2624 return mlxsw_sp_fid_8021d_lookup(mlxsw_sp, bridge_device->dev->ifindex); in mlxsw_sp_bridge_8021d_fid_lookup()
2746 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp; in mlxsw_sp_port_bridge_join() local
2751 bridge_port = mlxsw_sp_bridge_port_get(mlxsw_sp->bridge, brport_dev, in mlxsw_sp_port_bridge_join()
2765 mlxsw_sp_bridge_port_put(mlxsw_sp->bridge, bridge_port); in mlxsw_sp_port_bridge_join()
2773 struct mlxsw_sp *mlxsw_sp = mlxsw_sp_port->mlxsw_sp; in mlxsw_sp_port_bridge_leave() local
2777 bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, br_dev); in mlxsw_sp_port_bridge_leave()
2786 mlxsw_sp_bridge_port_put(mlxsw_sp->bridge, bridge_port); in mlxsw_sp_port_bridge_leave()
2789 int mlxsw_sp_bridge_vxlan_join(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_bridge_vxlan_join() argument
2796 bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, br_dev); in mlxsw_sp_bridge_vxlan_join()
2804 void mlxsw_sp_bridge_vxlan_leave(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_bridge_vxlan_leave() argument
2811 fid = mlxsw_sp_fid_lookup_by_vni(mlxsw_sp, vxlan->cfg.vni); in mlxsw_sp_bridge_vxlan_leave()
2815 mlxsw_sp_nve_fid_disable(mlxsw_sp, fid); in mlxsw_sp_bridge_vxlan_leave()
2901 static void mlxsw_sp_fdb_notify_mac_process(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_fdb_notify_mac_process() argument
2917 if (WARN_ON_ONCE(!mlxsw_sp_local_port_is_valid(mlxsw_sp, local_port))) in mlxsw_sp_fdb_notify_mac_process()
2919 mlxsw_sp_port = mlxsw_sp->ports[local_port]; in mlxsw_sp_fdb_notify_mac_process()
2921 dev_err_ratelimited(mlxsw_sp->bus_info->dev, "Incorrect local port in FDB notification\n"); in mlxsw_sp_fdb_notify_mac_process()
2925 if (mlxsw_sp_fid_is_dummy(mlxsw_sp, fid)) in mlxsw_sp_fdb_notify_mac_process()
2945 err = mlxsw_sp_port_fdb_uc_op(mlxsw_sp, local_port, mac, fid, evid, in mlxsw_sp_fdb_notify_mac_process()
2948 dev_err_ratelimited(mlxsw_sp->bus_info->dev, "Failed to set FDB entry\n"); in mlxsw_sp_fdb_notify_mac_process()
2965 static void mlxsw_sp_fdb_notify_mac_lag_process(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_fdb_notify_mac_lag_process() argument
2982 mlxsw_sp_port = mlxsw_sp_lag_rep_port(mlxsw_sp, lag_id); in mlxsw_sp_fdb_notify_mac_lag_process()
2984 dev_err_ratelimited(mlxsw_sp->bus_info->dev, "Cannot find port representor for LAG\n"); in mlxsw_sp_fdb_notify_mac_lag_process()
2988 if (mlxsw_sp_fid_is_dummy(mlxsw_sp, fid)) in mlxsw_sp_fdb_notify_mac_lag_process()
3008 err = mlxsw_sp_port_fdb_uc_lag_op(mlxsw_sp, lag_id, mac, fid, lag_vid, in mlxsw_sp_fdb_notify_mac_lag_process()
3011 dev_err_ratelimited(mlxsw_sp->bus_info->dev, "Failed to set FDB entry\n"); in mlxsw_sp_fdb_notify_mac_lag_process()
3029 __mlxsw_sp_fdb_notify_mac_uc_tunnel_process(struct mlxsw_sp *mlxsw_sp, in __mlxsw_sp_fdb_notify_mac_uc_tunnel_process() argument
3048 dev = __dev_get_by_index(mlxsw_sp_net(mlxsw_sp), nve_ifindex); in __mlxsw_sp_fdb_notify_mac_uc_tunnel_process()
3070 bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, br_dev); in __mlxsw_sp_fdb_notify_mac_uc_tunnel_process()
3079 static void mlxsw_sp_fdb_notify_mac_uc_tunnel_process(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_fdb_notify_mac_uc_tunnel_process() argument
3098 fid = mlxsw_sp_fid_lookup_by_index(mlxsw_sp, fid_index); in mlxsw_sp_fdb_notify_mac_uc_tunnel_process()
3102 err = mlxsw_sp_nve_learned_ip_resolve(mlxsw_sp, uip, in mlxsw_sp_fdb_notify_mac_uc_tunnel_process()
3108 err = __mlxsw_sp_fdb_notify_mac_uc_tunnel_process(mlxsw_sp, fid, adding, in mlxsw_sp_fdb_notify_mac_uc_tunnel_process()
3113 err = mlxsw_sp_port_fdb_tunnel_uc_op(mlxsw_sp, mac, fid_index, in mlxsw_sp_fdb_notify_mac_uc_tunnel_process()
3139 mlxsw_sp_port_fdb_tunnel_uc_op(mlxsw_sp, mac, fid_index, in mlxsw_sp_fdb_notify_mac_uc_tunnel_process()
3144 static void mlxsw_sp_fdb_notify_rec_process(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_fdb_notify_rec_process() argument
3149 mlxsw_sp_fdb_notify_mac_process(mlxsw_sp, sfn_pl, in mlxsw_sp_fdb_notify_rec_process()
3153 mlxsw_sp_fdb_notify_mac_process(mlxsw_sp, sfn_pl, in mlxsw_sp_fdb_notify_rec_process()
3157 mlxsw_sp_fdb_notify_mac_lag_process(mlxsw_sp, sfn_pl, in mlxsw_sp_fdb_notify_rec_process()
3161 mlxsw_sp_fdb_notify_mac_lag_process(mlxsw_sp, sfn_pl, in mlxsw_sp_fdb_notify_rec_process()
3165 mlxsw_sp_fdb_notify_mac_uc_tunnel_process(mlxsw_sp, sfn_pl, in mlxsw_sp_fdb_notify_rec_process()
3169 mlxsw_sp_fdb_notify_mac_uc_tunnel_process(mlxsw_sp, sfn_pl, in mlxsw_sp_fdb_notify_rec_process()
3180 struct mlxsw_sp *mlxsw_sp; in mlxsw_sp_fdb_notify_work() local
3193 mlxsw_sp = bridge->mlxsw_sp; in mlxsw_sp_fdb_notify_work()
3202 err = mlxsw_reg_query(mlxsw_sp->core, MLXSW_REG(sfn), sfn_pl); in mlxsw_sp_fdb_notify_work()
3204 dev_err_ratelimited(mlxsw_sp->bus_info->dev, "Failed to get FDB notifications\n"); in mlxsw_sp_fdb_notify_work()
3209 mlxsw_sp_fdb_notify_rec_process(mlxsw_sp, sfn_pl, i); in mlxsw_sp_fdb_notify_work()
3220 mlxsw_sp_fdb_notify_work_schedule(mlxsw_sp, !queries); in mlxsw_sp_fdb_notify_work()
3234 mlxsw_sp_switchdev_bridge_vxlan_fdb_event(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_switchdev_bridge_vxlan_fdb_event() argument
3256 err = mlxsw_sp_port_fdb_tunnel_uc_op(mlxsw_sp, in mlxsw_sp_switchdev_bridge_vxlan_fdb_event()
3270 err = mlxsw_sp_port_fdb_tunnel_uc_op(mlxsw_sp, in mlxsw_sp_switchdev_bridge_vxlan_fdb_event()
3289 struct mlxsw_sp *mlxsw_sp; in mlxsw_sp_switchdev_bridge_nve_fdb_event() local
3310 mlxsw_sp = mlxsw_sp_lower_get(br_dev); in mlxsw_sp_switchdev_bridge_nve_fdb_event()
3311 if (!mlxsw_sp) in mlxsw_sp_switchdev_bridge_nve_fdb_event()
3313 bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, br_dev); in mlxsw_sp_switchdev_bridge_nve_fdb_event()
3326 mlxsw_sp_switchdev_bridge_vxlan_fdb_event(mlxsw_sp, switchdev_work, fid, in mlxsw_sp_switchdev_bridge_nve_fdb_event()
3376 mlxsw_sp_span_respin(mlxsw_sp_port->mlxsw_sp); in mlxsw_sp_switchdev_bridge_fdb_event_work()
3386 mlxsw_sp_switchdev_vxlan_fdb_add(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_switchdev_vxlan_fdb_add() argument
3404 bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, br_dev); in mlxsw_sp_switchdev_vxlan_fdb_add()
3408 fid = mlxsw_sp_fid_lookup_by_vni(mlxsw_sp, vxlan_fdb_info->vni); in mlxsw_sp_switchdev_vxlan_fdb_add()
3416 err = mlxsw_sp_nve_flood_ip_add(mlxsw_sp, fid, proto, &addr); in mlxsw_sp_switchdev_vxlan_fdb_add()
3437 err = mlxsw_sp_port_fdb_tunnel_uc_op(mlxsw_sp, vxlan_fdb_info->eth_addr, in mlxsw_sp_switchdev_vxlan_fdb_add()
3458 mlxsw_sp_switchdev_vxlan_fdb_del(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_switchdev_vxlan_fdb_del() argument
3476 bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, br_dev); in mlxsw_sp_switchdev_vxlan_fdb_del()
3480 fid = mlxsw_sp_fid_lookup_by_vni(mlxsw_sp, vxlan_fdb_info->vni); in mlxsw_sp_switchdev_vxlan_fdb_del()
3488 mlxsw_sp_nve_flood_ip_del(mlxsw_sp, fid, proto, &addr); in mlxsw_sp_switchdev_vxlan_fdb_del()
3493 mlxsw_sp_port_fdb_tunnel_uc_op(mlxsw_sp, vxlan_fdb_info->eth_addr, in mlxsw_sp_switchdev_vxlan_fdb_del()
3508 struct mlxsw_sp *mlxsw_sp; in mlxsw_sp_switchdev_vxlan_fdb_event_work() local
3520 mlxsw_sp = mlxsw_sp_lower_get(br_dev); in mlxsw_sp_switchdev_vxlan_fdb_event_work()
3521 if (!mlxsw_sp) in mlxsw_sp_switchdev_vxlan_fdb_event_work()
3526 mlxsw_sp_switchdev_vxlan_fdb_add(mlxsw_sp, switchdev_work); in mlxsw_sp_switchdev_vxlan_fdb_event_work()
3529 mlxsw_sp_switchdev_vxlan_fdb_del(mlxsw_sp, switchdev_work); in mlxsw_sp_switchdev_vxlan_fdb_event_work()
3668 mlxsw_sp_switchdev_vxlan_vlan_add(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_switchdev_vxlan_vlan_add() argument
3698 fid = mlxsw_sp_fid_lookup_by_vni(mlxsw_sp, vni); in mlxsw_sp_switchdev_vxlan_vlan_add()
3717 mlxsw_sp_bridge_vxlan_leave(mlxsw_sp, vxlan_dev); in mlxsw_sp_switchdev_vxlan_vlan_add()
3733 mlxsw_sp_bridge_vxlan_leave(mlxsw_sp, vxlan_dev); in mlxsw_sp_switchdev_vxlan_vlan_add()
3754 mlxsw_sp_switchdev_vxlan_vlan_del(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_switchdev_vxlan_vlan_del() argument
3765 fid = mlxsw_sp_fid_lookup_by_vni(mlxsw_sp, vni); in mlxsw_sp_switchdev_vxlan_vlan_del()
3773 mlxsw_sp_bridge_vxlan_leave(mlxsw_sp, vxlan_dev); in mlxsw_sp_switchdev_vxlan_vlan_del()
3790 struct mlxsw_sp *mlxsw_sp; in mlxsw_sp_switchdev_vxlan_vlans_add() local
3798 mlxsw_sp = mlxsw_sp_lower_get(br_dev); in mlxsw_sp_switchdev_vxlan_vlans_add()
3799 if (!mlxsw_sp) in mlxsw_sp_switchdev_vxlan_vlans_add()
3804 bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, br_dev); in mlxsw_sp_switchdev_vxlan_vlans_add()
3811 return mlxsw_sp_switchdev_vxlan_vlan_add(mlxsw_sp, bridge_device, in mlxsw_sp_switchdev_vxlan_vlans_add()
3825 struct mlxsw_sp *mlxsw_sp; in mlxsw_sp_switchdev_vxlan_vlans_del() local
3832 mlxsw_sp = mlxsw_sp_lower_get(br_dev); in mlxsw_sp_switchdev_vxlan_vlans_del()
3833 if (!mlxsw_sp) in mlxsw_sp_switchdev_vxlan_vlans_del()
3838 bridge_device = mlxsw_sp_bridge_device_find(mlxsw_sp->bridge, br_dev); in mlxsw_sp_switchdev_vxlan_vlans_del()
3845 mlxsw_sp_switchdev_vxlan_vlan_del(mlxsw_sp, bridge_device, vxlan_dev, in mlxsw_sp_switchdev_vxlan_vlans_del()
3925 static int mlxsw_sp_fdb_init(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_fdb_init() argument
3927 struct mlxsw_sp_bridge *bridge = mlxsw_sp->bridge; in mlxsw_sp_fdb_init()
3931 err = mlxsw_sp_ageing_set(mlxsw_sp, MLXSW_SP_DEFAULT_AGEING_TIME); in mlxsw_sp_fdb_init()
3933 dev_err(mlxsw_sp->bus_info->dev, "Failed to set default ageing time\n"); in mlxsw_sp_fdb_init()
3939 dev_err(mlxsw_sp->bus_info->dev, "Failed to register switchdev notifier\n"); in mlxsw_sp_fdb_init()
3946 dev_err(mlxsw_sp->bus_info->dev, "Failed to register switchdev blocking notifier\n"); in mlxsw_sp_fdb_init()
3959 static void mlxsw_sp_fdb_fini(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_fdb_fini() argument
3963 cancel_delayed_work_sync(&mlxsw_sp->bridge->fdb_notify.dw); in mlxsw_sp_fdb_fini()
3971 static void mlxsw_sp1_switchdev_init(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp1_switchdev_init() argument
3973 mlxsw_sp->bridge->bridge_8021ad_ops = &mlxsw_sp1_bridge_8021ad_ops; in mlxsw_sp1_switchdev_init()
3980 static void mlxsw_sp2_switchdev_init(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp2_switchdev_init() argument
3982 mlxsw_sp->bridge->bridge_8021ad_ops = &mlxsw_sp2_bridge_8021ad_ops; in mlxsw_sp2_switchdev_init()
3989 int mlxsw_sp_switchdev_init(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_switchdev_init() argument
3993 bridge = kzalloc(sizeof(*mlxsw_sp->bridge), GFP_KERNEL); in mlxsw_sp_switchdev_init()
3996 mlxsw_sp->bridge = bridge; in mlxsw_sp_switchdev_init()
3997 bridge->mlxsw_sp = mlxsw_sp; in mlxsw_sp_switchdev_init()
3999 INIT_LIST_HEAD(&mlxsw_sp->bridge->bridges_list); in mlxsw_sp_switchdev_init()
4004 mlxsw_sp->switchdev_ops->init(mlxsw_sp); in mlxsw_sp_switchdev_init()
4006 return mlxsw_sp_fdb_init(mlxsw_sp); in mlxsw_sp_switchdev_init()
4009 void mlxsw_sp_switchdev_fini(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_switchdev_fini() argument
4011 mlxsw_sp_fdb_fini(mlxsw_sp); in mlxsw_sp_switchdev_fini()
4012 WARN_ON(!list_empty(&mlxsw_sp->bridge->bridges_list)); in mlxsw_sp_switchdev_fini()
4013 kfree(mlxsw_sp->bridge); in mlxsw_sp_switchdev_fini()