Lines Matching refs:block

381 	void (*destructor)(struct mlxsw_afa_block *block,
385 static void mlxsw_afa_resource_add(struct mlxsw_afa_block *block, in mlxsw_afa_resource_add() argument
388 list_add(&resource->list, &block->resource_list); in mlxsw_afa_resource_add()
396 static void mlxsw_afa_resources_destroy(struct mlxsw_afa_block *block) in mlxsw_afa_resources_destroy() argument
400 list_for_each_entry_safe(resource, tmp, &block->resource_list, list) { in mlxsw_afa_resources_destroy()
401 resource->destructor(block, resource); in mlxsw_afa_resources_destroy()
407 struct mlxsw_afa_block *block; in mlxsw_afa_block_create() local
409 block = kzalloc(sizeof(*block), GFP_KERNEL); in mlxsw_afa_block_create()
410 if (!block) in mlxsw_afa_block_create()
412 INIT_LIST_HEAD(&block->resource_list); in mlxsw_afa_block_create()
413 block->afa = mlxsw_afa; in mlxsw_afa_block_create()
416 block->first_set = mlxsw_afa_set_create(true); in mlxsw_afa_block_create()
417 if (!block->first_set) in mlxsw_afa_block_create()
424 block->cur_set = mlxsw_afa_set_create(false); in mlxsw_afa_block_create()
425 if (!block->cur_set) in mlxsw_afa_block_create()
427 block->cur_set->prev = block->first_set; in mlxsw_afa_block_create()
428 block->first_set->next = block->cur_set; in mlxsw_afa_block_create()
430 block->cur_set = block->first_set; in mlxsw_afa_block_create()
433 return block; in mlxsw_afa_block_create()
436 mlxsw_afa_set_destroy(block->first_set); in mlxsw_afa_block_create()
438 kfree(block); in mlxsw_afa_block_create()
443 void mlxsw_afa_block_destroy(struct mlxsw_afa_block *block) in mlxsw_afa_block_destroy() argument
445 struct mlxsw_afa_set *set = block->first_set; in mlxsw_afa_block_destroy()
450 mlxsw_afa_set_put(block->afa, set); in mlxsw_afa_block_destroy()
453 mlxsw_afa_resources_destroy(block); in mlxsw_afa_block_destroy()
454 kfree(block); in mlxsw_afa_block_destroy()
458 int mlxsw_afa_block_commit(struct mlxsw_afa_block *block) in mlxsw_afa_block_commit() argument
460 struct mlxsw_afa_set *set = block->cur_set; in mlxsw_afa_block_commit()
463 block->cur_set = NULL; in mlxsw_afa_block_commit()
464 block->finished = true; in mlxsw_afa_block_commit()
473 set = mlxsw_afa_set_get(block->afa, set); in mlxsw_afa_block_commit()
487 block->first_set = set; in mlxsw_afa_block_commit()
492 char *mlxsw_afa_block_first_set(struct mlxsw_afa_block *block) in mlxsw_afa_block_first_set() argument
494 return block->first_set->ht_key.enc_actions; in mlxsw_afa_block_first_set()
498 char *mlxsw_afa_block_cur_set(struct mlxsw_afa_block *block) in mlxsw_afa_block_cur_set() argument
500 return block->cur_set->ht_key.enc_actions; in mlxsw_afa_block_cur_set()
504 u32 mlxsw_afa_block_first_kvdl_index(struct mlxsw_afa_block *block) in mlxsw_afa_block_first_kvdl_index() argument
509 if (WARN_ON(!block->first_set->next)) in mlxsw_afa_block_first_kvdl_index()
511 return block->first_set->next->kvdl_index; in mlxsw_afa_block_first_kvdl_index()
515 int mlxsw_afa_block_activity_get(struct mlxsw_afa_block *block, bool *activity) in mlxsw_afa_block_activity_get() argument
517 u32 kvdl_index = mlxsw_afa_block_first_kvdl_index(block); in mlxsw_afa_block_activity_get()
519 return block->afa->ops->kvdl_set_activity_get(block->afa->ops_priv, in mlxsw_afa_block_activity_get()
524 int mlxsw_afa_block_continue(struct mlxsw_afa_block *block) in mlxsw_afa_block_continue() argument
526 if (block->finished) in mlxsw_afa_block_continue()
528 mlxsw_afa_set_goto_set(block->cur_set, in mlxsw_afa_block_continue()
530 block->finished = true; in mlxsw_afa_block_continue()
535 int mlxsw_afa_block_jump(struct mlxsw_afa_block *block, u16 group_id) in mlxsw_afa_block_jump() argument
537 if (block->finished) in mlxsw_afa_block_jump()
539 mlxsw_afa_set_goto_set(block->cur_set, in mlxsw_afa_block_jump()
541 block->finished = true; in mlxsw_afa_block_jump()
546 int mlxsw_afa_block_terminate(struct mlxsw_afa_block *block) in mlxsw_afa_block_terminate() argument
548 if (block->finished) in mlxsw_afa_block_terminate()
550 mlxsw_afa_set_goto_set(block->cur_set, in mlxsw_afa_block_terminate()
552 block->finished = true; in mlxsw_afa_block_terminate()
630 mlxsw_afa_fwd_entry_ref_destroy(struct mlxsw_afa_block *block, in mlxsw_afa_fwd_entry_ref_destroy() argument
634 mlxsw_afa_fwd_entry_put(block->afa, fwd_entry_ref->fwd_entry); in mlxsw_afa_fwd_entry_ref_destroy()
639 mlxsw_afa_fwd_entry_ref_destructor(struct mlxsw_afa_block *block, in mlxsw_afa_fwd_entry_ref_destructor() argument
646 mlxsw_afa_fwd_entry_ref_destroy(block, fwd_entry_ref); in mlxsw_afa_fwd_entry_ref_destructor()
650 mlxsw_afa_fwd_entry_ref_create(struct mlxsw_afa_block *block, u16 local_port) in mlxsw_afa_fwd_entry_ref_create() argument
659 fwd_entry = mlxsw_afa_fwd_entry_get(block->afa, local_port); in mlxsw_afa_fwd_entry_ref_create()
666 mlxsw_afa_resource_add(block, &fwd_entry_ref->resource); in mlxsw_afa_fwd_entry_ref_create()
680 mlxsw_afa_counter_destroy(struct mlxsw_afa_block *block, in mlxsw_afa_counter_destroy() argument
684 block->afa->ops->counter_index_put(block->afa->ops_priv, in mlxsw_afa_counter_destroy()
690 mlxsw_afa_counter_destructor(struct mlxsw_afa_block *block, in mlxsw_afa_counter_destructor() argument
696 mlxsw_afa_counter_destroy(block, counter); in mlxsw_afa_counter_destructor()
700 mlxsw_afa_counter_create(struct mlxsw_afa_block *block) in mlxsw_afa_counter_create() argument
709 err = block->afa->ops->counter_index_get(block->afa->ops_priv, in mlxsw_afa_counter_create()
714 mlxsw_afa_resource_add(block, &counter->resource); in mlxsw_afa_counter_create()
823 mlxsw_afa_cookie_ref_destroy(struct mlxsw_afa_block *block, in mlxsw_afa_cookie_ref_destroy() argument
827 mlxsw_afa_cookie_put(block->afa, cookie_ref->cookie); in mlxsw_afa_cookie_ref_destroy()
832 mlxsw_afa_cookie_ref_destructor(struct mlxsw_afa_block *block, in mlxsw_afa_cookie_ref_destructor() argument
839 mlxsw_afa_cookie_ref_destroy(block, cookie_ref); in mlxsw_afa_cookie_ref_destructor()
843 mlxsw_afa_cookie_ref_create(struct mlxsw_afa_block *block, in mlxsw_afa_cookie_ref_create() argument
853 cookie = mlxsw_afa_cookie_get(block->afa, fa_cookie); in mlxsw_afa_cookie_ref_create()
860 mlxsw_afa_resource_add(block, &cookie_ref->resource); in mlxsw_afa_cookie_ref_create()
949 mlxsw_afa_policer_ref_destroy(struct mlxsw_afa_block *block, in mlxsw_afa_policer_ref_destroy() argument
953 mlxsw_afa_policer_put(block->afa, policer_ref->policer); in mlxsw_afa_policer_ref_destroy()
958 mlxsw_afa_policer_ref_destructor(struct mlxsw_afa_block *block, in mlxsw_afa_policer_ref_destructor() argument
965 mlxsw_afa_policer_ref_destroy(block, policer_ref); in mlxsw_afa_policer_ref_destructor()
969 mlxsw_afa_policer_ref_create(struct mlxsw_afa_block *block, u32 fa_index, in mlxsw_afa_policer_ref_create() argument
981 policer = mlxsw_afa_policer_get(block->afa, fa_index, rate_bytes_ps, in mlxsw_afa_policer_ref_create()
990 mlxsw_afa_resource_add(block, &policer_ref->resource); in mlxsw_afa_policer_ref_create()
1009 mlxsw_afa_block_need_split(const struct mlxsw_afa_block *block, in mlxsw_afa_block_need_split() argument
1012 struct mlxsw_afa_set *cur_set = block->cur_set; in mlxsw_afa_block_need_split()
1023 static char *mlxsw_afa_block_append_action_ext(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_action_ext() argument
1030 if (block->finished) in mlxsw_afa_block_append_action_ext()
1032 if (block->cur_act_index + action_size > block->afa->max_acts_per_set || in mlxsw_afa_block_append_action_ext()
1033 mlxsw_afa_block_need_split(block, type)) { in mlxsw_afa_block_append_action_ext()
1042 set->prev = block->cur_set; in mlxsw_afa_block_append_action_ext()
1043 block->cur_act_index = 0; in mlxsw_afa_block_append_action_ext()
1044 block->cur_set->next = set; in mlxsw_afa_block_append_action_ext()
1045 block->cur_set = set; in mlxsw_afa_block_append_action_ext()
1050 block->cur_set->has_trap = true; in mlxsw_afa_block_append_action_ext()
1053 block->cur_set->has_police = true; in mlxsw_afa_block_append_action_ext()
1059 actions = block->cur_set->ht_key.enc_actions; in mlxsw_afa_block_append_action_ext()
1060 oneact = actions + block->cur_act_index * MLXSW_AFA_ONE_ACTION_LEN; in mlxsw_afa_block_append_action_ext()
1061 block->cur_act_index += action_size; in mlxsw_afa_block_append_action_ext()
1066 static char *mlxsw_afa_block_append_action(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_action() argument
1069 return mlxsw_afa_block_append_action_ext(block, action_code, in mlxsw_afa_block_append_action()
1140 int mlxsw_afa_block_append_vlan_modify(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_vlan_modify() argument
1144 char *act = mlxsw_afa_block_append_action(block, in mlxsw_afa_block_append_vlan_modify()
1252 static char *mlxsw_afa_block_append_action_trap(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_action_trap() argument
1255 return mlxsw_afa_block_append_action_ext(block, action_code, in mlxsw_afa_block_append_action_trap()
1260 static int mlxsw_afa_block_append_drop_plain(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_drop_plain() argument
1263 char *act = mlxsw_afa_block_append_action_trap(block, in mlxsw_afa_block_append_drop_plain()
1277 mlxsw_afa_block_append_drop_with_cookie(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_drop_with_cookie() argument
1287 cookie_ref = mlxsw_afa_cookie_ref_create(block, fa_cookie); in mlxsw_afa_block_append_drop_with_cookie()
1294 act = mlxsw_afa_block_append_action_trap(block, MLXSW_AFA_TRAPWU_CODE, in mlxsw_afa_block_append_drop_with_cookie()
1309 mlxsw_afa_cookie_ref_destroy(block, cookie_ref); in mlxsw_afa_block_append_drop_with_cookie()
1313 int mlxsw_afa_block_append_drop(struct mlxsw_afa_block *block, bool ingress, in mlxsw_afa_block_append_drop() argument
1318 mlxsw_afa_block_append_drop_with_cookie(block, ingress, in mlxsw_afa_block_append_drop()
1320 mlxsw_afa_block_append_drop_plain(block, ingress); in mlxsw_afa_block_append_drop()
1324 int mlxsw_afa_block_append_trap(struct mlxsw_afa_block *block, u16 trap_id) in mlxsw_afa_block_append_trap() argument
1326 char *act = mlxsw_afa_block_append_action_trap(block, in mlxsw_afa_block_append_trap()
1338 int mlxsw_afa_block_append_trap_and_forward(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_trap_and_forward() argument
1341 char *act = mlxsw_afa_block_append_action_trap(block, in mlxsw_afa_block_append_trap_and_forward()
1361 mlxsw_afa_mirror_destroy(struct mlxsw_afa_block *block, in mlxsw_afa_mirror_destroy() argument
1365 block->afa->ops->mirror_del(block->afa->ops_priv, in mlxsw_afa_mirror_destroy()
1373 mlxsw_afa_mirror_destructor(struct mlxsw_afa_block *block, in mlxsw_afa_mirror_destructor() argument
1379 mlxsw_afa_mirror_destroy(block, mirror); in mlxsw_afa_mirror_destructor()
1383 mlxsw_afa_mirror_create(struct mlxsw_afa_block *block, u16 local_in_port, in mlxsw_afa_mirror_create() argument
1393 err = block->afa->ops->mirror_add(block->afa->ops_priv, in mlxsw_afa_mirror_create()
1402 mlxsw_afa_resource_add(block, &mirror->resource); in mlxsw_afa_mirror_create()
1411 mlxsw_afa_block_append_allocated_mirror(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_allocated_mirror() argument
1414 char *act = mlxsw_afa_block_append_action_trap(block, in mlxsw_afa_block_append_allocated_mirror()
1427 mlxsw_afa_block_append_mirror(struct mlxsw_afa_block *block, u16 local_in_port, in mlxsw_afa_block_append_mirror() argument
1434 mirror = mlxsw_afa_mirror_create(block, local_in_port, out_dev, in mlxsw_afa_block_append_mirror()
1440 err = mlxsw_afa_block_append_allocated_mirror(block, mirror->span_id); in mlxsw_afa_block_append_mirror()
1449 mlxsw_afa_mirror_destroy(block, mirror); in mlxsw_afa_block_append_mirror()
1553 static int __mlxsw_afa_block_append_qos_dsfield(struct mlxsw_afa_block *block, in __mlxsw_afa_block_append_qos_dsfield() argument
1558 char *act = mlxsw_afa_block_append_action(block, in __mlxsw_afa_block_append_qos_dsfield()
1578 int mlxsw_afa_block_append_qos_dsfield(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_qos_dsfield() argument
1582 return __mlxsw_afa_block_append_qos_dsfield(block, in mlxsw_afa_block_append_qos_dsfield()
1589 int mlxsw_afa_block_append_qos_dscp(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_qos_dscp() argument
1592 return __mlxsw_afa_block_append_qos_dsfield(block, in mlxsw_afa_block_append_qos_dscp()
1599 int mlxsw_afa_block_append_qos_ecn(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_qos_ecn() argument
1602 return __mlxsw_afa_block_append_qos_dsfield(block, in mlxsw_afa_block_append_qos_ecn()
1609 int mlxsw_afa_block_append_qos_switch_prio(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_qos_switch_prio() argument
1613 char *act = mlxsw_afa_block_append_action(block, in mlxsw_afa_block_append_qos_switch_prio()
1666 int mlxsw_afa_block_append_fwd(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_fwd() argument
1679 fwd_entry_ref = mlxsw_afa_fwd_entry_ref_create(block, local_port); in mlxsw_afa_block_append_fwd()
1686 act = mlxsw_afa_block_append_action(block, MLXSW_AFA_FORWARD_CODE, in mlxsw_afa_block_append_fwd()
1698 mlxsw_afa_fwd_entry_ref_destroy(block, fwd_entry_ref); in mlxsw_afa_block_append_fwd()
1766 int mlxsw_afa_block_append_allocated_counter(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_allocated_counter() argument
1769 char *act = mlxsw_afa_block_append_action(block, MLXSW_AFA_POLCNT_CODE, in mlxsw_afa_block_append_allocated_counter()
1779 int mlxsw_afa_block_append_counter(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_counter() argument
1787 counter = mlxsw_afa_counter_create(block); in mlxsw_afa_block_append_counter()
1794 err = mlxsw_afa_block_append_allocated_counter(block, counter_index); in mlxsw_afa_block_append_counter()
1804 mlxsw_afa_counter_destroy(block, counter); in mlxsw_afa_block_append_counter()
1809 int mlxsw_afa_block_append_police(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_police() argument
1818 policer_ref = mlxsw_afa_policer_ref_create(block, fa_index, in mlxsw_afa_block_append_police()
1825 act = mlxsw_afa_block_append_action_ext(block, MLXSW_AFA_POLCNT_CODE, in mlxsw_afa_block_append_police()
1838 mlxsw_afa_policer_ref_destroy(block, policer_ref); in mlxsw_afa_block_append_police()
1875 int mlxsw_afa_block_append_fid_set(struct mlxsw_afa_block *block, u16 fid, in mlxsw_afa_block_append_fid_set() argument
1878 char *act = mlxsw_afa_block_append_action(block, in mlxsw_afa_block_append_fid_set()
1917 int mlxsw_afa_block_append_ignore(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_ignore() argument
1920 char *act = mlxsw_afa_block_append_action(block, MLXSW_AFA_IGNORE_CODE, in mlxsw_afa_block_append_ignore()
1986 int mlxsw_afa_block_append_mcrouter(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_mcrouter() argument
1990 char *act = mlxsw_afa_block_append_action(block, in mlxsw_afa_block_append_mcrouter()
2056 int mlxsw_afa_block_append_ip(struct mlxsw_afa_block *block, bool is_dip, in mlxsw_afa_block_append_ip() argument
2064 char *act = mlxsw_afa_block_append_action(block, in mlxsw_afa_block_append_ip()
2110 int mlxsw_afa_block_append_l4port(struct mlxsw_afa_block *block, bool is_dport, u16 l4_port, in mlxsw_afa_block_append_l4port() argument
2115 char *act = mlxsw_afa_block_append_action(block, in mlxsw_afa_block_append_l4port()
2163 static void mlxsw_afa_sampler_destroy(struct mlxsw_afa_block *block, in mlxsw_afa_sampler_destroy() argument
2167 block->afa->ops->sampler_del(block->afa->ops_priv, sampler->local_port, in mlxsw_afa_sampler_destroy()
2172 static void mlxsw_afa_sampler_destructor(struct mlxsw_afa_block *block, in mlxsw_afa_sampler_destructor() argument
2178 mlxsw_afa_sampler_destroy(block, sampler); in mlxsw_afa_sampler_destructor()
2182 mlxsw_afa_sampler_create(struct mlxsw_afa_block *block, u16 local_port, in mlxsw_afa_sampler_create() argument
2194 err = block->afa->ops->sampler_add(block->afa->ops_priv, local_port, in mlxsw_afa_sampler_create()
2204 mlxsw_afa_resource_add(block, &sampler->resource); in mlxsw_afa_sampler_create()
2213 mlxsw_afa_block_append_allocated_sampler(struct mlxsw_afa_block *block, in mlxsw_afa_block_append_allocated_sampler() argument
2216 char *act = mlxsw_afa_block_append_action(block, MLXSW_AFA_SAMPLER_CODE, in mlxsw_afa_block_append_allocated_sampler()
2225 int mlxsw_afa_block_append_sampler(struct mlxsw_afa_block *block, u16 local_port, in mlxsw_afa_block_append_sampler() argument
2239 sampler = mlxsw_afa_sampler_create(block, local_port, psample_group, in mlxsw_afa_block_append_sampler()
2245 err = mlxsw_afa_block_append_allocated_sampler(block, sampler->span_id, in mlxsw_afa_block_append_sampler()
2255 mlxsw_afa_sampler_destroy(block, sampler); in mlxsw_afa_block_append_sampler()