Commit 6295d815 authored by Gertjan van Wingerde's avatar Gertjan van Wingerde Committed by John W. Linville

rt2x00: Clean up generic procedures on descriptor writing.

With a little bit of restructuring it isn't necessary to have special
cases in rt2x00queue_write_tx_descriptor for writing the descriptor
for beacons.
Simply split off the kicking of the TX queue to a separate function
with is only called for non-beacons.
Signed-off-by: default avatarGertjan van Wingerde <gwingerde@gmail.com>
Acked-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 3b9f0ed7
...@@ -428,20 +428,23 @@ static void rt2x00queue_write_tx_descriptor(struct queue_entry *entry, ...@@ -428,20 +428,23 @@ static void rt2x00queue_write_tx_descriptor(struct queue_entry *entry,
* it is now ready to be dumped to userspace through debugfs. * it is now ready to be dumped to userspace through debugfs.
*/ */
rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_TX, entry->skb); rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_TX, entry->skb);
}
static void rt2x00queue_kick_tx_queue(struct queue_entry *entry,
struct txentry_desc *txdesc)
{
struct data_queue *queue = entry->queue;
struct rt2x00_dev *rt2x00dev = queue->rt2x00dev;
/* /*
* Check if we need to kick the queue, there are however a few rules * Check if we need to kick the queue, there are however a few rules
* 1) Don't kick beacon queue * 1) Don't kick unless this is the last in frame in a burst.
* 2) Don't kick unless this is the last in frame in a burst.
* When the burst flag is set, this frame is always followed * When the burst flag is set, this frame is always followed
* by another frame which in some way are related to eachother. * by another frame which in some way are related to eachother.
* This is true for fragments, RTS or CTS-to-self frames. * This is true for fragments, RTS or CTS-to-self frames.
* 3) Rule 2 can be broken when the available entries * 2) Rule 1 can be broken when the available entries
* in the queue are less then a certain threshold. * in the queue are less then a certain threshold.
*/ */
if (entry->queue->qid == QID_BEACON)
return;
if (rt2x00queue_threshold(queue) || if (rt2x00queue_threshold(queue) ||
!test_bit(ENTRY_TXD_BURST, &txdesc->flags)) !test_bit(ENTRY_TXD_BURST, &txdesc->flags))
rt2x00dev->ops->lib->kick_tx_queue(rt2x00dev, queue->qid); rt2x00dev->ops->lib->kick_tx_queue(rt2x00dev, queue->qid);
...@@ -537,6 +540,7 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb, ...@@ -537,6 +540,7 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb,
rt2x00queue_index_inc(queue, Q_INDEX); rt2x00queue_index_inc(queue, Q_INDEX);
rt2x00queue_write_tx_descriptor(entry, &txdesc); rt2x00queue_write_tx_descriptor(entry, &txdesc);
rt2x00queue_kick_tx_queue(entry, &txdesc);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment