rt2x00: Fix TX status reporting
The tx_status enumeration was broken since the introduction of rt61pci. That driver uses different values to report the status of the tx action. This would lead to frames that were reported as success but actually failed to be send out, or frames that were neither successfull or failure which were reported as failure. Fix this by change the TX status reporting and more explicitely check for failure or success. Note that a third possibility is added "unknown". Not all hardware (USB) can report the actual TX status, for rt61pci some frames will receive this status because the TXdone handler is never called for those frames. This unknown will now be handled as neither success or failure, so we no longer increment the failure counter while this conclusion could not be determined from the real status of the frame. Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
5a6e59991b
commit
fb55f4d1fa
@ -147,8 +147,17 @@ static void rt2x00usb_interrupt_txdone(struct urb *urb)
|
||||
|
||||
/*
|
||||
* Obtain the status about this packet.
|
||||
* Note that when the status is 0 it does not mean the
|
||||
* frame was send out correctly. It only means the frame
|
||||
* was succesfully pushed to the hardware, we have no
|
||||
* way to determine the transmission status right now.
|
||||
* (Only indirectly by looking at the failed TX counters
|
||||
* in the register).
|
||||
*/
|
||||
txdesc.status = !urb->status ? TX_SUCCESS : TX_FAIL_RETRY;
|
||||
if (!urb->status)
|
||||
__set_bit(TXDONE_UNKNOWN, &txdesc.flags);
|
||||
else
|
||||
__set_bit(TXDONE_FAILURE, &txdesc.flags);
|
||||
txdesc.retry = 0;
|
||||
txdesc.control = &priv_tx->control;
|
||||
|
||||
|
Reference in New Issue
Block a user