|
@@ -114,12 +114,12 @@ static bool rt2800usb_txstatus_pending(struct rt2x00_dev *rt2x00dev)
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
-static void rt2800usb_tx_sta_fifo_read_completed(struct rt2x00_dev *rt2x00dev,
|
|
|
+static bool rt2800usb_tx_sta_fifo_read_completed(struct rt2x00_dev *rt2x00dev,
|
|
|
int urb_status, u32 tx_status)
|
|
|
{
|
|
|
if (urb_status) {
|
|
|
WARNING(rt2x00dev, "rt2x00usb_register_read_async failed: %d\n", urb_status);
|
|
|
- return;
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
/* try to read all TX_STA_FIFO entries before scheduling txdone_work */
|
|
@@ -129,13 +129,14 @@ static void rt2800usb_tx_sta_fifo_read_completed(struct rt2x00_dev *rt2x00dev,
|
|
|
"drop tx status report.\n");
|
|
|
queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work);
|
|
|
} else
|
|
|
- rt2x00usb_register_read_async(rt2x00dev, TX_STA_FIFO,
|
|
|
- rt2800usb_tx_sta_fifo_read_completed);
|
|
|
+ return true;
|
|
|
} else if (!kfifo_is_empty(&rt2x00dev->txstatus_fifo)) {
|
|
|
queue_work(rt2x00dev->workqueue, &rt2x00dev->txdone_work);
|
|
|
} else if (rt2800usb_txstatus_pending(rt2x00dev)) {
|
|
|
mod_timer(&rt2x00dev->txstatus_timer, jiffies + msecs_to_jiffies(2));
|
|
|
}
|
|
|
+
|
|
|
+ return false;
|
|
|
}
|
|
|
|
|
|
static void rt2800usb_tx_dma_done(struct queue_entry *entry)
|