Lines Matching refs:erp
75 struct mlxsw_sp_acl_erp *erp);
83 struct mlxsw_sp_acl_erp *erp);
89 struct mlxsw_sp_acl_erp *erp);
95 struct mlxsw_sp_acl_erp *erp);
98 struct mlxsw_sp_acl_erp *erp);
128 mlxsw_sp_acl_erp_bank_get(const struct mlxsw_sp_acl_erp *erp)
130 return erp->index % erp->erp_table->erp_core->num_erp_banks;
254 struct mlxsw_sp_acl_erp *erp;
257 erp = kzalloc(sizeof(*erp), GFP_KERNEL);
258 if (!erp)
261 err = mlxsw_sp_acl_erp_id_get(erp_table, &erp->id);
265 memcpy(&erp->key, key, sizeof(*key));
266 list_add(&erp->list, &erp_table->atcam_erps_list);
268 erp->erp_table = erp_table;
270 err = mlxsw_sp_acl_erp_master_mask_set(erp_table, &erp->key);
274 return erp;
278 list_del(&erp->list);
279 mlxsw_sp_acl_erp_id_put(erp_table, erp->id);
281 kfree(erp);
286 mlxsw_sp_acl_erp_generic_destroy(struct mlxsw_sp_acl_erp *erp)
288 struct mlxsw_sp_acl_erp_table *erp_table = erp->erp_table;
290 mlxsw_sp_acl_erp_master_mask_clear(erp_table, &erp->key);
292 list_del(&erp->list);
293 mlxsw_sp_acl_erp_id_put(erp_table, erp->id);
294 kfree(erp);
372 const struct mlxsw_sp_acl_erp *erp,
379 *p_erpt_bank = erp->index % erp_core->num_erp_banks;
380 row = erp->index / erp_core->num_erp_banks;
386 struct mlxsw_sp_acl_erp *erp)
393 mlxsw_sp_acl_erp_table_locate(erp_table, erp, &erpt_bank, &erpt_index);
395 mlxsw_reg_perpt_pack(perpt_pl, erpt_bank, erpt_index, key_size, erp->id,
396 0, erp_table->base_index, erp->index,
397 erp->key.mask);
400 mlxsw_reg_perpt_erp_vector_set(perpt_pl, erp->index, true);
404 static void mlxsw_sp_acl_erp_table_erp_del(struct mlxsw_sp_acl_erp *erp)
407 struct mlxsw_sp_acl_erp_table *erp_table = erp->erp_table;
413 mlxsw_sp_acl_erp_table_locate(erp_table, erp, &erpt_bank, &erpt_index);
415 mlxsw_reg_perpt_pack(perpt_pl, erpt_bank, erpt_index, key_size, erp->id,
416 0, erp_table->base_index, erp->index, empty_mask);
419 mlxsw_reg_perpt_erp_vector_set(perpt_pl, erp->index, false);
460 struct mlxsw_sp_acl_erp *erp;
463 list_for_each_entry(erp, &erp_table->atcam_erps_list, list) {
464 err = mlxsw_sp_acl_erp_table_erp_add(erp_table, erp);
472 list_for_each_entry_continue_reverse(erp, &erp_table->atcam_erps_list,
474 mlxsw_sp_acl_erp_table_erp_del(erp);
526 struct mlxsw_sp_acl_erp *erp)
529 unsigned int erp_bank = mlxsw_sp_acl_erp_bank_get(erp);
554 struct mlxsw_sp_acl_erp *erp)
557 unsigned int erp_bank = mlxsw_sp_acl_erp_bank_get(erp);
647 struct mlxsw_sp_acl_erp *erp)
658 mlxsw_reg_pererp_erpt_vector_set(pererp_pl, erp->index, true);
663 static void mlxsw_sp_acl_erp_region_erp_del(struct mlxsw_sp_acl_erp *erp)
665 struct mlxsw_sp_acl_erp_table *erp_table = erp->erp_table;
675 mlxsw_reg_pererp_erpt_vector_set(pererp_pl, erp->index, false);
798 struct mlxsw_sp_acl_erp *erp;
801 erp = kzalloc(sizeof(*erp), GFP_KERNEL);
802 if (!erp)
805 memcpy(&erp->key, key, sizeof(*key));
806 bitmap_from_arr32(erp->mask_bitmap, (u32 *) key->mask,
813 erp->erp_table = erp_table;
815 err = mlxsw_sp_acl_erp_master_mask_set(erp_table, &erp->key);
823 return erp;
826 mlxsw_sp_acl_erp_master_mask_clear(erp_table, &erp->key);
830 kfree(erp);
835 mlxsw_sp_acl_erp_ctcam_mask_destroy(struct mlxsw_sp_acl_erp *erp)
837 struct mlxsw_sp_acl_erp_table *erp_table = erp->erp_table;
840 mlxsw_sp_acl_erp_master_mask_clear(erp_table, &erp->key);
842 kfree(erp);
849 struct mlxsw_sp_acl_erp *erp;
860 erp = mlxsw_sp_acl_erp_generic_create(erp_table, key);
861 if (IS_ERR(erp))
862 return erp;
864 err = mlxsw_sp_acl_erp_index_get(erp_table, &erp->index);
868 err = mlxsw_sp_acl_erp_table_erp_add(erp_table, erp);
872 err = mlxsw_sp_acl_erp_region_erp_add(erp_table, erp);
878 return erp;
881 mlxsw_sp_acl_erp_table_erp_del(erp);
883 mlxsw_sp_acl_erp_index_put(erp_table, erp->index);
885 mlxsw_sp_acl_erp_generic_destroy(erp);
891 struct mlxsw_sp_acl_erp *erp)
893 if (erp->key.ctcam)
894 return mlxsw_sp_acl_erp_ctcam_mask_destroy(erp);
896 mlxsw_sp_acl_erp_region_erp_del(erp);
897 mlxsw_sp_acl_erp_table_erp_del(erp);
898 mlxsw_sp_acl_erp_index_put(erp_table, erp->index);
899 mlxsw_sp_acl_erp_generic_destroy(erp);
910 struct mlxsw_sp_acl_erp *erp;
921 erp = mlxsw_sp_acl_erp_generic_create(erp_table, key);
922 if (IS_ERR(erp)) {
923 err = PTR_ERR(erp);
927 err = mlxsw_sp_acl_erp_index_get(erp_table, &erp->index);
931 err = mlxsw_sp_acl_erp_table_erp_add(erp_table, erp);
935 err = mlxsw_sp_acl_erp_region_erp_add(erp_table, erp);
941 return erp;
944 mlxsw_sp_acl_erp_table_erp_del(erp);
946 mlxsw_sp_acl_erp_index_put(erp_table, erp->index);
948 mlxsw_sp_acl_erp_generic_destroy(erp);
956 struct mlxsw_sp_acl_erp *erp)
958 if (erp->key.ctcam)
959 return mlxsw_sp_acl_erp_ctcam_mask_destroy(erp);
961 mlxsw_sp_acl_erp_region_erp_del(erp);
962 mlxsw_sp_acl_erp_table_erp_del(erp);
963 mlxsw_sp_acl_erp_index_put(erp_table, erp->index);
964 mlxsw_sp_acl_erp_generic_destroy(erp);
975 struct mlxsw_sp_acl_erp *erp;
980 erp = mlxsw_sp_acl_erp_generic_create(erp_table, key);
981 if (IS_ERR(erp))
982 return erp;
986 return erp;
991 struct mlxsw_sp_acl_erp *erp)
993 mlxsw_sp_acl_erp_generic_destroy(erp);
999 struct mlxsw_sp_acl_erp *erp)
1039 const struct mlxsw_sp_acl_erp *erp = objagg_obj_root_priv(objagg_obj);
1042 if (!mlxsw_sp_acl_erp_table_is_used(erp->erp_table))
1045 erp_bank = mlxsw_sp_acl_erp_bank_get(erp);
1047 erp->erp_table->erp_core->bf,
1057 const struct mlxsw_sp_acl_erp *erp = objagg_obj_root_priv(objagg_obj);
1060 if (!mlxsw_sp_acl_erp_table_is_used(erp->erp_table))
1063 erp_bank = mlxsw_sp_acl_erp_bank_get(erp);
1065 erp->erp_table->erp_core->bf,
1081 const struct mlxsw_sp_acl_erp *erp = objagg_obj_root_priv(objagg_obj);
1083 return erp->id;