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,
1218 trigger_entry, bool enable) in __mlxsw_sp_span_trigger_port_bind()
1223 switch (trigger_entry->trigger) { in __mlxsw_sp_span_trigger_port_bind()
1235 if (trigger_entry->parms.probability_rate > MLXSW_REG_MPAR_RATE_MAX) in __mlxsw_sp_span_trigger_port_bind()
1238 mlxsw_reg_mpar_pack(mpar_pl, trigger_entry->local_port, i_e, enable, in __mlxsw_sp_span_trigger_port_bind()
1239 trigger_entry->parms.span_id, in __mlxsw_sp_span_trigger_port_bind()
1240 trigger_entry->parms.probability_rate); in __mlxsw_sp_span_trigger_port_bind()
1246 trigger_entry) 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()
1249 trigger_entry, true); in mlxsw_sp_span_trigger_port_bind()
1254 trigger_entry) in mlxsw_sp_span_trigger_port_unbind()
1256 __mlxsw_sp_span_trigger_port_bind(trigger_entry->span, trigger_entry, in mlxsw_sp_span_trigger_port_unbind()
1262 trigger_entry, in mlxsw_sp_span_trigger_port_matches()
1266 return trigger_entry->trigger == trigger && in mlxsw_sp_span_trigger_port_matches()
1267 trigger_entry->local_port == mlxsw_sp_port->local_port; in mlxsw_sp_span_trigger_port_matches()
1272 trigger_entry, in mlxsw_sp_span_trigger_port_enable()
1281 trigger_entry, in mlxsw_sp_span_trigger_port_disable()
1297 trigger_entry) in mlxsw_sp1_span_trigger_global_bind()
1304 trigger_entry) in mlxsw_sp1_span_trigger_global_unbind()
1310 trigger_entry, in mlxsw_sp1_span_trigger_global_matches()
1320 trigger_entry, in mlxsw_sp1_span_trigger_global_enable()
1329 trigger_entry, in mlxsw_sp1_span_trigger_global_disable()
1353 trigger_entry) in mlxsw_sp2_span_trigger_global_bind()
1355 struct mlxsw_sp *mlxsw_sp = trigger_entry->span->mlxsw_sp; in mlxsw_sp2_span_trigger_global_bind()
1359 switch (trigger_entry->trigger) { in mlxsw_sp2_span_trigger_global_bind()
1374 if (trigger_entry->parms.probability_rate > MLXSW_REG_MPAGR_RATE_MAX) in mlxsw_sp2_span_trigger_global_bind()
1377 mlxsw_reg_mpagr_pack(mpagr_pl, trigger, trigger_entry->parms.span_id, in mlxsw_sp2_span_trigger_global_bind()
1378 trigger_entry->parms.probability_rate); in mlxsw_sp2_span_trigger_global_bind()
1384 trigger_entry) in mlxsw_sp2_span_trigger_global_unbind()
1393 trigger_entry, in mlxsw_sp2_span_trigger_global_matches()
1397 return trigger_entry->trigger == trigger; in mlxsw_sp2_span_trigger_global_matches()
1402 trigger_entry, in __mlxsw_sp2_span_trigger_global_enable()
1406 struct mlxsw_sp *mlxsw_sp = trigger_entry->span->mlxsw_sp; in __mlxsw_sp2_span_trigger_global_enable()
1411 switch (trigger_entry->trigger) { in __mlxsw_sp2_span_trigger_global_enable()
1440 trigger_entry, in mlxsw_sp2_span_trigger_global_enable()
1444 return __mlxsw_sp2_span_trigger_global_enable(trigger_entry, in mlxsw_sp2_span_trigger_global_enable()
1450 trigger_entry, in mlxsw_sp2_span_trigger_global_disable()
1454 __mlxsw_sp2_span_trigger_global_enable(trigger_entry, mlxsw_sp_port, tc, in mlxsw_sp2_span_trigger_global_disable()
1475 mlxsw_sp_span_trigger_ops_set(struct mlxsw_sp_span_trigger_entry *trigger_entry) in mlxsw_sp_span_trigger_ops_set() argument
1477 struct mlxsw_sp_span *span = trigger_entry->span; in mlxsw_sp_span_trigger_ops_set()
1480 switch (trigger_entry->trigger) { in mlxsw_sp_span_trigger_ops_set()
1495 trigger_entry->ops = span->span_trigger_ops_arr[type]; in mlxsw_sp_span_trigger_ops_set()
1505 struct mlxsw_sp_span_trigger_entry *trigger_entry; in mlxsw_sp_span_trigger_entry_create() local
1508 trigger_entry = kzalloc(sizeof(*trigger_entry), GFP_KERNEL); in mlxsw_sp_span_trigger_entry_create()
1509 if (!trigger_entry) in mlxsw_sp_span_trigger_entry_create()
1512 refcount_set(&trigger_entry->ref_count, 1); in mlxsw_sp_span_trigger_entry_create()
1513 trigger_entry->local_port = mlxsw_sp_port ? mlxsw_sp_port->local_port : in mlxsw_sp_span_trigger_entry_create()
1515 trigger_entry->trigger = trigger; in mlxsw_sp_span_trigger_entry_create()
1516 memcpy(&trigger_entry->parms, parms, sizeof(trigger_entry->parms)); in mlxsw_sp_span_trigger_entry_create()
1517 trigger_entry->span = span; in mlxsw_sp_span_trigger_entry_create()
1518 mlxsw_sp_span_trigger_ops_set(trigger_entry); 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()
1521 err = trigger_entry->ops->bind(trigger_entry); in mlxsw_sp_span_trigger_entry_create()
1525 return trigger_entry; in mlxsw_sp_span_trigger_entry_create()
1528 list_del(&trigger_entry->list); in mlxsw_sp_span_trigger_entry_create()
1529 kfree(trigger_entry); in mlxsw_sp_span_trigger_entry_create()
1536 trigger_entry) in mlxsw_sp_span_trigger_entry_destroy()
1538 trigger_entry->ops->unbind(trigger_entry); in mlxsw_sp_span_trigger_entry_destroy()
1539 list_del(&trigger_entry->list); in mlxsw_sp_span_trigger_entry_destroy()
1540 kfree(trigger_entry); in mlxsw_sp_span_trigger_entry_destroy()
1548 struct mlxsw_sp_span_trigger_entry *trigger_entry; in mlxsw_sp_span_trigger_entry_find() local
1550 list_for_each_entry(trigger_entry, &span->trigger_entries_list, list) { in mlxsw_sp_span_trigger_entry_find()
1551 if (trigger_entry->ops->matches(trigger_entry, trigger, in mlxsw_sp_span_trigger_entry_find()
1553 return trigger_entry; in mlxsw_sp_span_trigger_entry_find()
1564 struct mlxsw_sp_span_trigger_entry *trigger_entry; in mlxsw_sp_span_agent_bind() local
1572 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_agent_bind()
1575 if (trigger_entry) { in mlxsw_sp_span_agent_bind()
1576 if (trigger_entry->parms.span_id != parms->span_id || in mlxsw_sp_span_agent_bind()
1577 trigger_entry->parms.probability_rate != in mlxsw_sp_span_agent_bind()
1580 refcount_inc(&trigger_entry->ref_count); in mlxsw_sp_span_agent_bind()
1584 trigger_entry = mlxsw_sp_span_trigger_entry_create(mlxsw_sp->span, in mlxsw_sp_span_agent_bind()
1588 if (IS_ERR(trigger_entry)) in mlxsw_sp_span_agent_bind()
1589 err = PTR_ERR(trigger_entry); in mlxsw_sp_span_agent_bind()
1600 struct mlxsw_sp_span_trigger_entry *trigger_entry; in mlxsw_sp_span_agent_unbind() local
1608 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_agent_unbind()
1611 if (WARN_ON_ONCE(!trigger_entry)) in mlxsw_sp_span_agent_unbind()
1614 if (!refcount_dec_and_test(&trigger_entry->ref_count)) in mlxsw_sp_span_agent_unbind()
1617 mlxsw_sp_span_trigger_entry_destroy(mlxsw_sp->span, trigger_entry); in mlxsw_sp_span_agent_unbind()
1624 struct mlxsw_sp_span_trigger_entry *trigger_entry; in mlxsw_sp_span_trigger_enable() local
1628 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_trigger_enable()
1631 if (WARN_ON_ONCE(!trigger_entry)) in mlxsw_sp_span_trigger_enable()
1634 return trigger_entry->ops->enable(trigger_entry, mlxsw_sp_port, tc); in mlxsw_sp_span_trigger_enable()
1641 struct mlxsw_sp_span_trigger_entry *trigger_entry; in mlxsw_sp_span_trigger_disable() local
1645 trigger_entry = mlxsw_sp_span_trigger_entry_find(mlxsw_sp->span, in mlxsw_sp_span_trigger_disable()
1648 if (WARN_ON_ONCE(!trigger_entry)) in mlxsw_sp_span_trigger_disable()
1651 return trigger_entry->ops->disable(trigger_entry, mlxsw_sp_port, tc); in mlxsw_sp_span_trigger_disable()