rte_spinlock_unlock(&tbl->sl);
return ret;
}
-
-int32_t
-mlx5_l3t_prepare_entry(struct mlx5_l3t_tbl *tbl, uint32_t idx,
- union mlx5_l3t_data *data,
- mlx5_l3t_alloc_callback_fn cb, void *ctx)
-{
- int32_t ret;
-
- rte_spinlock_lock(&tbl->sl);
- /* Check if entry data is ready. */
- ret = __l3t_get_entry(tbl, idx, data);
- if (!ret) {
- switch (tbl->type) {
- case MLX5_L3T_TYPE_WORD:
- if (data->word)
- goto out;
- break;
- case MLX5_L3T_TYPE_DWORD:
- if (data->dword)
- goto out;
- break;
- case MLX5_L3T_TYPE_QWORD:
- if (data->qword)
- goto out;
- break;
- default:
- if (data->ptr)
- goto out;
- break;
- }
- }
- /* Entry data is not ready, use user callback to create it. */
- ret = cb(ctx, data);
- if (ret)
- goto out;
- /* Save the new allocated data to entry. */
- ret = __l3t_set_entry(tbl, idx, data);
-out:
- rte_spinlock_unlock(&tbl->sl);
- return ret;
-}
int32_t mlx5_l3t_get_entry(struct mlx5_l3t_tbl *tbl, uint32_t idx,
union mlx5_l3t_data *data);
-/**
- * This function gets the index entry from Three-level table.
- *
- * If the index entry is not available, allocate new one by callback
- * function and fill in the entry.
- *
- * @param tbl
- * Pointer to the l3t.
- * @param idx
- * Index to the entry.
- * @param data
- * Pointer to the memory which saves the entry data.
- * When function call returns 0, data contains the entry data get from
- * l3t.
- * When function call returns -1, data is not modified.
- * @param cb
- * Callback function to allocate new data.
- * @param ctx
- * Context for callback function.
- *
- * @return
- * 0 if success, -1 on error.
- */
-
-int32_t mlx5_l3t_prepare_entry(struct mlx5_l3t_tbl *tbl, uint32_t idx,
- union mlx5_l3t_data *data,
- mlx5_l3t_alloc_callback_fn cb, void *ctx);
-
/**
* This function decreases and clear index entry if reference
* counter is 0 from Three-level table.