Lines Matching refs:table

27 efx_mcdi_filter_entry_spec(const struct efx_mcdi_filter_table *table,  in efx_mcdi_filter_entry_spec()  argument
30 return (struct efx_filter_spec *)(table->entry[filter_idx].spec & in efx_mcdi_filter_entry_spec()
35 efx_mcdi_filter_entry_flags(const struct efx_mcdi_filter_table *table, in efx_mcdi_filter_entry_flags() argument
38 return table->entry[filter_idx].spec & EFX_EF10_FILTER_FLAGS; in efx_mcdi_filter_entry_flags()
84 efx_mcdi_filter_set_entry(struct efx_mcdi_filter_table *table, in efx_mcdi_filter_set_entry() argument
89 table->entry[filter_idx].spec = (unsigned long)spec | flags; in efx_mcdi_filter_set_entry()
328 static int efx_mcdi_filter_pri(struct efx_mcdi_filter_table *table, in efx_mcdi_filter_pri() argument
335 match_pri < table->rx_match_count; in efx_mcdi_filter_pri()
337 if (table->rx_match_mcdi_flags[match_pri] == mcdi_flags) in efx_mcdi_filter_pri()
348 struct efx_mcdi_filter_table *table; in efx_mcdi_filter_insert_locked() local
362 table = efx->filter_state; in efx_mcdi_filter_insert_locked()
363 down_write(&table->lock); in efx_mcdi_filter_insert_locked()
372 rc = efx_mcdi_filter_pri(table, spec); in efx_mcdi_filter_insert_locked()
404 saved_spec = efx_mcdi_filter_entry_spec(table, i); in efx_mcdi_filter_insert_locked()
447 saved_spec = efx_mcdi_filter_entry_spec(table, ins_index); in efx_mcdi_filter_insert_locked()
454 table->entry[ins_index].spec &= in efx_mcdi_filter_insert_locked()
460 priv_flags = efx_mcdi_filter_entry_flags(table, ins_index); in efx_mcdi_filter_insert_locked()
470 efx_mcdi_filter_set_entry(table, ins_index, saved_spec, priv_flags); in efx_mcdi_filter_insert_locked()
473 rc = efx_mcdi_filter_push(efx, spec, &table->entry[ins_index].handle, in efx_mcdi_filter_insert_locked()
506 efx_mcdi_filter_set_entry(table, ins_index, saved_spec, priv_flags); in efx_mcdi_filter_insert_locked()
522 saved_spec = efx_mcdi_filter_entry_spec(table, i); in efx_mcdi_filter_insert_locked()
523 priv_flags = efx_mcdi_filter_entry_flags(table, i); in efx_mcdi_filter_insert_locked()
529 table->entry[i].handle); in efx_mcdi_filter_insert_locked()
540 efx_mcdi_filter_set_entry(table, i, saved_spec, in efx_mcdi_filter_insert_locked()
552 up_write(&table->lock); in efx_mcdi_filter_insert_locked()
581 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_remove_internal() local
589 spec = efx_mcdi_filter_entry_spec(table, filter_idx); in efx_mcdi_filter_remove_internal()
592 efx_mcdi_filter_pri(table, spec) != in efx_mcdi_filter_remove_internal()
600 table->entry[filter_idx].spec &= ~EFX_EF10_FILTER_FLAG_AUTO_OLD; in efx_mcdi_filter_remove_internal()
619 &table->entry[filter_idx].handle, in efx_mcdi_filter_remove_internal()
633 table->entry[filter_idx].handle); in efx_mcdi_filter_remove_internal()
640 efx_mcdi_filter_set_entry(table, filter_idx, NULL, 0); in efx_mcdi_filter_remove_internal()
654 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_remove_old() local
660 down_write(&table->lock); in efx_mcdi_filter_remove_old()
662 if (READ_ONCE(table->entry[i].spec) & in efx_mcdi_filter_remove_old()
672 up_write(&table->lock); in efx_mcdi_filter_remove_old()
688 struct efx_mcdi_filter_table *table; in efx_mcdi_filter_remove_safe() local
692 table = efx->filter_state; in efx_mcdi_filter_remove_safe()
693 down_write(&table->lock); in efx_mcdi_filter_remove_safe()
696 up_write(&table->lock); in efx_mcdi_filter_remove_safe()
706 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_remove_unsafe() local
711 down_write(&table->lock); in efx_mcdi_filter_remove_unsafe()
714 up_write(&table->lock); in efx_mcdi_filter_remove_unsafe()
723 struct efx_mcdi_filter_table *table; in efx_mcdi_filter_get_safe() local
727 table = efx->filter_state; in efx_mcdi_filter_get_safe()
728 down_read(&table->lock); in efx_mcdi_filter_get_safe()
729 saved_spec = efx_mcdi_filter_entry_spec(table, filter_idx); in efx_mcdi_filter_get_safe()
731 efx_mcdi_filter_pri(table, saved_spec) == in efx_mcdi_filter_get_safe()
738 up_read(&table->lock); in efx_mcdi_filter_get_safe()
747 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_insert_addr_list() local
758 addr_list = table->dev_mc_list; in efx_mcdi_filter_insert_addr_list()
759 addr_count = table->dev_mc_count; in efx_mcdi_filter_insert_addr_list()
762 addr_list = table->dev_uc_list; in efx_mcdi_filter_insert_addr_list()
763 addr_count = table->dev_uc_count; in efx_mcdi_filter_insert_addr_list()
829 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_insert_def() local
914 if (!table->mc_chaining && !encap_type) { in efx_mcdi_filter_insert_def()
979 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_vlan_sync_rx_mode() local
985 if ((vlan->vid == EFX_FILTER_VID_UNSPEC) == table->vlan_filter) in efx_mcdi_filter_vlan_sync_rx_mode()
989 if (table->uc_promisc) { in efx_mcdi_filter_vlan_sync_rx_mode()
1026 if (table->mc_chaining && table->mc_promisc_last != table->mc_promisc) in efx_mcdi_filter_vlan_sync_rx_mode()
1028 if (table->mc_promisc) { in efx_mcdi_filter_vlan_sync_rx_mode()
1029 if (table->mc_chaining) { in efx_mcdi_filter_vlan_sync_rx_mode()
1051 if (!table->mc_overflow) in efx_mcdi_filter_vlan_sync_rx_mode()
1064 if (table->mc_chaining) in efx_mcdi_filter_vlan_sync_rx_mode()
1093 struct efx_mcdi_filter_table *table; in efx_mcdi_filter_clear_rx() local
1102 table = efx->filter_state; in efx_mcdi_filter_clear_rx()
1103 down_write(&table->lock); in efx_mcdi_filter_clear_rx()
1112 up_write(&table->lock); in efx_mcdi_filter_clear_rx()
1120 struct efx_mcdi_filter_table *table; in efx_mcdi_filter_count_rx_used() local
1125 table = efx->filter_state; in efx_mcdi_filter_count_rx_used()
1126 down_read(&table->lock); in efx_mcdi_filter_count_rx_used()
1128 if (table->entry[filter_idx].spec && in efx_mcdi_filter_count_rx_used()
1129 efx_mcdi_filter_entry_spec(table, filter_idx)->priority == in efx_mcdi_filter_count_rx_used()
1133 up_read(&table->lock); in efx_mcdi_filter_count_rx_used()
1140 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_get_rx_id_limit() local
1142 return table->rx_match_count * EFX_MCDI_FILTER_TBL_ROWS * 2; in efx_mcdi_filter_get_rx_id_limit()
1149 struct efx_mcdi_filter_table *table; in efx_mcdi_filter_get_rx_ids() local
1155 table = efx->filter_state; in efx_mcdi_filter_get_rx_ids()
1156 down_read(&table->lock); in efx_mcdi_filter_get_rx_ids()
1159 spec = efx_mcdi_filter_entry_spec(table, filter_idx); in efx_mcdi_filter_get_rx_ids()
1167 efx_mcdi_filter_pri(table, spec), in efx_mcdi_filter_get_rx_ids()
1171 up_read(&table->lock); in efx_mcdi_filter_get_rx_ids()
1233 bool efx_mcdi_filter_match_supported(struct efx_mcdi_filter_table *table, in efx_mcdi_filter_match_supported() argument
1241 match_pri < table->rx_match_count; in efx_mcdi_filter_match_supported()
1244 table->rx_match_mcdi_flags[match_pri]); in efx_mcdi_filter_match_supported()
1254 struct efx_mcdi_filter_table *table, in efx_mcdi_filter_table_probe_matches() argument
1292 rc, table->rx_match_count); in efx_mcdi_filter_table_probe_matches()
1293 table->rx_match_mcdi_flags[table->rx_match_count] = mcdi_flags; in efx_mcdi_filter_table_probe_matches()
1294 table->rx_match_count++; in efx_mcdi_filter_table_probe_matches()
1304 struct efx_mcdi_filter_table *table; in efx_mcdi_filter_table_probe() local
1313 table = kzalloc(sizeof(*table), GFP_KERNEL); in efx_mcdi_filter_table_probe()
1314 if (!table) in efx_mcdi_filter_table_probe()
1317 table->mc_chaining = multicast_chaining; in efx_mcdi_filter_table_probe()
1318 table->rx_match_count = 0; in efx_mcdi_filter_table_probe()
1319 rc = efx_mcdi_filter_table_probe_matches(efx, table, false); in efx_mcdi_filter_table_probe()
1323 rc = efx_mcdi_filter_table_probe_matches(efx, table, true); in efx_mcdi_filter_table_probe()
1327 !(efx_mcdi_filter_match_supported(table, false, in efx_mcdi_filter_table_probe()
1329 efx_mcdi_filter_match_supported(table, false, in efx_mcdi_filter_table_probe()
1338 table->entry = vzalloc(array_size(EFX_MCDI_FILTER_TBL_ROWS, in efx_mcdi_filter_table_probe()
1339 sizeof(*table->entry))); in efx_mcdi_filter_table_probe()
1340 if (!table->entry) { in efx_mcdi_filter_table_probe()
1345 table->mc_promisc_last = false; in efx_mcdi_filter_table_probe()
1346 table->vlan_filter = in efx_mcdi_filter_table_probe()
1348 INIT_LIST_HEAD(&table->vlan_list); in efx_mcdi_filter_table_probe()
1349 init_rwsem(&table->lock); in efx_mcdi_filter_table_probe()
1351 efx->filter_state = table; in efx_mcdi_filter_table_probe()
1355 kfree(table); in efx_mcdi_filter_table_probe()
1361 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_table_reset_mc_allocations() local
1363 if (table) { in efx_mcdi_filter_table_reset_mc_allocations()
1364 table->must_restore_filters = true; in efx_mcdi_filter_table_reset_mc_allocations()
1365 table->must_restore_rss_contexts = true; in efx_mcdi_filter_table_reset_mc_allocations()
1375 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_table_restore() local
1387 if (!table || !table->must_restore_filters) in efx_mcdi_filter_table_restore()
1390 down_write(&table->lock); in efx_mcdi_filter_table_restore()
1394 spec = efx_mcdi_filter_entry_spec(table, filter_idx); in efx_mcdi_filter_table_restore()
1400 while (match_pri < table->rx_match_count && in efx_mcdi_filter_table_restore()
1401 table->rx_match_mcdi_flags[match_pri] != mcdi_flags) in efx_mcdi_filter_table_restore()
1403 if (match_pri >= table->rx_match_count) { in efx_mcdi_filter_table_restore()
1429 &table->entry[filter_idx].handle, in efx_mcdi_filter_table_restore()
1436 list_for_each_entry(vlan, &table->vlan_list, list) in efx_mcdi_filter_table_restore()
1443 efx_mcdi_filter_set_entry(table, filter_idx, NULL, 0); in efx_mcdi_filter_table_restore()
1448 up_write(&table->lock); in efx_mcdi_filter_table_restore()
1463 table->must_restore_filters = false; in efx_mcdi_filter_table_restore()
1468 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_table_down() local
1474 if (!table) in efx_mcdi_filter_table_down()
1480 spec = efx_mcdi_filter_entry_spec(table, filter_idx); in efx_mcdi_filter_table_down()
1489 table->entry[filter_idx].handle); in efx_mcdi_filter_table_down()
1502 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_table_remove() local
1517 if (!table) in efx_mcdi_filter_table_remove()
1520 vfree(table->entry); in efx_mcdi_filter_table_remove()
1521 kfree(table); in efx_mcdi_filter_table_remove()
1526 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_mark_one_old() local
1529 efx_rwsem_assert_write_locked(&table->lock); in efx_mcdi_filter_mark_one_old()
1533 if (!table->entry[filter_idx].spec) in efx_mcdi_filter_mark_one_old()
1537 table->entry[filter_idx].spec |= EFX_EF10_FILTER_FLAG_AUTO_OLD; in efx_mcdi_filter_mark_one_old()
1546 struct efx_mcdi_filter_table *table = efx->filter_state; in _efx_mcdi_filter_vlan_mark_old() local
1549 for (i = 0; i < table->dev_uc_count; i++) in _efx_mcdi_filter_vlan_mark_old()
1551 for (i = 0; i < table->dev_mc_count; i++) in _efx_mcdi_filter_vlan_mark_old()
1564 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_mark_old() local
1567 down_write(&table->lock); in efx_mcdi_filter_mark_old()
1568 list_for_each_entry(vlan, &table->vlan_list, list) in efx_mcdi_filter_mark_old()
1570 up_write(&table->lock); in efx_mcdi_filter_mark_old()
1575 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_add_vlan() local
1602 list_add_tail(&vlan->list, &table->vlan_list); in efx_mcdi_filter_add_vlan()
1656 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_find_vlan() local
1661 list_for_each_entry(vlan, &table->vlan_list, list) { in efx_mcdi_filter_find_vlan()
1671 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_cleanup_vlans() local
1678 if (!table) in efx_mcdi_filter_cleanup_vlans()
1681 list_for_each_entry_safe(vlan, next_vlan, &table->vlan_list, list) in efx_mcdi_filter_cleanup_vlans()
1687 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_uc_addr_list() local
1692 table->uc_promisc = !!(net_dev->flags & IFF_PROMISC); in efx_mcdi_filter_uc_addr_list()
1693 ether_addr_copy(table->dev_uc_list[0].addr, net_dev->dev_addr); in efx_mcdi_filter_uc_addr_list()
1697 table->uc_promisc = true; in efx_mcdi_filter_uc_addr_list()
1700 ether_addr_copy(table->dev_uc_list[i].addr, uc->addr); in efx_mcdi_filter_uc_addr_list()
1704 table->dev_uc_count = i; in efx_mcdi_filter_uc_addr_list()
1709 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_mc_addr_list() local
1714 table->mc_overflow = false; in efx_mcdi_filter_mc_addr_list()
1715 table->mc_promisc = !!(net_dev->flags & (IFF_PROMISC | IFF_ALLMULTI)); in efx_mcdi_filter_mc_addr_list()
1720 table->mc_promisc = true; in efx_mcdi_filter_mc_addr_list()
1721 table->mc_overflow = true; in efx_mcdi_filter_mc_addr_list()
1724 ether_addr_copy(table->dev_mc_list[i].addr, mc->addr); in efx_mcdi_filter_mc_addr_list()
1728 table->dev_mc_count = i; in efx_mcdi_filter_mc_addr_list()
1737 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_sync_rx_mode() local
1745 if (!table) in efx_mcdi_filter_sync_rx_mode()
1765 if (table->vlan_filter != vlan_filter) { in efx_mcdi_filter_sync_rx_mode()
1766 table->vlan_filter = vlan_filter; in efx_mcdi_filter_sync_rx_mode()
1770 list_for_each_entry(vlan, &table->vlan_list, list) in efx_mcdi_filter_sync_rx_mode()
1774 table->mc_promisc_last = table->mc_promisc; in efx_mcdi_filter_sync_rx_mode()
1783 struct efx_mcdi_filter_table *table; in efx_mcdi_filter_rfs_expire_one() local
1789 table = efx->filter_state; in efx_mcdi_filter_rfs_expire_one()
1790 down_write(&table->lock); in efx_mcdi_filter_rfs_expire_one()
1791 spec = efx_mcdi_filter_entry_spec(table, filter_idx); in efx_mcdi_filter_rfs_expire_one()
1842 up_write(&table->lock); in efx_mcdi_filter_rfs_expire_one()
2045 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_rx_push_shared_rss_config() local
2052 table->rx_rss_context_exclusive = false; in efx_mcdi_filter_rx_push_shared_rss_config()
2061 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_filter_rx_push_exclusive_rss_config() local
2066 !table->rx_rss_context_exclusive) { in efx_mcdi_filter_rx_push_exclusive_rss_config()
2083 table->rx_rss_context_exclusive = true; in efx_mcdi_filter_rx_push_exclusive_rss_config()
2197 struct efx_mcdi_filter_table *table = efx->filter_state; in efx_mcdi_rx_restore_rss_contexts() local
2203 if (!table->must_restore_rss_contexts) in efx_mcdi_rx_restore_rss_contexts()
2219 table->must_restore_rss_contexts = false; in efx_mcdi_rx_restore_rss_contexts()