diff options
Diffstat (limited to 'net/dsa/legacy.c')
| -rw-r--r-- | net/dsa/legacy.c | 40 | 
1 files changed, 30 insertions, 10 deletions
| diff --git a/net/dsa/legacy.c b/net/dsa/legacy.c index 1d7a3282f2a7..91e6f7981d39 100644 --- a/net/dsa/legacy.c +++ b/net/dsa/legacy.c @@ -78,25 +78,23 @@ dsa_switch_probe(struct device *parent, struct device *host_dev, int sw_addr,  }  /* basic switch operations **************************************************/ -static int dsa_cpu_dsa_setups(struct dsa_switch *ds, struct device *dev) +static int dsa_cpu_dsa_setups(struct dsa_switch *ds)  { -	struct dsa_port *dport;  	int ret, port;  	for (port = 0; port < ds->num_ports; port++) {  		if (!(dsa_is_cpu_port(ds, port) || dsa_is_dsa_port(ds, port)))  			continue; -		dport = &ds->ports[port]; -		ret = dsa_cpu_dsa_setup(ds, dev, dport, port); +		ret = dsa_cpu_dsa_setup(&ds->ports[port]);  		if (ret)  			return ret;  	}  	return 0;  } -static int dsa_switch_setup_one(struct dsa_switch *ds, struct net_device *master, -				struct device *parent) +static int dsa_switch_setup_one(struct dsa_switch *ds, +				struct net_device *master)  {  	const struct dsa_switch_ops *ops = ds->ops;  	struct dsa_switch_tree *dst = ds->dst; @@ -176,7 +174,7 @@ static int dsa_switch_setup_one(struct dsa_switch *ds, struct net_device *master  	}  	if (!ds->slave_mii_bus && ops->phy_read) { -		ds->slave_mii_bus = devm_mdiobus_alloc(parent); +		ds->slave_mii_bus = devm_mdiobus_alloc(ds->dev);  		if (!ds->slave_mii_bus)  			return -ENOMEM;  		dsa_slave_mii_bus_init(ds); @@ -196,14 +194,14 @@ static int dsa_switch_setup_one(struct dsa_switch *ds, struct net_device *master  		if (!(ds->enabled_port_mask & (1 << i)))  			continue; -		ret = dsa_slave_create(ds, parent, i, cd->port_names[i]); +		ret = dsa_slave_create(&ds->ports[i], cd->port_names[i]);  		if (ret < 0)  			netdev_err(master, "[%d]: can't create dsa slave device for port %d(%s): %d\n",  				   index, i, cd->port_names[i], ret);  	}  	/* Perform configuration of the CPU and DSA ports */ -	ret = dsa_cpu_dsa_setups(ds, parent); +	ret = dsa_cpu_dsa_setups(ds);  	if (ret < 0)  		netdev_err(master, "[%d] : can't configure CPU and DSA ports\n",  			   index); @@ -252,7 +250,7 @@ dsa_switch_setup(struct dsa_switch_tree *dst, struct net_device *master,  	ds->ops = ops;  	ds->priv = priv; -	ret = dsa_switch_setup_one(ds, master, parent); +	ret = dsa_switch_setup_one(ds, master);  	if (ret)  		return ERR_PTR(ret); @@ -741,6 +739,28 @@ static int dsa_resume(struct device *d)  }  #endif +/* legacy way, bypassing the bridge *****************************************/ +int dsa_legacy_fdb_add(struct ndmsg *ndm, struct nlattr *tb[], +		       struct net_device *dev, +		       const unsigned char *addr, u16 vid, +		       u16 flags) +{ +	struct dsa_slave_priv *p = netdev_priv(dev); +	struct dsa_port *dp = p->dp; + +	return dsa_port_fdb_add(dp, addr, vid); +} + +int dsa_legacy_fdb_del(struct ndmsg *ndm, struct nlattr *tb[], +		       struct net_device *dev, +		       const unsigned char *addr, u16 vid) +{ +	struct dsa_slave_priv *p = netdev_priv(dev); +	struct dsa_port *dp = p->dp; + +	return dsa_port_fdb_del(dp, addr, vid); +} +  static SIMPLE_DEV_PM_OPS(dsa_pm_ops, dsa_suspend, dsa_resume);  static const struct of_device_id dsa_of_match_table[] = { |