diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00queue.c')
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00queue.c | 50 | 
1 files changed, 25 insertions, 25 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c index 2c12311467a9..aa95c6cf3545 100644 --- a/drivers/net/wireless/rt2x00/rt2x00queue.c +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c @@ -542,8 +542,8 @@ static int rt2x00queue_write_tx_data(struct queue_entry *entry,  	/*  	 * Add the requested extra tx headroom in front of the skb.  	 */ -	skb_push(entry->skb, rt2x00dev->ops->extra_tx_headroom); -	memset(entry->skb->data, 0, rt2x00dev->ops->extra_tx_headroom); +	skb_push(entry->skb, rt2x00dev->extra_tx_headroom); +	memset(entry->skb->data, 0, rt2x00dev->extra_tx_headroom);  	/*  	 * Call the driver's write_tx_data function, if it exists. @@ -596,7 +596,7 @@ static void rt2x00queue_bar_check(struct queue_entry *entry)  {  	struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;  	struct ieee80211_bar *bar = (void *) (entry->skb->data + -				    rt2x00dev->ops->extra_tx_headroom); +				    rt2x00dev->extra_tx_headroom);  	struct rt2x00_bar_list_entry *bar_entry;  	if (likely(!ieee80211_is_back_req(bar->frame_control))) @@ -936,13 +936,8 @@ void rt2x00queue_index_inc(struct queue_entry *entry, enum queue_index index)  	spin_unlock_irqrestore(&queue->index_lock, irqflags);  } -void rt2x00queue_pause_queue(struct data_queue *queue) +void rt2x00queue_pause_queue_nocheck(struct data_queue *queue)  { -	if (!test_bit(DEVICE_STATE_PRESENT, &queue->rt2x00dev->flags) || -	    !test_bit(QUEUE_STARTED, &queue->flags) || -	    test_and_set_bit(QUEUE_PAUSED, &queue->flags)) -		return; -  	switch (queue->qid) {  	case QID_AC_VO:  	case QID_AC_VI: @@ -958,6 +953,15 @@ void rt2x00queue_pause_queue(struct data_queue *queue)  		break;  	}  } +void rt2x00queue_pause_queue(struct data_queue *queue) +{ +	if (!test_bit(DEVICE_STATE_PRESENT, &queue->rt2x00dev->flags) || +	    !test_bit(QUEUE_STARTED, &queue->flags) || +	    test_and_set_bit(QUEUE_PAUSED, &queue->flags)) +		return; + +	rt2x00queue_pause_queue_nocheck(queue); +}  EXPORT_SYMBOL_GPL(rt2x00queue_pause_queue);  void rt2x00queue_unpause_queue(struct data_queue *queue) @@ -1019,7 +1023,7 @@ void rt2x00queue_stop_queue(struct data_queue *queue)  		return;  	} -	rt2x00queue_pause_queue(queue); +	rt2x00queue_pause_queue_nocheck(queue);  	queue->rt2x00dev->ops->lib->stop_queue(queue); @@ -1161,8 +1165,7 @@ void rt2x00queue_init_queues(struct rt2x00_dev *rt2x00dev)  	}  } -static int rt2x00queue_alloc_entries(struct data_queue *queue, -				     const struct data_queue_desc *qdesc) +static int rt2x00queue_alloc_entries(struct data_queue *queue)  {  	struct queue_entry *entries;  	unsigned int entry_size; @@ -1170,16 +1173,10 @@ static int rt2x00queue_alloc_entries(struct data_queue *queue,  	rt2x00queue_reset(queue); -	queue->limit = qdesc->entry_num; -	queue->threshold = DIV_ROUND_UP(qdesc->entry_num, 10); -	queue->data_size = qdesc->data_size; -	queue->desc_size = qdesc->desc_size; -	queue->winfo_size = qdesc->winfo_size; -  	/*  	 * Allocate all queue entries.  	 */ -	entry_size = sizeof(*entries) + qdesc->priv_size; +	entry_size = sizeof(*entries) + queue->priv_size;  	entries = kcalloc(queue->limit, entry_size, GFP_KERNEL);  	if (!entries)  		return -ENOMEM; @@ -1195,7 +1192,7 @@ static int rt2x00queue_alloc_entries(struct data_queue *queue,  		entries[i].entry_idx = i;  		entries[i].priv_data =  		    QUEUE_ENTRY_PRIV_OFFSET(entries, i, queue->limit, -					    sizeof(*entries), qdesc->priv_size); +					    sizeof(*entries), queue->priv_size);  	}  #undef QUEUE_ENTRY_PRIV_OFFSET @@ -1237,23 +1234,22 @@ int rt2x00queue_initialize(struct rt2x00_dev *rt2x00dev)  	struct data_queue *queue;  	int status; -	status = rt2x00queue_alloc_entries(rt2x00dev->rx, rt2x00dev->ops->rx); +	status = rt2x00queue_alloc_entries(rt2x00dev->rx);  	if (status)  		goto exit;  	tx_queue_for_each(rt2x00dev, queue) { -		status = rt2x00queue_alloc_entries(queue, rt2x00dev->ops->tx); +		status = rt2x00queue_alloc_entries(queue);  		if (status)  			goto exit;  	} -	status = rt2x00queue_alloc_entries(rt2x00dev->bcn, rt2x00dev->ops->bcn); +	status = rt2x00queue_alloc_entries(rt2x00dev->bcn);  	if (status)  		goto exit;  	if (test_bit(REQUIRE_ATIM_QUEUE, &rt2x00dev->cap_flags)) { -		status = rt2x00queue_alloc_entries(rt2x00dev->atim, -						   rt2x00dev->ops->atim); +		status = rt2x00queue_alloc_entries(rt2x00dev->atim);  		if (status)  			goto exit;  	} @@ -1297,6 +1293,10 @@ static void rt2x00queue_init(struct rt2x00_dev *rt2x00dev,  	queue->aifs = 2;  	queue->cw_min = 5;  	queue->cw_max = 10; + +	rt2x00dev->ops->queue_init(queue); + +	queue->threshold = DIV_ROUND_UP(queue->limit, 10);  }  int rt2x00queue_allocate(struct rt2x00_dev *rt2x00dev)  | 
