diff options
| author | Olivier Blin <olivier.blin@softathome.com> | 2014-10-24 19:43:00 +0200 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2014-10-28 17:26:19 -0400 | 
| commit | 1efed2d06c703489342ab6af2951683e07509c99 (patch) | |
| tree | ac3ba893ec63694de9c5719b2420d0d05f45260c /drivers/net/usb/usbnet.c | |
| parent | 9ffa1fcaef222026a8e031830f8db29d3f2cfc47 (diff) | |
usbnet: add a callback for set_rx_mode
To delegate promiscuous mode and multicast filtering to the subdriver.
Signed-off-by: Olivier Blin <olivier.blin@softathome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/usb/usbnet.c')
| -rw-r--r-- | drivers/net/usb/usbnet.c | 20 | 
1 files changed, 20 insertions, 0 deletions
| diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index 20615bbd693b..3a6770a65d78 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c @@ -1052,6 +1052,21 @@ static void __handle_link_change(struct usbnet *dev)  	clear_bit(EVENT_LINK_CHANGE, &dev->flags);  } +static void usbnet_set_rx_mode(struct net_device *net) +{ +	struct usbnet		*dev = netdev_priv(net); + +	usbnet_defer_kevent(dev, EVENT_SET_RX_MODE); +} + +static void __handle_set_rx_mode(struct usbnet *dev) +{ +	if (dev->driver_info->set_rx_mode) +		(dev->driver_info->set_rx_mode)(dev); + +	clear_bit(EVENT_SET_RX_MODE, &dev->flags); +} +  /* work that cannot be done in interrupt context uses keventd.   *   * NOTE:  with 2.5 we could do more of this using completion callbacks, @@ -1157,6 +1172,10 @@ skip_reset:  	if (test_bit (EVENT_LINK_CHANGE, &dev->flags))  		__handle_link_change(dev); +	if (test_bit (EVENT_SET_RX_MODE, &dev->flags)) +		__handle_set_rx_mode(dev); + +  	if (dev->flags)  		netdev_dbg(dev->net, "kevent done, flags = 0x%lx\n", dev->flags);  } @@ -1525,6 +1544,7 @@ static const struct net_device_ops usbnet_netdev_ops = {  	.ndo_stop		= usbnet_stop,  	.ndo_start_xmit		= usbnet_start_xmit,  	.ndo_tx_timeout		= usbnet_tx_timeout, +	.ndo_set_rx_mode	= usbnet_set_rx_mode,  	.ndo_change_mtu		= usbnet_change_mtu,  	.ndo_set_mac_address 	= eth_mac_addr,  	.ndo_validate_addr	= eth_validate_addr, | 
