mirror of https://gitee.com/openkylin/linux.git
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: Gertjan van Wingerde <gwingerde@gmail.com> Acked-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
3b9f0ed78c
commit
6295d81552
|
@ -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,
|
||||||
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue