diff options
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt2x00queue.c')
-rw-r--r-- | drivers/net/wireless/rt2x00/rt2x00queue.c | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/drivers/net/wireless/rt2x00/rt2x00queue.c b/drivers/net/wireless/rt2x00/rt2x00queue.c index 29d2b9128533..49d3bb84ab6b 100644 --- a/drivers/net/wireless/rt2x00/rt2x00queue.c +++ b/drivers/net/wireless/rt2x00/rt2x00queue.c | |||
@@ -77,7 +77,6 @@ struct sk_buff *rt2x00queue_alloc_rxskb(struct rt2x00_dev *rt2x00dev, | |||
77 | 77 | ||
78 | return skb; | 78 | return skb; |
79 | } | 79 | } |
80 | EXPORT_SYMBOL_GPL(rt2x00queue_alloc_rxskb); | ||
81 | 80 | ||
82 | void rt2x00queue_map_txskb(struct rt2x00_dev *rt2x00dev, struct sk_buff *skb) | 81 | void rt2x00queue_map_txskb(struct rt2x00_dev *rt2x00dev, struct sk_buff *skb) |
83 | { | 82 | { |
@@ -105,7 +104,6 @@ void rt2x00queue_unmap_skb(struct rt2x00_dev *rt2x00dev, struct sk_buff *skb) | |||
105 | skbdesc->flags &= ~SKBDESC_DMA_MAPPED_TX; | 104 | skbdesc->flags &= ~SKBDESC_DMA_MAPPED_TX; |
106 | } | 105 | } |
107 | } | 106 | } |
108 | EXPORT_SYMBOL_GPL(rt2x00queue_unmap_skb); | ||
109 | 107 | ||
110 | void rt2x00queue_free_skb(struct rt2x00_dev *rt2x00dev, struct sk_buff *skb) | 108 | void rt2x00queue_free_skb(struct rt2x00_dev *rt2x00dev, struct sk_buff *skb) |
111 | { | 109 | { |
@@ -123,7 +121,6 @@ void rt2x00queue_free_skb(struct rt2x00_dev *rt2x00dev, struct sk_buff *skb) | |||
123 | 121 | ||
124 | dev_kfree_skb_any(skb); | 122 | dev_kfree_skb_any(skb); |
125 | } | 123 | } |
126 | EXPORT_SYMBOL_GPL(rt2x00queue_free_skb); | ||
127 | 124 | ||
128 | void rt2x00queue_create_tx_descriptor(struct queue_entry *entry, | 125 | void rt2x00queue_create_tx_descriptor(struct queue_entry *entry, |
129 | struct txentry_desc *txdesc) | 126 | struct txentry_desc *txdesc) |
@@ -289,6 +286,7 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb) | |||
289 | { | 286 | { |
290 | struct queue_entry *entry = rt2x00queue_get_entry(queue, Q_INDEX); | 287 | struct queue_entry *entry = rt2x00queue_get_entry(queue, Q_INDEX); |
291 | struct txentry_desc txdesc; | 288 | struct txentry_desc txdesc; |
289 | struct skb_frame_desc *skbdesc; | ||
292 | 290 | ||
293 | if (unlikely(rt2x00queue_full(queue))) | 291 | if (unlikely(rt2x00queue_full(queue))) |
294 | return -EINVAL; | 292 | return -EINVAL; |
@@ -309,11 +307,21 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb) | |||
309 | entry->skb = skb; | 307 | entry->skb = skb; |
310 | rt2x00queue_create_tx_descriptor(entry, &txdesc); | 308 | rt2x00queue_create_tx_descriptor(entry, &txdesc); |
311 | 309 | ||
310 | /* | ||
311 | * skb->cb array is now ours and we are free to use it. | ||
312 | */ | ||
313 | skbdesc = get_skb_frame_desc(entry->skb); | ||
314 | memset(skbdesc, 0, sizeof(*skbdesc)); | ||
315 | skbdesc->entry = entry; | ||
316 | |||
312 | if (unlikely(queue->rt2x00dev->ops->lib->write_tx_data(entry))) { | 317 | if (unlikely(queue->rt2x00dev->ops->lib->write_tx_data(entry))) { |
313 | __clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags); | 318 | __clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags); |
314 | return -EIO; | 319 | return -EIO; |
315 | } | 320 | } |
316 | 321 | ||
322 | if (test_bit(DRIVER_REQUIRE_DMA, &queue->rt2x00dev->flags)) | ||
323 | rt2x00queue_map_txskb(queue->rt2x00dev, skb); | ||
324 | |||
317 | __set_bit(ENTRY_DATA_PENDING, &entry->flags); | 325 | __set_bit(ENTRY_DATA_PENDING, &entry->flags); |
318 | 326 | ||
319 | rt2x00queue_index_inc(queue, Q_INDEX); | 327 | rt2x00queue_index_inc(queue, Q_INDEX); |
@@ -389,7 +397,6 @@ void rt2x00queue_index_inc(struct data_queue *queue, enum queue_index index) | |||
389 | 397 | ||
390 | spin_unlock_irqrestore(&queue->lock, irqflags); | 398 | spin_unlock_irqrestore(&queue->lock, irqflags); |
391 | } | 399 | } |
392 | EXPORT_SYMBOL_GPL(rt2x00queue_index_inc); | ||
393 | 400 | ||
394 | static void rt2x00queue_reset(struct data_queue *queue) | 401 | static void rt2x00queue_reset(struct data_queue *queue) |
395 | { | 402 | { |