Lines Matching full:layer

84 static u32 sparx5_lg_get_leak_time(struct sparx5 *sparx5, u32 layer, u32 group)  in sparx5_lg_get_leak_time()  argument
88 value = spx5_rd(sparx5, HSCH_HSCH_TIMER_CFG(layer, group)); in sparx5_lg_get_leak_time()
92 static void sparx5_lg_set_leak_time(struct sparx5 *sparx5, u32 layer, u32 group, in sparx5_lg_set_leak_time() argument
96 HSCH_HSCH_TIMER_CFG(layer, group)); in sparx5_lg_set_leak_time()
99 static u32 sparx5_lg_get_first(struct sparx5 *sparx5, u32 layer, u32 group) in sparx5_lg_get_first() argument
103 value = spx5_rd(sparx5, HSCH_HSCH_LEAK_CFG(layer, group)); in sparx5_lg_get_first()
107 static u32 sparx5_lg_get_next(struct sparx5 *sparx5, u32 layer, u32 group, in sparx5_lg_get_next() argument
117 static u32 sparx5_lg_get_last(struct sparx5 *sparx5, u32 layer, u32 group) in sparx5_lg_get_last() argument
121 itr = sparx5_lg_get_first(sparx5, layer, group); in sparx5_lg_get_last()
124 next = sparx5_lg_get_next(sparx5, layer, group, itr); in sparx5_lg_get_last()
132 static bool sparx5_lg_is_last(struct sparx5 *sparx5, u32 layer, u32 group, in sparx5_lg_is_last() argument
135 return idx == sparx5_lg_get_next(sparx5, layer, group, idx); in sparx5_lg_is_last()
138 static bool sparx5_lg_is_first(struct sparx5 *sparx5, u32 layer, u32 group, in sparx5_lg_is_first() argument
141 return idx == sparx5_lg_get_first(sparx5, layer, group); in sparx5_lg_is_first()
144 static bool sparx5_lg_is_empty(struct sparx5 *sparx5, u32 layer, u32 group) in sparx5_lg_is_empty() argument
146 return sparx5_lg_get_leak_time(sparx5, layer, group) == 0; in sparx5_lg_is_empty()
149 static bool sparx5_lg_is_singular(struct sparx5 *sparx5, u32 layer, u32 group) in sparx5_lg_is_singular() argument
151 if (sparx5_lg_is_empty(sparx5, layer, group)) in sparx5_lg_is_singular()
154 return sparx5_lg_get_first(sparx5, layer, group) == in sparx5_lg_is_singular()
155 sparx5_lg_get_last(sparx5, layer, group); in sparx5_lg_is_singular()
158 static void sparx5_lg_enable(struct sparx5 *sparx5, u32 layer, u32 group, in sparx5_lg_enable() argument
161 sparx5_lg_set_leak_time(sparx5, layer, group, leak_time); in sparx5_lg_enable()
164 static void sparx5_lg_disable(struct sparx5 *sparx5, u32 layer, u32 group) in sparx5_lg_disable() argument
166 sparx5_lg_set_leak_time(sparx5, layer, group, 0); in sparx5_lg_disable()
169 static int sparx5_lg_get_group_by_index(struct sparx5 *sparx5, u32 layer, in sparx5_lg_get_group_by_index() argument
176 if (sparx5_lg_is_empty(sparx5, layer, i)) in sparx5_lg_get_group_by_index()
179 itr = sparx5_lg_get_first(sparx5, layer, i); in sparx5_lg_get_group_by_index()
182 next = sparx5_lg_get_next(sparx5, layer, i, itr); in sparx5_lg_get_group_by_index()
198 static int sparx5_lg_get_group_by_rate(u32 layer, u32 rate, u32 *group) in sparx5_lg_get_group_by_rate() argument
200 struct sparx5_layer *l = &layers[layer]; in sparx5_lg_get_group_by_rate()
215 static int sparx5_lg_get_adjacent(struct sparx5 *sparx5, u32 layer, u32 group, in sparx5_lg_get_adjacent() argument
220 *first = sparx5_lg_get_first(sparx5, layer, group); in sparx5_lg_get_adjacent()
226 *next = sparx5_lg_get_next(sparx5, layer, group, itr); in sparx5_lg_get_adjacent()
241 static int sparx5_lg_conf_set(struct sparx5 *sparx5, u32 layer, u32 group, in sparx5_lg_conf_set() argument
244 u32 leak_time = layers[layer].leak_groups[group].leak_time; in sparx5_lg_conf_set()
247 sparx5_lg_disable(sparx5, layer, group); in sparx5_lg_conf_set()
252 /* Select layer */ in sparx5_lg_conf_set()
253 spx5_rmw(HSCH_HSCH_CFG_CFG_HSCH_LAYER_SET(layer), in sparx5_lg_conf_set()
263 HSCH_HSCH_LEAK_CFG(layer, group)); in sparx5_lg_conf_set()
266 sparx5_lg_enable(sparx5, layer, group, leak_time); in sparx5_lg_conf_set()
271 static int sparx5_lg_del(struct sparx5 *sparx5, u32 layer, u32 group, u32 idx) in sparx5_lg_del() argument
277 WARN_ON(sparx5_lg_get_adjacent(sparx5, layer, group, idx, &prev, &next, in sparx5_lg_del()
280 if (sparx5_lg_is_singular(sparx5, layer, group)) { in sparx5_lg_del()
282 } else if (sparx5_lg_is_last(sparx5, layer, group, idx)) { in sparx5_lg_del()
286 } else if (sparx5_lg_is_first(sparx5, layer, group, idx)) { in sparx5_lg_del()
295 return sparx5_lg_conf_set(sparx5, layer, group, first, idx, next, in sparx5_lg_del()
299 static int sparx5_lg_add(struct sparx5 *sparx5, u32 layer, u32 new_group, in sparx5_lg_add() argument
304 pr_debug("ADD: layer: %d, new_group: %d, idx: %d", layer, new_group, in sparx5_lg_add()
308 if (sparx5_lg_get_group_by_index(sparx5, layer, idx, &old_group) >= 0) { in sparx5_lg_add()
311 sparx5_lg_del(sparx5, layer, old_group, idx); in sparx5_lg_add()
321 if (sparx5_lg_is_empty(sparx5, layer, new_group)) in sparx5_lg_add()
324 next = sparx5_lg_get_first(sparx5, layer, new_group); in sparx5_lg_add()
326 return sparx5_lg_conf_set(sparx5, layer, new_group, first, idx, next, in sparx5_lg_add()
331 const struct sparx5_shaper *sh, u32 layer, in sparx5_shaper_conf_set() argument
342 /* Select layer */ in sparx5_shaper_conf_set()
343 spx5_rmw(HSCH_HSCH_CFG_CFG_HSCH_LAYER_SET(layer), in sparx5_shaper_conf_set()
356 sparx5_lg_action(sparx5, layer, group, idx); in sparx5_shaper_conf_set()
370 u32 layer = is_sparx5(port->sparx5) ? 2 : 1; in sparx5_dwrr_conf_set() local
373 spx5_rmw(HSCH_HSCH_CFG_CFG_HSCH_LAYER_SET(layer) | in sparx5_dwrr_conf_set()
395 struct sparx5_layer *layer; in sparx5_leak_groups_init() local
404 layer = &layers[i]; in sparx5_leak_groups_init()
406 lg = &layer->leak_groups[ii]; in sparx5_leak_groups_init()
498 u32 layer, u32 idx) in sparx5_tc_tbf_add() argument
509 if (sparx5_lg_get_group_by_rate(layer, sh.rate, &group) < 0) { in sparx5_tc_tbf_add()
515 lg = &layers[layer].leak_groups[group]; in sparx5_tc_tbf_add()
529 return sparx5_shaper_conf_set(port, &sh, layer, idx, group); in sparx5_tc_tbf_add()
532 int sparx5_tc_tbf_del(struct sparx5_port *port, u32 layer, u32 idx) in sparx5_tc_tbf_del() argument
537 sparx5_lg_get_group_by_index(port->sparx5, layer, idx, &group); in sparx5_tc_tbf_del()
539 return sparx5_shaper_conf_set(port, &sh, layer, idx, group); in sparx5_tc_tbf_del()