diff options
Diffstat (limited to 'net/dsa/dsa.c')
-rw-r--r-- | net/dsa/dsa.c | 47 |
1 files changed, 47 insertions, 0 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, | |||
223 | return 0; | 223 | return 0; |
224 | } | 224 | } |
225 | 225 | ||
226 | #ifdef CONFIG_PM_SLEEP | ||
227 | int dsa_switch_suspend(struct dsa_switch *ds) | ||
228 | { | ||
229 | int i, ret = 0; | ||
230 | |||
231 | /* Suspend slave network devices */ | ||
232 | for (i = 0; i < ds->num_ports; i++) { | ||
233 | if (!dsa_is_port_initialized(ds, i)) | ||
234 | continue; | ||
235 | |||
236 | ret = dsa_slave_suspend(ds->ports[i].netdev); | ||
237 | if (ret) | ||
238 | return ret; | ||
239 | } | ||
240 | |||
241 | if (ds->ops->suspend) | ||
242 | ret = ds->ops->suspend(ds); | ||
243 | |||
244 | return ret; | ||
245 | } | ||
246 | EXPORT_SYMBOL_GPL(dsa_switch_suspend); | ||
247 | |||
248 | int dsa_switch_resume(struct dsa_switch *ds) | ||
249 | { | ||
250 | int i, ret = 0; | ||
251 | |||
252 | if (ds->ops->resume) | ||
253 | ret = ds->ops->resume(ds); | ||
254 | |||
255 | if (ret) | ||
256 | return ret; | ||
257 | |||
258 | /* Resume slave network devices */ | ||
259 | for (i = 0; i < ds->num_ports; i++) { | ||
260 | if (!dsa_is_port_initialized(ds, i)) | ||
261 | continue; | ||
262 | |||
263 | ret = dsa_slave_resume(ds->ports[i].netdev); | ||
264 | if (ret) | ||
265 | return ret; | ||
266 | } | ||
267 | |||
268 | return 0; | ||
269 | } | ||
270 | EXPORT_SYMBOL_GPL(dsa_switch_resume); | ||
271 | #endif | ||
272 | |||
226 | static struct packet_type dsa_pack_type __read_mostly = { | 273 | static struct packet_type dsa_pack_type __read_mostly = { |
227 | .type = cpu_to_be16(ETH_P_XDSA), | 274 | .type = cpu_to_be16(ETH_P_XDSA), |
228 | .func = dsa_switch_rcv, | 275 | .func = dsa_switch_rcv, |