Lines Matching refs:trigger_entry
60 int (*bind)(struct mlxsw_sp_span_trigger_entry *trigger_entry);
61 void (*unbind)(struct mlxsw_sp_span_trigger_entry *trigger_entry);
62 bool (*matches)(struct mlxsw_sp_span_trigger_entry *trigger_entry,
65 int (*enable)(struct mlxsw_sp_span_trigger_entry *trigger_entry,
67 void (*disable)(struct mlxsw_sp_span_trigger_entry *trigger_entry,
1207 trigger_entry, bool enable) in __mlxsw_sp_span_trigger_port_bind()
1212 switch (trigger_entry->trigger) { in __mlxsw_sp_span_trigger_port_bind()
1224 mlxsw_reg_mpar_pack(mpar_pl, trigger_entry->local_port, i_e, enable, in __mlxsw_sp_span_trigger_port_bind()
1225 trigger_entry->parms.span_id); in __mlxsw_sp_span_trigger_port_bind()
1231 trigger_entry) in mlxsw_sp_span_trigger_port_bind()
1233 return __mlxsw_sp_span_trigger_port_bind(trigger_entry->span, in mlxsw_sp_span_trigger_port_bind()
1234 trigger_entry, true); in mlxsw_sp_span_trigger_port_bind()
1239 trigger_entry) in mlxsw_sp_span_trigger_port_unbind()
1241 __mlxsw_sp_span_trigger_port_bind(trigger_entry->span, trigger_entry, in mlxsw_sp_span_trigger_port_unbind()
1247 trigger_entry, in mlxsw_sp_span_trigger_port_matches()
1251 return trigger_entry->trigger == trigger && in mlxsw_sp_span_trigger_port_matches()
1252 trigger_entry->local_port == mlxsw_sp_port->local_port; in mlxsw_sp_span_trigger_port_matches()
1257 trigger_entry, in mlxsw_sp_span_trigger_port_enable()
1266 trigger_entry, in mlxsw_sp_span_trigger_port_disable()
1282 trigger_entry) in mlxsw_sp1_span_trigger_global_bind()
1289 trigger_entry) in mlxsw_sp1_span_trigger_global_unbind()
1295 trigger_entry, in mlxsw_sp1_span_trigger_global_matches()
1305 trigger_entry, in mlxsw_sp1_span_trigger_global_enable()
1314 trigger_entry, in mlxsw_sp1_span_trigger_global_disable()
1338 trigger_entry) in mlxsw_sp2_span_trigger_global_bind()
1340 struct mlxsw_sp *mlxsw_sp = trigger_entry->span->mlxsw_sp; in mlxsw_sp2_span_trigger_global_bind()
1344 switch (trigger_entry->trigger) { in mlxsw_sp2_span_trigger_global_bind()
1359 mlxsw_reg_mpagr_pack(mpagr_pl, trigger, trigger_entry->parms.span_id, in mlxsw_sp2_span_trigger_global_bind()
1366 trigger_entry) in mlxsw_sp2_span_trigger_global_unbind()
1375 trigger_entry, in mlxsw_sp2_span_trigger_global_matches()
1379 return trigger_entry->trigger == trigger; in mlxsw_sp2_span_trigger_global_matches()
1384 trigger_entry, in __mlxsw_sp2_span_trigger_global_enable()
1388 struct mlxsw_sp *mlxsw_sp = trigger_entry->span->mlxsw_sp; in __mlxsw_sp2_span_trigger_global_enable()
1393 switch (trigger_entry->trigger) { in __mlxsw_sp2_span_trigger_global_enable()
1422 trigger_entry, in mlxsw_sp2_span_trigger_global_enable()
1426 return __mlxsw_sp2_span_trigger_global_enable(trigger_entry, in mlxsw_sp2_span_trigger_global_enable()
1432 trigger_entry, in mlxsw_sp2_span_trigger_global_disable()
1436 __mlxsw_sp2_span_trigger_global_enable(trigger_entry, mlxsw_sp_port, tc, in mlxsw_sp2_span_trigger_global_disable()
1457 mlxsw_sp_span_trigger_ops_set(struct mlxsw_sp_span_trigger_entry *trigger_entry) in mlxsw_sp_span_trigger_ops_set() argument
1459 struct mlxsw_sp_span *span = trigger_entry->span; in mlxsw_sp_span_trigger_ops_set()
1462 switch (trigger_entry->trigger) { in mlxsw_sp_span_trigger_ops_set()
1477 trigger_entry->ops = span->span_trigger_ops_arr[type]; in mlxsw_sp_span_trigger_ops_set()
1487 struct mlxsw_sp_span_trigger_entry *trigger_entry; in mlxsw_sp_span_trigger_entry_create() local
1490 trigger_entry = kzalloc(sizeof(*trigger_entry), GFP_KERNEL); in mlxsw_sp_span_trigger_entry_create()
1491 if (!trigger_entry) in mlxsw_sp_span_trigger_entry_create()
1494 refcount_set(&trigger_entry->ref_count, 1); in mlxsw_sp_span_trigger_entry_create()
1495 trigger_entry->local_port = mlxsw_sp_port ? mlxsw_sp_port->local_port : in mlxsw_sp_span_trigger_entry_create()
1497 trigger_entry->trigger = trigger; in mlxsw_sp_span_trigger_entry_create()
1498 memcpy(&trigger_entry->parms, parms, sizeof(trigger_entry->parms)); in mlxsw_sp_span_trigger_entry_create()
1499 trigger_entry->span = span; in mlxsw_sp_span_trigger_entry_create()
1500 mlxsw_sp_span_trigger_ops_set(trigger_entry); in mlxsw_sp_span_trigger_entry_create()
1501 list_add_tail(&trigger_entry->list, &span->trigger_entries_list); in mlxsw_sp_span_trigger_entry_create()
1503 err = trigger_entry->ops->bind(trigger_entry); in mlxsw_sp_span_trigger_entry_create()
1507 return trigger_entry; in mlxsw_sp_span_trigger_entry_create()
1510 list_del(&trigger_entry->list); in mlxsw_sp_span_trigger_entry_create()
1511 kfree(trigger_entry); in mlxsw_sp_span_trigger_entry_create()
1518 trigger_entry) in mlxsw_sp_span_trigger_entry_destroy()
1520 trigger_entry->ops->unbind(trigger_entry); in mlxsw_sp_span_trigger_entry_destroy()
1521 list_del(&trigger_entry->list); in mlxsw_sp_span_trigger_entry_destroy()
1522 kfree(trigger_entry); in mlxsw_sp_span_trigger_entry_destroy()
1530 struct mlxsw_sp_span_trigger_entry *trigger_entry; in mlxsw_sp_span_trigger_entry_find() local
1532 list_for_each_entry(trigger_entry, &span->trigger_entries_list, list) { in mlxsw_sp_span_trigger_entry_find()
1533 if (trigger_entry->ops->matches(trigger_entry, trigger, in mlxsw_sp_span_trigger_entry_find()
1535 return trigger_entry; in mlxsw_sp_span_trigger_entry_find()
1546 struct mlxsw_sp_span_trigger_entry *trigger_entry; in mlxsw_sp_span_agent_bind() local
1554 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_agent_bind()
1557 if (trigger_entry) { in mlxsw_sp_span_agent_bind()
1558 if (trigger_entry->parms.span_id != parms->span_id) in mlxsw_sp_span_agent_bind()
1560 refcount_inc(&trigger_entry->ref_count); in mlxsw_sp_span_agent_bind()
1564 trigger_entry = mlxsw_sp_span_trigger_entry_create(mlxsw_sp->span, in mlxsw_sp_span_agent_bind()
1568 if (IS_ERR(trigger_entry)) in mlxsw_sp_span_agent_bind()
1569 err = PTR_ERR(trigger_entry); in mlxsw_sp_span_agent_bind()
1580 struct mlxsw_sp_span_trigger_entry *trigger_entry; in mlxsw_sp_span_agent_unbind() local
1588 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_agent_unbind()
1591 if (WARN_ON_ONCE(!trigger_entry)) in mlxsw_sp_span_agent_unbind()
1594 if (!refcount_dec_and_test(&trigger_entry->ref_count)) in mlxsw_sp_span_agent_unbind()
1597 mlxsw_sp_span_trigger_entry_destroy(mlxsw_sp->span, trigger_entry); in mlxsw_sp_span_agent_unbind()
1604 struct mlxsw_sp_span_trigger_entry *trigger_entry; in mlxsw_sp_span_trigger_enable() local
1608 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_trigger_enable()
1611 if (WARN_ON_ONCE(!trigger_entry)) in mlxsw_sp_span_trigger_enable()
1614 return trigger_entry->ops->enable(trigger_entry, mlxsw_sp_port, tc); in mlxsw_sp_span_trigger_enable()
1621 struct mlxsw_sp_span_trigger_entry *trigger_entry; in mlxsw_sp_span_trigger_disable() local
1625 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_trigger_disable()
1628 if (WARN_ON_ONCE(!trigger_entry)) in mlxsw_sp_span_trigger_disable()
1631 return trigger_entry->ops->disable(trigger_entry, mlxsw_sp_port, tc); in mlxsw_sp_span_trigger_disable()