Lines Matching refs: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()
809 static int mlxsw_sp_span_policer_id_base_set(struct mlxsw_sp_span *span, in mlxsw_sp_span_policer_id_base_set() argument
812 struct mlxsw_sp *mlxsw_sp = span->mlxsw_sp; in mlxsw_sp_span_policer_id_base_set()
821 if (refcount_read(&span->policer_id_base_ref_count)) { in mlxsw_sp_span_policer_id_base_set()
822 if (policer_id < span->policer_id_base || in mlxsw_sp_span_policer_id_base_set()
823 policer_id >= span->policer_id_base + span->entries_count) in mlxsw_sp_span_policer_id_base_set()
826 refcount_inc(&span->policer_id_base_ref_count); in mlxsw_sp_span_policer_id_base_set()
837 span->policer_id_base = policer_id_base; in mlxsw_sp_span_policer_id_base_set()
838 refcount_set(&span->policer_id_base_ref_count, 1); in mlxsw_sp_span_policer_id_base_set()
843 static void mlxsw_sp_span_policer_id_base_unset(struct mlxsw_sp_span *span) in mlxsw_sp_span_policer_id_base_unset() argument
845 if (refcount_dec_and_test(&span->policer_id_base_ref_count)) in mlxsw_sp_span_policer_id_base_unset()
846 span->policer_id_base = 0; in mlxsw_sp_span_policer_id_base_unset()
859 for (i = 0; i < mlxsw_sp->span->entries_count; i++) { in mlxsw_sp_span_entry_create()
860 if (!refcount_read(&mlxsw_sp->span->entries[i].ref_count)) { in mlxsw_sp_span_entry_create()
861 span_entry = &mlxsw_sp->span->entries[i]; in mlxsw_sp_span_entry_create()
871 err = mlxsw_sp_span_policer_id_base_set(mlxsw_sp->span, in mlxsw_sp_span_entry_create()
877 atomic_inc(&mlxsw_sp->span->active_entries_count); in mlxsw_sp_span_entry_create()
890 atomic_dec(&mlxsw_sp->span->active_entries_count); in mlxsw_sp_span_entry_destroy()
892 mlxsw_sp_span_policer_id_base_unset(mlxsw_sp->span); in mlxsw_sp_span_entry_destroy()
901 for (i = 0; i < mlxsw_sp->span->entries_count; i++) { in mlxsw_sp_span_entry_find_by_port()
902 struct mlxsw_sp_span_entry *curr = &mlxsw_sp->span->entries[i]; in mlxsw_sp_span_entry_find_by_port()
922 for (i = 0; i < mlxsw_sp->span->entries_count; i++) { in mlxsw_sp_span_entry_find_by_id()
923 struct mlxsw_sp_span_entry *curr = &mlxsw_sp->span->entries[i]; in mlxsw_sp_span_entry_find_by_id()
938 for (i = 0; i < mlxsw_sp->span->entries_count; i++) { in mlxsw_sp_span_entry_find_by_parms()
939 struct mlxsw_sp_span_entry *curr = &mlxsw_sp->span->entries[i]; in mlxsw_sp_span_entry_find_by_parms()
1000 mlxsw_sp_span_analyzed_port_find(struct mlxsw_sp_span *span, u16 local_port, in mlxsw_sp_span_analyzed_port_find() argument
1005 list_for_each_entry(analyzed_port, &span->analyzed_ports_list, list) { in mlxsw_sp_span_analyzed_port_find()
1018 struct mlxsw_sp_span *span = mlxsw_sp->span; in mlxsw_sp_span_entry_ops() local
1021 for (i = 0; i < span->span_entry_ops_arr_size; ++i) in mlxsw_sp_span_entry_ops()
1022 if (span->span_entry_ops_arr[i]->can_handle(to_dev)) in mlxsw_sp_span_entry_ops()
1023 return span->span_entry_ops_arr[i]; in mlxsw_sp_span_entry_ops()
1030 struct mlxsw_sp_span *span; in mlxsw_sp_span_respin_work() local
1034 span = container_of(work, struct mlxsw_sp_span, work); in mlxsw_sp_span_respin_work()
1035 mlxsw_sp = span->mlxsw_sp; in mlxsw_sp_span_respin_work()
1038 for (i = 0; i < mlxsw_sp->span->entries_count; i++) { in mlxsw_sp_span_respin_work()
1039 struct mlxsw_sp_span_entry *curr = &mlxsw_sp->span->entries[i]; in mlxsw_sp_span_respin_work()
1062 if (atomic_read(&mlxsw_sp->span->active_entries_count) == 0) in mlxsw_sp_span_respin()
1064 mlxsw_core_schedule_work(&mlxsw_sp->span->work); in mlxsw_sp_span_respin()
1115 mlxsw_sp_span_analyzed_port_create(struct mlxsw_sp_span *span, in mlxsw_sp_span_analyzed_port_create() argument
1129 list_add_tail(&analyzed_port->list, &span->analyzed_ports_list); in mlxsw_sp_span_analyzed_port_create()
1171 mutex_lock(&mlxsw_sp->span->analyzed_ports_lock); in mlxsw_sp_span_analyzed_port_get()
1173 analyzed_port = mlxsw_sp_span_analyzed_port_find(mlxsw_sp->span, in mlxsw_sp_span_analyzed_port_get()
1180 analyzed_port = mlxsw_sp_span_analyzed_port_create(mlxsw_sp->span, in mlxsw_sp_span_analyzed_port_get()
1187 mutex_unlock(&mlxsw_sp->span->analyzed_ports_lock); in mlxsw_sp_span_analyzed_port_get()
1198 mutex_lock(&mlxsw_sp->span->analyzed_ports_lock); in mlxsw_sp_span_analyzed_port_put()
1200 analyzed_port = mlxsw_sp_span_analyzed_port_find(mlxsw_sp->span, in mlxsw_sp_span_analyzed_port_put()
1211 mutex_unlock(&mlxsw_sp->span->analyzed_ports_lock); in mlxsw_sp_span_analyzed_port_put()
1215 __mlxsw_sp_span_trigger_port_bind(struct mlxsw_sp_span *span, in __mlxsw_sp_span_trigger_port_bind() argument
1240 return mlxsw_reg_write(span->mlxsw_sp->core, MLXSW_REG(mpar), mpar_pl); in __mlxsw_sp_span_trigger_port_bind()
1247 return __mlxsw_sp_span_trigger_port_bind(trigger_entry->span, in mlxsw_sp_span_trigger_port_bind()
1255 __mlxsw_sp_span_trigger_port_bind(trigger_entry->span, trigger_entry, in mlxsw_sp_span_trigger_port_unbind()
1354 struct mlxsw_sp *mlxsw_sp = trigger_entry->span->mlxsw_sp; in mlxsw_sp2_span_trigger_global_bind()
1405 struct mlxsw_sp *mlxsw_sp = trigger_entry->span->mlxsw_sp; in __mlxsw_sp2_span_trigger_global_enable()
1476 struct mlxsw_sp_span *span = trigger_entry->span; in mlxsw_sp_span_trigger_ops_set() local
1494 trigger_entry->ops = span->span_trigger_ops_arr[type]; in mlxsw_sp_span_trigger_ops_set()
1498 mlxsw_sp_span_trigger_entry_create(struct mlxsw_sp_span *span, in mlxsw_sp_span_trigger_entry_create() argument
1516 trigger_entry->span = span; in mlxsw_sp_span_trigger_entry_create()
1518 list_add_tail(&trigger_entry->list, &span->trigger_entries_list); in mlxsw_sp_span_trigger_entry_create()
1533 mlxsw_sp_span_trigger_entry_destroy(struct mlxsw_sp_span *span, in mlxsw_sp_span_trigger_entry_destroy() argument
1543 mlxsw_sp_span_trigger_entry_find(struct mlxsw_sp_span *span, in mlxsw_sp_span_trigger_entry_find() argument
1549 list_for_each_entry(trigger_entry, &span->trigger_entries_list, list) { in mlxsw_sp_span_trigger_entry_find()
1571 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_agent_bind()
1583 trigger_entry = mlxsw_sp_span_trigger_entry_create(mlxsw_sp->span, in mlxsw_sp_span_agent_bind()
1607 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_agent_unbind()
1616 mlxsw_sp_span_trigger_entry_destroy(mlxsw_sp->span, trigger_entry); in mlxsw_sp_span_agent_unbind()
1627 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_trigger_enable()
1644 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_trigger_disable()
1680 mlxsw_sp->span->span_trigger_ops_arr = mlxsw_sp1_span_trigger_ops_arr; in mlxsw_sp1_span_init()
1681 mlxsw_sp->span->span_entry_ops_arr = mlxsw_sp1_span_entry_ops_arr; in mlxsw_sp1_span_init()
1682 mlxsw_sp->span->span_entry_ops_arr_size = arr_size; in mlxsw_sp1_span_init()
1709 mlxsw_sp->span->span_trigger_ops_arr = mlxsw_sp2_span_trigger_ops_arr; in mlxsw_sp2_span_init()
1710 mlxsw_sp->span->span_entry_ops_arr = mlxsw_sp2_span_entry_ops_arr; in mlxsw_sp2_span_init()
1711 mlxsw_sp->span->span_entry_ops_arr_size = arr_size; in mlxsw_sp2_span_init()