zd1211rw: handle lost read-reg interrupts
commitc900eff30a14ecf209ee7a17a7c3c54890694ce6
authorJussi Kivilinna <jussi.kivilinna@mbnet.fi>
Mon, 20 Jun 2011 11:42:44 +0000 (20 14:42 +0300)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 22 Jun 2011 20:09:46 +0000 (22 16:09 -0400)
treea408e64682e04326bcb334409e0f1130f8222cde
parentf762d8c3f8b502b93d20bd755fc30ce99d3d0abd
zd1211rw: handle lost read-reg interrupts

Device losses read-reg interrupts. By looking at usbmon it appears that
USB_INT_ID_RETRY_FAILED can override USB_INT_ID_REGS. This causes read
command to timeout, usually under heavy TX.

Fix by retrying read registers again if USB_INT_ID_RETRY_FAILED is received
while waiting for USB_INT_ID_REGS.

However USB_INT_ID_REGS is not always lost but is received after
USB_INT_ID_RETRY_FAILED and is usually received by the retried read
command. USB_INT_ID_REGS of the retry is then left unhandled and might
be received by next read command. Handle this by ignoring previous
USB_INT_ID_REGS that doesn't match current read command request.

Signed-off-by: Jussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/zd1211rw/zd_usb.c
drivers/net/wireless/zd1211rw/zd_usb.h