diff options
author | Jussi Kivilinna <jussi.kivilinna@mbnet.fi> | 2009-08-11 15:57:16 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-08-14 09:14:04 -0400 |
commit | 7834ddbcc7a097443761b0722e8c9fb8511b95b1 (patch) | |
tree | f764502e46a6a5db52dcec7b961238161848e9b6 /include/linux | |
parent | d4de9532fd0b50d486259ace17650a58bbb751c2 (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.h | 6 |
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 | ||
68 | static inline struct usb_driver *driver_of(struct usb_interface *intf) | 70 | static inline struct usb_driver *driver_of(struct usb_interface *intf) |
@@ -190,6 +192,10 @@ extern void usbnet_defer_kevent (struct usbnet *, int); | |||
190 | extern void usbnet_skb_return (struct usbnet *, struct sk_buff *); | 192 | extern void usbnet_skb_return (struct usbnet *, struct sk_buff *); |
191 | extern void usbnet_unlink_rx_urbs(struct usbnet *); | 193 | extern void usbnet_unlink_rx_urbs(struct usbnet *); |
192 | 194 | ||
195 | extern void usbnet_pause_rx(struct usbnet *); | ||
196 | extern void usbnet_resume_rx(struct usbnet *); | ||
197 | extern void usbnet_purge_paused_rxq(struct usbnet *); | ||
198 | |||
193 | extern int usbnet_get_settings (struct net_device *net, struct ethtool_cmd *cmd); | 199 | extern int usbnet_get_settings (struct net_device *net, struct ethtool_cmd *cmd); |
194 | extern int usbnet_set_settings (struct net_device *net, struct ethtool_cmd *cmd); | 200 | extern int usbnet_set_settings (struct net_device *net, struct ethtool_cmd *cmd); |
195 | extern u32 usbnet_get_link (struct net_device *net); | 201 | extern u32 usbnet_get_link (struct net_device *net); |