| .. | .. |
|---|
| 46 | 46 | struct mlxsw_sp_acl_tcam_region *region = cregion->region; |
|---|
| 47 | 47 | struct mlxsw_afk *afk = mlxsw_sp_acl_afk(mlxsw_sp->acl); |
|---|
| 48 | 48 | char ptce2_pl[MLXSW_REG_PTCE2_LEN]; |
|---|
| 49 | | - unsigned int blocks_count; |
|---|
| 50 | 49 | char *act_set; |
|---|
| 51 | 50 | u32 priority; |
|---|
| 52 | 51 | char *mask; |
|---|
| .. | .. |
|---|
| 63 | 62 | centry->parman_item.index, priority); |
|---|
| 64 | 63 | key = mlxsw_reg_ptce2_flex_key_blocks_data(ptce2_pl); |
|---|
| 65 | 64 | mask = mlxsw_reg_ptce2_mask_data(ptce2_pl); |
|---|
| 66 | | - blocks_count = mlxsw_afk_key_info_blocks_count_get(region->key_info); |
|---|
| 67 | | - mlxsw_afk_encode(afk, region->key_info, &rulei->values, key, mask, 0, |
|---|
| 68 | | - blocks_count - 1); |
|---|
| 65 | + mlxsw_afk_encode(afk, region->key_info, &rulei->values, key, mask); |
|---|
| 69 | 66 | |
|---|
| 70 | 67 | err = cregion->ops->entry_insert(cregion, centry, mask); |
|---|
| 71 | 68 | if (err) |
|---|
| .. | .. |
|---|
| 99 | 96 | mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(ptce2), ptce2_pl); |
|---|
| 100 | 97 | cregion->ops->entry_remove(cregion, centry); |
|---|
| 101 | 98 | } |
|---|
| 99 | + |
|---|
| 100 | +static int |
|---|
| 101 | +mlxsw_sp_acl_ctcam_region_entry_action_replace(struct mlxsw_sp *mlxsw_sp, |
|---|
| 102 | + struct mlxsw_sp_acl_ctcam_region *cregion, |
|---|
| 103 | + struct mlxsw_sp_acl_ctcam_entry *centry, |
|---|
| 104 | + struct mlxsw_afa_block *afa_block, |
|---|
| 105 | + unsigned int priority) |
|---|
| 106 | +{ |
|---|
| 107 | + char ptce2_pl[MLXSW_REG_PTCE2_LEN]; |
|---|
| 108 | + char *act_set; |
|---|
| 109 | + |
|---|
| 110 | + mlxsw_reg_ptce2_pack(ptce2_pl, true, MLXSW_REG_PTCE2_OP_WRITE_UPDATE, |
|---|
| 111 | + cregion->region->tcam_region_info, |
|---|
| 112 | + centry->parman_item.index, priority); |
|---|
| 113 | + |
|---|
| 114 | + act_set = mlxsw_afa_block_first_set(afa_block); |
|---|
| 115 | + mlxsw_reg_ptce2_flex_action_set_memcpy_to(ptce2_pl, act_set); |
|---|
| 116 | + |
|---|
| 117 | + return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(ptce2), ptce2_pl); |
|---|
| 118 | +} |
|---|
| 119 | + |
|---|
| 102 | 120 | |
|---|
| 103 | 121 | static int mlxsw_sp_acl_ctcam_region_parman_resize(void *priv, |
|---|
| 104 | 122 | unsigned long new_count) |
|---|
| .. | .. |
|---|
| 202 | 220 | parman_item_remove(cregion->parman, &cchunk->parman_prio, |
|---|
| 203 | 221 | ¢ry->parman_item); |
|---|
| 204 | 222 | } |
|---|
| 223 | + |
|---|
| 224 | +int mlxsw_sp_acl_ctcam_entry_action_replace(struct mlxsw_sp *mlxsw_sp, |
|---|
| 225 | + struct mlxsw_sp_acl_ctcam_region *cregion, |
|---|
| 226 | + struct mlxsw_sp_acl_ctcam_entry *centry, |
|---|
| 227 | + struct mlxsw_sp_acl_rule_info *rulei) |
|---|
| 228 | +{ |
|---|
| 229 | + return mlxsw_sp_acl_ctcam_region_entry_action_replace(mlxsw_sp, cregion, |
|---|
| 230 | + centry, |
|---|
| 231 | + rulei->act_block, |
|---|
| 232 | + rulei->priority); |
|---|
| 233 | +} |
|---|