aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorJussi Kivilinna <jussi.kivilinna@mbnet.fi>2009-08-11 15:57:16 -0400
committerJohn W. Linville <linville@tuxdriver.com>2009-08-14 09:14:04 -0400
commit7834ddbcc7a097443761b0722e8c9fb8511b95b1 (patch)
treef764502e46a6a5db52dcec7b961238161848e9b6 /include/linux
parentd4de9532fd0b50d486259ace17650a58bbb751c2 (diff)
usbnet: add rx queue pausing
Add rx queue pausing to usbnet. This is needed by rndis_wlan so that it can control rx queue and prevent received packets from being send forward before rndis_wlan receives and handles 'media connect'-indication. Without this establishing WPA connections is hard and fail often. [v2] - removed unneeded use of skb_clone Cc: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/usb/usbnet.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/include/linux/usb/usbnet.h b/include/linux/usb/usbnet.h
index de8b4b18961b..09514252d84e 100644
--- a/include/linux/usb/usbnet.h
+++ b/include/linux/usb/usbnet.h
@@ -53,6 +53,7 @@ struct usbnet {
53 struct sk_buff_head rxq; 53 struct sk_buff_head rxq;
54 struct sk_buff_head txq; 54 struct sk_buff_head txq;
55 struct sk_buff_head done; 55 struct sk_buff_head done;
56 struct sk_buff_head rxq_pause;
56 struct urb *interrupt; 57 struct urb *interrupt;
57 struct tasklet_struct bh; 58 struct tasklet_struct bh;
58 59
@@ -63,6 +64,7 @@ struct usbnet {
63# define EVENT_RX_MEMORY 2 64# define EVENT_RX_MEMORY 2
64# define EVENT_STS_SPLIT 3 65# define EVENT_STS_SPLIT 3
65# define EVENT_LINK_RESET 4 66# define EVENT_LINK_RESET 4
67# define EVENT_RX_PAUSED 5
66}; 68};
67 69
68static inline struct usb_driver *driver_of(struct usb_interface *intf) 70static inline struct usb_driver *driver_of(struct usb_interface *intf)
@@ -190,6 +192,10 @@ extern void usbnet_defer_kevent (struct usbnet *, int);
190extern void usbnet_skb_return (struct usbnet *, struct sk_buff *); 192extern void usbnet_skb_return (struct usbnet *, struct sk_buff *);
191extern void usbnet_unlink_rx_urbs(struct usbnet *); 193extern void usbnet_unlink_rx_urbs(struct usbnet *);
192 194
195extern void usbnet_pause_rx(struct usbnet *);
196extern void usbnet_resume_rx(struct usbnet *);
197extern void usbnet_purge_paused_rxq(struct usbnet *);
198
193extern int usbnet_get_settings (struct net_device *net, struct ethtool_cmd *cmd); 199extern int usbnet_get_settings (struct net_device *net, struct ethtool_cmd *cmd);
194extern int usbnet_set_settings (struct net_device *net, struct ethtool_cmd *cmd); 200extern int usbnet_set_settings (struct net_device *net, struct ethtool_cmd *cmd);
195extern u32 usbnet_get_link (struct net_device *net); 201extern u32 usbnet_get_link (struct net_device *net);