Merge branch 'ixp4xx' of git://git.kernel.org/pub/scm/linux/kernel/git/chris/linux-2.6
[pandora-kernel.git] / drivers / net / wireless / rt2x00 / rt2x00queue.c
1 /*
2         Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com>
3         Copyright (C) 2004 - 2009 Gertjan van Wingerde <gwingerde@gmail.com>
4         <http://rt2x00.serialmonkey.com>
5
6         This program is free software; you can redistribute it and/or modify
7         it under the terms of the GNU General Public License as published by
8         the Free Software Foundation; either version 2 of the License, or
9         (at your option) any later version.
10
11         This program is distributed in the hope that it will be useful,
12         but WITHOUT ANY WARRANTY; without even the implied warranty of
13         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14         GNU General Public License for more details.
15
16         You should have received a copy of the GNU General Public License
17         along with this program; if not, write to the
18         Free Software Foundation, Inc.,
19         59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20  */
21
22 /*
23         Module: rt2x00lib
24         Abstract: rt2x00 queue specific routines.
25  */
26
27 #include <linux/slab.h>
28 #include <linux/kernel.h>
29 #include <linux/module.h>
30 #include <linux/dma-mapping.h>
31
32 #include "rt2x00.h"
33 #include "rt2x00lib.h"
34
35 struct sk_buff *rt2x00queue_alloc_rxskb(struct rt2x00_dev *rt2x00dev,
36                                         struct queue_entry *entry)
37 {
38         struct sk_buff *skb;
39         struct skb_frame_desc *skbdesc;
40         unsigned int frame_size;
41         unsigned int head_size = 0;
42         unsigned int tail_size = 0;
43
44         /*
45          * The frame size includes descriptor size, because the
46          * hardware directly receive the frame into the skbuffer.
47          */
48         frame_size = entry->queue->data_size + entry->queue->desc_size;
49
50         /*
51          * The payload should be aligned to a 4-byte boundary,
52          * this means we need at least 3 bytes for moving the frame
53          * into the correct offset.
54          */
55         head_size = 4;
56
57         /*
58          * For IV/EIV/ICV assembly we must make sure there is
59          * at least 8 bytes bytes available in headroom for IV/EIV
60          * and 8 bytes for ICV data as tailroon.
61          */
62         if (test_bit(CONFIG_SUPPORT_HW_CRYPTO, &rt2x00dev->flags)) {
63                 head_size += 8;
64                 tail_size += 8;
65         }
66
67         /*
68          * Allocate skbuffer.
69          */
70         skb = dev_alloc_skb(frame_size + head_size + tail_size);
71         if (!skb)
72                 return NULL;
73
74         /*
75          * Make sure we not have a frame with the requested bytes
76          * available in the head and tail.
77          */
78         skb_reserve(skb, head_size);
79         skb_put(skb, frame_size);
80
81         /*
82          * Populate skbdesc.
83          */
84         skbdesc = get_skb_frame_desc(skb);
85         memset(skbdesc, 0, sizeof(*skbdesc));
86         skbdesc->entry = entry;
87
88         if (test_bit(DRIVER_REQUIRE_DMA, &rt2x00dev->flags)) {
89                 skbdesc->skb_dma = dma_map_single(rt2x00dev->dev,
90                                                   skb->data,
91                                                   skb->len,
92                                                   DMA_FROM_DEVICE);
93                 skbdesc->flags |= SKBDESC_DMA_MAPPED_RX;
94         }
95
96         return skb;
97 }
98
99 void rt2x00queue_map_txskb(struct rt2x00_dev *rt2x00dev, struct sk_buff *skb)
100 {
101         struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb);
102
103         skbdesc->skb_dma =
104             dma_map_single(rt2x00dev->dev, skb->data, skb->len, DMA_TO_DEVICE);
105         skbdesc->flags |= SKBDESC_DMA_MAPPED_TX;
106 }
107 EXPORT_SYMBOL_GPL(rt2x00queue_map_txskb);
108
109 void rt2x00queue_unmap_skb(struct rt2x00_dev *rt2x00dev, struct sk_buff *skb)
110 {
111         struct skb_frame_desc *skbdesc = get_skb_frame_desc(skb);
112
113         if (skbdesc->flags & SKBDESC_DMA_MAPPED_RX) {
114                 dma_unmap_single(rt2x00dev->dev, skbdesc->skb_dma, skb->len,
115                                  DMA_FROM_DEVICE);
116                 skbdesc->flags &= ~SKBDESC_DMA_MAPPED_RX;
117         }
118
119         if (skbdesc->flags & SKBDESC_DMA_MAPPED_TX) {
120                 dma_unmap_single(rt2x00dev->dev, skbdesc->skb_dma, skb->len,
121                                  DMA_TO_DEVICE);
122                 skbdesc->flags &= ~SKBDESC_DMA_MAPPED_TX;
123         }
124 }
125 EXPORT_SYMBOL_GPL(rt2x00queue_unmap_skb);
126
127 void rt2x00queue_free_skb(struct rt2x00_dev *rt2x00dev, struct sk_buff *skb)
128 {
129         if (!skb)
130                 return;
131
132         rt2x00queue_unmap_skb(rt2x00dev, skb);
133         dev_kfree_skb_any(skb);
134 }
135
136 void rt2x00queue_align_frame(struct sk_buff *skb)
137 {
138         unsigned int frame_length = skb->len;
139         unsigned int align = ALIGN_SIZE(skb, 0);
140
141         if (!align)
142                 return;
143
144         skb_push(skb, align);
145         memmove(skb->data, skb->data + align, frame_length);
146         skb_trim(skb, frame_length);
147 }
148
149 void rt2x00queue_align_payload(struct sk_buff *skb, unsigned int header_length)
150 {
151         unsigned int frame_length = skb->len;
152         unsigned int align = ALIGN_SIZE(skb, header_length);
153
154         if (!align)
155                 return;
156
157         skb_push(skb, align);
158         memmove(skb->data, skb->data + align, frame_length);
159         skb_trim(skb, frame_length);
160 }
161
162 void rt2x00queue_insert_l2pad(struct sk_buff *skb, unsigned int header_length)
163 {
164         unsigned int payload_length = skb->len - header_length;
165         unsigned int header_align = ALIGN_SIZE(skb, 0);
166         unsigned int payload_align = ALIGN_SIZE(skb, header_length);
167         unsigned int l2pad = payload_length ? L2PAD_SIZE(header_length) : 0;
168
169         /*
170          * Adjust the header alignment if the payload needs to be moved more
171          * than the header.
172          */
173         if (payload_align > header_align)
174                 header_align += 4;
175
176         /* There is nothing to do if no alignment is needed */
177         if (!header_align)
178                 return;
179
180         /* Reserve the amount of space needed in front of the frame */
181         skb_push(skb, header_align);
182
183         /*
184          * Move the header.
185          */
186         memmove(skb->data, skb->data + header_align, header_length);
187
188         /* Move the payload, if present and if required */
189         if (payload_length && payload_align)
190                 memmove(skb->data + header_length + l2pad,
191                         skb->data + header_length + l2pad + payload_align,
192                         payload_length);
193
194         /* Trim the skb to the correct size */
195         skb_trim(skb, header_length + l2pad + payload_length);
196 }
197
198 void rt2x00queue_remove_l2pad(struct sk_buff *skb, unsigned int header_length)
199 {
200         unsigned int l2pad = L2PAD_SIZE(header_length);
201
202         if (!l2pad)
203                 return;
204
205         memmove(skb->data + l2pad, skb->data, header_length);
206         skb_pull(skb, l2pad);
207 }
208
209 static void rt2x00queue_create_tx_descriptor_seq(struct queue_entry *entry,
210                                                  struct txentry_desc *txdesc)
211 {
212         struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(entry->skb);
213         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)entry->skb->data;
214         struct rt2x00_intf *intf = vif_to_intf(tx_info->control.vif);
215         unsigned long irqflags;
216
217         if (!(tx_info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) ||
218             unlikely(!tx_info->control.vif))
219                 return;
220
221         /*
222          * Hardware should insert sequence counter.
223          * FIXME: We insert a software sequence counter first for
224          * hardware that doesn't support hardware sequence counting.
225          *
226          * This is wrong because beacons are not getting sequence
227          * numbers assigned properly.
228          *
229          * A secondary problem exists for drivers that cannot toggle
230          * sequence counting per-frame, since those will override the
231          * sequence counter given by mac80211.
232          */
233         spin_lock_irqsave(&intf->seqlock, irqflags);
234
235         if (test_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags))
236                 intf->seqno += 0x10;
237         hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG);
238         hdr->seq_ctrl |= cpu_to_le16(intf->seqno);
239
240         spin_unlock_irqrestore(&intf->seqlock, irqflags);
241
242         __set_bit(ENTRY_TXD_GENERATE_SEQ, &txdesc->flags);
243 }
244
245 static void rt2x00queue_create_tx_descriptor_plcp(struct queue_entry *entry,
246                                                   struct txentry_desc *txdesc,
247                                                   const struct rt2x00_rate *hwrate)
248 {
249         struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
250         struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(entry->skb);
251         struct ieee80211_tx_rate *txrate = &tx_info->control.rates[0];
252         unsigned int data_length;
253         unsigned int duration;
254         unsigned int residual;
255
256         /* Data length + CRC + Crypto overhead (IV/EIV/ICV/MIC) */
257         data_length = entry->skb->len + 4;
258         data_length += rt2x00crypto_tx_overhead(rt2x00dev, entry->skb);
259
260         /*
261          * PLCP setup
262          * Length calculation depends on OFDM/CCK rate.
263          */
264         txdesc->signal = hwrate->plcp;
265         txdesc->service = 0x04;
266
267         if (hwrate->flags & DEV_RATE_OFDM) {
268                 txdesc->length_high = (data_length >> 6) & 0x3f;
269                 txdesc->length_low = data_length & 0x3f;
270         } else {
271                 /*
272                  * Convert length to microseconds.
273                  */
274                 residual = GET_DURATION_RES(data_length, hwrate->bitrate);
275                 duration = GET_DURATION(data_length, hwrate->bitrate);
276
277                 if (residual != 0) {
278                         duration++;
279
280                         /*
281                          * Check if we need to set the Length Extension
282                          */
283                         if (hwrate->bitrate == 110 && residual <= 30)
284                                 txdesc->service |= 0x80;
285                 }
286
287                 txdesc->length_high = (duration >> 8) & 0xff;
288                 txdesc->length_low = duration & 0xff;
289
290                 /*
291                  * When preamble is enabled we should set the
292                  * preamble bit for the signal.
293                  */
294                 if (txrate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE)
295                         txdesc->signal |= 0x08;
296         }
297 }
298
299 static void rt2x00queue_create_tx_descriptor(struct queue_entry *entry,
300                                              struct txentry_desc *txdesc)
301 {
302         struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
303         struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(entry->skb);
304         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)entry->skb->data;
305         struct ieee80211_rate *rate =
306             ieee80211_get_tx_rate(rt2x00dev->hw, tx_info);
307         const struct rt2x00_rate *hwrate;
308
309         memset(txdesc, 0, sizeof(*txdesc));
310
311         /*
312          * Initialize information from queue
313          */
314         txdesc->queue = entry->queue->qid;
315         txdesc->cw_min = entry->queue->cw_min;
316         txdesc->cw_max = entry->queue->cw_max;
317         txdesc->aifs = entry->queue->aifs;
318
319         /*
320          * Header and frame information.
321          */
322         txdesc->length = entry->skb->len;
323         txdesc->header_length = ieee80211_get_hdrlen_from_skb(entry->skb);
324
325         /*
326          * Check whether this frame is to be acked.
327          */
328         if (!(tx_info->flags & IEEE80211_TX_CTL_NO_ACK))
329                 __set_bit(ENTRY_TXD_ACK, &txdesc->flags);
330
331         /*
332          * Check if this is a RTS/CTS frame
333          */
334         if (ieee80211_is_rts(hdr->frame_control) ||
335             ieee80211_is_cts(hdr->frame_control)) {
336                 __set_bit(ENTRY_TXD_BURST, &txdesc->flags);
337                 if (ieee80211_is_rts(hdr->frame_control))
338                         __set_bit(ENTRY_TXD_RTS_FRAME, &txdesc->flags);
339                 else
340                         __set_bit(ENTRY_TXD_CTS_FRAME, &txdesc->flags);
341                 if (tx_info->control.rts_cts_rate_idx >= 0)
342                         rate =
343                             ieee80211_get_rts_cts_rate(rt2x00dev->hw, tx_info);
344         }
345
346         /*
347          * Determine retry information.
348          */
349         txdesc->retry_limit = tx_info->control.rates[0].count - 1;
350         if (txdesc->retry_limit >= rt2x00dev->long_retry)
351                 __set_bit(ENTRY_TXD_RETRY_MODE, &txdesc->flags);
352
353         /*
354          * Check if more fragments are pending
355          */
356         if (ieee80211_has_morefrags(hdr->frame_control)) {
357                 __set_bit(ENTRY_TXD_BURST, &txdesc->flags);
358                 __set_bit(ENTRY_TXD_MORE_FRAG, &txdesc->flags);
359         }
360
361         /*
362          * Check if more frames (!= fragments) are pending
363          */
364         if (tx_info->flags & IEEE80211_TX_CTL_MORE_FRAMES)
365                 __set_bit(ENTRY_TXD_BURST, &txdesc->flags);
366
367         /*
368          * Beacons and probe responses require the tsf timestamp
369          * to be inserted into the frame, except for a frame that has been injected
370          * through a monitor interface. This latter is needed for testing a
371          * monitor interface.
372          */
373         if ((ieee80211_is_beacon(hdr->frame_control) ||
374             ieee80211_is_probe_resp(hdr->frame_control)) &&
375             (!(tx_info->flags & IEEE80211_TX_CTL_INJECTED)))
376                 __set_bit(ENTRY_TXD_REQ_TIMESTAMP, &txdesc->flags);
377
378         /*
379          * Determine with what IFS priority this frame should be send.
380          * Set ifs to IFS_SIFS when the this is not the first fragment,
381          * or this fragment came after RTS/CTS.
382          */
383         if ((tx_info->flags & IEEE80211_TX_CTL_FIRST_FRAGMENT) &&
384             !test_bit(ENTRY_TXD_RTS_FRAME, &txdesc->flags)) {
385                 __set_bit(ENTRY_TXD_FIRST_FRAGMENT, &txdesc->flags);
386                 txdesc->ifs = IFS_BACKOFF;
387         } else
388                 txdesc->ifs = IFS_SIFS;
389
390         /*
391          * Determine rate modulation.
392          */
393         hwrate = rt2x00_get_rate(rate->hw_value);
394         txdesc->rate_mode = RATE_MODE_CCK;
395         if (hwrate->flags & DEV_RATE_OFDM)
396                 txdesc->rate_mode = RATE_MODE_OFDM;
397
398         /*
399          * Apply TX descriptor handling by components
400          */
401         rt2x00crypto_create_tx_descriptor(entry, txdesc);
402         rt2x00ht_create_tx_descriptor(entry, txdesc, hwrate);
403         rt2x00queue_create_tx_descriptor_seq(entry, txdesc);
404         rt2x00queue_create_tx_descriptor_plcp(entry, txdesc, hwrate);
405 }
406
407 static int rt2x00queue_write_tx_data(struct queue_entry *entry,
408                                      struct txentry_desc *txdesc)
409 {
410         struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
411
412         /*
413          * This should not happen, we already checked the entry
414          * was ours. When the hardware disagrees there has been
415          * a queue corruption!
416          */
417         if (unlikely(rt2x00dev->ops->lib->get_entry_state &&
418                      rt2x00dev->ops->lib->get_entry_state(entry))) {
419                 ERROR(rt2x00dev,
420                       "Corrupt queue %d, accessing entry which is not ours.\n"
421                       "Please file bug report to %s.\n",
422                       entry->queue->qid, DRV_PROJECT);
423                 return -EINVAL;
424         }
425
426         /*
427          * Add the requested extra tx headroom in front of the skb.
428          */
429         skb_push(entry->skb, rt2x00dev->ops->extra_tx_headroom);
430         memset(entry->skb->data, 0, rt2x00dev->ops->extra_tx_headroom);
431
432         /*
433          * Call the driver's write_tx_data function, if it exists.
434          */
435         if (rt2x00dev->ops->lib->write_tx_data)
436                 rt2x00dev->ops->lib->write_tx_data(entry, txdesc);
437
438         /*
439          * Map the skb to DMA.
440          */
441         if (test_bit(DRIVER_REQUIRE_DMA, &rt2x00dev->flags))
442                 rt2x00queue_map_txskb(rt2x00dev, entry->skb);
443
444         return 0;
445 }
446
447 static void rt2x00queue_write_tx_descriptor(struct queue_entry *entry,
448                                             struct txentry_desc *txdesc)
449 {
450         struct data_queue *queue = entry->queue;
451         struct rt2x00_dev *rt2x00dev = queue->rt2x00dev;
452
453         rt2x00dev->ops->lib->write_tx_desc(rt2x00dev, entry->skb, txdesc);
454
455         /*
456          * All processing on the frame has been completed, this means
457          * it is now ready to be dumped to userspace through debugfs.
458          */
459         rt2x00debug_dump_frame(rt2x00dev, DUMP_FRAME_TX, entry->skb);
460 }
461
462 static void rt2x00queue_kick_tx_queue(struct queue_entry *entry,
463                                       struct txentry_desc *txdesc)
464 {
465         struct data_queue *queue = entry->queue;
466         struct rt2x00_dev *rt2x00dev = queue->rt2x00dev;
467
468         /*
469          * Check if we need to kick the queue, there are however a few rules
470          *      1) Don't kick unless this is the last in frame in a burst.
471          *         When the burst flag is set, this frame is always followed
472          *         by another frame which in some way are related to eachother.
473          *         This is true for fragments, RTS or CTS-to-self frames.
474          *      2) Rule 1 can be broken when the available entries
475          *         in the queue are less then a certain threshold.
476          */
477         if (rt2x00queue_threshold(queue) ||
478             !test_bit(ENTRY_TXD_BURST, &txdesc->flags))
479                 rt2x00dev->ops->lib->kick_tx_queue(rt2x00dev, queue->qid);
480 }
481
482 int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb,
483                                bool local)
484 {
485         struct ieee80211_tx_info *tx_info;
486         struct queue_entry *entry = rt2x00queue_get_entry(queue, Q_INDEX);
487         struct txentry_desc txdesc;
488         struct skb_frame_desc *skbdesc;
489         u8 rate_idx, rate_flags;
490
491         if (unlikely(rt2x00queue_full(queue)))
492                 return -ENOBUFS;
493
494         if (test_and_set_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags)) {
495                 ERROR(queue->rt2x00dev,
496                       "Arrived at non-free entry in the non-full queue %d.\n"
497                       "Please file bug report to %s.\n",
498                       queue->qid, DRV_PROJECT);
499                 return -EINVAL;
500         }
501
502         /*
503          * Copy all TX descriptor information into txdesc,
504          * after that we are free to use the skb->cb array
505          * for our information.
506          */
507         entry->skb = skb;
508         rt2x00queue_create_tx_descriptor(entry, &txdesc);
509
510         /*
511          * All information is retrieved from the skb->cb array,
512          * now we should claim ownership of the driver part of that
513          * array, preserving the bitrate index and flags.
514          */
515         tx_info = IEEE80211_SKB_CB(skb);
516         rate_idx = tx_info->control.rates[0].idx;
517         rate_flags = tx_info->control.rates[0].flags;
518         skbdesc = get_skb_frame_desc(skb);
519         memset(skbdesc, 0, sizeof(*skbdesc));
520         skbdesc->entry = entry;
521         skbdesc->tx_rate_idx = rate_idx;
522         skbdesc->tx_rate_flags = rate_flags;
523
524         if (local)
525                 skbdesc->flags |= SKBDESC_NOT_MAC80211;
526
527         /*
528          * When hardware encryption is supported, and this frame
529          * is to be encrypted, we should strip the IV/EIV data from
530          * the frame so we can provide it to the driver separately.
531          */
532         if (test_bit(ENTRY_TXD_ENCRYPT, &txdesc.flags) &&
533             !test_bit(ENTRY_TXD_ENCRYPT_IV, &txdesc.flags)) {
534                 if (test_bit(DRIVER_REQUIRE_COPY_IV, &queue->rt2x00dev->flags))
535                         rt2x00crypto_tx_copy_iv(skb, &txdesc);
536                 else
537                         rt2x00crypto_tx_remove_iv(skb, &txdesc);
538         }
539
540         /*
541          * When DMA allocation is required we should guarentee to the
542          * driver that the DMA is aligned to a 4-byte boundary.
543          * However some drivers require L2 padding to pad the payload
544          * rather then the header. This could be a requirement for
545          * PCI and USB devices, while header alignment only is valid
546          * for PCI devices.
547          */
548         if (test_bit(DRIVER_REQUIRE_L2PAD, &queue->rt2x00dev->flags))
549                 rt2x00queue_insert_l2pad(entry->skb, txdesc.header_length);
550         else if (test_bit(DRIVER_REQUIRE_DMA, &queue->rt2x00dev->flags))
551                 rt2x00queue_align_frame(entry->skb);
552
553         /*
554          * It could be possible that the queue was corrupted and this
555          * call failed. Since we always return NETDEV_TX_OK to mac80211,
556          * this frame will simply be dropped.
557          */
558         if (unlikely(rt2x00queue_write_tx_data(entry, &txdesc))) {
559                 clear_bit(ENTRY_OWNER_DEVICE_DATA, &entry->flags);
560                 entry->skb = NULL;
561                 return -EIO;
562         }
563
564         set_bit(ENTRY_DATA_PENDING, &entry->flags);
565
566         rt2x00queue_index_inc(queue, Q_INDEX);
567         rt2x00queue_write_tx_descriptor(entry, &txdesc);
568         rt2x00queue_kick_tx_queue(entry, &txdesc);
569
570         return 0;
571 }
572
573 int rt2x00queue_update_beacon(struct rt2x00_dev *rt2x00dev,
574                               struct ieee80211_vif *vif,
575                               const bool enable_beacon)
576 {
577         struct rt2x00_intf *intf = vif_to_intf(vif);
578         struct skb_frame_desc *skbdesc;
579         struct txentry_desc txdesc;
580
581         if (unlikely(!intf->beacon))
582                 return -ENOBUFS;
583
584         mutex_lock(&intf->beacon_skb_mutex);
585
586         /*
587          * Clean up the beacon skb.
588          */
589         rt2x00queue_free_skb(rt2x00dev, intf->beacon->skb);
590         intf->beacon->skb = NULL;
591
592         if (!enable_beacon) {
593                 rt2x00dev->ops->lib->kill_tx_queue(rt2x00dev, QID_BEACON);
594                 mutex_unlock(&intf->beacon_skb_mutex);
595                 return 0;
596         }
597
598         intf->beacon->skb = ieee80211_beacon_get(rt2x00dev->hw, vif);
599         if (!intf->beacon->skb) {
600                 mutex_unlock(&intf->beacon_skb_mutex);
601                 return -ENOMEM;
602         }
603
604         /*
605          * Copy all TX descriptor information into txdesc,
606          * after that we are free to use the skb->cb array
607          * for our information.
608          */
609         rt2x00queue_create_tx_descriptor(intf->beacon, &txdesc);
610
611         /*
612          * Fill in skb descriptor
613          */
614         skbdesc = get_skb_frame_desc(intf->beacon->skb);
615         memset(skbdesc, 0, sizeof(*skbdesc));
616         skbdesc->entry = intf->beacon;
617
618         /*
619          * Send beacon to hardware and enable beacon genaration..
620          */
621         rt2x00dev->ops->lib->write_beacon(intf->beacon, &txdesc);
622
623         mutex_unlock(&intf->beacon_skb_mutex);
624
625         return 0;
626 }
627
628 struct data_queue *rt2x00queue_get_queue(struct rt2x00_dev *rt2x00dev,
629                                          const enum data_queue_qid queue)
630 {
631         int atim = test_bit(DRIVER_REQUIRE_ATIM_QUEUE, &rt2x00dev->flags);
632
633         if (queue == QID_RX)
634                 return rt2x00dev->rx;
635
636         if (queue < rt2x00dev->ops->tx_queues && rt2x00dev->tx)
637                 return &rt2x00dev->tx[queue];
638
639         if (!rt2x00dev->bcn)
640                 return NULL;
641
642         if (queue == QID_BEACON)
643                 return &rt2x00dev->bcn[0];
644         else if (queue == QID_ATIM && atim)
645                 return &rt2x00dev->bcn[1];
646
647         return NULL;
648 }
649 EXPORT_SYMBOL_GPL(rt2x00queue_get_queue);
650
651 struct queue_entry *rt2x00queue_get_entry(struct data_queue *queue,
652                                           enum queue_index index)
653 {
654         struct queue_entry *entry;
655         unsigned long irqflags;
656
657         if (unlikely(index >= Q_INDEX_MAX)) {
658                 ERROR(queue->rt2x00dev,
659                       "Entry requested from invalid index type (%d)\n", index);
660                 return NULL;
661         }
662
663         spin_lock_irqsave(&queue->lock, irqflags);
664
665         entry = &queue->entries[queue->index[index]];
666
667         spin_unlock_irqrestore(&queue->lock, irqflags);
668
669         return entry;
670 }
671 EXPORT_SYMBOL_GPL(rt2x00queue_get_entry);
672
673 void rt2x00queue_index_inc(struct data_queue *queue, enum queue_index index)
674 {
675         unsigned long irqflags;
676
677         if (unlikely(index >= Q_INDEX_MAX)) {
678                 ERROR(queue->rt2x00dev,
679                       "Index change on invalid index type (%d)\n", index);
680                 return;
681         }
682
683         spin_lock_irqsave(&queue->lock, irqflags);
684
685         queue->index[index]++;
686         if (queue->index[index] >= queue->limit)
687                 queue->index[index] = 0;
688
689         if (index == Q_INDEX) {
690                 queue->length++;
691                 queue->last_index = jiffies;
692         } else if (index == Q_INDEX_DONE) {
693                 queue->length--;
694                 queue->count++;
695                 queue->last_index_done = jiffies;
696         }
697
698         spin_unlock_irqrestore(&queue->lock, irqflags);
699 }
700
701 static void rt2x00queue_reset(struct data_queue *queue)
702 {
703         unsigned long irqflags;
704
705         spin_lock_irqsave(&queue->lock, irqflags);
706
707         queue->count = 0;
708         queue->length = 0;
709         queue->last_index = jiffies;
710         queue->last_index_done = jiffies;
711         memset(queue->index, 0, sizeof(queue->index));
712
713         spin_unlock_irqrestore(&queue->lock, irqflags);
714 }
715
716 void rt2x00queue_stop_queues(struct rt2x00_dev *rt2x00dev)
717 {
718         struct data_queue *queue;
719
720         txall_queue_for_each(rt2x00dev, queue)
721                 rt2x00dev->ops->lib->kill_tx_queue(rt2x00dev, queue->qid);
722 }
723
724 void rt2x00queue_init_queues(struct rt2x00_dev *rt2x00dev)
725 {
726         struct data_queue *queue;
727         unsigned int i;
728
729         queue_for_each(rt2x00dev, queue) {
730                 rt2x00queue_reset(queue);
731
732                 for (i = 0; i < queue->limit; i++) {
733                         queue->entries[i].flags = 0;
734
735                         rt2x00dev->ops->lib->clear_entry(&queue->entries[i]);
736                 }
737         }
738 }
739
740 static int rt2x00queue_alloc_entries(struct data_queue *queue,
741                                      const struct data_queue_desc *qdesc)
742 {
743         struct queue_entry *entries;
744         unsigned int entry_size;
745         unsigned int i;
746
747         rt2x00queue_reset(queue);
748
749         queue->limit = qdesc->entry_num;
750         queue->threshold = DIV_ROUND_UP(qdesc->entry_num, 10);
751         queue->data_size = qdesc->data_size;
752         queue->desc_size = qdesc->desc_size;
753
754         /*
755          * Allocate all queue entries.
756          */
757         entry_size = sizeof(*entries) + qdesc->priv_size;
758         entries = kzalloc(queue->limit * entry_size, GFP_KERNEL);
759         if (!entries)
760                 return -ENOMEM;
761
762 #define QUEUE_ENTRY_PRIV_OFFSET(__base, __index, __limit, __esize, __psize) \
763         ( ((char *)(__base)) + ((__limit) * (__esize)) + \
764             ((__index) * (__psize)) )
765
766         for (i = 0; i < queue->limit; i++) {
767                 entries[i].flags = 0;
768                 entries[i].queue = queue;
769                 entries[i].skb = NULL;
770                 entries[i].entry_idx = i;
771                 entries[i].priv_data =
772                     QUEUE_ENTRY_PRIV_OFFSET(entries, i, queue->limit,
773                                             sizeof(*entries), qdesc->priv_size);
774         }
775
776 #undef QUEUE_ENTRY_PRIV_OFFSET
777
778         queue->entries = entries;
779
780         return 0;
781 }
782
783 static void rt2x00queue_free_skbs(struct rt2x00_dev *rt2x00dev,
784                                   struct data_queue *queue)
785 {
786         unsigned int i;
787
788         if (!queue->entries)
789                 return;
790
791         for (i = 0; i < queue->limit; i++) {
792                 if (queue->entries[i].skb)
793                         rt2x00queue_free_skb(rt2x00dev, queue->entries[i].skb);
794         }
795 }
796
797 static int rt2x00queue_alloc_rxskbs(struct rt2x00_dev *rt2x00dev,
798                                     struct data_queue *queue)
799 {
800         unsigned int i;
801         struct sk_buff *skb;
802
803         for (i = 0; i < queue->limit; i++) {
804                 skb = rt2x00queue_alloc_rxskb(rt2x00dev, &queue->entries[i]);
805                 if (!skb)
806                         return -ENOMEM;
807                 queue->entries[i].skb = skb;
808         }
809
810         return 0;
811 }
812
813 int rt2x00queue_initialize(struct rt2x00_dev *rt2x00dev)
814 {
815         struct data_queue *queue;
816         int status;
817
818         status = rt2x00queue_alloc_entries(rt2x00dev->rx, rt2x00dev->ops->rx);
819         if (status)
820                 goto exit;
821
822         tx_queue_for_each(rt2x00dev, queue) {
823                 status = rt2x00queue_alloc_entries(queue, rt2x00dev->ops->tx);
824                 if (status)
825                         goto exit;
826         }
827
828         status = rt2x00queue_alloc_entries(rt2x00dev->bcn, rt2x00dev->ops->bcn);
829         if (status)
830                 goto exit;
831
832         if (test_bit(DRIVER_REQUIRE_ATIM_QUEUE, &rt2x00dev->flags)) {
833                 status = rt2x00queue_alloc_entries(&rt2x00dev->bcn[1],
834                                                    rt2x00dev->ops->atim);
835                 if (status)
836                         goto exit;
837         }
838
839         status = rt2x00queue_alloc_rxskbs(rt2x00dev, rt2x00dev->rx);
840         if (status)
841                 goto exit;
842
843         return 0;
844
845 exit:
846         ERROR(rt2x00dev, "Queue entries allocation failed.\n");
847
848         rt2x00queue_uninitialize(rt2x00dev);
849
850         return status;
851 }
852
853 void rt2x00queue_uninitialize(struct rt2x00_dev *rt2x00dev)
854 {
855         struct data_queue *queue;
856
857         rt2x00queue_free_skbs(rt2x00dev, rt2x00dev->rx);
858
859         queue_for_each(rt2x00dev, queue) {
860                 kfree(queue->entries);
861                 queue->entries = NULL;
862         }
863 }
864
865 static void rt2x00queue_init(struct rt2x00_dev *rt2x00dev,
866                              struct data_queue *queue, enum data_queue_qid qid)
867 {
868         spin_lock_init(&queue->lock);
869
870         queue->rt2x00dev = rt2x00dev;
871         queue->qid = qid;
872         queue->txop = 0;
873         queue->aifs = 2;
874         queue->cw_min = 5;
875         queue->cw_max = 10;
876 }
877
878 int rt2x00queue_allocate(struct rt2x00_dev *rt2x00dev)
879 {
880         struct data_queue *queue;
881         enum data_queue_qid qid;
882         unsigned int req_atim =
883             !!test_bit(DRIVER_REQUIRE_ATIM_QUEUE, &rt2x00dev->flags);
884
885         /*
886          * We need the following queues:
887          * RX: 1
888          * TX: ops->tx_queues
889          * Beacon: 1
890          * Atim: 1 (if required)
891          */
892         rt2x00dev->data_queues = 2 + rt2x00dev->ops->tx_queues + req_atim;
893
894         queue = kzalloc(rt2x00dev->data_queues * sizeof(*queue), GFP_KERNEL);
895         if (!queue) {
896                 ERROR(rt2x00dev, "Queue allocation failed.\n");
897                 return -ENOMEM;
898         }
899
900         /*
901          * Initialize pointers
902          */
903         rt2x00dev->rx = queue;
904         rt2x00dev->tx = &queue[1];
905         rt2x00dev->bcn = &queue[1 + rt2x00dev->ops->tx_queues];
906
907         /*
908          * Initialize queue parameters.
909          * RX: qid = QID_RX
910          * TX: qid = QID_AC_BE + index
911          * TX: cw_min: 2^5 = 32.
912          * TX: cw_max: 2^10 = 1024.
913          * BCN: qid = QID_BEACON
914          * ATIM: qid = QID_ATIM
915          */
916         rt2x00queue_init(rt2x00dev, rt2x00dev->rx, QID_RX);
917
918         qid = QID_AC_BE;
919         tx_queue_for_each(rt2x00dev, queue)
920                 rt2x00queue_init(rt2x00dev, queue, qid++);
921
922         rt2x00queue_init(rt2x00dev, &rt2x00dev->bcn[0], QID_BEACON);
923         if (req_atim)
924                 rt2x00queue_init(rt2x00dev, &rt2x00dev->bcn[1], QID_ATIM);
925
926         return 0;
927 }
928
929 void rt2x00queue_free(struct rt2x00_dev *rt2x00dev)
930 {
931         kfree(rt2x00dev->rx);
932         rt2x00dev->rx = NULL;
933         rt2x00dev->tx = NULL;
934         rt2x00dev->bcn = NULL;
935 }