Merge remote-tracking branches 'spi/topic/altera', 'spi/topic/at79', 'spi/topic/bcm...
[sfrench/cifs-2.6.git] / drivers / net / wireless / intel / iwlwifi / dvm / tx.c
1 /******************************************************************************
2  *
3  * GPL LICENSE SUMMARY
4  *
5  * Copyright(c) 2008 - 2014 Intel Corporation. All rights reserved.
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of version 2 of the GNU General Public License as
9  * published by the Free Software Foundation.
10  *
11  * This program is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
19  * USA
20  *
21  * The full GNU General Public License is included in this distribution
22  * in the file called COPYING.
23  *
24  * Contact Information:
25  *  Intel Linux Wireless <linuxwifi@intel.com>
26  * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
27  *
28  *****************************************************************************/
29
30 #include <linux/kernel.h>
31 #include <linux/module.h>
32 #include <linux/sched.h>
33 #include <linux/ieee80211.h>
34 #include "iwl-io.h"
35 #include "iwl-trans.h"
36 #include "iwl-agn-hw.h"
37 #include "dev.h"
38 #include "agn.h"
39
40 static const u8 tid_to_ac[] = {
41         IEEE80211_AC_BE,
42         IEEE80211_AC_BK,
43         IEEE80211_AC_BK,
44         IEEE80211_AC_BE,
45         IEEE80211_AC_VI,
46         IEEE80211_AC_VI,
47         IEEE80211_AC_VO,
48         IEEE80211_AC_VO,
49 };
50
51 static void iwlagn_tx_cmd_protection(struct iwl_priv *priv,
52                                      struct ieee80211_tx_info *info,
53                                      __le16 fc, __le32 *tx_flags)
54 {
55         if (info->control.rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS ||
56             info->control.rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT ||
57             info->flags & IEEE80211_TX_CTL_AMPDU)
58                 *tx_flags |= TX_CMD_FLG_PROT_REQUIRE_MSK;
59 }
60
61 /*
62  * handle build REPLY_TX command notification.
63  */
64 static void iwlagn_tx_cmd_build_basic(struct iwl_priv *priv,
65                                       struct sk_buff *skb,
66                                       struct iwl_tx_cmd *tx_cmd,
67                                       struct ieee80211_tx_info *info,
68                                       struct ieee80211_hdr *hdr, u8 sta_id)
69 {
70         __le16 fc = hdr->frame_control;
71         __le32 tx_flags = tx_cmd->tx_flags;
72
73         tx_cmd->stop_time.life_time = TX_CMD_LIFE_TIME_INFINITE;
74
75         if (!(info->flags & IEEE80211_TX_CTL_NO_ACK))
76                 tx_flags |= TX_CMD_FLG_ACK_MSK;
77         else
78                 tx_flags &= ~TX_CMD_FLG_ACK_MSK;
79
80         if (ieee80211_is_probe_resp(fc))
81                 tx_flags |= TX_CMD_FLG_TSF_MSK;
82         else if (ieee80211_is_back_req(fc))
83                 tx_flags |= TX_CMD_FLG_ACK_MSK | TX_CMD_FLG_IMM_BA_RSP_MASK;
84         else if (info->band == NL80211_BAND_2GHZ &&
85                  priv->lib->bt_params &&
86                  priv->lib->bt_params->advanced_bt_coexist &&
87                  (ieee80211_is_auth(fc) || ieee80211_is_assoc_req(fc) ||
88                  ieee80211_is_reassoc_req(fc) ||
89                  info->control.flags & IEEE80211_TX_CTRL_PORT_CTRL_PROTO))
90                 tx_flags |= TX_CMD_FLG_IGNORE_BT;
91
92
93         tx_cmd->sta_id = sta_id;
94         if (ieee80211_has_morefrags(fc))
95                 tx_flags |= TX_CMD_FLG_MORE_FRAG_MSK;
96
97         if (ieee80211_is_data_qos(fc)) {
98                 u8 *qc = ieee80211_get_qos_ctl(hdr);
99                 tx_cmd->tid_tspec = qc[0] & 0xf;
100                 tx_flags &= ~TX_CMD_FLG_SEQ_CTL_MSK;
101         } else {
102                 tx_cmd->tid_tspec = IWL_TID_NON_QOS;
103                 if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ)
104                         tx_flags |= TX_CMD_FLG_SEQ_CTL_MSK;
105                 else
106                         tx_flags &= ~TX_CMD_FLG_SEQ_CTL_MSK;
107         }
108
109         iwlagn_tx_cmd_protection(priv, info, fc, &tx_flags);
110
111         tx_flags &= ~(TX_CMD_FLG_ANT_SEL_MSK);
112         if (ieee80211_is_mgmt(fc)) {
113                 if (ieee80211_is_assoc_req(fc) || ieee80211_is_reassoc_req(fc))
114                         tx_cmd->timeout.pm_frame_timeout = cpu_to_le16(3);
115                 else
116                         tx_cmd->timeout.pm_frame_timeout = cpu_to_le16(2);
117         } else {
118                 tx_cmd->timeout.pm_frame_timeout = 0;
119         }
120
121         tx_cmd->driver_txop = 0;
122         tx_cmd->tx_flags = tx_flags;
123         tx_cmd->next_frame_len = 0;
124 }
125
126 static void iwlagn_tx_cmd_build_rate(struct iwl_priv *priv,
127                                      struct iwl_tx_cmd *tx_cmd,
128                                      struct ieee80211_tx_info *info,
129                                      struct ieee80211_sta *sta,
130                                      __le16 fc)
131 {
132         u32 rate_flags;
133         int rate_idx;
134         u8 rts_retry_limit;
135         u8 data_retry_limit;
136         u8 rate_plcp;
137
138         if (priv->wowlan) {
139                 rts_retry_limit = IWLAGN_LOW_RETRY_LIMIT;
140                 data_retry_limit = IWLAGN_LOW_RETRY_LIMIT;
141         } else {
142                 /* Set retry limit on RTS packets */
143                 rts_retry_limit = IWLAGN_RTS_DFAULT_RETRY_LIMIT;
144
145                 /* Set retry limit on DATA packets and Probe Responses*/
146                 if (ieee80211_is_probe_resp(fc)) {
147                         data_retry_limit = IWLAGN_MGMT_DFAULT_RETRY_LIMIT;
148                         rts_retry_limit =
149                                 min(data_retry_limit, rts_retry_limit);
150                 } else if (ieee80211_is_back_req(fc))
151                         data_retry_limit = IWLAGN_BAR_DFAULT_RETRY_LIMIT;
152                 else
153                         data_retry_limit = IWLAGN_DEFAULT_TX_RETRY;
154         }
155
156         tx_cmd->data_retry_limit = data_retry_limit;
157         tx_cmd->rts_retry_limit = rts_retry_limit;
158
159         /* DATA packets will use the uCode station table for rate/antenna
160          * selection */
161         if (ieee80211_is_data(fc)) {
162                 tx_cmd->initial_rate_index = 0;
163                 tx_cmd->tx_flags |= TX_CMD_FLG_STA_RATE_MSK;
164                 return;
165         } else if (ieee80211_is_back_req(fc))
166                 tx_cmd->tx_flags |= TX_CMD_FLG_STA_RATE_MSK;
167
168         /**
169          * If the current TX rate stored in mac80211 has the MCS bit set, it's
170          * not really a TX rate.  Thus, we use the lowest supported rate for
171          * this band.  Also use the lowest supported rate if the stored rate
172          * index is invalid.
173          */
174         rate_idx = info->control.rates[0].idx;
175         if (info->control.rates[0].flags & IEEE80211_TX_RC_MCS ||
176                         (rate_idx < 0) || (rate_idx > IWL_RATE_COUNT_LEGACY))
177                 rate_idx = rate_lowest_index(
178                                 &priv->nvm_data->bands[info->band], sta);
179         /* For 5 GHZ band, remap mac80211 rate indices into driver indices */
180         if (info->band == NL80211_BAND_5GHZ)
181                 rate_idx += IWL_FIRST_OFDM_RATE;
182         /* Get PLCP rate for tx_cmd->rate_n_flags */
183         rate_plcp = iwl_rates[rate_idx].plcp;
184         /* Zero out flags for this packet */
185         rate_flags = 0;
186
187         /* Set CCK flag as needed */
188         if ((rate_idx >= IWL_FIRST_CCK_RATE) && (rate_idx <= IWL_LAST_CCK_RATE))
189                 rate_flags |= RATE_MCS_CCK_MSK;
190
191         /* Set up antennas */
192         if (priv->lib->bt_params &&
193             priv->lib->bt_params->advanced_bt_coexist &&
194             priv->bt_full_concurrent) {
195                 /* operated as 1x1 in full concurrency mode */
196                 priv->mgmt_tx_ant = iwl_toggle_tx_ant(priv, priv->mgmt_tx_ant,
197                                 first_antenna(priv->nvm_data->valid_tx_ant));
198         } else
199                 priv->mgmt_tx_ant = iwl_toggle_tx_ant(
200                                         priv, priv->mgmt_tx_ant,
201                                         priv->nvm_data->valid_tx_ant);
202         rate_flags |= iwl_ant_idx_to_flags(priv->mgmt_tx_ant);
203
204         /* Set the rate in the TX cmd */
205         tx_cmd->rate_n_flags = iwl_hw_set_rate_n_flags(rate_plcp, rate_flags);
206 }
207
208 static void iwlagn_tx_cmd_build_hwcrypto(struct iwl_priv *priv,
209                                          struct ieee80211_tx_info *info,
210                                          struct iwl_tx_cmd *tx_cmd,
211                                          struct sk_buff *skb_frag)
212 {
213         struct ieee80211_key_conf *keyconf = info->control.hw_key;
214
215         switch (keyconf->cipher) {
216         case WLAN_CIPHER_SUITE_CCMP:
217                 tx_cmd->sec_ctl = TX_CMD_SEC_CCM;
218                 memcpy(tx_cmd->key, keyconf->key, keyconf->keylen);
219                 if (info->flags & IEEE80211_TX_CTL_AMPDU)
220                         tx_cmd->tx_flags |= TX_CMD_FLG_AGG_CCMP_MSK;
221                 break;
222
223         case WLAN_CIPHER_SUITE_TKIP:
224                 tx_cmd->sec_ctl = TX_CMD_SEC_TKIP;
225                 ieee80211_get_tkip_p2k(keyconf, skb_frag, tx_cmd->key);
226                 break;
227
228         case WLAN_CIPHER_SUITE_WEP104:
229                 tx_cmd->sec_ctl |= TX_CMD_SEC_KEY128;
230                 /* fall through */
231         case WLAN_CIPHER_SUITE_WEP40:
232                 tx_cmd->sec_ctl |= (TX_CMD_SEC_WEP |
233                         (keyconf->keyidx & TX_CMD_SEC_MSK) << TX_CMD_SEC_SHIFT);
234
235                 memcpy(&tx_cmd->key[3], keyconf->key, keyconf->keylen);
236
237                 IWL_DEBUG_TX(priv, "Configuring packet for WEP encryption "
238                              "with key %d\n", keyconf->keyidx);
239                 break;
240
241         default:
242                 IWL_ERR(priv, "Unknown encode cipher %x\n", keyconf->cipher);
243                 break;
244         }
245 }
246
247 /**
248  * iwl_sta_id_or_broadcast - return sta_id or broadcast sta
249  * @context: the current context
250  * @sta: mac80211 station
251  *
252  * In certain circumstances mac80211 passes a station pointer
253  * that may be %NULL, for example during TX or key setup. In
254  * that case, we need to use the broadcast station, so this
255  * inline wraps that pattern.
256  */
257 static int iwl_sta_id_or_broadcast(struct iwl_rxon_context *context,
258                                    struct ieee80211_sta *sta)
259 {
260         int sta_id;
261
262         if (!sta)
263                 return context->bcast_sta_id;
264
265         sta_id = iwl_sta_id(sta);
266
267         /*
268          * mac80211 should not be passing a partially
269          * initialised station!
270          */
271         WARN_ON(sta_id == IWL_INVALID_STATION);
272
273         return sta_id;
274 }
275
276 /*
277  * start REPLY_TX command process
278  */
279 int iwlagn_tx_skb(struct iwl_priv *priv,
280                   struct ieee80211_sta *sta,
281                   struct sk_buff *skb)
282 {
283         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
284         struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
285         struct iwl_station_priv *sta_priv = NULL;
286         struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS];
287         struct iwl_device_cmd *dev_cmd;
288         struct iwl_tx_cmd *tx_cmd;
289         __le16 fc;
290         u8 hdr_len;
291         u16 len, seq_number = 0;
292         u8 sta_id, tid = IWL_MAX_TID_COUNT;
293         bool is_agg = false, is_data_qos = false;
294         int txq_id;
295
296         if (info->control.vif)
297                 ctx = iwl_rxon_ctx_from_vif(info->control.vif);
298
299         if (iwl_is_rfkill(priv)) {
300                 IWL_DEBUG_DROP(priv, "Dropping - RF KILL\n");
301                 goto drop_unlock_priv;
302         }
303
304         fc = hdr->frame_control;
305
306 #ifdef CONFIG_IWLWIFI_DEBUG
307         if (ieee80211_is_auth(fc))
308                 IWL_DEBUG_TX(priv, "Sending AUTH frame\n");
309         else if (ieee80211_is_assoc_req(fc))
310                 IWL_DEBUG_TX(priv, "Sending ASSOC frame\n");
311         else if (ieee80211_is_reassoc_req(fc))
312                 IWL_DEBUG_TX(priv, "Sending REASSOC frame\n");
313 #endif
314
315         if (unlikely(ieee80211_is_probe_resp(fc))) {
316                 struct iwl_wipan_noa_data *noa_data =
317                         rcu_dereference(priv->noa_data);
318
319                 if (noa_data &&
320                     pskb_expand_head(skb, 0, noa_data->length,
321                                      GFP_ATOMIC) == 0) {
322                         skb_put_data(skb, noa_data->data, noa_data->length);
323                         hdr = (struct ieee80211_hdr *)skb->data;
324                 }
325         }
326
327         hdr_len = ieee80211_hdrlen(fc);
328
329         /* For management frames use broadcast id to do not break aggregation */
330         if (!ieee80211_is_data(fc))
331                 sta_id = ctx->bcast_sta_id;
332         else {
333                 /* Find index into station table for destination station */
334                 sta_id = iwl_sta_id_or_broadcast(ctx, sta);
335                 if (sta_id == IWL_INVALID_STATION) {
336                         IWL_DEBUG_DROP(priv, "Dropping - INVALID STATION: %pM\n",
337                                        hdr->addr1);
338                         goto drop_unlock_priv;
339                 }
340         }
341
342         if (sta)
343                 sta_priv = (void *)sta->drv_priv;
344
345         if (sta_priv && sta_priv->asleep &&
346             (info->flags & IEEE80211_TX_CTL_NO_PS_BUFFER)) {
347                 /*
348                  * This sends an asynchronous command to the device,
349                  * but we can rely on it being processed before the
350                  * next frame is processed -- and the next frame to
351                  * this station is the one that will consume this
352                  * counter.
353                  * For now set the counter to just 1 since we do not
354                  * support uAPSD yet.
355                  *
356                  * FIXME: If we get two non-bufferable frames one
357                  * after the other, we might only send out one of
358                  * them because this is racy.
359                  */
360                 iwl_sta_modify_sleep_tx_count(priv, sta_id, 1);
361         }
362
363         dev_cmd = iwl_trans_alloc_tx_cmd(priv->trans);
364
365         if (unlikely(!dev_cmd))
366                 goto drop_unlock_priv;
367
368         memset(dev_cmd, 0, sizeof(*dev_cmd));
369         dev_cmd->hdr.cmd = REPLY_TX;
370         tx_cmd = (struct iwl_tx_cmd *) dev_cmd->payload;
371
372         /* Total # bytes to be transmitted */
373         len = (u16)skb->len;
374         tx_cmd->len = cpu_to_le16(len);
375
376         if (info->control.hw_key)
377                 iwlagn_tx_cmd_build_hwcrypto(priv, info, tx_cmd, skb);
378
379         /* TODO need this for burst mode later on */
380         iwlagn_tx_cmd_build_basic(priv, skb, tx_cmd, info, hdr, sta_id);
381
382         iwlagn_tx_cmd_build_rate(priv, tx_cmd, info, sta, fc);
383
384         memset(&info->status, 0, sizeof(info->status));
385         memset(info->driver_data, 0, sizeof(info->driver_data));
386
387         info->driver_data[0] = ctx;
388         info->driver_data[1] = dev_cmd;
389         /* From now on, we cannot access info->control */
390
391         spin_lock(&priv->sta_lock);
392
393         if (ieee80211_is_data_qos(fc) && !ieee80211_is_qos_nullfunc(fc)) {
394                 u8 *qc = NULL;
395                 struct iwl_tid_data *tid_data;
396                 qc = ieee80211_get_qos_ctl(hdr);
397                 tid = qc[0] & IEEE80211_QOS_CTL_TID_MASK;
398                 if (WARN_ON_ONCE(tid >= IWL_MAX_TID_COUNT))
399                         goto drop_unlock_sta;
400                 tid_data = &priv->tid_data[sta_id][tid];
401
402                 /* aggregation is on for this <sta,tid> */
403                 if (info->flags & IEEE80211_TX_CTL_AMPDU &&
404                     tid_data->agg.state != IWL_AGG_ON) {
405                         IWL_ERR(priv,
406                                 "TX_CTL_AMPDU while not in AGG: Tx flags = 0x%08x, agg.state = %d\n",
407                                 info->flags, tid_data->agg.state);
408                         IWL_ERR(priv, "sta_id = %d, tid = %d seq_num = %d\n",
409                                 sta_id, tid,
410                                 IEEE80211_SEQ_TO_SN(tid_data->seq_number));
411                         goto drop_unlock_sta;
412                 }
413
414                 /* We can receive packets from the stack in IWL_AGG_{ON,OFF}
415                  * only. Check this here.
416                  */
417                 if (WARN_ONCE(tid_data->agg.state != IWL_AGG_ON &&
418                               tid_data->agg.state != IWL_AGG_OFF,
419                               "Tx while agg.state = %d\n", tid_data->agg.state))
420                         goto drop_unlock_sta;
421
422                 seq_number = tid_data->seq_number;
423                 seq_number &= IEEE80211_SCTL_SEQ;
424                 hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG);
425                 hdr->seq_ctrl |= cpu_to_le16(seq_number);
426                 seq_number += 0x10;
427
428                 if (info->flags & IEEE80211_TX_CTL_AMPDU)
429                         is_agg = true;
430                 is_data_qos = true;
431         }
432
433         /* Copy MAC header from skb into command buffer */
434         memcpy(tx_cmd->hdr, hdr, hdr_len);
435
436         txq_id = info->hw_queue;
437
438         if (is_agg)
439                 txq_id = priv->tid_data[sta_id][tid].agg.txq_id;
440         else if (info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM) {
441                 /*
442                  * The microcode will clear the more data
443                  * bit in the last frame it transmits.
444                  */
445                 hdr->frame_control |=
446                         cpu_to_le16(IEEE80211_FCTL_MOREDATA);
447         }
448
449         WARN_ON_ONCE(is_agg &&
450                      priv->queue_to_mac80211[txq_id] != info->hw_queue);
451
452         IWL_DEBUG_TX(priv, "TX to [%d|%d] Q:%d - seq: 0x%x\n", sta_id, tid,
453                      txq_id, seq_number);
454
455         if (iwl_trans_tx(priv->trans, skb, dev_cmd, txq_id))
456                 goto drop_unlock_sta;
457
458         if (is_data_qos && !ieee80211_has_morefrags(fc))
459                 priv->tid_data[sta_id][tid].seq_number = seq_number;
460
461         spin_unlock(&priv->sta_lock);
462
463         /*
464          * Avoid atomic ops if it isn't an associated client.
465          * Also, if this is a packet for aggregation, don't
466          * increase the counter because the ucode will stop
467          * aggregation queues when their respective station
468          * goes to sleep.
469          */
470         if (sta_priv && sta_priv->client && !is_agg)
471                 atomic_inc(&sta_priv->pending_frames);
472
473         return 0;
474
475 drop_unlock_sta:
476         if (dev_cmd)
477                 iwl_trans_free_tx_cmd(priv->trans, dev_cmd);
478         spin_unlock(&priv->sta_lock);
479 drop_unlock_priv:
480         return -1;
481 }
482
483 static int iwlagn_alloc_agg_txq(struct iwl_priv *priv, int mq)
484 {
485         int q;
486
487         for (q = IWLAGN_FIRST_AMPDU_QUEUE;
488              q < priv->cfg->base_params->num_of_queues; q++) {
489                 if (!test_and_set_bit(q, priv->agg_q_alloc)) {
490                         priv->queue_to_mac80211[q] = mq;
491                         return q;
492                 }
493         }
494
495         return -ENOSPC;
496 }
497
498 static void iwlagn_dealloc_agg_txq(struct iwl_priv *priv, int q)
499 {
500         clear_bit(q, priv->agg_q_alloc);
501         priv->queue_to_mac80211[q] = IWL_INVALID_MAC80211_QUEUE;
502 }
503
504 int iwlagn_tx_agg_stop(struct iwl_priv *priv, struct ieee80211_vif *vif,
505                         struct ieee80211_sta *sta, u16 tid)
506 {
507         struct iwl_tid_data *tid_data;
508         int sta_id, txq_id;
509         enum iwl_agg_state agg_state;
510
511         sta_id = iwl_sta_id(sta);
512
513         if (sta_id == IWL_INVALID_STATION) {
514                 IWL_ERR(priv, "Invalid station for AGG tid %d\n", tid);
515                 return -ENXIO;
516         }
517
518         spin_lock_bh(&priv->sta_lock);
519
520         tid_data = &priv->tid_data[sta_id][tid];
521         txq_id = tid_data->agg.txq_id;
522
523         switch (tid_data->agg.state) {
524         case IWL_EMPTYING_HW_QUEUE_ADDBA:
525                 /*
526                 * This can happen if the peer stops aggregation
527                 * again before we've had a chance to drain the
528                 * queue we selected previously, i.e. before the
529                 * session was really started completely.
530                 */
531                 IWL_DEBUG_HT(priv, "AGG stop before setup done\n");
532                 goto turn_off;
533         case IWL_AGG_STARTING:
534                 /*
535                  * This can happen when the session is stopped before
536                  * we receive ADDBA response
537                  */
538                 IWL_DEBUG_HT(priv, "AGG stop before AGG became operational\n");
539                 goto turn_off;
540         case IWL_AGG_ON:
541                 break;
542         default:
543                 IWL_WARN(priv,
544                          "Stopping AGG while state not ON or starting for %d on %d (%d)\n",
545                          sta_id, tid, tid_data->agg.state);
546                 spin_unlock_bh(&priv->sta_lock);
547                 return 0;
548         }
549
550         tid_data->agg.ssn = IEEE80211_SEQ_TO_SN(tid_data->seq_number);
551
552         /* There are still packets for this RA / TID in the HW */
553         if (!test_bit(txq_id, priv->agg_q_alloc)) {
554                 IWL_DEBUG_TX_QUEUES(priv,
555                         "stopping AGG on STA/TID %d/%d but hwq %d not used\n",
556                         sta_id, tid, txq_id);
557         } else if (tid_data->agg.ssn != tid_data->next_reclaimed) {
558                 IWL_DEBUG_TX_QUEUES(priv,
559                                     "Can't proceed: ssn %d, next_recl = %d\n",
560                                     tid_data->agg.ssn,
561                                     tid_data->next_reclaimed);
562                 tid_data->agg.state = IWL_EMPTYING_HW_QUEUE_DELBA;
563                 spin_unlock_bh(&priv->sta_lock);
564                 return 0;
565         }
566
567         IWL_DEBUG_TX_QUEUES(priv, "Can proceed: ssn = next_recl = %d\n",
568                             tid_data->agg.ssn);
569 turn_off:
570         agg_state = tid_data->agg.state;
571         tid_data->agg.state = IWL_AGG_OFF;
572
573         spin_unlock_bh(&priv->sta_lock);
574
575         if (test_bit(txq_id, priv->agg_q_alloc)) {
576                 /*
577                  * If the transport didn't know that we wanted to start
578                  * agreggation, don't tell it that we want to stop them.
579                  * This can happen when we don't get the addBA response on
580                  * time, or we hadn't time to drain the AC queues.
581                  */
582                 if (agg_state == IWL_AGG_ON)
583                         iwl_trans_txq_disable(priv->trans, txq_id, true);
584                 else
585                         IWL_DEBUG_TX_QUEUES(priv, "Don't disable tx agg: %d\n",
586                                             agg_state);
587                 iwlagn_dealloc_agg_txq(priv, txq_id);
588         }
589
590         ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
591
592         return 0;
593 }
594
595 int iwlagn_tx_agg_start(struct iwl_priv *priv, struct ieee80211_vif *vif,
596                         struct ieee80211_sta *sta, u16 tid, u16 *ssn)
597 {
598         struct iwl_rxon_context *ctx = iwl_rxon_ctx_from_vif(vif);
599         struct iwl_tid_data *tid_data;
600         int sta_id, txq_id, ret;
601
602         IWL_DEBUG_HT(priv, "TX AGG request on ra = %pM tid = %d\n",
603                      sta->addr, tid);
604
605         sta_id = iwl_sta_id(sta);
606         if (sta_id == IWL_INVALID_STATION) {
607                 IWL_ERR(priv, "Start AGG on invalid station\n");
608                 return -ENXIO;
609         }
610         if (unlikely(tid >= IWL_MAX_TID_COUNT))
611                 return -EINVAL;
612
613         if (priv->tid_data[sta_id][tid].agg.state != IWL_AGG_OFF) {
614                 IWL_ERR(priv, "Start AGG when state is not IWL_AGG_OFF !\n");
615                 return -ENXIO;
616         }
617
618         txq_id = iwlagn_alloc_agg_txq(priv, ctx->ac_to_queue[tid_to_ac[tid]]);
619         if (txq_id < 0) {
620                 IWL_DEBUG_TX_QUEUES(priv,
621                         "No free aggregation queue for %pM/%d\n",
622                         sta->addr, tid);
623                 return txq_id;
624         }
625
626         ret = iwl_sta_tx_modify_enable_tid(priv, sta_id, tid);
627         if (ret)
628                 return ret;
629
630         spin_lock_bh(&priv->sta_lock);
631         tid_data = &priv->tid_data[sta_id][tid];
632         tid_data->agg.ssn = IEEE80211_SEQ_TO_SN(tid_data->seq_number);
633         tid_data->agg.txq_id = txq_id;
634
635         *ssn = tid_data->agg.ssn;
636
637         if (*ssn == tid_data->next_reclaimed) {
638                 IWL_DEBUG_TX_QUEUES(priv, "Can proceed: ssn = next_recl = %d\n",
639                                     tid_data->agg.ssn);
640                 tid_data->agg.state = IWL_AGG_STARTING;
641                 ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
642         } else {
643                 IWL_DEBUG_TX_QUEUES(priv, "Can't proceed: ssn %d, "
644                                     "next_reclaimed = %d\n",
645                                     tid_data->agg.ssn,
646                                     tid_data->next_reclaimed);
647                 tid_data->agg.state = IWL_EMPTYING_HW_QUEUE_ADDBA;
648         }
649         spin_unlock_bh(&priv->sta_lock);
650
651         return ret;
652 }
653
654 int iwlagn_tx_agg_flush(struct iwl_priv *priv, struct ieee80211_vif *vif,
655                         struct ieee80211_sta *sta, u16 tid)
656 {
657         struct iwl_tid_data *tid_data;
658         enum iwl_agg_state agg_state;
659         int sta_id, txq_id;
660         sta_id = iwl_sta_id(sta);
661
662         /*
663          * First set the agg state to OFF to avoid calling
664          * ieee80211_stop_tx_ba_cb in iwlagn_check_ratid_empty.
665          */
666         spin_lock_bh(&priv->sta_lock);
667
668         tid_data = &priv->tid_data[sta_id][tid];
669         txq_id = tid_data->agg.txq_id;
670         agg_state = tid_data->agg.state;
671         IWL_DEBUG_TX_QUEUES(priv, "Flush AGG: sta %d tid %d q %d state %d\n",
672                             sta_id, tid, txq_id, tid_data->agg.state);
673
674         tid_data->agg.state = IWL_AGG_OFF;
675
676         spin_unlock_bh(&priv->sta_lock);
677
678         if (iwlagn_txfifo_flush(priv, BIT(txq_id)))
679                 IWL_ERR(priv, "Couldn't flush the AGG queue\n");
680
681         if (test_bit(txq_id, priv->agg_q_alloc)) {
682                 /*
683                  * If the transport didn't know that we wanted to start
684                  * agreggation, don't tell it that we want to stop them.
685                  * This can happen when we don't get the addBA response on
686                  * time, or we hadn't time to drain the AC queues.
687                  */
688                 if (agg_state == IWL_AGG_ON)
689                         iwl_trans_txq_disable(priv->trans, txq_id, true);
690                 else
691                         IWL_DEBUG_TX_QUEUES(priv, "Don't disable tx agg: %d\n",
692                                             agg_state);
693                 iwlagn_dealloc_agg_txq(priv, txq_id);
694         }
695
696         return 0;
697 }
698
699 int iwlagn_tx_agg_oper(struct iwl_priv *priv, struct ieee80211_vif *vif,
700                         struct ieee80211_sta *sta, u16 tid, u8 buf_size)
701 {
702         struct iwl_station_priv *sta_priv = (void *) sta->drv_priv;
703         struct iwl_rxon_context *ctx = iwl_rxon_ctx_from_vif(vif);
704         int q, fifo;
705         u16 ssn;
706
707         buf_size = min_t(int, buf_size, LINK_QUAL_AGG_FRAME_LIMIT_DEF);
708
709         spin_lock_bh(&priv->sta_lock);
710         ssn = priv->tid_data[sta_priv->sta_id][tid].agg.ssn;
711         q = priv->tid_data[sta_priv->sta_id][tid].agg.txq_id;
712         priv->tid_data[sta_priv->sta_id][tid].agg.state = IWL_AGG_ON;
713         spin_unlock_bh(&priv->sta_lock);
714
715         fifo = ctx->ac_to_fifo[tid_to_ac[tid]];
716
717         iwl_trans_txq_enable(priv->trans, q, fifo, sta_priv->sta_id, tid,
718                              buf_size, ssn, 0);
719
720         /*
721          * If the limit is 0, then it wasn't initialised yet,
722          * use the default. We can do that since we take the
723          * minimum below, and we don't want to go above our
724          * default due to hardware restrictions.
725          */
726         if (sta_priv->max_agg_bufsize == 0)
727                 sta_priv->max_agg_bufsize =
728                         LINK_QUAL_AGG_FRAME_LIMIT_DEF;
729
730         /*
731          * Even though in theory the peer could have different
732          * aggregation reorder buffer sizes for different sessions,
733          * our ucode doesn't allow for that and has a global limit
734          * for each station. Therefore, use the minimum of all the
735          * aggregation sessions and our default value.
736          */
737         sta_priv->max_agg_bufsize =
738                 min(sta_priv->max_agg_bufsize, buf_size);
739
740         if (priv->hw_params.use_rts_for_aggregation) {
741                 /*
742                  * switch to RTS/CTS if it is the prefer protection
743                  * method for HT traffic
744                  */
745
746                 sta_priv->lq_sta.lq.general_params.flags |=
747                         LINK_QUAL_FLAGS_SET_STA_TLC_RTS_MSK;
748         }
749         priv->agg_tids_count++;
750         IWL_DEBUG_HT(priv, "priv->agg_tids_count = %u\n",
751                      priv->agg_tids_count);
752
753         sta_priv->lq_sta.lq.agg_params.agg_frame_cnt_limit =
754                 sta_priv->max_agg_bufsize;
755
756         IWL_DEBUG_HT(priv, "Tx aggregation enabled on ra = %pM tid = %d\n",
757                  sta->addr, tid);
758
759         return iwl_send_lq_cmd(priv, ctx,
760                         &sta_priv->lq_sta.lq, CMD_ASYNC, false);
761 }
762
763 static void iwlagn_check_ratid_empty(struct iwl_priv *priv, int sta_id, u8 tid)
764 {
765         struct iwl_tid_data *tid_data = &priv->tid_data[sta_id][tid];
766         enum iwl_rxon_context_id ctx;
767         struct ieee80211_vif *vif;
768         u8 *addr;
769
770         lockdep_assert_held(&priv->sta_lock);
771
772         addr = priv->stations[sta_id].sta.sta.addr;
773         ctx = priv->stations[sta_id].ctxid;
774         vif = priv->contexts[ctx].vif;
775
776         switch (priv->tid_data[sta_id][tid].agg.state) {
777         case IWL_EMPTYING_HW_QUEUE_DELBA:
778                 /* There are no packets for this RA / TID in the HW any more */
779                 if (tid_data->agg.ssn == tid_data->next_reclaimed) {
780                         IWL_DEBUG_TX_QUEUES(priv,
781                                 "Can continue DELBA flow ssn = next_recl = %d\n",
782                                 tid_data->next_reclaimed);
783                         iwl_trans_txq_disable(priv->trans,
784                                               tid_data->agg.txq_id, true);
785                         iwlagn_dealloc_agg_txq(priv, tid_data->agg.txq_id);
786                         tid_data->agg.state = IWL_AGG_OFF;
787                         ieee80211_stop_tx_ba_cb_irqsafe(vif, addr, tid);
788                 }
789                 break;
790         case IWL_EMPTYING_HW_QUEUE_ADDBA:
791                 /* There are no packets for this RA / TID in the HW any more */
792                 if (tid_data->agg.ssn == tid_data->next_reclaimed) {
793                         IWL_DEBUG_TX_QUEUES(priv,
794                                 "Can continue ADDBA flow ssn = next_recl = %d\n",
795                                 tid_data->next_reclaimed);
796                         tid_data->agg.state = IWL_AGG_STARTING;
797                         ieee80211_start_tx_ba_cb_irqsafe(vif, addr, tid);
798                 }
799                 break;
800         default:
801                 break;
802         }
803 }
804
805 static void iwlagn_non_agg_tx_status(struct iwl_priv *priv,
806                                      struct iwl_rxon_context *ctx,
807                                      const u8 *addr1)
808 {
809         struct ieee80211_sta *sta;
810         struct iwl_station_priv *sta_priv;
811
812         rcu_read_lock();
813         sta = ieee80211_find_sta(ctx->vif, addr1);
814         if (sta) {
815                 sta_priv = (void *)sta->drv_priv;
816                 /* avoid atomic ops if this isn't a client */
817                 if (sta_priv->client &&
818                     atomic_dec_return(&sta_priv->pending_frames) == 0)
819                         ieee80211_sta_block_awake(priv->hw, sta, false);
820         }
821         rcu_read_unlock();
822 }
823
824 /**
825  * translate ucode response to mac80211 tx status control values
826  */
827 static void iwlagn_hwrate_to_tx_control(struct iwl_priv *priv, u32 rate_n_flags,
828                                   struct ieee80211_tx_info *info)
829 {
830         struct ieee80211_tx_rate *r = &info->status.rates[0];
831
832         info->status.antenna =
833                 ((rate_n_flags & RATE_MCS_ANT_ABC_MSK) >> RATE_MCS_ANT_POS);
834         if (rate_n_flags & RATE_MCS_HT_MSK)
835                 r->flags |= IEEE80211_TX_RC_MCS;
836         if (rate_n_flags & RATE_MCS_GF_MSK)
837                 r->flags |= IEEE80211_TX_RC_GREEN_FIELD;
838         if (rate_n_flags & RATE_MCS_HT40_MSK)
839                 r->flags |= IEEE80211_TX_RC_40_MHZ_WIDTH;
840         if (rate_n_flags & RATE_MCS_DUP_MSK)
841                 r->flags |= IEEE80211_TX_RC_DUP_DATA;
842         if (rate_n_flags & RATE_MCS_SGI_MSK)
843                 r->flags |= IEEE80211_TX_RC_SHORT_GI;
844         r->idx = iwlagn_hwrate_to_mac80211_idx(rate_n_flags, info->band);
845 }
846
847 #ifdef CONFIG_IWLWIFI_DEBUG
848 const char *iwl_get_tx_fail_reason(u32 status)
849 {
850 #define TX_STATUS_FAIL(x) case TX_STATUS_FAIL_ ## x: return #x
851 #define TX_STATUS_POSTPONE(x) case TX_STATUS_POSTPONE_ ## x: return #x
852
853         switch (status & TX_STATUS_MSK) {
854         case TX_STATUS_SUCCESS:
855                 return "SUCCESS";
856         TX_STATUS_POSTPONE(DELAY);
857         TX_STATUS_POSTPONE(FEW_BYTES);
858         TX_STATUS_POSTPONE(BT_PRIO);
859         TX_STATUS_POSTPONE(QUIET_PERIOD);
860         TX_STATUS_POSTPONE(CALC_TTAK);
861         TX_STATUS_FAIL(INTERNAL_CROSSED_RETRY);
862         TX_STATUS_FAIL(SHORT_LIMIT);
863         TX_STATUS_FAIL(LONG_LIMIT);
864         TX_STATUS_FAIL(FIFO_UNDERRUN);
865         TX_STATUS_FAIL(DRAIN_FLOW);
866         TX_STATUS_FAIL(RFKILL_FLUSH);
867         TX_STATUS_FAIL(LIFE_EXPIRE);
868         TX_STATUS_FAIL(DEST_PS);
869         TX_STATUS_FAIL(HOST_ABORTED);
870         TX_STATUS_FAIL(BT_RETRY);
871         TX_STATUS_FAIL(STA_INVALID);
872         TX_STATUS_FAIL(FRAG_DROPPED);
873         TX_STATUS_FAIL(TID_DISABLE);
874         TX_STATUS_FAIL(FIFO_FLUSHED);
875         TX_STATUS_FAIL(INSUFFICIENT_CF_POLL);
876         TX_STATUS_FAIL(PASSIVE_NO_RX);
877         TX_STATUS_FAIL(NO_BEACON_ON_RADAR);
878         }
879
880         return "UNKNOWN";
881
882 #undef TX_STATUS_FAIL
883 #undef TX_STATUS_POSTPONE
884 }
885 #endif /* CONFIG_IWLWIFI_DEBUG */
886
887 static void iwlagn_count_agg_tx_err_status(struct iwl_priv *priv, u16 status)
888 {
889         status &= AGG_TX_STATUS_MSK;
890
891         switch (status) {
892         case AGG_TX_STATE_UNDERRUN_MSK:
893                 priv->reply_agg_tx_stats.underrun++;
894                 break;
895         case AGG_TX_STATE_BT_PRIO_MSK:
896                 priv->reply_agg_tx_stats.bt_prio++;
897                 break;
898         case AGG_TX_STATE_FEW_BYTES_MSK:
899                 priv->reply_agg_tx_stats.few_bytes++;
900                 break;
901         case AGG_TX_STATE_ABORT_MSK:
902                 priv->reply_agg_tx_stats.abort++;
903                 break;
904         case AGG_TX_STATE_LAST_SENT_TTL_MSK:
905                 priv->reply_agg_tx_stats.last_sent_ttl++;
906                 break;
907         case AGG_TX_STATE_LAST_SENT_TRY_CNT_MSK:
908                 priv->reply_agg_tx_stats.last_sent_try++;
909                 break;
910         case AGG_TX_STATE_LAST_SENT_BT_KILL_MSK:
911                 priv->reply_agg_tx_stats.last_sent_bt_kill++;
912                 break;
913         case AGG_TX_STATE_SCD_QUERY_MSK:
914                 priv->reply_agg_tx_stats.scd_query++;
915                 break;
916         case AGG_TX_STATE_TEST_BAD_CRC32_MSK:
917                 priv->reply_agg_tx_stats.bad_crc32++;
918                 break;
919         case AGG_TX_STATE_RESPONSE_MSK:
920                 priv->reply_agg_tx_stats.response++;
921                 break;
922         case AGG_TX_STATE_DUMP_TX_MSK:
923                 priv->reply_agg_tx_stats.dump_tx++;
924                 break;
925         case AGG_TX_STATE_DELAY_TX_MSK:
926                 priv->reply_agg_tx_stats.delay_tx++;
927                 break;
928         default:
929                 priv->reply_agg_tx_stats.unknown++;
930                 break;
931         }
932 }
933
934 static inline u32 iwlagn_get_scd_ssn(struct iwlagn_tx_resp *tx_resp)
935 {
936         return le32_to_cpup((__le32 *)&tx_resp->status +
937                             tx_resp->frame_count) & IEEE80211_MAX_SN;
938 }
939
940 static void iwl_rx_reply_tx_agg(struct iwl_priv *priv,
941                                 struct iwlagn_tx_resp *tx_resp)
942 {
943         struct agg_tx_status *frame_status = &tx_resp->status;
944         int tid = (tx_resp->ra_tid & IWLAGN_TX_RES_TID_MSK) >>
945                 IWLAGN_TX_RES_TID_POS;
946         int sta_id = (tx_resp->ra_tid & IWLAGN_TX_RES_RA_MSK) >>
947                 IWLAGN_TX_RES_RA_POS;
948         struct iwl_ht_agg *agg = &priv->tid_data[sta_id][tid].agg;
949         u32 status = le16_to_cpu(tx_resp->status.status);
950         int i;
951
952         WARN_ON(tid == IWL_TID_NON_QOS);
953
954         if (agg->wait_for_ba)
955                 IWL_DEBUG_TX_REPLY(priv,
956                         "got tx response w/o block-ack\n");
957
958         agg->rate_n_flags = le32_to_cpu(tx_resp->rate_n_flags);
959         agg->wait_for_ba = (tx_resp->frame_count > 1);
960
961         /*
962          * If the BT kill count is non-zero, we'll get this
963          * notification again.
964          */
965         if (tx_resp->bt_kill_count && tx_resp->frame_count == 1 &&
966             priv->lib->bt_params &&
967             priv->lib->bt_params->advanced_bt_coexist) {
968                 IWL_DEBUG_COEX(priv, "receive reply tx w/ bt_kill\n");
969         }
970
971         if (tx_resp->frame_count == 1)
972                 return;
973
974         IWL_DEBUG_TX_REPLY(priv, "TXQ %d initial_rate 0x%x ssn %d frm_cnt %d\n",
975                            agg->txq_id,
976                            le32_to_cpu(tx_resp->rate_n_flags),
977                            iwlagn_get_scd_ssn(tx_resp), tx_resp->frame_count);
978
979         /* Construct bit-map of pending frames within Tx window */
980         for (i = 0; i < tx_resp->frame_count; i++) {
981                 u16 fstatus = le16_to_cpu(frame_status[i].status);
982                 u8 retry_cnt = (fstatus & AGG_TX_TRY_MSK) >> AGG_TX_TRY_POS;
983
984                 if (status & AGG_TX_STATUS_MSK)
985                         iwlagn_count_agg_tx_err_status(priv, fstatus);
986
987                 if (status & (AGG_TX_STATE_FEW_BYTES_MSK |
988                               AGG_TX_STATE_ABORT_MSK))
989                         continue;
990
991                 if (status & AGG_TX_STATUS_MSK || retry_cnt > 1)
992                         IWL_DEBUG_TX_REPLY(priv,
993                                            "%d: status %s (0x%04x), try-count (0x%01x)\n",
994                                            i,
995                                            iwl_get_agg_tx_fail_reason(fstatus),
996                                            fstatus & AGG_TX_STATUS_MSK,
997                                            retry_cnt);
998         }
999 }
1000
1001 #ifdef CONFIG_IWLWIFI_DEBUG
1002 #define AGG_TX_STATE_FAIL(x) case AGG_TX_STATE_ ## x: return #x
1003
1004 const char *iwl_get_agg_tx_fail_reason(u16 status)
1005 {
1006         status &= AGG_TX_STATUS_MSK;
1007         switch (status) {
1008         case AGG_TX_STATE_TRANSMITTED:
1009                 return "SUCCESS";
1010                 AGG_TX_STATE_FAIL(UNDERRUN_MSK);
1011                 AGG_TX_STATE_FAIL(BT_PRIO_MSK);
1012                 AGG_TX_STATE_FAIL(FEW_BYTES_MSK);
1013                 AGG_TX_STATE_FAIL(ABORT_MSK);
1014                 AGG_TX_STATE_FAIL(LAST_SENT_TTL_MSK);
1015                 AGG_TX_STATE_FAIL(LAST_SENT_TRY_CNT_MSK);
1016                 AGG_TX_STATE_FAIL(LAST_SENT_BT_KILL_MSK);
1017                 AGG_TX_STATE_FAIL(SCD_QUERY_MSK);
1018                 AGG_TX_STATE_FAIL(TEST_BAD_CRC32_MSK);
1019                 AGG_TX_STATE_FAIL(RESPONSE_MSK);
1020                 AGG_TX_STATE_FAIL(DUMP_TX_MSK);
1021                 AGG_TX_STATE_FAIL(DELAY_TX_MSK);
1022         }
1023
1024         return "UNKNOWN";
1025 }
1026 #endif /* CONFIG_IWLWIFI_DEBUG */
1027
1028 static void iwlagn_count_tx_err_status(struct iwl_priv *priv, u16 status)
1029 {
1030         status &= TX_STATUS_MSK;
1031
1032         switch (status) {
1033         case TX_STATUS_POSTPONE_DELAY:
1034                 priv->reply_tx_stats.pp_delay++;
1035                 break;
1036         case TX_STATUS_POSTPONE_FEW_BYTES:
1037                 priv->reply_tx_stats.pp_few_bytes++;
1038                 break;
1039         case TX_STATUS_POSTPONE_BT_PRIO:
1040                 priv->reply_tx_stats.pp_bt_prio++;
1041                 break;
1042         case TX_STATUS_POSTPONE_QUIET_PERIOD:
1043                 priv->reply_tx_stats.pp_quiet_period++;
1044                 break;
1045         case TX_STATUS_POSTPONE_CALC_TTAK:
1046                 priv->reply_tx_stats.pp_calc_ttak++;
1047                 break;
1048         case TX_STATUS_FAIL_INTERNAL_CROSSED_RETRY:
1049                 priv->reply_tx_stats.int_crossed_retry++;
1050                 break;
1051         case TX_STATUS_FAIL_SHORT_LIMIT:
1052                 priv->reply_tx_stats.short_limit++;
1053                 break;
1054         case TX_STATUS_FAIL_LONG_LIMIT:
1055                 priv->reply_tx_stats.long_limit++;
1056                 break;
1057         case TX_STATUS_FAIL_FIFO_UNDERRUN:
1058                 priv->reply_tx_stats.fifo_underrun++;
1059                 break;
1060         case TX_STATUS_FAIL_DRAIN_FLOW:
1061                 priv->reply_tx_stats.drain_flow++;
1062                 break;
1063         case TX_STATUS_FAIL_RFKILL_FLUSH:
1064                 priv->reply_tx_stats.rfkill_flush++;
1065                 break;
1066         case TX_STATUS_FAIL_LIFE_EXPIRE:
1067                 priv->reply_tx_stats.life_expire++;
1068                 break;
1069         case TX_STATUS_FAIL_DEST_PS:
1070                 priv->reply_tx_stats.dest_ps++;
1071                 break;
1072         case TX_STATUS_FAIL_HOST_ABORTED:
1073                 priv->reply_tx_stats.host_abort++;
1074                 break;
1075         case TX_STATUS_FAIL_BT_RETRY:
1076                 priv->reply_tx_stats.bt_retry++;
1077                 break;
1078         case TX_STATUS_FAIL_STA_INVALID:
1079                 priv->reply_tx_stats.sta_invalid++;
1080                 break;
1081         case TX_STATUS_FAIL_FRAG_DROPPED:
1082                 priv->reply_tx_stats.frag_drop++;
1083                 break;
1084         case TX_STATUS_FAIL_TID_DISABLE:
1085                 priv->reply_tx_stats.tid_disable++;
1086                 break;
1087         case TX_STATUS_FAIL_FIFO_FLUSHED:
1088                 priv->reply_tx_stats.fifo_flush++;
1089                 break;
1090         case TX_STATUS_FAIL_INSUFFICIENT_CF_POLL:
1091                 priv->reply_tx_stats.insuff_cf_poll++;
1092                 break;
1093         case TX_STATUS_FAIL_PASSIVE_NO_RX:
1094                 priv->reply_tx_stats.fail_hw_drop++;
1095                 break;
1096         case TX_STATUS_FAIL_NO_BEACON_ON_RADAR:
1097                 priv->reply_tx_stats.sta_color_mismatch++;
1098                 break;
1099         default:
1100                 priv->reply_tx_stats.unknown++;
1101                 break;
1102         }
1103 }
1104
1105 static void iwlagn_set_tx_status(struct iwl_priv *priv,
1106                                  struct ieee80211_tx_info *info,
1107                                  struct iwlagn_tx_resp *tx_resp)
1108 {
1109         u16 status = le16_to_cpu(tx_resp->status.status);
1110
1111         info->flags &= ~IEEE80211_TX_CTL_AMPDU;
1112
1113         info->status.rates[0].count = tx_resp->failure_frame + 1;
1114         info->flags |= iwl_tx_status_to_mac80211(status);
1115         iwlagn_hwrate_to_tx_control(priv, le32_to_cpu(tx_resp->rate_n_flags),
1116                                     info);
1117         if (!iwl_is_tx_success(status))
1118                 iwlagn_count_tx_err_status(priv, status);
1119 }
1120
1121 static void iwl_check_abort_status(struct iwl_priv *priv,
1122                             u8 frame_count, u32 status)
1123 {
1124         if (frame_count == 1 && status == TX_STATUS_FAIL_RFKILL_FLUSH) {
1125                 IWL_ERR(priv, "Tx flush command to flush out all frames\n");
1126                 if (!test_bit(STATUS_EXIT_PENDING, &priv->status))
1127                         queue_work(priv->workqueue, &priv->tx_flush);
1128         }
1129 }
1130
1131 void iwlagn_rx_reply_tx(struct iwl_priv *priv, struct iwl_rx_cmd_buffer *rxb)
1132 {
1133         struct iwl_rx_packet *pkt = rxb_addr(rxb);
1134         u16 sequence = le16_to_cpu(pkt->hdr.sequence);
1135         int txq_id = SEQ_TO_QUEUE(sequence);
1136         int cmd_index __maybe_unused = SEQ_TO_INDEX(sequence);
1137         struct iwlagn_tx_resp *tx_resp = (void *)pkt->data;
1138         struct ieee80211_hdr *hdr;
1139         u32 status = le16_to_cpu(tx_resp->status.status);
1140         u16 ssn = iwlagn_get_scd_ssn(tx_resp);
1141         int tid;
1142         int sta_id;
1143         int freed;
1144         struct ieee80211_tx_info *info;
1145         struct sk_buff_head skbs;
1146         struct sk_buff *skb;
1147         struct iwl_rxon_context *ctx;
1148         bool is_agg = (txq_id >= IWLAGN_FIRST_AMPDU_QUEUE);
1149
1150         tid = (tx_resp->ra_tid & IWLAGN_TX_RES_TID_MSK) >>
1151                 IWLAGN_TX_RES_TID_POS;
1152         sta_id = (tx_resp->ra_tid & IWLAGN_TX_RES_RA_MSK) >>
1153                 IWLAGN_TX_RES_RA_POS;
1154
1155         spin_lock_bh(&priv->sta_lock);
1156
1157         if (is_agg) {
1158                 WARN_ON_ONCE(sta_id >= IWLAGN_STATION_COUNT ||
1159                              tid >= IWL_MAX_TID_COUNT);
1160                 if (txq_id != priv->tid_data[sta_id][tid].agg.txq_id)
1161                         IWL_ERR(priv, "txq_id mismatch: %d %d\n", txq_id,
1162                                 priv->tid_data[sta_id][tid].agg.txq_id);
1163                 iwl_rx_reply_tx_agg(priv, tx_resp);
1164         }
1165
1166         __skb_queue_head_init(&skbs);
1167
1168         if (tx_resp->frame_count == 1) {
1169                 u16 next_reclaimed = le16_to_cpu(tx_resp->seq_ctl);
1170                 next_reclaimed = IEEE80211_SEQ_TO_SN(next_reclaimed + 0x10);
1171
1172                 if (is_agg) {
1173                         /* If this is an aggregation queue, we can rely on the
1174                          * ssn since the wifi sequence number corresponds to
1175                          * the index in the TFD ring (%256).
1176                          * The seq_ctl is the sequence control of the packet
1177                          * to which this Tx response relates. But if there is a
1178                          * hole in the bitmap of the BA we received, this Tx
1179                          * response may allow to reclaim the hole and all the
1180                          * subsequent packets that were already acked.
1181                          * In that case, seq_ctl != ssn, and the next packet
1182                          * to be reclaimed will be ssn and not seq_ctl.
1183                          */
1184                         next_reclaimed = ssn;
1185                 }
1186
1187                 if (tid != IWL_TID_NON_QOS) {
1188                         priv->tid_data[sta_id][tid].next_reclaimed =
1189                                 next_reclaimed;
1190                         IWL_DEBUG_TX_REPLY(priv, "Next reclaimed packet:%d\n",
1191                                                   next_reclaimed);
1192                         iwlagn_check_ratid_empty(priv, sta_id, tid);
1193                 }
1194
1195                 iwl_trans_reclaim(priv->trans, txq_id, ssn, &skbs);
1196
1197                 freed = 0;
1198
1199                 /* process frames */
1200                 skb_queue_walk(&skbs, skb) {
1201                         hdr = (struct ieee80211_hdr *)skb->data;
1202
1203                         if (!ieee80211_is_data_qos(hdr->frame_control))
1204                                 priv->last_seq_ctl = tx_resp->seq_ctl;
1205
1206                         info = IEEE80211_SKB_CB(skb);
1207                         ctx = info->driver_data[0];
1208                         iwl_trans_free_tx_cmd(priv->trans,
1209                                               info->driver_data[1]);
1210
1211                         memset(&info->status, 0, sizeof(info->status));
1212
1213                         if (status == TX_STATUS_FAIL_PASSIVE_NO_RX &&
1214                             ctx->vif &&
1215                             ctx->vif->type == NL80211_IFTYPE_STATION) {
1216                                 /* block and stop all queues */
1217                                 priv->passive_no_rx = true;
1218                                 IWL_DEBUG_TX_QUEUES(priv,
1219                                         "stop all queues: passive channel\n");
1220                                 ieee80211_stop_queues(priv->hw);
1221
1222                                 IWL_DEBUG_TX_REPLY(priv,
1223                                            "TXQ %d status %s (0x%08x) "
1224                                            "rate_n_flags 0x%x retries %d\n",
1225                                            txq_id,
1226                                            iwl_get_tx_fail_reason(status),
1227                                            status,
1228                                            le32_to_cpu(tx_resp->rate_n_flags),
1229                                            tx_resp->failure_frame);
1230
1231                                 IWL_DEBUG_TX_REPLY(priv,
1232                                            "FrameCnt = %d, idx=%d\n",
1233                                            tx_resp->frame_count, cmd_index);
1234                         }
1235
1236                         /* check if BAR is needed */
1237                         if (is_agg && !iwl_is_tx_success(status))
1238                                 info->flags |= IEEE80211_TX_STAT_AMPDU_NO_BACK;
1239                         iwlagn_set_tx_status(priv, IEEE80211_SKB_CB(skb),
1240                                      tx_resp);
1241                         if (!is_agg)
1242                                 iwlagn_non_agg_tx_status(priv, ctx, hdr->addr1);
1243
1244                         freed++;
1245                 }
1246
1247                 if (tid != IWL_TID_NON_QOS) {
1248                         priv->tid_data[sta_id][tid].next_reclaimed =
1249                                 next_reclaimed;
1250                         IWL_DEBUG_TX_REPLY(priv, "Next reclaimed packet:%d\n",
1251                                            next_reclaimed);
1252                 }
1253
1254                 if (!is_agg && freed != 1)
1255                         IWL_ERR(priv, "Q: %d, freed %d\n", txq_id, freed);
1256
1257                 IWL_DEBUG_TX_REPLY(priv, "TXQ %d status %s (0x%08x)\n", txq_id,
1258                                    iwl_get_tx_fail_reason(status), status);
1259
1260                 IWL_DEBUG_TX_REPLY(priv,
1261                                    "\t\t\t\tinitial_rate 0x%x retries %d, idx=%d ssn=%d seq_ctl=0x%x\n",
1262                                    le32_to_cpu(tx_resp->rate_n_flags),
1263                                    tx_resp->failure_frame,
1264                                    SEQ_TO_INDEX(sequence), ssn,
1265                                    le16_to_cpu(tx_resp->seq_ctl));
1266         }
1267
1268         iwl_check_abort_status(priv, tx_resp->frame_count, status);
1269         spin_unlock_bh(&priv->sta_lock);
1270
1271         while (!skb_queue_empty(&skbs)) {
1272                 skb = __skb_dequeue(&skbs);
1273                 ieee80211_tx_status(priv->hw, skb);
1274         }
1275 }
1276
1277 /**
1278  * iwlagn_rx_reply_compressed_ba - Handler for REPLY_COMPRESSED_BA
1279  *
1280  * Handles block-acknowledge notification from device, which reports success
1281  * of frames sent via aggregation.
1282  */
1283 void iwlagn_rx_reply_compressed_ba(struct iwl_priv *priv,
1284                                    struct iwl_rx_cmd_buffer *rxb)
1285 {
1286         struct iwl_rx_packet *pkt = rxb_addr(rxb);
1287         struct iwl_compressed_ba_resp *ba_resp = (void *)pkt->data;
1288         struct iwl_ht_agg *agg;
1289         struct sk_buff_head reclaimed_skbs;
1290         struct sk_buff *skb;
1291         int sta_id;
1292         int tid;
1293         int freed;
1294
1295         /* "flow" corresponds to Tx queue */
1296         u16 scd_flow = le16_to_cpu(ba_resp->scd_flow);
1297
1298         /* "ssn" is start of block-ack Tx window, corresponds to index
1299          * (in Tx queue's circular buffer) of first TFD/frame in window */
1300         u16 ba_resp_scd_ssn = le16_to_cpu(ba_resp->scd_ssn);
1301
1302         if (scd_flow >= priv->cfg->base_params->num_of_queues) {
1303                 IWL_ERR(priv,
1304                         "BUG_ON scd_flow is bigger than number of queues\n");
1305                 return;
1306         }
1307
1308         sta_id = ba_resp->sta_id;
1309         tid = ba_resp->tid;
1310         agg = &priv->tid_data[sta_id][tid].agg;
1311
1312         spin_lock_bh(&priv->sta_lock);
1313
1314         if (unlikely(!agg->wait_for_ba)) {
1315                 if (unlikely(ba_resp->bitmap))
1316                         IWL_ERR(priv, "Received BA when not expected\n");
1317                 spin_unlock_bh(&priv->sta_lock);
1318                 return;
1319         }
1320
1321         if (unlikely(scd_flow != agg->txq_id)) {
1322                 /*
1323                  * FIXME: this is a uCode bug which need to be addressed,
1324                  * log the information and return for now.
1325                  * Since it is can possibly happen very often and in order
1326                  * not to fill the syslog, don't use IWL_ERR or IWL_WARN
1327                  */
1328                 IWL_DEBUG_TX_QUEUES(priv,
1329                                     "Bad queue mapping txq_id=%d, agg_txq[sta:%d,tid:%d]=%d\n",
1330                                     scd_flow, sta_id, tid, agg->txq_id);
1331                 spin_unlock_bh(&priv->sta_lock);
1332                 return;
1333         }
1334
1335         __skb_queue_head_init(&reclaimed_skbs);
1336
1337         /* Release all TFDs before the SSN, i.e. all TFDs in front of
1338          * block-ack window (we assume that they've been successfully
1339          * transmitted ... if not, it's too late anyway). */
1340         iwl_trans_reclaim(priv->trans, scd_flow, ba_resp_scd_ssn,
1341                           &reclaimed_skbs);
1342
1343         IWL_DEBUG_TX_REPLY(priv, "REPLY_COMPRESSED_BA [%d] Received from %pM, "
1344                            "sta_id = %d\n",
1345                            agg->wait_for_ba,
1346                            (u8 *) &ba_resp->sta_addr_lo32,
1347                            ba_resp->sta_id);
1348         IWL_DEBUG_TX_REPLY(priv, "TID = %d, SeqCtl = %d, bitmap = 0x%llx, "
1349                            "scd_flow = %d, scd_ssn = %d sent:%d, acked:%d\n",
1350                            ba_resp->tid, le16_to_cpu(ba_resp->seq_ctl),
1351                            (unsigned long long)le64_to_cpu(ba_resp->bitmap),
1352                            scd_flow, ba_resp_scd_ssn, ba_resp->txed,
1353                            ba_resp->txed_2_done);
1354
1355         /* Mark that the expected block-ack response arrived */
1356         agg->wait_for_ba = false;
1357
1358         /* Sanity check values reported by uCode */
1359         if (ba_resp->txed_2_done > ba_resp->txed) {
1360                 IWL_DEBUG_TX_REPLY(priv,
1361                         "bogus sent(%d) and ack(%d) count\n",
1362                         ba_resp->txed, ba_resp->txed_2_done);
1363                 /*
1364                  * set txed_2_done = txed,
1365                  * so it won't impact rate scale
1366                  */
1367                 ba_resp->txed = ba_resp->txed_2_done;
1368         }
1369
1370         priv->tid_data[sta_id][tid].next_reclaimed = ba_resp_scd_ssn;
1371
1372         iwlagn_check_ratid_empty(priv, sta_id, tid);
1373         freed = 0;
1374
1375         skb_queue_walk(&reclaimed_skbs, skb) {
1376                 struct ieee80211_hdr *hdr = (void *)skb->data;
1377                 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1378
1379                 if (ieee80211_is_data_qos(hdr->frame_control))
1380                         freed++;
1381                 else
1382                         WARN_ON_ONCE(1);
1383
1384                 iwl_trans_free_tx_cmd(priv->trans, info->driver_data[1]);
1385
1386                 memset(&info->status, 0, sizeof(info->status));
1387                 /* Packet was transmitted successfully, failures come as single
1388                  * frames because before failing a frame the firmware transmits
1389                  * it without aggregation at least once.
1390                  */
1391                 info->flags |= IEEE80211_TX_STAT_ACK;
1392
1393                 if (freed == 1) {
1394                         /* this is the first skb we deliver in this batch */
1395                         /* put the rate scaling data there */
1396                         info = IEEE80211_SKB_CB(skb);
1397                         memset(&info->status, 0, sizeof(info->status));
1398                         info->flags |= IEEE80211_TX_STAT_AMPDU;
1399                         info->status.ampdu_ack_len = ba_resp->txed_2_done;
1400                         info->status.ampdu_len = ba_resp->txed;
1401                         iwlagn_hwrate_to_tx_control(priv, agg->rate_n_flags,
1402                                                     info);
1403                 }
1404         }
1405
1406         spin_unlock_bh(&priv->sta_lock);
1407
1408         while (!skb_queue_empty(&reclaimed_skbs)) {
1409                 skb = __skb_dequeue(&reclaimed_skbs);
1410                 ieee80211_tx_status(priv->hw, skb);
1411         }
1412 }