Lines Matching refs:table
56 void mlx4_init_mac_table(struct mlx4_dev *dev, struct mlx4_mac_table *table) in mlx4_init_mac_table() argument
60 mutex_init(&table->mutex); in mlx4_init_mac_table()
62 table->entries[i] = 0; in mlx4_init_mac_table()
63 table->refs[i] = 0; in mlx4_init_mac_table()
65 table->max = 1 << dev->caps.log_num_macs; in mlx4_init_mac_table()
66 table->total = 0; in mlx4_init_mac_table()
69 void mlx4_init_vlan_table(struct mlx4_dev *dev, struct mlx4_vlan_table *table) in mlx4_init_vlan_table() argument
73 mutex_init(&table->mutex); in mlx4_init_vlan_table()
75 table->entries[i] = 0; in mlx4_init_vlan_table()
76 table->refs[i] = 0; in mlx4_init_vlan_table()
78 table->max = (1 << dev->caps.log_num_vlans) - MLX4_VLAN_REGULAR; in mlx4_init_vlan_table()
79 table->total = 0; in mlx4_init_vlan_table()
83 struct mlx4_roce_gid_table *table) in mlx4_init_roce_gid_table() argument
87 mutex_init(&table->mutex); in mlx4_init_roce_gid_table()
89 memset(table->roce_gids[i].raw, 0, MLX4_ROCE_GID_ENTRY_SIZE); in mlx4_init_roce_gid_table()
93 struct mlx4_mac_table *table, int index) in validate_index() argument
97 if (index < 0 || index >= table->max || !table->entries[index]) { in validate_index()
105 struct mlx4_mac_table *table, u64 mac) in find_index() argument
110 if (table->refs[i] && in find_index()
112 (MLX4_MAC_MASK & be64_to_cpu(table->entries[i]))) in find_index()
145 struct mlx4_mac_table *table = &info->mac_table; in mlx4_find_cached_mac() local
149 if (!table->refs[i]) in mlx4_find_cached_mac()
152 if (mac == (MLX4_MAC_MASK & be64_to_cpu(table->entries[i]))) { in mlx4_find_cached_mac()
165 struct mlx4_mac_table *table = &info->mac_table; in __mlx4_register_mac() local
172 mutex_lock(&table->mutex); in __mlx4_register_mac()
174 if (!table->refs[i]) { in __mlx4_register_mac()
181 (MLX4_MAC_MASK & be64_to_cpu(table->entries[i]))) { in __mlx4_register_mac()
184 ++table->refs[i]; in __mlx4_register_mac()
191 if (table->total == table->max) { in __mlx4_register_mac()
198 table->entries[free] = cpu_to_be64(mac | MLX4_MAC_VALID); in __mlx4_register_mac()
200 err = mlx4_set_port_mac_table(dev, port, table->entries); in __mlx4_register_mac()
204 table->entries[free] = 0; in __mlx4_register_mac()
207 table->refs[free] = 1; in __mlx4_register_mac()
209 ++table->total; in __mlx4_register_mac()
211 mutex_unlock(&table->mutex); in __mlx4_register_mac()
256 struct mlx4_mac_table *table; in __mlx4_unregister_mac() local
264 table = &info->mac_table; in __mlx4_unregister_mac()
265 mutex_lock(&table->mutex); in __mlx4_unregister_mac()
266 index = find_index(dev, table, mac); in __mlx4_unregister_mac()
268 if (validate_index(dev, table, index)) in __mlx4_unregister_mac()
270 if (--table->refs[index]) { in __mlx4_unregister_mac()
276 table->entries[index] = 0; in __mlx4_unregister_mac()
277 mlx4_set_port_mac_table(dev, port, table->entries); in __mlx4_unregister_mac()
278 --table->total; in __mlx4_unregister_mac()
280 mutex_unlock(&table->mutex); in __mlx4_unregister_mac()
311 struct mlx4_mac_table *table = &info->mac_table; in __mlx4_replace_mac() local
316 mutex_lock(&table->mutex); in __mlx4_replace_mac()
318 err = validate_index(dev, table, index); in __mlx4_replace_mac()
322 table->entries[index] = cpu_to_be64(new_mac | MLX4_MAC_VALID); in __mlx4_replace_mac()
324 err = mlx4_set_port_mac_table(dev, port, table->entries); in __mlx4_replace_mac()
328 table->entries[index] = 0; in __mlx4_replace_mac()
331 mutex_unlock(&table->mutex); in __mlx4_replace_mac()
360 struct mlx4_vlan_table *table = &mlx4_priv(dev)->port[port].vlan_table; in mlx4_find_cached_vlan() local
364 if (table->refs[i] && in mlx4_find_cached_vlan()
366 be32_to_cpu(table->entries[i])))) { in mlx4_find_cached_vlan()
380 struct mlx4_vlan_table *table = &mlx4_priv(dev)->port[port].vlan_table; in __mlx4_register_vlan() local
384 mutex_lock(&table->mutex); in __mlx4_register_vlan()
386 if (table->total == table->max) { in __mlx4_register_vlan()
393 if (free < 0 && (table->refs[i] == 0)) { in __mlx4_register_vlan()
398 if (table->refs[i] && in __mlx4_register_vlan()
400 be32_to_cpu(table->entries[i])))) { in __mlx4_register_vlan()
403 ++table->refs[i]; in __mlx4_register_vlan()
414 table->refs[free] = 1; in __mlx4_register_vlan()
415 table->entries[free] = cpu_to_be32(vlan | MLX4_VLAN_VALID); in __mlx4_register_vlan()
417 err = mlx4_set_port_vlan_table(dev, port, table->entries); in __mlx4_register_vlan()
420 table->refs[free] = 0; in __mlx4_register_vlan()
421 table->entries[free] = 0; in __mlx4_register_vlan()
426 ++table->total; in __mlx4_register_vlan()
428 mutex_unlock(&table->mutex); in __mlx4_register_vlan()
456 struct mlx4_vlan_table *table = &mlx4_priv(dev)->port[port].vlan_table; in __mlx4_unregister_vlan() local
459 mutex_lock(&table->mutex); in __mlx4_unregister_vlan()
470 if (--table->refs[index]) { in __mlx4_unregister_vlan()
472 table->refs[index], index); in __mlx4_unregister_vlan()
475 table->entries[index] = 0; in __mlx4_unregister_vlan()
476 mlx4_set_port_vlan_table(dev, port, table->entries); in __mlx4_unregister_vlan()
477 --table->total; in __mlx4_unregister_vlan()
479 mutex_unlock(&table->mutex); in __mlx4_unregister_vlan()