Lines Matching refs:table
2896 efx_ef10_filter_entry_spec(const struct efx_ef10_filter_table *table, in efx_ef10_filter_entry_spec() argument
2899 return (struct efx_filter_spec *)(table->entry[filter_idx].spec & in efx_ef10_filter_entry_spec()
2904 efx_ef10_filter_entry_flags(const struct efx_ef10_filter_table *table, in efx_ef10_filter_entry_flags() argument
2907 return table->entry[filter_idx].spec & EFX_EF10_FILTER_FLAGS; in efx_ef10_filter_entry_flags()
2911 efx_ef10_filter_set_entry(struct efx_ef10_filter_table *table, in efx_ef10_filter_set_entry() argument
2916 table->entry[filter_idx].spec = (unsigned long)spec | flags; in efx_ef10_filter_set_entry()
3015 static int efx_ef10_filter_rx_match_pri(struct efx_ef10_filter_table *table, in efx_ef10_filter_rx_match_pri() argument
3021 match_pri < table->rx_match_count; in efx_ef10_filter_rx_match_pri()
3023 if (table->rx_match_flags[match_pri] == match_flags) in efx_ef10_filter_rx_match_pri()
3033 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_insert() local
3049 rc = efx_ef10_filter_rx_match_pri(table, spec->match_flags); in efx_ef10_filter_insert()
3071 saved_spec = efx_ef10_filter_entry_spec(table, i); in efx_ef10_filter_insert()
3077 if (table->entry[i].spec & in efx_ef10_filter_insert()
3122 prepare_to_wait(&table->waitq, &wait, TASK_UNINTERRUPTIBLE); in efx_ef10_filter_insert()
3133 saved_spec = efx_ef10_filter_entry_spec(table, ins_index); in efx_ef10_filter_insert()
3140 table->entry[ins_index].spec &= in efx_ef10_filter_insert()
3146 priv_flags = efx_ef10_filter_entry_flags(table, ins_index); in efx_ef10_filter_insert()
3156 efx_ef10_filter_set_entry(table, ins_index, saved_spec, in efx_ef10_filter_insert()
3166 table->entry[i].spec |= in efx_ef10_filter_insert()
3173 rc = efx_ef10_filter_push(efx, spec, &table->entry[ins_index].handle, in efx_ef10_filter_insert()
3194 efx_ef10_filter_set_entry(table, ins_index, saved_spec, priv_flags); in efx_ef10_filter_insert()
3210 saved_spec = efx_ef10_filter_entry_spec(table, i); in efx_ef10_filter_insert()
3211 priv_flags = efx_ef10_filter_entry_flags(table, i); in efx_ef10_filter_insert()
3218 table->entry[i].handle); in efx_ef10_filter_insert()
3232 efx_ef10_filter_set_entry(table, i, saved_spec, in efx_ef10_filter_insert()
3241 wake_up_all(&table->waitq); in efx_ef10_filter_insert()
3244 finish_wait(&table->waitq, &wait); in efx_ef10_filter_insert()
3263 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_remove_internal() local
3277 if (!(table->entry[filter_idx].spec & in efx_ef10_filter_remove_internal()
3280 prepare_to_wait(&table->waitq, &wait, TASK_UNINTERRUPTIBLE); in efx_ef10_filter_remove_internal()
3285 spec = efx_ef10_filter_entry_spec(table, filter_idx); in efx_ef10_filter_remove_internal()
3288 efx_ef10_filter_rx_match_pri(table, spec->match_flags) != in efx_ef10_filter_remove_internal()
3298 table->entry[filter_idx].spec &= ~EFX_EF10_FILTER_FLAG_AUTO_OLD; in efx_ef10_filter_remove_internal()
3308 table->entry[filter_idx].spec |= EFX_EF10_FILTER_FLAG_BUSY; in efx_ef10_filter_remove_internal()
3323 &table->entry[filter_idx].handle, in efx_ef10_filter_remove_internal()
3337 table->entry[filter_idx].handle); in efx_ef10_filter_remove_internal()
3344 efx_ef10_filter_set_entry(table, filter_idx, NULL, 0); in efx_ef10_filter_remove_internal()
3348 table->entry[filter_idx].spec &= ~EFX_EF10_FILTER_FLAG_BUSY; in efx_ef10_filter_remove_internal()
3349 wake_up_all(&table->waitq); in efx_ef10_filter_remove_internal()
3352 finish_wait(&table->waitq, &wait); in efx_ef10_filter_remove_internal()
3382 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_get_safe() local
3387 saved_spec = efx_ef10_filter_entry_spec(table, filter_idx); in efx_ef10_filter_get_safe()
3389 efx_ef10_filter_rx_match_pri(table, saved_spec->match_flags) == in efx_ef10_filter_get_safe()
3423 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_count_rx_used() local
3429 if (table->entry[filter_idx].spec && in efx_ef10_filter_count_rx_used()
3430 efx_ef10_filter_entry_spec(table, filter_idx)->priority == in efx_ef10_filter_count_rx_used()
3440 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_get_rx_id_limit() local
3442 return table->rx_match_count * HUNT_FILTER_TBL_ROWS; in efx_ef10_filter_get_rx_id_limit()
3449 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_get_rx_ids() local
3456 spec = efx_ef10_filter_entry_spec(table, filter_idx); in efx_ef10_filter_get_rx_ids()
3463 table, spec->match_flags) * in efx_ef10_filter_get_rx_ids()
3479 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_rfs_insert() local
3508 saved_spec = efx_ef10_filter_entry_spec(table, i); in efx_ef10_filter_rfs_insert()
3514 if (table->entry[i].spec & EFX_EF10_FILTER_FLAG_BUSY) { in efx_ef10_filter_rfs_insert()
3546 saved_spec = efx_ef10_filter_entry_spec(table, ins_index); in efx_ef10_filter_rfs_insert()
3557 efx_ef10_filter_set_entry(table, ins_index, saved_spec, in efx_ef10_filter_rfs_insert()
3566 table->entry[ins_index].handle, replacing); in efx_ef10_filter_rfs_insert()
3583 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_rfs_insert_complete() local
3594 spec = efx_ef10_filter_entry_spec(table, ins_index); in efx_ef10_filter_rfs_insert_complete()
3596 table->entry[ins_index].handle = in efx_ef10_filter_rfs_insert_complete()
3604 efx_ef10_filter_set_entry(table, ins_index, spec, 0); in efx_ef10_filter_rfs_insert_complete()
3607 wake_up_all(&table->waitq); in efx_ef10_filter_rfs_insert_complete()
3619 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_rfs_expire_one() local
3621 efx_ef10_filter_entry_spec(table, filter_idx); in efx_ef10_filter_rfs_expire_one()
3627 (table->entry[filter_idx].spec & EFX_EF10_FILTER_FLAG_BUSY) || in efx_ef10_filter_rfs_expire_one()
3636 table->entry[filter_idx].handle); in efx_ef10_filter_rfs_expire_one()
3641 table->entry[filter_idx].spec |= EFX_EF10_FILTER_FLAG_BUSY; in efx_ef10_filter_rfs_expire_one()
3651 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_rfs_expire_complete() local
3653 efx_ef10_filter_entry_spec(table, filter_idx); in efx_ef10_filter_rfs_expire_complete()
3658 efx_ef10_filter_set_entry(table, filter_idx, NULL, 0); in efx_ef10_filter_rfs_expire_complete()
3660 table->entry[filter_idx].spec &= ~EFX_EF10_FILTER_FLAG_BUSY; in efx_ef10_filter_rfs_expire_complete()
3661 wake_up_all(&table->waitq); in efx_ef10_filter_rfs_expire_complete()
3704 struct efx_ef10_filter_table *table; in efx_ef10_filter_table_probe() local
3708 table = kzalloc(sizeof(*table), GFP_KERNEL); in efx_ef10_filter_table_probe()
3709 if (!table) in efx_ef10_filter_table_probe()
3722 table->rx_match_count = 0; in efx_ef10_filter_table_probe()
3739 rc, table->rx_match_count); in efx_ef10_filter_table_probe()
3740 table->rx_match_flags[table->rx_match_count++] = rc; in efx_ef10_filter_table_probe()
3744 table->entry = vzalloc(HUNT_FILTER_TBL_ROWS * sizeof(*table->entry)); in efx_ef10_filter_table_probe()
3745 if (!table->entry) { in efx_ef10_filter_table_probe()
3750 table->ucdef_id = EFX_EF10_FILTER_ID_INVALID; in efx_ef10_filter_table_probe()
3751 table->bcast_id = EFX_EF10_FILTER_ID_INVALID; in efx_ef10_filter_table_probe()
3752 table->mcdef_id = EFX_EF10_FILTER_ID_INVALID; in efx_ef10_filter_table_probe()
3754 efx->filter_state = table; in efx_ef10_filter_table_probe()
3755 init_waitqueue_head(&table->waitq); in efx_ef10_filter_table_probe()
3759 kfree(table); in efx_ef10_filter_table_probe()
3768 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_table_restore() local
3780 if (!table) in efx_ef10_filter_table_restore()
3786 spec = efx_ef10_filter_entry_spec(table, filter_idx); in efx_ef10_filter_table_restore()
3790 table->entry[filter_idx].spec |= EFX_EF10_FILTER_FLAG_BUSY; in efx_ef10_filter_table_restore()
3794 &table->entry[filter_idx].handle, in efx_ef10_filter_table_restore()
3802 efx_ef10_filter_set_entry(table, filter_idx, NULL, 0); in efx_ef10_filter_table_restore()
3804 table->entry[filter_idx].spec &= in efx_ef10_filter_table_restore()
3821 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_table_remove() local
3828 if (!table) in efx_ef10_filter_table_remove()
3832 spec = efx_ef10_filter_entry_spec(table, filter_idx); in efx_ef10_filter_table_remove()
3841 table->entry[filter_idx].handle); in efx_ef10_filter_table_remove()
3848 table->entry[filter_idx].handle); in efx_ef10_filter_table_remove()
3852 vfree(table->entry); in efx_ef10_filter_table_remove()
3853 kfree(table); in efx_ef10_filter_table_remove()
3859 WARN_ON(!table->entry[filter_idx].spec); \
3860 table->entry[filter_idx].spec |= EFX_EF10_FILTER_FLAG_AUTO_OLD; \
3864 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_mark_old() local
3867 if (!table) in efx_ef10_filter_mark_old()
3872 for (i = 0; i < table->dev_uc_count; i++) in efx_ef10_filter_mark_old()
3873 EFX_EF10_FILTER_DO_MARK_OLD(table->dev_uc_list[i].id); in efx_ef10_filter_mark_old()
3874 for (i = 0; i < table->dev_mc_count; i++) in efx_ef10_filter_mark_old()
3875 EFX_EF10_FILTER_DO_MARK_OLD(table->dev_mc_list[i].id); in efx_ef10_filter_mark_old()
3876 EFX_EF10_FILTER_DO_MARK_OLD(table->ucdef_id); in efx_ef10_filter_mark_old()
3877 EFX_EF10_FILTER_DO_MARK_OLD(table->bcast_id); in efx_ef10_filter_mark_old()
3878 EFX_EF10_FILTER_DO_MARK_OLD(table->mcdef_id); in efx_ef10_filter_mark_old()
3885 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_uc_addr_list() local
3891 table->ucdef_id = EFX_EF10_FILTER_ID_INVALID; in efx_ef10_filter_uc_addr_list()
3895 table->dev_uc_count = 1 + addr_count; in efx_ef10_filter_uc_addr_list()
3896 ether_addr_copy(table->dev_uc_list[0].addr, net_dev->dev_addr); in efx_ef10_filter_uc_addr_list()
3903 ether_addr_copy(table->dev_uc_list[i].addr, uc->addr); in efx_ef10_filter_uc_addr_list()
3904 table->dev_uc_list[i].id = EFX_EF10_FILTER_ID_INVALID; in efx_ef10_filter_uc_addr_list()
3911 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_mc_addr_list() local
3916 table->mcdef_id = EFX_EF10_FILTER_ID_INVALID; in efx_ef10_filter_mc_addr_list()
3917 table->bcast_id = EFX_EF10_FILTER_ID_INVALID; in efx_ef10_filter_mc_addr_list()
3928 ether_addr_copy(table->dev_mc_list[i].addr, mc->addr); in efx_ef10_filter_mc_addr_list()
3929 table->dev_mc_list[i].id = EFX_EF10_FILTER_ID_INVALID; in efx_ef10_filter_mc_addr_list()
3933 table->dev_mc_count = i; in efx_ef10_filter_mc_addr_list()
3939 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_insert_addr_list() local
3949 addr_list = table->dev_mc_list; in efx_ef10_filter_insert_addr_list()
3950 addr_count = table->dev_mc_count; in efx_ef10_filter_insert_addr_list()
3952 addr_list = table->dev_uc_list; in efx_ef10_filter_insert_addr_list()
3953 addr_count = table->dev_uc_count; in efx_ef10_filter_insert_addr_list()
4007 table->bcast_id = efx_ef10_filter_get_unsafe_id(efx, rc); in efx_ef10_filter_insert_addr_list()
4017 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_insert_def() local
4039 table->mcdef_id = efx_ef10_filter_get_unsafe_id(efx, rc); in efx_ef10_filter_insert_def()
4056 table->mcdef_id); in efx_ef10_filter_insert_def()
4057 table->mcdef_id = EFX_EF10_FILTER_ID_INVALID; in efx_ef10_filter_insert_def()
4061 table->bcast_id = efx_ef10_filter_get_unsafe_id(efx, rc); in efx_ef10_filter_insert_def()
4066 table->ucdef_id = rc; in efx_ef10_filter_insert_def()
4078 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_remove_old() local
4083 if (ACCESS_ONCE(table->entry[i].spec) & in efx_ef10_filter_remove_old()
4165 struct efx_ef10_filter_table *table = efx->filter_state; in efx_ef10_filter_sync_rx_mode() local
4173 if (!table) in efx_ef10_filter_sync_rx_mode()