Lines Matching full:span

46 	struct mlxsw_sp_span *span;  member
77 return atomic_read(&mlxsw_sp->span->active_entries_count); in mlxsw_sp_span_occ_get()
83 struct mlxsw_sp_span *span; in mlxsw_sp_span_init() local
90 span = kzalloc(struct_size(span, entries, entries_count), GFP_KERNEL); in mlxsw_sp_span_init()
91 if (!span) in mlxsw_sp_span_init()
93 refcount_set(&span->policer_id_base_ref_count, 0); in mlxsw_sp_span_init()
94 span->entries_count = entries_count; in mlxsw_sp_span_init()
95 atomic_set(&span->active_entries_count, 0); in mlxsw_sp_span_init()
96 mutex_init(&span->analyzed_ports_lock); in mlxsw_sp_span_init()
97 INIT_LIST_HEAD(&span->analyzed_ports_list); in mlxsw_sp_span_init()
98 INIT_LIST_HEAD(&span->trigger_entries_list); in mlxsw_sp_span_init()
99 span->mlxsw_sp = mlxsw_sp; in mlxsw_sp_span_init()
100 mlxsw_sp->span = span; in mlxsw_sp_span_init()
102 for (i = 0; i < mlxsw_sp->span->entries_count; i++) in mlxsw_sp_span_init()
103 mlxsw_sp->span->entries[i].id = i; in mlxsw_sp_span_init()
111 INIT_WORK(&span->work, mlxsw_sp_span_respin_work); in mlxsw_sp_span_init()
116 mutex_destroy(&mlxsw_sp->span->analyzed_ports_lock); in mlxsw_sp_span_init()
117 kfree(mlxsw_sp->span); in mlxsw_sp_span_init()
125 cancel_work_sync(&mlxsw_sp->span->work); in mlxsw_sp_span_fini()
128 WARN_ON_ONCE(!list_empty(&mlxsw_sp->span->trigger_entries_list)); in mlxsw_sp_span_fini()
129 WARN_ON_ONCE(!list_empty(&mlxsw_sp->span->analyzed_ports_list)); in mlxsw_sp_span_fini()
130 mutex_destroy(&mlxsw_sp->span->analyzed_ports_lock); in mlxsw_sp_span_fini()
131 kfree(mlxsw_sp->span); in mlxsw_sp_span_fini()
810 static int mlxsw_sp_span_policer_id_base_set(struct mlxsw_sp_span *span, in mlxsw_sp_span_policer_id_base_set() argument
813 struct mlxsw_sp *mlxsw_sp = span->mlxsw_sp; in mlxsw_sp_span_policer_id_base_set()
817 /* Policers set on SPAN agents must be in the range of in mlxsw_sp_span_policer_id_base_set()
822 if (refcount_read(&span->policer_id_base_ref_count)) { in mlxsw_sp_span_policer_id_base_set()
823 if (policer_id < span->policer_id_base || in mlxsw_sp_span_policer_id_base_set()
824 policer_id >= span->policer_id_base + span->entries_count) in mlxsw_sp_span_policer_id_base_set()
827 refcount_inc(&span->policer_id_base_ref_count); in mlxsw_sp_span_policer_id_base_set()
838 span->policer_id_base = policer_id_base; in mlxsw_sp_span_policer_id_base_set()
839 refcount_set(&span->policer_id_base_ref_count, 1); in mlxsw_sp_span_policer_id_base_set()
844 static void mlxsw_sp_span_policer_id_base_unset(struct mlxsw_sp_span *span) in mlxsw_sp_span_policer_id_base_unset() argument
846 if (refcount_dec_and_test(&span->policer_id_base_ref_count)) in mlxsw_sp_span_policer_id_base_unset()
847 span->policer_id_base = 0; in mlxsw_sp_span_policer_id_base_unset()
860 for (i = 0; i < mlxsw_sp->span->entries_count; i++) { in mlxsw_sp_span_entry_create()
861 if (!refcount_read(&mlxsw_sp->span->entries[i].ref_count)) { in mlxsw_sp_span_entry_create()
862 span_entry = &mlxsw_sp->span->entries[i]; in mlxsw_sp_span_entry_create()
872 err = mlxsw_sp_span_policer_id_base_set(mlxsw_sp->span, in mlxsw_sp_span_entry_create()
878 atomic_inc(&mlxsw_sp->span->active_entries_count); in mlxsw_sp_span_entry_create()
891 atomic_dec(&mlxsw_sp->span->active_entries_count); in mlxsw_sp_span_entry_destroy()
893 mlxsw_sp_span_policer_id_base_unset(mlxsw_sp->span); in mlxsw_sp_span_entry_destroy()
902 for (i = 0; i < mlxsw_sp->span->entries_count; i++) { in mlxsw_sp_span_entry_find_by_port()
903 struct mlxsw_sp_span_entry *curr = &mlxsw_sp->span->entries[i]; in mlxsw_sp_span_entry_find_by_port()
923 for (i = 0; i < mlxsw_sp->span->entries_count; i++) { in mlxsw_sp_span_entry_find_by_id()
924 struct mlxsw_sp_span_entry *curr = &mlxsw_sp->span->entries[i]; in mlxsw_sp_span_entry_find_by_id()
939 for (i = 0; i < mlxsw_sp->span->entries_count; i++) { in mlxsw_sp_span_entry_find_by_parms()
940 struct mlxsw_sp_span_entry *curr = &mlxsw_sp->span->entries[i]; in mlxsw_sp_span_entry_find_by_parms()
1001 mlxsw_sp_span_analyzed_port_find(struct mlxsw_sp_span *span, u16 local_port, in mlxsw_sp_span_analyzed_port_find() argument
1006 list_for_each_entry(analyzed_port, &span->analyzed_ports_list, list) { in mlxsw_sp_span_analyzed_port_find()
1019 struct mlxsw_sp_span *span = mlxsw_sp->span; in mlxsw_sp_span_entry_ops() local
1022 for (i = 0; i < span->span_entry_ops_arr_size; ++i) in mlxsw_sp_span_entry_ops()
1023 if (span->span_entry_ops_arr[i]->can_handle(to_dev)) in mlxsw_sp_span_entry_ops()
1024 return span->span_entry_ops_arr[i]; in mlxsw_sp_span_entry_ops()
1031 struct mlxsw_sp_span *span; in mlxsw_sp_span_respin_work() local
1035 span = container_of(work, struct mlxsw_sp_span, work); in mlxsw_sp_span_respin_work()
1036 mlxsw_sp = span->mlxsw_sp; in mlxsw_sp_span_respin_work()
1039 for (i = 0; i < mlxsw_sp->span->entries_count; i++) { in mlxsw_sp_span_respin_work()
1040 struct mlxsw_sp_span_entry *curr = &mlxsw_sp->span->entries[i]; in mlxsw_sp_span_respin_work()
1063 if (atomic_read(&mlxsw_sp->span->active_entries_count) == 0) in mlxsw_sp_span_respin()
1065 mlxsw_core_schedule_work(&mlxsw_sp->span->work); in mlxsw_sp_span_respin()
1116 mlxsw_sp_span_analyzed_port_create(struct mlxsw_sp_span *span, in mlxsw_sp_span_analyzed_port_create() argument
1130 list_add_tail(&analyzed_port->list, &span->analyzed_ports_list); in mlxsw_sp_span_analyzed_port_create()
1172 mutex_lock(&mlxsw_sp->span->analyzed_ports_lock); in mlxsw_sp_span_analyzed_port_get()
1174 analyzed_port = mlxsw_sp_span_analyzed_port_find(mlxsw_sp->span, in mlxsw_sp_span_analyzed_port_get()
1181 analyzed_port = mlxsw_sp_span_analyzed_port_create(mlxsw_sp->span, in mlxsw_sp_span_analyzed_port_get()
1188 mutex_unlock(&mlxsw_sp->span->analyzed_ports_lock); in mlxsw_sp_span_analyzed_port_get()
1199 mutex_lock(&mlxsw_sp->span->analyzed_ports_lock); in mlxsw_sp_span_analyzed_port_put()
1201 analyzed_port = mlxsw_sp_span_analyzed_port_find(mlxsw_sp->span, in mlxsw_sp_span_analyzed_port_put()
1212 mutex_unlock(&mlxsw_sp->span->analyzed_ports_lock); in mlxsw_sp_span_analyzed_port_put()
1216 __mlxsw_sp_span_trigger_port_bind(struct mlxsw_sp_span *span, in __mlxsw_sp_span_trigger_port_bind() argument
1241 return mlxsw_reg_write(span->mlxsw_sp->core, MLXSW_REG(mpar), mpar_pl); in __mlxsw_sp_span_trigger_port_bind()
1248 return __mlxsw_sp_span_trigger_port_bind(trigger_entry->span, in mlxsw_sp_span_trigger_port_bind()
1256 __mlxsw_sp_span_trigger_port_bind(trigger_entry->span, trigger_entry, in mlxsw_sp_span_trigger_port_unbind()
1355 struct mlxsw_sp *mlxsw_sp = trigger_entry->span->mlxsw_sp; in mlxsw_sp2_span_trigger_global_bind()
1406 struct mlxsw_sp *mlxsw_sp = trigger_entry->span->mlxsw_sp; in __mlxsw_sp2_span_trigger_global_enable()
1477 struct mlxsw_sp_span *span = trigger_entry->span; in mlxsw_sp_span_trigger_ops_set() local
1495 trigger_entry->ops = span->span_trigger_ops_arr[type]; in mlxsw_sp_span_trigger_ops_set()
1499 mlxsw_sp_span_trigger_entry_create(struct mlxsw_sp_span *span, in mlxsw_sp_span_trigger_entry_create() argument
1517 trigger_entry->span = span; in mlxsw_sp_span_trigger_entry_create()
1519 list_add_tail(&trigger_entry->list, &span->trigger_entries_list); in mlxsw_sp_span_trigger_entry_create()
1534 mlxsw_sp_span_trigger_entry_destroy(struct mlxsw_sp_span *span, in mlxsw_sp_span_trigger_entry_destroy() argument
1544 mlxsw_sp_span_trigger_entry_find(struct mlxsw_sp_span *span, in mlxsw_sp_span_trigger_entry_find() argument
1550 list_for_each_entry(trigger_entry, &span->trigger_entries_list, list) { in mlxsw_sp_span_trigger_entry_find()
1572 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_agent_bind()
1584 trigger_entry = mlxsw_sp_span_trigger_entry_create(mlxsw_sp->span, in mlxsw_sp_span_agent_bind()
1608 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_agent_unbind()
1617 mlxsw_sp_span_trigger_entry_destroy(mlxsw_sp->span, trigger_entry); in mlxsw_sp_span_agent_unbind()
1628 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_trigger_enable()
1645 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_trigger_disable()
1681 mlxsw_sp->span->span_trigger_ops_arr = mlxsw_sp1_span_trigger_ops_arr; in mlxsw_sp1_span_init()
1682 mlxsw_sp->span->span_entry_ops_arr = mlxsw_sp1_span_entry_ops_arr; in mlxsw_sp1_span_init()
1683 mlxsw_sp->span->span_entry_ops_arr_size = arr_size; in mlxsw_sp1_span_init()
1710 mlxsw_sp->span->span_trigger_ops_arr = mlxsw_sp2_span_trigger_ops_arr; in mlxsw_sp2_span_init()
1711 mlxsw_sp->span->span_entry_ops_arr = mlxsw_sp2_span_entry_ops_arr; in mlxsw_sp2_span_init()
1712 mlxsw_sp->span->span_entry_ops_arr_size = arr_size; in mlxsw_sp2_span_init()