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()
808 static int mlxsw_sp_span_policer_id_base_set(struct mlxsw_sp_span *span, in mlxsw_sp_span_policer_id_base_set() argument
811 struct mlxsw_sp *mlxsw_sp = span->mlxsw_sp; in mlxsw_sp_span_policer_id_base_set()
815 /* Policers set on SPAN agents must be in the range of in mlxsw_sp_span_policer_id_base_set()
820 if (refcount_read(&span->policer_id_base_ref_count)) { in mlxsw_sp_span_policer_id_base_set()
821 if (policer_id < span->policer_id_base || in mlxsw_sp_span_policer_id_base_set()
822 policer_id >= span->policer_id_base + span->entries_count) in mlxsw_sp_span_policer_id_base_set()
825 refcount_inc(&span->policer_id_base_ref_count); in mlxsw_sp_span_policer_id_base_set()
836 span->policer_id_base = policer_id_base; in mlxsw_sp_span_policer_id_base_set()
837 refcount_set(&span->policer_id_base_ref_count, 1); in mlxsw_sp_span_policer_id_base_set()
842 static void mlxsw_sp_span_policer_id_base_unset(struct mlxsw_sp_span *span) in mlxsw_sp_span_policer_id_base_unset() argument
844 if (refcount_dec_and_test(&span->policer_id_base_ref_count)) in mlxsw_sp_span_policer_id_base_unset()
845 span->policer_id_base = 0; in mlxsw_sp_span_policer_id_base_unset()
858 for (i = 0; i < mlxsw_sp->span->entries_count; i++) { in mlxsw_sp_span_entry_create()
859 if (!refcount_read(&mlxsw_sp->span->entries[i].ref_count)) { in mlxsw_sp_span_entry_create()
860 span_entry = &mlxsw_sp->span->entries[i]; in mlxsw_sp_span_entry_create()
870 err = mlxsw_sp_span_policer_id_base_set(mlxsw_sp->span, in mlxsw_sp_span_entry_create()
876 atomic_inc(&mlxsw_sp->span->active_entries_count); in mlxsw_sp_span_entry_create()
889 atomic_dec(&mlxsw_sp->span->active_entries_count); in mlxsw_sp_span_entry_destroy()
891 mlxsw_sp_span_policer_id_base_unset(mlxsw_sp->span); in mlxsw_sp_span_entry_destroy()
900 for (i = 0; i < mlxsw_sp->span->entries_count; i++) { in mlxsw_sp_span_entry_find_by_port()
901 struct mlxsw_sp_span_entry *curr = &mlxsw_sp->span->entries[i]; in mlxsw_sp_span_entry_find_by_port()
921 for (i = 0; i < mlxsw_sp->span->entries_count; i++) { in mlxsw_sp_span_entry_find_by_id()
922 struct mlxsw_sp_span_entry *curr = &mlxsw_sp->span->entries[i]; in mlxsw_sp_span_entry_find_by_id()
937 for (i = 0; i < mlxsw_sp->span->entries_count; i++) { in mlxsw_sp_span_entry_find_by_parms()
938 struct mlxsw_sp_span_entry *curr = &mlxsw_sp->span->entries[i]; in mlxsw_sp_span_entry_find_by_parms()
999 mlxsw_sp_span_analyzed_port_find(struct mlxsw_sp_span *span, u16 local_port, in mlxsw_sp_span_analyzed_port_find() argument
1004 list_for_each_entry(analyzed_port, &span->analyzed_ports_list, list) { in mlxsw_sp_span_analyzed_port_find()
1017 struct mlxsw_sp_span *span = mlxsw_sp->span; in mlxsw_sp_span_entry_ops() local
1020 for (i = 0; i < span->span_entry_ops_arr_size; ++i) in mlxsw_sp_span_entry_ops()
1021 if (span->span_entry_ops_arr[i]->can_handle(to_dev)) in mlxsw_sp_span_entry_ops()
1022 return span->span_entry_ops_arr[i]; in mlxsw_sp_span_entry_ops()
1029 struct mlxsw_sp_span *span; in mlxsw_sp_span_respin_work() local
1033 span = container_of(work, struct mlxsw_sp_span, work); in mlxsw_sp_span_respin_work()
1034 mlxsw_sp = span->mlxsw_sp; in mlxsw_sp_span_respin_work()
1037 for (i = 0; i < mlxsw_sp->span->entries_count; i++) { in mlxsw_sp_span_respin_work()
1038 struct mlxsw_sp_span_entry *curr = &mlxsw_sp->span->entries[i]; in mlxsw_sp_span_respin_work()
1061 if (atomic_read(&mlxsw_sp->span->active_entries_count) == 0) in mlxsw_sp_span_respin()
1063 mlxsw_core_schedule_work(&mlxsw_sp->span->work); in mlxsw_sp_span_respin()
1114 mlxsw_sp_span_analyzed_port_create(struct mlxsw_sp_span *span, in mlxsw_sp_span_analyzed_port_create() argument
1128 list_add_tail(&analyzed_port->list, &span->analyzed_ports_list); in mlxsw_sp_span_analyzed_port_create()
1170 mutex_lock(&mlxsw_sp->span->analyzed_ports_lock); in mlxsw_sp_span_analyzed_port_get()
1172 analyzed_port = mlxsw_sp_span_analyzed_port_find(mlxsw_sp->span, in mlxsw_sp_span_analyzed_port_get()
1179 analyzed_port = mlxsw_sp_span_analyzed_port_create(mlxsw_sp->span, in mlxsw_sp_span_analyzed_port_get()
1186 mutex_unlock(&mlxsw_sp->span->analyzed_ports_lock); in mlxsw_sp_span_analyzed_port_get()
1197 mutex_lock(&mlxsw_sp->span->analyzed_ports_lock); in mlxsw_sp_span_analyzed_port_put()
1199 analyzed_port = mlxsw_sp_span_analyzed_port_find(mlxsw_sp->span, in mlxsw_sp_span_analyzed_port_put()
1210 mutex_unlock(&mlxsw_sp->span->analyzed_ports_lock); in mlxsw_sp_span_analyzed_port_put()
1214 __mlxsw_sp_span_trigger_port_bind(struct mlxsw_sp_span *span, in __mlxsw_sp_span_trigger_port_bind() argument
1239 return mlxsw_reg_write(span->mlxsw_sp->core, MLXSW_REG(mpar), mpar_pl); in __mlxsw_sp_span_trigger_port_bind()
1246 return __mlxsw_sp_span_trigger_port_bind(trigger_entry->span, in mlxsw_sp_span_trigger_port_bind()
1254 __mlxsw_sp_span_trigger_port_bind(trigger_entry->span, trigger_entry, in mlxsw_sp_span_trigger_port_unbind()
1353 struct mlxsw_sp *mlxsw_sp = trigger_entry->span->mlxsw_sp; in mlxsw_sp2_span_trigger_global_bind()
1404 struct mlxsw_sp *mlxsw_sp = trigger_entry->span->mlxsw_sp; in __mlxsw_sp2_span_trigger_global_enable()
1475 struct mlxsw_sp_span *span = trigger_entry->span; in mlxsw_sp_span_trigger_ops_set() local
1493 trigger_entry->ops = span->span_trigger_ops_arr[type]; in mlxsw_sp_span_trigger_ops_set()
1497 mlxsw_sp_span_trigger_entry_create(struct mlxsw_sp_span *span, in mlxsw_sp_span_trigger_entry_create() argument
1515 trigger_entry->span = span; in mlxsw_sp_span_trigger_entry_create()
1517 list_add_tail(&trigger_entry->list, &span->trigger_entries_list); in mlxsw_sp_span_trigger_entry_create()
1532 mlxsw_sp_span_trigger_entry_destroy(struct mlxsw_sp_span *span, in mlxsw_sp_span_trigger_entry_destroy() argument
1542 mlxsw_sp_span_trigger_entry_find(struct mlxsw_sp_span *span, in mlxsw_sp_span_trigger_entry_find() argument
1548 list_for_each_entry(trigger_entry, &span->trigger_entries_list, list) { in mlxsw_sp_span_trigger_entry_find()
1570 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_agent_bind()
1582 trigger_entry = mlxsw_sp_span_trigger_entry_create(mlxsw_sp->span, in mlxsw_sp_span_agent_bind()
1606 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_agent_unbind()
1615 mlxsw_sp_span_trigger_entry_destroy(mlxsw_sp->span, trigger_entry); in mlxsw_sp_span_agent_unbind()
1626 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_trigger_enable()
1643 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_trigger_disable()
1679 mlxsw_sp->span->span_trigger_ops_arr = mlxsw_sp1_span_trigger_ops_arr; in mlxsw_sp1_span_init()
1680 mlxsw_sp->span->span_entry_ops_arr = mlxsw_sp1_span_entry_ops_arr; in mlxsw_sp1_span_init()
1681 mlxsw_sp->span->span_entry_ops_arr_size = arr_size; in mlxsw_sp1_span_init()
1708 mlxsw_sp->span->span_trigger_ops_arr = mlxsw_sp2_span_trigger_ops_arr; in mlxsw_sp2_span_init()
1709 mlxsw_sp->span->span_entry_ops_arr = mlxsw_sp2_span_entry_ops_arr; in mlxsw_sp2_span_init()
1710 mlxsw_sp->span->span_entry_ops_arr_size = arr_size; in mlxsw_sp2_span_init()