diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00queue.c')
| -rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00queue.c | 57 | 
1 files changed, 31 insertions, 26 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c index 4d91795dc6a..2c12311467a 100644 --- a/drivers/net/wireless/rt2x00/rt2x00queue.c +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c @@ -35,7 +35,8 @@  struct sk_buff *rt2x00queue_alloc_rxskb(struct queue_entry *entry, gfp_t gfp)  { -	struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev; +	struct data_queue *queue = entry->queue; +	struct rt2x00_dev *rt2x00dev = queue->rt2x00dev;  	struct sk_buff *skb;  	struct skb_frame_desc *skbdesc;  	unsigned int frame_size; @@ -46,7 +47,7 @@ struct sk_buff *rt2x00queue_alloc_rxskb(struct queue_entry *entry, gfp_t gfp)  	 * The frame size includes descriptor size, because the  	 * hardware directly receive the frame into the skbuffer.  	 */ -	frame_size = entry->queue->data_size + entry->queue->desc_size; +	frame_size = queue->data_size + queue->desc_size + queue->winfo_size;  	/*  	 * The payload should be aligned to a 4-byte boundary, @@ -531,10 +532,10 @@ static int rt2x00queue_write_tx_data(struct queue_entry *entry,  	 */  	if (unlikely(rt2x00dev->ops->lib->get_entry_state &&  		     rt2x00dev->ops->lib->get_entry_state(entry))) { -		ERROR(rt2x00dev, -		      "Corrupt queue %d, accessing entry which is not ours.\n" -		      "Please file bug report to %s.\n", -		      entry->queue->qid, DRV_PROJECT); +		rt2x00_err(rt2x00dev, +			   "Corrupt queue %d, accessing entry which is not ours\n" +			   "Please file bug report to %s\n", +			   entry->queue->qid, DRV_PROJECT);  		return -EINVAL;  	} @@ -698,8 +699,8 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb,  	spin_lock(&queue->tx_lock);  	if (unlikely(rt2x00queue_full(queue))) { -		ERROR(queue->rt2x00dev, -		      "Dropping frame due to full tx queue %d.\n", queue->qid); +		rt2x00_err(queue->rt2x00dev, "Dropping frame due to full tx queue %d\n", +			   queue->qid);  		ret = -ENOBUFS;  		goto out;  	} @@ -708,10 +709,10 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb,  	if (unlikely(test_and_set_bit(ENTRY_OWNER_DEVICE_DATA,  				      &entry->flags))) { -		ERROR(queue->rt2x00dev, -		      "Arrived at non-free entry in the non-full queue %d.\n" -		      "Please file bug report to %s.\n", -		      queue->qid, DRV_PROJECT); +		rt2x00_err(queue->rt2x00dev, +			   "Arrived at non-free entry in the non-full queue %d\n" +			   "Please file bug report to %s\n", +			   queue->qid, DRV_PROJECT);  		ret = -EINVAL;  		goto out;  	} @@ -832,7 +833,9 @@ int rt2x00queue_update_beacon(struct rt2x00_dev *rt2x00dev,  bool rt2x00queue_for_each_entry(struct data_queue *queue,  				enum queue_index start,  				enum queue_index end, -				bool (*fn)(struct queue_entry *entry)) +				void *data, +				bool (*fn)(struct queue_entry *entry, +					   void *data))  {  	unsigned long irqflags;  	unsigned int index_start; @@ -840,9 +843,9 @@ bool rt2x00queue_for_each_entry(struct data_queue *queue,  	unsigned int i;  	if (unlikely(start >= Q_INDEX_MAX || end >= Q_INDEX_MAX)) { -		ERROR(queue->rt2x00dev, -		      "Entry requested from invalid index range (%d - %d)\n", -		      start, end); +		rt2x00_err(queue->rt2x00dev, +			   "Entry requested from invalid index range (%d - %d)\n", +			   start, end);  		return true;  	} @@ -863,17 +866,17 @@ bool rt2x00queue_for_each_entry(struct data_queue *queue,  	 */  	if (index_start < index_end) {  		for (i = index_start; i < index_end; i++) { -			if (fn(&queue->entries[i])) +			if (fn(&queue->entries[i], data))  				return true;  		}  	} else {  		for (i = index_start; i < queue->limit; i++) { -			if (fn(&queue->entries[i])) +			if (fn(&queue->entries[i], data))  				return true;  		}  		for (i = 0; i < index_end; i++) { -			if (fn(&queue->entries[i])) +			if (fn(&queue->entries[i], data))  				return true;  		}  	} @@ -889,8 +892,8 @@ struct queue_entry *rt2x00queue_get_entry(struct data_queue *queue,  	unsigned long irqflags;  	if (unlikely(index >= Q_INDEX_MAX)) { -		ERROR(queue->rt2x00dev, -		      "Entry requested from invalid index type (%d)\n", index); +		rt2x00_err(queue->rt2x00dev, "Entry requested from invalid index type (%d)\n", +			   index);  		return NULL;  	} @@ -910,8 +913,8 @@ void rt2x00queue_index_inc(struct queue_entry *entry, enum queue_index index)  	unsigned long irqflags;  	if (unlikely(index >= Q_INDEX_MAX)) { -		ERROR(queue->rt2x00dev, -		      "Index change on invalid index type (%d)\n", index); +		rt2x00_err(queue->rt2x00dev, +			   "Index change on invalid index type (%d)\n", index);  		return;  	} @@ -1071,7 +1074,8 @@ void rt2x00queue_flush_queue(struct data_queue *queue, bool drop)  	 * The queue flush has failed...  	 */  	if (unlikely(!rt2x00queue_empty(queue))) -		WARNING(queue->rt2x00dev, "Queue %d failed to flush\n", queue->qid); +		rt2x00_warn(queue->rt2x00dev, "Queue %d failed to flush\n", +			    queue->qid);  	/*  	 * Restore the queue to the previous status @@ -1170,6 +1174,7 @@ static int rt2x00queue_alloc_entries(struct data_queue *queue,  	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. @@ -1260,7 +1265,7 @@ int rt2x00queue_initialize(struct rt2x00_dev *rt2x00dev)  	return 0;  exit: -	ERROR(rt2x00dev, "Queue entries allocation failed.\n"); +	rt2x00_err(rt2x00dev, "Queue entries allocation failed\n");  	rt2x00queue_uninitialize(rt2x00dev); @@ -1312,7 +1317,7 @@ int rt2x00queue_allocate(struct rt2x00_dev *rt2x00dev)  	queue = kcalloc(rt2x00dev->data_queues, sizeof(*queue), GFP_KERNEL);  	if (!queue) { -		ERROR(rt2x00dev, "Queue allocation failed.\n"); +		rt2x00_err(rt2x00dev, "Queue allocation failed\n");  		return -ENOMEM;  	}  |