diff options
Diffstat (limited to 'drivers/net/usb/rndis_host.c')
| -rw-r--r-- | drivers/net/usb/rndis_host.c | 18 |
1 files changed, 6 insertions, 12 deletions
diff --git a/drivers/net/usb/rndis_host.c b/drivers/net/usb/rndis_host.c index 28d3ee175e7b..dd8a4adf48ca 100644 --- a/drivers/net/usb/rndis_host.c +++ b/drivers/net/usb/rndis_host.c | |||
| @@ -104,10 +104,8 @@ static void rndis_msg_indicate(struct usbnet *dev, struct rndis_indicate *msg, | |||
| 104 | int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf, int buflen) | 104 | int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf, int buflen) |
| 105 | { | 105 | { |
| 106 | struct cdc_state *info = (void *) &dev->data; | 106 | struct cdc_state *info = (void *) &dev->data; |
| 107 | struct usb_cdc_notification notification; | ||
| 108 | int master_ifnum; | 107 | int master_ifnum; |
| 109 | int retval; | 108 | int retval; |
| 110 | int partial; | ||
| 111 | unsigned count; | 109 | unsigned count; |
| 112 | __le32 rsp; | 110 | __le32 rsp; |
| 113 | u32 xid = 0, msg_len, request_id; | 111 | u32 xid = 0, msg_len, request_id; |
| @@ -135,17 +133,13 @@ int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf, int buflen) | |||
| 135 | if (unlikely(retval < 0 || xid == 0)) | 133 | if (unlikely(retval < 0 || xid == 0)) |
| 136 | return retval; | 134 | return retval; |
| 137 | 135 | ||
| 138 | /* Some devices don't respond on the control channel until | 136 | // FIXME Seems like some devices discard responses when |
| 139 | * polled on the status channel, so do that first. */ | 137 | // we time out and cancel our "get response" requests... |
| 140 | retval = usb_interrupt_msg( | 138 | // so, this is fragile. Probably need to poll for status. |
| 141 | dev->udev, | ||
| 142 | usb_rcvintpipe(dev->udev, dev->status->desc.bEndpointAddress), | ||
| 143 | ¬ification, sizeof(notification), &partial, | ||
| 144 | RNDIS_CONTROL_TIMEOUT_MS); | ||
| 145 | if (unlikely(retval < 0)) | ||
| 146 | return retval; | ||
| 147 | 139 | ||
| 148 | /* Poll the control channel; the request probably completed immediately */ | 140 | /* ignore status endpoint, just poll the control channel; |
| 141 | * the request probably completed immediately | ||
| 142 | */ | ||
| 149 | rsp = buf->msg_type | RNDIS_MSG_COMPLETION; | 143 | rsp = buf->msg_type | RNDIS_MSG_COMPLETION; |
| 150 | for (count = 0; count < 10; count++) { | 144 | for (count = 0; count < 10; count++) { |
| 151 | memset(buf, 0, CONTROL_BUFFER_SIZE); | 145 | memset(buf, 0, CONTROL_BUFFER_SIZE); |
