#include <linux/if_bridge.h>
#include <net/switchdev.h>
#include "sparx5_main_regs.h"
#include "sparx5_main.h"
static struct workqueue_struct *sparx5_owq;
struct sparx5_switchdev_event_work { … };
static int sparx5_port_attr_pre_bridge_flags(struct sparx5_port *port,
struct switchdev_brport_flags flags)
{ … }
static void sparx5_port_update_mcast_ip_flood(struct sparx5_port *port, bool flood_flag)
{ … }
static void sparx5_port_attr_bridge_flags(struct sparx5_port *port,
struct switchdev_brport_flags flags)
{ … }
static void sparx5_attr_stp_state_set(struct sparx5_port *port,
u8 state)
{ … }
static void sparx5_port_attr_ageing_set(struct sparx5_port *port,
unsigned long ageing_clock_t)
{ … }
static void sparx5_port_attr_mrouter_set(struct sparx5_port *port,
struct net_device *orig_dev,
bool enable)
{ … }
static int sparx5_port_attr_set(struct net_device *dev, const void *ctx,
const struct switchdev_attr *attr,
struct netlink_ext_ack *extack)
{ … }
static int sparx5_port_bridge_join(struct sparx5_port *port,
struct net_device *bridge,
struct netlink_ext_ack *extack)
{ … }
static void sparx5_port_bridge_leave(struct sparx5_port *port,
struct net_device *bridge)
{ … }
static int sparx5_port_changeupper(struct net_device *dev,
struct netdev_notifier_changeupper_info *info)
{ … }
static int sparx5_port_add_addr(struct net_device *dev, bool up)
{ … }
static int sparx5_netdevice_port_event(struct net_device *dev,
struct notifier_block *nb,
unsigned long event, void *ptr)
{ … }
static int sparx5_netdevice_event(struct notifier_block *nb,
unsigned long event, void *ptr)
{ … }
static void sparx5_switchdev_bridge_fdb_event_work(struct work_struct *work)
{ … }
static void sparx5_schedule_work(struct work_struct *work)
{ … }
static int sparx5_switchdev_event(struct notifier_block *nb,
unsigned long event, void *ptr)
{ … }
static int sparx5_handle_port_vlan_add(struct net_device *dev,
struct notifier_block *nb,
const struct switchdev_obj_port_vlan *v)
{ … }
static int sparx5_alloc_mdb_entry(struct sparx5 *sparx5,
const unsigned char *addr,
u16 vid,
struct sparx5_mdb_entry **entry_out)
{ … }
static void sparx5_free_mdb_entry(struct sparx5 *sparx5,
const unsigned char *addr,
u16 vid)
{ … }
static struct sparx5_mdb_entry *sparx5_mdb_get_entry(struct sparx5 *sparx5,
const unsigned char *addr,
u16 vid)
{ … }
static void sparx5_cpu_copy_ena(struct sparx5 *spx5, u16 pgid, bool enable)
{ … }
static int sparx5_handle_port_mdb_add(struct net_device *dev,
struct notifier_block *nb,
const struct switchdev_obj_port_mdb *v)
{ … }
static int sparx5_handle_port_mdb_del(struct net_device *dev,
struct notifier_block *nb,
const struct switchdev_obj_port_mdb *v)
{ … }
static int sparx5_handle_port_obj_add(struct net_device *dev,
struct notifier_block *nb,
struct switchdev_notifier_port_obj_info *info)
{ … }
static int sparx5_handle_port_vlan_del(struct net_device *dev,
struct notifier_block *nb,
u16 vid)
{ … }
static int sparx5_handle_port_obj_del(struct net_device *dev,
struct notifier_block *nb,
struct switchdev_notifier_port_obj_info *info)
{ … }
static int sparx5_switchdev_blocking_event(struct notifier_block *nb,
unsigned long event,
void *ptr)
{ … }
int sparx5_register_notifier_blocks(struct sparx5 *s5)
{ … }
void sparx5_unregister_notifier_blocks(struct sparx5 *s5)
{ … }