mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 00:53:34 +02:00
mlxsw: Add operations structure for bloom filter calculation
Spectrum-4 will calculate hash function for bloom filter differently from the existing ASICs. There are two changes: 1. Instead of using one hash function to calculate 16 bits output (CRC-16), two functions will be used. 2. The chunks will be built differently, without padding. As preparation for support of Spectrum-4 bloom filter, add 'ops' structure to allow handling different calculation for different ASICs. Signed-off-by: Amit Cohen <amcohen@nvidia.com> Reviewed-by: Petr Machata <petrm@nvidia.com> Signed-off-by: Ido Schimmel <idosch@nvidia.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
29409f363e
commit
58723d2f77
|
|
@ -3155,6 +3155,7 @@ static int mlxsw_sp2_init(struct mlxsw_core *mlxsw_core,
|
|||
mlxsw_sp->mr_tcam_ops = &mlxsw_sp2_mr_tcam_ops;
|
||||
mlxsw_sp->acl_rulei_ops = &mlxsw_sp2_acl_rulei_ops;
|
||||
mlxsw_sp->acl_tcam_ops = &mlxsw_sp2_acl_tcam_ops;
|
||||
mlxsw_sp->acl_bf_ops = &mlxsw_sp2_acl_bf_ops;
|
||||
mlxsw_sp->nve_ops_arr = mlxsw_sp2_nve_ops_arr;
|
||||
mlxsw_sp->mac_mask = mlxsw_sp2_mac_mask;
|
||||
mlxsw_sp->sb_vals = &mlxsw_sp2_sb_vals;
|
||||
|
|
@ -3184,6 +3185,7 @@ static int mlxsw_sp3_init(struct mlxsw_core *mlxsw_core,
|
|||
mlxsw_sp->mr_tcam_ops = &mlxsw_sp2_mr_tcam_ops;
|
||||
mlxsw_sp->acl_rulei_ops = &mlxsw_sp2_acl_rulei_ops;
|
||||
mlxsw_sp->acl_tcam_ops = &mlxsw_sp2_acl_tcam_ops;
|
||||
mlxsw_sp->acl_bf_ops = &mlxsw_sp2_acl_bf_ops;
|
||||
mlxsw_sp->nve_ops_arr = mlxsw_sp2_nve_ops_arr;
|
||||
mlxsw_sp->mac_mask = mlxsw_sp2_mac_mask;
|
||||
mlxsw_sp->sb_vals = &mlxsw_sp2_sb_vals;
|
||||
|
|
|
|||
|
|
@ -190,6 +190,7 @@ struct mlxsw_sp {
|
|||
const struct mlxsw_sp_mr_tcam_ops *mr_tcam_ops;
|
||||
const struct mlxsw_sp_acl_rulei_ops *acl_rulei_ops;
|
||||
const struct mlxsw_sp_acl_tcam_ops *acl_tcam_ops;
|
||||
const struct mlxsw_sp_acl_bf_ops *acl_bf_ops;
|
||||
const struct mlxsw_sp_nve_ops **nve_ops_arr;
|
||||
const struct mlxsw_sp_sb_vals *sb_vals;
|
||||
const struct mlxsw_sp_sb_ops *sb_ops;
|
||||
|
|
@ -1108,6 +1109,9 @@ extern const struct mlxsw_afk_ops mlxsw_sp1_afk_ops;
|
|||
extern const struct mlxsw_afk_ops mlxsw_sp2_afk_ops;
|
||||
extern const struct mlxsw_afk_ops mlxsw_sp4_afk_ops;
|
||||
|
||||
/* spectrum_acl_bloom_filter.c */
|
||||
extern const struct mlxsw_sp_acl_bf_ops mlxsw_sp2_acl_bf_ops;
|
||||
|
||||
/* spectrum_matchall.c */
|
||||
struct mlxsw_sp_mall_ops {
|
||||
int (*sample_add)(struct mlxsw_sp *mlxsw_sp,
|
||||
|
|
|
|||
|
|
@ -190,7 +190,7 @@ mlxsw_sp_acl_bf_entry_add(struct mlxsw_sp *mlxsw_sp,
|
|||
|
||||
mutex_lock(&bf->lock);
|
||||
|
||||
bf_index = mlxsw_sp2_acl_bf_index_get(bf, aregion, aentry);
|
||||
bf_index = mlxsw_sp->acl_bf_ops->index_get(bf, aregion, aentry);
|
||||
rule_index = mlxsw_sp_acl_bf_rule_count_index_get(bf, erp_bank,
|
||||
bf_index);
|
||||
|
||||
|
|
@ -233,7 +233,7 @@ mlxsw_sp_acl_bf_entry_del(struct mlxsw_sp *mlxsw_sp,
|
|||
|
||||
mutex_lock(&bf->lock);
|
||||
|
||||
bf_index = mlxsw_sp2_acl_bf_index_get(bf, aregion, aentry);
|
||||
bf_index = mlxsw_sp->acl_bf_ops->index_get(bf, aregion, aentry);
|
||||
rule_index = mlxsw_sp_acl_bf_rule_count_index_get(bf, erp_bank,
|
||||
bf_index);
|
||||
|
||||
|
|
@ -281,3 +281,7 @@ void mlxsw_sp_acl_bf_fini(struct mlxsw_sp_acl_bf *bf)
|
|||
mutex_destroy(&bf->lock);
|
||||
kfree(bf);
|
||||
}
|
||||
|
||||
const struct mlxsw_sp_acl_bf_ops mlxsw_sp2_acl_bf_ops = {
|
||||
.index_get = mlxsw_sp2_acl_bf_index_get,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -287,6 +287,12 @@ void mlxsw_sp_acl_erps_fini(struct mlxsw_sp *mlxsw_sp,
|
|||
|
||||
struct mlxsw_sp_acl_bf;
|
||||
|
||||
struct mlxsw_sp_acl_bf_ops {
|
||||
unsigned int (*index_get)(struct mlxsw_sp_acl_bf *bf,
|
||||
struct mlxsw_sp_acl_atcam_region *aregion,
|
||||
struct mlxsw_sp_acl_atcam_entry *aentry);
|
||||
};
|
||||
|
||||
int
|
||||
mlxsw_sp_acl_bf_entry_add(struct mlxsw_sp *mlxsw_sp,
|
||||
struct mlxsw_sp_acl_bf *bf,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user