Lines Matching refs:erp
77 struct mlxsw_sp_acl_erp *erp);
85 struct mlxsw_sp_acl_erp *erp);
91 struct mlxsw_sp_acl_erp *erp);
97 struct mlxsw_sp_acl_erp *erp);
100 struct mlxsw_sp_acl_erp *erp);
122 bool mlxsw_sp_acl_erp_is_ctcam_erp(const struct mlxsw_sp_acl_erp *erp) in mlxsw_sp_acl_erp_is_ctcam_erp() argument
124 return erp->key.ctcam; in mlxsw_sp_acl_erp_is_ctcam_erp()
127 u8 mlxsw_sp_acl_erp_id(const struct mlxsw_sp_acl_erp *erp) in mlxsw_sp_acl_erp_id() argument
129 return erp->id; in mlxsw_sp_acl_erp_id()
197 const struct mlxsw_sp_acl_erp *erp) in mlxsw_sp_acl_erp_master_mask_set() argument
202 for_each_set_bit(bit, erp->mask_bitmap, MLXSW_SP_ACL_TCAM_MASK_LEN) in mlxsw_sp_acl_erp_master_mask_set()
213 for_each_set_bit(bit, erp->mask_bitmap, MLXSW_SP_ACL_TCAM_MASK_LEN) in mlxsw_sp_acl_erp_master_mask_set()
221 const struct mlxsw_sp_acl_erp *erp) in mlxsw_sp_acl_erp_master_mask_clear() argument
226 for_each_set_bit(bit, erp->mask_bitmap, MLXSW_SP_ACL_TCAM_MASK_LEN) in mlxsw_sp_acl_erp_master_mask_clear()
237 for_each_set_bit(bit, erp->mask_bitmap, MLXSW_SP_ACL_TCAM_MASK_LEN) in mlxsw_sp_acl_erp_master_mask_clear()
247 struct mlxsw_sp_acl_erp *erp; in mlxsw_sp_acl_erp_generic_create() local
250 erp = kzalloc(sizeof(*erp), GFP_KERNEL); in mlxsw_sp_acl_erp_generic_create()
251 if (!erp) in mlxsw_sp_acl_erp_generic_create()
254 err = mlxsw_sp_acl_erp_id_get(erp_table, &erp->id); in mlxsw_sp_acl_erp_generic_create()
258 memcpy(&erp->key, key, sizeof(*key)); in mlxsw_sp_acl_erp_generic_create()
259 bitmap_from_arr32(erp->mask_bitmap, (u32 *) key->mask, in mlxsw_sp_acl_erp_generic_create()
261 list_add(&erp->list, &erp_table->atcam_erps_list); in mlxsw_sp_acl_erp_generic_create()
262 refcount_set(&erp->refcnt, 1); in mlxsw_sp_acl_erp_generic_create()
264 erp->erp_table = erp_table; in mlxsw_sp_acl_erp_generic_create()
266 err = mlxsw_sp_acl_erp_master_mask_set(erp_table, erp); in mlxsw_sp_acl_erp_generic_create()
270 err = rhashtable_insert_fast(&erp_table->erp_ht, &erp->ht_node, in mlxsw_sp_acl_erp_generic_create()
275 return erp; in mlxsw_sp_acl_erp_generic_create()
278 mlxsw_sp_acl_erp_master_mask_clear(erp_table, erp); in mlxsw_sp_acl_erp_generic_create()
281 list_del(&erp->list); in mlxsw_sp_acl_erp_generic_create()
282 mlxsw_sp_acl_erp_id_put(erp_table, erp->id); in mlxsw_sp_acl_erp_generic_create()
284 kfree(erp); in mlxsw_sp_acl_erp_generic_create()
289 mlxsw_sp_acl_erp_generic_destroy(struct mlxsw_sp_acl_erp *erp) in mlxsw_sp_acl_erp_generic_destroy() argument
291 struct mlxsw_sp_acl_erp_table *erp_table = erp->erp_table; in mlxsw_sp_acl_erp_generic_destroy()
293 rhashtable_remove_fast(&erp_table->erp_ht, &erp->ht_node, in mlxsw_sp_acl_erp_generic_destroy()
295 mlxsw_sp_acl_erp_master_mask_clear(erp_table, erp); in mlxsw_sp_acl_erp_generic_destroy()
297 list_del(&erp->list); in mlxsw_sp_acl_erp_generic_destroy()
298 mlxsw_sp_acl_erp_id_put(erp_table, erp->id); in mlxsw_sp_acl_erp_generic_destroy()
299 kfree(erp); in mlxsw_sp_acl_erp_generic_destroy()
375 const struct mlxsw_sp_acl_erp *erp, in mlxsw_sp_acl_erp_table_locate() argument
382 *p_erpt_bank = erp->index % erp_core->num_erp_banks; in mlxsw_sp_acl_erp_table_locate()
383 row = erp->index / erp_core->num_erp_banks; in mlxsw_sp_acl_erp_table_locate()
389 struct mlxsw_sp_acl_erp *erp) in mlxsw_sp_acl_erp_table_erp_add() argument
396 mlxsw_sp_acl_erp_table_locate(erp_table, erp, &erpt_bank, &erpt_index); in mlxsw_sp_acl_erp_table_erp_add()
398 mlxsw_reg_perpt_pack(perpt_pl, erpt_bank, erpt_index, key_size, erp->id, in mlxsw_sp_acl_erp_table_erp_add()
399 0, erp_table->base_index, erp->index, in mlxsw_sp_acl_erp_table_erp_add()
400 erp->key.mask); in mlxsw_sp_acl_erp_table_erp_add()
403 mlxsw_reg_perpt_erp_vector_set(perpt_pl, erp->index, true); in mlxsw_sp_acl_erp_table_erp_add()
407 static void mlxsw_sp_acl_erp_table_erp_del(struct mlxsw_sp_acl_erp *erp) in mlxsw_sp_acl_erp_table_erp_del() argument
410 struct mlxsw_sp_acl_erp_table *erp_table = erp->erp_table; in mlxsw_sp_acl_erp_table_erp_del()
416 mlxsw_sp_acl_erp_table_locate(erp_table, erp, &erpt_bank, &erpt_index); in mlxsw_sp_acl_erp_table_erp_del()
418 mlxsw_reg_perpt_pack(perpt_pl, erpt_bank, erpt_index, key_size, erp->id, in mlxsw_sp_acl_erp_table_erp_del()
419 0, erp_table->base_index, erp->index, empty_mask); in mlxsw_sp_acl_erp_table_erp_del()
422 mlxsw_reg_perpt_erp_vector_set(perpt_pl, erp->index, false); in mlxsw_sp_acl_erp_table_erp_del()
463 struct mlxsw_sp_acl_erp *erp; in mlxsw_sp_acl_erp_table_relocate() local
466 list_for_each_entry(erp, &erp_table->atcam_erps_list, list) { in mlxsw_sp_acl_erp_table_relocate()
467 err = mlxsw_sp_acl_erp_table_erp_add(erp_table, erp); in mlxsw_sp_acl_erp_table_relocate()
475 list_for_each_entry_continue_reverse(erp, &erp_table->atcam_erps_list, in mlxsw_sp_acl_erp_table_relocate()
477 mlxsw_sp_acl_erp_table_erp_del(erp); in mlxsw_sp_acl_erp_table_relocate()
597 struct mlxsw_sp_acl_erp *erp) in mlxsw_sp_acl_erp_region_erp_add() argument
608 mlxsw_reg_pererp_erpt_vector_set(pererp_pl, erp->index, true); in mlxsw_sp_acl_erp_region_erp_add()
613 static void mlxsw_sp_acl_erp_region_erp_del(struct mlxsw_sp_acl_erp *erp) in mlxsw_sp_acl_erp_region_erp_del() argument
615 struct mlxsw_sp_acl_erp_table *erp_table = erp->erp_table; in mlxsw_sp_acl_erp_region_erp_del()
625 mlxsw_reg_pererp_erpt_vector_set(pererp_pl, erp->index, false); in mlxsw_sp_acl_erp_region_erp_del()
690 struct mlxsw_sp_acl_erp *erp; in __mlxsw_sp_acl_erp_ctcam_mask_create() local
693 erp = kzalloc(sizeof(*erp), GFP_KERNEL); in __mlxsw_sp_acl_erp_ctcam_mask_create()
694 if (!erp) in __mlxsw_sp_acl_erp_ctcam_mask_create()
697 memcpy(&erp->key, key, sizeof(*key)); in __mlxsw_sp_acl_erp_ctcam_mask_create()
698 bitmap_from_arr32(erp->mask_bitmap, (u32 *) key->mask, in __mlxsw_sp_acl_erp_ctcam_mask_create()
700 refcount_set(&erp->refcnt, 1); in __mlxsw_sp_acl_erp_ctcam_mask_create()
702 erp->erp_table = erp_table; in __mlxsw_sp_acl_erp_ctcam_mask_create()
704 err = mlxsw_sp_acl_erp_master_mask_set(erp_table, erp); in __mlxsw_sp_acl_erp_ctcam_mask_create()
708 err = rhashtable_insert_fast(&erp_table->erp_ht, &erp->ht_node, in __mlxsw_sp_acl_erp_ctcam_mask_create()
720 return erp; in __mlxsw_sp_acl_erp_ctcam_mask_create()
723 rhashtable_remove_fast(&erp_table->erp_ht, &erp->ht_node, in __mlxsw_sp_acl_erp_ctcam_mask_create()
726 mlxsw_sp_acl_erp_master_mask_clear(erp_table, erp); in __mlxsw_sp_acl_erp_ctcam_mask_create()
729 kfree(erp); in __mlxsw_sp_acl_erp_ctcam_mask_create()
737 struct mlxsw_sp_acl_erp *erp; in mlxsw_sp_acl_erp_ctcam_mask_create() local
751 erp = __mlxsw_sp_acl_erp_ctcam_mask_create(erp_table, key); in mlxsw_sp_acl_erp_ctcam_mask_create()
752 if (IS_ERR(erp)) { in mlxsw_sp_acl_erp_ctcam_mask_create()
753 err = PTR_ERR(erp); in mlxsw_sp_acl_erp_ctcam_mask_create()
757 return erp; in mlxsw_sp_acl_erp_ctcam_mask_create()
765 mlxsw_sp_acl_erp_ctcam_mask_destroy(struct mlxsw_sp_acl_erp *erp) in mlxsw_sp_acl_erp_ctcam_mask_destroy() argument
767 struct mlxsw_sp_acl_erp_table *erp_table = erp->erp_table; in mlxsw_sp_acl_erp_ctcam_mask_destroy()
770 rhashtable_remove_fast(&erp_table->erp_ht, &erp->ht_node, in mlxsw_sp_acl_erp_ctcam_mask_destroy()
772 mlxsw_sp_acl_erp_master_mask_clear(erp_table, erp); in mlxsw_sp_acl_erp_ctcam_mask_destroy()
774 kfree(erp); in mlxsw_sp_acl_erp_ctcam_mask_destroy()
789 struct mlxsw_sp_acl_erp *erp; in mlxsw_sp_acl_erp_mask_create() local
800 erp = mlxsw_sp_acl_erp_generic_create(erp_table, key); in mlxsw_sp_acl_erp_mask_create()
801 if (IS_ERR(erp)) in mlxsw_sp_acl_erp_mask_create()
802 return erp; in mlxsw_sp_acl_erp_mask_create()
804 err = mlxsw_sp_acl_erp_index_get(erp_table, &erp->index); in mlxsw_sp_acl_erp_mask_create()
808 err = mlxsw_sp_acl_erp_table_erp_add(erp_table, erp); in mlxsw_sp_acl_erp_mask_create()
812 err = mlxsw_sp_acl_erp_region_erp_add(erp_table, erp); in mlxsw_sp_acl_erp_mask_create()
818 return erp; in mlxsw_sp_acl_erp_mask_create()
821 mlxsw_sp_acl_erp_table_erp_del(erp); in mlxsw_sp_acl_erp_mask_create()
823 mlxsw_sp_acl_erp_index_put(erp_table, erp->index); in mlxsw_sp_acl_erp_mask_create()
825 mlxsw_sp_acl_erp_generic_destroy(erp); in mlxsw_sp_acl_erp_mask_create()
831 struct mlxsw_sp_acl_erp *erp) in mlxsw_sp_acl_erp_mask_destroy() argument
833 if (erp->key.ctcam) in mlxsw_sp_acl_erp_mask_destroy()
834 return mlxsw_sp_acl_erp_ctcam_mask_destroy(erp); in mlxsw_sp_acl_erp_mask_destroy()
836 mlxsw_sp_acl_erp_region_erp_del(erp); in mlxsw_sp_acl_erp_mask_destroy()
837 mlxsw_sp_acl_erp_table_erp_del(erp); in mlxsw_sp_acl_erp_mask_destroy()
838 mlxsw_sp_acl_erp_index_put(erp_table, erp->index); in mlxsw_sp_acl_erp_mask_destroy()
839 mlxsw_sp_acl_erp_generic_destroy(erp); in mlxsw_sp_acl_erp_mask_destroy()
849 struct mlxsw_sp_acl_erp *erp; in mlxsw_sp_acl_erp_second_mask_create() local
860 erp = mlxsw_sp_acl_erp_generic_create(erp_table, key); in mlxsw_sp_acl_erp_second_mask_create()
861 if (IS_ERR(erp)) { in mlxsw_sp_acl_erp_second_mask_create()
862 err = PTR_ERR(erp); in mlxsw_sp_acl_erp_second_mask_create()
866 err = mlxsw_sp_acl_erp_index_get(erp_table, &erp->index); in mlxsw_sp_acl_erp_second_mask_create()
870 err = mlxsw_sp_acl_erp_table_erp_add(erp_table, erp); in mlxsw_sp_acl_erp_second_mask_create()
874 err = mlxsw_sp_acl_erp_region_erp_add(erp_table, erp); in mlxsw_sp_acl_erp_second_mask_create()
880 return erp; in mlxsw_sp_acl_erp_second_mask_create()
883 mlxsw_sp_acl_erp_table_erp_del(erp); in mlxsw_sp_acl_erp_second_mask_create()
885 mlxsw_sp_acl_erp_index_put(erp_table, erp->index); in mlxsw_sp_acl_erp_second_mask_create()
887 mlxsw_sp_acl_erp_generic_destroy(erp); in mlxsw_sp_acl_erp_second_mask_create()
895 struct mlxsw_sp_acl_erp *erp) in mlxsw_sp_acl_erp_second_mask_destroy() argument
897 if (erp->key.ctcam) in mlxsw_sp_acl_erp_second_mask_destroy()
898 return mlxsw_sp_acl_erp_ctcam_mask_destroy(erp); in mlxsw_sp_acl_erp_second_mask_destroy()
900 mlxsw_sp_acl_erp_region_erp_del(erp); in mlxsw_sp_acl_erp_second_mask_destroy()
901 mlxsw_sp_acl_erp_table_erp_del(erp); in mlxsw_sp_acl_erp_second_mask_destroy()
902 mlxsw_sp_acl_erp_index_put(erp_table, erp->index); in mlxsw_sp_acl_erp_second_mask_destroy()
903 mlxsw_sp_acl_erp_generic_destroy(erp); in mlxsw_sp_acl_erp_second_mask_destroy()
914 struct mlxsw_sp_acl_erp *erp; in mlxsw_sp_acl_erp_first_mask_create() local
919 erp = mlxsw_sp_acl_erp_generic_create(erp_table, key); in mlxsw_sp_acl_erp_first_mask_create()
920 if (IS_ERR(erp)) in mlxsw_sp_acl_erp_first_mask_create()
921 return erp; in mlxsw_sp_acl_erp_first_mask_create()
925 return erp; in mlxsw_sp_acl_erp_first_mask_create()
930 struct mlxsw_sp_acl_erp *erp) in mlxsw_sp_acl_erp_first_mask_destroy() argument
932 mlxsw_sp_acl_erp_generic_destroy(erp); in mlxsw_sp_acl_erp_first_mask_destroy()
938 struct mlxsw_sp_acl_erp *erp) in mlxsw_sp_acl_erp_no_mask_destroy() argument
949 struct mlxsw_sp_acl_erp *erp; in mlxsw_sp_acl_erp_get() local
958 erp = rhashtable_lookup_fast(&erp_table->erp_ht, &key, in mlxsw_sp_acl_erp_get()
960 if (erp) { in mlxsw_sp_acl_erp_get()
961 refcount_inc(&erp->refcnt); in mlxsw_sp_acl_erp_get()
962 return erp; in mlxsw_sp_acl_erp_get()
969 struct mlxsw_sp_acl_erp *erp) in mlxsw_sp_acl_erp_put() argument
975 if (!refcount_dec_and_test(&erp->refcnt)) in mlxsw_sp_acl_erp_put()
978 erp_table->ops->erp_destroy(erp_table, erp); in mlxsw_sp_acl_erp_put()