diff options
author | Jussi Kivilinna <jussi.kivilinna@mbnet.fi> | 2009-06-16 10:17:27 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-07-10 14:57:52 -0400 |
commit | a33e9e7f35ef6dcab528e0327f29188475f60691 (patch) | |
tree | b49fbe81598cd21fbc1437318f6f525a0e828767 /drivers/net/usb/usbnet.c | |
parent | d75ec2b7ec27fd6cdba78492fbd63bee4d091a87 (diff) |
usbnet: Add stop function pointer to 'struct rndis_data'.
Allow minidriver to know that netdev has stopped. This is to let
wireless turn off radio when usbnet dev is stopped.
Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Acked-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: David S. Miller <davem@davemloft.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/usb/usbnet.c')
-rw-r--r-- | drivers/net/usb/usbnet.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index edfd9e10ceba..25e435c49040 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c | |||
@@ -575,7 +575,9 @@ EXPORT_SYMBOL_GPL(usbnet_unlink_rx_urbs); | |||
575 | int usbnet_stop (struct net_device *net) | 575 | int usbnet_stop (struct net_device *net) |
576 | { | 576 | { |
577 | struct usbnet *dev = netdev_priv(net); | 577 | struct usbnet *dev = netdev_priv(net); |
578 | struct driver_info *info = dev->driver_info; | ||
578 | int temp; | 579 | int temp; |
580 | int retval; | ||
579 | DECLARE_WAIT_QUEUE_HEAD_ONSTACK (unlink_wakeup); | 581 | DECLARE_WAIT_QUEUE_HEAD_ONSTACK (unlink_wakeup); |
580 | DECLARE_WAITQUEUE (wait, current); | 582 | DECLARE_WAITQUEUE (wait, current); |
581 | 583 | ||
@@ -587,6 +589,18 @@ int usbnet_stop (struct net_device *net) | |||
587 | net->stats.rx_errors, net->stats.tx_errors | 589 | net->stats.rx_errors, net->stats.tx_errors |
588 | ); | 590 | ); |
589 | 591 | ||
592 | /* allow minidriver to stop correctly (wireless devices to turn off | ||
593 | * radio etc) */ | ||
594 | if (info->stop) { | ||
595 | retval = info->stop(dev); | ||
596 | if (retval < 0 && netif_msg_ifdown(dev)) | ||
597 | devinfo(dev, | ||
598 | "stop fail (%d) usbnet usb-%s-%s, %s", | ||
599 | retval, | ||
600 | dev->udev->bus->bus_name, dev->udev->devpath, | ||
601 | info->description); | ||
602 | } | ||
603 | |||
590 | // ensure there are no more active urbs | 604 | // ensure there are no more active urbs |
591 | add_wait_queue (&unlink_wakeup, &wait); | 605 | add_wait_queue (&unlink_wakeup, &wait); |
592 | dev->wait = &unlink_wakeup; | 606 | dev->wait = &unlink_wakeup; |