Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b00ac51 authored by Ben Hutchings's avatar Ben Hutchings Committed by David S. Miller
Browse files

net: Revert "rndis_host: Poll status channel before control channel"



This reverts commit c17b274d.

That change was reported to break rndis_wlan support for the WUSB54GS.

Reported-by: default avatarLuís Picciochi Oliveira <pitxyoki@gmail.com>
Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c89827e0
Loading
Loading
Loading
Loading
+6 −12
Original line number Diff line number Diff line
@@ -104,10 +104,8 @@ static void rndis_msg_indicate(struct usbnet *dev, struct rndis_indicate *msg,
int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf, int buflen)
{
	struct cdc_state	*info = (void *) &dev->data;
	struct usb_cdc_notification notification;
	int			master_ifnum;
	int			retval;
	int			partial;
	unsigned		count;
	__le32			rsp;
	u32			xid = 0, msg_len, request_id;
@@ -135,17 +133,13 @@ int rndis_command(struct usbnet *dev, struct rndis_msg_hdr *buf, int buflen)
	if (unlikely(retval < 0 || xid == 0))
		return retval;

	/* Some devices don't respond on the control channel until
	 * polled on the status channel, so do that first. */
	retval = usb_interrupt_msg(
		dev->udev,
		usb_rcvintpipe(dev->udev, dev->status->desc.bEndpointAddress),
		&notification, sizeof(notification), &partial,
		RNDIS_CONTROL_TIMEOUT_MS);
	if (unlikely(retval < 0))
		return retval;
	// FIXME Seems like some devices discard responses when
	// we time out and cancel our "get response" requests...
	// so, this is fragile.  Probably need to poll for status.

	/* Poll the control channel; the request probably completed immediately */
	/* ignore status endpoint, just poll the control channel;
	 * the request probably completed immediately
	 */
	rsp = buf->msg_type | RNDIS_MSG_COMPLETION;
	for (count = 0; count < 10; count++) {
		memset(buf, 0, CONTROL_BUFFER_SIZE);