#include <linux/kernel.h>
#include <linux/bitops.h>
#include <linux/if_vlan.h>
#include <linux/if_bridge.h>
#include <linux/netdevice.h>
#include <linux/rhashtable.h>
#include <linux/rtnetlink.h>
#include <linux/refcount.h>
#include "spectrum.h"
#include "spectrum_router.h"
#include "reg.h"
struct mlxsw_sp_fid_family;
struct mlxsw_sp_fid_core { … };
struct mlxsw_sp_fid_port_vid { … };
struct mlxsw_sp_fid { … };
struct mlxsw_sp_fid_8021q { … };
struct mlxsw_sp_fid_8021d { … };
static const struct rhashtable_params mlxsw_sp_fid_ht_params = …;
static const struct rhashtable_params mlxsw_sp_fid_vni_ht_params = …;
struct mlxsw_sp_flood_table { … };
struct mlxsw_sp_fid_ops { … };
enum mlxsw_sp_fid_flood_profile_id { … };
struct mlxsw_sp_fid_flood_profile { … };
struct mlxsw_sp_fid_family { … };
static const int mlxsw_sp_sfgc_uc_packet_types[MLXSW_REG_SFGC_TYPE_MAX] = …;
static const int mlxsw_sp_sfgc_bc_packet_types[MLXSW_REG_SFGC_TYPE_MAX] = …;
static const int mlxsw_sp_sfgc_mc_packet_types[MLXSW_REG_SFGC_TYPE_MAX] = …;
static const int mlxsw_sp_sfgc_not_uc_packet_types[MLXSW_REG_SFGC_TYPE_MAX] = …;
static const int mlxsw_sp_sfgc_any_packet_types[MLXSW_REG_SFGC_TYPE_MAX] = …;
static const int *mlxsw_sp_packet_type_sfgc_types[] = …;
struct mlxsw_sp_fid *mlxsw_sp_fid_lookup_by_index(struct mlxsw_sp *mlxsw_sp,
u16 fid_index)
{ … }
int mlxsw_sp_fid_nve_ifindex(const struct mlxsw_sp_fid *fid, int *nve_ifindex)
{ … }
int mlxsw_sp_fid_nve_type(const struct mlxsw_sp_fid *fid,
enum mlxsw_sp_nve_type *p_type)
{ … }
struct mlxsw_sp_fid *mlxsw_sp_fid_lookup_by_vni(struct mlxsw_sp *mlxsw_sp,
__be32 vni)
{ … }
int mlxsw_sp_fid_vni(const struct mlxsw_sp_fid *fid, __be32 *vni)
{ … }
int mlxsw_sp_fid_nve_flood_index_set(struct mlxsw_sp_fid *fid,
u32 nve_flood_index)
{ … }
void mlxsw_sp_fid_nve_flood_index_clear(struct mlxsw_sp_fid *fid)
{ … }
bool mlxsw_sp_fid_nve_flood_index_is_set(const struct mlxsw_sp_fid *fid)
{ … }
int mlxsw_sp_fid_vni_set(struct mlxsw_sp_fid *fid, enum mlxsw_sp_nve_type type,
__be32 vni, int nve_ifindex)
{ … }
void mlxsw_sp_fid_vni_clear(struct mlxsw_sp_fid *fid)
{ … }
bool mlxsw_sp_fid_vni_is_set(const struct mlxsw_sp_fid *fid)
{ … }
void mlxsw_sp_fid_fdb_clear_offload(const struct mlxsw_sp_fid *fid,
const struct net_device *nve_dev)
{ … }
static const struct mlxsw_sp_flood_table *
mlxsw_sp_fid_flood_table_lookup(const struct mlxsw_sp_fid *fid,
enum mlxsw_sp_flood_type packet_type)
{ … }
static u16
mlxsw_sp_fid_family_num_fids(const struct mlxsw_sp_fid_family *fid_family)
{ … }
static int
mlxsw_sp_fid_8021d_pgt_size(const struct mlxsw_sp_fid_family *fid_family,
u16 *p_pgt_size)
{ … }
static unsigned int mlxsw_sp_fid_rfid_port_offset_cff(unsigned int local_port)
{ … }
static int
mlxsw_sp_fid_rfid_pgt_size_cff(const struct mlxsw_sp_fid_family *fid_family,
u16 *p_pgt_size)
{ … }
static u16
mlxsw_sp_fid_pgt_base_ctl(const struct mlxsw_sp_fid_family *fid_family,
const struct mlxsw_sp_flood_table *flood_table)
{ … }
static u16
mlxsw_sp_fid_fid_mid_ctl(const struct mlxsw_sp_fid *fid,
const struct mlxsw_sp_flood_table *flood_table)
{ … }
int mlxsw_sp_fid_flood_set(struct mlxsw_sp_fid *fid,
enum mlxsw_sp_flood_type packet_type, u16 local_port,
bool member)
{ … }
int mlxsw_sp_fid_port_vid_map(struct mlxsw_sp_fid *fid,
struct mlxsw_sp_port *mlxsw_sp_port, u16 vid)
{ … }
void mlxsw_sp_fid_port_vid_unmap(struct mlxsw_sp_fid *fid,
struct mlxsw_sp_port *mlxsw_sp_port, u16 vid)
{ … }
u16 mlxsw_sp_fid_index(const struct mlxsw_sp_fid *fid)
{ … }
enum mlxsw_sp_fid_type mlxsw_sp_fid_type(const struct mlxsw_sp_fid *fid)
{ … }
struct mlxsw_sp_rif *mlxsw_sp_fid_rif(const struct mlxsw_sp_fid *fid)
{ … }
enum mlxsw_sp_rif_type
mlxsw_sp_fid_type_rif_type(const struct mlxsw_sp *mlxsw_sp,
enum mlxsw_sp_fid_type type)
{ … }
static struct mlxsw_sp_fid_8021q *
mlxsw_sp_fid_8021q_fid(const struct mlxsw_sp_fid *fid)
{ … }
u16 mlxsw_sp_fid_8021q_vid(const struct mlxsw_sp_fid *fid)
{ … }
static int mlxsw_sp_fid_8021q_setup(struct mlxsw_sp_fid *fid, const void *arg)
{ … }
static enum mlxsw_reg_sfmr_op mlxsw_sp_sfmr_op(bool valid)
{ … }
static void mlxsw_sp_fid_pack(char *sfmr_pl,
const struct mlxsw_sp_fid *fid,
enum mlxsw_reg_sfmr_op op)
{ … }
static void mlxsw_sp_fid_pack_ctl(char *sfmr_pl,
const struct mlxsw_sp_fid *fid,
enum mlxsw_reg_sfmr_op op)
{ … }
static u16
mlxsw_sp_fid_off_pgt_base_cff(const struct mlxsw_sp_fid_family *fid_family,
u16 fid_offset)
{ … }
static u16 mlxsw_sp_fid_pgt_base_cff(const struct mlxsw_sp_fid *fid)
{ … }
static void mlxsw_sp_fid_fid_pack_cff(char *sfmr_pl,
const struct mlxsw_sp_fid *fid,
enum mlxsw_reg_sfmr_op op)
{ … }
static u16 mlxsw_sp_fid_rfid_fid_offset_cff(struct mlxsw_sp *mlxsw_sp,
u16 port_lag_id, bool is_lag)
{ … }
static int mlxsw_sp_fid_op(const struct mlxsw_sp_fid *fid, bool valid)
{ … }
static int mlxsw_sp_fid_edit_op(const struct mlxsw_sp_fid *fid,
const struct mlxsw_sp_rif *rif)
{ … }
static int mlxsw_sp_fid_vni_to_fid_map(const struct mlxsw_sp_fid *fid,
const struct mlxsw_sp_rif *rif,
bool valid)
{ … }
static int mlxsw_sp_fid_to_fid_rif_update(const struct mlxsw_sp_fid *fid,
const struct mlxsw_sp_rif *rif)
{ … }
static int mlxsw_sp_fid_vni_to_fid_rif_update(const struct mlxsw_sp_fid *fid,
const struct mlxsw_sp_rif *rif)
{ … }
static int
mlxsw_sp_fid_vid_to_fid_map(const struct mlxsw_sp_fid *fid, u16 vid, bool valid,
const struct mlxsw_sp_rif *rif)
{ … }
static int
mlxsw_sp_fid_8021q_vid_to_fid_rif_update(const struct mlxsw_sp_fid *fid,
const struct mlxsw_sp_rif *rif)
{ … }
static int
mlxsw_sp_fid_port_vid_to_fid_rif_update_one(const struct mlxsw_sp_fid *fid,
struct mlxsw_sp_fid_port_vid *pv,
bool irif_valid, u16 irif_index)
{ … }
static int mlxsw_sp_fid_vid_to_fid_rif_set(const struct mlxsw_sp_fid *fid,
const struct mlxsw_sp_rif *rif)
{ … }
static void mlxsw_sp_fid_vid_to_fid_rif_unset(const struct mlxsw_sp_fid *fid)
{ … }
static int mlxsw_sp_fid_reiv_handle(struct mlxsw_sp_fid *fid, u16 rif_index,
bool valid, u8 port_page)
{ … }
static int mlxsw_sp_fid_erif_eport_to_vid_map(struct mlxsw_sp_fid *fid,
u16 rif_index, bool valid)
{ … }
int mlxsw_sp_fid_rif_set(struct mlxsw_sp_fid *fid, struct mlxsw_sp_rif *rif)
{ … }
void mlxsw_sp_fid_rif_unset(struct mlxsw_sp_fid *fid)
{ … }
static int mlxsw_sp_fid_vni_op(const struct mlxsw_sp_fid *fid)
{ … }
static int __mlxsw_sp_fid_port_vid_map(const struct mlxsw_sp_fid *fid,
u16 local_port, u16 vid, bool valid)
{ … }
static struct mlxsw_sp_fid_8021d *
mlxsw_sp_fid_8021d_fid(const struct mlxsw_sp_fid *fid)
{ … }
static int mlxsw_sp_fid_8021d_setup(struct mlxsw_sp_fid *fid, const void *arg)
{ … }
static int mlxsw_sp_fid_8021d_configure(struct mlxsw_sp_fid *fid)
{ … }
static void mlxsw_sp_fid_8021d_deconfigure(struct mlxsw_sp_fid *fid)
{ … }
static int mlxsw_sp_fid_8021d_index_alloc(struct mlxsw_sp_fid *fid,
const void *arg, u16 *p_fid_index)
{ … }
static bool
mlxsw_sp_fid_8021d_compare(const struct mlxsw_sp_fid *fid, const void *arg)
{ … }
static int mlxsw_sp_port_vp_mode_trans(struct mlxsw_sp_port *mlxsw_sp_port)
{ … }
static void mlxsw_sp_port_vlan_mode_trans(struct mlxsw_sp_port *mlxsw_sp_port)
{ … }
static int
mlxsw_sp_fid_port_vid_list_add(struct mlxsw_sp_fid *fid, u16 local_port,
u16 vid)
{ … }
static void
mlxsw_sp_fid_port_vid_list_del(struct mlxsw_sp_fid *fid, u16 local_port,
u16 vid)
{ … }
static int
mlxsw_sp_fid_mpe_table_map(const struct mlxsw_sp_fid *fid, u16 local_port,
u16 vid, bool valid)
{ … }
static int
mlxsw_sp_fid_erif_eport_to_vid_map_one(const struct mlxsw_sp_fid *fid,
u16 local_port, u16 vid, bool valid)
{ … }
static int mlxsw_sp_fid_evid_map(const struct mlxsw_sp_fid *fid, u16 local_port,
u16 vid, bool valid)
{ … }
static int mlxsw_sp_fid_8021d_port_vid_map(struct mlxsw_sp_fid *fid,
struct mlxsw_sp_port *mlxsw_sp_port,
u16 vid)
{ … }
static void
mlxsw_sp_fid_8021d_port_vid_unmap(struct mlxsw_sp_fid *fid,
struct mlxsw_sp_port *mlxsw_sp_port, u16 vid)
{ … }
static int mlxsw_sp_fid_8021d_vni_set(struct mlxsw_sp_fid *fid)
{ … }
static void mlxsw_sp_fid_8021d_vni_clear(struct mlxsw_sp_fid *fid)
{ … }
static int mlxsw_sp_fid_8021d_nve_flood_index_set(struct mlxsw_sp_fid *fid)
{ … }
static void mlxsw_sp_fid_8021d_nve_flood_index_clear(struct mlxsw_sp_fid *fid)
{ … }
static void
mlxsw_sp_fid_8021d_fdb_clear_offload(const struct mlxsw_sp_fid *fid,
const struct net_device *nve_dev)
{ … }
static int
mlxsw_sp_fid_8021d_vid_to_fid_rif_update(const struct mlxsw_sp_fid *fid,
const struct mlxsw_sp_rif *rif)
{ … }
static int
mlxsw_sp_fid_flood_table_init_ctl(struct mlxsw_sp_fid_family *fid_family,
const struct mlxsw_sp_flood_table *flood_table)
{ … }
static const struct mlxsw_sp_fid_ops mlxsw_sp_fid_8021d_ops_ctl = …;
static u16
mlxsw_sp_fid_fid_mid_cff(const struct mlxsw_sp_fid *fid,
const struct mlxsw_sp_flood_table *flood_table)
{ … }
static const struct mlxsw_sp_fid_ops mlxsw_sp_fid_8021d_ops_cff = …;
#define MLXSW_SP_FID_8021Q_MAX …
#define MLXSW_SP_FID_RFID_MAX …
static const struct mlxsw_sp_flood_table mlxsw_sp_fid_8021d_flood_tables[] = …;
static const
struct mlxsw_sp_fid_flood_profile mlxsw_sp_fid_8021d_flood_profile = …;
static const struct mlxsw_sp_flood_table mlxsw_sp_fid_rsp_flood_tables_cff[] = …;
static const
struct mlxsw_sp_fid_flood_profile mlxsw_sp_fid_rsp_flood_profile_cff = …;
static const struct mlxsw_sp_flood_table mlxsw_sp_fid_nve_flood_tables_cff[] = …;
static const
struct mlxsw_sp_fid_flood_profile mlxsw_sp_fid_nve_flood_profile_cff = …;
static bool
mlxsw_sp_fid_8021q_compare(const struct mlxsw_sp_fid *fid, const void *arg)
{ … }
static void
mlxsw_sp_fid_8021q_fdb_clear_offload(const struct mlxsw_sp_fid *fid,
const struct net_device *nve_dev)
{ … }
static int mlxsw_sp_fid_rfid_setup_ctl(struct mlxsw_sp_fid *fid,
const void *arg)
{ … }
static int mlxsw_sp_fid_rfid_setup_cff(struct mlxsw_sp_fid *fid,
const void *arg)
{ … }
static int mlxsw_sp_fid_rfid_configure(struct mlxsw_sp_fid *fid)
{ … }
static void mlxsw_sp_fid_rfid_deconfigure(struct mlxsw_sp_fid *fid)
{ … }
static int mlxsw_sp_fid_rfid_index_alloc(struct mlxsw_sp_fid *fid,
const void *arg, u16 *p_fid_index)
{ … }
static bool mlxsw_sp_fid_rfid_compare(const struct mlxsw_sp_fid *fid,
const void *arg)
{ … }
static int mlxsw_sp_fid_rfid_port_vid_map(struct mlxsw_sp_fid *fid,
struct mlxsw_sp_port *mlxsw_sp_port,
u16 vid)
{ … }
static void
mlxsw_sp_fid_rfid_port_vid_unmap(struct mlxsw_sp_fid *fid,
struct mlxsw_sp_port *mlxsw_sp_port, u16 vid)
{ … }
static int mlxsw_sp_fid_rfid_vni_set(struct mlxsw_sp_fid *fid)
{ … }
static void mlxsw_sp_fid_rfid_vni_clear(struct mlxsw_sp_fid *fid)
{ … }
static int mlxsw_sp_fid_rfid_nve_flood_index_set(struct mlxsw_sp_fid *fid)
{ … }
static void mlxsw_sp_fid_rfid_nve_flood_index_clear(struct mlxsw_sp_fid *fid)
{ … }
static int
mlxsw_sp_fid_rfid_vid_to_fid_rif_update(const struct mlxsw_sp_fid *fid,
const struct mlxsw_sp_rif *rif)
{ … }
static const struct mlxsw_sp_fid_ops mlxsw_sp_fid_rfid_ops_ctl = …;
static int
mlxsw_sp_fid_rfid_port_add_cff(struct mlxsw_sp *mlxsw_sp,
const struct mlxsw_sp_flood_table *flood_table,
u16 pgt_addr, u16 smpe, unsigned int local_port)
{ … }
static void
mlxsw_sp_fid_rfid_port_del_cff(struct mlxsw_sp *mlxsw_sp,
const struct mlxsw_sp_flood_table *flood_table,
u16 pgt_addr, u16 smpe, u16 local_port)
{ … }
static int
mlxsw_sp_fid_rfid_port_memb_ft_cff(const struct mlxsw_sp_fid_family *fid_family,
const struct mlxsw_sp_flood_table *flood_table,
const struct mlxsw_sp_port *mlxsw_sp_port,
bool member)
{ … }
static int
mlxsw_sp_fid_rfid_port_memb_cff(const struct mlxsw_sp_fid_family *fid_family,
const struct mlxsw_sp_port *mlxsw_sp_port,
bool member)
{ … }
static int
mlxsw_sp_fid_rfid_port_init_cff(const struct mlxsw_sp_fid_family *fid_family,
const struct mlxsw_sp_port *mlxsw_sp_port)
{ … }
static void
mlxsw_sp_fid_rfid_port_fini_cff(const struct mlxsw_sp_fid_family *fid_family,
const struct mlxsw_sp_port *mlxsw_sp_port)
{ … }
static const struct mlxsw_sp_fid_ops mlxsw_sp_fid_rfid_ops_cff = …;
static int mlxsw_sp_fid_dummy_setup(struct mlxsw_sp_fid *fid, const void *arg)
{ … }
static int mlxsw_sp_fid_dummy_configure(struct mlxsw_sp_fid *fid)
{ … }
static void mlxsw_sp_fid_dummy_deconfigure(struct mlxsw_sp_fid *fid)
{ … }
static int mlxsw_sp_fid_dummy_index_alloc(struct mlxsw_sp_fid *fid,
const void *arg, u16 *p_fid_index)
{ … }
static bool mlxsw_sp_fid_dummy_compare(const struct mlxsw_sp_fid *fid,
const void *arg)
{ … }
static int mlxsw_sp_fid_dummy_vni_set(struct mlxsw_sp_fid *fid)
{ … }
static void mlxsw_sp_fid_dummy_vni_clear(struct mlxsw_sp_fid *fid)
{ … }
static int mlxsw_sp_fid_dummy_nve_flood_index_set(struct mlxsw_sp_fid *fid)
{ … }
static void mlxsw_sp_fid_dummy_nve_flood_index_clear(struct mlxsw_sp_fid *fid)
{ … }
static const struct mlxsw_sp_fid_ops mlxsw_sp_fid_dummy_ops = …;
static int mlxsw_sp_fid_8021q_configure(struct mlxsw_sp_fid *fid)
{ … }
static void mlxsw_sp_fid_8021q_deconfigure(struct mlxsw_sp_fid *fid)
{ … }
static int mlxsw_sp_fid_8021q_port_vid_map(struct mlxsw_sp_fid *fid,
struct mlxsw_sp_port *mlxsw_sp_port,
u16 vid)
{ … }
static void
mlxsw_sp_fid_8021q_port_vid_unmap(struct mlxsw_sp_fid *fid,
struct mlxsw_sp_port *mlxsw_sp_port, u16 vid)
{ … }
static const struct mlxsw_sp_fid_ops mlxsw_sp_fid_8021q_ops_ctl = …;
static const struct mlxsw_sp_fid_ops mlxsw_sp_fid_8021q_ops_cff = …;
#define MLXSW_SP_FID_8021Q_START …
#define MLXSW_SP_FID_8021Q_END …
#define MLXSW_SP_FID_8021D_START …
#define MLXSW_SP_FID_8021D_END …
#define MLXSW_SP_FID_DUMMY …
#define MLXSW_SP_RFID_START …
#define MLXSW_SP_RFID_END …
static const struct mlxsw_sp_fid_family mlxsw_sp1_fid_8021q_family = …;
static const struct mlxsw_sp_fid_family mlxsw_sp1_fid_8021d_family = …;
static const struct mlxsw_sp_fid_family mlxsw_sp1_fid_dummy_family = …;
static const struct mlxsw_sp_fid_family mlxsw_sp_fid_rfid_family_ctl = …;
static const struct mlxsw_sp_fid_family *mlxsw_sp1_fid_family_arr[] = …;
static const struct mlxsw_sp_fid_family mlxsw_sp2_fid_8021q_family_ctl = …;
static const struct mlxsw_sp_fid_family mlxsw_sp2_fid_8021d_family_ctl = …;
static const struct mlxsw_sp_fid_family mlxsw_sp2_fid_dummy_family = …;
static const struct mlxsw_sp_fid_family *mlxsw_sp2_fid_family_arr_ctl[] = …;
static const struct mlxsw_sp_fid_family mlxsw_sp2_fid_8021q_family_cff = …;
static const struct mlxsw_sp_fid_family mlxsw_sp2_fid_8021d_family_cff = …;
static const struct mlxsw_sp_fid_family mlxsw_sp_fid_rfid_family_cff = …;
static const struct mlxsw_sp_fid_family *mlxsw_sp2_fid_family_arr_cff[] = …;
static struct mlxsw_sp_fid *mlxsw_sp_fid_lookup(struct mlxsw_sp *mlxsw_sp,
enum mlxsw_sp_fid_type type,
const void *arg)
{ … }
static struct mlxsw_sp_fid *mlxsw_sp_fid_get(struct mlxsw_sp *mlxsw_sp,
enum mlxsw_sp_fid_type type,
const void *arg)
{ … }
void mlxsw_sp_fid_put(struct mlxsw_sp_fid *fid)
{ … }
struct mlxsw_sp_fid *mlxsw_sp_fid_8021q_get(struct mlxsw_sp *mlxsw_sp, u16 vid)
{ … }
struct mlxsw_sp_fid *mlxsw_sp_fid_8021d_get(struct mlxsw_sp *mlxsw_sp,
int br_ifindex)
{ … }
struct mlxsw_sp_fid *mlxsw_sp_fid_8021q_lookup(struct mlxsw_sp *mlxsw_sp,
u16 vid)
{ … }
struct mlxsw_sp_fid *mlxsw_sp_fid_8021d_lookup(struct mlxsw_sp *mlxsw_sp,
int br_ifindex)
{ … }
struct mlxsw_sp_fid *mlxsw_sp_fid_rfid_get(struct mlxsw_sp *mlxsw_sp,
u16 rif_index)
{ … }
struct mlxsw_sp_fid *mlxsw_sp_fid_dummy_get(struct mlxsw_sp *mlxsw_sp)
{ … }
static int
mlxsw_sp_fid_flood_tables_init(struct mlxsw_sp_fid_family *fid_family)
{ … }
static void
mlxsw_sp_fid_flood_tables_fini(struct mlxsw_sp_fid_family *fid_family)
{ … }
static int mlxsw_sp_fid_family_register(struct mlxsw_sp *mlxsw_sp,
const struct mlxsw_sp_fid_family *tmpl)
{ … }
static void
mlxsw_sp_fid_family_unregister(struct mlxsw_sp *mlxsw_sp,
struct mlxsw_sp_fid_family *fid_family)
{ … }
static int mlxsw_sp_fid_port_init(const struct mlxsw_sp_port *mlxsw_sp_port)
{ … }
static void mlxsw_sp_fid_port_fini(const struct mlxsw_sp_port *mlxsw_sp_port)
{ … }
int mlxsw_sp_port_fids_init(struct mlxsw_sp_port *mlxsw_sp_port)
{ … }
void mlxsw_sp_port_fids_fini(struct mlxsw_sp_port *mlxsw_sp_port)
{ … }
int mlxsw_sp_fid_port_join_lag(const struct mlxsw_sp_port *mlxsw_sp_port)
{ … }
void mlxsw_sp_fid_port_leave_lag(const struct mlxsw_sp_port *mlxsw_sp_port)
{ … }
static int
mlxsw_sp_fids_init(struct mlxsw_sp *mlxsw_sp,
const struct mlxsw_sp_fid_family *fid_family_arr[])
{ … }
static void mlxsw_sp_fids_fini(struct mlxsw_sp *mlxsw_sp)
{ … }
static int mlxsw_sp1_fids_init(struct mlxsw_sp *mlxsw_sp)
{ … }
const struct mlxsw_sp_fid_core_ops mlxsw_sp1_fid_core_ops = …;
static int mlxsw_sp_fid_check_flood_profile_id(struct mlxsw_sp *mlxsw_sp,
int profile_id)
{ … }
static int
mlxsw_sp2_fids_init_flood_table(struct mlxsw_sp *mlxsw_sp,
enum mlxsw_sp_fid_flood_profile_id profile_id,
const struct mlxsw_sp_flood_table *flood_table)
{ … }
static int
mlxsw_sp2_fids_init_flood_profile(struct mlxsw_sp *mlxsw_sp,
const struct mlxsw_sp_fid_flood_profile *
flood_profile)
{ … }
static const
struct mlxsw_sp_fid_flood_profile *mlxsw_sp_fid_flood_profiles[] = …;
static int
mlxsw_sp2_fids_init_flood_profiles(struct mlxsw_sp *mlxsw_sp)
{ … }
static int mlxsw_sp2_fids_init_ctl(struct mlxsw_sp *mlxsw_sp)
{ … }
static int mlxsw_sp2_fids_init_cff(struct mlxsw_sp *mlxsw_sp)
{ … }
static int mlxsw_sp2_fids_init(struct mlxsw_sp *mlxsw_sp)
{ … }
const struct mlxsw_sp_fid_core_ops mlxsw_sp2_fid_core_ops = …;