linux/drivers/net/wireless/iwlwifi/mvm/tx.c
<<
>>
Prefs
   1/******************************************************************************
   2 *
   3 * This file is provided under a dual BSD/GPLv2 license.  When using or
   4 * redistributing this file, you may do so under either license.
   5 *
   6 * GPL LICENSE SUMMARY
   7 *
   8 * Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved.
   9 *
  10 * This program is free software; you can redistribute it and/or modify
  11 * it under the terms of version 2 of the GNU General Public License as
  12 * published by the Free Software Foundation.
  13 *
  14 * This program is distributed in the hope that it will be useful, but
  15 * WITHOUT ANY WARRANTY; without even the implied warranty of
  16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  17 * General Public License for more details.
  18 *
  19 * You should have received a copy of the GNU General Public License
  20 * along with this program; if not, write to the Free Software
  21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
  22 * USA
  23 *
  24 * The full GNU General Public License is included in this distribution
  25 * in the file called COPYING.
  26 *
  27 * Contact Information:
  28 *  Intel Linux Wireless <ilw@linux.intel.com>
  29 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
  30 *
  31 * BSD LICENSE
  32 *
  33 * Copyright(c) 2012 - 2013 Intel Corporation. All rights reserved.
  34 * All rights reserved.
  35 *
  36 * Redistribution and use in source and binary forms, with or without
  37 * modification, are permitted provided that the following conditions
  38 * are met:
  39 *
  40 *  * Redistributions of source code must retain the above copyright
  41 *    notice, this list of conditions and the following disclaimer.
  42 *  * Redistributions in binary form must reproduce the above copyright
  43 *    notice, this list of conditions and the following disclaimer in
  44 *    the documentation and/or other materials provided with the
  45 *    distribution.
  46 *  * Neither the name Intel Corporation nor the names of its
  47 *    contributors may be used to endorse or promote products derived
  48 *    from this software without specific prior written permission.
  49 *
  50 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  51 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  52 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  53 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  54 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  55 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  56 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  57 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  58 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  59 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  60 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  61 *
  62 *****************************************************************************/
  63#include <linux/ieee80211.h>
  64#include <linux/etherdevice.h>
  65
  66#include "iwl-trans.h"
  67#include "iwl-eeprom-parse.h"
  68#include "mvm.h"
  69#include "sta.h"
  70
  71/*
  72 * Sets most of the Tx cmd's fields
  73 */
  74static void iwl_mvm_set_tx_cmd(struct iwl_mvm *mvm, struct sk_buff *skb,
  75                               struct iwl_tx_cmd *tx_cmd,
  76                               struct ieee80211_tx_info *info, u8 sta_id)
  77{
  78        struct ieee80211_hdr *hdr = (void *)skb->data;
  79        __le16 fc = hdr->frame_control;
  80        u32 tx_flags = le32_to_cpu(tx_cmd->tx_flags);
  81        u32 len = skb->len + FCS_LEN;
  82
  83        if (!(info->flags & IEEE80211_TX_CTL_NO_ACK))
  84                tx_flags |= TX_CMD_FLG_ACK;
  85        else
  86                tx_flags &= ~TX_CMD_FLG_ACK;
  87
  88        if (ieee80211_is_probe_resp(fc))
  89                tx_flags |= TX_CMD_FLG_TSF;
  90        else if (ieee80211_is_back_req(fc))
  91                tx_flags |= TX_CMD_FLG_ACK | TX_CMD_FLG_BAR;
  92
  93        /* High prio packet (wrt. BT coex) if it is EAPOL, MCAST or MGMT */
  94        if (info->band == IEEE80211_BAND_2GHZ &&
  95            (info->control.flags & IEEE80211_TX_CTRL_PORT_CTRL_PROTO ||
  96             is_multicast_ether_addr(hdr->addr1) ||
  97             ieee80211_is_back_req(fc) || ieee80211_is_mgmt(fc)))
  98                tx_flags |= TX_CMD_FLG_BT_DIS;
  99
 100        if (ieee80211_has_morefrags(fc))
 101                tx_flags |= TX_CMD_FLG_MORE_FRAG;
 102
 103        if (ieee80211_is_data_qos(fc)) {
 104                u8 *qc = ieee80211_get_qos_ctl(hdr);
 105                tx_cmd->tid_tspec = qc[0] & 0xf;
 106                tx_flags &= ~TX_CMD_FLG_SEQ_CTL;
 107        } else {
 108                tx_cmd->tid_tspec = IWL_TID_NON_QOS;
 109                if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ)
 110                        tx_flags |= TX_CMD_FLG_SEQ_CTL;
 111                else
 112                        tx_flags &= ~TX_CMD_FLG_SEQ_CTL;
 113        }
 114
 115        if (ieee80211_is_mgmt(fc)) {
 116                if (ieee80211_is_assoc_req(fc) || ieee80211_is_reassoc_req(fc))
 117                        tx_cmd->pm_frame_timeout = cpu_to_le16(3);
 118                else
 119                        tx_cmd->pm_frame_timeout = cpu_to_le16(2);
 120
 121                /* The spec allows Action frames in A-MPDU, we don't support
 122                 * it
 123                 */
 124                WARN_ON_ONCE(info->flags & IEEE80211_TX_CTL_AMPDU);
 125        } else if (skb->protocol == cpu_to_be16(ETH_P_PAE)) {
 126                tx_cmd->pm_frame_timeout = cpu_to_le16(2);
 127        } else {
 128                tx_cmd->pm_frame_timeout = 0;
 129        }
 130
 131        if (info->flags & IEEE80211_TX_CTL_AMPDU)
 132                tx_flags |= TX_CMD_FLG_PROT_REQUIRE;
 133
 134        if (ieee80211_is_data(fc) && len > mvm->rts_threshold &&
 135            !is_multicast_ether_addr(ieee80211_get_DA(hdr)))
 136                tx_flags |= TX_CMD_FLG_PROT_REQUIRE;
 137
 138        tx_cmd->driver_txop = 0;
 139        tx_cmd->tx_flags = cpu_to_le32(tx_flags);
 140        /* Total # bytes to be transmitted */
 141        tx_cmd->len = cpu_to_le16((u16)skb->len);
 142        tx_cmd->next_frame_len = 0;
 143        tx_cmd->life_time = cpu_to_le32(TX_CMD_LIFE_TIME_INFINITE);
 144        tx_cmd->sta_id = sta_id;
 145}
 146
 147/*
 148 * Sets the fields in the Tx cmd that are rate related
 149 */
 150static void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm,
 151                                    struct iwl_tx_cmd *tx_cmd,
 152                                    struct ieee80211_tx_info *info,
 153                                    struct ieee80211_sta *sta,
 154                                    __le16 fc)
 155{
 156        u32 rate_flags;
 157        int rate_idx;
 158        u8 rate_plcp;
 159
 160        /* Set retry limit on RTS packets */
 161        tx_cmd->rts_retry_limit = IWL_RTS_DFAULT_RETRY_LIMIT;
 162
 163        /* Set retry limit on DATA packets and Probe Responses*/
 164        if (ieee80211_is_probe_resp(fc)) {
 165                tx_cmd->data_retry_limit = IWL_MGMT_DFAULT_RETRY_LIMIT;
 166                tx_cmd->rts_retry_limit =
 167                        min(tx_cmd->data_retry_limit, tx_cmd->rts_retry_limit);
 168        } else if (ieee80211_is_back_req(fc)) {
 169                tx_cmd->data_retry_limit = IWL_BAR_DFAULT_RETRY_LIMIT;
 170        } else {
 171                tx_cmd->data_retry_limit = IWL_DEFAULT_TX_RETRY;
 172        }
 173
 174        /*
 175         * for data packets, rate info comes from the table inside the fw. This
 176         * table is controlled by LINK_QUALITY commands
 177         */
 178
 179        if (ieee80211_is_data(fc) && sta) {
 180                tx_cmd->initial_rate_index = 0;
 181                tx_cmd->tx_flags |= cpu_to_le32(TX_CMD_FLG_STA_RATE);
 182                return;
 183        } else if (ieee80211_is_back_req(fc)) {
 184                tx_cmd->tx_flags |=
 185                        cpu_to_le32(TX_CMD_FLG_ACK | TX_CMD_FLG_BAR);
 186        }
 187
 188        /* HT rate doesn't make sense for a non data frame */
 189        WARN_ONCE(info->control.rates[0].flags & IEEE80211_TX_RC_MCS,
 190                  "Got an HT rate for a non data frame 0x%x\n",
 191                  info->control.rates[0].flags);
 192
 193        rate_idx = info->control.rates[0].idx;
 194        /* if the rate isn't a well known legacy rate, take the lowest one */
 195        if (rate_idx < 0 || rate_idx > IWL_RATE_COUNT_LEGACY)
 196                rate_idx = rate_lowest_index(
 197                                &mvm->nvm_data->bands[info->band], sta);
 198
 199        /* For 5 GHZ band, remap mac80211 rate indices into driver indices */
 200        if (info->band == IEEE80211_BAND_5GHZ)
 201                rate_idx += IWL_FIRST_OFDM_RATE;
 202
 203        /* For 2.4 GHZ band, check that there is no need to remap */
 204        BUILD_BUG_ON(IWL_FIRST_CCK_RATE != 0);
 205
 206        /* Get PLCP rate for tx_cmd->rate_n_flags */
 207        rate_plcp = iwl_mvm_mac80211_idx_to_hwrate(rate_idx);
 208
 209        mvm->mgmt_last_antenna_idx =
 210                iwl_mvm_next_antenna(mvm, iwl_fw_valid_tx_ant(mvm->fw),
 211                                     mvm->mgmt_last_antenna_idx);
 212        rate_flags = BIT(mvm->mgmt_last_antenna_idx) << RATE_MCS_ANT_POS;
 213
 214        /* Set CCK flag as needed */
 215        if ((rate_idx >= IWL_FIRST_CCK_RATE) && (rate_idx <= IWL_LAST_CCK_RATE))
 216                rate_flags |= RATE_MCS_CCK_MSK;
 217
 218        /* Set the rate in the TX cmd */
 219        tx_cmd->rate_n_flags = cpu_to_le32((u32)rate_plcp | rate_flags);
 220}
 221
 222/*
 223 * Sets the fields in the Tx cmd that are crypto related
 224 */
 225static void iwl_mvm_set_tx_cmd_crypto(struct iwl_mvm *mvm,
 226                                      struct ieee80211_tx_info *info,
 227                                      struct iwl_tx_cmd *tx_cmd,
 228                                      struct sk_buff *skb_frag)
 229{
 230        struct ieee80211_key_conf *keyconf = info->control.hw_key;
 231
 232        switch (keyconf->cipher) {
 233        case WLAN_CIPHER_SUITE_CCMP:
 234                tx_cmd->sec_ctl = TX_CMD_SEC_CCM;
 235                memcpy(tx_cmd->key, keyconf->key, keyconf->keylen);
 236                if (info->flags & IEEE80211_TX_CTL_AMPDU)
 237                        tx_cmd->tx_flags |= cpu_to_le32(TX_CMD_FLG_CCMP_AGG);
 238                break;
 239
 240        case WLAN_CIPHER_SUITE_TKIP:
 241                tx_cmd->sec_ctl = TX_CMD_SEC_TKIP;
 242                ieee80211_get_tkip_p2k(keyconf, skb_frag, tx_cmd->key);
 243                break;
 244
 245        case WLAN_CIPHER_SUITE_WEP104:
 246                tx_cmd->sec_ctl |= TX_CMD_SEC_KEY128;
 247                /* fall through */
 248        case WLAN_CIPHER_SUITE_WEP40:
 249                tx_cmd->sec_ctl |= TX_CMD_SEC_WEP |
 250                        ((keyconf->keyidx << TX_CMD_SEC_WEP_KEY_IDX_POS) &
 251                          TX_CMD_SEC_WEP_KEY_IDX_MSK);
 252
 253                memcpy(&tx_cmd->key[3], keyconf->key, keyconf->keylen);
 254                break;
 255        default:
 256                IWL_ERR(mvm, "Unknown encode cipher %x\n", keyconf->cipher);
 257                break;
 258        }
 259}
 260
 261/*
 262 * Allocates and sets the Tx cmd the driver data pointers in the skb
 263 */
 264static struct iwl_device_cmd *
 265iwl_mvm_set_tx_params(struct iwl_mvm *mvm, struct sk_buff *skb,
 266                      struct ieee80211_sta *sta, u8 sta_id)
 267{
 268        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
 269        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 270        struct iwl_device_cmd *dev_cmd;
 271        struct iwl_tx_cmd *tx_cmd;
 272
 273        dev_cmd = iwl_trans_alloc_tx_cmd(mvm->trans);
 274
 275        if (unlikely(!dev_cmd))
 276                return NULL;
 277
 278        memset(dev_cmd, 0, sizeof(*dev_cmd));
 279        tx_cmd = (struct iwl_tx_cmd *)dev_cmd->payload;
 280
 281        if (info->control.hw_key)
 282                iwl_mvm_set_tx_cmd_crypto(mvm, info, tx_cmd, skb);
 283
 284        iwl_mvm_set_tx_cmd(mvm, skb, tx_cmd, info, sta_id);
 285
 286        iwl_mvm_set_tx_cmd_rate(mvm, tx_cmd, info, sta, hdr->frame_control);
 287
 288        memset(&info->status, 0, sizeof(info->status));
 289
 290        info->driver_data[0] = NULL;
 291        info->driver_data[1] = dev_cmd;
 292
 293        return dev_cmd;
 294}
 295
 296int iwl_mvm_tx_skb_non_sta(struct iwl_mvm *mvm, struct sk_buff *skb)
 297{
 298        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
 299        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 300        struct iwl_device_cmd *dev_cmd;
 301        struct iwl_tx_cmd *tx_cmd;
 302        u8 sta_id;
 303
 304        if (WARN_ON_ONCE(info->flags & IEEE80211_TX_CTL_AMPDU))
 305                return -1;
 306
 307        if (WARN_ON_ONCE(info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM &&
 308                         (!info->control.vif ||
 309                          info->hw_queue != info->control.vif->cab_queue)))
 310                return -1;
 311
 312        /*
 313         * If the interface on which frame is sent is the P2P_DEVICE
 314         * or an AP/GO interface use the broadcast station associated
 315         * with it; otherwise use the AUX station.
 316         */
 317        if (info->control.vif &&
 318            (info->control.vif->type == NL80211_IFTYPE_P2P_DEVICE ||
 319             info->control.vif->type == NL80211_IFTYPE_AP)) {
 320                struct iwl_mvm_vif *mvmvif =
 321                        iwl_mvm_vif_from_mac80211(info->control.vif);
 322                sta_id = mvmvif->bcast_sta.sta_id;
 323        } else {
 324                sta_id = mvm->aux_sta.sta_id;
 325        }
 326
 327        IWL_DEBUG_TX(mvm, "station Id %d, queue=%d\n", sta_id, info->hw_queue);
 328
 329        dev_cmd = iwl_mvm_set_tx_params(mvm, skb, NULL, sta_id);
 330        if (!dev_cmd)
 331                return -1;
 332
 333        /* From now on, we cannot access info->control */
 334        tx_cmd = (struct iwl_tx_cmd *)dev_cmd->payload;
 335
 336        /* Copy MAC header from skb into command buffer */
 337        memcpy(tx_cmd->hdr, hdr, ieee80211_hdrlen(hdr->frame_control));
 338
 339        if (iwl_trans_tx(mvm->trans, skb, dev_cmd, info->hw_queue)) {
 340                iwl_trans_free_tx_cmd(mvm->trans, dev_cmd);
 341                return -1;
 342        }
 343
 344        return 0;
 345}
 346
 347/*
 348 * Sets the fields in the Tx cmd that are crypto related
 349 */
 350int iwl_mvm_tx_skb(struct iwl_mvm *mvm, struct sk_buff *skb,
 351                   struct ieee80211_sta *sta)
 352{
 353        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
 354        struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 355        struct iwl_mvm_sta *mvmsta;
 356        struct iwl_device_cmd *dev_cmd;
 357        struct iwl_tx_cmd *tx_cmd;
 358        __le16 fc;
 359        u16 seq_number = 0;
 360        u8 tid = IWL_MAX_TID_COUNT;
 361        u8 txq_id = info->hw_queue;
 362        bool is_data_qos = false, is_ampdu = false;
 363
 364        mvmsta = (void *)sta->drv_priv;
 365        fc = hdr->frame_control;
 366
 367        if (WARN_ON_ONCE(!mvmsta))
 368                return -1;
 369
 370        if (WARN_ON_ONCE(mvmsta->sta_id == IWL_MVM_STATION_COUNT))
 371                return -1;
 372
 373        dev_cmd = iwl_mvm_set_tx_params(mvm, skb, sta, mvmsta->sta_id);
 374        if (!dev_cmd)
 375                goto drop;
 376
 377        tx_cmd = (struct iwl_tx_cmd *)dev_cmd->payload;
 378        /* From now on, we cannot access info->control */
 379
 380        spin_lock(&mvmsta->lock);
 381
 382        if (ieee80211_is_data_qos(fc) && !ieee80211_is_qos_nullfunc(fc)) {
 383                u8 *qc = NULL;
 384                qc = ieee80211_get_qos_ctl(hdr);
 385                tid = qc[0] & IEEE80211_QOS_CTL_TID_MASK;
 386                if (WARN_ON_ONCE(tid >= IWL_MAX_TID_COUNT))
 387                        goto drop_unlock_sta;
 388
 389                seq_number = mvmsta->tid_data[tid].seq_number;
 390                seq_number &= IEEE80211_SCTL_SEQ;
 391                hdr->seq_ctrl &= cpu_to_le16(IEEE80211_SCTL_FRAG);
 392                hdr->seq_ctrl |= cpu_to_le16(seq_number);
 393                seq_number += 0x10;
 394                is_data_qos = true;
 395                is_ampdu = info->flags & IEEE80211_TX_CTL_AMPDU;
 396        }
 397
 398        /* Copy MAC header from skb into command buffer */
 399        memcpy(tx_cmd->hdr, hdr, ieee80211_hdrlen(fc));
 400
 401        WARN_ON_ONCE(info->flags & IEEE80211_TX_CTL_SEND_AFTER_DTIM);
 402
 403        if (is_ampdu) {
 404                if (WARN_ON_ONCE(mvmsta->tid_data[tid].state != IWL_AGG_ON))
 405                        goto drop_unlock_sta;
 406                txq_id = mvmsta->tid_data[tid].txq_id;
 407        }
 408
 409        IWL_DEBUG_TX(mvm, "TX to [%d|%d] Q:%d - seq: 0x%x\n", mvmsta->sta_id,
 410                     tid, txq_id, seq_number);
 411
 412        if (iwl_trans_tx(mvm->trans, skb, dev_cmd, txq_id))
 413                goto drop_unlock_sta;
 414
 415        if (is_data_qos && !ieee80211_has_morefrags(fc))
 416                mvmsta->tid_data[tid].seq_number = seq_number;
 417
 418        spin_unlock(&mvmsta->lock);
 419
 420        if (txq_id < IWL_MVM_FIRST_AGG_QUEUE)
 421                atomic_inc(&mvm->pending_frames[mvmsta->sta_id]);
 422
 423        return 0;
 424
 425drop_unlock_sta:
 426        iwl_trans_free_tx_cmd(mvm->trans, dev_cmd);
 427        spin_unlock(&mvmsta->lock);
 428drop:
 429        return -1;
 430}
 431
 432static void iwl_mvm_check_ratid_empty(struct iwl_mvm *mvm,
 433                                      struct ieee80211_sta *sta, u8 tid)
 434{
 435        struct iwl_mvm_sta *mvmsta = (void *)sta->drv_priv;
 436        struct iwl_mvm_tid_data *tid_data = &mvmsta->tid_data[tid];
 437        struct ieee80211_vif *vif = mvmsta->vif;
 438
 439        lockdep_assert_held(&mvmsta->lock);
 440
 441        if (tid_data->ssn != tid_data->next_reclaimed)
 442                return;
 443
 444        switch (tid_data->state) {
 445        case IWL_EMPTYING_HW_QUEUE_ADDBA:
 446                IWL_DEBUG_TX_QUEUES(mvm,
 447                                    "Can continue addBA flow ssn = next_recl = %d\n",
 448                                    tid_data->next_reclaimed);
 449                tid_data->state = IWL_AGG_STARTING;
 450                ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
 451                break;
 452
 453        case IWL_EMPTYING_HW_QUEUE_DELBA:
 454                IWL_DEBUG_TX_QUEUES(mvm,
 455                                    "Can continue DELBA flow ssn = next_recl = %d\n",
 456                                    tid_data->next_reclaimed);
 457                iwl_trans_txq_disable(mvm->trans, tid_data->txq_id);
 458                tid_data->state = IWL_AGG_OFF;
 459                /*
 460                 * we can't hold the mutex - but since we are after a sequence
 461                 * point (call to iwl_trans_txq_disable), so we don't even need
 462                 * a memory barrier.
 463                 */
 464                mvm->queue_to_mac80211[tid_data->txq_id] =
 465                                        IWL_INVALID_MAC80211_QUEUE;
 466                ieee80211_stop_tx_ba_cb_irqsafe(vif, sta->addr, tid);
 467                break;
 468
 469        default:
 470                break;
 471        }
 472}
 473
 474#ifdef CONFIG_IWLWIFI_DEBUG
 475const char *iwl_mvm_get_tx_fail_reason(u32 status)
 476{
 477#define TX_STATUS_FAIL(x) case TX_STATUS_FAIL_ ## x: return #x
 478#define TX_STATUS_POSTPONE(x) case TX_STATUS_POSTPONE_ ## x: return #x
 479
 480        switch (status & TX_STATUS_MSK) {
 481        case TX_STATUS_SUCCESS:
 482                return "SUCCESS";
 483        TX_STATUS_POSTPONE(DELAY);
 484        TX_STATUS_POSTPONE(FEW_BYTES);
 485        TX_STATUS_POSTPONE(BT_PRIO);
 486        TX_STATUS_POSTPONE(QUIET_PERIOD);
 487        TX_STATUS_POSTPONE(CALC_TTAK);
 488        TX_STATUS_FAIL(INTERNAL_CROSSED_RETRY);
 489        TX_STATUS_FAIL(SHORT_LIMIT);
 490        TX_STATUS_FAIL(LONG_LIMIT);
 491        TX_STATUS_FAIL(UNDERRUN);
 492        TX_STATUS_FAIL(DRAIN_FLOW);
 493        TX_STATUS_FAIL(RFKILL_FLUSH);
 494        TX_STATUS_FAIL(LIFE_EXPIRE);
 495        TX_STATUS_FAIL(DEST_PS);
 496        TX_STATUS_FAIL(HOST_ABORTED);
 497        TX_STATUS_FAIL(BT_RETRY);
 498        TX_STATUS_FAIL(STA_INVALID);
 499        TX_STATUS_FAIL(FRAG_DROPPED);
 500        TX_STATUS_FAIL(TID_DISABLE);
 501        TX_STATUS_FAIL(FIFO_FLUSHED);
 502        TX_STATUS_FAIL(SMALL_CF_POLL);
 503        TX_STATUS_FAIL(FW_DROP);
 504        TX_STATUS_FAIL(STA_COLOR_MISMATCH);
 505        }
 506
 507        return "UNKNOWN";
 508
 509#undef TX_STATUS_FAIL
 510#undef TX_STATUS_POSTPONE
 511}
 512#endif /* CONFIG_IWLWIFI_DEBUG */
 513
 514/**
 515 * translate ucode response to mac80211 tx status control values
 516 */
 517static void iwl_mvm_hwrate_to_tx_control(u32 rate_n_flags,
 518                                         struct ieee80211_tx_info *info)
 519{
 520        struct ieee80211_tx_rate *r = &info->status.rates[0];
 521
 522        info->status.antenna =
 523                ((rate_n_flags & RATE_MCS_ANT_ABC_MSK) >> RATE_MCS_ANT_POS);
 524        if (rate_n_flags & RATE_HT_MCS_GF_MSK)
 525                r->flags |= IEEE80211_TX_RC_GREEN_FIELD;
 526        switch (rate_n_flags & RATE_MCS_CHAN_WIDTH_MSK) {
 527        case RATE_MCS_CHAN_WIDTH_20:
 528                break;
 529        case RATE_MCS_CHAN_WIDTH_40:
 530                r->flags |= IEEE80211_TX_RC_40_MHZ_WIDTH;
 531                break;
 532        case RATE_MCS_CHAN_WIDTH_80:
 533                r->flags |= IEEE80211_TX_RC_80_MHZ_WIDTH;
 534                break;
 535        case RATE_MCS_CHAN_WIDTH_160:
 536                r->flags |= IEEE80211_TX_RC_160_MHZ_WIDTH;
 537                break;
 538        }
 539        if (rate_n_flags & RATE_MCS_SGI_MSK)
 540                r->flags |= IEEE80211_TX_RC_SHORT_GI;
 541        if (rate_n_flags & RATE_MCS_HT_MSK) {
 542                r->flags |= IEEE80211_TX_RC_MCS;
 543                r->idx = rate_n_flags & RATE_HT_MCS_INDEX_MSK;
 544        } else if (rate_n_flags & RATE_MCS_VHT_MSK) {
 545                ieee80211_rate_set_vht(
 546                        r, rate_n_flags & RATE_VHT_MCS_RATE_CODE_MSK,
 547                        ((rate_n_flags & RATE_VHT_MCS_NSS_MSK) >>
 548                                                RATE_VHT_MCS_NSS_POS) + 1);
 549                r->flags |= IEEE80211_TX_RC_VHT_MCS;
 550        } else {
 551                r->idx = iwl_mvm_legacy_rate_to_mac80211_idx(rate_n_flags,
 552                                                             info->band);
 553        }
 554}
 555
 556static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
 557                                     struct iwl_rx_packet *pkt)
 558{
 559        struct ieee80211_sta *sta;
 560        u16 sequence = le16_to_cpu(pkt->hdr.sequence);
 561        int txq_id = SEQ_TO_QUEUE(sequence);
 562        struct iwl_mvm_tx_resp *tx_resp = (void *)pkt->data;
 563        int sta_id = IWL_MVM_TX_RES_GET_RA(tx_resp->ra_tid);
 564        int tid = IWL_MVM_TX_RES_GET_TID(tx_resp->ra_tid);
 565        u32 status = le16_to_cpu(tx_resp->status.status);
 566        u16 ssn = iwl_mvm_get_scd_ssn(tx_resp);
 567        struct iwl_mvm_sta *mvmsta;
 568        struct sk_buff_head skbs;
 569        u8 skb_freed = 0;
 570        u16 next_reclaimed, seq_ctl;
 571
 572        __skb_queue_head_init(&skbs);
 573
 574        seq_ctl = le16_to_cpu(tx_resp->seq_ctl);
 575
 576        /* we can free until ssn % q.n_bd not inclusive */
 577        iwl_trans_reclaim(mvm->trans, txq_id, ssn, &skbs);
 578
 579        while (!skb_queue_empty(&skbs)) {
 580                struct sk_buff *skb = __skb_dequeue(&skbs);
 581                struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 582
 583                skb_freed++;
 584
 585                iwl_trans_free_tx_cmd(mvm->trans, info->driver_data[1]);
 586
 587                memset(&info->status, 0, sizeof(info->status));
 588
 589                info->flags &= ~IEEE80211_TX_CTL_AMPDU;
 590
 591                /* inform mac80211 about what happened with the frame */
 592                switch (status & TX_STATUS_MSK) {
 593                case TX_STATUS_SUCCESS:
 594                case TX_STATUS_DIRECT_DONE:
 595                        info->flags |= IEEE80211_TX_STAT_ACK;
 596                        break;
 597                case TX_STATUS_FAIL_DEST_PS:
 598                        info->flags |= IEEE80211_TX_STAT_TX_FILTERED;
 599                        break;
 600                default:
 601                        break;
 602                }
 603
 604                info->status.rates[0].count = tx_resp->failure_frame + 1;
 605                iwl_mvm_hwrate_to_tx_control(le32_to_cpu(tx_resp->initial_rate),
 606                                             info);
 607
 608                /* Single frame failure in an AMPDU queue => send BAR */
 609                if (txq_id >= IWL_MVM_FIRST_AGG_QUEUE &&
 610                    !(info->flags & IEEE80211_TX_STAT_ACK))
 611                        info->flags |= IEEE80211_TX_STAT_AMPDU_NO_BACK;
 612
 613                /* W/A FW bug: seq_ctl is wrong when the status isn't success */
 614                if (status != TX_STATUS_SUCCESS) {
 615                        struct ieee80211_hdr *hdr = (void *)skb->data;
 616                        seq_ctl = le16_to_cpu(hdr->seq_ctrl);
 617                }
 618
 619                ieee80211_tx_status_ni(mvm->hw, skb);
 620        }
 621
 622        if (txq_id >= IWL_MVM_FIRST_AGG_QUEUE) {
 623                /* If this is an aggregation queue, we use the ssn since:
 624                 * ssn = wifi seq_num % 256.
 625                 * The seq_ctl is the sequence control of the packet to which
 626                 * this Tx response relates. But if there is a hole in the
 627                 * bitmap of the BA we received, this Tx response may allow to
 628                 * reclaim the hole and all the subsequent packets that were
 629                 * already acked. In that case, seq_ctl != ssn, and the next
 630                 * packet to be reclaimed will be ssn and not seq_ctl. In that
 631                 * case, several packets will be reclaimed even if
 632                 * frame_count = 1.
 633                 *
 634                 * The ssn is the index (% 256) of the latest packet that has
 635                 * treated (acked / dropped) + 1.
 636                 */
 637                next_reclaimed = ssn;
 638        } else {
 639                /* The next packet to be reclaimed is the one after this one */
 640                next_reclaimed = IEEE80211_SEQ_TO_SN(seq_ctl + 0x10);
 641        }
 642
 643        IWL_DEBUG_TX_REPLY(mvm,
 644                           "TXQ %d status %s (0x%08x)\n",
 645                           txq_id, iwl_mvm_get_tx_fail_reason(status), status);
 646
 647        IWL_DEBUG_TX_REPLY(mvm,
 648                           "\t\t\t\tinitial_rate 0x%x retries %d, idx=%d ssn=%d next_reclaimed=0x%x seq_ctl=0x%x\n",
 649                           le32_to_cpu(tx_resp->initial_rate),
 650                           tx_resp->failure_frame, SEQ_TO_INDEX(sequence),
 651                           ssn, next_reclaimed, seq_ctl);
 652
 653        rcu_read_lock();
 654
 655        sta = rcu_dereference(mvm->fw_id_to_mac_id[sta_id]);
 656
 657        if (!IS_ERR_OR_NULL(sta)) {
 658                mvmsta = (void *)sta->drv_priv;
 659
 660                if (tid != IWL_TID_NON_QOS) {
 661                        struct iwl_mvm_tid_data *tid_data =
 662                                &mvmsta->tid_data[tid];
 663
 664                        spin_lock_bh(&mvmsta->lock);
 665                        tid_data->next_reclaimed = next_reclaimed;
 666                        IWL_DEBUG_TX_REPLY(mvm, "Next reclaimed packet:%d\n",
 667                                           next_reclaimed);
 668                        iwl_mvm_check_ratid_empty(mvm, sta, tid);
 669                        spin_unlock_bh(&mvmsta->lock);
 670                }
 671
 672#ifdef CONFIG_PM_SLEEP
 673                mvmsta->last_seq_ctl = seq_ctl;
 674#endif
 675        } else {
 676                sta = NULL;
 677                mvmsta = NULL;
 678        }
 679
 680        /*
 681         * If the txq is not an AMPDU queue, there is no chance we freed
 682         * several skbs. Check that out...
 683         */
 684        if (txq_id < IWL_MVM_FIRST_AGG_QUEUE && !WARN_ON(skb_freed > 1) &&
 685            atomic_sub_and_test(skb_freed, &mvm->pending_frames[sta_id])) {
 686                if (mvmsta) {
 687                        /*
 688                         * If there are no pending frames for this STA, notify
 689                         * mac80211 that this station can go to sleep in its
 690                         * STA table.
 691                         */
 692                        if (mvmsta->vif->type == NL80211_IFTYPE_AP)
 693                                ieee80211_sta_block_awake(mvm->hw, sta, false);
 694                        /*
 695                         * We might very well have taken mvmsta pointer while
 696                         * the station was being removed. The remove flow might
 697                         * have seen a pending_frame (because we didn't take
 698                         * the lock) even if now the queues are drained. So make
 699                         * really sure now that this the station is not being
 700                         * removed. If it is, run the drain worker to remove it.
 701                         */
 702                        spin_lock_bh(&mvmsta->lock);
 703                        sta = rcu_dereference(mvm->fw_id_to_mac_id[sta_id]);
 704                        if (IS_ERR_OR_NULL(sta)) {
 705                                /*
 706                                 * Station disappeared in the meantime:
 707                                 * so we are draining.
 708                                 */
 709                                set_bit(sta_id, mvm->sta_drained);
 710                                schedule_work(&mvm->sta_drained_wk);
 711                        }
 712                        spin_unlock_bh(&mvmsta->lock);
 713                } else if (!mvmsta) {
 714                        /* Tx response without STA, so we are draining */
 715                        set_bit(sta_id, mvm->sta_drained);
 716                        schedule_work(&mvm->sta_drained_wk);
 717                }
 718        }
 719
 720        rcu_read_unlock();
 721}
 722
 723#ifdef CONFIG_IWLWIFI_DEBUG
 724#define AGG_TX_STATE_(x) case AGG_TX_STATE_ ## x: return #x
 725static const char *iwl_get_agg_tx_status(u16 status)
 726{
 727        switch (status & AGG_TX_STATE_STATUS_MSK) {
 728        AGG_TX_STATE_(TRANSMITTED);
 729        AGG_TX_STATE_(UNDERRUN);
 730        AGG_TX_STATE_(BT_PRIO);
 731        AGG_TX_STATE_(FEW_BYTES);
 732        AGG_TX_STATE_(ABORT);
 733        AGG_TX_STATE_(LAST_SENT_TTL);
 734        AGG_TX_STATE_(LAST_SENT_TRY_CNT);
 735        AGG_TX_STATE_(LAST_SENT_BT_KILL);
 736        AGG_TX_STATE_(SCD_QUERY);
 737        AGG_TX_STATE_(TEST_BAD_CRC32);
 738        AGG_TX_STATE_(RESPONSE);
 739        AGG_TX_STATE_(DUMP_TX);
 740        AGG_TX_STATE_(DELAY_TX);
 741        }
 742
 743        return "UNKNOWN";
 744}
 745
 746static void iwl_mvm_rx_tx_cmd_agg_dbg(struct iwl_mvm *mvm,
 747                                      struct iwl_rx_packet *pkt)
 748{
 749        struct iwl_mvm_tx_resp *tx_resp = (void *)pkt->data;
 750        struct agg_tx_status *frame_status = &tx_resp->status;
 751        int i;
 752
 753        for (i = 0; i < tx_resp->frame_count; i++) {
 754                u16 fstatus = le16_to_cpu(frame_status[i].status);
 755
 756                IWL_DEBUG_TX_REPLY(mvm,
 757                                   "status %s (0x%04x), try-count (%d) seq (0x%x)\n",
 758                                   iwl_get_agg_tx_status(fstatus),
 759                                   fstatus & AGG_TX_STATE_STATUS_MSK,
 760                                   (fstatus & AGG_TX_STATE_TRY_CNT_MSK) >>
 761                                        AGG_TX_STATE_TRY_CNT_POS,
 762                                   le16_to_cpu(frame_status[i].sequence));
 763        }
 764}
 765#else
 766static void iwl_mvm_rx_tx_cmd_agg_dbg(struct iwl_mvm *mvm,
 767                                      struct iwl_rx_packet *pkt)
 768{}
 769#endif /* CONFIG_IWLWIFI_DEBUG */
 770
 771static void iwl_mvm_rx_tx_cmd_agg(struct iwl_mvm *mvm,
 772                                  struct iwl_rx_packet *pkt)
 773{
 774        struct iwl_mvm_tx_resp *tx_resp = (void *)pkt->data;
 775        int sta_id = IWL_MVM_TX_RES_GET_RA(tx_resp->ra_tid);
 776        int tid = IWL_MVM_TX_RES_GET_TID(tx_resp->ra_tid);
 777        u16 sequence = le16_to_cpu(pkt->hdr.sequence);
 778        struct ieee80211_sta *sta;
 779
 780        if (WARN_ON_ONCE(SEQ_TO_QUEUE(sequence) < IWL_MVM_FIRST_AGG_QUEUE))
 781                return;
 782
 783        if (WARN_ON_ONCE(tid == IWL_TID_NON_QOS))
 784                return;
 785
 786        iwl_mvm_rx_tx_cmd_agg_dbg(mvm, pkt);
 787
 788        rcu_read_lock();
 789
 790        sta = rcu_dereference(mvm->fw_id_to_mac_id[sta_id]);
 791
 792        if (!WARN_ON_ONCE(IS_ERR_OR_NULL(sta))) {
 793                struct iwl_mvm_sta *mvmsta = (void *)sta->drv_priv;
 794                mvmsta->tid_data[tid].rate_n_flags =
 795                        le32_to_cpu(tx_resp->initial_rate);
 796        }
 797
 798        rcu_read_unlock();
 799}
 800
 801int iwl_mvm_rx_tx_cmd(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb,
 802                      struct iwl_device_cmd *cmd)
 803{
 804        struct iwl_rx_packet *pkt = rxb_addr(rxb);
 805        struct iwl_mvm_tx_resp *tx_resp = (void *)pkt->data;
 806
 807        if (tx_resp->frame_count == 1)
 808                iwl_mvm_rx_tx_cmd_single(mvm, pkt);
 809        else
 810                iwl_mvm_rx_tx_cmd_agg(mvm, pkt);
 811
 812        return 0;
 813}
 814
 815int iwl_mvm_rx_ba_notif(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb,
 816                        struct iwl_device_cmd *cmd)
 817{
 818        struct iwl_rx_packet *pkt = rxb_addr(rxb);
 819        struct iwl_mvm_ba_notif *ba_notif = (void *)pkt->data;
 820        struct sk_buff_head reclaimed_skbs;
 821        struct iwl_mvm_tid_data *tid_data;
 822        struct ieee80211_tx_info *info;
 823        struct ieee80211_sta *sta;
 824        struct iwl_mvm_sta *mvmsta;
 825        struct ieee80211_hdr *hdr;
 826        struct sk_buff *skb;
 827        int sta_id, tid, freed;
 828
 829        /* "flow" corresponds to Tx queue */
 830        u16 scd_flow = le16_to_cpu(ba_notif->scd_flow);
 831
 832        /* "ssn" is start of block-ack Tx window, corresponds to index
 833         * (in Tx queue's circular buffer) of first TFD/frame in window */
 834        u16 ba_resp_scd_ssn = le16_to_cpu(ba_notif->scd_ssn);
 835
 836        sta_id = ba_notif->sta_id;
 837        tid = ba_notif->tid;
 838
 839        rcu_read_lock();
 840
 841        sta = rcu_dereference(mvm->fw_id_to_mac_id[sta_id]);
 842
 843        /* Reclaiming frames for a station that has been deleted ? */
 844        if (WARN_ON_ONCE(IS_ERR_OR_NULL(sta))) {
 845                rcu_read_unlock();
 846                return 0;
 847        }
 848
 849        mvmsta = (void *)sta->drv_priv;
 850        tid_data = &mvmsta->tid_data[tid];
 851
 852        if (WARN_ONCE(tid_data->txq_id != scd_flow, "Q %d, tid %d, flow %d",
 853                      tid_data->txq_id, tid, scd_flow)) {
 854                rcu_read_unlock();
 855                return 0;
 856        }
 857
 858        spin_lock_bh(&mvmsta->lock);
 859
 860        __skb_queue_head_init(&reclaimed_skbs);
 861
 862        /*
 863         * Release all TFDs before the SSN, i.e. all TFDs in front of
 864         * block-ack window (we assume that they've been successfully
 865         * transmitted ... if not, it's too late anyway).
 866         */
 867        iwl_trans_reclaim(mvm->trans, scd_flow, ba_resp_scd_ssn,
 868                          &reclaimed_skbs);
 869
 870        IWL_DEBUG_TX_REPLY(mvm,
 871                           "BA_NOTIFICATION Received from %pM, sta_id = %d\n",
 872                           (u8 *)&ba_notif->sta_addr_lo32,
 873                           ba_notif->sta_id);
 874        IWL_DEBUG_TX_REPLY(mvm,
 875                           "TID = %d, SeqCtl = %d, bitmap = 0x%llx, scd_flow = %d, scd_ssn = %d sent:%d, acked:%d\n",
 876                           ba_notif->tid, le16_to_cpu(ba_notif->seq_ctl),
 877                           (unsigned long long)le64_to_cpu(ba_notif->bitmap),
 878                           scd_flow, ba_resp_scd_ssn, ba_notif->txed,
 879                           ba_notif->txed_2_done);
 880
 881        tid_data->next_reclaimed = ba_resp_scd_ssn;
 882
 883        iwl_mvm_check_ratid_empty(mvm, sta, tid);
 884
 885        freed = 0;
 886
 887        skb_queue_walk(&reclaimed_skbs, skb) {
 888                hdr = (struct ieee80211_hdr *)skb->data;
 889
 890                if (ieee80211_is_data_qos(hdr->frame_control))
 891                        freed++;
 892                else
 893                        WARN_ON_ONCE(1);
 894
 895                info = IEEE80211_SKB_CB(skb);
 896                iwl_trans_free_tx_cmd(mvm->trans, info->driver_data[1]);
 897
 898                if (freed == 1) {
 899                        /* this is the first skb we deliver in this batch */
 900                        /* put the rate scaling data there */
 901                        info = IEEE80211_SKB_CB(skb);
 902                        memset(&info->status, 0, sizeof(info->status));
 903                        info->flags |= IEEE80211_TX_STAT_ACK;
 904                        info->flags |= IEEE80211_TX_STAT_AMPDU;
 905                        info->status.ampdu_ack_len = ba_notif->txed_2_done;
 906                        info->status.ampdu_len = ba_notif->txed;
 907                        iwl_mvm_hwrate_to_tx_control(tid_data->rate_n_flags,
 908                                                     info);
 909                }
 910        }
 911
 912        spin_unlock_bh(&mvmsta->lock);
 913
 914        rcu_read_unlock();
 915
 916        while (!skb_queue_empty(&reclaimed_skbs)) {
 917                skb = __skb_dequeue(&reclaimed_skbs);
 918                ieee80211_tx_status_ni(mvm->hw, skb);
 919        }
 920
 921        return 0;
 922}
 923
 924int iwl_mvm_flush_tx_path(struct iwl_mvm *mvm, u32 tfd_msk, bool sync)
 925{
 926        int ret;
 927        struct iwl_tx_path_flush_cmd flush_cmd = {
 928                .queues_ctl = cpu_to_le32(tfd_msk),
 929                .flush_ctl = cpu_to_le16(DUMP_TX_FIFO_FLUSH),
 930        };
 931
 932        u32 flags = sync ? CMD_SYNC : CMD_ASYNC;
 933
 934        ret = iwl_mvm_send_cmd_pdu(mvm, TXPATH_FLUSH, flags,
 935                                   sizeof(flush_cmd), &flush_cmd);
 936        if (ret)
 937                IWL_ERR(mvm, "Failed to send flush command (%d)\n", ret);
 938        return ret;
 939}
 940