Lines Matching refs:mdb_entry
1013 mlxsw_sp_mdb_entry_port_lookup(struct mlxsw_sp_mdb_entry *mdb_entry, in mlxsw_sp_mdb_entry_port_lookup() argument
1018 list_for_each_entry(mdb_entry_port, &mdb_entry->ports_list, list) { in mlxsw_sp_mdb_entry_port_lookup()
1028 struct mlxsw_sp_mdb_entry *mdb_entry, in mlxsw_sp_mdb_entry_port_get() argument
1034 mdb_entry_port = mlxsw_sp_mdb_entry_port_lookup(mdb_entry, local_port); in mlxsw_sp_mdb_entry_port_get()
1038 mdb_entry->ports_count++; in mlxsw_sp_mdb_entry_port_get()
1044 err = mlxsw_sp_pgt_entry_port_set(mlxsw_sp, mdb_entry->mid, in mlxsw_sp_mdb_entry_port_get()
1045 mdb_entry->key.fid, local_port, true); in mlxsw_sp_mdb_entry_port_get()
1057 list_add(&mdb_entry_port->list, &mdb_entry->ports_list); in mlxsw_sp_mdb_entry_port_get()
1058 mdb_entry->ports_count++; in mlxsw_sp_mdb_entry_port_get()
1063 mlxsw_sp_pgt_entry_port_set(mlxsw_sp, mdb_entry->mid, in mlxsw_sp_mdb_entry_port_get()
1064 mdb_entry->key.fid, local_port, false); in mlxsw_sp_mdb_entry_port_get()
1070 struct mlxsw_sp_mdb_entry *mdb_entry, in mlxsw_sp_mdb_entry_port_put() argument
1075 mdb_entry_port = mlxsw_sp_mdb_entry_port_lookup(mdb_entry, local_port); in mlxsw_sp_mdb_entry_port_put()
1082 mdb_entry->ports_count--; in mlxsw_sp_mdb_entry_port_put()
1086 mdb_entry->ports_count--; in mlxsw_sp_mdb_entry_port_put()
1089 mlxsw_sp_pgt_entry_port_set(mlxsw_sp, mdb_entry->mid, in mlxsw_sp_mdb_entry_port_put()
1090 mdb_entry->key.fid, local_port, false); in mlxsw_sp_mdb_entry_port_put()
1095 struct mlxsw_sp_mdb_entry *mdb_entry, in mlxsw_sp_mdb_entry_mrouter_port_get() argument
1101 mdb_entry_port = mlxsw_sp_mdb_entry_port_lookup(mdb_entry, local_port); in mlxsw_sp_mdb_entry_mrouter_port_get()
1108 err = mlxsw_sp_pgt_entry_port_set(mlxsw_sp, mdb_entry->mid, in mlxsw_sp_mdb_entry_mrouter_port_get()
1109 mdb_entry->key.fid, local_port, true); in mlxsw_sp_mdb_entry_mrouter_port_get()
1122 list_add(&mdb_entry_port->list, &mdb_entry->ports_list); in mlxsw_sp_mdb_entry_mrouter_port_get()
1127 mlxsw_sp_pgt_entry_port_set(mlxsw_sp, mdb_entry->mid, in mlxsw_sp_mdb_entry_mrouter_port_get()
1128 mdb_entry->key.fid, local_port, false); in mlxsw_sp_mdb_entry_mrouter_port_get()
1134 struct mlxsw_sp_mdb_entry *mdb_entry, in mlxsw_sp_mdb_entry_mrouter_port_put() argument
1139 mdb_entry_port = mlxsw_sp_mdb_entry_port_lookup(mdb_entry, local_port); in mlxsw_sp_mdb_entry_mrouter_port_put()
1152 mlxsw_sp_pgt_entry_port_set(mlxsw_sp, mdb_entry->mid, in mlxsw_sp_mdb_entry_mrouter_port_put()
1153 mdb_entry->key.fid, local_port, false); in mlxsw_sp_mdb_entry_mrouter_port_put()
1162 struct mlxsw_sp_mdb_entry *mdb_entry; in mlxsw_sp_bridge_mrouter_update_mdb() local
1164 list_for_each_entry(mdb_entry, &bridge_device->mdb_list, list) { in mlxsw_sp_bridge_mrouter_update_mdb()
1166 mlxsw_sp_mdb_entry_mrouter_port_get(mlxsw_sp, mdb_entry, in mlxsw_sp_bridge_mrouter_update_mdb()
1169 mlxsw_sp_mdb_entry_mrouter_port_put(mlxsw_sp, mdb_entry, in mlxsw_sp_bridge_mrouter_update_mdb()
1821 const struct mlxsw_sp_mdb_entry *mdb_entry, in mlxsw_sp_mdb_entry_write() argument
1833 mlxsw_reg_sfd_mc_pack(sfd_pl, 0, mdb_entry->key.addr, in mlxsw_sp_mdb_entry_write()
1834 mdb_entry->key.fid, MLXSW_REG_SFD_REC_ACTION_NOP, in mlxsw_sp_mdb_entry_write()
1835 mdb_entry->mid); in mlxsw_sp_mdb_entry_write()
1892 struct mlxsw_sp_mdb_entry *mdb_entry) in mlxsw_sp_mc_mdb_mrouters_add() argument
1900 mdb_entry, in mlxsw_sp_mc_mdb_mrouters_add()
1912 mlxsw_sp_mdb_entry_mrouter_port_put(mlxsw_sp, mdb_entry, i); in mlxsw_sp_mc_mdb_mrouters_add()
1918 struct mlxsw_sp_mdb_entry *mdb_entry) in mlxsw_sp_mc_mdb_mrouters_del() argument
1923 mlxsw_sp_mdb_entry_mrouter_port_put(mlxsw_sp, mdb_entry, i); in mlxsw_sp_mc_mdb_mrouters_del()
1929 struct mlxsw_sp_mdb_entry *mdb_entry, bool add) in mlxsw_sp_mc_mdb_mrouters_set() argument
1942 mdb_entry); in mlxsw_sp_mc_mdb_mrouters_set()
1944 mlxsw_sp_mc_mdb_mrouters_del(mlxsw_sp, &ports_bm, mdb_entry); in mlxsw_sp_mc_mdb_mrouters_set()
1956 struct mlxsw_sp_mdb_entry *mdb_entry; in mlxsw_sp_mc_mdb_entry_init() local
1959 mdb_entry = kzalloc(sizeof(*mdb_entry), GFP_KERNEL); in mlxsw_sp_mc_mdb_entry_init()
1960 if (!mdb_entry) in mlxsw_sp_mc_mdb_entry_init()
1963 ether_addr_copy(mdb_entry->key.addr, addr); in mlxsw_sp_mc_mdb_entry_init()
1964 mdb_entry->key.fid = fid; in mlxsw_sp_mc_mdb_entry_init()
1965 err = mlxsw_sp_pgt_mid_alloc(mlxsw_sp, &mdb_entry->mid); in mlxsw_sp_mc_mdb_entry_init()
1969 INIT_LIST_HEAD(&mdb_entry->ports_list); in mlxsw_sp_mc_mdb_entry_init()
1971 err = mlxsw_sp_mc_mdb_mrouters_set(mlxsw_sp, bridge_device, mdb_entry, in mlxsw_sp_mc_mdb_entry_init()
1976 mdb_entry_port = mlxsw_sp_mdb_entry_port_get(mlxsw_sp, mdb_entry, in mlxsw_sp_mc_mdb_entry_init()
1984 err = mlxsw_sp_mdb_entry_write(mlxsw_sp, mdb_entry, true); in mlxsw_sp_mc_mdb_entry_init()
1990 &mdb_entry->ht_node, in mlxsw_sp_mc_mdb_entry_init()
1995 list_add_tail(&mdb_entry->list, &bridge_device->mdb_list); in mlxsw_sp_mc_mdb_entry_init()
1997 return mdb_entry; in mlxsw_sp_mc_mdb_entry_init()
2001 mlxsw_sp_mdb_entry_write(mlxsw_sp, mdb_entry, false); in mlxsw_sp_mc_mdb_entry_init()
2003 mlxsw_sp_mdb_entry_port_put(mlxsw_sp, mdb_entry, local_port, false); in mlxsw_sp_mc_mdb_entry_init()
2005 mlxsw_sp_mc_mdb_mrouters_set(mlxsw_sp, bridge_device, mdb_entry, false); in mlxsw_sp_mc_mdb_entry_init()
2007 mlxsw_sp_pgt_mid_free(mlxsw_sp, mdb_entry->mid); in mlxsw_sp_mc_mdb_entry_init()
2009 kfree(mdb_entry); in mlxsw_sp_mc_mdb_entry_init()
2015 struct mlxsw_sp_mdb_entry *mdb_entry, in mlxsw_sp_mc_mdb_entry_fini() argument
2019 list_del(&mdb_entry->list); in mlxsw_sp_mc_mdb_entry_fini()
2020 rhashtable_remove_fast(&bridge_device->mdb_ht, &mdb_entry->ht_node, in mlxsw_sp_mc_mdb_entry_fini()
2023 mlxsw_sp_mdb_entry_write(mlxsw_sp, mdb_entry, false); in mlxsw_sp_mc_mdb_entry_fini()
2024 mlxsw_sp_mdb_entry_port_put(mlxsw_sp, mdb_entry, local_port, force); in mlxsw_sp_mc_mdb_entry_fini()
2025 mlxsw_sp_mc_mdb_mrouters_set(mlxsw_sp, bridge_device, mdb_entry, false); in mlxsw_sp_mc_mdb_entry_fini()
2026 WARN_ON(!list_empty(&mdb_entry->ports_list)); in mlxsw_sp_mc_mdb_entry_fini()
2027 mlxsw_sp_pgt_mid_free(mlxsw_sp, mdb_entry->mid); in mlxsw_sp_mc_mdb_entry_fini()
2028 kfree(mdb_entry); in mlxsw_sp_mc_mdb_entry_fini()
2037 struct mlxsw_sp_mdb_entry *mdb_entry; in mlxsw_sp_mc_mdb_entry_get() local
2041 mdb_entry = rhashtable_lookup_fast(&bridge_device->mdb_ht, &key, in mlxsw_sp_mc_mdb_entry_get()
2043 if (mdb_entry) { in mlxsw_sp_mc_mdb_entry_get()
2047 mdb_entry, in mlxsw_sp_mc_mdb_entry_get()
2052 return mdb_entry; in mlxsw_sp_mc_mdb_entry_get()
2060 mlxsw_sp_mc_mdb_entry_remove(struct mlxsw_sp_mdb_entry *mdb_entry, in mlxsw_sp_mc_mdb_entry_remove() argument
2064 if (mdb_entry->ports_count > 1) in mlxsw_sp_mc_mdb_entry_remove()
2084 struct mlxsw_sp_mdb_entry *mdb_entry, u16 local_port, in mlxsw_sp_mc_mdb_entry_put() argument
2089 mdb_entry_port = mlxsw_sp_mdb_entry_port_lookup(mdb_entry, local_port); in mlxsw_sp_mc_mdb_entry_put()
2099 if (mlxsw_sp_mc_mdb_entry_remove(mdb_entry, mdb_entry_port, force)) in mlxsw_sp_mc_mdb_entry_put()
2100 mlxsw_sp_mc_mdb_entry_fini(mlxsw_sp, mdb_entry, bridge_device, in mlxsw_sp_mc_mdb_entry_put()
2103 mlxsw_sp_mdb_entry_port_put(mlxsw_sp, mdb_entry, local_port, in mlxsw_sp_mc_mdb_entry_put()
2115 struct mlxsw_sp_mdb_entry *mdb_entry; in mlxsw_sp_port_mdb_add() local
2131 mdb_entry = mlxsw_sp_mc_mdb_entry_get(mlxsw_sp, bridge_device, in mlxsw_sp_port_mdb_add()
2134 if (IS_ERR(mdb_entry)) in mlxsw_sp_port_mdb_add()
2135 return PTR_ERR(mdb_entry); in mlxsw_sp_port_mdb_add()
2145 struct mlxsw_sp_mdb_entry *mdb_entry; in mlxsw_sp_bridge_mdb_mc_enable_sync() local
2148 list_for_each_entry(mdb_entry, &bridge_device->mdb_list, list) { in mlxsw_sp_bridge_mdb_mc_enable_sync()
2149 err = mlxsw_sp_mdb_entry_write(mlxsw_sp, mdb_entry, mc_enabled); in mlxsw_sp_bridge_mdb_mc_enable_sync()
2156 list_for_each_entry_continue_reverse(mdb_entry, in mlxsw_sp_bridge_mdb_mc_enable_sync()
2158 mlxsw_sp_mdb_entry_write(mlxsw_sp, mdb_entry, !mc_enabled); in mlxsw_sp_bridge_mdb_mc_enable_sync()
2170 struct mlxsw_sp_mdb_entry *mdb_entry; in mlxsw_sp_port_mrouter_update_mdb() local
2174 list_for_each_entry(mdb_entry, &bridge_device->mdb_list, list) { in mlxsw_sp_port_mrouter_update_mdb()
2176 mlxsw_sp_mdb_entry_mrouter_port_get(mlxsw_sp, mdb_entry, in mlxsw_sp_port_mrouter_update_mdb()
2179 mlxsw_sp_mdb_entry_mrouter_port_put(mlxsw_sp, mdb_entry, in mlxsw_sp_port_mrouter_update_mdb()
2268 struct mlxsw_sp_mdb_entry *mdb_entry; in mlxsw_sp_port_mdb_del() local
2286 mdb_entry = rhashtable_lookup_fast(&bridge_device->mdb_ht, &key, in mlxsw_sp_port_mdb_del()
2288 if (!mdb_entry) { in mlxsw_sp_port_mdb_del()
2293 mlxsw_sp_mc_mdb_entry_put(mlxsw_sp, bridge_device, mdb_entry, in mlxsw_sp_port_mdb_del()
2305 struct mlxsw_sp_mdb_entry *mdb_entry, *tmp; in mlxsw_sp_bridge_port_mdb_flush() local
2310 list_for_each_entry_safe(mdb_entry, tmp, &bridge_device->mdb_list, in mlxsw_sp_bridge_port_mdb_flush()
2312 if (mdb_entry->key.fid != fid_index) in mlxsw_sp_bridge_port_mdb_flush()
2317 mdb_entry, in mlxsw_sp_bridge_port_mdb_flush()
2320 mlxsw_sp_mc_mdb_entry_put(mlxsw_sp, bridge_device, mdb_entry, in mlxsw_sp_bridge_port_mdb_flush()