#ifndef _MLX5_ESWITCH_
#define _MLX5_ESWITCH_
#include <linux/mlx5/driver.h>
#include <linux/mlx5/vport.h>
#include <net/devlink.h>
#define MLX5_ESWITCH_MANAGER(mdev) …
enum { … };
enum { … };
enum { … };
enum mlx5_switchdev_event { … };
struct mlx5_eswitch_rep;
struct mlx5_eswitch_rep_ops { … };
struct mlx5_eswitch_rep_data { … };
struct mlx5_eswitch_rep { … };
void mlx5_eswitch_register_vport_reps(struct mlx5_eswitch *esw,
const struct mlx5_eswitch_rep_ops *ops,
u8 rep_type);
void mlx5_eswitch_unregister_vport_reps(struct mlx5_eswitch *esw, u8 rep_type);
void *mlx5_eswitch_get_proto_dev(struct mlx5_eswitch *esw,
u16 vport_num,
u8 rep_type);
struct mlx5_eswitch_rep *mlx5_eswitch_vport_rep(struct mlx5_eswitch *esw,
u16 vport_num);
void *mlx5_eswitch_uplink_get_proto_dev(struct mlx5_eswitch *esw, u8 rep_type);
struct mlx5_flow_handle *
mlx5_eswitch_add_send_to_vport_rule(struct mlx5_eswitch *on_esw,
struct mlx5_eswitch *from_esw,
struct mlx5_eswitch_rep *rep, u32 sqn);
#ifdef CONFIG_MLX5_ESWITCH
enum devlink_eswitch_encap_mode
mlx5_eswitch_get_encap_mode(const struct mlx5_core_dev *dev);
bool mlx5_eswitch_reg_c1_loopback_enabled(const struct mlx5_eswitch *esw);
bool mlx5_eswitch_vport_match_metadata_enabled(const struct mlx5_eswitch *esw);
#define ESW_VPORT_BITS …
#define ESW_PFNUM_BITS …
#define ESW_SOURCE_PORT_METADATA_BITS …
#define ESW_SOURCE_PORT_METADATA_OFFSET …
#define ESW_REG_C0_USER_DATA_METADATA_BITS …
#define ESW_REG_C0_USER_DATA_METADATA_MASK …
static inline u32 mlx5_eswitch_get_vport_metadata_mask(void)
{ … }
u32 mlx5_eswitch_get_vport_metadata_for_match(struct mlx5_eswitch *esw,
u16 vport_num);
u32 mlx5_eswitch_get_vport_metadata_for_set(struct mlx5_eswitch *esw,
u16 vport_num);
#define ESW_RESERVED_BITS …
#define ESW_ZONE_ID_BITS …
#define ESW_TUN_OPTS_BITS …
#define ESW_TUN_ID_BITS …
#define ESW_TUN_OPTS_OFFSET …
#define ESW_TUN_OFFSET …
#define ESW_ZONE_ID_MASK …
#define ESW_TUN_OPTS_MASK …
#define ESW_TUN_MASK …
#define ESW_TUN_ID_SLOW_TABLE_GOTO_VPORT …
#define ESW_TUN_ID_BRIDGE_INGRESS_PUSH_VLAN …
#define ESW_TUN_OPTS_SLOW_TABLE_GOTO_VPORT …
#define ESW_TUN_SLOW_TABLE_GOTO_VPORT …
#define ESW_TUN_SLOW_TABLE_GOTO_VPORT_MARK …
#define ESW_TUN_OPTS_BRIDGE_INGRESS_PUSH_VLAN …
#define ESW_TUN_BRIDGE_INGRESS_PUSH_VLAN …
#define ESW_TUN_BRIDGE_INGRESS_PUSH_VLAN_MARK …
#define ESW_IPSEC_RX_MAPPED_ID_MASK …
u8 mlx5_eswitch_mode(const struct mlx5_core_dev *dev);
u16 mlx5_eswitch_get_total_vports(const struct mlx5_core_dev *dev);
struct mlx5_core_dev *mlx5_eswitch_get_core_dev(struct mlx5_eswitch *esw);
#else
static inline u8 mlx5_eswitch_mode(const struct mlx5_core_dev *dev)
{
return MLX5_ESWITCH_LEGACY;
}
static inline enum devlink_eswitch_encap_mode
mlx5_eswitch_get_encap_mode(const struct mlx5_core_dev *dev)
{
return DEVLINK_ESWITCH_ENCAP_MODE_NONE;
}
static inline bool
mlx5_eswitch_reg_c1_loopback_enabled(const struct mlx5_eswitch *esw)
{
return false;
};
static inline bool
mlx5_eswitch_vport_match_metadata_enabled(const struct mlx5_eswitch *esw)
{
return false;
};
static inline u32
mlx5_eswitch_get_vport_metadata_for_match(struct mlx5_eswitch *esw, u16 vport_num)
{
return 0;
};
static inline u32
mlx5_eswitch_get_vport_metadata_mask(void)
{
return 0;
}
static inline u16 mlx5_eswitch_get_total_vports(const struct mlx5_core_dev *dev)
{
return 0;
}
static inline struct mlx5_core_dev *mlx5_eswitch_get_core_dev(struct mlx5_eswitch *esw)
{
return NULL;
}
#endif
static inline bool is_mdev_legacy_mode(struct mlx5_core_dev *dev)
{ … }
static inline bool is_mdev_switchdev_mode(struct mlx5_core_dev *dev)
{ … }
static inline u16 mlx5_eswitch_manager_vport(struct mlx5_core_dev *dev)
{ … }
#endif