/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
/* Copyright (c) 2021 Mellanox Technologies. */

#ifndef __MLX5_ESW_FT_H__
#define __MLX5_ESW_FT_H__

#ifdef CONFIG_MLX5_CLS_ACT

struct mlx5_esw_indir_table *
mlx5_esw_indir_table_init(void);
void
mlx5_esw_indir_table_destroy(struct mlx5_esw_indir_table *indir);

struct mlx5_flow_table *mlx5_esw_indir_table_get(struct mlx5_eswitch *esw,
						 struct mlx5_flow_attr *attr,
						 struct mlx5_flow_spec *spec,
						 u16 vport, bool decap);
void mlx5_esw_indir_table_put(struct mlx5_eswitch *esw,
			      struct mlx5_flow_attr *attr,
			      u16 vport, bool decap);

bool
mlx5_esw_indir_table_needed(struct mlx5_eswitch *esw,
			    struct mlx5_flow_attr *attr,
			    u16 vport_num,
			    struct mlx5_core_dev *dest_mdev);

u16
mlx5_esw_indir_table_decap_vport(struct mlx5_flow_attr *attr);

#else
/* indir API stubs */
static inline struct mlx5_esw_indir_table *
mlx5_esw_indir_table_init(void)
{
	return NULL;
}

static inline void
mlx5_esw_indir_table_destroy(struct mlx5_esw_indir_table *indir)
{
}

static inline struct mlx5_flow_table *
mlx5_esw_indir_table_get(struct mlx5_eswitch *esw,
			 struct mlx5_flow_attr *attr,
			 struct mlx5_flow_spec *spec,
			 u16 vport, bool decap)
{
	return ERR_PTR(-EOPNOTSUPP);
}

static inline void
mlx5_esw_indir_table_put(struct mlx5_eswitch *esw,
			 struct mlx5_flow_attr *attr,
			 u16 vport, bool decap)
{
}

static inline bool
mlx5_esw_indir_table_needed(struct mlx5_eswitch *esw,
			    struct mlx5_flow_attr *attr,
			    u16 vport_num,
			    struct mlx5_core_dev *dest_mdev)
{
	return false;
}

static inline u16
mlx5_esw_indir_table_decap_vport(struct mlx5_flow_attr *attr)
{
	return 0;
}
#endif

#endif /* __MLX5_ESW_FT_H__ */
