Lines Matching full:prr
26 const struct mlxsw_sp_port_range_reg *prr) in mlxsw_sp_port_range_reg_configure() argument
33 mlxsw_reg_pprr_pack(pprr_pl, prr->index); in mlxsw_sp_port_range_reg_configure()
36 mlxsw_reg_pprr_src_set(pprr_pl, prr->range.source); in mlxsw_sp_port_range_reg_configure()
37 mlxsw_reg_pprr_dst_set(pprr_pl, !prr->range.source); in mlxsw_sp_port_range_reg_configure()
40 mlxsw_reg_pprr_port_range_min_set(pprr_pl, prr->range.min); in mlxsw_sp_port_range_reg_configure()
41 mlxsw_reg_pprr_port_range_max_set(pprr_pl, prr->range.max); in mlxsw_sp_port_range_reg_configure()
52 struct mlxsw_sp_port_range_reg *prr; in mlxsw_sp_port_range_reg_create() local
55 prr = kzalloc(sizeof(*prr), GFP_KERNEL); in mlxsw_sp_port_range_reg_create()
56 if (!prr) in mlxsw_sp_port_range_reg_create()
59 prr->range = *range; in mlxsw_sp_port_range_reg_create()
60 refcount_set(&prr->refcount, 1); in mlxsw_sp_port_range_reg_create()
62 err = xa_alloc(&pr_core->prr_xa, &prr->index, prr, pr_core->prr_ids, in mlxsw_sp_port_range_reg_create()
70 err = mlxsw_sp_port_range_reg_configure(mlxsw_sp, prr); in mlxsw_sp_port_range_reg_create()
78 return prr; in mlxsw_sp_port_range_reg_create()
81 xa_erase(&pr_core->prr_xa, prr->index); in mlxsw_sp_port_range_reg_create()
83 kfree(prr); in mlxsw_sp_port_range_reg_create()
88 struct mlxsw_sp_port_range_reg *prr) in mlxsw_sp_port_range_reg_destroy() argument
93 xa_erase(&pr_core->prr_xa, prr->index); in mlxsw_sp_port_range_reg_destroy()
94 kfree(prr); in mlxsw_sp_port_range_reg_destroy()
102 struct mlxsw_sp_port_range_reg *prr; in mlxsw_sp_port_range_reg_find() local
105 xa_for_each(&pr_core->prr_xa, index, prr) { in mlxsw_sp_port_range_reg_find()
106 if (prr->range.min == range->min && in mlxsw_sp_port_range_reg_find()
107 prr->range.max == range->max && in mlxsw_sp_port_range_reg_find()
108 prr->range.source == range->source) in mlxsw_sp_port_range_reg_find()
109 return prr; in mlxsw_sp_port_range_reg_find()
120 struct mlxsw_sp_port_range_reg *prr; in mlxsw_sp_port_range_reg_get() local
122 prr = mlxsw_sp_port_range_reg_find(mlxsw_sp, range); in mlxsw_sp_port_range_reg_get()
123 if (prr) { in mlxsw_sp_port_range_reg_get()
124 refcount_inc(&prr->refcount); in mlxsw_sp_port_range_reg_get()
125 *p_prr_index = prr->index; in mlxsw_sp_port_range_reg_get()
129 prr = mlxsw_sp_port_range_reg_create(mlxsw_sp, range, extack); in mlxsw_sp_port_range_reg_get()
130 if (IS_ERR(prr)) in mlxsw_sp_port_range_reg_get()
131 return PTR_ERR(prr); in mlxsw_sp_port_range_reg_get()
133 *p_prr_index = prr->index; in mlxsw_sp_port_range_reg_get()
141 struct mlxsw_sp_port_range_reg *prr; in mlxsw_sp_port_range_reg_put() local
143 prr = xa_load(&pr_core->prr_xa, prr_index); in mlxsw_sp_port_range_reg_put()
144 if (WARN_ON(!prr)) in mlxsw_sp_port_range_reg_put()
147 if (!refcount_dec_and_test(&prr->refcount)) in mlxsw_sp_port_range_reg_put()
150 mlxsw_sp_port_range_reg_destroy(mlxsw_sp, prr); in mlxsw_sp_port_range_reg_put()