.. | .. |
---|
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 | +} |
---|