diff options
Diffstat (limited to 'net/dsa')
| -rw-r--r-- | net/dsa/dsa.c | 47 | ||||
| -rw-r--r-- | net/dsa/dsa2.c | 4 | ||||
| -rw-r--r-- | net/dsa/legacy.c | 47 | 
3 files changed, 50 insertions, 48 deletions
| diff --git a/net/dsa/dsa.c b/net/dsa/dsa.c index 26130ae438da..90038d45a547 100644 --- a/net/dsa/dsa.c +++ b/net/dsa/dsa.c @@ -223,6 +223,53 @@ static int dsa_switch_rcv(struct sk_buff *skb, struct net_device *dev,  	return 0;  } +#ifdef CONFIG_PM_SLEEP +int dsa_switch_suspend(struct dsa_switch *ds) +{ +	int i, ret = 0; + +	/* Suspend slave network devices */ +	for (i = 0; i < ds->num_ports; i++) { +		if (!dsa_is_port_initialized(ds, i)) +			continue; + +		ret = dsa_slave_suspend(ds->ports[i].netdev); +		if (ret) +			return ret; +	} + +	if (ds->ops->suspend) +		ret = ds->ops->suspend(ds); + +	return ret; +} +EXPORT_SYMBOL_GPL(dsa_switch_suspend); + +int dsa_switch_resume(struct dsa_switch *ds) +{ +	int i, ret = 0; + +	if (ds->ops->resume) +		ret = ds->ops->resume(ds); + +	if (ret) +		return ret; + +	/* Resume slave network devices */ +	for (i = 0; i < ds->num_ports; i++) { +		if (!dsa_is_port_initialized(ds, i)) +			continue; + +		ret = dsa_slave_resume(ds->ports[i].netdev); +		if (ret) +			return ret; +	} + +	return 0; +} +EXPORT_SYMBOL_GPL(dsa_switch_resume); +#endif +  static struct packet_type dsa_pack_type __read_mostly = {  	.type	= cpu_to_be16(ETH_P_XDSA),  	.func	= dsa_switch_rcv, diff --git a/net/dsa/dsa2.c b/net/dsa/dsa2.c index 033b3bfb63dc..7796580e99ee 100644 --- a/net/dsa/dsa2.c +++ b/net/dsa/dsa2.c @@ -484,8 +484,10 @@ static void dsa_dst_unapply(struct dsa_switch_tree *dst)  		dsa_ds_unapply(dst, ds);  	} -	if (dst->cpu_switch) +	if (dst->cpu_switch) {  		dsa_cpu_port_ethtool_restore(dst->cpu_switch); +		dst->cpu_switch = NULL; +	}  	pr_info("DSA: tree %d unapplied\n", dst->tree);  	dst->applied = false; diff --git a/net/dsa/legacy.c b/net/dsa/legacy.c index ad345c8b0b06..7281098df04e 100644 --- a/net/dsa/legacy.c +++ b/net/dsa/legacy.c @@ -289,53 +289,6 @@ static void dsa_switch_destroy(struct dsa_switch *ds)  	dsa_switch_unregister_notifier(ds);  } -#ifdef CONFIG_PM_SLEEP -int dsa_switch_suspend(struct dsa_switch *ds) -{ -	int i, ret = 0; - -	/* Suspend slave network devices */ -	for (i = 0; i < ds->num_ports; i++) { -		if (!dsa_is_port_initialized(ds, i)) -			continue; - -		ret = dsa_slave_suspend(ds->ports[i].netdev); -		if (ret) -			return ret; -	} - -	if (ds->ops->suspend) -		ret = ds->ops->suspend(ds); - -	return ret; -} -EXPORT_SYMBOL_GPL(dsa_switch_suspend); - -int dsa_switch_resume(struct dsa_switch *ds) -{ -	int i, ret = 0; - -	if (ds->ops->resume) -		ret = ds->ops->resume(ds); - -	if (ret) -		return ret; - -	/* Resume slave network devices */ -	for (i = 0; i < ds->num_ports; i++) { -		if (!dsa_is_port_initialized(ds, i)) -			continue; - -		ret = dsa_slave_resume(ds->ports[i].netdev); -		if (ret) -			return ret; -	} - -	return 0; -} -EXPORT_SYMBOL_GPL(dsa_switch_resume); -#endif -  /* platform driver init and cleanup *****************************************/  static int dev_is_class(struct device *dev, void *class)  { |