Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wirel...
[firefly-linux-kernel-4.4.55.git] / drivers / net / wireless / ath / ath9k / xmit.c
1 /*
2  * Copyright (c) 2008-2011 Atheros Communications Inc.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16
17 #include <linux/dma-mapping.h>
18 #include "ath9k.h"
19 #include "ar9003_mac.h"
20
21 #define BITS_PER_BYTE           8
22 #define OFDM_PLCP_BITS          22
23 #define HT_RC_2_STREAMS(_rc)    ((((_rc) & 0x78) >> 3) + 1)
24 #define L_STF                   8
25 #define L_LTF                   8
26 #define L_SIG                   4
27 #define HT_SIG                  8
28 #define HT_STF                  4
29 #define HT_LTF(_ns)             (4 * (_ns))
30 #define SYMBOL_TIME(_ns)        ((_ns) << 2) /* ns * 4 us */
31 #define SYMBOL_TIME_HALFGI(_ns) (((_ns) * 18 + 4) / 5)  /* ns * 3.6 us */
32 #define NUM_SYMBOLS_PER_USEC(_usec) (_usec >> 2)
33 #define NUM_SYMBOLS_PER_USEC_HALFGI(_usec) (((_usec*5)-4)/18)
34
35
36 static u16 bits_per_symbol[][2] = {
37         /* 20MHz 40MHz */
38         {    26,   54 },     /*  0: BPSK */
39         {    52,  108 },     /*  1: QPSK 1/2 */
40         {    78,  162 },     /*  2: QPSK 3/4 */
41         {   104,  216 },     /*  3: 16-QAM 1/2 */
42         {   156,  324 },     /*  4: 16-QAM 3/4 */
43         {   208,  432 },     /*  5: 64-QAM 2/3 */
44         {   234,  486 },     /*  6: 64-QAM 3/4 */
45         {   260,  540 },     /*  7: 64-QAM 5/6 */
46 };
47
48 #define IS_HT_RATE(_rate)     ((_rate) & 0x80)
49
50 static void ath_tx_send_normal(struct ath_softc *sc, struct ath_txq *txq,
51                                struct ath_atx_tid *tid, struct sk_buff *skb);
52 static void ath_tx_complete(struct ath_softc *sc, struct sk_buff *skb,
53                             int tx_flags, struct ath_txq *txq);
54 static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf,
55                                 struct ath_txq *txq, struct list_head *bf_q,
56                                 struct ath_tx_status *ts, int txok);
57 static void ath_tx_txqaddbuf(struct ath_softc *sc, struct ath_txq *txq,
58                              struct list_head *head, bool internal);
59 static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf,
60                              struct ath_tx_status *ts, int nframes, int nbad,
61                              int txok);
62 static void ath_tx_update_baw(struct ath_softc *sc, struct ath_atx_tid *tid,
63                               int seqno);
64 static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc,
65                                            struct ath_txq *txq,
66                                            struct ath_atx_tid *tid,
67                                            struct sk_buff *skb);
68
69 enum {
70         MCS_HT20,
71         MCS_HT20_SGI,
72         MCS_HT40,
73         MCS_HT40_SGI,
74 };
75
76 static int ath_max_4ms_framelen[4][32] = {
77         [MCS_HT20] = {
78                 3212,  6432,  9648,  12864,  19300,  25736,  28952,  32172,
79                 6424,  12852, 19280, 25708,  38568,  51424,  57852,  64280,
80                 9628,  19260, 28896, 38528,  57792,  65532,  65532,  65532,
81                 12828, 25656, 38488, 51320,  65532,  65532,  65532,  65532,
82         },
83         [MCS_HT20_SGI] = {
84                 3572,  7144,  10720,  14296,  21444,  28596,  32172,  35744,
85                 7140,  14284, 21428,  28568,  42856,  57144,  64288,  65532,
86                 10700, 21408, 32112,  42816,  64228,  65532,  65532,  65532,
87                 14256, 28516, 42780,  57040,  65532,  65532,  65532,  65532,
88         },
89         [MCS_HT40] = {
90                 6680,  13360,  20044,  26724,  40092,  53456,  60140,  65532,
91                 13348, 26700,  40052,  53400,  65532,  65532,  65532,  65532,
92                 20004, 40008,  60016,  65532,  65532,  65532,  65532,  65532,
93                 26644, 53292,  65532,  65532,  65532,  65532,  65532,  65532,
94         },
95         [MCS_HT40_SGI] = {
96                 7420,  14844,  22272,  29696,  44544,  59396,  65532,  65532,
97                 14832, 29668,  44504,  59340,  65532,  65532,  65532,  65532,
98                 22232, 44464,  65532,  65532,  65532,  65532,  65532,  65532,
99                 29616, 59232,  65532,  65532,  65532,  65532,  65532,  65532,
100         }
101 };
102
103 /*********************/
104 /* Aggregation logic */
105 /*********************/
106
107 static void ath_txq_lock(struct ath_softc *sc, struct ath_txq *txq)
108 {
109         spin_lock_bh(&txq->axq_lock);
110 }
111
112 static void ath_txq_unlock(struct ath_softc *sc, struct ath_txq *txq)
113 {
114         spin_unlock_bh(&txq->axq_lock);
115 }
116
117 static void ath_txq_unlock_complete(struct ath_softc *sc, struct ath_txq *txq)
118 {
119         struct sk_buff_head q;
120         struct sk_buff *skb;
121
122         __skb_queue_head_init(&q);
123         skb_queue_splice_init(&txq->complete_q, &q);
124         spin_unlock_bh(&txq->axq_lock);
125
126         while ((skb = __skb_dequeue(&q)))
127                 ieee80211_tx_status(sc->hw, skb);
128 }
129
130 static void ath_tx_queue_tid(struct ath_txq *txq, struct ath_atx_tid *tid)
131 {
132         struct ath_atx_ac *ac = tid->ac;
133
134         if (tid->paused)
135                 return;
136
137         if (tid->sched)
138                 return;
139
140         tid->sched = true;
141         list_add_tail(&tid->list, &ac->tid_q);
142
143         if (ac->sched)
144                 return;
145
146         ac->sched = true;
147         list_add_tail(&ac->list, &txq->axq_acq);
148 }
149
150 static void ath_tx_resume_tid(struct ath_softc *sc, struct ath_atx_tid *tid)
151 {
152         struct ath_txq *txq = tid->ac->txq;
153
154         WARN_ON(!tid->paused);
155
156         ath_txq_lock(sc, txq);
157         tid->paused = false;
158
159         if (skb_queue_empty(&tid->buf_q))
160                 goto unlock;
161
162         ath_tx_queue_tid(txq, tid);
163         ath_txq_schedule(sc, txq);
164 unlock:
165         ath_txq_unlock_complete(sc, txq);
166 }
167
168 static struct ath_frame_info *get_frame_info(struct sk_buff *skb)
169 {
170         struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
171         BUILD_BUG_ON(sizeof(struct ath_frame_info) >
172                      sizeof(tx_info->rate_driver_data));
173         return (struct ath_frame_info *) &tx_info->rate_driver_data[0];
174 }
175
176 static void ath_send_bar(struct ath_atx_tid *tid, u16 seqno)
177 {
178         ieee80211_send_bar(tid->an->vif, tid->an->sta->addr, tid->tidno,
179                            seqno << IEEE80211_SEQ_SEQ_SHIFT);
180 }
181
182 static void ath_tx_flush_tid(struct ath_softc *sc, struct ath_atx_tid *tid)
183 {
184         struct ath_txq *txq = tid->ac->txq;
185         struct sk_buff *skb;
186         struct ath_buf *bf;
187         struct list_head bf_head;
188         struct ath_tx_status ts;
189         struct ath_frame_info *fi;
190         bool sendbar = false;
191
192         INIT_LIST_HEAD(&bf_head);
193
194         memset(&ts, 0, sizeof(ts));
195
196         while ((skb = __skb_dequeue(&tid->buf_q))) {
197                 fi = get_frame_info(skb);
198                 bf = fi->bf;
199
200                 if (bf && fi->retries) {
201                         list_add_tail(&bf->list, &bf_head);
202                         ath_tx_update_baw(sc, tid, bf->bf_state.seqno);
203                         ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0);
204                         sendbar = true;
205                 } else {
206                         ath_tx_send_normal(sc, txq, NULL, skb);
207                 }
208         }
209
210         if (tid->baw_head == tid->baw_tail) {
211                 tid->state &= ~AGGR_ADDBA_COMPLETE;
212                 tid->state &= ~AGGR_CLEANUP;
213         }
214
215         if (sendbar) {
216                 ath_txq_unlock(sc, txq);
217                 ath_send_bar(tid, tid->seq_start);
218                 ath_txq_lock(sc, txq);
219         }
220 }
221
222 static void ath_tx_update_baw(struct ath_softc *sc, struct ath_atx_tid *tid,
223                               int seqno)
224 {
225         int index, cindex;
226
227         index  = ATH_BA_INDEX(tid->seq_start, seqno);
228         cindex = (tid->baw_head + index) & (ATH_TID_MAX_BUFS - 1);
229
230         __clear_bit(cindex, tid->tx_buf);
231
232         while (tid->baw_head != tid->baw_tail && !test_bit(tid->baw_head, tid->tx_buf)) {
233                 INCR(tid->seq_start, IEEE80211_SEQ_MAX);
234                 INCR(tid->baw_head, ATH_TID_MAX_BUFS);
235                 if (tid->bar_index >= 0)
236                         tid->bar_index--;
237         }
238 }
239
240 static void ath_tx_addto_baw(struct ath_softc *sc, struct ath_atx_tid *tid,
241                              u16 seqno)
242 {
243         int index, cindex;
244
245         index  = ATH_BA_INDEX(tid->seq_start, seqno);
246         cindex = (tid->baw_head + index) & (ATH_TID_MAX_BUFS - 1);
247         __set_bit(cindex, tid->tx_buf);
248
249         if (index >= ((tid->baw_tail - tid->baw_head) &
250                 (ATH_TID_MAX_BUFS - 1))) {
251                 tid->baw_tail = cindex;
252                 INCR(tid->baw_tail, ATH_TID_MAX_BUFS);
253         }
254 }
255
256 /*
257  * TODO: For frame(s) that are in the retry state, we will reuse the
258  * sequence number(s) without setting the retry bit. The
259  * alternative is to give up on these and BAR the receiver's window
260  * forward.
261  */
262 static void ath_tid_drain(struct ath_softc *sc, struct ath_txq *txq,
263                           struct ath_atx_tid *tid)
264
265 {
266         struct sk_buff *skb;
267         struct ath_buf *bf;
268         struct list_head bf_head;
269         struct ath_tx_status ts;
270         struct ath_frame_info *fi;
271
272         memset(&ts, 0, sizeof(ts));
273         INIT_LIST_HEAD(&bf_head);
274
275         while ((skb = __skb_dequeue(&tid->buf_q))) {
276                 fi = get_frame_info(skb);
277                 bf = fi->bf;
278
279                 if (!bf) {
280                         ath_tx_complete(sc, skb, ATH_TX_ERROR, txq);
281                         continue;
282                 }
283
284                 list_add_tail(&bf->list, &bf_head);
285
286                 if (fi->retries)
287                         ath_tx_update_baw(sc, tid, bf->bf_state.seqno);
288
289                 ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0);
290         }
291
292         tid->seq_next = tid->seq_start;
293         tid->baw_tail = tid->baw_head;
294         tid->bar_index = -1;
295 }
296
297 static void ath_tx_set_retry(struct ath_softc *sc, struct ath_txq *txq,
298                              struct sk_buff *skb, int count)
299 {
300         struct ath_frame_info *fi = get_frame_info(skb);
301         struct ath_buf *bf = fi->bf;
302         struct ieee80211_hdr *hdr;
303         int prev = fi->retries;
304
305         TX_STAT_INC(txq->axq_qnum, a_retries);
306         fi->retries += count;
307
308         if (prev > 0)
309                 return;
310
311         hdr = (struct ieee80211_hdr *)skb->data;
312         hdr->frame_control |= cpu_to_le16(IEEE80211_FCTL_RETRY);
313         dma_sync_single_for_device(sc->dev, bf->bf_buf_addr,
314                 sizeof(*hdr), DMA_TO_DEVICE);
315 }
316
317 static struct ath_buf *ath_tx_get_buffer(struct ath_softc *sc)
318 {
319         struct ath_buf *bf = NULL;
320
321         spin_lock_bh(&sc->tx.txbuflock);
322
323         if (unlikely(list_empty(&sc->tx.txbuf))) {
324                 spin_unlock_bh(&sc->tx.txbuflock);
325                 return NULL;
326         }
327
328         bf = list_first_entry(&sc->tx.txbuf, struct ath_buf, list);
329         list_del(&bf->list);
330
331         spin_unlock_bh(&sc->tx.txbuflock);
332
333         return bf;
334 }
335
336 static void ath_tx_return_buffer(struct ath_softc *sc, struct ath_buf *bf)
337 {
338         spin_lock_bh(&sc->tx.txbuflock);
339         list_add_tail(&bf->list, &sc->tx.txbuf);
340         spin_unlock_bh(&sc->tx.txbuflock);
341 }
342
343 static struct ath_buf* ath_clone_txbuf(struct ath_softc *sc, struct ath_buf *bf)
344 {
345         struct ath_buf *tbf;
346
347         tbf = ath_tx_get_buffer(sc);
348         if (WARN_ON(!tbf))
349                 return NULL;
350
351         ATH_TXBUF_RESET(tbf);
352
353         tbf->bf_mpdu = bf->bf_mpdu;
354         tbf->bf_buf_addr = bf->bf_buf_addr;
355         memcpy(tbf->bf_desc, bf->bf_desc, sc->sc_ah->caps.tx_desc_len);
356         tbf->bf_state = bf->bf_state;
357
358         return tbf;
359 }
360
361 static void ath_tx_count_frames(struct ath_softc *sc, struct ath_buf *bf,
362                                 struct ath_tx_status *ts, int txok,
363                                 int *nframes, int *nbad)
364 {
365         struct ath_frame_info *fi;
366         u16 seq_st = 0;
367         u32 ba[WME_BA_BMP_SIZE >> 5];
368         int ba_index;
369         int isaggr = 0;
370
371         *nbad = 0;
372         *nframes = 0;
373
374         isaggr = bf_isaggr(bf);
375         if (isaggr) {
376                 seq_st = ts->ts_seqnum;
377                 memcpy(ba, &ts->ba_low, WME_BA_BMP_SIZE >> 3);
378         }
379
380         while (bf) {
381                 fi = get_frame_info(bf->bf_mpdu);
382                 ba_index = ATH_BA_INDEX(seq_st, bf->bf_state.seqno);
383
384                 (*nframes)++;
385                 if (!txok || (isaggr && !ATH_BA_ISSET(ba, ba_index)))
386                         (*nbad)++;
387
388                 bf = bf->bf_next;
389         }
390 }
391
392
393 static void ath_tx_complete_aggr(struct ath_softc *sc, struct ath_txq *txq,
394                                  struct ath_buf *bf, struct list_head *bf_q,
395                                  struct ath_tx_status *ts, int txok, bool retry)
396 {
397         struct ath_node *an = NULL;
398         struct sk_buff *skb;
399         struct ieee80211_sta *sta;
400         struct ieee80211_hw *hw = sc->hw;
401         struct ieee80211_hdr *hdr;
402         struct ieee80211_tx_info *tx_info;
403         struct ath_atx_tid *tid = NULL;
404         struct ath_buf *bf_next, *bf_last = bf->bf_lastbf;
405         struct list_head bf_head;
406         struct sk_buff_head bf_pending;
407         u16 seq_st = 0, acked_cnt = 0, txfail_cnt = 0, seq_first;
408         u32 ba[WME_BA_BMP_SIZE >> 5];
409         int isaggr, txfail, txpending, sendbar = 0, needreset = 0, nbad = 0;
410         bool rc_update = true;
411         struct ieee80211_tx_rate rates[4];
412         struct ath_frame_info *fi;
413         int nframes;
414         u8 tidno;
415         bool flush = !!(ts->ts_status & ATH9K_TX_FLUSH);
416         int i, retries;
417         int bar_index = -1;
418
419         skb = bf->bf_mpdu;
420         hdr = (struct ieee80211_hdr *)skb->data;
421
422         tx_info = IEEE80211_SKB_CB(skb);
423
424         memcpy(rates, tx_info->control.rates, sizeof(rates));
425
426         retries = ts->ts_longretry + 1;
427         for (i = 0; i < ts->ts_rateindex; i++)
428                 retries += rates[i].count;
429
430         rcu_read_lock();
431
432         sta = ieee80211_find_sta_by_ifaddr(hw, hdr->addr1, hdr->addr2);
433         if (!sta) {
434                 rcu_read_unlock();
435
436                 INIT_LIST_HEAD(&bf_head);
437                 while (bf) {
438                         bf_next = bf->bf_next;
439
440                         if (!bf->bf_stale || bf_next != NULL)
441                                 list_move_tail(&bf->list, &bf_head);
442
443                         ath_tx_complete_buf(sc, bf, txq, &bf_head, ts, 0);
444
445                         bf = bf_next;
446                 }
447                 return;
448         }
449
450         an = (struct ath_node *)sta->drv_priv;
451         tidno = ieee80211_get_qos_ctl(hdr)[0] & IEEE80211_QOS_CTL_TID_MASK;
452         tid = ATH_AN_2_TID(an, tidno);
453         seq_first = tid->seq_start;
454
455         /*
456          * The hardware occasionally sends a tx status for the wrong TID.
457          * In this case, the BA status cannot be considered valid and all
458          * subframes need to be retransmitted
459          */
460         if (tidno != ts->tid)
461                 txok = false;
462
463         isaggr = bf_isaggr(bf);
464         memset(ba, 0, WME_BA_BMP_SIZE >> 3);
465
466         if (isaggr && txok) {
467                 if (ts->ts_flags & ATH9K_TX_BA) {
468                         seq_st = ts->ts_seqnum;
469                         memcpy(ba, &ts->ba_low, WME_BA_BMP_SIZE >> 3);
470                 } else {
471                         /*
472                          * AR5416 can become deaf/mute when BA
473                          * issue happens. Chip needs to be reset.
474                          * But AP code may have sychronization issues
475                          * when perform internal reset in this routine.
476                          * Only enable reset in STA mode for now.
477                          */
478                         if (sc->sc_ah->opmode == NL80211_IFTYPE_STATION)
479                                 needreset = 1;
480                 }
481         }
482
483         __skb_queue_head_init(&bf_pending);
484
485         ath_tx_count_frames(sc, bf, ts, txok, &nframes, &nbad);
486         while (bf) {
487                 u16 seqno = bf->bf_state.seqno;
488
489                 txfail = txpending = sendbar = 0;
490                 bf_next = bf->bf_next;
491
492                 skb = bf->bf_mpdu;
493                 tx_info = IEEE80211_SKB_CB(skb);
494                 fi = get_frame_info(skb);
495
496                 if (ATH_BA_ISSET(ba, ATH_BA_INDEX(seq_st, seqno))) {
497                         /* transmit completion, subframe is
498                          * acked by block ack */
499                         acked_cnt++;
500                 } else if (!isaggr && txok) {
501                         /* transmit completion */
502                         acked_cnt++;
503                 } else if ((tid->state & AGGR_CLEANUP) || !retry) {
504                         /*
505                          * cleanup in progress, just fail
506                          * the un-acked sub-frames
507                          */
508                         txfail = 1;
509                 } else if (flush) {
510                         txpending = 1;
511                 } else if (fi->retries < ATH_MAX_SW_RETRIES) {
512                         if (txok || !an->sleeping)
513                                 ath_tx_set_retry(sc, txq, bf->bf_mpdu,
514                                                  retries);
515
516                         txpending = 1;
517                 } else {
518                         txfail = 1;
519                         txfail_cnt++;
520                         bar_index = max_t(int, bar_index,
521                                 ATH_BA_INDEX(seq_first, seqno));
522                 }
523
524                 /*
525                  * Make sure the last desc is reclaimed if it
526                  * not a holding desc.
527                  */
528                 INIT_LIST_HEAD(&bf_head);
529                 if ((sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) ||
530                     bf_next != NULL || !bf_last->bf_stale)
531                         list_move_tail(&bf->list, &bf_head);
532
533                 if (!txpending || (tid->state & AGGR_CLEANUP)) {
534                         /*
535                          * complete the acked-ones/xretried ones; update
536                          * block-ack window
537                          */
538                         ath_tx_update_baw(sc, tid, seqno);
539
540                         if (rc_update && (acked_cnt == 1 || txfail_cnt == 1)) {
541                                 memcpy(tx_info->control.rates, rates, sizeof(rates));
542                                 ath_tx_rc_status(sc, bf, ts, nframes, nbad, txok);
543                                 rc_update = false;
544                         }
545
546                         ath_tx_complete_buf(sc, bf, txq, &bf_head, ts,
547                                 !txfail);
548                 } else {
549                         /* retry the un-acked ones */
550                         if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) &&
551                             bf->bf_next == NULL && bf_last->bf_stale) {
552                                 struct ath_buf *tbf;
553
554                                 tbf = ath_clone_txbuf(sc, bf_last);
555                                 /*
556                                  * Update tx baw and complete the
557                                  * frame with failed status if we
558                                  * run out of tx buf.
559                                  */
560                                 if (!tbf) {
561                                         ath_tx_update_baw(sc, tid, seqno);
562
563                                         ath_tx_complete_buf(sc, bf, txq,
564                                                             &bf_head, ts, 0);
565                                         bar_index = max_t(int, bar_index,
566                                                 ATH_BA_INDEX(seq_first, seqno));
567                                         break;
568                                 }
569
570                                 fi->bf = tbf;
571                         }
572
573                         /*
574                          * Put this buffer to the temporary pending
575                          * queue to retain ordering
576                          */
577                         __skb_queue_tail(&bf_pending, skb);
578                 }
579
580                 bf = bf_next;
581         }
582
583         /* prepend un-acked frames to the beginning of the pending frame queue */
584         if (!skb_queue_empty(&bf_pending)) {
585                 if (an->sleeping)
586                         ieee80211_sta_set_buffered(sta, tid->tidno, true);
587
588                 skb_queue_splice(&bf_pending, &tid->buf_q);
589                 if (!an->sleeping) {
590                         ath_tx_queue_tid(txq, tid);
591
592                         if (ts->ts_status & ATH9K_TXERR_FILT)
593                                 tid->ac->clear_ps_filter = true;
594                 }
595         }
596
597         if (bar_index >= 0) {
598                 u16 bar_seq = ATH_BA_INDEX2SEQ(seq_first, bar_index);
599
600                 if (BAW_WITHIN(tid->seq_start, tid->baw_size, bar_seq))
601                         tid->bar_index = ATH_BA_INDEX(tid->seq_start, bar_seq);
602
603                 ath_txq_unlock(sc, txq);
604                 ath_send_bar(tid, ATH_BA_INDEX2SEQ(seq_first, bar_index + 1));
605                 ath_txq_lock(sc, txq);
606         }
607
608         if (tid->state & AGGR_CLEANUP)
609                 ath_tx_flush_tid(sc, tid);
610
611         rcu_read_unlock();
612
613         if (needreset) {
614                 RESET_STAT_INC(sc, RESET_TYPE_TX_ERROR);
615                 ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
616         }
617 }
618
619 static bool ath_lookup_legacy(struct ath_buf *bf)
620 {
621         struct sk_buff *skb;
622         struct ieee80211_tx_info *tx_info;
623         struct ieee80211_tx_rate *rates;
624         int i;
625
626         skb = bf->bf_mpdu;
627         tx_info = IEEE80211_SKB_CB(skb);
628         rates = tx_info->control.rates;
629
630         for (i = 0; i < 4; i++) {
631                 if (!rates[i].count || rates[i].idx < 0)
632                         break;
633
634                 if (!(rates[i].flags & IEEE80211_TX_RC_MCS))
635                         return true;
636         }
637
638         return false;
639 }
640
641 static u32 ath_lookup_rate(struct ath_softc *sc, struct ath_buf *bf,
642                            struct ath_atx_tid *tid)
643 {
644         struct sk_buff *skb;
645         struct ieee80211_tx_info *tx_info;
646         struct ieee80211_tx_rate *rates;
647         struct ath_mci_profile *mci = &sc->btcoex.mci;
648         u32 max_4ms_framelen, frmlen;
649         u16 aggr_limit, legacy = 0;
650         int i;
651
652         skb = bf->bf_mpdu;
653         tx_info = IEEE80211_SKB_CB(skb);
654         rates = tx_info->control.rates;
655
656         /*
657          * Find the lowest frame length among the rate series that will have a
658          * 4ms transmit duration.
659          * TODO - TXOP limit needs to be considered.
660          */
661         max_4ms_framelen = ATH_AMPDU_LIMIT_MAX;
662
663         for (i = 0; i < 4; i++) {
664                 int modeidx;
665
666                 if (!rates[i].count)
667                         continue;
668
669                 if (!(rates[i].flags & IEEE80211_TX_RC_MCS)) {
670                         legacy = 1;
671                         break;
672                 }
673
674                 if (rates[i].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
675                         modeidx = MCS_HT40;
676                 else
677                         modeidx = MCS_HT20;
678
679                 if (rates[i].flags & IEEE80211_TX_RC_SHORT_GI)
680                         modeidx++;
681
682                 frmlen = ath_max_4ms_framelen[modeidx][rates[i].idx];
683                 max_4ms_framelen = min(max_4ms_framelen, frmlen);
684         }
685
686         /*
687          * limit aggregate size by the minimum rate if rate selected is
688          * not a probe rate, if rate selected is a probe rate then
689          * avoid aggregation of this packet.
690          */
691         if (tx_info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE || legacy)
692                 return 0;
693
694         if ((sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_MCI) && mci->aggr_limit)
695                 aggr_limit = (max_4ms_framelen * mci->aggr_limit) >> 4;
696         else if (sc->sc_flags & SC_OP_BT_PRIORITY_DETECTED)
697                 aggr_limit = min((max_4ms_framelen * 3) / 8,
698                                  (u32)ATH_AMPDU_LIMIT_MAX);
699         else
700                 aggr_limit = min(max_4ms_framelen,
701                                  (u32)ATH_AMPDU_LIMIT_MAX);
702
703         /*
704          * h/w can accept aggregates up to 16 bit lengths (65535).
705          * The IE, however can hold up to 65536, which shows up here
706          * as zero. Ignore 65536 since we  are constrained by hw.
707          */
708         if (tid->an->maxampdu)
709                 aggr_limit = min(aggr_limit, tid->an->maxampdu);
710
711         return aggr_limit;
712 }
713
714 /*
715  * Returns the number of delimiters to be added to
716  * meet the minimum required mpdudensity.
717  */
718 static int ath_compute_num_delims(struct ath_softc *sc, struct ath_atx_tid *tid,
719                                   struct ath_buf *bf, u16 frmlen,
720                                   bool first_subfrm)
721 {
722 #define FIRST_DESC_NDELIMS 60
723         struct sk_buff *skb = bf->bf_mpdu;
724         struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
725         u32 nsymbits, nsymbols;
726         u16 minlen;
727         u8 flags, rix;
728         int width, streams, half_gi, ndelim, mindelim;
729         struct ath_frame_info *fi = get_frame_info(bf->bf_mpdu);
730
731         /* Select standard number of delimiters based on frame length alone */
732         ndelim = ATH_AGGR_GET_NDELIM(frmlen);
733
734         /*
735          * If encryption enabled, hardware requires some more padding between
736          * subframes.
737          * TODO - this could be improved to be dependent on the rate.
738          *      The hardware can keep up at lower rates, but not higher rates
739          */
740         if ((fi->keyix != ATH9K_TXKEYIX_INVALID) &&
741             !(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA))
742                 ndelim += ATH_AGGR_ENCRYPTDELIM;
743
744         /*
745          * Add delimiter when using RTS/CTS with aggregation
746          * and non enterprise AR9003 card
747          */
748         if (first_subfrm && !AR_SREV_9580_10_OR_LATER(sc->sc_ah) &&
749             (sc->sc_ah->ent_mode & AR_ENT_OTP_MIN_PKT_SIZE_DISABLE))
750                 ndelim = max(ndelim, FIRST_DESC_NDELIMS);
751
752         /*
753          * Convert desired mpdu density from microeconds to bytes based
754          * on highest rate in rate series (i.e. first rate) to determine
755          * required minimum length for subframe. Take into account
756          * whether high rate is 20 or 40Mhz and half or full GI.
757          *
758          * If there is no mpdu density restriction, no further calculation
759          * is needed.
760          */
761
762         if (tid->an->mpdudensity == 0)
763                 return ndelim;
764
765         rix = tx_info->control.rates[0].idx;
766         flags = tx_info->control.rates[0].flags;
767         width = (flags & IEEE80211_TX_RC_40_MHZ_WIDTH) ? 1 : 0;
768         half_gi = (flags & IEEE80211_TX_RC_SHORT_GI) ? 1 : 0;
769
770         if (half_gi)
771                 nsymbols = NUM_SYMBOLS_PER_USEC_HALFGI(tid->an->mpdudensity);
772         else
773                 nsymbols = NUM_SYMBOLS_PER_USEC(tid->an->mpdudensity);
774
775         if (nsymbols == 0)
776                 nsymbols = 1;
777
778         streams = HT_RC_2_STREAMS(rix);
779         nsymbits = bits_per_symbol[rix % 8][width] * streams;
780         minlen = (nsymbols * nsymbits) / BITS_PER_BYTE;
781
782         if (frmlen < minlen) {
783                 mindelim = (minlen - frmlen) / ATH_AGGR_DELIM_SZ;
784                 ndelim = max(mindelim, ndelim);
785         }
786
787         return ndelim;
788 }
789
790 static enum ATH_AGGR_STATUS ath_tx_form_aggr(struct ath_softc *sc,
791                                              struct ath_txq *txq,
792                                              struct ath_atx_tid *tid,
793                                              struct list_head *bf_q,
794                                              int *aggr_len)
795 {
796 #define PADBYTES(_len) ((4 - ((_len) % 4)) % 4)
797         struct ath_buf *bf, *bf_first = NULL, *bf_prev = NULL;
798         int rl = 0, nframes = 0, ndelim, prev_al = 0;
799         u16 aggr_limit = 0, al = 0, bpad = 0,
800                 al_delta, h_baw = tid->baw_size / 2;
801         enum ATH_AGGR_STATUS status = ATH_AGGR_DONE;
802         struct ieee80211_tx_info *tx_info;
803         struct ath_frame_info *fi;
804         struct sk_buff *skb;
805         u16 seqno;
806
807         do {
808                 skb = skb_peek(&tid->buf_q);
809                 fi = get_frame_info(skb);
810                 bf = fi->bf;
811                 if (!fi->bf)
812                         bf = ath_tx_setup_buffer(sc, txq, tid, skb);
813
814                 if (!bf)
815                         continue;
816
817                 bf->bf_state.bf_type = BUF_AMPDU | BUF_AGGR;
818                 seqno = bf->bf_state.seqno;
819
820                 /* do not step over block-ack window */
821                 if (!BAW_WITHIN(tid->seq_start, tid->baw_size, seqno)) {
822                         status = ATH_AGGR_BAW_CLOSED;
823                         break;
824                 }
825
826                 if (tid->bar_index > ATH_BA_INDEX(tid->seq_start, seqno)) {
827                         struct ath_tx_status ts = {};
828                         struct list_head bf_head;
829
830                         INIT_LIST_HEAD(&bf_head);
831                         list_add(&bf->list, &bf_head);
832                         __skb_unlink(skb, &tid->buf_q);
833                         ath_tx_update_baw(sc, tid, seqno);
834                         ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0);
835                         continue;
836                 }
837
838                 if (!bf_first)
839                         bf_first = bf;
840
841                 if (!rl) {
842                         aggr_limit = ath_lookup_rate(sc, bf, tid);
843                         rl = 1;
844                 }
845
846                 /* do not exceed aggregation limit */
847                 al_delta = ATH_AGGR_DELIM_SZ + fi->framelen;
848
849                 if (nframes &&
850                     ((aggr_limit < (al + bpad + al_delta + prev_al)) ||
851                      ath_lookup_legacy(bf))) {
852                         status = ATH_AGGR_LIMITED;
853                         break;
854                 }
855
856                 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu);
857                 if (nframes && (tx_info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE))
858                         break;
859
860                 /* do not exceed subframe limit */
861                 if (nframes >= min((int)h_baw, ATH_AMPDU_SUBFRAME_DEFAULT)) {
862                         status = ATH_AGGR_LIMITED;
863                         break;
864                 }
865
866                 /* add padding for previous frame to aggregation length */
867                 al += bpad + al_delta;
868
869                 /*
870                  * Get the delimiters needed to meet the MPDU
871                  * density for this node.
872                  */
873                 ndelim = ath_compute_num_delims(sc, tid, bf_first, fi->framelen,
874                                                 !nframes);
875                 bpad = PADBYTES(al_delta) + (ndelim << 2);
876
877                 nframes++;
878                 bf->bf_next = NULL;
879
880                 /* link buffers of this frame to the aggregate */
881                 if (!fi->retries)
882                         ath_tx_addto_baw(sc, tid, seqno);
883                 bf->bf_state.ndelim = ndelim;
884
885                 __skb_unlink(skb, &tid->buf_q);
886                 list_add_tail(&bf->list, bf_q);
887                 if (bf_prev)
888                         bf_prev->bf_next = bf;
889
890                 bf_prev = bf;
891
892         } while (!skb_queue_empty(&tid->buf_q));
893
894         *aggr_len = al;
895
896         return status;
897 #undef PADBYTES
898 }
899
900 /*
901  * rix - rate index
902  * pktlen - total bytes (delims + data + fcs + pads + pad delims)
903  * width  - 0 for 20 MHz, 1 for 40 MHz
904  * half_gi - to use 4us v/s 3.6 us for symbol time
905  */
906 static u32 ath_pkt_duration(struct ath_softc *sc, u8 rix, int pktlen,
907                             int width, int half_gi, bool shortPreamble)
908 {
909         u32 nbits, nsymbits, duration, nsymbols;
910         int streams;
911
912         /* find number of symbols: PLCP + data */
913         streams = HT_RC_2_STREAMS(rix);
914         nbits = (pktlen << 3) + OFDM_PLCP_BITS;
915         nsymbits = bits_per_symbol[rix % 8][width] * streams;
916         nsymbols = (nbits + nsymbits - 1) / nsymbits;
917
918         if (!half_gi)
919                 duration = SYMBOL_TIME(nsymbols);
920         else
921                 duration = SYMBOL_TIME_HALFGI(nsymbols);
922
923         /* addup duration for legacy/ht training and signal fields */
924         duration += L_STF + L_LTF + L_SIG + HT_SIG + HT_STF + HT_LTF(streams);
925
926         return duration;
927 }
928
929 static void ath_buf_set_rate(struct ath_softc *sc, struct ath_buf *bf,
930                              struct ath_tx_info *info, int len)
931 {
932         struct ath_hw *ah = sc->sc_ah;
933         struct sk_buff *skb;
934         struct ieee80211_tx_info *tx_info;
935         struct ieee80211_tx_rate *rates;
936         const struct ieee80211_rate *rate;
937         struct ieee80211_hdr *hdr;
938         int i;
939         u8 rix = 0;
940
941         skb = bf->bf_mpdu;
942         tx_info = IEEE80211_SKB_CB(skb);
943         rates = tx_info->control.rates;
944         hdr = (struct ieee80211_hdr *)skb->data;
945
946         /* set dur_update_en for l-sig computation except for PS-Poll frames */
947         info->dur_update = !ieee80211_is_pspoll(hdr->frame_control);
948
949         /*
950          * We check if Short Preamble is needed for the CTS rate by
951          * checking the BSS's global flag.
952          * But for the rate series, IEEE80211_TX_RC_USE_SHORT_PREAMBLE is used.
953          */
954         rate = ieee80211_get_rts_cts_rate(sc->hw, tx_info);
955         info->rtscts_rate = rate->hw_value;
956         if (sc->sc_flags & SC_OP_PREAMBLE_SHORT)
957                 info->rtscts_rate |= rate->hw_value_short;
958
959         for (i = 0; i < 4; i++) {
960                 bool is_40, is_sgi, is_sp;
961                 int phy;
962
963                 if (!rates[i].count || (rates[i].idx < 0))
964                         continue;
965
966                 rix = rates[i].idx;
967                 info->rates[i].Tries = rates[i].count;
968
969                     if (rates[i].flags & IEEE80211_TX_RC_USE_RTS_CTS) {
970                         info->rates[i].RateFlags |= ATH9K_RATESERIES_RTS_CTS;
971                         info->flags |= ATH9K_TXDESC_RTSENA;
972                 } else if (rates[i].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) {
973                         info->rates[i].RateFlags |= ATH9K_RATESERIES_RTS_CTS;
974                         info->flags |= ATH9K_TXDESC_CTSENA;
975                 }
976
977                 if (rates[i].flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
978                         info->rates[i].RateFlags |= ATH9K_RATESERIES_2040;
979                 if (rates[i].flags & IEEE80211_TX_RC_SHORT_GI)
980                         info->rates[i].RateFlags |= ATH9K_RATESERIES_HALFGI;
981
982                 is_sgi = !!(rates[i].flags & IEEE80211_TX_RC_SHORT_GI);
983                 is_40 = !!(rates[i].flags & IEEE80211_TX_RC_40_MHZ_WIDTH);
984                 is_sp = !!(rates[i].flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE);
985
986                 if (rates[i].flags & IEEE80211_TX_RC_MCS) {
987                         /* MCS rates */
988                         info->rates[i].Rate = rix | 0x80;
989                         info->rates[i].ChSel = ath_txchainmask_reduction(sc,
990                                         ah->txchainmask, info->rates[i].Rate);
991                         info->rates[i].PktDuration = ath_pkt_duration(sc, rix, len,
992                                  is_40, is_sgi, is_sp);
993                         if (rix < 8 && (tx_info->flags & IEEE80211_TX_CTL_STBC))
994                                 info->rates[i].RateFlags |= ATH9K_RATESERIES_STBC;
995                         continue;
996                 }
997
998                 /* legacy rates */
999                 if ((tx_info->band == IEEE80211_BAND_2GHZ) &&
1000                     !(rate->flags & IEEE80211_RATE_ERP_G))
1001                         phy = WLAN_RC_PHY_CCK;
1002                 else
1003                         phy = WLAN_RC_PHY_OFDM;
1004
1005                 rate = &sc->sbands[tx_info->band].bitrates[rates[i].idx];
1006                 info->rates[i].Rate = rate->hw_value;
1007                 if (rate->hw_value_short) {
1008                         if (rates[i].flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE)
1009                                 info->rates[i].Rate |= rate->hw_value_short;
1010                 } else {
1011                         is_sp = false;
1012                 }
1013
1014                 if (bf->bf_state.bfs_paprd)
1015                         info->rates[i].ChSel = ah->txchainmask;
1016                 else
1017                         info->rates[i].ChSel = ath_txchainmask_reduction(sc,
1018                                         ah->txchainmask, info->rates[i].Rate);
1019
1020                 info->rates[i].PktDuration = ath9k_hw_computetxtime(sc->sc_ah,
1021                         phy, rate->bitrate * 100, len, rix, is_sp);
1022         }
1023
1024         /* For AR5416 - RTS cannot be followed by a frame larger than 8K */
1025         if (bf_isaggr(bf) && (len > sc->sc_ah->caps.rts_aggr_limit))
1026                 info->flags &= ~ATH9K_TXDESC_RTSENA;
1027
1028         /* ATH9K_TXDESC_RTSENA and ATH9K_TXDESC_CTSENA are mutually exclusive. */
1029         if (info->flags & ATH9K_TXDESC_RTSENA)
1030                 info->flags &= ~ATH9K_TXDESC_CTSENA;
1031 }
1032
1033 static enum ath9k_pkt_type get_hw_packet_type(struct sk_buff *skb)
1034 {
1035         struct ieee80211_hdr *hdr;
1036         enum ath9k_pkt_type htype;
1037         __le16 fc;
1038
1039         hdr = (struct ieee80211_hdr *)skb->data;
1040         fc = hdr->frame_control;
1041
1042         if (ieee80211_is_beacon(fc))
1043                 htype = ATH9K_PKT_TYPE_BEACON;
1044         else if (ieee80211_is_probe_resp(fc))
1045                 htype = ATH9K_PKT_TYPE_PROBE_RESP;
1046         else if (ieee80211_is_atim(fc))
1047                 htype = ATH9K_PKT_TYPE_ATIM;
1048         else if (ieee80211_is_pspoll(fc))
1049                 htype = ATH9K_PKT_TYPE_PSPOLL;
1050         else
1051                 htype = ATH9K_PKT_TYPE_NORMAL;
1052
1053         return htype;
1054 }
1055
1056 static void ath_tx_fill_desc(struct ath_softc *sc, struct ath_buf *bf,
1057                              struct ath_txq *txq, int len)
1058 {
1059         struct ath_hw *ah = sc->sc_ah;
1060         struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(bf->bf_mpdu);
1061         struct ath_buf *bf_first = bf;
1062         struct ath_tx_info info;
1063         bool aggr = !!(bf->bf_state.bf_type & BUF_AGGR);
1064
1065         memset(&info, 0, sizeof(info));
1066         info.is_first = true;
1067         info.is_last = true;
1068         info.txpower = MAX_RATE_POWER;
1069         info.qcu = txq->axq_qnum;
1070
1071         info.flags = ATH9K_TXDESC_INTREQ;
1072         if (tx_info->flags & IEEE80211_TX_CTL_NO_ACK)
1073                 info.flags |= ATH9K_TXDESC_NOACK;
1074         if (tx_info->flags & IEEE80211_TX_CTL_LDPC)
1075                 info.flags |= ATH9K_TXDESC_LDPC;
1076
1077         ath_buf_set_rate(sc, bf, &info, len);
1078
1079         if (tx_info->flags & IEEE80211_TX_CTL_CLEAR_PS_FILT)
1080                 info.flags |= ATH9K_TXDESC_CLRDMASK;
1081
1082         if (bf->bf_state.bfs_paprd)
1083                 info.flags |= (u32) bf->bf_state.bfs_paprd << ATH9K_TXDESC_PAPRD_S;
1084
1085
1086         while (bf) {
1087                 struct sk_buff *skb = bf->bf_mpdu;
1088                 struct ath_frame_info *fi = get_frame_info(skb);
1089
1090                 info.type = get_hw_packet_type(skb);
1091                 if (bf->bf_next)
1092                         info.link = bf->bf_next->bf_daddr;
1093                 else
1094                         info.link = 0;
1095
1096                 info.buf_addr[0] = bf->bf_buf_addr;
1097                 info.buf_len[0] = skb->len;
1098                 info.pkt_len = fi->framelen;
1099                 info.keyix = fi->keyix;
1100                 info.keytype = fi->keytype;
1101
1102                 if (aggr) {
1103                         if (bf == bf_first)
1104                                 info.aggr = AGGR_BUF_FIRST;
1105                         else if (!bf->bf_next)
1106                                 info.aggr = AGGR_BUF_LAST;
1107                         else
1108                                 info.aggr = AGGR_BUF_MIDDLE;
1109
1110                         info.ndelim = bf->bf_state.ndelim;
1111                         info.aggr_len = len;
1112                 }
1113
1114                 ath9k_hw_set_txdesc(ah, bf->bf_desc, &info);
1115                 bf = bf->bf_next;
1116         }
1117 }
1118
1119 static void ath_tx_sched_aggr(struct ath_softc *sc, struct ath_txq *txq,
1120                               struct ath_atx_tid *tid)
1121 {
1122         struct ath_buf *bf;
1123         enum ATH_AGGR_STATUS status;
1124         struct ieee80211_tx_info *tx_info;
1125         struct list_head bf_q;
1126         int aggr_len;
1127
1128         do {
1129                 if (skb_queue_empty(&tid->buf_q))
1130                         return;
1131
1132                 INIT_LIST_HEAD(&bf_q);
1133
1134                 status = ath_tx_form_aggr(sc, txq, tid, &bf_q, &aggr_len);
1135
1136                 /*
1137                  * no frames picked up to be aggregated;
1138                  * block-ack window is not open.
1139                  */
1140                 if (list_empty(&bf_q))
1141                         break;
1142
1143                 bf = list_first_entry(&bf_q, struct ath_buf, list);
1144                 bf->bf_lastbf = list_entry(bf_q.prev, struct ath_buf, list);
1145                 tx_info = IEEE80211_SKB_CB(bf->bf_mpdu);
1146
1147                 if (tid->ac->clear_ps_filter) {
1148                         tid->ac->clear_ps_filter = false;
1149                         tx_info->flags |= IEEE80211_TX_CTL_CLEAR_PS_FILT;
1150                 } else {
1151                         tx_info->flags &= ~IEEE80211_TX_CTL_CLEAR_PS_FILT;
1152                 }
1153
1154                 /* if only one frame, send as non-aggregate */
1155                 if (bf == bf->bf_lastbf) {
1156                         aggr_len = get_frame_info(bf->bf_mpdu)->framelen;
1157                         bf->bf_state.bf_type = BUF_AMPDU;
1158                 } else {
1159                         TX_STAT_INC(txq->axq_qnum, a_aggr);
1160                 }
1161
1162                 ath_tx_fill_desc(sc, bf, txq, aggr_len);
1163                 ath_tx_txqaddbuf(sc, txq, &bf_q, false);
1164         } while (txq->axq_ampdu_depth < ATH_AGGR_MIN_QDEPTH &&
1165                  status != ATH_AGGR_BAW_CLOSED);
1166 }
1167
1168 int ath_tx_aggr_start(struct ath_softc *sc, struct ieee80211_sta *sta,
1169                       u16 tid, u16 *ssn)
1170 {
1171         struct ath_atx_tid *txtid;
1172         struct ath_node *an;
1173
1174         an = (struct ath_node *)sta->drv_priv;
1175         txtid = ATH_AN_2_TID(an, tid);
1176
1177         if (txtid->state & (AGGR_CLEANUP | AGGR_ADDBA_COMPLETE))
1178                 return -EAGAIN;
1179
1180         txtid->state |= AGGR_ADDBA_PROGRESS;
1181         txtid->paused = true;
1182         *ssn = txtid->seq_start = txtid->seq_next;
1183         txtid->bar_index = -1;
1184
1185         memset(txtid->tx_buf, 0, sizeof(txtid->tx_buf));
1186         txtid->baw_head = txtid->baw_tail = 0;
1187
1188         return 0;
1189 }
1190
1191 void ath_tx_aggr_stop(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid)
1192 {
1193         struct ath_node *an = (struct ath_node *)sta->drv_priv;
1194         struct ath_atx_tid *txtid = ATH_AN_2_TID(an, tid);
1195         struct ath_txq *txq = txtid->ac->txq;
1196
1197         if (txtid->state & AGGR_CLEANUP)
1198                 return;
1199
1200         if (!(txtid->state & AGGR_ADDBA_COMPLETE)) {
1201                 txtid->state &= ~AGGR_ADDBA_PROGRESS;
1202                 return;
1203         }
1204
1205         ath_txq_lock(sc, txq);
1206         txtid->paused = true;
1207
1208         /*
1209          * If frames are still being transmitted for this TID, they will be
1210          * cleaned up during tx completion. To prevent race conditions, this
1211          * TID can only be reused after all in-progress subframes have been
1212          * completed.
1213          */
1214         if (txtid->baw_head != txtid->baw_tail)
1215                 txtid->state |= AGGR_CLEANUP;
1216         else
1217                 txtid->state &= ~AGGR_ADDBA_COMPLETE;
1218
1219         ath_tx_flush_tid(sc, txtid);
1220         ath_txq_unlock_complete(sc, txq);
1221 }
1222
1223 void ath_tx_aggr_sleep(struct ieee80211_sta *sta, struct ath_softc *sc,
1224                        struct ath_node *an)
1225 {
1226         struct ath_atx_tid *tid;
1227         struct ath_atx_ac *ac;
1228         struct ath_txq *txq;
1229         bool buffered;
1230         int tidno;
1231
1232         for (tidno = 0, tid = &an->tid[tidno];
1233              tidno < WME_NUM_TID; tidno++, tid++) {
1234
1235                 if (!tid->sched)
1236                         continue;
1237
1238                 ac = tid->ac;
1239                 txq = ac->txq;
1240
1241                 ath_txq_lock(sc, txq);
1242
1243                 buffered = !skb_queue_empty(&tid->buf_q);
1244
1245                 tid->sched = false;
1246                 list_del(&tid->list);
1247
1248                 if (ac->sched) {
1249                         ac->sched = false;
1250                         list_del(&ac->list);
1251                 }
1252
1253                 ath_txq_unlock(sc, txq);
1254
1255                 ieee80211_sta_set_buffered(sta, tidno, buffered);
1256         }
1257 }
1258
1259 void ath_tx_aggr_wakeup(struct ath_softc *sc, struct ath_node *an)
1260 {
1261         struct ath_atx_tid *tid;
1262         struct ath_atx_ac *ac;
1263         struct ath_txq *txq;
1264         int tidno;
1265
1266         for (tidno = 0, tid = &an->tid[tidno];
1267              tidno < WME_NUM_TID; tidno++, tid++) {
1268
1269                 ac = tid->ac;
1270                 txq = ac->txq;
1271
1272                 ath_txq_lock(sc, txq);
1273                 ac->clear_ps_filter = true;
1274
1275                 if (!skb_queue_empty(&tid->buf_q) && !tid->paused) {
1276                         ath_tx_queue_tid(txq, tid);
1277                         ath_txq_schedule(sc, txq);
1278                 }
1279
1280                 ath_txq_unlock_complete(sc, txq);
1281         }
1282 }
1283
1284 void ath_tx_aggr_resume(struct ath_softc *sc, struct ieee80211_sta *sta, u16 tid)
1285 {
1286         struct ath_atx_tid *txtid;
1287         struct ath_node *an;
1288
1289         an = (struct ath_node *)sta->drv_priv;
1290
1291         if (sc->sc_flags & SC_OP_TXAGGR) {
1292                 txtid = ATH_AN_2_TID(an, tid);
1293                 txtid->baw_size =
1294                         IEEE80211_MIN_AMPDU_BUF << sta->ht_cap.ampdu_factor;
1295                 txtid->state |= AGGR_ADDBA_COMPLETE;
1296                 txtid->state &= ~AGGR_ADDBA_PROGRESS;
1297                 ath_tx_resume_tid(sc, txtid);
1298         }
1299 }
1300
1301 /********************/
1302 /* Queue Management */
1303 /********************/
1304
1305 static void ath_txq_drain_pending_buffers(struct ath_softc *sc,
1306                                           struct ath_txq *txq)
1307 {
1308         struct ath_atx_ac *ac, *ac_tmp;
1309         struct ath_atx_tid *tid, *tid_tmp;
1310
1311         list_for_each_entry_safe(ac, ac_tmp, &txq->axq_acq, list) {
1312                 list_del(&ac->list);
1313                 ac->sched = false;
1314                 list_for_each_entry_safe(tid, tid_tmp, &ac->tid_q, list) {
1315                         list_del(&tid->list);
1316                         tid->sched = false;
1317                         ath_tid_drain(sc, txq, tid);
1318                 }
1319         }
1320 }
1321
1322 struct ath_txq *ath_txq_setup(struct ath_softc *sc, int qtype, int subtype)
1323 {
1324         struct ath_hw *ah = sc->sc_ah;
1325         struct ath9k_tx_queue_info qi;
1326         static const int subtype_txq_to_hwq[] = {
1327                 [WME_AC_BE] = ATH_TXQ_AC_BE,
1328                 [WME_AC_BK] = ATH_TXQ_AC_BK,
1329                 [WME_AC_VI] = ATH_TXQ_AC_VI,
1330                 [WME_AC_VO] = ATH_TXQ_AC_VO,
1331         };
1332         int axq_qnum, i;
1333
1334         memset(&qi, 0, sizeof(qi));
1335         qi.tqi_subtype = subtype_txq_to_hwq[subtype];
1336         qi.tqi_aifs = ATH9K_TXQ_USEDEFAULT;
1337         qi.tqi_cwmin = ATH9K_TXQ_USEDEFAULT;
1338         qi.tqi_cwmax = ATH9K_TXQ_USEDEFAULT;
1339         qi.tqi_physCompBuf = 0;
1340
1341         /*
1342          * Enable interrupts only for EOL and DESC conditions.
1343          * We mark tx descriptors to receive a DESC interrupt
1344          * when a tx queue gets deep; otherwise waiting for the
1345          * EOL to reap descriptors.  Note that this is done to
1346          * reduce interrupt load and this only defers reaping
1347          * descriptors, never transmitting frames.  Aside from
1348          * reducing interrupts this also permits more concurrency.
1349          * The only potential downside is if the tx queue backs
1350          * up in which case the top half of the kernel may backup
1351          * due to a lack of tx descriptors.
1352          *
1353          * The UAPSD queue is an exception, since we take a desc-
1354          * based intr on the EOSP frames.
1355          */
1356         if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
1357                 qi.tqi_qflags = TXQ_FLAG_TXOKINT_ENABLE |
1358                                 TXQ_FLAG_TXERRINT_ENABLE;
1359         } else {
1360                 if (qtype == ATH9K_TX_QUEUE_UAPSD)
1361                         qi.tqi_qflags = TXQ_FLAG_TXDESCINT_ENABLE;
1362                 else
1363                         qi.tqi_qflags = TXQ_FLAG_TXEOLINT_ENABLE |
1364                                         TXQ_FLAG_TXDESCINT_ENABLE;
1365         }
1366         axq_qnum = ath9k_hw_setuptxqueue(ah, qtype, &qi);
1367         if (axq_qnum == -1) {
1368                 /*
1369                  * NB: don't print a message, this happens
1370                  * normally on parts with too few tx queues
1371                  */
1372                 return NULL;
1373         }
1374         if (!ATH_TXQ_SETUP(sc, axq_qnum)) {
1375                 struct ath_txq *txq = &sc->tx.txq[axq_qnum];
1376
1377                 txq->axq_qnum = axq_qnum;
1378                 txq->mac80211_qnum = -1;
1379                 txq->axq_link = NULL;
1380                 __skb_queue_head_init(&txq->complete_q);
1381                 INIT_LIST_HEAD(&txq->axq_q);
1382                 INIT_LIST_HEAD(&txq->axq_acq);
1383                 spin_lock_init(&txq->axq_lock);
1384                 txq->axq_depth = 0;
1385                 txq->axq_ampdu_depth = 0;
1386                 txq->axq_tx_inprogress = false;
1387                 sc->tx.txqsetup |= 1<<axq_qnum;
1388
1389                 txq->txq_headidx = txq->txq_tailidx = 0;
1390                 for (i = 0; i < ATH_TXFIFO_DEPTH; i++)
1391                         INIT_LIST_HEAD(&txq->txq_fifo[i]);
1392         }
1393         return &sc->tx.txq[axq_qnum];
1394 }
1395
1396 int ath_txq_update(struct ath_softc *sc, int qnum,
1397                    struct ath9k_tx_queue_info *qinfo)
1398 {
1399         struct ath_hw *ah = sc->sc_ah;
1400         int error = 0;
1401         struct ath9k_tx_queue_info qi;
1402
1403         if (qnum == sc->beacon.beaconq) {
1404                 /*
1405                  * XXX: for beacon queue, we just save the parameter.
1406                  * It will be picked up by ath_beaconq_config when
1407                  * it's necessary.
1408                  */
1409                 sc->beacon.beacon_qi = *qinfo;
1410                 return 0;
1411         }
1412
1413         BUG_ON(sc->tx.txq[qnum].axq_qnum != qnum);
1414
1415         ath9k_hw_get_txq_props(ah, qnum, &qi);
1416         qi.tqi_aifs = qinfo->tqi_aifs;
1417         qi.tqi_cwmin = qinfo->tqi_cwmin;
1418         qi.tqi_cwmax = qinfo->tqi_cwmax;
1419         qi.tqi_burstTime = qinfo->tqi_burstTime;
1420         qi.tqi_readyTime = qinfo->tqi_readyTime;
1421
1422         if (!ath9k_hw_set_txq_props(ah, qnum, &qi)) {
1423                 ath_err(ath9k_hw_common(sc->sc_ah),
1424                         "Unable to update hardware queue %u!\n", qnum);
1425                 error = -EIO;
1426         } else {
1427                 ath9k_hw_resettxqueue(ah, qnum);
1428         }
1429
1430         return error;
1431 }
1432
1433 int ath_cabq_update(struct ath_softc *sc)
1434 {
1435         struct ath9k_tx_queue_info qi;
1436         struct ath_beacon_config *cur_conf = &sc->cur_beacon_conf;
1437         int qnum = sc->beacon.cabq->axq_qnum;
1438
1439         ath9k_hw_get_txq_props(sc->sc_ah, qnum, &qi);
1440         /*
1441          * Ensure the readytime % is within the bounds.
1442          */
1443         if (sc->config.cabqReadytime < ATH9K_READY_TIME_LO_BOUND)
1444                 sc->config.cabqReadytime = ATH9K_READY_TIME_LO_BOUND;
1445         else if (sc->config.cabqReadytime > ATH9K_READY_TIME_HI_BOUND)
1446                 sc->config.cabqReadytime = ATH9K_READY_TIME_HI_BOUND;
1447
1448         qi.tqi_readyTime = (cur_conf->beacon_interval *
1449                             sc->config.cabqReadytime) / 100;
1450         ath_txq_update(sc, qnum, &qi);
1451
1452         return 0;
1453 }
1454
1455 static bool bf_is_ampdu_not_probing(struct ath_buf *bf)
1456 {
1457     struct ieee80211_tx_info *info = IEEE80211_SKB_CB(bf->bf_mpdu);
1458     return bf_isampdu(bf) && !(info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE);
1459 }
1460
1461 static void ath_drain_txq_list(struct ath_softc *sc, struct ath_txq *txq,
1462                                struct list_head *list, bool retry_tx)
1463 {
1464         struct ath_buf *bf, *lastbf;
1465         struct list_head bf_head;
1466         struct ath_tx_status ts;
1467
1468         memset(&ts, 0, sizeof(ts));
1469         ts.ts_status = ATH9K_TX_FLUSH;
1470         INIT_LIST_HEAD(&bf_head);
1471
1472         while (!list_empty(list)) {
1473                 bf = list_first_entry(list, struct ath_buf, list);
1474
1475                 if (bf->bf_stale) {
1476                         list_del(&bf->list);
1477
1478                         ath_tx_return_buffer(sc, bf);
1479                         continue;
1480                 }
1481
1482                 lastbf = bf->bf_lastbf;
1483                 list_cut_position(&bf_head, list, &lastbf->list);
1484
1485                 txq->axq_depth--;
1486                 if (bf_is_ampdu_not_probing(bf))
1487                         txq->axq_ampdu_depth--;
1488
1489                 if (bf_isampdu(bf))
1490                         ath_tx_complete_aggr(sc, txq, bf, &bf_head, &ts, 0,
1491                                              retry_tx);
1492                 else
1493                         ath_tx_complete_buf(sc, bf, txq, &bf_head, &ts, 0);
1494         }
1495 }
1496
1497 /*
1498  * Drain a given TX queue (could be Beacon or Data)
1499  *
1500  * This assumes output has been stopped and
1501  * we do not need to block ath_tx_tasklet.
1502  */
1503 void ath_draintxq(struct ath_softc *sc, struct ath_txq *txq, bool retry_tx)
1504 {
1505         ath_txq_lock(sc, txq);
1506
1507         if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
1508                 int idx = txq->txq_tailidx;
1509
1510                 while (!list_empty(&txq->txq_fifo[idx])) {
1511                         ath_drain_txq_list(sc, txq, &txq->txq_fifo[idx],
1512                                            retry_tx);
1513
1514                         INCR(idx, ATH_TXFIFO_DEPTH);
1515                 }
1516                 txq->txq_tailidx = idx;
1517         }
1518
1519         txq->axq_link = NULL;
1520         txq->axq_tx_inprogress = false;
1521         ath_drain_txq_list(sc, txq, &txq->axq_q, retry_tx);
1522
1523         /* flush any pending frames if aggregation is enabled */
1524         if ((sc->sc_flags & SC_OP_TXAGGR) && !retry_tx)
1525                 ath_txq_drain_pending_buffers(sc, txq);
1526
1527         ath_txq_unlock_complete(sc, txq);
1528 }
1529
1530 bool ath_drain_all_txq(struct ath_softc *sc, bool retry_tx)
1531 {
1532         struct ath_hw *ah = sc->sc_ah;
1533         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1534         struct ath_txq *txq;
1535         int i;
1536         u32 npend = 0;
1537
1538         if (sc->sc_flags & SC_OP_INVALID)
1539                 return true;
1540
1541         ath9k_hw_abort_tx_dma(ah);
1542
1543         /* Check if any queue remains active */
1544         for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
1545                 if (!ATH_TXQ_SETUP(sc, i))
1546                         continue;
1547
1548                 if (ath9k_hw_numtxpending(ah, sc->tx.txq[i].axq_qnum))
1549                         npend |= BIT(i);
1550         }
1551
1552         if (npend)
1553                 ath_err(common, "Failed to stop TX DMA, queues=0x%03x!\n", npend);
1554
1555         for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
1556                 if (!ATH_TXQ_SETUP(sc, i))
1557                         continue;
1558
1559                 /*
1560                  * The caller will resume queues with ieee80211_wake_queues.
1561                  * Mark the queue as not stopped to prevent ath_tx_complete
1562                  * from waking the queue too early.
1563                  */
1564                 txq = &sc->tx.txq[i];
1565                 txq->stopped = false;
1566                 ath_draintxq(sc, txq, retry_tx);
1567         }
1568
1569         return !npend;
1570 }
1571
1572 void ath_tx_cleanupq(struct ath_softc *sc, struct ath_txq *txq)
1573 {
1574         ath9k_hw_releasetxqueue(sc->sc_ah, txq->axq_qnum);
1575         sc->tx.txqsetup &= ~(1<<txq->axq_qnum);
1576 }
1577
1578 /* For each axq_acq entry, for each tid, try to schedule packets
1579  * for transmit until ampdu_depth has reached min Q depth.
1580  */
1581 void ath_txq_schedule(struct ath_softc *sc, struct ath_txq *txq)
1582 {
1583         struct ath_atx_ac *ac, *ac_tmp, *last_ac;
1584         struct ath_atx_tid *tid, *last_tid;
1585
1586         if (work_pending(&sc->hw_reset_work) || list_empty(&txq->axq_acq) ||
1587             txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH)
1588                 return;
1589
1590         ac = list_first_entry(&txq->axq_acq, struct ath_atx_ac, list);
1591         last_ac = list_entry(txq->axq_acq.prev, struct ath_atx_ac, list);
1592
1593         list_for_each_entry_safe(ac, ac_tmp, &txq->axq_acq, list) {
1594                 last_tid = list_entry(ac->tid_q.prev, struct ath_atx_tid, list);
1595                 list_del(&ac->list);
1596                 ac->sched = false;
1597
1598                 while (!list_empty(&ac->tid_q)) {
1599                         tid = list_first_entry(&ac->tid_q, struct ath_atx_tid,
1600                                                list);
1601                         list_del(&tid->list);
1602                         tid->sched = false;
1603
1604                         if (tid->paused)
1605                                 continue;
1606
1607                         ath_tx_sched_aggr(sc, txq, tid);
1608
1609                         /*
1610                          * add tid to round-robin queue if more frames
1611                          * are pending for the tid
1612                          */
1613                         if (!skb_queue_empty(&tid->buf_q))
1614                                 ath_tx_queue_tid(txq, tid);
1615
1616                         if (tid == last_tid ||
1617                             txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH)
1618                                 break;
1619                 }
1620
1621                 if (!list_empty(&ac->tid_q) && !ac->sched) {
1622                         ac->sched = true;
1623                         list_add_tail(&ac->list, &txq->axq_acq);
1624                 }
1625
1626                 if (ac == last_ac ||
1627                     txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH)
1628                         return;
1629         }
1630 }
1631
1632 /***********/
1633 /* TX, DMA */
1634 /***********/
1635
1636 /*
1637  * Insert a chain of ath_buf (descriptors) on a txq and
1638  * assume the descriptors are already chained together by caller.
1639  */
1640 static void ath_tx_txqaddbuf(struct ath_softc *sc, struct ath_txq *txq,
1641                              struct list_head *head, bool internal)
1642 {
1643         struct ath_hw *ah = sc->sc_ah;
1644         struct ath_common *common = ath9k_hw_common(ah);
1645         struct ath_buf *bf, *bf_last;
1646         bool puttxbuf = false;
1647         bool edma;
1648
1649         /*
1650          * Insert the frame on the outbound list and
1651          * pass it on to the hardware.
1652          */
1653
1654         if (list_empty(head))
1655                 return;
1656
1657         edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA);
1658         bf = list_first_entry(head, struct ath_buf, list);
1659         bf_last = list_entry(head->prev, struct ath_buf, list);
1660
1661         ath_dbg(common, QUEUE, "qnum: %d, txq depth: %d\n",
1662                 txq->axq_qnum, txq->axq_depth);
1663
1664         if (edma && list_empty(&txq->txq_fifo[txq->txq_headidx])) {
1665                 list_splice_tail_init(head, &txq->txq_fifo[txq->txq_headidx]);
1666                 INCR(txq->txq_headidx, ATH_TXFIFO_DEPTH);
1667                 puttxbuf = true;
1668         } else {
1669                 list_splice_tail_init(head, &txq->axq_q);
1670
1671                 if (txq->axq_link) {
1672                         ath9k_hw_set_desc_link(ah, txq->axq_link, bf->bf_daddr);
1673                         ath_dbg(common, XMIT, "link[%u] (%p)=%llx (%p)\n",
1674                                 txq->axq_qnum, txq->axq_link,
1675                                 ito64(bf->bf_daddr), bf->bf_desc);
1676                 } else if (!edma)
1677                         puttxbuf = true;
1678
1679                 txq->axq_link = bf_last->bf_desc;
1680         }
1681
1682         if (puttxbuf) {
1683                 TX_STAT_INC(txq->axq_qnum, puttxbuf);
1684                 ath9k_hw_puttxbuf(ah, txq->axq_qnum, bf->bf_daddr);
1685                 ath_dbg(common, XMIT, "TXDP[%u] = %llx (%p)\n",
1686                         txq->axq_qnum, ito64(bf->bf_daddr), bf->bf_desc);
1687         }
1688
1689         if (!edma) {
1690                 TX_STAT_INC(txq->axq_qnum, txstart);
1691                 ath9k_hw_txstart(ah, txq->axq_qnum);
1692         }
1693
1694         if (!internal) {
1695                 txq->axq_depth++;
1696                 if (bf_is_ampdu_not_probing(bf))
1697                         txq->axq_ampdu_depth++;
1698         }
1699 }
1700
1701 static void ath_tx_send_ampdu(struct ath_softc *sc, struct ath_atx_tid *tid,
1702                               struct sk_buff *skb, struct ath_tx_control *txctl)
1703 {
1704         struct ath_frame_info *fi = get_frame_info(skb);
1705         struct list_head bf_head;
1706         struct ath_buf *bf;
1707
1708         /*
1709          * Do not queue to h/w when any of the following conditions is true:
1710          * - there are pending frames in software queue
1711          * - the TID is currently paused for ADDBA/BAR request
1712          * - seqno is not within block-ack window
1713          * - h/w queue depth exceeds low water mark
1714          */
1715         if (!skb_queue_empty(&tid->buf_q) || tid->paused ||
1716             !BAW_WITHIN(tid->seq_start, tid->baw_size, tid->seq_next) ||
1717             txctl->txq->axq_ampdu_depth >= ATH_AGGR_MIN_QDEPTH) {
1718                 /*
1719                  * Add this frame to software queue for scheduling later
1720                  * for aggregation.
1721                  */
1722                 TX_STAT_INC(txctl->txq->axq_qnum, a_queued_sw);
1723                 __skb_queue_tail(&tid->buf_q, skb);
1724                 if (!txctl->an || !txctl->an->sleeping)
1725                         ath_tx_queue_tid(txctl->txq, tid);
1726                 return;
1727         }
1728
1729         bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb);
1730         if (!bf)
1731                 return;
1732
1733         bf->bf_state.bf_type = BUF_AMPDU;
1734         INIT_LIST_HEAD(&bf_head);
1735         list_add(&bf->list, &bf_head);
1736
1737         /* Add sub-frame to BAW */
1738         ath_tx_addto_baw(sc, tid, bf->bf_state.seqno);
1739
1740         /* Queue to h/w without aggregation */
1741         TX_STAT_INC(txctl->txq->axq_qnum, a_queued_hw);
1742         bf->bf_lastbf = bf;
1743         ath_tx_fill_desc(sc, bf, txctl->txq, fi->framelen);
1744         ath_tx_txqaddbuf(sc, txctl->txq, &bf_head, false);
1745 }
1746
1747 static void ath_tx_send_normal(struct ath_softc *sc, struct ath_txq *txq,
1748                                struct ath_atx_tid *tid, struct sk_buff *skb)
1749 {
1750         struct ath_frame_info *fi = get_frame_info(skb);
1751         struct list_head bf_head;
1752         struct ath_buf *bf;
1753
1754         bf = fi->bf;
1755         if (!bf)
1756                 bf = ath_tx_setup_buffer(sc, txq, tid, skb);
1757
1758         if (!bf)
1759                 return;
1760
1761         INIT_LIST_HEAD(&bf_head);
1762         list_add_tail(&bf->list, &bf_head);
1763         bf->bf_state.bf_type = 0;
1764
1765         bf->bf_lastbf = bf;
1766         ath_tx_fill_desc(sc, bf, txq, fi->framelen);
1767         ath_tx_txqaddbuf(sc, txq, &bf_head, false);
1768         TX_STAT_INC(txq->axq_qnum, queued);
1769 }
1770
1771 static void setup_frame_info(struct ieee80211_hw *hw, struct sk_buff *skb,
1772                              int framelen)
1773 {
1774         struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
1775         struct ieee80211_sta *sta = tx_info->control.sta;
1776         struct ieee80211_key_conf *hw_key = tx_info->control.hw_key;
1777         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1778         struct ath_frame_info *fi = get_frame_info(skb);
1779         struct ath_node *an = NULL;
1780         enum ath9k_key_type keytype;
1781
1782         keytype = ath9k_cmn_get_hw_crypto_keytype(skb);
1783
1784         if (sta)
1785                 an = (struct ath_node *) sta->drv_priv;
1786
1787         memset(fi, 0, sizeof(*fi));
1788         if (hw_key)
1789                 fi->keyix = hw_key->hw_key_idx;
1790         else if (an && ieee80211_is_data(hdr->frame_control) && an->ps_key > 0)
1791                 fi->keyix = an->ps_key;
1792         else
1793                 fi->keyix = ATH9K_TXKEYIX_INVALID;
1794         fi->keytype = keytype;
1795         fi->framelen = framelen;
1796 }
1797
1798 u8 ath_txchainmask_reduction(struct ath_softc *sc, u8 chainmask, u32 rate)
1799 {
1800         struct ath_hw *ah = sc->sc_ah;
1801         struct ath9k_channel *curchan = ah->curchan;
1802         if ((ah->caps.hw_caps & ATH9K_HW_CAP_APM) &&
1803             (curchan->channelFlags & CHANNEL_5GHZ) &&
1804             (chainmask == 0x7) && (rate < 0x90))
1805                 return 0x3;
1806         else
1807                 return chainmask;
1808 }
1809
1810 /*
1811  * Assign a descriptor (and sequence number if necessary,
1812  * and map buffer for DMA. Frees skb on error
1813  */
1814 static struct ath_buf *ath_tx_setup_buffer(struct ath_softc *sc,
1815                                            struct ath_txq *txq,
1816                                            struct ath_atx_tid *tid,
1817                                            struct sk_buff *skb)
1818 {
1819         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1820         struct ath_frame_info *fi = get_frame_info(skb);
1821         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1822         struct ath_buf *bf;
1823         u16 seqno;
1824
1825         bf = ath_tx_get_buffer(sc);
1826         if (!bf) {
1827                 ath_dbg(common, XMIT, "TX buffers are full\n");
1828                 goto error;
1829         }
1830
1831         ATH_TXBUF_RESET(bf);
1832
1833         if (tid) {
1834                 seqno = tid->seq_next;
1835                 hdr->seq_ctrl = cpu_to_le16(tid->seq_next << IEEE80211_SEQ_SEQ_SHIFT);
1836                 INCR(tid->seq_next, IEEE80211_SEQ_MAX);
1837                 bf->bf_state.seqno = seqno;
1838         }
1839
1840         bf->bf_mpdu = skb;
1841
1842         bf->bf_buf_addr = dma_map_single(sc->dev, skb->data,
1843                                          skb->len, DMA_TO_DEVICE);
1844         if (unlikely(dma_mapping_error(sc->dev, bf->bf_buf_addr))) {
1845                 bf->bf_mpdu = NULL;
1846                 bf->bf_buf_addr = 0;
1847                 ath_err(ath9k_hw_common(sc->sc_ah),
1848                         "dma_mapping_error() on TX\n");
1849                 ath_tx_return_buffer(sc, bf);
1850                 goto error;
1851         }
1852
1853         fi->bf = bf;
1854
1855         return bf;
1856
1857 error:
1858         dev_kfree_skb_any(skb);
1859         return NULL;
1860 }
1861
1862 /* FIXME: tx power */
1863 static void ath_tx_start_dma(struct ath_softc *sc, struct sk_buff *skb,
1864                              struct ath_tx_control *txctl)
1865 {
1866         struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
1867         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1868         struct ath_atx_tid *tid = NULL;
1869         struct ath_buf *bf;
1870         u8 tidno;
1871
1872         if ((sc->sc_flags & SC_OP_TXAGGR) && txctl->an &&
1873                 ieee80211_is_data_qos(hdr->frame_control)) {
1874                 tidno = ieee80211_get_qos_ctl(hdr)[0] &
1875                         IEEE80211_QOS_CTL_TID_MASK;
1876                 tid = ATH_AN_2_TID(txctl->an, tidno);
1877
1878                 WARN_ON(tid->ac->txq != txctl->txq);
1879         }
1880
1881         if ((tx_info->flags & IEEE80211_TX_CTL_AMPDU) && tid) {
1882                 /*
1883                  * Try aggregation if it's a unicast data frame
1884                  * and the destination is HT capable.
1885                  */
1886                 ath_tx_send_ampdu(sc, tid, skb, txctl);
1887         } else {
1888                 bf = ath_tx_setup_buffer(sc, txctl->txq, tid, skb);
1889                 if (!bf)
1890                         return;
1891
1892                 bf->bf_state.bfs_paprd = txctl->paprd;
1893
1894                 if (txctl->paprd)
1895                         bf->bf_state.bfs_paprd_timestamp = jiffies;
1896
1897                 ath_tx_send_normal(sc, txctl->txq, tid, skb);
1898         }
1899 }
1900
1901 /* Upon failure caller should free skb */
1902 int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb,
1903                  struct ath_tx_control *txctl)
1904 {
1905         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
1906         struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1907         struct ieee80211_sta *sta = info->control.sta;
1908         struct ieee80211_vif *vif = info->control.vif;
1909         struct ath_softc *sc = hw->priv;
1910         struct ath_txq *txq = txctl->txq;
1911         int padpos, padsize;
1912         int frmlen = skb->len + FCS_LEN;
1913         int q;
1914
1915         /* NOTE:  sta can be NULL according to net/mac80211.h */
1916         if (sta)
1917                 txctl->an = (struct ath_node *)sta->drv_priv;
1918
1919         if (info->control.hw_key)
1920                 frmlen += info->control.hw_key->icv_len;
1921
1922         /*
1923          * As a temporary workaround, assign seq# here; this will likely need
1924          * to be cleaned up to work better with Beacon transmission and virtual
1925          * BSSes.
1926          */
1927         if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ) {
1928                 if (info->flags & IEEE80211_TX_CTL_FIRST_FRAGMENT)
1929                         sc->tx.seq_no += 0x10;
1930                 hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG);
1931                 hdr->seq_ctrl |= cpu_to_le16(sc->tx.seq_no);
1932         }
1933
1934         /* Add the padding after the header if this is not already done */
1935         padpos = ath9k_cmn_padpos(hdr->frame_control);
1936         padsize = padpos & 3;
1937         if (padsize && skb->len > padpos) {
1938                 if (skb_headroom(skb) < padsize)
1939                         return -ENOMEM;
1940
1941                 skb_push(skb, padsize);
1942                 memmove(skb->data, skb->data + padsize, padpos);
1943                 hdr = (struct ieee80211_hdr *) skb->data;
1944         }
1945
1946         if ((vif && vif->type != NL80211_IFTYPE_AP &&
1947                     vif->type != NL80211_IFTYPE_AP_VLAN) ||
1948             !ieee80211_is_data(hdr->frame_control))
1949                 info->flags |= IEEE80211_TX_CTL_CLEAR_PS_FILT;
1950
1951         setup_frame_info(hw, skb, frmlen);
1952
1953         /*
1954          * At this point, the vif, hw_key and sta pointers in the tx control
1955          * info are no longer valid (overwritten by the ath_frame_info data.
1956          */
1957
1958         q = skb_get_queue_mapping(skb);
1959
1960         ath_txq_lock(sc, txq);
1961         if (txq == sc->tx.txq_map[q] &&
1962             ++txq->pending_frames > ATH_MAX_QDEPTH && !txq->stopped) {
1963                 ieee80211_stop_queue(sc->hw, q);
1964                 txq->stopped = true;
1965         }
1966
1967         ath_tx_start_dma(sc, skb, txctl);
1968
1969         ath_txq_unlock(sc, txq);
1970
1971         return 0;
1972 }
1973
1974 /*****************/
1975 /* TX Completion */
1976 /*****************/
1977
1978 static void ath_tx_complete(struct ath_softc *sc, struct sk_buff *skb,
1979                             int tx_flags, struct ath_txq *txq)
1980 {
1981         struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
1982         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
1983         struct ieee80211_hdr * hdr = (struct ieee80211_hdr *)skb->data;
1984         int q, padpos, padsize;
1985
1986         ath_dbg(common, XMIT, "TX complete: skb: %p\n", skb);
1987
1988         if (!(tx_flags & ATH_TX_ERROR))
1989                 /* Frame was ACKed */
1990                 tx_info->flags |= IEEE80211_TX_STAT_ACK;
1991
1992         padpos = ath9k_cmn_padpos(hdr->frame_control);
1993         padsize = padpos & 3;
1994         if (padsize && skb->len>padpos+padsize) {
1995                 /*
1996                  * Remove MAC header padding before giving the frame back to
1997                  * mac80211.
1998                  */
1999                 memmove(skb->data + padsize, skb->data, padpos);
2000                 skb_pull(skb, padsize);
2001         }
2002
2003         if ((sc->ps_flags & PS_WAIT_FOR_TX_ACK) && !txq->axq_depth) {
2004                 sc->ps_flags &= ~PS_WAIT_FOR_TX_ACK;
2005                 ath_dbg(common, PS,
2006                         "Going back to sleep after having received TX status (0x%lx)\n",
2007                         sc->ps_flags & (PS_WAIT_FOR_BEACON |
2008                                         PS_WAIT_FOR_CAB |
2009                                         PS_WAIT_FOR_PSPOLL_DATA |
2010                                         PS_WAIT_FOR_TX_ACK));
2011         }
2012
2013         q = skb_get_queue_mapping(skb);
2014         if (txq == sc->tx.txq_map[q]) {
2015                 if (WARN_ON(--txq->pending_frames < 0))
2016                         txq->pending_frames = 0;
2017
2018                 if (txq->stopped && txq->pending_frames < ATH_MAX_QDEPTH) {
2019                         ieee80211_wake_queue(sc->hw, q);
2020                         txq->stopped = false;
2021                 }
2022         }
2023
2024         __skb_queue_tail(&txq->complete_q, skb);
2025 }
2026
2027 static void ath_tx_complete_buf(struct ath_softc *sc, struct ath_buf *bf,
2028                                 struct ath_txq *txq, struct list_head *bf_q,
2029                                 struct ath_tx_status *ts, int txok)
2030 {
2031         struct sk_buff *skb = bf->bf_mpdu;
2032         struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
2033         unsigned long flags;
2034         int tx_flags = 0;
2035
2036         if (!txok)
2037                 tx_flags |= ATH_TX_ERROR;
2038
2039         if (ts->ts_status & ATH9K_TXERR_FILT)
2040                 tx_info->flags |= IEEE80211_TX_STAT_TX_FILTERED;
2041
2042         dma_unmap_single(sc->dev, bf->bf_buf_addr, skb->len, DMA_TO_DEVICE);
2043         bf->bf_buf_addr = 0;
2044
2045         if (bf->bf_state.bfs_paprd) {
2046                 if (time_after(jiffies,
2047                                 bf->bf_state.bfs_paprd_timestamp +
2048                                 msecs_to_jiffies(ATH_PAPRD_TIMEOUT)))
2049                         dev_kfree_skb_any(skb);
2050                 else
2051                         complete(&sc->paprd_complete);
2052         } else {
2053                 ath_debug_stat_tx(sc, bf, ts, txq, tx_flags);
2054                 ath_tx_complete(sc, skb, tx_flags, txq);
2055         }
2056         /* At this point, skb (bf->bf_mpdu) is consumed...make sure we don't
2057          * accidentally reference it later.
2058          */
2059         bf->bf_mpdu = NULL;
2060
2061         /*
2062          * Return the list of ath_buf of this mpdu to free queue
2063          */
2064         spin_lock_irqsave(&sc->tx.txbuflock, flags);
2065         list_splice_tail_init(bf_q, &sc->tx.txbuf);
2066         spin_unlock_irqrestore(&sc->tx.txbuflock, flags);
2067 }
2068
2069 static void ath_tx_rc_status(struct ath_softc *sc, struct ath_buf *bf,
2070                              struct ath_tx_status *ts, int nframes, int nbad,
2071                              int txok)
2072 {
2073         struct sk_buff *skb = bf->bf_mpdu;
2074         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
2075         struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
2076         struct ieee80211_hw *hw = sc->hw;
2077         struct ath_hw *ah = sc->sc_ah;
2078         u8 i, tx_rateindex;
2079
2080         if (txok)
2081                 tx_info->status.ack_signal = ts->ts_rssi;
2082
2083         tx_rateindex = ts->ts_rateindex;
2084         WARN_ON(tx_rateindex >= hw->max_rates);
2085
2086         if (tx_info->flags & IEEE80211_TX_CTL_AMPDU) {
2087                 tx_info->flags |= IEEE80211_TX_STAT_AMPDU;
2088
2089                 BUG_ON(nbad > nframes);
2090         }
2091         tx_info->status.ampdu_len = nframes;
2092         tx_info->status.ampdu_ack_len = nframes - nbad;
2093
2094         if ((ts->ts_status & ATH9K_TXERR_FILT) == 0 &&
2095             (tx_info->flags & IEEE80211_TX_CTL_NO_ACK) == 0) {
2096                 /*
2097                  * If an underrun error is seen assume it as an excessive
2098                  * retry only if max frame trigger level has been reached
2099                  * (2 KB for single stream, and 4 KB for dual stream).
2100                  * Adjust the long retry as if the frame was tried
2101                  * hw->max_rate_tries times to affect how rate control updates
2102                  * PER for the failed rate.
2103                  * In case of congestion on the bus penalizing this type of
2104                  * underruns should help hardware actually transmit new frames
2105                  * successfully by eventually preferring slower rates.
2106                  * This itself should also alleviate congestion on the bus.
2107                  */
2108                 if (unlikely(ts->ts_flags & (ATH9K_TX_DATA_UNDERRUN |
2109                                              ATH9K_TX_DELIM_UNDERRUN)) &&
2110                     ieee80211_is_data(hdr->frame_control) &&
2111                     ah->tx_trig_level >= sc->sc_ah->config.max_txtrig_level)
2112                         tx_info->status.rates[tx_rateindex].count =
2113                                 hw->max_rate_tries;
2114         }
2115
2116         for (i = tx_rateindex + 1; i < hw->max_rates; i++) {
2117                 tx_info->status.rates[i].count = 0;
2118                 tx_info->status.rates[i].idx = -1;
2119         }
2120
2121         tx_info->status.rates[tx_rateindex].count = ts->ts_longretry + 1;
2122 }
2123
2124 static void ath_tx_process_buffer(struct ath_softc *sc, struct ath_txq *txq,
2125                                   struct ath_tx_status *ts, struct ath_buf *bf,
2126                                   struct list_head *bf_head)
2127 {
2128         int txok;
2129
2130         txq->axq_depth--;
2131         txok = !(ts->ts_status & ATH9K_TXERR_MASK);
2132         txq->axq_tx_inprogress = false;
2133         if (bf_is_ampdu_not_probing(bf))
2134                 txq->axq_ampdu_depth--;
2135
2136         if (!bf_isampdu(bf)) {
2137                 ath_tx_rc_status(sc, bf, ts, 1, txok ? 0 : 1, txok);
2138                 ath_tx_complete_buf(sc, bf, txq, bf_head, ts, txok);
2139         } else
2140                 ath_tx_complete_aggr(sc, txq, bf, bf_head, ts, txok, true);
2141
2142         if (sc->sc_flags & SC_OP_TXAGGR)
2143                 ath_txq_schedule(sc, txq);
2144 }
2145
2146 static void ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq)
2147 {
2148         struct ath_hw *ah = sc->sc_ah;
2149         struct ath_common *common = ath9k_hw_common(ah);
2150         struct ath_buf *bf, *lastbf, *bf_held = NULL;
2151         struct list_head bf_head;
2152         struct ath_desc *ds;
2153         struct ath_tx_status ts;
2154         int status;
2155
2156         ath_dbg(common, QUEUE, "tx queue %d (%x), link %p\n",
2157                 txq->axq_qnum, ath9k_hw_gettxbuf(sc->sc_ah, txq->axq_qnum),
2158                 txq->axq_link);
2159
2160         ath_txq_lock(sc, txq);
2161         for (;;) {
2162                 if (work_pending(&sc->hw_reset_work))
2163                         break;
2164
2165                 if (list_empty(&txq->axq_q)) {
2166                         txq->axq_link = NULL;
2167                         if (sc->sc_flags & SC_OP_TXAGGR)
2168                                 ath_txq_schedule(sc, txq);
2169                         break;
2170                 }
2171                 bf = list_first_entry(&txq->axq_q, struct ath_buf, list);
2172
2173                 /*
2174                  * There is a race condition that a BH gets scheduled
2175                  * after sw writes TxE and before hw re-load the last
2176                  * descriptor to get the newly chained one.
2177                  * Software must keep the last DONE descriptor as a
2178                  * holding descriptor - software does so by marking
2179                  * it with the STALE flag.
2180                  */
2181                 bf_held = NULL;
2182                 if (bf->bf_stale) {
2183                         bf_held = bf;
2184                         if (list_is_last(&bf_held->list, &txq->axq_q))
2185                                 break;
2186
2187                         bf = list_entry(bf_held->list.next, struct ath_buf,
2188                                         list);
2189                 }
2190
2191                 lastbf = bf->bf_lastbf;
2192                 ds = lastbf->bf_desc;
2193
2194                 memset(&ts, 0, sizeof(ts));
2195                 status = ath9k_hw_txprocdesc(ah, ds, &ts);
2196                 if (status == -EINPROGRESS)
2197                         break;
2198
2199                 TX_STAT_INC(txq->axq_qnum, txprocdesc);
2200
2201                 /*
2202                  * Remove ath_buf's of the same transmit unit from txq,
2203                  * however leave the last descriptor back as the holding
2204                  * descriptor for hw.
2205                  */
2206                 lastbf->bf_stale = true;
2207                 INIT_LIST_HEAD(&bf_head);
2208                 if (!list_is_singular(&lastbf->list))
2209                         list_cut_position(&bf_head,
2210                                 &txq->axq_q, lastbf->list.prev);
2211
2212                 if (bf_held) {
2213                         list_del(&bf_held->list);
2214                         ath_tx_return_buffer(sc, bf_held);
2215                 }
2216
2217                 ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head);
2218         }
2219         ath_txq_unlock_complete(sc, txq);
2220 }
2221
2222 static void ath_tx_complete_poll_work(struct work_struct *work)
2223 {
2224         struct ath_softc *sc = container_of(work, struct ath_softc,
2225                         tx_complete_work.work);
2226         struct ath_txq *txq;
2227         int i;
2228         bool needreset = false;
2229 #ifdef CONFIG_ATH9K_DEBUGFS
2230         sc->tx_complete_poll_work_seen++;
2231 #endif
2232
2233         for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++)
2234                 if (ATH_TXQ_SETUP(sc, i)) {
2235                         txq = &sc->tx.txq[i];
2236                         ath_txq_lock(sc, txq);
2237                         if (txq->axq_depth) {
2238                                 if (txq->axq_tx_inprogress) {
2239                                         needreset = true;
2240                                         ath_txq_unlock(sc, txq);
2241                                         break;
2242                                 } else {
2243                                         txq->axq_tx_inprogress = true;
2244                                 }
2245                         }
2246                         ath_txq_unlock_complete(sc, txq);
2247                 }
2248
2249         if (needreset) {
2250                 ath_dbg(ath9k_hw_common(sc->sc_ah), RESET,
2251                         "tx hung, resetting the chip\n");
2252                 RESET_STAT_INC(sc, RESET_TYPE_TX_HANG);
2253                 ieee80211_queue_work(sc->hw, &sc->hw_reset_work);
2254         }
2255
2256         ieee80211_queue_delayed_work(sc->hw, &sc->tx_complete_work,
2257                         msecs_to_jiffies(ATH_TX_COMPLETE_POLL_INT));
2258 }
2259
2260
2261
2262 void ath_tx_tasklet(struct ath_softc *sc)
2263 {
2264         int i;
2265         u32 qcumask = ((1 << ATH9K_NUM_TX_QUEUES) - 1);
2266
2267         ath9k_hw_gettxintrtxqs(sc->sc_ah, &qcumask);
2268
2269         for (i = 0; i < ATH9K_NUM_TX_QUEUES; i++) {
2270                 if (ATH_TXQ_SETUP(sc, i) && (qcumask & (1 << i)))
2271                         ath_tx_processq(sc, &sc->tx.txq[i]);
2272         }
2273 }
2274
2275 void ath_tx_edma_tasklet(struct ath_softc *sc)
2276 {
2277         struct ath_tx_status ts;
2278         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
2279         struct ath_hw *ah = sc->sc_ah;
2280         struct ath_txq *txq;
2281         struct ath_buf *bf, *lastbf;
2282         struct list_head bf_head;
2283         int status;
2284
2285         for (;;) {
2286                 if (work_pending(&sc->hw_reset_work))
2287                         break;
2288
2289                 status = ath9k_hw_txprocdesc(ah, NULL, (void *)&ts);
2290                 if (status == -EINPROGRESS)
2291                         break;
2292                 if (status == -EIO) {
2293                         ath_dbg(common, XMIT, "Error processing tx status\n");
2294                         break;
2295                 }
2296
2297                 /* Skip beacon completions */
2298                 if (ts.qid == sc->beacon.beaconq)
2299                         continue;
2300
2301                 txq = &sc->tx.txq[ts.qid];
2302
2303                 ath_txq_lock(sc, txq);
2304
2305                 if (list_empty(&txq->txq_fifo[txq->txq_tailidx])) {
2306                         ath_txq_unlock(sc, txq);
2307                         return;
2308                 }
2309
2310                 bf = list_first_entry(&txq->txq_fifo[txq->txq_tailidx],
2311                                       struct ath_buf, list);
2312                 lastbf = bf->bf_lastbf;
2313
2314                 INIT_LIST_HEAD(&bf_head);
2315                 list_cut_position(&bf_head, &txq->txq_fifo[txq->txq_tailidx],
2316                                   &lastbf->list);
2317
2318                 if (list_empty(&txq->txq_fifo[txq->txq_tailidx])) {
2319                         INCR(txq->txq_tailidx, ATH_TXFIFO_DEPTH);
2320
2321                         if (!list_empty(&txq->axq_q)) {
2322                                 struct list_head bf_q;
2323
2324                                 INIT_LIST_HEAD(&bf_q);
2325                                 txq->axq_link = NULL;
2326                                 list_splice_tail_init(&txq->axq_q, &bf_q);
2327                                 ath_tx_txqaddbuf(sc, txq, &bf_q, true);
2328                         }
2329                 }
2330
2331                 ath_tx_process_buffer(sc, txq, &ts, bf, &bf_head);
2332                 ath_txq_unlock_complete(sc, txq);
2333         }
2334 }
2335
2336 /*****************/
2337 /* Init, Cleanup */
2338 /*****************/
2339
2340 static int ath_txstatus_setup(struct ath_softc *sc, int size)
2341 {
2342         struct ath_descdma *dd = &sc->txsdma;
2343         u8 txs_len = sc->sc_ah->caps.txs_len;
2344
2345         dd->dd_desc_len = size * txs_len;
2346         dd->dd_desc = dma_alloc_coherent(sc->dev, dd->dd_desc_len,
2347                                          &dd->dd_desc_paddr, GFP_KERNEL);
2348         if (!dd->dd_desc)
2349                 return -ENOMEM;
2350
2351         return 0;
2352 }
2353
2354 static int ath_tx_edma_init(struct ath_softc *sc)
2355 {
2356         int err;
2357
2358         err = ath_txstatus_setup(sc, ATH_TXSTATUS_RING_SIZE);
2359         if (!err)
2360                 ath9k_hw_setup_statusring(sc->sc_ah, sc->txsdma.dd_desc,
2361                                           sc->txsdma.dd_desc_paddr,
2362                                           ATH_TXSTATUS_RING_SIZE);
2363
2364         return err;
2365 }
2366
2367 static void ath_tx_edma_cleanup(struct ath_softc *sc)
2368 {
2369         struct ath_descdma *dd = &sc->txsdma;
2370
2371         dma_free_coherent(sc->dev, dd->dd_desc_len, dd->dd_desc,
2372                           dd->dd_desc_paddr);
2373 }
2374
2375 int ath_tx_init(struct ath_softc *sc, int nbufs)
2376 {
2377         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
2378         int error = 0;
2379
2380         spin_lock_init(&sc->tx.txbuflock);
2381
2382         error = ath_descdma_setup(sc, &sc->tx.txdma, &sc->tx.txbuf,
2383                                   "tx", nbufs, 1, 1);
2384         if (error != 0) {
2385                 ath_err(common,
2386                         "Failed to allocate tx descriptors: %d\n", error);
2387                 goto err;
2388         }
2389
2390         error = ath_descdma_setup(sc, &sc->beacon.bdma, &sc->beacon.bbuf,
2391                                   "beacon", ATH_BCBUF, 1, 1);
2392         if (error != 0) {
2393                 ath_err(common,
2394                         "Failed to allocate beacon descriptors: %d\n", error);
2395                 goto err;
2396         }
2397
2398         INIT_DELAYED_WORK(&sc->tx_complete_work, ath_tx_complete_poll_work);
2399
2400         if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) {
2401                 error = ath_tx_edma_init(sc);
2402                 if (error)
2403                         goto err;
2404         }
2405
2406 err:
2407         if (error != 0)
2408                 ath_tx_cleanup(sc);
2409
2410         return error;
2411 }
2412
2413 void ath_tx_cleanup(struct ath_softc *sc)
2414 {
2415         if (sc->beacon.bdma.dd_desc_len != 0)
2416                 ath_descdma_cleanup(sc, &sc->beacon.bdma, &sc->beacon.bbuf);
2417
2418         if (sc->tx.txdma.dd_desc_len != 0)
2419                 ath_descdma_cleanup(sc, &sc->tx.txdma, &sc->tx.txbuf);
2420
2421         if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_EDMA)
2422                 ath_tx_edma_cleanup(sc);
2423 }
2424
2425 void ath_tx_node_init(struct ath_softc *sc, struct ath_node *an)
2426 {
2427         struct ath_atx_tid *tid;
2428         struct ath_atx_ac *ac;
2429         int tidno, acno;
2430
2431         for (tidno = 0, tid = &an->tid[tidno];
2432              tidno < WME_NUM_TID;
2433              tidno++, tid++) {
2434                 tid->an        = an;
2435                 tid->tidno     = tidno;
2436                 tid->seq_start = tid->seq_next = 0;
2437                 tid->baw_size  = WME_MAX_BA;
2438                 tid->baw_head  = tid->baw_tail = 0;
2439                 tid->sched     = false;
2440                 tid->paused    = false;
2441                 tid->state &= ~AGGR_CLEANUP;
2442                 __skb_queue_head_init(&tid->buf_q);
2443                 acno = TID_TO_WME_AC(tidno);
2444                 tid->ac = &an->ac[acno];
2445                 tid->state &= ~AGGR_ADDBA_COMPLETE;
2446                 tid->state &= ~AGGR_ADDBA_PROGRESS;
2447         }
2448
2449         for (acno = 0, ac = &an->ac[acno];
2450              acno < WME_NUM_AC; acno++, ac++) {
2451                 ac->sched    = false;
2452                 ac->txq = sc->tx.txq_map[acno];
2453                 INIT_LIST_HEAD(&ac->tid_q);
2454         }
2455 }
2456
2457 void ath_tx_node_cleanup(struct ath_softc *sc, struct ath_node *an)
2458 {
2459         struct ath_atx_ac *ac;
2460         struct ath_atx_tid *tid;
2461         struct ath_txq *txq;
2462         int tidno;
2463
2464         for (tidno = 0, tid = &an->tid[tidno];
2465              tidno < WME_NUM_TID; tidno++, tid++) {
2466
2467                 ac = tid->ac;
2468                 txq = ac->txq;
2469
2470                 ath_txq_lock(sc, txq);
2471
2472                 if (tid->sched) {
2473                         list_del(&tid->list);
2474                         tid->sched = false;
2475                 }
2476
2477                 if (ac->sched) {
2478                         list_del(&ac->list);
2479                         tid->ac->sched = false;
2480                 }
2481
2482                 ath_tid_drain(sc, txq, tid);
2483                 tid->state &= ~AGGR_ADDBA_COMPLETE;
2484                 tid->state &= ~AGGR_CLEANUP;
2485
2486                 ath_txq_unlock(sc, txq);
2487         }
2488 }