/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
/* Copyright (c) 2021, NVIDIA CORPORATION & AFFILIATES. */

#ifndef __MLX5_EN_TC_CT_FS_H__
#define __MLX5_EN_TC_CT_FS_H__

struct mlx5_ct_fs {
	const struct net_device *netdev;
	struct mlx5_core_dev *dev;

	/* private data */
	void *priv_data[];
};

struct mlx5_ct_fs_rule {
};

struct mlx5_ct_fs_ops {
	int (*init)(struct mlx5_ct_fs *fs, struct mlx5_flow_table *ct,
		    struct mlx5_flow_table *ct_nat, struct mlx5_flow_table *post_ct);
	void (*destroy)(struct mlx5_ct_fs *fs);

	struct mlx5_ct_fs_rule * (*ct_rule_add)(struct mlx5_ct_fs *fs,
						struct mlx5_flow_spec *spec,
						struct mlx5_flow_attr *attr,
						struct flow_rule *flow_rule);
	void (*ct_rule_del)(struct mlx5_ct_fs *fs, struct mlx5_ct_fs_rule *fs_rule);

	size_t priv_size;
};

static inline void *mlx5_ct_fs_priv(struct mlx5_ct_fs *fs)
{
	return &fs->priv_data;
}

struct mlx5_ct_fs_ops *mlx5_ct_fs_dmfs_ops_get(void);

#if IS_ENABLED(CONFIG_MLX5_SW_STEERING)
struct mlx5_ct_fs_ops *mlx5_ct_fs_smfs_ops_get(void);
#else
static inline struct mlx5_ct_fs_ops *
mlx5_ct_fs_smfs_ops_get(void)
{
	return NULL;
}
#endif /* IS_ENABLED(CONFIG_MLX5_SW_STEERING) */

#endif /* __MLX5_EN_TC_CT_FS_H__ */
