mc_record          32 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	int (*entry_add)(struct mlxsw_sp_nve_mc_record *mc_record,
mc_record          35 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	void (*entry_del)(const struct mlxsw_sp_nve_mc_record *mc_record,
mc_record          37 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	void (*entry_set)(const struct mlxsw_sp_nve_mc_record *mc_record,
mc_record          40 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	bool (*entry_compare)(const struct mlxsw_sp_nve_mc_record *mc_record,
mc_record          86 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c mlxsw_sp_nve_mc_record_ipv4_entry_add(struct mlxsw_sp_nve_mc_record *mc_record,
mc_record          96 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c mlxsw_sp_nve_mc_record_ipv4_entry_del(const struct mlxsw_sp_nve_mc_record *mc_record,
mc_record         102 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c mlxsw_sp_nve_mc_record_ipv4_entry_set(const struct mlxsw_sp_nve_mc_record *mc_record,
mc_record         112 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c mlxsw_sp_nve_mc_record_ipv4_entry_compare(const struct mlxsw_sp_nve_mc_record *mc_record,
mc_record         129 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c mlxsw_sp_nve_mc_record_ipv6_entry_add(struct mlxsw_sp_nve_mc_record *mc_record,
mc_record         139 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c mlxsw_sp_nve_mc_record_ipv6_entry_del(const struct mlxsw_sp_nve_mc_record *mc_record,
mc_record         145 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c mlxsw_sp_nve_mc_record_ipv6_entry_set(const struct mlxsw_sp_nve_mc_record *mc_record,
mc_record         155 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c mlxsw_sp_nve_mc_record_ipv6_entry_compare(const struct mlxsw_sp_nve_mc_record *mc_record,
mc_record         267 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	struct mlxsw_sp_nve_mc_record *mc_record;
mc_record         270 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mc_record = kzalloc(struct_size(mc_record, entries, num_max_entries),
mc_record         272 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	if (!mc_record)
mc_record         276 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 				  &mc_record->kvdl_index);
mc_record         280 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mc_record->ops = mlxsw_sp_nve_mc_record_ops_arr[proto];
mc_record         281 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mc_record->mlxsw_sp = mlxsw_sp;
mc_record         282 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mc_record->mc_list = mc_list;
mc_record         283 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mc_record->proto = proto;
mc_record         284 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	list_add_tail(&mc_record->list, &mc_list->records_list);
mc_record         286 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	return mc_record;
mc_record         289 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	kfree(mc_record);
mc_record         294 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c mlxsw_sp_nve_mc_record_destroy(struct mlxsw_sp_nve_mc_record *mc_record)
mc_record         296 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	struct mlxsw_sp *mlxsw_sp = mc_record->mlxsw_sp;
mc_record         298 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	list_del(&mc_record->list);
mc_record         300 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 			   mc_record->kvdl_index);
mc_record         301 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	WARN_ON(mc_record->num_entries);
mc_record         302 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	kfree(mc_record);
mc_record         310 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	struct mlxsw_sp_nve_mc_record *mc_record;
mc_record         312 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	list_for_each_entry_reverse(mc_record, &mc_list->records_list, list) {
mc_record         313 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		unsigned int num_entries = mc_record->num_entries;
mc_record         316 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		if (mc_record->proto == proto &&
mc_record         318 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 			return mc_record;
mc_record         325 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c mlxsw_sp_nve_mc_record_put(struct mlxsw_sp_nve_mc_record *mc_record)
mc_record         327 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	if (mc_record->num_entries != 0)
mc_record         330 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mlxsw_sp_nve_mc_record_destroy(mc_record);
mc_record         334 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c mlxsw_sp_nve_mc_free_entry_find(struct mlxsw_sp_nve_mc_record *mc_record)
mc_record         336 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	struct mlxsw_sp_nve *nve = mc_record->mlxsw_sp->nve;
mc_record         340 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	num_max_entries = nve->num_max_mc_entries[mc_record->proto];
mc_record         342 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		if (mc_record->entries[i].valid)
mc_record         344 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		return &mc_record->entries[i];
mc_record         351 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c mlxsw_sp_nve_mc_record_refresh(struct mlxsw_sp_nve_mc_record *mc_record)
mc_record         353 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	enum mlxsw_reg_tnumt_record_type type = mc_record->ops->type;
mc_record         354 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	struct mlxsw_sp_nve_mc_list *mc_list = mc_record->mc_list;
mc_record         355 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	struct mlxsw_sp *mlxsw_sp = mc_record->mlxsw_sp;
mc_record         363 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	if (!list_is_last(&mc_record->list, &mc_list->records_list)) {
mc_record         366 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		next_record = list_next_entry(mc_record, list);
mc_record         372 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 			     mc_record->kvdl_index, next_valid,
mc_record         373 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 			     next_kvdl_index, mc_record->num_entries);
mc_record         375 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	num_max_entries = mlxsw_sp->nve->num_max_mc_entries[mc_record->proto];
mc_record         379 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		mc_entry = &mc_record->entries[i];
mc_record         382 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		mc_record->ops->entry_set(mc_record, mc_entry, tnumt_pl,
mc_record         386 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	WARN_ON(num_entries != mc_record->num_entries);
mc_record         392 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c mlxsw_sp_nve_mc_record_is_first(struct mlxsw_sp_nve_mc_record *mc_record)
mc_record         394 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	struct mlxsw_sp_nve_mc_list *mc_list = mc_record->mc_list;
mc_record         400 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	return mc_record == first_record;
mc_record         404 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c mlxsw_sp_nve_mc_entry_find(struct mlxsw_sp_nve_mc_record *mc_record,
mc_record         407 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	struct mlxsw_sp_nve *nve = mc_record->mlxsw_sp->nve;
mc_record         411 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	num_max_entries = nve->num_max_mc_entries[mc_record->proto];
mc_record         415 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		mc_entry = &mc_record->entries[i];
mc_record         418 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		if (mc_record->ops->entry_compare(mc_record, mc_entry, addr))
mc_record         426 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c mlxsw_sp_nve_mc_record_ip_add(struct mlxsw_sp_nve_mc_record *mc_record,
mc_record         432 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mc_entry = mlxsw_sp_nve_mc_free_entry_find(mc_record);
mc_record         436 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	err = mc_record->ops->entry_add(mc_record, mc_entry, addr);
mc_record         439 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mc_record->num_entries++;
mc_record         442 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	err = mlxsw_sp_nve_mc_record_refresh(mc_record);
mc_record         449 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	if (mc_record->num_entries != 1 ||
mc_record         450 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	    mlxsw_sp_nve_mc_record_is_first(mc_record))
mc_record         453 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	err = mlxsw_sp_nve_mc_record_refresh(list_prev_entry(mc_record, list));
mc_record         462 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mc_record->num_entries--;
mc_record         463 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mc_record->ops->entry_del(mc_record, mc_entry);
mc_record         468 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c mlxsw_sp_nve_mc_record_entry_del(struct mlxsw_sp_nve_mc_record *mc_record,
mc_record         471 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	struct mlxsw_sp_nve_mc_list *mc_list = mc_record->mc_list;
mc_record         474 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mc_record->num_entries--;
mc_record         479 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	if (mc_record->num_entries != 0) {
mc_record         480 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		mlxsw_sp_nve_mc_record_refresh(mc_record);
mc_record         481 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		mc_record->ops->entry_del(mc_record, mc_entry);
mc_record         491 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	if (!mlxsw_sp_nve_mc_record_is_first(mc_record)) {
mc_record         494 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		prev_record = list_prev_entry(mc_record, list);
mc_record         495 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		list_del(&mc_record->list);
mc_record         497 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		list_add_tail(&mc_record->list, &mc_list->records_list);
mc_record         498 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		mc_record->ops->entry_del(mc_record, mc_entry);
mc_record         507 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	if (mlxsw_sp_nve_mc_record_is_first(mc_record) &&
mc_record         511 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		next_record = list_next_entry(mc_record, list);
mc_record         512 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		swap(mc_record->kvdl_index, next_record->kvdl_index);
mc_record         514 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		mc_record->ops->entry_del(mc_record, mc_entry);
mc_record         521 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mc_record->ops->entry_del(mc_record, mc_entry);
mc_record         530 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	struct mlxsw_sp_nve_mc_record *mc_record;
mc_record         532 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	list_for_each_entry(mc_record, &mc_list->records_list, list) {
mc_record         533 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		if (mc_record->proto != proto)
mc_record         536 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		*mc_entry = mlxsw_sp_nve_mc_entry_find(mc_record, addr);
mc_record         538 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 			return mc_record;
mc_record         549 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	struct mlxsw_sp_nve_mc_record *mc_record;
mc_record         552 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mc_record = mlxsw_sp_nve_mc_record_get(mlxsw_sp, mc_list, proto);
mc_record         553 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	if (IS_ERR(mc_record))
mc_record         554 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		return PTR_ERR(mc_record);
mc_record         556 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	err = mlxsw_sp_nve_mc_record_ip_add(mc_record, addr);
mc_record         563 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mlxsw_sp_nve_mc_record_put(mc_record);
mc_record         572 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	struct mlxsw_sp_nve_mc_record *mc_record;
mc_record         575 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mc_record = mlxsw_sp_nve_mc_record_find(mc_list, proto, addr,
mc_record         577 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	if (!mc_record)
mc_record         580 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mlxsw_sp_nve_mc_record_entry_del(mc_record, mc_entry);
mc_record         581 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mlxsw_sp_nve_mc_record_put(mc_record);
mc_record         588 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	struct mlxsw_sp_nve_mc_record *mc_record;
mc_record         597 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mc_record = list_first_entry(&mc_list->records_list,
mc_record         600 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	return mlxsw_sp_fid_nve_flood_index_set(fid, mc_record->kvdl_index);
mc_record         607 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	struct mlxsw_sp_nve_mc_record *mc_record;
mc_record         615 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mc_record = list_first_entry(&mc_list->records_list,
mc_record         617 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	if (mc_record->num_entries != 1)
mc_record         673 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c mlxsw_sp_nve_mc_record_delete(struct mlxsw_sp_nve_mc_record *mc_record)
mc_record         675 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	struct mlxsw_sp_nve *nve = mc_record->mlxsw_sp->nve;
mc_record         679 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	num_max_entries = nve->num_max_mc_entries[mc_record->proto];
mc_record         681 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		struct mlxsw_sp_nve_mc_entry *mc_entry = &mc_record->entries[i];
mc_record         685 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		mlxsw_sp_nve_mc_record_entry_del(mc_record, mc_entry);
mc_record         688 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	WARN_ON(mc_record->num_entries);
mc_record         689 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	mlxsw_sp_nve_mc_record_put(mc_record);
mc_record         695 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	struct mlxsw_sp_nve_mc_record *mc_record, *tmp;
mc_record         709 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 	list_for_each_entry_safe(mc_record, tmp, &mc_list->records_list, list)
mc_record         710 drivers/net/ethernet/mellanox/mlxsw/spectrum_nve.c 		mlxsw_sp_nve_mc_record_delete(mc_record);