mlxsw_afa
struct mlxsw_afa *mlxsw_afa_create(unsigned int max_acts_per_set,
struct mlxsw_afa *mlxsw_afa;
mlxsw_afa = kzalloc_obj(*mlxsw_afa);
if (!mlxsw_afa)
err = rhashtable_init(&mlxsw_afa->set_ht, &mlxsw_afa_set_ht_params);
err = rhashtable_init(&mlxsw_afa->fwd_entry_ht,
err = rhashtable_init(&mlxsw_afa->cookie_ht,
err = rhashtable_init(&mlxsw_afa->policer_ht,
idr_init(&mlxsw_afa->cookie_idr);
INIT_LIST_HEAD(&mlxsw_afa->policer_list);
mlxsw_afa->max_acts_per_set = max_acts_per_set;
mlxsw_afa->ops = ops;
mlxsw_afa->ops_priv = ops_priv;
return mlxsw_afa;
rhashtable_destroy(&mlxsw_afa->cookie_ht);
rhashtable_destroy(&mlxsw_afa->fwd_entry_ht);
rhashtable_destroy(&mlxsw_afa->set_ht);
kfree(mlxsw_afa);
void mlxsw_afa_destroy(struct mlxsw_afa *mlxsw_afa)
WARN_ON(!list_empty(&mlxsw_afa->policer_list));
WARN_ON(!idr_is_empty(&mlxsw_afa->cookie_idr));
idr_destroy(&mlxsw_afa->cookie_idr);
rhashtable_destroy(&mlxsw_afa->policer_ht);
rhashtable_destroy(&mlxsw_afa->cookie_ht);
rhashtable_destroy(&mlxsw_afa->fwd_entry_ht);
rhashtable_destroy(&mlxsw_afa->set_ht);
kfree(mlxsw_afa);
static int mlxsw_afa_set_share(struct mlxsw_afa *mlxsw_afa,
err = rhashtable_insert_fast(&mlxsw_afa->set_ht, &set->ht_node,
err = mlxsw_afa->ops->kvdl_set_add(mlxsw_afa->ops_priv,
rhashtable_remove_fast(&mlxsw_afa->set_ht, &set->ht_node,
static void mlxsw_afa_set_unshare(struct mlxsw_afa *mlxsw_afa,
mlxsw_afa->ops->kvdl_set_del(mlxsw_afa->ops_priv,
rhashtable_remove_fast(&mlxsw_afa->set_ht, &set->ht_node,
static void mlxsw_afa_set_put(struct mlxsw_afa *mlxsw_afa,
mlxsw_afa_set_unshare(mlxsw_afa, set);
static struct mlxsw_afa_set *mlxsw_afa_set_get(struct mlxsw_afa *mlxsw_afa,
set = rhashtable_lookup_fast(&mlxsw_afa->set_ht, &orig_set->ht_key,
mlxsw_afa_set_put(mlxsw_afa, orig_set);
err = mlxsw_afa_set_share(mlxsw_afa, set);
struct mlxsw_afa *afa;
struct mlxsw_afa_block *mlxsw_afa_block_create(struct mlxsw_afa *mlxsw_afa)
block->afa = mlxsw_afa;
if (mlxsw_afa->ops->dummy_first_set) {
mlxsw_afa_fwd_entry_create(struct mlxsw_afa *mlxsw_afa, u16 local_port)
err = rhashtable_insert_fast(&mlxsw_afa->fwd_entry_ht,
err = mlxsw_afa->ops->kvdl_fwd_entry_add(mlxsw_afa->ops_priv,
rhashtable_remove_fast(&mlxsw_afa->fwd_entry_ht, &fwd_entry->ht_node,
static void mlxsw_afa_fwd_entry_destroy(struct mlxsw_afa *mlxsw_afa,
mlxsw_afa->ops->kvdl_fwd_entry_del(mlxsw_afa->ops_priv,
rhashtable_remove_fast(&mlxsw_afa->fwd_entry_ht, &fwd_entry->ht_node,
mlxsw_afa_fwd_entry_get(struct mlxsw_afa *mlxsw_afa, u16 local_port)
fwd_entry = rhashtable_lookup_fast(&mlxsw_afa->fwd_entry_ht, &ht_key,
return mlxsw_afa_fwd_entry_create(mlxsw_afa, local_port);
static void mlxsw_afa_fwd_entry_put(struct mlxsw_afa *mlxsw_afa,
mlxsw_afa_fwd_entry_destroy(mlxsw_afa, fwd_entry);
mlxsw_afa_cookie_create(struct mlxsw_afa *mlxsw_afa,
err = rhashtable_insert_fast(&mlxsw_afa->cookie_ht, &cookie->ht_node,
err = idr_alloc_u32(&mlxsw_afa->cookie_idr, cookie, &cookie_index,
rhashtable_remove_fast(&mlxsw_afa->cookie_ht, &cookie->ht_node,
static void mlxsw_afa_cookie_destroy(struct mlxsw_afa *mlxsw_afa,
idr_remove(&mlxsw_afa->cookie_idr, cookie->cookie_index);
rhashtable_remove_fast(&mlxsw_afa->cookie_ht, &cookie->ht_node,
mlxsw_afa_cookie_get(struct mlxsw_afa *mlxsw_afa,
cookie = rhashtable_lookup_fast(&mlxsw_afa->cookie_ht, fa_cookie,
return mlxsw_afa_cookie_create(mlxsw_afa, fa_cookie);
static void mlxsw_afa_cookie_put(struct mlxsw_afa *mlxsw_afa,
mlxsw_afa_cookie_destroy(mlxsw_afa, cookie);
mlxsw_afa_cookie_lookup(struct mlxsw_afa *mlxsw_afa, u32 cookie_index)
cookie = idr_find(&mlxsw_afa->cookie_idr, cookie_index);
mlxsw_afa_policer_create(struct mlxsw_afa *mlxsw_afa, u32 fa_index,
err = mlxsw_afa->ops->policer_add(mlxsw_afa->ops_priv, rate_bytes_ps,
err = rhashtable_insert_fast(&mlxsw_afa->policer_ht, &policer->ht_node,
list_add_tail(&policer->list, &mlxsw_afa->policer_list);
mlxsw_afa->ops->policer_del(mlxsw_afa->ops_priv,
static void mlxsw_afa_policer_destroy(struct mlxsw_afa *mlxsw_afa,
rhashtable_remove_fast(&mlxsw_afa->policer_ht, &policer->ht_node,
mlxsw_afa->ops->policer_del(mlxsw_afa->ops_priv,
mlxsw_afa_policer_get(struct mlxsw_afa *mlxsw_afa, u32 fa_index,
policer = rhashtable_lookup_fast(&mlxsw_afa->policer_ht, &fa_index,
return mlxsw_afa_policer_create(mlxsw_afa, fa_index, rate_bytes_ps,
static void mlxsw_afa_policer_put(struct mlxsw_afa *mlxsw_afa,
mlxsw_afa_policer_destroy(mlxsw_afa, policer);
struct mlxsw_afa;
struct mlxsw_afa *mlxsw_afa_create(unsigned int max_acts_per_set,
void mlxsw_afa_destroy(struct mlxsw_afa *mlxsw_afa);
struct mlxsw_afa_block *mlxsw_afa_block_create(struct mlxsw_afa *mlxsw_afa);
mlxsw_afa_cookie_lookup(struct mlxsw_afa *mlxsw_afa, u32 cookie_index);
struct mlxsw_afa *afa;