Merge tag 'powerpc-6.6-6' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc...
[platform/kernel/linux-starfive.git] / drivers / net / wireless / intel / iwlwifi / mvm / tx.c
1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
2 /*
3  * Copyright (C) 2012-2014, 2018-2023 Intel Corporation
4  * Copyright (C) 2013-2015 Intel Mobile Communications GmbH
5  * Copyright (C) 2016-2017 Intel Deutschland GmbH
6  */
7 #include <linux/ieee80211.h>
8 #include <linux/etherdevice.h>
9 #include <linux/tcp.h>
10 #include <net/gso.h>
11 #include <net/ip.h>
12 #include <net/ipv6.h>
13
14 #include "iwl-trans.h"
15 #include "iwl-eeprom-parse.h"
16 #include "mvm.h"
17 #include "sta.h"
18 #include "time-sync.h"
19
20 static void
21 iwl_mvm_bar_check_trigger(struct iwl_mvm *mvm, const u8 *addr,
22                           u16 tid, u16 ssn)
23 {
24         struct iwl_fw_dbg_trigger_tlv *trig;
25         struct iwl_fw_dbg_trigger_ba *ba_trig;
26
27         trig = iwl_fw_dbg_trigger_on(&mvm->fwrt, NULL, FW_DBG_TRIGGER_BA);
28         if (!trig)
29                 return;
30
31         ba_trig = (void *)trig->data;
32
33         if (!(le16_to_cpu(ba_trig->tx_bar) & BIT(tid)))
34                 return;
35
36         iwl_fw_dbg_collect_trig(&mvm->fwrt, trig,
37                                 "BAR sent to %pM, tid %d, ssn %d",
38                                 addr, tid, ssn);
39 }
40
41 #define OPT_HDR(type, skb, off) \
42         (type *)(skb_network_header(skb) + (off))
43
44 static u32 iwl_mvm_tx_csum(struct iwl_mvm *mvm, struct sk_buff *skb,
45                            struct ieee80211_tx_info *info,
46                            bool amsdu)
47 {
48         struct ieee80211_hdr *hdr = (void *)skb->data;
49         u16 mh_len = ieee80211_hdrlen(hdr->frame_control);
50         u16 offload_assist = 0;
51 #if IS_ENABLED(CONFIG_INET)
52         u8 protocol = 0;
53
54         /* Do not compute checksum if already computed */
55         if (skb->ip_summed != CHECKSUM_PARTIAL)
56                 goto out;
57
58         /* We do not expect to be requested to csum stuff we do not support */
59         if (WARN_ONCE(!(mvm->hw->netdev_features & IWL_TX_CSUM_NETIF_FLAGS) ||
60                       (skb->protocol != htons(ETH_P_IP) &&
61                        skb->protocol != htons(ETH_P_IPV6)),
62                       "No support for requested checksum\n")) {
63                 skb_checksum_help(skb);
64                 goto out;
65         }
66
67         if (skb->protocol == htons(ETH_P_IP)) {
68                 protocol = ip_hdr(skb)->protocol;
69         } else {
70 #if IS_ENABLED(CONFIG_IPV6)
71                 struct ipv6hdr *ipv6h =
72                         (struct ipv6hdr *)skb_network_header(skb);
73                 unsigned int off = sizeof(*ipv6h);
74
75                 protocol = ipv6h->nexthdr;
76                 while (protocol != NEXTHDR_NONE && ipv6_ext_hdr(protocol)) {
77                         struct ipv6_opt_hdr *hp;
78
79                         /* only supported extension headers */
80                         if (protocol != NEXTHDR_ROUTING &&
81                             protocol != NEXTHDR_HOP &&
82                             protocol != NEXTHDR_DEST) {
83                                 skb_checksum_help(skb);
84                                 goto out;
85                         }
86
87                         hp = OPT_HDR(struct ipv6_opt_hdr, skb, off);
88                         protocol = hp->nexthdr;
89                         off += ipv6_optlen(hp);
90                 }
91                 /* if we get here - protocol now should be TCP/UDP */
92 #endif
93         }
94
95         if (protocol != IPPROTO_TCP && protocol != IPPROTO_UDP) {
96                 WARN_ON_ONCE(1);
97                 skb_checksum_help(skb);
98                 goto out;
99         }
100
101         /* enable L4 csum */
102         offload_assist |= BIT(TX_CMD_OFFLD_L4_EN);
103
104         /*
105          * Set offset to IP header (snap).
106          * We don't support tunneling so no need to take care of inner header.
107          * Size is in words.
108          */
109         offload_assist |= (4 << TX_CMD_OFFLD_IP_HDR);
110
111         /* Do IPv4 csum for AMSDU only (no IP csum for Ipv6) */
112         if (skb->protocol == htons(ETH_P_IP) && amsdu) {
113                 ip_hdr(skb)->check = 0;
114                 offload_assist |= BIT(TX_CMD_OFFLD_L3_EN);
115         }
116
117         /* reset UDP/TCP header csum */
118         if (protocol == IPPROTO_TCP)
119                 tcp_hdr(skb)->check = 0;
120         else
121                 udp_hdr(skb)->check = 0;
122
123 out:
124 #endif
125         /*
126          * mac header len should include IV, size is in words unless
127          * the IV is added by the firmware like in WEP.
128          * In new Tx API, the IV is always added by the firmware.
129          */
130         if (!iwl_mvm_has_new_tx_api(mvm) && info->control.hw_key &&
131             info->control.hw_key->cipher != WLAN_CIPHER_SUITE_WEP40 &&
132             info->control.hw_key->cipher != WLAN_CIPHER_SUITE_WEP104)
133                 mh_len += info->control.hw_key->iv_len;
134         mh_len /= 2;
135         offload_assist |= mh_len << TX_CMD_OFFLD_MH_SIZE;
136
137         if (amsdu)
138                 offload_assist |= BIT(TX_CMD_OFFLD_AMSDU);
139         else if (ieee80211_hdrlen(hdr->frame_control) % 4)
140                 /* padding is inserted later in transport */
141                 offload_assist |= BIT(TX_CMD_OFFLD_PAD);
142
143         return offload_assist;
144 }
145
146 /*
147  * Sets most of the Tx cmd's fields
148  */
149 void iwl_mvm_set_tx_cmd(struct iwl_mvm *mvm, struct sk_buff *skb,
150                         struct iwl_tx_cmd *tx_cmd,
151                         struct ieee80211_tx_info *info, u8 sta_id)
152 {
153         struct ieee80211_hdr *hdr = (void *)skb->data;
154         __le16 fc = hdr->frame_control;
155         u32 tx_flags = le32_to_cpu(tx_cmd->tx_flags);
156         u32 len = skb->len + FCS_LEN;
157         bool amsdu = false;
158         u8 ac;
159
160         if (!(info->flags & IEEE80211_TX_CTL_NO_ACK) ||
161             (ieee80211_is_probe_resp(fc) &&
162              !is_multicast_ether_addr(hdr->addr1)))
163                 tx_flags |= TX_CMD_FLG_ACK;
164         else
165                 tx_flags &= ~TX_CMD_FLG_ACK;
166
167         if (ieee80211_is_probe_resp(fc))
168                 tx_flags |= TX_CMD_FLG_TSF;
169
170         if (ieee80211_has_morefrags(fc))
171                 tx_flags |= TX_CMD_FLG_MORE_FRAG;
172
173         if (ieee80211_is_data_qos(fc)) {
174                 u8 *qc = ieee80211_get_qos_ctl(hdr);
175                 tx_cmd->tid_tspec = qc[0] & 0xf;
176                 tx_flags &= ~TX_CMD_FLG_SEQ_CTL;
177                 amsdu = *qc & IEEE80211_QOS_CTL_A_MSDU_PRESENT;
178         } else if (ieee80211_is_back_req(fc)) {
179                 struct ieee80211_bar *bar = (void *)skb->data;
180                 u16 control = le16_to_cpu(bar->control);
181                 u16 ssn = le16_to_cpu(bar->start_seq_num);
182
183                 tx_flags |= TX_CMD_FLG_ACK | TX_CMD_FLG_BAR;
184                 tx_cmd->tid_tspec = (control &
185                                      IEEE80211_BAR_CTRL_TID_INFO_MASK) >>
186                         IEEE80211_BAR_CTRL_TID_INFO_SHIFT;
187                 WARN_ON_ONCE(tx_cmd->tid_tspec >= IWL_MAX_TID_COUNT);
188                 iwl_mvm_bar_check_trigger(mvm, bar->ra, tx_cmd->tid_tspec,
189                                           ssn);
190         } else {
191                 if (ieee80211_is_data(fc))
192                         tx_cmd->tid_tspec = IWL_TID_NON_QOS;
193                 else
194                         tx_cmd->tid_tspec = IWL_MAX_TID_COUNT;
195
196                 if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ)
197                         tx_flags |= TX_CMD_FLG_SEQ_CTL;
198                 else
199                         tx_flags &= ~TX_CMD_FLG_SEQ_CTL;
200         }
201
202         /* Default to 0 (BE) when tid_spec is set to IWL_MAX_TID_COUNT */
203         if (tx_cmd->tid_tspec < IWL_MAX_TID_COUNT)
204                 ac = tid_to_mac80211_ac[tx_cmd->tid_tspec];
205         else
206                 ac = tid_to_mac80211_ac[0];
207
208         tx_flags |= iwl_mvm_bt_coex_tx_prio(mvm, hdr, info, ac) <<
209                         TX_CMD_FLG_BT_PRIO_POS;
210
211         if (ieee80211_is_mgmt(fc)) {
212                 if (ieee80211_is_assoc_req(fc) || ieee80211_is_reassoc_req(fc))
213                         tx_cmd->pm_frame_timeout = cpu_to_le16(PM_FRAME_ASSOC);
214                 else if (ieee80211_is_action(fc))
215                         tx_cmd->pm_frame_timeout = cpu_to_le16(PM_FRAME_NONE);
216                 else
217                         tx_cmd->pm_frame_timeout = cpu_to_le16(PM_FRAME_MGMT);
218
219                 /* The spec allows Action frames in A-MPDU, we don't support
220                  * it
221                  */
222                 WARN_ON_ONCE(info->flags & IEEE80211_TX_CTL_AMPDU);
223         } else if (info->control.flags & IEEE80211_TX_CTRL_PORT_CTRL_PROTO) {
224                 tx_cmd->pm_frame_timeout = cpu_to_le16(PM_FRAME_MGMT);
225         } else {
226                 tx_cmd->pm_frame_timeout = cpu_to_le16(PM_FRAME_NONE);
227         }
228
229         if (ieee80211_is_data(fc) && len > mvm->rts_threshold &&
230             !is_multicast_ether_addr(hdr->addr1))
231                 tx_flags |= TX_CMD_FLG_PROT_REQUIRE;
232
233         if (fw_has_capa(&mvm->fw->ucode_capa,
234                         IWL_UCODE_TLV_CAPA_TXPOWER_INSERTION_SUPPORT) &&
235             ieee80211_action_contains_tpc(skb))
236                 tx_flags |= TX_CMD_FLG_WRITE_TX_POWER;
237
238         tx_cmd->tx_flags = cpu_to_le32(tx_flags);
239         /* Total # bytes to be transmitted - PCIe code will adjust for A-MSDU */
240         tx_cmd->len = cpu_to_le16((u16)skb->len);
241         tx_cmd->life_time = cpu_to_le32(TX_CMD_LIFE_TIME_INFINITE);
242         tx_cmd->sta_id = sta_id;
243
244         tx_cmd->offload_assist =
245                 cpu_to_le16(iwl_mvm_tx_csum(mvm, skb, info, amsdu));
246 }
247
248 static u32 iwl_mvm_get_tx_ant(struct iwl_mvm *mvm,
249                               struct ieee80211_tx_info *info,
250                               struct ieee80211_sta *sta, __le16 fc)
251 {
252         if (info->band == NL80211_BAND_2GHZ &&
253             !iwl_mvm_bt_coex_is_shared_ant_avail(mvm))
254                 return mvm->cfg->non_shared_ant << RATE_MCS_ANT_POS;
255
256         if (sta && ieee80211_is_data(fc)) {
257                 struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
258
259                 return BIT(mvmsta->tx_ant) << RATE_MCS_ANT_POS;
260         }
261
262         return BIT(mvm->mgmt_last_antenna_idx) << RATE_MCS_ANT_POS;
263 }
264
265 static u32 iwl_mvm_get_inject_tx_rate(struct iwl_mvm *mvm,
266                                       struct ieee80211_tx_info *info)
267 {
268         struct ieee80211_tx_rate *rate = &info->control.rates[0];
269         u32 result;
270
271         /*
272          * we only care about legacy/HT/VHT so far, so we can
273          * build in v1 and use iwl_new_rate_from_v1()
274          */
275
276         if (rate->flags & IEEE80211_TX_RC_VHT_MCS) {
277                 u8 mcs = ieee80211_rate_get_vht_mcs(rate);
278                 u8 nss = ieee80211_rate_get_vht_nss(rate);
279
280                 result = RATE_MCS_VHT_MSK_V1;
281                 result |= u32_encode_bits(mcs, RATE_VHT_MCS_RATE_CODE_MSK);
282                 result |= u32_encode_bits(nss, RATE_MCS_NSS_MSK);
283                 if (rate->flags & IEEE80211_TX_RC_SHORT_GI)
284                         result |= RATE_MCS_SGI_MSK_V1;
285                 if (rate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
286                         result |= u32_encode_bits(1, RATE_MCS_CHAN_WIDTH_MSK_V1);
287                 else if (rate->flags & IEEE80211_TX_RC_80_MHZ_WIDTH)
288                         result |= u32_encode_bits(2, RATE_MCS_CHAN_WIDTH_MSK_V1);
289                 else if (rate->flags & IEEE80211_TX_RC_160_MHZ_WIDTH)
290                         result |= u32_encode_bits(3, RATE_MCS_CHAN_WIDTH_MSK_V1);
291         } else if (rate->flags & IEEE80211_TX_RC_MCS) {
292                 result = RATE_MCS_HT_MSK_V1;
293                 result |= u32_encode_bits(rate->idx,
294                                           RATE_HT_MCS_RATE_CODE_MSK_V1 |
295                                           RATE_HT_MCS_NSS_MSK_V1);
296                 if (rate->flags & IEEE80211_TX_RC_SHORT_GI)
297                         result |= RATE_MCS_SGI_MSK_V1;
298                 if (rate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH)
299                         result |= u32_encode_bits(1, RATE_MCS_CHAN_WIDTH_MSK_V1);
300                 if (info->flags & IEEE80211_TX_CTL_LDPC)
301                         result |= RATE_MCS_LDPC_MSK_V1;
302                 if (u32_get_bits(info->flags, IEEE80211_TX_CTL_STBC))
303                         result |= RATE_MCS_STBC_MSK;
304         } else {
305                 return 0;
306         }
307
308         if (iwl_fw_lookup_notif_ver(mvm->fw, LONG_GROUP, TX_CMD, 0) > 6)
309                 return iwl_new_rate_from_v1(result);
310         return result;
311 }
312
313 static u32 iwl_mvm_get_tx_rate(struct iwl_mvm *mvm,
314                                struct ieee80211_tx_info *info,
315                                struct ieee80211_sta *sta, __le16 fc)
316 {
317         int rate_idx = -1;
318         u8 rate_plcp;
319         u32 rate_flags = 0;
320         bool is_cck;
321
322         if (unlikely(info->control.flags & IEEE80211_TX_CTRL_RATE_INJECT)) {
323                 u32 result = iwl_mvm_get_inject_tx_rate(mvm, info);
324
325                 if (result)
326                         return result;
327                 rate_idx = info->control.rates[0].idx;
328         } else if (!ieee80211_hw_check(mvm->hw, HAS_RATE_CONTROL)) {
329                 /* info->control is only relevant for non HW rate control */
330
331                 /* HT rate doesn't make sense for a non data frame */
332                 WARN_ONCE(info->control.rates[0].flags & IEEE80211_TX_RC_MCS &&
333                           !ieee80211_is_data(fc),
334                           "Got a HT rate (flags:0x%x/mcs:%d/fc:0x%x/state:%d) for a non data frame\n",
335                           info->control.rates[0].flags,
336                           info->control.rates[0].idx,
337                           le16_to_cpu(fc),
338                           sta ? iwl_mvm_sta_from_mac80211(sta)->sta_state : -1);
339
340                 rate_idx = info->control.rates[0].idx;
341
342                 /* For non 2 GHZ band, remap mac80211 rate indices into driver
343                  * indices.
344                  */
345                 if (info->band != NL80211_BAND_2GHZ ||
346                     (info->flags & IEEE80211_TX_CTL_NO_CCK_RATE))
347                         rate_idx += IWL_FIRST_OFDM_RATE;
348
349                 /* For 2.4 GHZ band, check that there is no need to remap */
350                 BUILD_BUG_ON(IWL_FIRST_CCK_RATE != 0);
351         }
352
353         /* if the rate isn't a well known legacy rate, take the lowest one */
354         if (rate_idx < 0 || rate_idx >= IWL_RATE_COUNT_LEGACY)
355                 rate_idx = iwl_mvm_mac_ctxt_get_lowest_rate(mvm,
356                                                             info,
357                                                             info->control.vif);
358
359         /* Get PLCP rate for tx_cmd->rate_n_flags */
360         rate_plcp = iwl_mvm_mac80211_idx_to_hwrate(mvm->fw, rate_idx);
361         is_cck = (rate_idx >= IWL_FIRST_CCK_RATE) && (rate_idx <= IWL_LAST_CCK_RATE);
362
363         /* Set CCK or OFDM flag */
364         if (iwl_fw_lookup_cmd_ver(mvm->fw, TX_CMD, 0) > 8) {
365                 if (!is_cck)
366                         rate_flags |= RATE_MCS_LEGACY_OFDM_MSK;
367                 else
368                         rate_flags |= RATE_MCS_CCK_MSK;
369         } else if (is_cck) {
370                 rate_flags |= RATE_MCS_CCK_MSK_V1;
371         }
372
373         return (u32)rate_plcp | rate_flags;
374 }
375
376 static u32 iwl_mvm_get_tx_rate_n_flags(struct iwl_mvm *mvm,
377                                        struct ieee80211_tx_info *info,
378                                        struct ieee80211_sta *sta, __le16 fc)
379 {
380         return iwl_mvm_get_tx_rate(mvm, info, sta, fc) |
381                 iwl_mvm_get_tx_ant(mvm, info, sta, fc);
382 }
383
384 /*
385  * Sets the fields in the Tx cmd that are rate related
386  */
387 void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm, struct iwl_tx_cmd *tx_cmd,
388                             struct ieee80211_tx_info *info,
389                             struct ieee80211_sta *sta, __le16 fc)
390 {
391         /* Set retry limit on RTS packets */
392         tx_cmd->rts_retry_limit = IWL_RTS_DFAULT_RETRY_LIMIT;
393
394         /* Set retry limit on DATA packets and Probe Responses*/
395         if (ieee80211_is_probe_resp(fc)) {
396                 tx_cmd->data_retry_limit = IWL_MGMT_DFAULT_RETRY_LIMIT;
397                 tx_cmd->rts_retry_limit =
398                         min(tx_cmd->data_retry_limit, tx_cmd->rts_retry_limit);
399         } else if (ieee80211_is_back_req(fc)) {
400                 tx_cmd->data_retry_limit = IWL_BAR_DFAULT_RETRY_LIMIT;
401         } else {
402                 tx_cmd->data_retry_limit = IWL_DEFAULT_TX_RETRY;
403         }
404
405         /*
406          * for data packets, rate info comes from the table inside the fw. This
407          * table is controlled by LINK_QUALITY commands
408          */
409
410         if (likely(ieee80211_is_data(fc) && sta &&
411                    !(info->control.flags & IEEE80211_TX_CTRL_RATE_INJECT))) {
412                 struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
413
414                 if (mvmsta->sta_state >= IEEE80211_STA_AUTHORIZED) {
415                         tx_cmd->initial_rate_index = 0;
416                         tx_cmd->tx_flags |= cpu_to_le32(TX_CMD_FLG_STA_RATE);
417                         return;
418                 }
419         } else if (ieee80211_is_back_req(fc)) {
420                 tx_cmd->tx_flags |=
421                         cpu_to_le32(TX_CMD_FLG_ACK | TX_CMD_FLG_BAR);
422         }
423
424         /* Set the rate in the TX cmd */
425         tx_cmd->rate_n_flags =
426                 cpu_to_le32(iwl_mvm_get_tx_rate_n_flags(mvm, info, sta, fc));
427 }
428
429 static inline void iwl_mvm_set_tx_cmd_pn(struct ieee80211_tx_info *info,
430                                          u8 *crypto_hdr)
431 {
432         struct ieee80211_key_conf *keyconf = info->control.hw_key;
433         u64 pn;
434
435         pn = atomic64_inc_return(&keyconf->tx_pn);
436         crypto_hdr[0] = pn;
437         crypto_hdr[2] = 0;
438         crypto_hdr[3] = 0x20 | (keyconf->keyidx << 6);
439         crypto_hdr[1] = pn >> 8;
440         crypto_hdr[4] = pn >> 16;
441         crypto_hdr[5] = pn >> 24;
442         crypto_hdr[6] = pn >> 32;
443         crypto_hdr[7] = pn >> 40;
444 }
445
446 /*
447  * Sets the fields in the Tx cmd that are crypto related
448  */
449 static void iwl_mvm_set_tx_cmd_crypto(struct iwl_mvm *mvm,
450                                       struct ieee80211_tx_info *info,
451                                       struct iwl_tx_cmd *tx_cmd,
452                                       struct sk_buff *skb_frag,
453                                       int hdrlen)
454 {
455         struct ieee80211_key_conf *keyconf = info->control.hw_key;
456         u8 *crypto_hdr = skb_frag->data + hdrlen;
457         enum iwl_tx_cmd_sec_ctrl type = TX_CMD_SEC_CCM;
458         u64 pn;
459
460         switch (keyconf->cipher) {
461         case WLAN_CIPHER_SUITE_CCMP:
462                 iwl_mvm_set_tx_cmd_ccmp(info, tx_cmd);
463                 iwl_mvm_set_tx_cmd_pn(info, crypto_hdr);
464                 break;
465
466         case WLAN_CIPHER_SUITE_TKIP:
467                 tx_cmd->sec_ctl = TX_CMD_SEC_TKIP;
468                 pn = atomic64_inc_return(&keyconf->tx_pn);
469                 ieee80211_tkip_add_iv(crypto_hdr, keyconf, pn);
470                 ieee80211_get_tkip_p2k(keyconf, skb_frag, tx_cmd->key);
471                 break;
472
473         case WLAN_CIPHER_SUITE_WEP104:
474                 tx_cmd->sec_ctl |= TX_CMD_SEC_KEY128;
475                 fallthrough;
476         case WLAN_CIPHER_SUITE_WEP40:
477                 tx_cmd->sec_ctl |= TX_CMD_SEC_WEP |
478                         ((keyconf->keyidx << TX_CMD_SEC_WEP_KEY_IDX_POS) &
479                           TX_CMD_SEC_WEP_KEY_IDX_MSK);
480
481                 memcpy(&tx_cmd->key[3], keyconf->key, keyconf->keylen);
482                 break;
483         case WLAN_CIPHER_SUITE_GCMP:
484         case WLAN_CIPHER_SUITE_GCMP_256:
485                 type = TX_CMD_SEC_GCMP;
486                 fallthrough;
487         case WLAN_CIPHER_SUITE_CCMP_256:
488                 /* TODO: Taking the key from the table might introduce a race
489                  * when PTK rekeying is done, having an old packets with a PN
490                  * based on the old key but the message encrypted with a new
491                  * one.
492                  * Need to handle this.
493                  */
494                 tx_cmd->sec_ctl |= type | TX_CMD_SEC_KEY_FROM_TABLE;
495                 tx_cmd->key[0] = keyconf->hw_key_idx;
496                 iwl_mvm_set_tx_cmd_pn(info, crypto_hdr);
497                 break;
498         default:
499                 tx_cmd->sec_ctl |= TX_CMD_SEC_EXT;
500         }
501 }
502
503 /*
504  * Allocates and sets the Tx cmd the driver data pointers in the skb
505  */
506 static struct iwl_device_tx_cmd *
507 iwl_mvm_set_tx_params(struct iwl_mvm *mvm, struct sk_buff *skb,
508                       struct ieee80211_tx_info *info, int hdrlen,
509                       struct ieee80211_sta *sta, u8 sta_id)
510 {
511         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
512         struct iwl_device_tx_cmd *dev_cmd;
513         struct iwl_tx_cmd *tx_cmd;
514
515         dev_cmd = iwl_trans_alloc_tx_cmd(mvm->trans);
516
517         if (unlikely(!dev_cmd))
518                 return NULL;
519
520         dev_cmd->hdr.cmd = TX_CMD;
521
522         if (iwl_mvm_has_new_tx_api(mvm)) {
523                 u32 rate_n_flags = 0;
524                 u16 flags = 0;
525                 struct iwl_mvm_sta *mvmsta = sta ?
526                         iwl_mvm_sta_from_mac80211(sta) : NULL;
527                 bool amsdu = false;
528
529                 if (ieee80211_is_data_qos(hdr->frame_control)) {
530                         u8 *qc = ieee80211_get_qos_ctl(hdr);
531
532                         amsdu = *qc & IEEE80211_QOS_CTL_A_MSDU_PRESENT;
533                 }
534
535                 if (!info->control.hw_key)
536                         flags |= IWL_TX_FLAGS_ENCRYPT_DIS;
537
538                 /*
539                  * For data packets rate info comes from the fw. Only
540                  * set rate/antenna during connection establishment or in case
541                  * no station is given.
542                  */
543                 if (!sta || !ieee80211_is_data(hdr->frame_control) ||
544                     mvmsta->sta_state < IEEE80211_STA_AUTHORIZED) {
545                         flags |= IWL_TX_FLAGS_CMD_RATE;
546                         rate_n_flags =
547                                 iwl_mvm_get_tx_rate_n_flags(mvm, info, sta,
548                                                             hdr->frame_control);
549                 }
550
551                 if (mvm->trans->trans_cfg->device_family >=
552                     IWL_DEVICE_FAMILY_AX210) {
553                         struct iwl_tx_cmd_gen3 *cmd = (void *)dev_cmd->payload;
554                         u32 offload_assist = iwl_mvm_tx_csum(mvm, skb,
555                                                              info, amsdu);
556
557                         cmd->offload_assist = cpu_to_le32(offload_assist);
558
559                         /* Total # bytes to be transmitted */
560                         cmd->len = cpu_to_le16((u16)skb->len);
561
562                         /* Copy MAC header from skb into command buffer */
563                         memcpy(cmd->hdr, hdr, hdrlen);
564
565                         cmd->flags = cpu_to_le16(flags);
566                         cmd->rate_n_flags = cpu_to_le32(rate_n_flags);
567                 } else {
568                         struct iwl_tx_cmd_gen2 *cmd = (void *)dev_cmd->payload;
569                         u16 offload_assist = iwl_mvm_tx_csum(mvm, skb,
570                                                              info, amsdu);
571
572                         cmd->offload_assist = cpu_to_le16(offload_assist);
573
574                         /* Total # bytes to be transmitted */
575                         cmd->len = cpu_to_le16((u16)skb->len);
576
577                         /* Copy MAC header from skb into command buffer */
578                         memcpy(cmd->hdr, hdr, hdrlen);
579
580                         cmd->flags = cpu_to_le32(flags);
581                         cmd->rate_n_flags = cpu_to_le32(rate_n_flags);
582                 }
583                 goto out;
584         }
585
586         tx_cmd = (struct iwl_tx_cmd *)dev_cmd->payload;
587
588         if (info->control.hw_key)
589                 iwl_mvm_set_tx_cmd_crypto(mvm, info, tx_cmd, skb, hdrlen);
590
591         iwl_mvm_set_tx_cmd(mvm, skb, tx_cmd, info, sta_id);
592
593         iwl_mvm_set_tx_cmd_rate(mvm, tx_cmd, info, sta, hdr->frame_control);
594
595         /* Copy MAC header from skb into command buffer */
596         memcpy(tx_cmd->hdr, hdr, hdrlen);
597
598 out:
599         return dev_cmd;
600 }
601
602 static void iwl_mvm_skb_prepare_status(struct sk_buff *skb,
603                                        struct iwl_device_tx_cmd *cmd)
604 {
605         struct ieee80211_tx_info *skb_info = IEEE80211_SKB_CB(skb);
606
607         memset(&skb_info->status, 0, sizeof(skb_info->status));
608         memset(skb_info->driver_data, 0, sizeof(skb_info->driver_data));
609
610         skb_info->driver_data[1] = cmd;
611 }
612
613 static int iwl_mvm_get_ctrl_vif_queue(struct iwl_mvm *mvm,
614                                       struct iwl_mvm_vif_link_info *link,
615                                       struct ieee80211_tx_info *info,
616                                       struct sk_buff *skb)
617 {
618         struct ieee80211_hdr *hdr = (void *)skb->data;
619         __le16 fc = hdr->frame_control;
620
621         switch (info->control.vif->type) {
622         case NL80211_IFTYPE_AP:
623         case NL80211_IFTYPE_ADHOC:
624                 /*
625                  * Non-bufferable frames use the broadcast station, thus they
626                  * use the probe queue.
627                  * Also take care of the case where we send a deauth to a
628                  * station that we don't have, or similarly an association
629                  * response (with non-success status) for a station we can't
630                  * accept.
631                  * Also, disassociate frames might happen, particular with
632                  * reason 7 ("Class 3 frame received from nonassociated STA").
633                  */
634                 if (ieee80211_is_mgmt(fc) &&
635                     (!ieee80211_is_bufferable_mmpdu(skb) ||
636                      ieee80211_is_deauth(fc) || ieee80211_is_disassoc(fc)))
637                         return link->mgmt_queue;
638
639                 if (!ieee80211_has_order(fc) && !ieee80211_is_probe_req(fc) &&
640                     is_multicast_ether_addr(hdr->addr1))
641                         return link->cab_queue;
642
643                 WARN_ONCE(info->control.vif->type != NL80211_IFTYPE_ADHOC,
644                           "fc=0x%02x", le16_to_cpu(fc));
645                 return link->mgmt_queue;
646         case NL80211_IFTYPE_P2P_DEVICE:
647                 if (ieee80211_is_mgmt(fc))
648                         return mvm->p2p_dev_queue;
649
650                 WARN_ON_ONCE(1);
651                 return mvm->p2p_dev_queue;
652         default:
653                 WARN_ONCE(1, "Not a ctrl vif, no available queue\n");
654                 return -1;
655         }
656 }
657
658 static void iwl_mvm_probe_resp_set_noa(struct iwl_mvm *mvm,
659                                        struct sk_buff *skb)
660 {
661         struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
662         struct iwl_mvm_vif *mvmvif =
663                 iwl_mvm_vif_from_mac80211(info->control.vif);
664         struct ieee80211_mgmt *mgmt = (struct ieee80211_mgmt *)skb->data;
665         int base_len = (u8 *)mgmt->u.probe_resp.variable - (u8 *)mgmt;
666         struct iwl_probe_resp_data *resp_data;
667         const u8 *ie;
668         u8 *pos;
669         u8 match[] = {
670                 (WLAN_OUI_WFA >> 16) & 0xff,
671                 (WLAN_OUI_WFA >> 8) & 0xff,
672                 WLAN_OUI_WFA & 0xff,
673                 WLAN_OUI_TYPE_WFA_P2P,
674         };
675
676         rcu_read_lock();
677
678         resp_data = rcu_dereference(mvmvif->deflink.probe_resp_data);
679         if (!resp_data)
680                 goto out;
681
682         if (!resp_data->notif.noa_active)
683                 goto out;
684
685         ie = cfg80211_find_ie_match(WLAN_EID_VENDOR_SPECIFIC,
686                                     mgmt->u.probe_resp.variable,
687                                     skb->len - base_len,
688                                     match, 4, 2);
689         if (!ie) {
690                 IWL_DEBUG_TX(mvm, "probe resp doesn't have P2P IE\n");
691                 goto out;
692         }
693
694         if (skb_tailroom(skb) < resp_data->noa_len) {
695                 if (pskb_expand_head(skb, 0, resp_data->noa_len, GFP_ATOMIC)) {
696                         IWL_ERR(mvm,
697                                 "Failed to reallocate probe resp\n");
698                         goto out;
699                 }
700         }
701
702         pos = skb_put(skb, resp_data->noa_len);
703
704         *pos++ = WLAN_EID_VENDOR_SPECIFIC;
705         /* Set length of IE body (not including ID and length itself) */
706         *pos++ = resp_data->noa_len - 2;
707         *pos++ = (WLAN_OUI_WFA >> 16) & 0xff;
708         *pos++ = (WLAN_OUI_WFA >> 8) & 0xff;
709         *pos++ = WLAN_OUI_WFA & 0xff;
710         *pos++ = WLAN_OUI_TYPE_WFA_P2P;
711
712         memcpy(pos, &resp_data->notif.noa_attr,
713                resp_data->noa_len - sizeof(struct ieee80211_vendor_ie));
714
715 out:
716         rcu_read_unlock();
717 }
718
719 int iwl_mvm_tx_skb_non_sta(struct iwl_mvm *mvm, struct sk_buff *skb)
720 {
721         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
722         struct ieee80211_tx_info info;
723         struct iwl_device_tx_cmd *dev_cmd;
724         u8 sta_id;
725         int hdrlen = ieee80211_hdrlen(hdr->frame_control);
726         __le16 fc = hdr->frame_control;
727         bool offchannel = IEEE80211_SKB_CB(skb)->flags &
728                 IEEE80211_TX_CTL_TX_OFFCHAN;
729         int queue = -1;
730
731         if (IWL_MVM_NON_TRANSMITTING_AP && ieee80211_is_probe_resp(fc))
732                 return -1;
733
734         memcpy(&info, skb->cb, sizeof(info));
735
736         if (WARN_ON_ONCE(skb->len > IEEE80211_MAX_DATA_LEN + hdrlen))
737                 return -1;
738
739         if (WARN_ON_ONCE(info.flags & IEEE80211_TX_CTL_AMPDU))
740                 return -1;
741
742         if (info.control.vif) {
743                 struct iwl_mvm_vif *mvmvif =
744                         iwl_mvm_vif_from_mac80211(info.control.vif);
745
746                 if (info.control.vif->type == NL80211_IFTYPE_P2P_DEVICE ||
747                     info.control.vif->type == NL80211_IFTYPE_AP ||
748                     info.control.vif->type == NL80211_IFTYPE_ADHOC) {
749                         u32 link_id = u32_get_bits(info.control.flags,
750                                                    IEEE80211_TX_CTRL_MLO_LINK);
751                         struct iwl_mvm_vif_link_info *link;
752
753                         if (link_id == IEEE80211_LINK_UNSPECIFIED) {
754                                 if (info.control.vif->active_links)
755                                         link_id = ffs(info.control.vif->active_links) - 1;
756                                 else
757                                         link_id = 0;
758                         }
759
760                         link = mvmvif->link[link_id];
761                         if (WARN_ON(!link))
762                                 return -1;
763
764                         if (!ieee80211_is_data(hdr->frame_control))
765                                 sta_id = link->bcast_sta.sta_id;
766                         else
767                                 sta_id = link->mcast_sta.sta_id;
768
769                         queue = iwl_mvm_get_ctrl_vif_queue(mvm, link, &info,
770                                                            skb);
771                 } else if (info.control.vif->type == NL80211_IFTYPE_MONITOR) {
772                         queue = mvm->snif_queue;
773                         sta_id = mvm->snif_sta.sta_id;
774                 } else if (info.control.vif->type == NL80211_IFTYPE_STATION &&
775                            offchannel) {
776                         /*
777                          * IWL_MVM_OFFCHANNEL_QUEUE is used for ROC packets
778                          * that can be used in 2 different types of vifs, P2P &
779                          * STATION.
780                          * P2P uses the offchannel queue.
781                          * STATION (HS2.0) uses the auxiliary context of the FW,
782                          * and hence needs to be sent on the aux queue.
783                          */
784                         sta_id = mvm->aux_sta.sta_id;
785                         queue = mvm->aux_queue;
786                 }
787         }
788
789         if (queue < 0) {
790                 IWL_ERR(mvm, "No queue was found. Dropping TX\n");
791                 return -1;
792         }
793
794         if (unlikely(ieee80211_is_probe_resp(fc)))
795                 iwl_mvm_probe_resp_set_noa(mvm, skb);
796
797         IWL_DEBUG_TX(mvm, "station Id %d, queue=%d\n", sta_id, queue);
798
799         dev_cmd = iwl_mvm_set_tx_params(mvm, skb, &info, hdrlen, NULL, sta_id);
800         if (!dev_cmd)
801                 return -1;
802
803         /* From now on, we cannot access info->control */
804         iwl_mvm_skb_prepare_status(skb, dev_cmd);
805
806         if (iwl_trans_tx(mvm->trans, skb, dev_cmd, queue)) {
807                 iwl_trans_free_tx_cmd(mvm->trans, dev_cmd);
808                 return -1;
809         }
810
811         return 0;
812 }
813
814 unsigned int iwl_mvm_max_amsdu_size(struct iwl_mvm *mvm,
815                                     struct ieee80211_sta *sta, unsigned int tid)
816 {
817         struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
818         u8 ac = tid_to_mac80211_ac[tid];
819         enum nl80211_band band;
820         unsigned int txf;
821         unsigned int val;
822         int lmac;
823
824         /* For HE redirect to trigger based fifos */
825         if (sta->deflink.he_cap.has_he && !WARN_ON(!iwl_mvm_has_new_tx_api(mvm)))
826                 ac += 4;
827
828         txf = iwl_mvm_mac_ac_to_tx_fifo(mvm, ac);
829
830         /*
831          * Don't send an AMSDU that will be longer than the TXF.
832          * Add a security margin of 256 for the TX command + headers.
833          * We also want to have the start of the next packet inside the
834          * fifo to be able to send bursts.
835          */
836         val = mvmsta->max_amsdu_len;
837
838         if (hweight16(sta->valid_links) <= 1) {
839                 if (sta->valid_links) {
840                         struct ieee80211_bss_conf *link_conf;
841                         unsigned int link = ffs(sta->valid_links) - 1;
842
843                         rcu_read_lock();
844                         link_conf = rcu_dereference(mvmsta->vif->link_conf[link]);
845                         if (WARN_ON(!link_conf))
846                                 band = NL80211_BAND_2GHZ;
847                         else
848                                 band = link_conf->chandef.chan->band;
849                         rcu_read_unlock();
850                 } else {
851                         band = mvmsta->vif->bss_conf.chandef.chan->band;
852                 }
853
854                 lmac = iwl_mvm_get_lmac_id(mvm, band);
855         } else if (fw_has_capa(&mvm->fw->ucode_capa,
856                                IWL_UCODE_TLV_CAPA_CDB_SUPPORT)) {
857                 /* for real MLO restrict to both LMACs if they exist */
858                 lmac = IWL_LMAC_5G_INDEX;
859                 val = min_t(unsigned int, val,
860                             mvm->fwrt.smem_cfg.lmac[lmac].txfifo_size[txf] - 256);
861                 lmac = IWL_LMAC_24G_INDEX;
862         } else {
863                 lmac = IWL_LMAC_24G_INDEX;
864         }
865
866         return min_t(unsigned int, val,
867                      mvm->fwrt.smem_cfg.lmac[lmac].txfifo_size[txf] - 256);
868 }
869
870 #ifdef CONFIG_INET
871
872 static int
873 iwl_mvm_tx_tso_segment(struct sk_buff *skb, unsigned int num_subframes,
874                        netdev_features_t netdev_flags,
875                        struct sk_buff_head *mpdus_skb)
876 {
877         struct sk_buff *tmp, *next;
878         struct ieee80211_hdr *hdr = (void *)skb->data;
879         char cb[sizeof(skb->cb)];
880         u16 i = 0;
881         unsigned int tcp_payload_len;
882         unsigned int mss = skb_shinfo(skb)->gso_size;
883         bool ipv4 = (skb->protocol == htons(ETH_P_IP));
884         bool qos = ieee80211_is_data_qos(hdr->frame_control);
885         u16 ip_base_id = ipv4 ? ntohs(ip_hdr(skb)->id) : 0;
886
887         skb_shinfo(skb)->gso_size = num_subframes * mss;
888         memcpy(cb, skb->cb, sizeof(cb));
889
890         next = skb_gso_segment(skb, netdev_flags);
891         skb_shinfo(skb)->gso_size = mss;
892         skb_shinfo(skb)->gso_type = ipv4 ? SKB_GSO_TCPV4 : SKB_GSO_TCPV6;
893         if (WARN_ON_ONCE(IS_ERR(next)))
894                 return -EINVAL;
895         else if (next)
896                 consume_skb(skb);
897
898         skb_list_walk_safe(next, tmp, next) {
899                 memcpy(tmp->cb, cb, sizeof(tmp->cb));
900                 /*
901                  * Compute the length of all the data added for the A-MSDU.
902                  * This will be used to compute the length to write in the TX
903                  * command. We have: SNAP + IP + TCP for n -1 subframes and
904                  * ETH header for n subframes.
905                  */
906                 tcp_payload_len = skb_tail_pointer(tmp) -
907                         skb_transport_header(tmp) -
908                         tcp_hdrlen(tmp) + tmp->data_len;
909
910                 if (ipv4)
911                         ip_hdr(tmp)->id = htons(ip_base_id + i * num_subframes);
912
913                 if (tcp_payload_len > mss) {
914                         skb_shinfo(tmp)->gso_size = mss;
915                         skb_shinfo(tmp)->gso_type = ipv4 ? SKB_GSO_TCPV4 :
916                                                            SKB_GSO_TCPV6;
917                 } else {
918                         if (qos) {
919                                 u8 *qc;
920
921                                 if (ipv4)
922                                         ip_send_check(ip_hdr(tmp));
923
924                                 qc = ieee80211_get_qos_ctl((void *)tmp->data);
925                                 *qc &= ~IEEE80211_QOS_CTL_A_MSDU_PRESENT;
926                         }
927                         skb_shinfo(tmp)->gso_size = 0;
928                 }
929
930                 skb_mark_not_on_list(tmp);
931                 __skb_queue_tail(mpdus_skb, tmp);
932                 i++;
933         }
934
935         return 0;
936 }
937
938 static int iwl_mvm_tx_tso(struct iwl_mvm *mvm, struct sk_buff *skb,
939                           struct ieee80211_tx_info *info,
940                           struct ieee80211_sta *sta,
941                           struct sk_buff_head *mpdus_skb)
942 {
943         struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
944         struct ieee80211_hdr *hdr = (void *)skb->data;
945         unsigned int mss = skb_shinfo(skb)->gso_size;
946         unsigned int num_subframes, tcp_payload_len, subf_len, max_amsdu_len;
947         u16 snap_ip_tcp, pad;
948         netdev_features_t netdev_flags = NETIF_F_CSUM_MASK | NETIF_F_SG;
949         u8 tid;
950
951         snap_ip_tcp = 8 + skb_transport_header(skb) - skb_network_header(skb) +
952                 tcp_hdrlen(skb);
953
954         if (!mvmsta->max_amsdu_len ||
955             !ieee80211_is_data_qos(hdr->frame_control) ||
956             !mvmsta->amsdu_enabled)
957                 return iwl_mvm_tx_tso_segment(skb, 1, netdev_flags, mpdus_skb);
958
959         /*
960          * Do not build AMSDU for IPv6 with extension headers.
961          * ask stack to segment and checkum the generated MPDUs for us.
962          */
963         if (skb->protocol == htons(ETH_P_IPV6) &&
964             ((struct ipv6hdr *)skb_network_header(skb))->nexthdr !=
965             IPPROTO_TCP) {
966                 netdev_flags &= ~NETIF_F_CSUM_MASK;
967                 return iwl_mvm_tx_tso_segment(skb, 1, netdev_flags, mpdus_skb);
968         }
969
970         tid = ieee80211_get_tid(hdr);
971         if (WARN_ON_ONCE(tid >= IWL_MAX_TID_COUNT))
972                 return -EINVAL;
973
974         /*
975          * No need to lock amsdu_in_ampdu_allowed since it can't be modified
976          * during an BA session.
977          */
978         if ((info->flags & IEEE80211_TX_CTL_AMPDU &&
979              !mvmsta->tid_data[tid].amsdu_in_ampdu_allowed) ||
980             !(mvmsta->amsdu_enabled & BIT(tid)))
981                 return iwl_mvm_tx_tso_segment(skb, 1, netdev_flags, mpdus_skb);
982
983         /*
984          * Take the min of ieee80211 station and mvm station
985          */
986         max_amsdu_len =
987                 min_t(unsigned int, sta->cur->max_amsdu_len,
988                       iwl_mvm_max_amsdu_size(mvm, sta, tid));
989
990         /*
991          * Limit A-MSDU in A-MPDU to 4095 bytes when VHT is not
992          * supported. This is a spec requirement (IEEE 802.11-2015
993          * section 8.7.3 NOTE 3).
994          */
995         if (info->flags & IEEE80211_TX_CTL_AMPDU &&
996             !sta->deflink.vht_cap.vht_supported)
997                 max_amsdu_len = min_t(unsigned int, max_amsdu_len, 4095);
998
999         /* Sub frame header + SNAP + IP header + TCP header + MSS */
1000         subf_len = sizeof(struct ethhdr) + snap_ip_tcp + mss;
1001         pad = (4 - subf_len) & 0x3;
1002
1003         /*
1004          * If we have N subframes in the A-MSDU, then the A-MSDU's size is
1005          * N * subf_len + (N - 1) * pad.
1006          */
1007         num_subframes = (max_amsdu_len + pad) / (subf_len + pad);
1008
1009         if (sta->max_amsdu_subframes &&
1010             num_subframes > sta->max_amsdu_subframes)
1011                 num_subframes = sta->max_amsdu_subframes;
1012
1013         tcp_payload_len = skb_tail_pointer(skb) - skb_transport_header(skb) -
1014                 tcp_hdrlen(skb) + skb->data_len;
1015
1016         /*
1017          * Make sure we have enough TBs for the A-MSDU:
1018          *      2 for each subframe
1019          *      1 more for each fragment
1020          *      1 more for the potential data in the header
1021          */
1022         if ((num_subframes * 2 + skb_shinfo(skb)->nr_frags + 1) >
1023             mvm->trans->max_skb_frags)
1024                 num_subframes = 1;
1025
1026         if (num_subframes > 1)
1027                 *ieee80211_get_qos_ctl(hdr) |= IEEE80211_QOS_CTL_A_MSDU_PRESENT;
1028
1029         /* This skb fits in one single A-MSDU */
1030         if (num_subframes * mss >= tcp_payload_len) {
1031                 __skb_queue_tail(mpdus_skb, skb);
1032                 return 0;
1033         }
1034
1035         /*
1036          * Trick the segmentation function to make it
1037          * create SKBs that can fit into one A-MSDU.
1038          */
1039         return iwl_mvm_tx_tso_segment(skb, num_subframes, netdev_flags,
1040                                       mpdus_skb);
1041 }
1042 #else /* CONFIG_INET */
1043 static int iwl_mvm_tx_tso(struct iwl_mvm *mvm, struct sk_buff *skb,
1044                           struct ieee80211_tx_info *info,
1045                           struct ieee80211_sta *sta,
1046                           struct sk_buff_head *mpdus_skb)
1047 {
1048         /* Impossible to get TSO with CONFIG_INET */
1049         WARN_ON(1);
1050
1051         return -1;
1052 }
1053 #endif
1054
1055 /* Check if there are any timed-out TIDs on a given shared TXQ */
1056 static bool iwl_mvm_txq_should_update(struct iwl_mvm *mvm, int txq_id)
1057 {
1058         unsigned long queue_tid_bitmap = mvm->queue_info[txq_id].tid_bitmap;
1059         unsigned long now = jiffies;
1060         int tid;
1061
1062         if (WARN_ON(iwl_mvm_has_new_tx_api(mvm)))
1063                 return false;
1064
1065         for_each_set_bit(tid, &queue_tid_bitmap, IWL_MAX_TID_COUNT + 1) {
1066                 if (time_before(mvm->queue_info[txq_id].last_frame_time[tid] +
1067                                 IWL_MVM_DQA_QUEUE_TIMEOUT, now))
1068                         return true;
1069         }
1070
1071         return false;
1072 }
1073
1074 static void iwl_mvm_tx_airtime(struct iwl_mvm *mvm,
1075                                struct iwl_mvm_sta *mvmsta,
1076                                int airtime)
1077 {
1078         int mac = mvmsta->mac_id_n_color & FW_CTXT_ID_MSK;
1079         struct iwl_mvm_tcm_mac *mdata;
1080
1081         if (mac >= NUM_MAC_INDEX_DRIVER)
1082                 return;
1083
1084         mdata = &mvm->tcm.data[mac];
1085
1086         if (mvm->tcm.paused)
1087                 return;
1088
1089         if (time_after(jiffies, mvm->tcm.ts + MVM_TCM_PERIOD))
1090                 schedule_delayed_work(&mvm->tcm.work, 0);
1091
1092         mdata->tx.airtime += airtime;
1093 }
1094
1095 static int iwl_mvm_tx_pkt_queued(struct iwl_mvm *mvm,
1096                                  struct iwl_mvm_sta *mvmsta, int tid)
1097 {
1098         u32 ac = tid_to_mac80211_ac[tid];
1099         int mac = mvmsta->mac_id_n_color & FW_CTXT_ID_MSK;
1100         struct iwl_mvm_tcm_mac *mdata;
1101
1102         if (mac >= NUM_MAC_INDEX_DRIVER)
1103                 return -EINVAL;
1104
1105         mdata = &mvm->tcm.data[mac];
1106
1107         mdata->tx.pkts[ac]++;
1108
1109         return 0;
1110 }
1111
1112 /*
1113  * Sets the fields in the Tx cmd that are crypto related.
1114  *
1115  * This function must be called with BHs disabled.
1116  */
1117 static int iwl_mvm_tx_mpdu(struct iwl_mvm *mvm, struct sk_buff *skb,
1118                            struct ieee80211_tx_info *info,
1119                            struct ieee80211_sta *sta)
1120 {
1121         struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
1122         struct iwl_mvm_sta *mvmsta;
1123         struct iwl_device_tx_cmd *dev_cmd;
1124         __le16 fc;
1125         u16 seq_number = 0;
1126         u8 tid = IWL_MAX_TID_COUNT;
1127         u16 txq_id;
1128         bool is_ampdu = false;
1129         int hdrlen;
1130
1131         mvmsta = iwl_mvm_sta_from_mac80211(sta);
1132         fc = hdr->frame_control;
1133         hdrlen = ieee80211_hdrlen(fc);
1134
1135         if (IWL_MVM_NON_TRANSMITTING_AP && ieee80211_is_probe_resp(fc))
1136                 return -1;
1137
1138         if (WARN_ON_ONCE(!mvmsta))
1139                 return -1;
1140
1141         if (WARN_ON_ONCE(mvmsta->deflink.sta_id == IWL_MVM_INVALID_STA))
1142                 return -1;
1143
1144         if (unlikely(ieee80211_is_any_nullfunc(fc)) && sta->deflink.he_cap.has_he)
1145                 return -1;
1146
1147         if (unlikely(ieee80211_is_probe_resp(fc)))
1148                 iwl_mvm_probe_resp_set_noa(mvm, skb);
1149
1150         dev_cmd = iwl_mvm_set_tx_params(mvm, skb, info, hdrlen,
1151                                         sta, mvmsta->deflink.sta_id);
1152         if (!dev_cmd)
1153                 goto drop;
1154
1155         /*
1156          * we handle that entirely ourselves -- for uAPSD the firmware
1157          * will always send a notification, and for PS-Poll responses
1158          * we'll notify mac80211 when getting frame status
1159          */
1160         info->flags &= ~IEEE80211_TX_STATUS_EOSP;
1161
1162         spin_lock(&mvmsta->lock);
1163
1164         /* nullfunc frames should go to the MGMT queue regardless of QOS,
1165          * the conditions of !ieee80211_is_qos_nullfunc(fc) and
1166          * !ieee80211_is_data_qos(fc) keep the default assignment of MGMT TID
1167          */
1168         if (ieee80211_is_data_qos(fc) && !ieee80211_is_qos_nullfunc(fc)) {
1169                 tid = ieee80211_get_tid(hdr);
1170                 if (WARN_ONCE(tid >= IWL_MAX_TID_COUNT, "Invalid TID %d", tid))
1171                         goto drop_unlock_sta;
1172
1173                 is_ampdu = info->flags & IEEE80211_TX_CTL_AMPDU;
1174                 if (WARN_ONCE(is_ampdu &&
1175                               mvmsta->tid_data[tid].state != IWL_AGG_ON,
1176                               "Invalid internal agg state %d for TID %d",
1177                                mvmsta->tid_data[tid].state, tid))
1178                         goto drop_unlock_sta;
1179
1180                 seq_number = mvmsta->tid_data[tid].seq_number;
1181                 seq_number &= IEEE80211_SCTL_SEQ;
1182
1183                 if (!iwl_mvm_has_new_tx_api(mvm)) {
1184                         struct iwl_tx_cmd *tx_cmd = (void *)dev_cmd->payload;
1185
1186                         hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG);
1187                         hdr->seq_ctrl |= cpu_to_le16(seq_number);
1188                         /* update the tx_cmd hdr as it was already copied */
1189                         tx_cmd->hdr->seq_ctrl = hdr->seq_ctrl;
1190                 }
1191         } else if (ieee80211_is_data(fc) && !ieee80211_is_data_qos(fc) &&
1192                    !ieee80211_is_nullfunc(fc)) {
1193                 tid = IWL_TID_NON_QOS;
1194         }
1195
1196         txq_id = mvmsta->tid_data[tid].txq_id;
1197
1198         WARN_ON_ONCE(info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM);
1199
1200         if (WARN_ONCE(txq_id == IWL_MVM_INVALID_QUEUE, "Invalid TXQ id")) {
1201                 iwl_trans_free_tx_cmd(mvm->trans, dev_cmd);
1202                 spin_unlock(&mvmsta->lock);
1203                 return -1;
1204         }
1205
1206         if (!iwl_mvm_has_new_tx_api(mvm)) {
1207                 /* Keep track of the time of the last frame for this RA/TID */
1208                 mvm->queue_info[txq_id].last_frame_time[tid] = jiffies;
1209
1210                 /*
1211                  * If we have timed-out TIDs - schedule the worker that will
1212                  * reconfig the queues and update them
1213                  *
1214                  * Note that the no lock is taken here in order to not serialize
1215                  * the TX flow. This isn't dangerous because scheduling
1216                  * mvm->add_stream_wk can't ruin the state, and if we DON'T
1217                  * schedule it due to some race condition then next TX we get
1218                  * here we will.
1219                  */
1220                 if (unlikely(mvm->queue_info[txq_id].status ==
1221                              IWL_MVM_QUEUE_SHARED &&
1222                              iwl_mvm_txq_should_update(mvm, txq_id)))
1223                         schedule_work(&mvm->add_stream_wk);
1224         }
1225
1226         IWL_DEBUG_TX(mvm, "TX to [%d|%d] Q:%d - seq: 0x%x len %d\n",
1227                      mvmsta->deflink.sta_id, tid, txq_id,
1228                      IEEE80211_SEQ_TO_SN(seq_number), skb->len);
1229
1230         /* From now on, we cannot access info->control */
1231         iwl_mvm_skb_prepare_status(skb, dev_cmd);
1232
1233         /*
1234          * The IV is introduced by the HW for new tx api, and it is not present
1235          * in the skb, hence, don't tell iwl_mvm_mei_tx_copy_to_csme about the
1236          * IV for those devices.
1237          */
1238         if (ieee80211_is_data(fc))
1239                 iwl_mvm_mei_tx_copy_to_csme(mvm, skb,
1240                                             info->control.hw_key &&
1241                                             !iwl_mvm_has_new_tx_api(mvm) ?
1242                                             info->control.hw_key->iv_len : 0);
1243
1244         if (iwl_trans_tx(mvm->trans, skb, dev_cmd, txq_id))
1245                 goto drop_unlock_sta;
1246
1247         if (tid < IWL_MAX_TID_COUNT && !ieee80211_has_morefrags(fc))
1248                 mvmsta->tid_data[tid].seq_number = seq_number + 0x10;
1249
1250         spin_unlock(&mvmsta->lock);
1251
1252         if (iwl_mvm_tx_pkt_queued(mvm, mvmsta,
1253                                   tid == IWL_MAX_TID_COUNT ? 0 : tid))
1254                 goto drop;
1255
1256         return 0;
1257
1258 drop_unlock_sta:
1259         iwl_trans_free_tx_cmd(mvm->trans, dev_cmd);
1260         spin_unlock(&mvmsta->lock);
1261 drop:
1262         IWL_DEBUG_TX(mvm, "TX to [%d|%d] dropped\n", mvmsta->deflink.sta_id,
1263                      tid);
1264         return -1;
1265 }
1266
1267 int iwl_mvm_tx_skb_sta(struct iwl_mvm *mvm, struct sk_buff *skb,
1268                        struct ieee80211_sta *sta)
1269 {
1270         struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
1271         struct ieee80211_tx_info info;
1272         struct sk_buff_head mpdus_skbs;
1273         unsigned int payload_len;
1274         int ret;
1275         struct sk_buff *orig_skb = skb;
1276
1277         if (WARN_ON_ONCE(!mvmsta))
1278                 return -1;
1279
1280         if (WARN_ON_ONCE(mvmsta->deflink.sta_id == IWL_MVM_INVALID_STA))
1281                 return -1;
1282
1283         memcpy(&info, skb->cb, sizeof(info));
1284
1285         if (!skb_is_gso(skb))
1286                 return iwl_mvm_tx_mpdu(mvm, skb, &info, sta);
1287
1288         payload_len = skb_tail_pointer(skb) - skb_transport_header(skb) -
1289                 tcp_hdrlen(skb) + skb->data_len;
1290
1291         if (payload_len <= skb_shinfo(skb)->gso_size)
1292                 return iwl_mvm_tx_mpdu(mvm, skb, &info, sta);
1293
1294         __skb_queue_head_init(&mpdus_skbs);
1295
1296         ret = iwl_mvm_tx_tso(mvm, skb, &info, sta, &mpdus_skbs);
1297         if (ret)
1298                 return ret;
1299
1300         WARN_ON(skb_queue_empty(&mpdus_skbs));
1301
1302         while (!skb_queue_empty(&mpdus_skbs)) {
1303                 skb = __skb_dequeue(&mpdus_skbs);
1304
1305                 ret = iwl_mvm_tx_mpdu(mvm, skb, &info, sta);
1306                 if (ret) {
1307                         /* Free skbs created as part of TSO logic that have not yet been dequeued */
1308                         __skb_queue_purge(&mpdus_skbs);
1309                         /* skb here is not necessarily same as skb that entered this method,
1310                          * so free it explicitly.
1311                          */
1312                         if (skb == orig_skb)
1313                                 ieee80211_free_txskb(mvm->hw, skb);
1314                         else
1315                                 kfree_skb(skb);
1316                         /* there was error, but we consumed skb one way or another, so return 0 */
1317                         return 0;
1318                 }
1319         }
1320
1321         return 0;
1322 }
1323
1324 static void iwl_mvm_check_ratid_empty(struct iwl_mvm *mvm,
1325                                       struct ieee80211_sta *sta, u8 tid)
1326 {
1327         struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
1328         struct iwl_mvm_tid_data *tid_data = &mvmsta->tid_data[tid];
1329         struct ieee80211_vif *vif = mvmsta->vif;
1330         u16 normalized_ssn;
1331
1332         lockdep_assert_held(&mvmsta->lock);
1333
1334         if ((tid_data->state == IWL_AGG_ON ||
1335              tid_data->state == IWL_EMPTYING_HW_QUEUE_DELBA) &&
1336             iwl_mvm_tid_queued(mvm, tid_data) == 0) {
1337                 /*
1338                  * Now that this aggregation or DQA queue is empty tell
1339                  * mac80211 so it knows we no longer have frames buffered for
1340                  * the station on this TID (for the TIM bitmap calculation.)
1341                  */
1342                 ieee80211_sta_set_buffered(sta, tid, false);
1343         }
1344
1345         /*
1346          * In 22000 HW, the next_reclaimed index is only 8 bit, so we'll need
1347          * to align the wrap around of ssn so we compare relevant values.
1348          */
1349         normalized_ssn = tid_data->ssn;
1350         if (mvm->trans->trans_cfg->gen2)
1351                 normalized_ssn &= 0xff;
1352
1353         if (normalized_ssn != tid_data->next_reclaimed)
1354                 return;
1355
1356         switch (tid_data->state) {
1357         case IWL_EMPTYING_HW_QUEUE_ADDBA:
1358                 IWL_DEBUG_TX_QUEUES(mvm,
1359                                     "Can continue addBA flow ssn = next_recl = %d\n",
1360                                     tid_data->next_reclaimed);
1361                 tid_data->state = IWL_AGG_STARTING;
1362                 ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1363                 break;
1364
1365         case IWL_EMPTYING_HW_QUEUE_DELBA:
1366                 IWL_DEBUG_TX_QUEUES(mvm,
1367                                     "Can continue DELBA flow ssn = next_recl = %d\n",
1368                                     tid_data->next_reclaimed);
1369                 tid_data->state = IWL_AGG_OFF;
1370                 ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
1371                 break;
1372
1373         default:
1374                 break;
1375         }
1376 }
1377
1378 #ifdef CONFIG_IWLWIFI_DEBUG
1379 const char *iwl_mvm_get_tx_fail_reason(u32 status)
1380 {
1381 #define TX_STATUS_FAIL(x) case TX_STATUS_FAIL_ ## x: return #x
1382 #define TX_STATUS_POSTPONE(x) case TX_STATUS_POSTPONE_ ## x: return #x
1383
1384         switch (status & TX_STATUS_MSK) {
1385         case TX_STATUS_SUCCESS:
1386                 return "SUCCESS";
1387         TX_STATUS_POSTPONE(DELAY);
1388         TX_STATUS_POSTPONE(FEW_BYTES);
1389         TX_STATUS_POSTPONE(BT_PRIO);
1390         TX_STATUS_POSTPONE(QUIET_PERIOD);
1391         TX_STATUS_POSTPONE(CALC_TTAK);
1392         TX_STATUS_FAIL(INTERNAL_CROSSED_RETRY);
1393         TX_STATUS_FAIL(SHORT_LIMIT);
1394         TX_STATUS_FAIL(LONG_LIMIT);
1395         TX_STATUS_FAIL(UNDERRUN);
1396         TX_STATUS_FAIL(DRAIN_FLOW);
1397         TX_STATUS_FAIL(RFKILL_FLUSH);
1398         TX_STATUS_FAIL(LIFE_EXPIRE);
1399         TX_STATUS_FAIL(DEST_PS);
1400         TX_STATUS_FAIL(HOST_ABORTED);
1401         TX_STATUS_FAIL(BT_RETRY);
1402         TX_STATUS_FAIL(STA_INVALID);
1403         TX_STATUS_FAIL(FRAG_DROPPED);
1404         TX_STATUS_FAIL(TID_DISABLE);
1405         TX_STATUS_FAIL(FIFO_FLUSHED);
1406         TX_STATUS_FAIL(SMALL_CF_POLL);
1407         TX_STATUS_FAIL(FW_DROP);
1408         TX_STATUS_FAIL(STA_COLOR_MISMATCH);
1409         }
1410
1411         return "UNKNOWN";
1412
1413 #undef TX_STATUS_FAIL
1414 #undef TX_STATUS_POSTPONE
1415 }
1416 #endif /* CONFIG_IWLWIFI_DEBUG */
1417
1418 static int iwl_mvm_get_hwrate_chan_width(u32 chan_width)
1419 {
1420         switch (chan_width) {
1421         case RATE_MCS_CHAN_WIDTH_20:
1422                 return 0;
1423         case RATE_MCS_CHAN_WIDTH_40:
1424                 return IEEE80211_TX_RC_40_MHZ_WIDTH;
1425         case RATE_MCS_CHAN_WIDTH_80:
1426                 return IEEE80211_TX_RC_80_MHZ_WIDTH;
1427         case RATE_MCS_CHAN_WIDTH_160:
1428                 return IEEE80211_TX_RC_160_MHZ_WIDTH;
1429         default:
1430                 return 0;
1431         }
1432 }
1433
1434 void iwl_mvm_hwrate_to_tx_rate(u32 rate_n_flags,
1435                                enum nl80211_band band,
1436                                struct ieee80211_tx_rate *r)
1437 {
1438         u32 format = rate_n_flags & RATE_MCS_MOD_TYPE_MSK;
1439         u32 rate = format == RATE_MCS_HT_MSK ?
1440                 RATE_HT_MCS_INDEX(rate_n_flags) :
1441                 rate_n_flags & RATE_MCS_CODE_MSK;
1442
1443         r->flags |=
1444                 iwl_mvm_get_hwrate_chan_width(rate_n_flags &
1445                                               RATE_MCS_CHAN_WIDTH_MSK);
1446
1447         if (rate_n_flags & RATE_MCS_SGI_MSK)
1448                 r->flags |= IEEE80211_TX_RC_SHORT_GI;
1449         if (format ==  RATE_MCS_HT_MSK) {
1450                 r->flags |= IEEE80211_TX_RC_MCS;
1451                 r->idx = rate;
1452         } else if (format ==  RATE_MCS_VHT_MSK) {
1453                 ieee80211_rate_set_vht(r, rate,
1454                                        FIELD_GET(RATE_MCS_NSS_MSK,
1455                                                  rate_n_flags) + 1);
1456                 r->flags |= IEEE80211_TX_RC_VHT_MCS;
1457         } else if (format == RATE_MCS_HE_MSK) {
1458                 /* mac80211 cannot do this without ieee80211_tx_status_ext()
1459                  * but it only matters for radiotap */
1460                 r->idx = 0;
1461         } else {
1462                 r->idx = iwl_mvm_legacy_hw_idx_to_mac80211_idx(rate_n_flags,
1463                                                                band);
1464         }
1465 }
1466
1467 void iwl_mvm_hwrate_to_tx_rate_v1(u32 rate_n_flags,
1468                                   enum nl80211_band band,
1469                                   struct ieee80211_tx_rate *r)
1470 {
1471         if (rate_n_flags & RATE_HT_MCS_GF_MSK)
1472                 r->flags |= IEEE80211_TX_RC_GREEN_FIELD;
1473
1474         r->flags |=
1475                 iwl_mvm_get_hwrate_chan_width(rate_n_flags &
1476                                               RATE_MCS_CHAN_WIDTH_MSK_V1);
1477
1478         if (rate_n_flags & RATE_MCS_SGI_MSK_V1)
1479                 r->flags |= IEEE80211_TX_RC_SHORT_GI;
1480         if (rate_n_flags & RATE_MCS_HT_MSK_V1) {
1481                 r->flags |= IEEE80211_TX_RC_MCS;
1482                 r->idx = rate_n_flags & RATE_HT_MCS_INDEX_MSK_V1;
1483         } else if (rate_n_flags & RATE_MCS_VHT_MSK_V1) {
1484                 ieee80211_rate_set_vht(
1485                         r, rate_n_flags & RATE_VHT_MCS_RATE_CODE_MSK,
1486                         FIELD_GET(RATE_MCS_NSS_MSK, rate_n_flags) + 1);
1487                 r->flags |= IEEE80211_TX_RC_VHT_MCS;
1488         } else {
1489                 r->idx = iwl_mvm_legacy_rate_to_mac80211_idx(rate_n_flags,
1490                                                              band);
1491         }
1492 }
1493
1494 /*
1495  * translate ucode response to mac80211 tx status control values
1496  */
1497 static void iwl_mvm_hwrate_to_tx_status(const struct iwl_fw *fw,
1498                                         u32 rate_n_flags,
1499                                         struct ieee80211_tx_info *info)
1500 {
1501         struct ieee80211_tx_rate *r = &info->status.rates[0];
1502
1503         if (iwl_fw_lookup_notif_ver(fw, LONG_GROUP,
1504                                     TX_CMD, 0) <= 6)
1505                 rate_n_flags = iwl_new_rate_from_v1(rate_n_flags);
1506
1507         info->status.antenna =
1508                 ((rate_n_flags & RATE_MCS_ANT_AB_MSK) >> RATE_MCS_ANT_POS);
1509         iwl_mvm_hwrate_to_tx_rate(rate_n_flags,
1510                                   info->band, r);
1511 }
1512
1513 static void iwl_mvm_tx_status_check_trigger(struct iwl_mvm *mvm,
1514                                             u32 status, __le16 frame_control)
1515 {
1516         struct iwl_fw_dbg_trigger_tlv *trig;
1517         struct iwl_fw_dbg_trigger_tx_status *status_trig;
1518         int i;
1519
1520         if ((status & TX_STATUS_MSK) != TX_STATUS_SUCCESS) {
1521                 enum iwl_fw_ini_time_point tp =
1522                         IWL_FW_INI_TIME_POINT_TX_FAILED;
1523
1524                 if (ieee80211_is_action(frame_control))
1525                         tp = IWL_FW_INI_TIME_POINT_TX_WFD_ACTION_FRAME_FAILED;
1526
1527                 iwl_dbg_tlv_time_point(&mvm->fwrt,
1528                                        tp, NULL);
1529                 return;
1530         }
1531
1532         trig = iwl_fw_dbg_trigger_on(&mvm->fwrt, NULL,
1533                                      FW_DBG_TRIGGER_TX_STATUS);
1534         if (!trig)
1535                 return;
1536
1537         status_trig = (void *)trig->data;
1538
1539         for (i = 0; i < ARRAY_SIZE(status_trig->statuses); i++) {
1540                 /* don't collect on status 0 */
1541                 if (!status_trig->statuses[i].status)
1542                         break;
1543
1544                 if (status_trig->statuses[i].status != (status & TX_STATUS_MSK))
1545                         continue;
1546
1547                 iwl_fw_dbg_collect_trig(&mvm->fwrt, trig,
1548                                         "Tx status %d was received",
1549                                         status & TX_STATUS_MSK);
1550                 break;
1551         }
1552 }
1553
1554 /*
1555  * iwl_mvm_get_scd_ssn - returns the SSN of the SCD
1556  * @tx_resp: the Tx response from the fw (agg or non-agg)
1557  *
1558  * When the fw sends an AMPDU, it fetches the MPDUs one after the other. Since
1559  * it can't know that everything will go well until the end of the AMPDU, it
1560  * can't know in advance the number of MPDUs that will be sent in the current
1561  * batch. This is why it writes the agg Tx response while it fetches the MPDUs.
1562  * Hence, it can't know in advance what the SSN of the SCD will be at the end
1563  * of the batch. This is why the SSN of the SCD is written at the end of the
1564  * whole struct at a variable offset. This function knows how to cope with the
1565  * variable offset and returns the SSN of the SCD.
1566  */
1567 static inline u32 iwl_mvm_get_scd_ssn(struct iwl_mvm *mvm,
1568                                       struct iwl_mvm_tx_resp *tx_resp)
1569 {
1570         return le32_to_cpup((__le32 *)iwl_mvm_get_agg_status(mvm, tx_resp) +
1571                             tx_resp->frame_count) & 0xfff;
1572 }
1573
1574 static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
1575                                      struct iwl_rx_packet *pkt)
1576 {
1577         struct ieee80211_sta *sta;
1578         u16 sequence = le16_to_cpu(pkt->hdr.sequence);
1579         int txq_id = SEQ_TO_QUEUE(sequence);
1580         /* struct iwl_mvm_tx_resp_v3 is almost the same */
1581         struct iwl_mvm_tx_resp *tx_resp = (void *)pkt->data;
1582         int sta_id = IWL_MVM_TX_RES_GET_RA(tx_resp->ra_tid);
1583         int tid = IWL_MVM_TX_RES_GET_TID(tx_resp->ra_tid);
1584         struct agg_tx_status *agg_status =
1585                 iwl_mvm_get_agg_status(mvm, tx_resp);
1586         u32 status = le16_to_cpu(agg_status->status);
1587         u16 ssn = iwl_mvm_get_scd_ssn(mvm, tx_resp);
1588         struct sk_buff_head skbs;
1589         u8 skb_freed = 0;
1590         u8 lq_color;
1591         u16 next_reclaimed, seq_ctl;
1592         bool is_ndp = false;
1593
1594         __skb_queue_head_init(&skbs);
1595
1596         if (iwl_mvm_has_new_tx_api(mvm))
1597                 txq_id = le16_to_cpu(tx_resp->tx_queue);
1598
1599         seq_ctl = le16_to_cpu(tx_resp->seq_ctl);
1600
1601         /* we can free until ssn % q.n_bd not inclusive */
1602         iwl_trans_reclaim(mvm->trans, txq_id, ssn, &skbs);
1603
1604         while (!skb_queue_empty(&skbs)) {
1605                 struct sk_buff *skb = __skb_dequeue(&skbs);
1606                 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1607                 struct ieee80211_hdr *hdr = (void *)skb->data;
1608                 bool flushed = false;
1609
1610                 skb_freed++;
1611
1612                 iwl_trans_free_tx_cmd(mvm->trans, info->driver_data[1]);
1613
1614                 memset(&info->status, 0, sizeof(info->status));
1615                 info->flags &= ~(IEEE80211_TX_STAT_ACK | IEEE80211_TX_STAT_TX_FILTERED);
1616
1617                 /* inform mac80211 about what happened with the frame */
1618                 switch (status & TX_STATUS_MSK) {
1619                 case TX_STATUS_SUCCESS:
1620                 case TX_STATUS_DIRECT_DONE:
1621                         info->flags |= IEEE80211_TX_STAT_ACK;
1622                         break;
1623                 case TX_STATUS_FAIL_FIFO_FLUSHED:
1624                 case TX_STATUS_FAIL_DRAIN_FLOW:
1625                         flushed = true;
1626                         break;
1627                 case TX_STATUS_FAIL_DEST_PS:
1628                         /* the FW should have stopped the queue and not
1629                          * return this status
1630                          */
1631                         IWL_ERR_LIMIT(mvm,
1632                                       "FW reported TX filtered, status=0x%x, FC=0x%x\n",
1633                                       status, le16_to_cpu(hdr->frame_control));
1634                         info->flags |= IEEE80211_TX_STAT_TX_FILTERED;
1635                         break;
1636                 default:
1637                         break;
1638                 }
1639
1640                 if ((status & TX_STATUS_MSK) != TX_STATUS_SUCCESS &&
1641                     ieee80211_is_mgmt(hdr->frame_control))
1642                         iwl_mvm_toggle_tx_ant(mvm, &mvm->mgmt_last_antenna_idx);
1643
1644                 /*
1645                  * If we are freeing multiple frames, mark all the frames
1646                  * but the first one as acked, since they were acknowledged
1647                  * before
1648                  * */
1649                 if (skb_freed > 1)
1650                         info->flags |= IEEE80211_TX_STAT_ACK;
1651
1652                 iwl_mvm_tx_status_check_trigger(mvm, status, hdr->frame_control);
1653
1654                 info->status.rates[0].count = tx_resp->failure_frame + 1;
1655
1656                 iwl_mvm_hwrate_to_tx_status(mvm->fw,
1657                                             le32_to_cpu(tx_resp->initial_rate),
1658                                             info);
1659
1660                 /* Don't assign the converted initial_rate, because driver
1661                  * TLC uses this and doesn't support the new FW rate
1662                  */
1663                 info->status.status_driver_data[1] =
1664                         (void *)(uintptr_t)le32_to_cpu(tx_resp->initial_rate);
1665
1666                 /* Single frame failure in an AMPDU queue => send BAR */
1667                 if (info->flags & IEEE80211_TX_CTL_AMPDU &&
1668                     !(info->flags & IEEE80211_TX_STAT_ACK) &&
1669                     !(info->flags & IEEE80211_TX_STAT_TX_FILTERED) && !flushed)
1670                         info->flags |= IEEE80211_TX_STAT_AMPDU_NO_BACK;
1671                 info->flags &= ~IEEE80211_TX_CTL_AMPDU;
1672
1673                 /* W/A FW bug: seq_ctl is wrong upon failure / BAR frame */
1674                 if (ieee80211_is_back_req(hdr->frame_control))
1675                         seq_ctl = 0;
1676                 else if (status != TX_STATUS_SUCCESS)
1677                         seq_ctl = le16_to_cpu(hdr->seq_ctrl);
1678
1679                 if (unlikely(!seq_ctl)) {
1680                         /*
1681                          * If it is an NDP, we can't update next_reclaim since
1682                          * its sequence control is 0. Note that for that same
1683                          * reason, NDPs are never sent to A-MPDU'able queues
1684                          * so that we can never have more than one freed frame
1685                          * for a single Tx resonse (see WARN_ON below).
1686                          */
1687                         if (ieee80211_is_qos_nullfunc(hdr->frame_control))
1688                                 is_ndp = true;
1689                 }
1690
1691                 /*
1692                  * TODO: this is not accurate if we are freeing more than one
1693                  * packet.
1694                  */
1695                 info->status.tx_time =
1696                         le16_to_cpu(tx_resp->wireless_media_time);
1697                 BUILD_BUG_ON(ARRAY_SIZE(info->status.status_driver_data) < 1);
1698                 lq_color = TX_RES_RATE_TABLE_COL_GET(tx_resp->tlc_info);
1699                 info->status.status_driver_data[0] =
1700                         RS_DRV_DATA_PACK(lq_color, tx_resp->reduced_tpc);
1701
1702                 if (likely(!iwl_mvm_time_sync_frame(mvm, skb, hdr->addr1)))
1703                         ieee80211_tx_status(mvm->hw, skb);
1704         }
1705
1706         /* This is an aggregation queue or might become one, so we use
1707          * the ssn since: ssn = wifi seq_num % 256.
1708          * The seq_ctl is the sequence control of the packet to which
1709          * this Tx response relates. But if there is a hole in the
1710          * bitmap of the BA we received, this Tx response may allow to
1711          * reclaim the hole and all the subsequent packets that were
1712          * already acked. In that case, seq_ctl != ssn, and the next
1713          * packet to be reclaimed will be ssn and not seq_ctl. In that
1714          * case, several packets will be reclaimed even if
1715          * frame_count = 1.
1716          *
1717          * The ssn is the index (% 256) of the latest packet that has
1718          * treated (acked / dropped) + 1.
1719          */
1720         next_reclaimed = ssn;
1721
1722         IWL_DEBUG_TX_REPLY(mvm,
1723                            "TXQ %d status %s (0x%08x)\n",
1724                            txq_id, iwl_mvm_get_tx_fail_reason(status), status);
1725
1726         IWL_DEBUG_TX_REPLY(mvm,
1727                            "\t\t\t\tinitial_rate 0x%x retries %d, idx=%d ssn=%d next_reclaimed=0x%x seq_ctl=0x%x\n",
1728                            le32_to_cpu(tx_resp->initial_rate),
1729                            tx_resp->failure_frame, SEQ_TO_INDEX(sequence),
1730                            ssn, next_reclaimed, seq_ctl);
1731
1732         rcu_read_lock();
1733
1734         sta = rcu_dereference(mvm->fw_id_to_mac_id[sta_id]);
1735         /*
1736          * sta can't be NULL otherwise it'd mean that the sta has been freed in
1737          * the firmware while we still have packets for it in the Tx queues.
1738          */
1739         if (WARN_ON_ONCE(!sta))
1740                 goto out;
1741
1742         if (!IS_ERR(sta)) {
1743                 struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
1744
1745                 iwl_mvm_tx_airtime(mvm, mvmsta,
1746                                    le16_to_cpu(tx_resp->wireless_media_time));
1747
1748                 if ((status & TX_STATUS_MSK) != TX_STATUS_SUCCESS &&
1749                     mvmsta->sta_state < IEEE80211_STA_AUTHORIZED)
1750                         iwl_mvm_toggle_tx_ant(mvm, &mvmsta->tx_ant);
1751
1752                 if (sta->wme && tid != IWL_MGMT_TID) {
1753                         struct iwl_mvm_tid_data *tid_data =
1754                                 &mvmsta->tid_data[tid];
1755                         bool send_eosp_ndp = false;
1756
1757                         spin_lock_bh(&mvmsta->lock);
1758
1759                         if (!is_ndp) {
1760                                 tid_data->next_reclaimed = next_reclaimed;
1761                                 IWL_DEBUG_TX_REPLY(mvm,
1762                                                    "Next reclaimed packet:%d\n",
1763                                                    next_reclaimed);
1764                         } else {
1765                                 IWL_DEBUG_TX_REPLY(mvm,
1766                                                    "NDP - don't update next_reclaimed\n");
1767                         }
1768
1769                         iwl_mvm_check_ratid_empty(mvm, sta, tid);
1770
1771                         if (mvmsta->sleep_tx_count) {
1772                                 mvmsta->sleep_tx_count--;
1773                                 if (mvmsta->sleep_tx_count &&
1774                                     !iwl_mvm_tid_queued(mvm, tid_data)) {
1775                                         /*
1776                                          * The number of frames in the queue
1777                                          * dropped to 0 even if we sent less
1778                                          * frames than we thought we had on the
1779                                          * Tx queue.
1780                                          * This means we had holes in the BA
1781                                          * window that we just filled, ask
1782                                          * mac80211 to send EOSP since the
1783                                          * firmware won't know how to do that.
1784                                          * Send NDP and the firmware will send
1785                                          * EOSP notification that will trigger
1786                                          * a call to ieee80211_sta_eosp().
1787                                          */
1788                                         send_eosp_ndp = true;
1789                                 }
1790                         }
1791
1792                         spin_unlock_bh(&mvmsta->lock);
1793                         if (send_eosp_ndp) {
1794                                 iwl_mvm_sta_modify_sleep_tx_count(mvm, sta,
1795                                         IEEE80211_FRAME_RELEASE_UAPSD,
1796                                         1, tid, false, false);
1797                                 mvmsta->sleep_tx_count = 0;
1798                                 ieee80211_send_eosp_nullfunc(sta, tid);
1799                         }
1800                 }
1801
1802                 if (mvmsta->next_status_eosp) {
1803                         mvmsta->next_status_eosp = false;
1804                         ieee80211_sta_eosp(sta);
1805                 }
1806         }
1807 out:
1808         rcu_read_unlock();
1809 }
1810
1811 #ifdef CONFIG_IWLWIFI_DEBUG
1812 #define AGG_TX_STATE_(x) case AGG_TX_STATE_ ## x: return #x
1813 static const char *iwl_get_agg_tx_status(u16 status)
1814 {
1815         switch (status & AGG_TX_STATE_STATUS_MSK) {
1816         AGG_TX_STATE_(TRANSMITTED);
1817         AGG_TX_STATE_(UNDERRUN);
1818         AGG_TX_STATE_(BT_PRIO);
1819         AGG_TX_STATE_(FEW_BYTES);
1820         AGG_TX_STATE_(ABORT);
1821         AGG_TX_STATE_(TX_ON_AIR_DROP);
1822         AGG_TX_STATE_(LAST_SENT_TRY_CNT);
1823         AGG_TX_STATE_(LAST_SENT_BT_KILL);
1824         AGG_TX_STATE_(SCD_QUERY);
1825         AGG_TX_STATE_(TEST_BAD_CRC32);
1826         AGG_TX_STATE_(RESPONSE);
1827         AGG_TX_STATE_(DUMP_TX);
1828         AGG_TX_STATE_(DELAY_TX);
1829         }
1830
1831         return "UNKNOWN";
1832 }
1833
1834 static void iwl_mvm_rx_tx_cmd_agg_dbg(struct iwl_mvm *mvm,
1835                                       struct iwl_rx_packet *pkt)
1836 {
1837         struct iwl_mvm_tx_resp *tx_resp = (void *)pkt->data;
1838         struct agg_tx_status *frame_status =
1839                 iwl_mvm_get_agg_status(mvm, tx_resp);
1840         int i;
1841         bool tirgger_timepoint = false;
1842
1843         for (i = 0; i < tx_resp->frame_count; i++) {
1844                 u16 fstatus = le16_to_cpu(frame_status[i].status);
1845                 /* In case one frame wasn't transmitted trigger time point */
1846                 tirgger_timepoint |= ((fstatus & AGG_TX_STATE_STATUS_MSK) !=
1847                                       AGG_TX_STATE_TRANSMITTED);
1848                 IWL_DEBUG_TX_REPLY(mvm,
1849                                    "status %s (0x%04x), try-count (%d) seq (0x%x)\n",
1850                                    iwl_get_agg_tx_status(fstatus),
1851                                    fstatus & AGG_TX_STATE_STATUS_MSK,
1852                                    (fstatus & AGG_TX_STATE_TRY_CNT_MSK) >>
1853                                         AGG_TX_STATE_TRY_CNT_POS,
1854                                    le16_to_cpu(frame_status[i].sequence));
1855         }
1856
1857         if (tirgger_timepoint)
1858                 iwl_dbg_tlv_time_point(&mvm->fwrt,
1859                                        IWL_FW_INI_TIME_POINT_TX_FAILED, NULL);
1860
1861 }
1862 #else
1863 static void iwl_mvm_rx_tx_cmd_agg_dbg(struct iwl_mvm *mvm,
1864                                       struct iwl_rx_packet *pkt)
1865 {}
1866 #endif /* CONFIG_IWLWIFI_DEBUG */
1867
1868 static void iwl_mvm_rx_tx_cmd_agg(struct iwl_mvm *mvm,
1869                                   struct iwl_rx_packet *pkt)
1870 {
1871         struct iwl_mvm_tx_resp *tx_resp = (void *)pkt->data;
1872         int sta_id = IWL_MVM_TX_RES_GET_RA(tx_resp->ra_tid);
1873         int tid = IWL_MVM_TX_RES_GET_TID(tx_resp->ra_tid);
1874         u16 sequence = le16_to_cpu(pkt->hdr.sequence);
1875         struct iwl_mvm_sta *mvmsta;
1876         int queue = SEQ_TO_QUEUE(sequence);
1877         struct ieee80211_sta *sta;
1878
1879         if (WARN_ON_ONCE(queue < IWL_MVM_DQA_MIN_DATA_QUEUE &&
1880                          (queue != IWL_MVM_DQA_BSS_CLIENT_QUEUE)))
1881                 return;
1882
1883         iwl_mvm_rx_tx_cmd_agg_dbg(mvm, pkt);
1884
1885         rcu_read_lock();
1886
1887         mvmsta = iwl_mvm_sta_from_staid_rcu(mvm, sta_id);
1888
1889         sta = rcu_dereference(mvm->fw_id_to_mac_id[sta_id]);
1890         if (WARN_ON_ONCE(IS_ERR_OR_NULL(sta) || !sta->wme)) {
1891                 rcu_read_unlock();
1892                 return;
1893         }
1894
1895         if (!WARN_ON_ONCE(!mvmsta)) {
1896                 mvmsta->tid_data[tid].rate_n_flags =
1897                         le32_to_cpu(tx_resp->initial_rate);
1898                 mvmsta->tid_data[tid].tx_time =
1899                         le16_to_cpu(tx_resp->wireless_media_time);
1900                 mvmsta->tid_data[tid].lq_color =
1901                         TX_RES_RATE_TABLE_COL_GET(tx_resp->tlc_info);
1902                 iwl_mvm_tx_airtime(mvm, mvmsta,
1903                                    le16_to_cpu(tx_resp->wireless_media_time));
1904         }
1905
1906         rcu_read_unlock();
1907 }
1908
1909 void iwl_mvm_rx_tx_cmd(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb)
1910 {
1911         struct iwl_rx_packet *pkt = rxb_addr(rxb);
1912         struct iwl_mvm_tx_resp *tx_resp = (void *)pkt->data;
1913
1914         if (tx_resp->frame_count == 1)
1915                 iwl_mvm_rx_tx_cmd_single(mvm, pkt);
1916         else
1917                 iwl_mvm_rx_tx_cmd_agg(mvm, pkt);
1918 }
1919
1920 static void iwl_mvm_tx_reclaim(struct iwl_mvm *mvm, int sta_id, int tid,
1921                                int txq, int index,
1922                                struct ieee80211_tx_info *tx_info, u32 rate,
1923                                bool is_flush)
1924 {
1925         struct sk_buff_head reclaimed_skbs;
1926         struct iwl_mvm_tid_data *tid_data = NULL;
1927         struct ieee80211_sta *sta;
1928         struct iwl_mvm_sta *mvmsta = NULL;
1929         struct sk_buff *skb;
1930         int freed;
1931
1932         if (WARN_ONCE(sta_id >= mvm->fw->ucode_capa.num_stations ||
1933                       tid > IWL_MAX_TID_COUNT,
1934                       "sta_id %d tid %d", sta_id, tid))
1935                 return;
1936
1937         rcu_read_lock();
1938
1939         sta = rcu_dereference(mvm->fw_id_to_mac_id[sta_id]);
1940
1941         /* Reclaiming frames for a station that has been deleted ? */
1942         if (WARN_ON_ONCE(!sta)) {
1943                 rcu_read_unlock();
1944                 return;
1945         }
1946
1947         __skb_queue_head_init(&reclaimed_skbs);
1948
1949         /*
1950          * Release all TFDs before the SSN, i.e. all TFDs in front of
1951          * block-ack window (we assume that they've been successfully
1952          * transmitted ... if not, it's too late anyway).
1953          */
1954         iwl_trans_reclaim(mvm->trans, txq, index, &reclaimed_skbs);
1955
1956         skb_queue_walk(&reclaimed_skbs, skb) {
1957                 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
1958
1959                 iwl_trans_free_tx_cmd(mvm->trans, info->driver_data[1]);
1960
1961                 memset(&info->status, 0, sizeof(info->status));
1962                 /* Packet was transmitted successfully, failures come as single
1963                  * frames because before failing a frame the firmware transmits
1964                  * it without aggregation at least once.
1965                  */
1966                 if (!is_flush)
1967                         info->flags |= IEEE80211_TX_STAT_ACK;
1968                 else
1969                         info->flags &= ~IEEE80211_TX_STAT_ACK;
1970         }
1971
1972         /*
1973          * It's possible to get a BA response after invalidating the rcu (rcu is
1974          * invalidated in order to prevent new Tx from being sent, but there may
1975          * be some frames already in-flight).
1976          * In this case we just want to reclaim, and could skip all the
1977          * sta-dependent stuff since it's in the middle of being removed
1978          * anyways.
1979          */
1980         if (IS_ERR(sta))
1981                 goto out;
1982
1983         mvmsta = iwl_mvm_sta_from_mac80211(sta);
1984         tid_data = &mvmsta->tid_data[tid];
1985
1986         if (tid_data->txq_id != txq) {
1987                 IWL_ERR(mvm,
1988                         "invalid reclaim request: Q %d, tid %d\n",
1989                         tid_data->txq_id, tid);
1990                 rcu_read_unlock();
1991                 return;
1992         }
1993
1994         spin_lock_bh(&mvmsta->lock);
1995
1996         tid_data->next_reclaimed = index;
1997
1998         iwl_mvm_check_ratid_empty(mvm, sta, tid);
1999
2000         freed = 0;
2001
2002         /* pack lq color from tid_data along the reduced txp */
2003         tx_info->status.status_driver_data[0] =
2004                 RS_DRV_DATA_PACK(tid_data->lq_color,
2005                                  tx_info->status.status_driver_data[0]);
2006         tx_info->status.status_driver_data[1] = (void *)(uintptr_t)rate;
2007
2008         skb_queue_walk(&reclaimed_skbs, skb) {
2009                 struct ieee80211_hdr *hdr = (void *)skb->data;
2010                 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
2011
2012                 if (!is_flush) {
2013                         if (ieee80211_is_data_qos(hdr->frame_control))
2014                                 freed++;
2015                         else
2016                                 WARN_ON_ONCE(tid != IWL_MAX_TID_COUNT);
2017                 }
2018
2019                 /* this is the first skb we deliver in this batch */
2020                 /* put the rate scaling data there */
2021                 if (freed == 1) {
2022                         info->flags |= IEEE80211_TX_STAT_AMPDU;
2023                         memcpy(&info->status, &tx_info->status,
2024                                sizeof(tx_info->status));
2025                         iwl_mvm_hwrate_to_tx_status(mvm->fw, rate, info);
2026                 }
2027         }
2028
2029         spin_unlock_bh(&mvmsta->lock);
2030
2031         /* We got a BA notif with 0 acked or scd_ssn didn't progress which is
2032          * possible (i.e. first MPDU in the aggregation wasn't acked)
2033          * Still it's important to update RS about sent vs. acked.
2034          */
2035         if (!is_flush && skb_queue_empty(&reclaimed_skbs) &&
2036             !iwl_mvm_has_tlc_offload(mvm)) {
2037                 struct ieee80211_chanctx_conf *chanctx_conf = NULL;
2038
2039                 /* no TLC offload, so non-MLD mode */
2040                 if (mvmsta->vif)
2041                         chanctx_conf =
2042                                 rcu_dereference(mvmsta->vif->bss_conf.chanctx_conf);
2043
2044                 if (WARN_ON_ONCE(!chanctx_conf))
2045                         goto out;
2046
2047                 tx_info->band = chanctx_conf->def.chan->band;
2048                 iwl_mvm_hwrate_to_tx_status(mvm->fw, rate, tx_info);
2049
2050                 IWL_DEBUG_TX_REPLY(mvm, "No reclaim. Update rs directly\n");
2051                 iwl_mvm_rs_tx_status(mvm, sta, tid, tx_info, false);
2052         }
2053
2054 out:
2055         rcu_read_unlock();
2056
2057         while (!skb_queue_empty(&reclaimed_skbs)) {
2058                 skb = __skb_dequeue(&reclaimed_skbs);
2059                 ieee80211_tx_status(mvm->hw, skb);
2060         }
2061 }
2062
2063 void iwl_mvm_rx_ba_notif(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb)
2064 {
2065         struct iwl_rx_packet *pkt = rxb_addr(rxb);
2066         unsigned int pkt_len = iwl_rx_packet_payload_len(pkt);
2067         int sta_id, tid, txq, index;
2068         struct ieee80211_tx_info ba_info = {};
2069         struct iwl_mvm_ba_notif *ba_notif;
2070         struct iwl_mvm_tid_data *tid_data;
2071         struct iwl_mvm_sta *mvmsta;
2072
2073         ba_info.flags = IEEE80211_TX_STAT_AMPDU;
2074
2075         if (iwl_mvm_has_new_tx_api(mvm)) {
2076                 struct iwl_mvm_compressed_ba_notif *ba_res =
2077                         (void *)pkt->data;
2078                 u8 lq_color = TX_RES_RATE_TABLE_COL_GET(ba_res->tlc_rate_info);
2079                 u16 tfd_cnt;
2080                 int i;
2081
2082                 if (IWL_FW_CHECK(mvm, sizeof(*ba_res) > pkt_len,
2083                                  "short BA notification (%d)\n", pkt_len))
2084                         return;
2085
2086                 sta_id = ba_res->sta_id;
2087                 ba_info.status.ampdu_ack_len = (u8)le16_to_cpu(ba_res->done);
2088                 ba_info.status.ampdu_len = (u8)le16_to_cpu(ba_res->txed);
2089                 ba_info.status.tx_time =
2090                         (u16)le32_to_cpu(ba_res->wireless_time);
2091                 ba_info.status.status_driver_data[0] =
2092                         (void *)(uintptr_t)ba_res->reduced_txp;
2093
2094                 tfd_cnt = le16_to_cpu(ba_res->tfd_cnt);
2095                 if (!tfd_cnt)
2096                         return;
2097
2098                 if (IWL_FW_CHECK(mvm,
2099                                  struct_size(ba_res, tfd, tfd_cnt) > pkt_len,
2100                                  "short BA notification (tfds:%d, size:%d)\n",
2101                                  tfd_cnt, pkt_len))
2102                         return;
2103
2104                 rcu_read_lock();
2105
2106                 mvmsta = iwl_mvm_sta_from_staid_rcu(mvm, sta_id);
2107                 /*
2108                  * It's possible to get a BA response after invalidating the rcu
2109                  * (rcu is invalidated in order to prevent new Tx from being
2110                  * sent, but there may be some frames already in-flight).
2111                  * In this case we just want to reclaim, and could skip all the
2112                  * sta-dependent stuff since it's in the middle of being removed
2113                  * anyways.
2114                  */
2115
2116                 /* Free per TID */
2117                 for (i = 0; i < tfd_cnt; i++) {
2118                         struct iwl_mvm_compressed_ba_tfd *ba_tfd =
2119                                 &ba_res->tfd[i];
2120
2121                         tid = ba_tfd->tid;
2122                         if (tid == IWL_MGMT_TID)
2123                                 tid = IWL_MAX_TID_COUNT;
2124
2125                         if (mvmsta)
2126                                 mvmsta->tid_data[i].lq_color = lq_color;
2127
2128                         iwl_mvm_tx_reclaim(mvm, sta_id, tid,
2129                                            (int)(le16_to_cpu(ba_tfd->q_num)),
2130                                            le16_to_cpu(ba_tfd->tfd_index),
2131                                            &ba_info,
2132                                            le32_to_cpu(ba_res->tx_rate), false);
2133                 }
2134
2135                 if (mvmsta)
2136                         iwl_mvm_tx_airtime(mvm, mvmsta,
2137                                            le32_to_cpu(ba_res->wireless_time));
2138                 rcu_read_unlock();
2139
2140                 IWL_DEBUG_TX_REPLY(mvm,
2141                                    "BA_NOTIFICATION Received from sta_id = %d, flags %x, sent:%d, acked:%d\n",
2142                                    sta_id, le32_to_cpu(ba_res->flags),
2143                                    le16_to_cpu(ba_res->txed),
2144                                    le16_to_cpu(ba_res->done));
2145                 return;
2146         }
2147
2148         ba_notif = (void *)pkt->data;
2149         sta_id = ba_notif->sta_id;
2150         tid = ba_notif->tid;
2151         /* "flow" corresponds to Tx queue */
2152         txq = le16_to_cpu(ba_notif->scd_flow);
2153         /* "ssn" is start of block-ack Tx window, corresponds to index
2154          * (in Tx queue's circular buffer) of first TFD/frame in window */
2155         index = le16_to_cpu(ba_notif->scd_ssn);
2156
2157         rcu_read_lock();
2158         mvmsta = iwl_mvm_sta_from_staid_rcu(mvm, sta_id);
2159         if (IWL_FW_CHECK(mvm, !mvmsta,
2160                          "invalid STA ID %d in BA notif\n",
2161                          sta_id)) {
2162                 rcu_read_unlock();
2163                 return;
2164         }
2165
2166         tid_data = &mvmsta->tid_data[tid];
2167
2168         ba_info.status.ampdu_ack_len = ba_notif->txed_2_done;
2169         ba_info.status.ampdu_len = ba_notif->txed;
2170         ba_info.status.tx_time = tid_data->tx_time;
2171         ba_info.status.status_driver_data[0] =
2172                 (void *)(uintptr_t)ba_notif->reduced_txp;
2173
2174         rcu_read_unlock();
2175
2176         iwl_mvm_tx_reclaim(mvm, sta_id, tid, txq, index, &ba_info,
2177                            tid_data->rate_n_flags, false);
2178
2179         IWL_DEBUG_TX_REPLY(mvm,
2180                            "BA_NOTIFICATION Received from %pM, sta_id = %d\n",
2181                            ba_notif->sta_addr, ba_notif->sta_id);
2182
2183         IWL_DEBUG_TX_REPLY(mvm,
2184                            "TID = %d, SeqCtl = %d, bitmap = 0x%llx, scd_flow = %d, scd_ssn = %d sent:%d, acked:%d\n",
2185                            ba_notif->tid, le16_to_cpu(ba_notif->seq_ctl),
2186                            le64_to_cpu(ba_notif->bitmap), txq, index,
2187                            ba_notif->txed, ba_notif->txed_2_done);
2188
2189         IWL_DEBUG_TX_REPLY(mvm, "reduced txp from ba notif %d\n",
2190                            ba_notif->reduced_txp);
2191 }
2192
2193 /*
2194  * Note that there are transports that buffer frames before they reach
2195  * the firmware. This means that after flush_tx_path is called, the
2196  * queue might not be empty. The race-free way to handle this is to:
2197  * 1) set the station as draining
2198  * 2) flush the Tx path
2199  * 3) wait for the transport queues to be empty
2200  */
2201 int iwl_mvm_flush_tx_path(struct iwl_mvm *mvm, u32 tfd_msk)
2202 {
2203         int ret;
2204         struct iwl_tx_path_flush_cmd_v1 flush_cmd = {
2205                 .queues_ctl = cpu_to_le32(tfd_msk),
2206                 .flush_ctl = cpu_to_le16(DUMP_TX_FIFO_FLUSH),
2207         };
2208
2209         WARN_ON(iwl_mvm_has_new_tx_api(mvm));
2210         ret = iwl_mvm_send_cmd_pdu(mvm, TXPATH_FLUSH, 0,
2211                                    sizeof(flush_cmd), &flush_cmd);
2212         if (ret)
2213                 IWL_ERR(mvm, "Failed to send flush command (%d)\n", ret);
2214         return ret;
2215 }
2216
2217 int iwl_mvm_flush_sta_tids(struct iwl_mvm *mvm, u32 sta_id, u16 tids)
2218 {
2219         int ret;
2220         struct iwl_tx_path_flush_cmd_rsp *rsp;
2221         struct iwl_tx_path_flush_cmd flush_cmd = {
2222                 .sta_id = cpu_to_le32(sta_id),
2223                 .tid_mask = cpu_to_le16(tids),
2224         };
2225
2226         struct iwl_host_cmd cmd = {
2227                 .id = TXPATH_FLUSH,
2228                 .len = { sizeof(flush_cmd), },
2229                 .data = { &flush_cmd, },
2230         };
2231
2232         WARN_ON(!iwl_mvm_has_new_tx_api(mvm));
2233
2234         if (iwl_fw_lookup_notif_ver(mvm->fw, LONG_GROUP, TXPATH_FLUSH, 0) > 0)
2235                 cmd.flags |= CMD_WANT_SKB;
2236
2237         IWL_DEBUG_TX_QUEUES(mvm, "flush for sta id %d tid mask 0x%x\n",
2238                             sta_id, tids);
2239
2240         ret = iwl_mvm_send_cmd(mvm, &cmd);
2241
2242         if (ret) {
2243                 IWL_ERR(mvm, "Failed to send flush command (%d)\n", ret);
2244                 return ret;
2245         }
2246
2247         if (cmd.flags & CMD_WANT_SKB) {
2248                 int i;
2249                 int num_flushed_queues;
2250
2251                 if (WARN_ON_ONCE(iwl_rx_packet_payload_len(cmd.resp_pkt) != sizeof(*rsp))) {
2252                         ret = -EIO;
2253                         goto free_rsp;
2254                 }
2255
2256                 rsp = (void *)cmd.resp_pkt->data;
2257
2258                 if (WARN_ONCE(le16_to_cpu(rsp->sta_id) != sta_id,
2259                               "sta_id %d != rsp_sta_id %d",
2260                               sta_id, le16_to_cpu(rsp->sta_id))) {
2261                         ret = -EIO;
2262                         goto free_rsp;
2263                 }
2264
2265                 num_flushed_queues = le16_to_cpu(rsp->num_flushed_queues);
2266                 if (WARN_ONCE(num_flushed_queues > IWL_TX_FLUSH_QUEUE_RSP,
2267                               "num_flushed_queues %d", num_flushed_queues)) {
2268                         ret = -EIO;
2269                         goto free_rsp;
2270                 }
2271
2272                 for (i = 0; i < num_flushed_queues; i++) {
2273                         struct ieee80211_tx_info tx_info = {};
2274                         struct iwl_flush_queue_info *queue_info = &rsp->queues[i];
2275                         int tid = le16_to_cpu(queue_info->tid);
2276                         int read_before = le16_to_cpu(queue_info->read_before_flush);
2277                         int read_after = le16_to_cpu(queue_info->read_after_flush);
2278                         int queue_num = le16_to_cpu(queue_info->queue_num);
2279
2280                         if (tid == IWL_MGMT_TID)
2281                                 tid = IWL_MAX_TID_COUNT;
2282
2283                         IWL_DEBUG_TX_QUEUES(mvm,
2284                                             "tid %d queue_id %d read-before %d read-after %d\n",
2285                                             tid, queue_num, read_before, read_after);
2286
2287                         iwl_mvm_tx_reclaim(mvm, sta_id, tid, queue_num, read_after,
2288                                            &tx_info, 0, true);
2289                 }
2290 free_rsp:
2291                 iwl_free_resp(&cmd);
2292         }
2293         return ret;
2294 }
2295
2296 int iwl_mvm_flush_sta(struct iwl_mvm *mvm, void *sta, bool internal)
2297 {
2298         u32 sta_id, tfd_queue_msk;
2299
2300         if (internal) {
2301                 struct iwl_mvm_int_sta *int_sta = sta;
2302
2303                 sta_id = int_sta->sta_id;
2304                 tfd_queue_msk = int_sta->tfd_queue_msk;
2305         } else {
2306                 struct iwl_mvm_sta *mvm_sta = sta;
2307
2308                 sta_id = mvm_sta->deflink.sta_id;
2309                 tfd_queue_msk = mvm_sta->tfd_queue_msk;
2310         }
2311
2312         if (iwl_mvm_has_new_tx_api(mvm))
2313                 return iwl_mvm_flush_sta_tids(mvm, sta_id, 0xffff);
2314
2315         return iwl_mvm_flush_tx_path(mvm, tfd_queue_msk);
2316 }