1 /* 2 * Copyright (c) 2005-2011 Atheros Communications Inc. 3 * Copyright (c) 2011-2013 Qualcomm Atheros, Inc. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 #include "mac.h" 19 20 #include <net/mac80211.h> 21 #include <linux/etherdevice.h> 22 23 #include "hif.h" 24 #include "core.h" 25 #include "debug.h" 26 #include "wmi.h" 27 #include "htt.h" 28 #include "txrx.h" 29 #include "testmode.h" 30 #include "wmi.h" 31 #include "wmi-tlv.h" 32 #include "wmi-ops.h" 33 #include "wow.h" 34 35 /*********/ 36 /* Rates */ 37 /*********/ 38 39 static struct ieee80211_rate ath10k_rates[] = { 40 { .bitrate = 10, 41 .hw_value = ATH10K_HW_RATE_CCK_LP_1M }, 42 { .bitrate = 20, 43 .hw_value = ATH10K_HW_RATE_CCK_LP_2M, 44 .hw_value_short = ATH10K_HW_RATE_CCK_SP_2M, 45 .flags = IEEE80211_RATE_SHORT_PREAMBLE }, 46 { .bitrate = 55, 47 .hw_value = ATH10K_HW_RATE_CCK_LP_5_5M, 48 .hw_value_short = ATH10K_HW_RATE_CCK_SP_5_5M, 49 .flags = IEEE80211_RATE_SHORT_PREAMBLE }, 50 { .bitrate = 110, 51 .hw_value = ATH10K_HW_RATE_CCK_LP_11M, 52 .hw_value_short = ATH10K_HW_RATE_CCK_SP_11M, 53 .flags = IEEE80211_RATE_SHORT_PREAMBLE }, 54 55 { .bitrate = 60, .hw_value = ATH10K_HW_RATE_OFDM_6M }, 56 { .bitrate = 90, .hw_value = ATH10K_HW_RATE_OFDM_9M }, 57 { .bitrate = 120, .hw_value = ATH10K_HW_RATE_OFDM_12M }, 58 { .bitrate = 180, .hw_value = ATH10K_HW_RATE_OFDM_18M }, 59 { .bitrate = 240, .hw_value = ATH10K_HW_RATE_OFDM_24M }, 60 { .bitrate = 360, .hw_value = ATH10K_HW_RATE_OFDM_36M }, 61 { .bitrate = 480, .hw_value = ATH10K_HW_RATE_OFDM_48M }, 62 { .bitrate = 540, .hw_value = ATH10K_HW_RATE_OFDM_54M }, 63 }; 64 65 static struct ieee80211_rate ath10k_rates_rev2[] = { 66 { .bitrate = 10, 67 .hw_value = ATH10K_HW_RATE_REV2_CCK_LP_1M }, 68 { .bitrate = 20, 69 .hw_value = ATH10K_HW_RATE_REV2_CCK_LP_2M, 70 .hw_value_short = ATH10K_HW_RATE_REV2_CCK_SP_2M, 71 .flags = IEEE80211_RATE_SHORT_PREAMBLE }, 72 { .bitrate = 55, 73 .hw_value = ATH10K_HW_RATE_REV2_CCK_LP_5_5M, 74 .hw_value_short = ATH10K_HW_RATE_REV2_CCK_SP_5_5M, 75 .flags = IEEE80211_RATE_SHORT_PREAMBLE }, 76 { .bitrate = 110, 77 .hw_value = ATH10K_HW_RATE_REV2_CCK_LP_11M, 78 .hw_value_short = ATH10K_HW_RATE_REV2_CCK_SP_11M, 79 .flags = IEEE80211_RATE_SHORT_PREAMBLE }, 80 81 { .bitrate = 60, .hw_value = ATH10K_HW_RATE_OFDM_6M }, 82 { .bitrate = 90, .hw_value = ATH10K_HW_RATE_OFDM_9M }, 83 { .bitrate = 120, .hw_value = ATH10K_HW_RATE_OFDM_12M }, 84 { .bitrate = 180, .hw_value = ATH10K_HW_RATE_OFDM_18M }, 85 { .bitrate = 240, .hw_value = ATH10K_HW_RATE_OFDM_24M }, 86 { .bitrate = 360, .hw_value = ATH10K_HW_RATE_OFDM_36M }, 87 { .bitrate = 480, .hw_value = ATH10K_HW_RATE_OFDM_48M }, 88 { .bitrate = 540, .hw_value = ATH10K_HW_RATE_OFDM_54M }, 89 }; 90 91 #define ATH10K_MAC_FIRST_OFDM_RATE_IDX 4 92 93 #define ath10k_a_rates (ath10k_rates + ATH10K_MAC_FIRST_OFDM_RATE_IDX) 94 #define ath10k_a_rates_size (ARRAY_SIZE(ath10k_rates) - \ 95 ATH10K_MAC_FIRST_OFDM_RATE_IDX) 96 #define ath10k_g_rates (ath10k_rates + 0) 97 #define ath10k_g_rates_size (ARRAY_SIZE(ath10k_rates)) 98 99 #define ath10k_g_rates_rev2 (ath10k_rates_rev2 + 0) 100 #define ath10k_g_rates_rev2_size (ARRAY_SIZE(ath10k_rates_rev2)) 101 102 static bool ath10k_mac_bitrate_is_cck(int bitrate) 103 { 104 switch (bitrate) { 105 case 10: 106 case 20: 107 case 55: 108 case 110: 109 return true; 110 } 111 112 return false; 113 } 114 115 static u8 ath10k_mac_bitrate_to_rate(int bitrate) 116 { 117 return DIV_ROUND_UP(bitrate, 5) | 118 (ath10k_mac_bitrate_is_cck(bitrate) ? BIT(7) : 0); 119 } 120 121 u8 ath10k_mac_hw_rate_to_idx(const struct ieee80211_supported_band *sband, 122 u8 hw_rate, bool cck) 123 { 124 const struct ieee80211_rate *rate; 125 int i; 126 127 for (i = 0; i < sband->n_bitrates; i++) { 128 rate = &sband->bitrates[i]; 129 130 if (ath10k_mac_bitrate_is_cck(rate->bitrate) != cck) 131 continue; 132 133 if (rate->hw_value == hw_rate) 134 return i; 135 else if (rate->flags & IEEE80211_RATE_SHORT_PREAMBLE && 136 rate->hw_value_short == hw_rate) 137 return i; 138 } 139 140 return 0; 141 } 142 143 u8 ath10k_mac_bitrate_to_idx(const struct ieee80211_supported_band *sband, 144 u32 bitrate) 145 { 146 int i; 147 148 for (i = 0; i < sband->n_bitrates; i++) 149 if (sband->bitrates[i].bitrate == bitrate) 150 return i; 151 152 return 0; 153 } 154 155 static int ath10k_mac_get_max_vht_mcs_map(u16 mcs_map, int nss) 156 { 157 switch ((mcs_map >> (2 * nss)) & 0x3) { 158 case IEEE80211_VHT_MCS_SUPPORT_0_7: return BIT(8) - 1; 159 case IEEE80211_VHT_MCS_SUPPORT_0_8: return BIT(9) - 1; 160 case IEEE80211_VHT_MCS_SUPPORT_0_9: return BIT(10) - 1; 161 } 162 return 0; 163 } 164 165 static u32 166 ath10k_mac_max_ht_nss(const u8 ht_mcs_mask[IEEE80211_HT_MCS_MASK_LEN]) 167 { 168 int nss; 169 170 for (nss = IEEE80211_HT_MCS_MASK_LEN - 1; nss >= 0; nss--) 171 if (ht_mcs_mask[nss]) 172 return nss + 1; 173 174 return 1; 175 } 176 177 static u32 178 ath10k_mac_max_vht_nss(const u16 vht_mcs_mask[NL80211_VHT_NSS_MAX]) 179 { 180 int nss; 181 182 for (nss = NL80211_VHT_NSS_MAX - 1; nss >= 0; nss--) 183 if (vht_mcs_mask[nss]) 184 return nss + 1; 185 186 return 1; 187 } 188 189 int ath10k_mac_ext_resource_config(struct ath10k *ar, u32 val) 190 { 191 enum wmi_host_platform_type platform_type; 192 int ret; 193 194 if (test_bit(WMI_SERVICE_TX_MODE_DYNAMIC, ar->wmi.svc_map)) 195 platform_type = WMI_HOST_PLATFORM_LOW_PERF; 196 else 197 platform_type = WMI_HOST_PLATFORM_HIGH_PERF; 198 199 ret = ath10k_wmi_ext_resource_config(ar, platform_type, val); 200 201 if (ret && ret != -EOPNOTSUPP) { 202 ath10k_warn(ar, "failed to configure ext resource: %d\n", ret); 203 return ret; 204 } 205 206 return 0; 207 } 208 209 /**********/ 210 /* Crypto */ 211 /**********/ 212 213 static int ath10k_send_key(struct ath10k_vif *arvif, 214 struct ieee80211_key_conf *key, 215 enum set_key_cmd cmd, 216 const u8 *macaddr, u32 flags) 217 { 218 struct ath10k *ar = arvif->ar; 219 struct wmi_vdev_install_key_arg arg = { 220 .vdev_id = arvif->vdev_id, 221 .key_idx = key->keyidx, 222 .key_len = key->keylen, 223 .key_data = key->key, 224 .key_flags = flags, 225 .macaddr = macaddr, 226 }; 227 228 lockdep_assert_held(&arvif->ar->conf_mutex); 229 230 switch (key->cipher) { 231 case WLAN_CIPHER_SUITE_CCMP: 232 arg.key_cipher = WMI_CIPHER_AES_CCM; 233 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV_MGMT; 234 break; 235 case WLAN_CIPHER_SUITE_TKIP: 236 arg.key_cipher = WMI_CIPHER_TKIP; 237 arg.key_txmic_len = 8; 238 arg.key_rxmic_len = 8; 239 break; 240 case WLAN_CIPHER_SUITE_WEP40: 241 case WLAN_CIPHER_SUITE_WEP104: 242 arg.key_cipher = WMI_CIPHER_WEP; 243 break; 244 case WLAN_CIPHER_SUITE_AES_CMAC: 245 WARN_ON(1); 246 return -EINVAL; 247 default: 248 ath10k_warn(ar, "cipher %d is not supported\n", key->cipher); 249 return -EOPNOTSUPP; 250 } 251 252 if (test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) 253 key->flags |= IEEE80211_KEY_FLAG_GENERATE_IV; 254 255 if (cmd == DISABLE_KEY) { 256 arg.key_cipher = WMI_CIPHER_NONE; 257 arg.key_data = NULL; 258 } 259 260 return ath10k_wmi_vdev_install_key(arvif->ar, &arg); 261 } 262 263 static int ath10k_install_key(struct ath10k_vif *arvif, 264 struct ieee80211_key_conf *key, 265 enum set_key_cmd cmd, 266 const u8 *macaddr, u32 flags) 267 { 268 struct ath10k *ar = arvif->ar; 269 int ret; 270 unsigned long time_left; 271 272 lockdep_assert_held(&ar->conf_mutex); 273 274 reinit_completion(&ar->install_key_done); 275 276 if (arvif->nohwcrypt) 277 return 1; 278 279 ret = ath10k_send_key(arvif, key, cmd, macaddr, flags); 280 if (ret) 281 return ret; 282 283 time_left = wait_for_completion_timeout(&ar->install_key_done, 3 * HZ); 284 if (time_left == 0) 285 return -ETIMEDOUT; 286 287 return 0; 288 } 289 290 static int ath10k_install_peer_wep_keys(struct ath10k_vif *arvif, 291 const u8 *addr) 292 { 293 struct ath10k *ar = arvif->ar; 294 struct ath10k_peer *peer; 295 int ret; 296 int i; 297 u32 flags; 298 299 lockdep_assert_held(&ar->conf_mutex); 300 301 if (WARN_ON(arvif->vif->type != NL80211_IFTYPE_AP && 302 arvif->vif->type != NL80211_IFTYPE_ADHOC && 303 arvif->vif->type != NL80211_IFTYPE_MESH_POINT)) 304 return -EINVAL; 305 306 spin_lock_bh(&ar->data_lock); 307 peer = ath10k_peer_find(ar, arvif->vdev_id, addr); 308 spin_unlock_bh(&ar->data_lock); 309 310 if (!peer) 311 return -ENOENT; 312 313 for (i = 0; i < ARRAY_SIZE(arvif->wep_keys); i++) { 314 if (arvif->wep_keys[i] == NULL) 315 continue; 316 317 switch (arvif->vif->type) { 318 case NL80211_IFTYPE_AP: 319 flags = WMI_KEY_PAIRWISE; 320 321 if (arvif->def_wep_key_idx == i) 322 flags |= WMI_KEY_TX_USAGE; 323 324 ret = ath10k_install_key(arvif, arvif->wep_keys[i], 325 SET_KEY, addr, flags); 326 if (ret < 0) 327 return ret; 328 break; 329 case NL80211_IFTYPE_ADHOC: 330 ret = ath10k_install_key(arvif, arvif->wep_keys[i], 331 SET_KEY, addr, 332 WMI_KEY_PAIRWISE); 333 if (ret < 0) 334 return ret; 335 336 ret = ath10k_install_key(arvif, arvif->wep_keys[i], 337 SET_KEY, addr, WMI_KEY_GROUP); 338 if (ret < 0) 339 return ret; 340 break; 341 default: 342 WARN_ON(1); 343 return -EINVAL; 344 } 345 346 spin_lock_bh(&ar->data_lock); 347 peer->keys[i] = arvif->wep_keys[i]; 348 spin_unlock_bh(&ar->data_lock); 349 } 350 351 /* In some cases (notably with static WEP IBSS with multiple keys) 352 * multicast Tx becomes broken. Both pairwise and groupwise keys are 353 * installed already. Using WMI_KEY_TX_USAGE in different combinations 354 * didn't seem help. Using def_keyid vdev parameter seems to be 355 * effective so use that. 356 * 357 * FIXME: Revisit. Perhaps this can be done in a less hacky way. 358 */ 359 if (arvif->vif->type != NL80211_IFTYPE_ADHOC) 360 return 0; 361 362 if (arvif->def_wep_key_idx == -1) 363 return 0; 364 365 ret = ath10k_wmi_vdev_set_param(arvif->ar, 366 arvif->vdev_id, 367 arvif->ar->wmi.vdev_param->def_keyid, 368 arvif->def_wep_key_idx); 369 if (ret) { 370 ath10k_warn(ar, "failed to re-set def wpa key idxon vdev %i: %d\n", 371 arvif->vdev_id, ret); 372 return ret; 373 } 374 375 return 0; 376 } 377 378 static int ath10k_clear_peer_keys(struct ath10k_vif *arvif, 379 const u8 *addr) 380 { 381 struct ath10k *ar = arvif->ar; 382 struct ath10k_peer *peer; 383 int first_errno = 0; 384 int ret; 385 int i; 386 u32 flags = 0; 387 388 lockdep_assert_held(&ar->conf_mutex); 389 390 spin_lock_bh(&ar->data_lock); 391 peer = ath10k_peer_find(ar, arvif->vdev_id, addr); 392 spin_unlock_bh(&ar->data_lock); 393 394 if (!peer) 395 return -ENOENT; 396 397 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) { 398 if (peer->keys[i] == NULL) 399 continue; 400 401 /* key flags are not required to delete the key */ 402 ret = ath10k_install_key(arvif, peer->keys[i], 403 DISABLE_KEY, addr, flags); 404 if (ret < 0 && first_errno == 0) 405 first_errno = ret; 406 407 if (ret < 0) 408 ath10k_warn(ar, "failed to remove peer wep key %d: %d\n", 409 i, ret); 410 411 spin_lock_bh(&ar->data_lock); 412 peer->keys[i] = NULL; 413 spin_unlock_bh(&ar->data_lock); 414 } 415 416 return first_errno; 417 } 418 419 bool ath10k_mac_is_peer_wep_key_set(struct ath10k *ar, const u8 *addr, 420 u8 keyidx) 421 { 422 struct ath10k_peer *peer; 423 int i; 424 425 lockdep_assert_held(&ar->data_lock); 426 427 /* We don't know which vdev this peer belongs to, 428 * since WMI doesn't give us that information. 429 * 430 * FIXME: multi-bss needs to be handled. 431 */ 432 peer = ath10k_peer_find(ar, 0, addr); 433 if (!peer) 434 return false; 435 436 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) { 437 if (peer->keys[i] && peer->keys[i]->keyidx == keyidx) 438 return true; 439 } 440 441 return false; 442 } 443 444 static int ath10k_clear_vdev_key(struct ath10k_vif *arvif, 445 struct ieee80211_key_conf *key) 446 { 447 struct ath10k *ar = arvif->ar; 448 struct ath10k_peer *peer; 449 u8 addr[ETH_ALEN]; 450 int first_errno = 0; 451 int ret; 452 int i; 453 u32 flags = 0; 454 455 lockdep_assert_held(&ar->conf_mutex); 456 457 for (;;) { 458 /* since ath10k_install_key we can't hold data_lock all the 459 * time, so we try to remove the keys incrementally */ 460 spin_lock_bh(&ar->data_lock); 461 i = 0; 462 list_for_each_entry(peer, &ar->peers, list) { 463 for (i = 0; i < ARRAY_SIZE(peer->keys); i++) { 464 if (peer->keys[i] == key) { 465 ether_addr_copy(addr, peer->addr); 466 peer->keys[i] = NULL; 467 break; 468 } 469 } 470 471 if (i < ARRAY_SIZE(peer->keys)) 472 break; 473 } 474 spin_unlock_bh(&ar->data_lock); 475 476 if (i == ARRAY_SIZE(peer->keys)) 477 break; 478 /* key flags are not required to delete the key */ 479 ret = ath10k_install_key(arvif, key, DISABLE_KEY, addr, flags); 480 if (ret < 0 && first_errno == 0) 481 first_errno = ret; 482 483 if (ret) 484 ath10k_warn(ar, "failed to remove key for %pM: %d\n", 485 addr, ret); 486 } 487 488 return first_errno; 489 } 490 491 static int ath10k_mac_vif_update_wep_key(struct ath10k_vif *arvif, 492 struct ieee80211_key_conf *key) 493 { 494 struct ath10k *ar = arvif->ar; 495 struct ath10k_peer *peer; 496 int ret; 497 498 lockdep_assert_held(&ar->conf_mutex); 499 500 list_for_each_entry(peer, &ar->peers, list) { 501 if (ether_addr_equal(peer->addr, arvif->vif->addr)) 502 continue; 503 504 if (ether_addr_equal(peer->addr, arvif->bssid)) 505 continue; 506 507 if (peer->keys[key->keyidx] == key) 508 continue; 509 510 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vif vdev %i update key %i needs update\n", 511 arvif->vdev_id, key->keyidx); 512 513 ret = ath10k_install_peer_wep_keys(arvif, peer->addr); 514 if (ret) { 515 ath10k_warn(ar, "failed to update wep keys on vdev %i for peer %pM: %d\n", 516 arvif->vdev_id, peer->addr, ret); 517 return ret; 518 } 519 } 520 521 return 0; 522 } 523 524 /*********************/ 525 /* General utilities */ 526 /*********************/ 527 528 static inline enum wmi_phy_mode 529 chan_to_phymode(const struct cfg80211_chan_def *chandef) 530 { 531 enum wmi_phy_mode phymode = MODE_UNKNOWN; 532 533 switch (chandef->chan->band) { 534 case NL80211_BAND_2GHZ: 535 switch (chandef->width) { 536 case NL80211_CHAN_WIDTH_20_NOHT: 537 if (chandef->chan->flags & IEEE80211_CHAN_NO_OFDM) 538 phymode = MODE_11B; 539 else 540 phymode = MODE_11G; 541 break; 542 case NL80211_CHAN_WIDTH_20: 543 phymode = MODE_11NG_HT20; 544 break; 545 case NL80211_CHAN_WIDTH_40: 546 phymode = MODE_11NG_HT40; 547 break; 548 case NL80211_CHAN_WIDTH_5: 549 case NL80211_CHAN_WIDTH_10: 550 case NL80211_CHAN_WIDTH_80: 551 case NL80211_CHAN_WIDTH_80P80: 552 case NL80211_CHAN_WIDTH_160: 553 phymode = MODE_UNKNOWN; 554 break; 555 } 556 break; 557 case NL80211_BAND_5GHZ: 558 switch (chandef->width) { 559 case NL80211_CHAN_WIDTH_20_NOHT: 560 phymode = MODE_11A; 561 break; 562 case NL80211_CHAN_WIDTH_20: 563 phymode = MODE_11NA_HT20; 564 break; 565 case NL80211_CHAN_WIDTH_40: 566 phymode = MODE_11NA_HT40; 567 break; 568 case NL80211_CHAN_WIDTH_80: 569 phymode = MODE_11AC_VHT80; 570 break; 571 case NL80211_CHAN_WIDTH_5: 572 case NL80211_CHAN_WIDTH_10: 573 case NL80211_CHAN_WIDTH_80P80: 574 case NL80211_CHAN_WIDTH_160: 575 phymode = MODE_UNKNOWN; 576 break; 577 } 578 break; 579 default: 580 break; 581 } 582 583 WARN_ON(phymode == MODE_UNKNOWN); 584 return phymode; 585 } 586 587 static u8 ath10k_parse_mpdudensity(u8 mpdudensity) 588 { 589 /* 590 * 802.11n D2.0 defined values for "Minimum MPDU Start Spacing": 591 * 0 for no restriction 592 * 1 for 1/4 us 593 * 2 for 1/2 us 594 * 3 for 1 us 595 * 4 for 2 us 596 * 5 for 4 us 597 * 6 for 8 us 598 * 7 for 16 us 599 */ 600 switch (mpdudensity) { 601 case 0: 602 return 0; 603 case 1: 604 case 2: 605 case 3: 606 /* Our lower layer calculations limit our precision to 607 1 microsecond */ 608 return 1; 609 case 4: 610 return 2; 611 case 5: 612 return 4; 613 case 6: 614 return 8; 615 case 7: 616 return 16; 617 default: 618 return 0; 619 } 620 } 621 622 int ath10k_mac_vif_chan(struct ieee80211_vif *vif, 623 struct cfg80211_chan_def *def) 624 { 625 struct ieee80211_chanctx_conf *conf; 626 627 rcu_read_lock(); 628 conf = rcu_dereference(vif->chanctx_conf); 629 if (!conf) { 630 rcu_read_unlock(); 631 return -ENOENT; 632 } 633 634 *def = conf->def; 635 rcu_read_unlock(); 636 637 return 0; 638 } 639 640 static void ath10k_mac_num_chanctxs_iter(struct ieee80211_hw *hw, 641 struct ieee80211_chanctx_conf *conf, 642 void *data) 643 { 644 int *num = data; 645 646 (*num)++; 647 } 648 649 static int ath10k_mac_num_chanctxs(struct ath10k *ar) 650 { 651 int num = 0; 652 653 ieee80211_iter_chan_contexts_atomic(ar->hw, 654 ath10k_mac_num_chanctxs_iter, 655 &num); 656 657 return num; 658 } 659 660 static void 661 ath10k_mac_get_any_chandef_iter(struct ieee80211_hw *hw, 662 struct ieee80211_chanctx_conf *conf, 663 void *data) 664 { 665 struct cfg80211_chan_def **def = data; 666 667 *def = &conf->def; 668 } 669 670 static int ath10k_peer_create(struct ath10k *ar, 671 struct ieee80211_vif *vif, 672 struct ieee80211_sta *sta, 673 u32 vdev_id, 674 const u8 *addr, 675 enum wmi_peer_type peer_type) 676 { 677 struct ath10k_vif *arvif; 678 struct ath10k_peer *peer; 679 int num_peers = 0; 680 int ret; 681 682 lockdep_assert_held(&ar->conf_mutex); 683 684 num_peers = ar->num_peers; 685 686 /* Each vdev consumes a peer entry as well */ 687 list_for_each_entry(arvif, &ar->arvifs, list) 688 num_peers++; 689 690 if (num_peers >= ar->max_num_peers) 691 return -ENOBUFS; 692 693 ret = ath10k_wmi_peer_create(ar, vdev_id, addr, peer_type); 694 if (ret) { 695 ath10k_warn(ar, "failed to create wmi peer %pM on vdev %i: %i\n", 696 addr, vdev_id, ret); 697 return ret; 698 } 699 700 ret = ath10k_wait_for_peer_created(ar, vdev_id, addr); 701 if (ret) { 702 ath10k_warn(ar, "failed to wait for created wmi peer %pM on vdev %i: %i\n", 703 addr, vdev_id, ret); 704 return ret; 705 } 706 707 spin_lock_bh(&ar->data_lock); 708 709 peer = ath10k_peer_find(ar, vdev_id, addr); 710 if (!peer) { 711 spin_unlock_bh(&ar->data_lock); 712 ath10k_warn(ar, "failed to find peer %pM on vdev %i after creation\n", 713 addr, vdev_id); 714 ath10k_wmi_peer_delete(ar, vdev_id, addr); 715 return -ENOENT; 716 } 717 718 peer->vif = vif; 719 peer->sta = sta; 720 721 spin_unlock_bh(&ar->data_lock); 722 723 ar->num_peers++; 724 725 return 0; 726 } 727 728 static int ath10k_mac_set_kickout(struct ath10k_vif *arvif) 729 { 730 struct ath10k *ar = arvif->ar; 731 u32 param; 732 int ret; 733 734 param = ar->wmi.pdev_param->sta_kickout_th; 735 ret = ath10k_wmi_pdev_set_param(ar, param, 736 ATH10K_KICKOUT_THRESHOLD); 737 if (ret) { 738 ath10k_warn(ar, "failed to set kickout threshold on vdev %i: %d\n", 739 arvif->vdev_id, ret); 740 return ret; 741 } 742 743 param = ar->wmi.vdev_param->ap_keepalive_min_idle_inactive_time_secs; 744 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, 745 ATH10K_KEEPALIVE_MIN_IDLE); 746 if (ret) { 747 ath10k_warn(ar, "failed to set keepalive minimum idle time on vdev %i: %d\n", 748 arvif->vdev_id, ret); 749 return ret; 750 } 751 752 param = ar->wmi.vdev_param->ap_keepalive_max_idle_inactive_time_secs; 753 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, 754 ATH10K_KEEPALIVE_MAX_IDLE); 755 if (ret) { 756 ath10k_warn(ar, "failed to set keepalive maximum idle time on vdev %i: %d\n", 757 arvif->vdev_id, ret); 758 return ret; 759 } 760 761 param = ar->wmi.vdev_param->ap_keepalive_max_unresponsive_time_secs; 762 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, 763 ATH10K_KEEPALIVE_MAX_UNRESPONSIVE); 764 if (ret) { 765 ath10k_warn(ar, "failed to set keepalive maximum unresponsive time on vdev %i: %d\n", 766 arvif->vdev_id, ret); 767 return ret; 768 } 769 770 return 0; 771 } 772 773 static int ath10k_mac_set_rts(struct ath10k_vif *arvif, u32 value) 774 { 775 struct ath10k *ar = arvif->ar; 776 u32 vdev_param; 777 778 vdev_param = ar->wmi.vdev_param->rts_threshold; 779 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, value); 780 } 781 782 static int ath10k_peer_delete(struct ath10k *ar, u32 vdev_id, const u8 *addr) 783 { 784 int ret; 785 786 lockdep_assert_held(&ar->conf_mutex); 787 788 ret = ath10k_wmi_peer_delete(ar, vdev_id, addr); 789 if (ret) 790 return ret; 791 792 ret = ath10k_wait_for_peer_deleted(ar, vdev_id, addr); 793 if (ret) 794 return ret; 795 796 ar->num_peers--; 797 798 return 0; 799 } 800 801 static void ath10k_peer_cleanup(struct ath10k *ar, u32 vdev_id) 802 { 803 struct ath10k_peer *peer, *tmp; 804 int peer_id; 805 int i; 806 807 lockdep_assert_held(&ar->conf_mutex); 808 809 spin_lock_bh(&ar->data_lock); 810 list_for_each_entry_safe(peer, tmp, &ar->peers, list) { 811 if (peer->vdev_id != vdev_id) 812 continue; 813 814 ath10k_warn(ar, "removing stale peer %pM from vdev_id %d\n", 815 peer->addr, vdev_id); 816 817 for_each_set_bit(peer_id, peer->peer_ids, 818 ATH10K_MAX_NUM_PEER_IDS) { 819 ar->peer_map[peer_id] = NULL; 820 } 821 822 /* Double check that peer is properly un-referenced from 823 * the peer_map 824 */ 825 for (i = 0; i < ARRAY_SIZE(ar->peer_map); i++) { 826 if (ar->peer_map[i] == peer) { 827 ath10k_warn(ar, "removing stale peer_map entry for %pM (ptr %p idx %d)\n", 828 peer->addr, peer, i); 829 ar->peer_map[i] = NULL; 830 } 831 } 832 833 list_del(&peer->list); 834 kfree(peer); 835 ar->num_peers--; 836 } 837 spin_unlock_bh(&ar->data_lock); 838 } 839 840 static void ath10k_peer_cleanup_all(struct ath10k *ar) 841 { 842 struct ath10k_peer *peer, *tmp; 843 int i; 844 845 lockdep_assert_held(&ar->conf_mutex); 846 847 spin_lock_bh(&ar->data_lock); 848 list_for_each_entry_safe(peer, tmp, &ar->peers, list) { 849 list_del(&peer->list); 850 kfree(peer); 851 } 852 853 for (i = 0; i < ARRAY_SIZE(ar->peer_map); i++) 854 ar->peer_map[i] = NULL; 855 856 spin_unlock_bh(&ar->data_lock); 857 858 ar->num_peers = 0; 859 ar->num_stations = 0; 860 } 861 862 static int ath10k_mac_tdls_peer_update(struct ath10k *ar, u32 vdev_id, 863 struct ieee80211_sta *sta, 864 enum wmi_tdls_peer_state state) 865 { 866 int ret; 867 struct wmi_tdls_peer_update_cmd_arg arg = {}; 868 struct wmi_tdls_peer_capab_arg cap = {}; 869 struct wmi_channel_arg chan_arg = {}; 870 871 lockdep_assert_held(&ar->conf_mutex); 872 873 arg.vdev_id = vdev_id; 874 arg.peer_state = state; 875 ether_addr_copy(arg.addr, sta->addr); 876 877 cap.peer_max_sp = sta->max_sp; 878 cap.peer_uapsd_queues = sta->uapsd_queues; 879 880 if (state == WMI_TDLS_PEER_STATE_CONNECTED && 881 !sta->tdls_initiator) 882 cap.is_peer_responder = 1; 883 884 ret = ath10k_wmi_tdls_peer_update(ar, &arg, &cap, &chan_arg); 885 if (ret) { 886 ath10k_warn(ar, "failed to update tdls peer %pM on vdev %i: %i\n", 887 arg.addr, vdev_id, ret); 888 return ret; 889 } 890 891 return 0; 892 } 893 894 /************************/ 895 /* Interface management */ 896 /************************/ 897 898 void ath10k_mac_vif_beacon_free(struct ath10k_vif *arvif) 899 { 900 struct ath10k *ar = arvif->ar; 901 902 lockdep_assert_held(&ar->data_lock); 903 904 if (!arvif->beacon) 905 return; 906 907 if (!arvif->beacon_buf) 908 dma_unmap_single(ar->dev, ATH10K_SKB_CB(arvif->beacon)->paddr, 909 arvif->beacon->len, DMA_TO_DEVICE); 910 911 if (WARN_ON(arvif->beacon_state != ATH10K_BEACON_SCHEDULED && 912 arvif->beacon_state != ATH10K_BEACON_SENT)) 913 return; 914 915 dev_kfree_skb_any(arvif->beacon); 916 917 arvif->beacon = NULL; 918 arvif->beacon_state = ATH10K_BEACON_SCHEDULED; 919 } 920 921 static void ath10k_mac_vif_beacon_cleanup(struct ath10k_vif *arvif) 922 { 923 struct ath10k *ar = arvif->ar; 924 925 lockdep_assert_held(&ar->data_lock); 926 927 ath10k_mac_vif_beacon_free(arvif); 928 929 if (arvif->beacon_buf) { 930 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN, 931 arvif->beacon_buf, arvif->beacon_paddr); 932 arvif->beacon_buf = NULL; 933 } 934 } 935 936 static inline int ath10k_vdev_setup_sync(struct ath10k *ar) 937 { 938 unsigned long time_left; 939 940 lockdep_assert_held(&ar->conf_mutex); 941 942 if (test_bit(ATH10K_FLAG_CRASH_FLUSH, &ar->dev_flags)) 943 return -ESHUTDOWN; 944 945 time_left = wait_for_completion_timeout(&ar->vdev_setup_done, 946 ATH10K_VDEV_SETUP_TIMEOUT_HZ); 947 if (time_left == 0) 948 return -ETIMEDOUT; 949 950 return 0; 951 } 952 953 static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id) 954 { 955 struct cfg80211_chan_def *chandef = NULL; 956 struct ieee80211_channel *channel = NULL; 957 struct wmi_vdev_start_request_arg arg = {}; 958 int ret = 0; 959 960 lockdep_assert_held(&ar->conf_mutex); 961 962 ieee80211_iter_chan_contexts_atomic(ar->hw, 963 ath10k_mac_get_any_chandef_iter, 964 &chandef); 965 if (WARN_ON_ONCE(!chandef)) 966 return -ENOENT; 967 968 channel = chandef->chan; 969 970 arg.vdev_id = vdev_id; 971 arg.channel.freq = channel->center_freq; 972 arg.channel.band_center_freq1 = chandef->center_freq1; 973 974 /* TODO setup this dynamically, what in case we 975 don't have any vifs? */ 976 arg.channel.mode = chan_to_phymode(chandef); 977 arg.channel.chan_radar = 978 !!(channel->flags & IEEE80211_CHAN_RADAR); 979 980 arg.channel.min_power = 0; 981 arg.channel.max_power = channel->max_power * 2; 982 arg.channel.max_reg_power = channel->max_reg_power * 2; 983 arg.channel.max_antenna_gain = channel->max_antenna_gain * 2; 984 985 reinit_completion(&ar->vdev_setup_done); 986 987 ret = ath10k_wmi_vdev_start(ar, &arg); 988 if (ret) { 989 ath10k_warn(ar, "failed to request monitor vdev %i start: %d\n", 990 vdev_id, ret); 991 return ret; 992 } 993 994 ret = ath10k_vdev_setup_sync(ar); 995 if (ret) { 996 ath10k_warn(ar, "failed to synchronize setup for monitor vdev %i start: %d\n", 997 vdev_id, ret); 998 return ret; 999 } 1000 1001 ret = ath10k_wmi_vdev_up(ar, vdev_id, 0, ar->mac_addr); 1002 if (ret) { 1003 ath10k_warn(ar, "failed to put up monitor vdev %i: %d\n", 1004 vdev_id, ret); 1005 goto vdev_stop; 1006 } 1007 1008 ar->monitor_vdev_id = vdev_id; 1009 1010 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i started\n", 1011 ar->monitor_vdev_id); 1012 return 0; 1013 1014 vdev_stop: 1015 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id); 1016 if (ret) 1017 ath10k_warn(ar, "failed to stop monitor vdev %i after start failure: %d\n", 1018 ar->monitor_vdev_id, ret); 1019 1020 return ret; 1021 } 1022 1023 static int ath10k_monitor_vdev_stop(struct ath10k *ar) 1024 { 1025 int ret = 0; 1026 1027 lockdep_assert_held(&ar->conf_mutex); 1028 1029 ret = ath10k_wmi_vdev_down(ar, ar->monitor_vdev_id); 1030 if (ret) 1031 ath10k_warn(ar, "failed to put down monitor vdev %i: %d\n", 1032 ar->monitor_vdev_id, ret); 1033 1034 reinit_completion(&ar->vdev_setup_done); 1035 1036 ret = ath10k_wmi_vdev_stop(ar, ar->monitor_vdev_id); 1037 if (ret) 1038 ath10k_warn(ar, "failed to to request monitor vdev %i stop: %d\n", 1039 ar->monitor_vdev_id, ret); 1040 1041 ret = ath10k_vdev_setup_sync(ar); 1042 if (ret) 1043 ath10k_warn(ar, "failed to synchronize monitor vdev %i stop: %d\n", 1044 ar->monitor_vdev_id, ret); 1045 1046 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %i stopped\n", 1047 ar->monitor_vdev_id); 1048 return ret; 1049 } 1050 1051 static int ath10k_monitor_vdev_create(struct ath10k *ar) 1052 { 1053 int bit, ret = 0; 1054 1055 lockdep_assert_held(&ar->conf_mutex); 1056 1057 if (ar->free_vdev_map == 0) { 1058 ath10k_warn(ar, "failed to find free vdev id for monitor vdev\n"); 1059 return -ENOMEM; 1060 } 1061 1062 bit = __ffs64(ar->free_vdev_map); 1063 1064 ar->monitor_vdev_id = bit; 1065 1066 ret = ath10k_wmi_vdev_create(ar, ar->monitor_vdev_id, 1067 WMI_VDEV_TYPE_MONITOR, 1068 0, ar->mac_addr); 1069 if (ret) { 1070 ath10k_warn(ar, "failed to request monitor vdev %i creation: %d\n", 1071 ar->monitor_vdev_id, ret); 1072 return ret; 1073 } 1074 1075 ar->free_vdev_map &= ~(1LL << ar->monitor_vdev_id); 1076 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d created\n", 1077 ar->monitor_vdev_id); 1078 1079 return 0; 1080 } 1081 1082 static int ath10k_monitor_vdev_delete(struct ath10k *ar) 1083 { 1084 int ret = 0; 1085 1086 lockdep_assert_held(&ar->conf_mutex); 1087 1088 ret = ath10k_wmi_vdev_delete(ar, ar->monitor_vdev_id); 1089 if (ret) { 1090 ath10k_warn(ar, "failed to request wmi monitor vdev %i removal: %d\n", 1091 ar->monitor_vdev_id, ret); 1092 return ret; 1093 } 1094 1095 ar->free_vdev_map |= 1LL << ar->monitor_vdev_id; 1096 1097 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor vdev %d deleted\n", 1098 ar->monitor_vdev_id); 1099 return ret; 1100 } 1101 1102 static int ath10k_monitor_start(struct ath10k *ar) 1103 { 1104 int ret; 1105 1106 lockdep_assert_held(&ar->conf_mutex); 1107 1108 ret = ath10k_monitor_vdev_create(ar); 1109 if (ret) { 1110 ath10k_warn(ar, "failed to create monitor vdev: %d\n", ret); 1111 return ret; 1112 } 1113 1114 ret = ath10k_monitor_vdev_start(ar, ar->monitor_vdev_id); 1115 if (ret) { 1116 ath10k_warn(ar, "failed to start monitor vdev: %d\n", ret); 1117 ath10k_monitor_vdev_delete(ar); 1118 return ret; 1119 } 1120 1121 ar->monitor_started = true; 1122 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor started\n"); 1123 1124 return 0; 1125 } 1126 1127 static int ath10k_monitor_stop(struct ath10k *ar) 1128 { 1129 int ret; 1130 1131 lockdep_assert_held(&ar->conf_mutex); 1132 1133 ret = ath10k_monitor_vdev_stop(ar); 1134 if (ret) { 1135 ath10k_warn(ar, "failed to stop monitor vdev: %d\n", ret); 1136 return ret; 1137 } 1138 1139 ret = ath10k_monitor_vdev_delete(ar); 1140 if (ret) { 1141 ath10k_warn(ar, "failed to delete monitor vdev: %d\n", ret); 1142 return ret; 1143 } 1144 1145 ar->monitor_started = false; 1146 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor stopped\n"); 1147 1148 return 0; 1149 } 1150 1151 static bool ath10k_mac_monitor_vdev_is_needed(struct ath10k *ar) 1152 { 1153 int num_ctx; 1154 1155 /* At least one chanctx is required to derive a channel to start 1156 * monitor vdev on. 1157 */ 1158 num_ctx = ath10k_mac_num_chanctxs(ar); 1159 if (num_ctx == 0) 1160 return false; 1161 1162 /* If there's already an existing special monitor interface then don't 1163 * bother creating another monitor vdev. 1164 */ 1165 if (ar->monitor_arvif) 1166 return false; 1167 1168 return ar->monitor || 1169 ar->filter_flags & FIF_OTHER_BSS || 1170 test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags); 1171 } 1172 1173 static bool ath10k_mac_monitor_vdev_is_allowed(struct ath10k *ar) 1174 { 1175 int num_ctx; 1176 1177 num_ctx = ath10k_mac_num_chanctxs(ar); 1178 1179 /* FIXME: Current interface combinations and cfg80211/mac80211 code 1180 * shouldn't allow this but make sure to prevent handling the following 1181 * case anyway since multi-channel DFS hasn't been tested at all. 1182 */ 1183 if (test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags) && num_ctx > 1) 1184 return false; 1185 1186 return true; 1187 } 1188 1189 static int ath10k_monitor_recalc(struct ath10k *ar) 1190 { 1191 bool needed; 1192 bool allowed; 1193 int ret; 1194 1195 lockdep_assert_held(&ar->conf_mutex); 1196 1197 needed = ath10k_mac_monitor_vdev_is_needed(ar); 1198 allowed = ath10k_mac_monitor_vdev_is_allowed(ar); 1199 1200 ath10k_dbg(ar, ATH10K_DBG_MAC, 1201 "mac monitor recalc started? %d needed? %d allowed? %d\n", 1202 ar->monitor_started, needed, allowed); 1203 1204 if (WARN_ON(needed && !allowed)) { 1205 if (ar->monitor_started) { 1206 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac monitor stopping disallowed monitor\n"); 1207 1208 ret = ath10k_monitor_stop(ar); 1209 if (ret) 1210 ath10k_warn(ar, "failed to stop disallowed monitor: %d\n", 1211 ret); 1212 /* not serious */ 1213 } 1214 1215 return -EPERM; 1216 } 1217 1218 if (needed == ar->monitor_started) 1219 return 0; 1220 1221 if (needed) 1222 return ath10k_monitor_start(ar); 1223 else 1224 return ath10k_monitor_stop(ar); 1225 } 1226 1227 static int ath10k_recalc_rtscts_prot(struct ath10k_vif *arvif) 1228 { 1229 struct ath10k *ar = arvif->ar; 1230 u32 vdev_param, rts_cts = 0; 1231 1232 lockdep_assert_held(&ar->conf_mutex); 1233 1234 vdev_param = ar->wmi.vdev_param->enable_rtscts; 1235 1236 rts_cts |= SM(WMI_RTSCTS_ENABLED, WMI_RTSCTS_SET); 1237 1238 if (arvif->num_legacy_stations > 0) 1239 rts_cts |= SM(WMI_RTSCTS_ACROSS_SW_RETRIES, 1240 WMI_RTSCTS_PROFILE); 1241 else 1242 rts_cts |= SM(WMI_RTSCTS_FOR_SECOND_RATESERIES, 1243 WMI_RTSCTS_PROFILE); 1244 1245 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, 1246 rts_cts); 1247 } 1248 1249 static int ath10k_start_cac(struct ath10k *ar) 1250 { 1251 int ret; 1252 1253 lockdep_assert_held(&ar->conf_mutex); 1254 1255 set_bit(ATH10K_CAC_RUNNING, &ar->dev_flags); 1256 1257 ret = ath10k_monitor_recalc(ar); 1258 if (ret) { 1259 ath10k_warn(ar, "failed to start monitor (cac): %d\n", ret); 1260 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags); 1261 return ret; 1262 } 1263 1264 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac start monitor vdev %d\n", 1265 ar->monitor_vdev_id); 1266 1267 return 0; 1268 } 1269 1270 static int ath10k_stop_cac(struct ath10k *ar) 1271 { 1272 lockdep_assert_held(&ar->conf_mutex); 1273 1274 /* CAC is not running - do nothing */ 1275 if (!test_bit(ATH10K_CAC_RUNNING, &ar->dev_flags)) 1276 return 0; 1277 1278 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags); 1279 ath10k_monitor_stop(ar); 1280 1281 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac cac finished\n"); 1282 1283 return 0; 1284 } 1285 1286 static void ath10k_mac_has_radar_iter(struct ieee80211_hw *hw, 1287 struct ieee80211_chanctx_conf *conf, 1288 void *data) 1289 { 1290 bool *ret = data; 1291 1292 if (!*ret && conf->radar_enabled) 1293 *ret = true; 1294 } 1295 1296 static bool ath10k_mac_has_radar_enabled(struct ath10k *ar) 1297 { 1298 bool has_radar = false; 1299 1300 ieee80211_iter_chan_contexts_atomic(ar->hw, 1301 ath10k_mac_has_radar_iter, 1302 &has_radar); 1303 1304 return has_radar; 1305 } 1306 1307 static void ath10k_recalc_radar_detection(struct ath10k *ar) 1308 { 1309 int ret; 1310 1311 lockdep_assert_held(&ar->conf_mutex); 1312 1313 ath10k_stop_cac(ar); 1314 1315 if (!ath10k_mac_has_radar_enabled(ar)) 1316 return; 1317 1318 if (ar->num_started_vdevs > 0) 1319 return; 1320 1321 ret = ath10k_start_cac(ar); 1322 if (ret) { 1323 /* 1324 * Not possible to start CAC on current channel so starting 1325 * radiation is not allowed, make this channel DFS_UNAVAILABLE 1326 * by indicating that radar was detected. 1327 */ 1328 ath10k_warn(ar, "failed to start CAC: %d\n", ret); 1329 ieee80211_radar_detected(ar->hw); 1330 } 1331 } 1332 1333 static int ath10k_vdev_stop(struct ath10k_vif *arvif) 1334 { 1335 struct ath10k *ar = arvif->ar; 1336 int ret; 1337 1338 lockdep_assert_held(&ar->conf_mutex); 1339 1340 reinit_completion(&ar->vdev_setup_done); 1341 1342 ret = ath10k_wmi_vdev_stop(ar, arvif->vdev_id); 1343 if (ret) { 1344 ath10k_warn(ar, "failed to stop WMI vdev %i: %d\n", 1345 arvif->vdev_id, ret); 1346 return ret; 1347 } 1348 1349 ret = ath10k_vdev_setup_sync(ar); 1350 if (ret) { 1351 ath10k_warn(ar, "failed to syncronise setup for vdev %i: %d\n", 1352 arvif->vdev_id, ret); 1353 return ret; 1354 } 1355 1356 WARN_ON(ar->num_started_vdevs == 0); 1357 1358 if (ar->num_started_vdevs != 0) { 1359 ar->num_started_vdevs--; 1360 ath10k_recalc_radar_detection(ar); 1361 } 1362 1363 return ret; 1364 } 1365 1366 static int ath10k_vdev_start_restart(struct ath10k_vif *arvif, 1367 const struct cfg80211_chan_def *chandef, 1368 bool restart) 1369 { 1370 struct ath10k *ar = arvif->ar; 1371 struct wmi_vdev_start_request_arg arg = {}; 1372 int ret = 0; 1373 1374 lockdep_assert_held(&ar->conf_mutex); 1375 1376 reinit_completion(&ar->vdev_setup_done); 1377 1378 arg.vdev_id = arvif->vdev_id; 1379 arg.dtim_period = arvif->dtim_period; 1380 arg.bcn_intval = arvif->beacon_interval; 1381 1382 arg.channel.freq = chandef->chan->center_freq; 1383 arg.channel.band_center_freq1 = chandef->center_freq1; 1384 arg.channel.mode = chan_to_phymode(chandef); 1385 1386 arg.channel.min_power = 0; 1387 arg.channel.max_power = chandef->chan->max_power * 2; 1388 arg.channel.max_reg_power = chandef->chan->max_reg_power * 2; 1389 arg.channel.max_antenna_gain = chandef->chan->max_antenna_gain * 2; 1390 1391 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) { 1392 arg.ssid = arvif->u.ap.ssid; 1393 arg.ssid_len = arvif->u.ap.ssid_len; 1394 arg.hidden_ssid = arvif->u.ap.hidden_ssid; 1395 1396 /* For now allow DFS for AP mode */ 1397 arg.channel.chan_radar = 1398 !!(chandef->chan->flags & IEEE80211_CHAN_RADAR); 1399 } else if (arvif->vdev_type == WMI_VDEV_TYPE_IBSS) { 1400 arg.ssid = arvif->vif->bss_conf.ssid; 1401 arg.ssid_len = arvif->vif->bss_conf.ssid_len; 1402 } 1403 1404 ath10k_dbg(ar, ATH10K_DBG_MAC, 1405 "mac vdev %d start center_freq %d phymode %s\n", 1406 arg.vdev_id, arg.channel.freq, 1407 ath10k_wmi_phymode_str(arg.channel.mode)); 1408 1409 if (restart) 1410 ret = ath10k_wmi_vdev_restart(ar, &arg); 1411 else 1412 ret = ath10k_wmi_vdev_start(ar, &arg); 1413 1414 if (ret) { 1415 ath10k_warn(ar, "failed to start WMI vdev %i: %d\n", 1416 arg.vdev_id, ret); 1417 return ret; 1418 } 1419 1420 ret = ath10k_vdev_setup_sync(ar); 1421 if (ret) { 1422 ath10k_warn(ar, 1423 "failed to synchronize setup for vdev %i restart %d: %d\n", 1424 arg.vdev_id, restart, ret); 1425 return ret; 1426 } 1427 1428 ar->num_started_vdevs++; 1429 ath10k_recalc_radar_detection(ar); 1430 1431 return ret; 1432 } 1433 1434 static int ath10k_vdev_start(struct ath10k_vif *arvif, 1435 const struct cfg80211_chan_def *def) 1436 { 1437 return ath10k_vdev_start_restart(arvif, def, false); 1438 } 1439 1440 static int ath10k_vdev_restart(struct ath10k_vif *arvif, 1441 const struct cfg80211_chan_def *def) 1442 { 1443 return ath10k_vdev_start_restart(arvif, def, true); 1444 } 1445 1446 static int ath10k_mac_setup_bcn_p2p_ie(struct ath10k_vif *arvif, 1447 struct sk_buff *bcn) 1448 { 1449 struct ath10k *ar = arvif->ar; 1450 struct ieee80211_mgmt *mgmt; 1451 const u8 *p2p_ie; 1452 int ret; 1453 1454 if (arvif->vif->type != NL80211_IFTYPE_AP || !arvif->vif->p2p) 1455 return 0; 1456 1457 mgmt = (void *)bcn->data; 1458 p2p_ie = cfg80211_find_vendor_ie(WLAN_OUI_WFA, WLAN_OUI_TYPE_WFA_P2P, 1459 mgmt->u.beacon.variable, 1460 bcn->len - (mgmt->u.beacon.variable - 1461 bcn->data)); 1462 if (!p2p_ie) 1463 return -ENOENT; 1464 1465 ret = ath10k_wmi_p2p_go_bcn_ie(ar, arvif->vdev_id, p2p_ie); 1466 if (ret) { 1467 ath10k_warn(ar, "failed to submit p2p go bcn ie for vdev %i: %d\n", 1468 arvif->vdev_id, ret); 1469 return ret; 1470 } 1471 1472 return 0; 1473 } 1474 1475 static int ath10k_mac_remove_vendor_ie(struct sk_buff *skb, unsigned int oui, 1476 u8 oui_type, size_t ie_offset) 1477 { 1478 size_t len; 1479 const u8 *next; 1480 const u8 *end; 1481 u8 *ie; 1482 1483 if (WARN_ON(skb->len < ie_offset)) 1484 return -EINVAL; 1485 1486 ie = (u8 *)cfg80211_find_vendor_ie(oui, oui_type, 1487 skb->data + ie_offset, 1488 skb->len - ie_offset); 1489 if (!ie) 1490 return -ENOENT; 1491 1492 len = ie[1] + 2; 1493 end = skb->data + skb->len; 1494 next = ie + len; 1495 1496 if (WARN_ON(next > end)) 1497 return -EINVAL; 1498 1499 memmove(ie, next, end - next); 1500 skb_trim(skb, skb->len - len); 1501 1502 return 0; 1503 } 1504 1505 static int ath10k_mac_setup_bcn_tmpl(struct ath10k_vif *arvif) 1506 { 1507 struct ath10k *ar = arvif->ar; 1508 struct ieee80211_hw *hw = ar->hw; 1509 struct ieee80211_vif *vif = arvif->vif; 1510 struct ieee80211_mutable_offsets offs = {}; 1511 struct sk_buff *bcn; 1512 int ret; 1513 1514 if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)) 1515 return 0; 1516 1517 if (arvif->vdev_type != WMI_VDEV_TYPE_AP && 1518 arvif->vdev_type != WMI_VDEV_TYPE_IBSS) 1519 return 0; 1520 1521 bcn = ieee80211_beacon_get_template(hw, vif, &offs); 1522 if (!bcn) { 1523 ath10k_warn(ar, "failed to get beacon template from mac80211\n"); 1524 return -EPERM; 1525 } 1526 1527 ret = ath10k_mac_setup_bcn_p2p_ie(arvif, bcn); 1528 if (ret) { 1529 ath10k_warn(ar, "failed to setup p2p go bcn ie: %d\n", ret); 1530 kfree_skb(bcn); 1531 return ret; 1532 } 1533 1534 /* P2P IE is inserted by firmware automatically (as configured above) 1535 * so remove it from the base beacon template to avoid duplicate P2P 1536 * IEs in beacon frames. 1537 */ 1538 ath10k_mac_remove_vendor_ie(bcn, WLAN_OUI_WFA, WLAN_OUI_TYPE_WFA_P2P, 1539 offsetof(struct ieee80211_mgmt, 1540 u.beacon.variable)); 1541 1542 ret = ath10k_wmi_bcn_tmpl(ar, arvif->vdev_id, offs.tim_offset, bcn, 0, 1543 0, NULL, 0); 1544 kfree_skb(bcn); 1545 1546 if (ret) { 1547 ath10k_warn(ar, "failed to submit beacon template command: %d\n", 1548 ret); 1549 return ret; 1550 } 1551 1552 return 0; 1553 } 1554 1555 static int ath10k_mac_setup_prb_tmpl(struct ath10k_vif *arvif) 1556 { 1557 struct ath10k *ar = arvif->ar; 1558 struct ieee80211_hw *hw = ar->hw; 1559 struct ieee80211_vif *vif = arvif->vif; 1560 struct sk_buff *prb; 1561 int ret; 1562 1563 if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)) 1564 return 0; 1565 1566 if (arvif->vdev_type != WMI_VDEV_TYPE_AP) 1567 return 0; 1568 1569 prb = ieee80211_proberesp_get(hw, vif); 1570 if (!prb) { 1571 ath10k_warn(ar, "failed to get probe resp template from mac80211\n"); 1572 return -EPERM; 1573 } 1574 1575 ret = ath10k_wmi_prb_tmpl(ar, arvif->vdev_id, prb); 1576 kfree_skb(prb); 1577 1578 if (ret) { 1579 ath10k_warn(ar, "failed to submit probe resp template command: %d\n", 1580 ret); 1581 return ret; 1582 } 1583 1584 return 0; 1585 } 1586 1587 static int ath10k_mac_vif_fix_hidden_ssid(struct ath10k_vif *arvif) 1588 { 1589 struct ath10k *ar = arvif->ar; 1590 struct cfg80211_chan_def def; 1591 int ret; 1592 1593 /* When originally vdev is started during assign_vif_chanctx() some 1594 * information is missing, notably SSID. Firmware revisions with beacon 1595 * offloading require the SSID to be provided during vdev (re)start to 1596 * handle hidden SSID properly. 1597 * 1598 * Vdev restart must be done after vdev has been both started and 1599 * upped. Otherwise some firmware revisions (at least 10.2) fail to 1600 * deliver vdev restart response event causing timeouts during vdev 1601 * syncing in ath10k. 1602 * 1603 * Note: The vdev down/up and template reinstallation could be skipped 1604 * since only wmi-tlv firmware are known to have beacon offload and 1605 * wmi-tlv doesn't seem to misbehave like 10.2 wrt vdev restart 1606 * response delivery. It's probably more robust to keep it as is. 1607 */ 1608 if (!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)) 1609 return 0; 1610 1611 if (WARN_ON(!arvif->is_started)) 1612 return -EINVAL; 1613 1614 if (WARN_ON(!arvif->is_up)) 1615 return -EINVAL; 1616 1617 if (WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def))) 1618 return -EINVAL; 1619 1620 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id); 1621 if (ret) { 1622 ath10k_warn(ar, "failed to bring down ap vdev %i: %d\n", 1623 arvif->vdev_id, ret); 1624 return ret; 1625 } 1626 1627 /* Vdev down reset beacon & presp templates. Reinstall them. Otherwise 1628 * firmware will crash upon vdev up. 1629 */ 1630 1631 ret = ath10k_mac_setup_bcn_tmpl(arvif); 1632 if (ret) { 1633 ath10k_warn(ar, "failed to update beacon template: %d\n", ret); 1634 return ret; 1635 } 1636 1637 ret = ath10k_mac_setup_prb_tmpl(arvif); 1638 if (ret) { 1639 ath10k_warn(ar, "failed to update presp template: %d\n", ret); 1640 return ret; 1641 } 1642 1643 ret = ath10k_vdev_restart(arvif, &def); 1644 if (ret) { 1645 ath10k_warn(ar, "failed to restart ap vdev %i: %d\n", 1646 arvif->vdev_id, ret); 1647 return ret; 1648 } 1649 1650 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid, 1651 arvif->bssid); 1652 if (ret) { 1653 ath10k_warn(ar, "failed to bring up ap vdev %i: %d\n", 1654 arvif->vdev_id, ret); 1655 return ret; 1656 } 1657 1658 return 0; 1659 } 1660 1661 static void ath10k_control_beaconing(struct ath10k_vif *arvif, 1662 struct ieee80211_bss_conf *info) 1663 { 1664 struct ath10k *ar = arvif->ar; 1665 int ret = 0; 1666 1667 lockdep_assert_held(&arvif->ar->conf_mutex); 1668 1669 if (!info->enable_beacon) { 1670 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id); 1671 if (ret) 1672 ath10k_warn(ar, "failed to down vdev_id %i: %d\n", 1673 arvif->vdev_id, ret); 1674 1675 arvif->is_up = false; 1676 1677 spin_lock_bh(&arvif->ar->data_lock); 1678 ath10k_mac_vif_beacon_free(arvif); 1679 spin_unlock_bh(&arvif->ar->data_lock); 1680 1681 return; 1682 } 1683 1684 arvif->tx_seq_no = 0x1000; 1685 1686 arvif->aid = 0; 1687 ether_addr_copy(arvif->bssid, info->bssid); 1688 1689 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid, 1690 arvif->bssid); 1691 if (ret) { 1692 ath10k_warn(ar, "failed to bring up vdev %d: %i\n", 1693 arvif->vdev_id, ret); 1694 return; 1695 } 1696 1697 arvif->is_up = true; 1698 1699 ret = ath10k_mac_vif_fix_hidden_ssid(arvif); 1700 if (ret) { 1701 ath10k_warn(ar, "failed to fix hidden ssid for vdev %i, expect trouble: %d\n", 1702 arvif->vdev_id, ret); 1703 return; 1704 } 1705 1706 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d up\n", arvif->vdev_id); 1707 } 1708 1709 static void ath10k_control_ibss(struct ath10k_vif *arvif, 1710 struct ieee80211_bss_conf *info, 1711 const u8 self_peer[ETH_ALEN]) 1712 { 1713 struct ath10k *ar = arvif->ar; 1714 u32 vdev_param; 1715 int ret = 0; 1716 1717 lockdep_assert_held(&arvif->ar->conf_mutex); 1718 1719 if (!info->ibss_joined) { 1720 if (is_zero_ether_addr(arvif->bssid)) 1721 return; 1722 1723 eth_zero_addr(arvif->bssid); 1724 1725 return; 1726 } 1727 1728 vdev_param = arvif->ar->wmi.vdev_param->atim_window; 1729 ret = ath10k_wmi_vdev_set_param(arvif->ar, arvif->vdev_id, vdev_param, 1730 ATH10K_DEFAULT_ATIM); 1731 if (ret) 1732 ath10k_warn(ar, "failed to set IBSS ATIM for vdev %d: %d\n", 1733 arvif->vdev_id, ret); 1734 } 1735 1736 static int ath10k_mac_vif_recalc_ps_wake_threshold(struct ath10k_vif *arvif) 1737 { 1738 struct ath10k *ar = arvif->ar; 1739 u32 param; 1740 u32 value; 1741 int ret; 1742 1743 lockdep_assert_held(&arvif->ar->conf_mutex); 1744 1745 if (arvif->u.sta.uapsd) 1746 value = WMI_STA_PS_TX_WAKE_THRESHOLD_NEVER; 1747 else 1748 value = WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS; 1749 1750 param = WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD; 1751 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param, value); 1752 if (ret) { 1753 ath10k_warn(ar, "failed to submit ps wake threshold %u on vdev %i: %d\n", 1754 value, arvif->vdev_id, ret); 1755 return ret; 1756 } 1757 1758 return 0; 1759 } 1760 1761 static int ath10k_mac_vif_recalc_ps_poll_count(struct ath10k_vif *arvif) 1762 { 1763 struct ath10k *ar = arvif->ar; 1764 u32 param; 1765 u32 value; 1766 int ret; 1767 1768 lockdep_assert_held(&arvif->ar->conf_mutex); 1769 1770 if (arvif->u.sta.uapsd) 1771 value = WMI_STA_PS_PSPOLL_COUNT_UAPSD; 1772 else 1773 value = WMI_STA_PS_PSPOLL_COUNT_NO_MAX; 1774 1775 param = WMI_STA_PS_PARAM_PSPOLL_COUNT; 1776 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, 1777 param, value); 1778 if (ret) { 1779 ath10k_warn(ar, "failed to submit ps poll count %u on vdev %i: %d\n", 1780 value, arvif->vdev_id, ret); 1781 return ret; 1782 } 1783 1784 return 0; 1785 } 1786 1787 static int ath10k_mac_num_vifs_started(struct ath10k *ar) 1788 { 1789 struct ath10k_vif *arvif; 1790 int num = 0; 1791 1792 lockdep_assert_held(&ar->conf_mutex); 1793 1794 list_for_each_entry(arvif, &ar->arvifs, list) 1795 if (arvif->is_started) 1796 num++; 1797 1798 return num; 1799 } 1800 1801 static int ath10k_mac_vif_setup_ps(struct ath10k_vif *arvif) 1802 { 1803 struct ath10k *ar = arvif->ar; 1804 struct ieee80211_vif *vif = arvif->vif; 1805 struct ieee80211_conf *conf = &ar->hw->conf; 1806 enum wmi_sta_powersave_param param; 1807 enum wmi_sta_ps_mode psmode; 1808 int ret; 1809 int ps_timeout; 1810 bool enable_ps; 1811 1812 lockdep_assert_held(&arvif->ar->conf_mutex); 1813 1814 if (arvif->vif->type != NL80211_IFTYPE_STATION) 1815 return 0; 1816 1817 enable_ps = arvif->ps; 1818 1819 if (enable_ps && ath10k_mac_num_vifs_started(ar) > 1 && 1820 !test_bit(ATH10K_FW_FEATURE_MULTI_VIF_PS_SUPPORT, 1821 ar->running_fw->fw_file.fw_features)) { 1822 ath10k_warn(ar, "refusing to enable ps on vdev %i: not supported by fw\n", 1823 arvif->vdev_id); 1824 enable_ps = false; 1825 } 1826 1827 if (!arvif->is_started) { 1828 /* mac80211 can update vif powersave state while disconnected. 1829 * Firmware doesn't behave nicely and consumes more power than 1830 * necessary if PS is disabled on a non-started vdev. Hence 1831 * force-enable PS for non-running vdevs. 1832 */ 1833 psmode = WMI_STA_PS_MODE_ENABLED; 1834 } else if (enable_ps) { 1835 psmode = WMI_STA_PS_MODE_ENABLED; 1836 param = WMI_STA_PS_PARAM_INACTIVITY_TIME; 1837 1838 ps_timeout = conf->dynamic_ps_timeout; 1839 if (ps_timeout == 0) { 1840 /* Firmware doesn't like 0 */ 1841 ps_timeout = ieee80211_tu_to_usec( 1842 vif->bss_conf.beacon_int) / 1000; 1843 } 1844 1845 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, param, 1846 ps_timeout); 1847 if (ret) { 1848 ath10k_warn(ar, "failed to set inactivity time for vdev %d: %i\n", 1849 arvif->vdev_id, ret); 1850 return ret; 1851 } 1852 } else { 1853 psmode = WMI_STA_PS_MODE_DISABLED; 1854 } 1855 1856 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d psmode %s\n", 1857 arvif->vdev_id, psmode ? "enable" : "disable"); 1858 1859 ret = ath10k_wmi_set_psmode(ar, arvif->vdev_id, psmode); 1860 if (ret) { 1861 ath10k_warn(ar, "failed to set PS Mode %d for vdev %d: %d\n", 1862 psmode, arvif->vdev_id, ret); 1863 return ret; 1864 } 1865 1866 return 0; 1867 } 1868 1869 static int ath10k_mac_vif_disable_keepalive(struct ath10k_vif *arvif) 1870 { 1871 struct ath10k *ar = arvif->ar; 1872 struct wmi_sta_keepalive_arg arg = {}; 1873 int ret; 1874 1875 lockdep_assert_held(&arvif->ar->conf_mutex); 1876 1877 if (arvif->vdev_type != WMI_VDEV_TYPE_STA) 1878 return 0; 1879 1880 if (!test_bit(WMI_SERVICE_STA_KEEP_ALIVE, ar->wmi.svc_map)) 1881 return 0; 1882 1883 /* Some firmware revisions have a bug and ignore the `enabled` field. 1884 * Instead use the interval to disable the keepalive. 1885 */ 1886 arg.vdev_id = arvif->vdev_id; 1887 arg.enabled = 1; 1888 arg.method = WMI_STA_KEEPALIVE_METHOD_NULL_FRAME; 1889 arg.interval = WMI_STA_KEEPALIVE_INTERVAL_DISABLE; 1890 1891 ret = ath10k_wmi_sta_keepalive(ar, &arg); 1892 if (ret) { 1893 ath10k_warn(ar, "failed to submit keepalive on vdev %i: %d\n", 1894 arvif->vdev_id, ret); 1895 return ret; 1896 } 1897 1898 return 0; 1899 } 1900 1901 static void ath10k_mac_vif_ap_csa_count_down(struct ath10k_vif *arvif) 1902 { 1903 struct ath10k *ar = arvif->ar; 1904 struct ieee80211_vif *vif = arvif->vif; 1905 int ret; 1906 1907 lockdep_assert_held(&arvif->ar->conf_mutex); 1908 1909 if (WARN_ON(!test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map))) 1910 return; 1911 1912 if (arvif->vdev_type != WMI_VDEV_TYPE_AP) 1913 return; 1914 1915 if (!vif->csa_active) 1916 return; 1917 1918 if (!arvif->is_up) 1919 return; 1920 1921 if (!ieee80211_csa_is_complete(vif)) { 1922 ieee80211_csa_update_counter(vif); 1923 1924 ret = ath10k_mac_setup_bcn_tmpl(arvif); 1925 if (ret) 1926 ath10k_warn(ar, "failed to update bcn tmpl during csa: %d\n", 1927 ret); 1928 1929 ret = ath10k_mac_setup_prb_tmpl(arvif); 1930 if (ret) 1931 ath10k_warn(ar, "failed to update prb tmpl during csa: %d\n", 1932 ret); 1933 } else { 1934 ieee80211_csa_finish(vif); 1935 } 1936 } 1937 1938 static void ath10k_mac_vif_ap_csa_work(struct work_struct *work) 1939 { 1940 struct ath10k_vif *arvif = container_of(work, struct ath10k_vif, 1941 ap_csa_work); 1942 struct ath10k *ar = arvif->ar; 1943 1944 mutex_lock(&ar->conf_mutex); 1945 ath10k_mac_vif_ap_csa_count_down(arvif); 1946 mutex_unlock(&ar->conf_mutex); 1947 } 1948 1949 static void ath10k_mac_handle_beacon_iter(void *data, u8 *mac, 1950 struct ieee80211_vif *vif) 1951 { 1952 struct sk_buff *skb = data; 1953 struct ieee80211_mgmt *mgmt = (void *)skb->data; 1954 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 1955 1956 if (vif->type != NL80211_IFTYPE_STATION) 1957 return; 1958 1959 if (!ether_addr_equal(mgmt->bssid, vif->bss_conf.bssid)) 1960 return; 1961 1962 cancel_delayed_work(&arvif->connection_loss_work); 1963 } 1964 1965 void ath10k_mac_handle_beacon(struct ath10k *ar, struct sk_buff *skb) 1966 { 1967 ieee80211_iterate_active_interfaces_atomic(ar->hw, 1968 IEEE80211_IFACE_ITER_NORMAL, 1969 ath10k_mac_handle_beacon_iter, 1970 skb); 1971 } 1972 1973 static void ath10k_mac_handle_beacon_miss_iter(void *data, u8 *mac, 1974 struct ieee80211_vif *vif) 1975 { 1976 u32 *vdev_id = data; 1977 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 1978 struct ath10k *ar = arvif->ar; 1979 struct ieee80211_hw *hw = ar->hw; 1980 1981 if (arvif->vdev_id != *vdev_id) 1982 return; 1983 1984 if (!arvif->is_up) 1985 return; 1986 1987 ieee80211_beacon_loss(vif); 1988 1989 /* Firmware doesn't report beacon loss events repeatedly. If AP probe 1990 * (done by mac80211) succeeds but beacons do not resume then it 1991 * doesn't make sense to continue operation. Queue connection loss work 1992 * which can be cancelled when beacon is received. 1993 */ 1994 ieee80211_queue_delayed_work(hw, &arvif->connection_loss_work, 1995 ATH10K_CONNECTION_LOSS_HZ); 1996 } 1997 1998 void ath10k_mac_handle_beacon_miss(struct ath10k *ar, u32 vdev_id) 1999 { 2000 ieee80211_iterate_active_interfaces_atomic(ar->hw, 2001 IEEE80211_IFACE_ITER_NORMAL, 2002 ath10k_mac_handle_beacon_miss_iter, 2003 &vdev_id); 2004 } 2005 2006 static void ath10k_mac_vif_sta_connection_loss_work(struct work_struct *work) 2007 { 2008 struct ath10k_vif *arvif = container_of(work, struct ath10k_vif, 2009 connection_loss_work.work); 2010 struct ieee80211_vif *vif = arvif->vif; 2011 2012 if (!arvif->is_up) 2013 return; 2014 2015 ieee80211_connection_loss(vif); 2016 } 2017 2018 /**********************/ 2019 /* Station management */ 2020 /**********************/ 2021 2022 static u32 ath10k_peer_assoc_h_listen_intval(struct ath10k *ar, 2023 struct ieee80211_vif *vif) 2024 { 2025 /* Some firmware revisions have unstable STA powersave when listen 2026 * interval is set too high (e.g. 5). The symptoms are firmware doesn't 2027 * generate NullFunc frames properly even if buffered frames have been 2028 * indicated in Beacon TIM. Firmware would seldom wake up to pull 2029 * buffered frames. Often pinging the device from AP would simply fail. 2030 * 2031 * As a workaround set it to 1. 2032 */ 2033 if (vif->type == NL80211_IFTYPE_STATION) 2034 return 1; 2035 2036 return ar->hw->conf.listen_interval; 2037 } 2038 2039 static void ath10k_peer_assoc_h_basic(struct ath10k *ar, 2040 struct ieee80211_vif *vif, 2041 struct ieee80211_sta *sta, 2042 struct wmi_peer_assoc_complete_arg *arg) 2043 { 2044 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 2045 u32 aid; 2046 2047 lockdep_assert_held(&ar->conf_mutex); 2048 2049 if (vif->type == NL80211_IFTYPE_STATION) 2050 aid = vif->bss_conf.aid; 2051 else 2052 aid = sta->aid; 2053 2054 ether_addr_copy(arg->addr, sta->addr); 2055 arg->vdev_id = arvif->vdev_id; 2056 arg->peer_aid = aid; 2057 arg->peer_flags |= arvif->ar->wmi.peer_flags->auth; 2058 arg->peer_listen_intval = ath10k_peer_assoc_h_listen_intval(ar, vif); 2059 arg->peer_num_spatial_streams = 1; 2060 arg->peer_caps = vif->bss_conf.assoc_capability; 2061 } 2062 2063 static void ath10k_peer_assoc_h_crypto(struct ath10k *ar, 2064 struct ieee80211_vif *vif, 2065 struct ieee80211_sta *sta, 2066 struct wmi_peer_assoc_complete_arg *arg) 2067 { 2068 struct ieee80211_bss_conf *info = &vif->bss_conf; 2069 struct cfg80211_chan_def def; 2070 struct cfg80211_bss *bss; 2071 const u8 *rsnie = NULL; 2072 const u8 *wpaie = NULL; 2073 2074 lockdep_assert_held(&ar->conf_mutex); 2075 2076 if (WARN_ON(ath10k_mac_vif_chan(vif, &def))) 2077 return; 2078 2079 bss = cfg80211_get_bss(ar->hw->wiphy, def.chan, info->bssid, NULL, 0, 2080 IEEE80211_BSS_TYPE_ANY, IEEE80211_PRIVACY_ANY); 2081 if (bss) { 2082 const struct cfg80211_bss_ies *ies; 2083 2084 rcu_read_lock(); 2085 rsnie = ieee80211_bss_get_ie(bss, WLAN_EID_RSN); 2086 2087 ies = rcu_dereference(bss->ies); 2088 2089 wpaie = cfg80211_find_vendor_ie(WLAN_OUI_MICROSOFT, 2090 WLAN_OUI_TYPE_MICROSOFT_WPA, 2091 ies->data, 2092 ies->len); 2093 rcu_read_unlock(); 2094 cfg80211_put_bss(ar->hw->wiphy, bss); 2095 } 2096 2097 /* FIXME: base on RSN IE/WPA IE is a correct idea? */ 2098 if (rsnie || wpaie) { 2099 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: rsn ie found\n", __func__); 2100 arg->peer_flags |= ar->wmi.peer_flags->need_ptk_4_way; 2101 } 2102 2103 if (wpaie) { 2104 ath10k_dbg(ar, ATH10K_DBG_WMI, "%s: wpa ie found\n", __func__); 2105 arg->peer_flags |= ar->wmi.peer_flags->need_gtk_2_way; 2106 } 2107 2108 if (sta->mfp && 2109 test_bit(ATH10K_FW_FEATURE_MFP_SUPPORT, 2110 ar->running_fw->fw_file.fw_features)) { 2111 arg->peer_flags |= ar->wmi.peer_flags->pmf; 2112 } 2113 } 2114 2115 static void ath10k_peer_assoc_h_rates(struct ath10k *ar, 2116 struct ieee80211_vif *vif, 2117 struct ieee80211_sta *sta, 2118 struct wmi_peer_assoc_complete_arg *arg) 2119 { 2120 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 2121 struct wmi_rate_set_arg *rateset = &arg->peer_legacy_rates; 2122 struct cfg80211_chan_def def; 2123 const struct ieee80211_supported_band *sband; 2124 const struct ieee80211_rate *rates; 2125 enum nl80211_band band; 2126 u32 ratemask; 2127 u8 rate; 2128 int i; 2129 2130 lockdep_assert_held(&ar->conf_mutex); 2131 2132 if (WARN_ON(ath10k_mac_vif_chan(vif, &def))) 2133 return; 2134 2135 band = def.chan->band; 2136 sband = ar->hw->wiphy->bands[band]; 2137 ratemask = sta->supp_rates[band]; 2138 ratemask &= arvif->bitrate_mask.control[band].legacy; 2139 rates = sband->bitrates; 2140 2141 rateset->num_rates = 0; 2142 2143 for (i = 0; i < 32; i++, ratemask >>= 1, rates++) { 2144 if (!(ratemask & 1)) 2145 continue; 2146 2147 rate = ath10k_mac_bitrate_to_rate(rates->bitrate); 2148 rateset->rates[rateset->num_rates] = rate; 2149 rateset->num_rates++; 2150 } 2151 } 2152 2153 static bool 2154 ath10k_peer_assoc_h_ht_masked(const u8 ht_mcs_mask[IEEE80211_HT_MCS_MASK_LEN]) 2155 { 2156 int nss; 2157 2158 for (nss = 0; nss < IEEE80211_HT_MCS_MASK_LEN; nss++) 2159 if (ht_mcs_mask[nss]) 2160 return false; 2161 2162 return true; 2163 } 2164 2165 static bool 2166 ath10k_peer_assoc_h_vht_masked(const u16 vht_mcs_mask[NL80211_VHT_NSS_MAX]) 2167 { 2168 int nss; 2169 2170 for (nss = 0; nss < NL80211_VHT_NSS_MAX; nss++) 2171 if (vht_mcs_mask[nss]) 2172 return false; 2173 2174 return true; 2175 } 2176 2177 static void ath10k_peer_assoc_h_ht(struct ath10k *ar, 2178 struct ieee80211_vif *vif, 2179 struct ieee80211_sta *sta, 2180 struct wmi_peer_assoc_complete_arg *arg) 2181 { 2182 const struct ieee80211_sta_ht_cap *ht_cap = &sta->ht_cap; 2183 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 2184 struct cfg80211_chan_def def; 2185 enum nl80211_band band; 2186 const u8 *ht_mcs_mask; 2187 const u16 *vht_mcs_mask; 2188 int i, n; 2189 u8 max_nss; 2190 u32 stbc; 2191 2192 lockdep_assert_held(&ar->conf_mutex); 2193 2194 if (WARN_ON(ath10k_mac_vif_chan(vif, &def))) 2195 return; 2196 2197 if (!ht_cap->ht_supported) 2198 return; 2199 2200 band = def.chan->band; 2201 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs; 2202 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs; 2203 2204 if (ath10k_peer_assoc_h_ht_masked(ht_mcs_mask) && 2205 ath10k_peer_assoc_h_vht_masked(vht_mcs_mask)) 2206 return; 2207 2208 arg->peer_flags |= ar->wmi.peer_flags->ht; 2209 arg->peer_max_mpdu = (1 << (IEEE80211_HT_MAX_AMPDU_FACTOR + 2210 ht_cap->ampdu_factor)) - 1; 2211 2212 arg->peer_mpdu_density = 2213 ath10k_parse_mpdudensity(ht_cap->ampdu_density); 2214 2215 arg->peer_ht_caps = ht_cap->cap; 2216 arg->peer_rate_caps |= WMI_RC_HT_FLAG; 2217 2218 if (ht_cap->cap & IEEE80211_HT_CAP_LDPC_CODING) 2219 arg->peer_flags |= ar->wmi.peer_flags->ldbc; 2220 2221 if (sta->bandwidth >= IEEE80211_STA_RX_BW_40) { 2222 arg->peer_flags |= ar->wmi.peer_flags->bw40; 2223 arg->peer_rate_caps |= WMI_RC_CW40_FLAG; 2224 } 2225 2226 if (arvif->bitrate_mask.control[band].gi != NL80211_TXRATE_FORCE_LGI) { 2227 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_20) 2228 arg->peer_rate_caps |= WMI_RC_SGI_FLAG; 2229 2230 if (ht_cap->cap & IEEE80211_HT_CAP_SGI_40) 2231 arg->peer_rate_caps |= WMI_RC_SGI_FLAG; 2232 } 2233 2234 if (ht_cap->cap & IEEE80211_HT_CAP_TX_STBC) { 2235 arg->peer_rate_caps |= WMI_RC_TX_STBC_FLAG; 2236 arg->peer_flags |= ar->wmi.peer_flags->stbc; 2237 } 2238 2239 if (ht_cap->cap & IEEE80211_HT_CAP_RX_STBC) { 2240 stbc = ht_cap->cap & IEEE80211_HT_CAP_RX_STBC; 2241 stbc = stbc >> IEEE80211_HT_CAP_RX_STBC_SHIFT; 2242 stbc = stbc << WMI_RC_RX_STBC_FLAG_S; 2243 arg->peer_rate_caps |= stbc; 2244 arg->peer_flags |= ar->wmi.peer_flags->stbc; 2245 } 2246 2247 if (ht_cap->mcs.rx_mask[1] && ht_cap->mcs.rx_mask[2]) 2248 arg->peer_rate_caps |= WMI_RC_TS_FLAG; 2249 else if (ht_cap->mcs.rx_mask[1]) 2250 arg->peer_rate_caps |= WMI_RC_DS_FLAG; 2251 2252 for (i = 0, n = 0, max_nss = 0; i < IEEE80211_HT_MCS_MASK_LEN * 8; i++) 2253 if ((ht_cap->mcs.rx_mask[i / 8] & BIT(i % 8)) && 2254 (ht_mcs_mask[i / 8] & BIT(i % 8))) { 2255 max_nss = (i / 8) + 1; 2256 arg->peer_ht_rates.rates[n++] = i; 2257 } 2258 2259 /* 2260 * This is a workaround for HT-enabled STAs which break the spec 2261 * and have no HT capabilities RX mask (no HT RX MCS map). 2262 * 2263 * As per spec, in section 20.3.5 Modulation and coding scheme (MCS), 2264 * MCS 0 through 7 are mandatory in 20MHz with 800 ns GI at all STAs. 2265 * 2266 * Firmware asserts if such situation occurs. 2267 */ 2268 if (n == 0) { 2269 arg->peer_ht_rates.num_rates = 8; 2270 for (i = 0; i < arg->peer_ht_rates.num_rates; i++) 2271 arg->peer_ht_rates.rates[i] = i; 2272 } else { 2273 arg->peer_ht_rates.num_rates = n; 2274 arg->peer_num_spatial_streams = min(sta->rx_nss, max_nss); 2275 } 2276 2277 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ht peer %pM mcs cnt %d nss %d\n", 2278 arg->addr, 2279 arg->peer_ht_rates.num_rates, 2280 arg->peer_num_spatial_streams); 2281 } 2282 2283 static int ath10k_peer_assoc_qos_ap(struct ath10k *ar, 2284 struct ath10k_vif *arvif, 2285 struct ieee80211_sta *sta) 2286 { 2287 u32 uapsd = 0; 2288 u32 max_sp = 0; 2289 int ret = 0; 2290 2291 lockdep_assert_held(&ar->conf_mutex); 2292 2293 if (sta->wme && sta->uapsd_queues) { 2294 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac uapsd_queues 0x%x max_sp %d\n", 2295 sta->uapsd_queues, sta->max_sp); 2296 2297 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VO) 2298 uapsd |= WMI_AP_PS_UAPSD_AC3_DELIVERY_EN | 2299 WMI_AP_PS_UAPSD_AC3_TRIGGER_EN; 2300 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_VI) 2301 uapsd |= WMI_AP_PS_UAPSD_AC2_DELIVERY_EN | 2302 WMI_AP_PS_UAPSD_AC2_TRIGGER_EN; 2303 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BK) 2304 uapsd |= WMI_AP_PS_UAPSD_AC1_DELIVERY_EN | 2305 WMI_AP_PS_UAPSD_AC1_TRIGGER_EN; 2306 if (sta->uapsd_queues & IEEE80211_WMM_IE_STA_QOSINFO_AC_BE) 2307 uapsd |= WMI_AP_PS_UAPSD_AC0_DELIVERY_EN | 2308 WMI_AP_PS_UAPSD_AC0_TRIGGER_EN; 2309 2310 if (sta->max_sp < MAX_WMI_AP_PS_PEER_PARAM_MAX_SP) 2311 max_sp = sta->max_sp; 2312 2313 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, 2314 sta->addr, 2315 WMI_AP_PS_PEER_PARAM_UAPSD, 2316 uapsd); 2317 if (ret) { 2318 ath10k_warn(ar, "failed to set ap ps peer param uapsd for vdev %i: %d\n", 2319 arvif->vdev_id, ret); 2320 return ret; 2321 } 2322 2323 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, 2324 sta->addr, 2325 WMI_AP_PS_PEER_PARAM_MAX_SP, 2326 max_sp); 2327 if (ret) { 2328 ath10k_warn(ar, "failed to set ap ps peer param max sp for vdev %i: %d\n", 2329 arvif->vdev_id, ret); 2330 return ret; 2331 } 2332 2333 /* TODO setup this based on STA listen interval and 2334 beacon interval. Currently we don't know 2335 sta->listen_interval - mac80211 patch required. 2336 Currently use 10 seconds */ 2337 ret = ath10k_wmi_set_ap_ps_param(ar, arvif->vdev_id, sta->addr, 2338 WMI_AP_PS_PEER_PARAM_AGEOUT_TIME, 2339 10); 2340 if (ret) { 2341 ath10k_warn(ar, "failed to set ap ps peer param ageout time for vdev %i: %d\n", 2342 arvif->vdev_id, ret); 2343 return ret; 2344 } 2345 } 2346 2347 return 0; 2348 } 2349 2350 static u16 2351 ath10k_peer_assoc_h_vht_limit(u16 tx_mcs_set, 2352 const u16 vht_mcs_limit[NL80211_VHT_NSS_MAX]) 2353 { 2354 int idx_limit; 2355 int nss; 2356 u16 mcs_map; 2357 u16 mcs; 2358 2359 for (nss = 0; nss < NL80211_VHT_NSS_MAX; nss++) { 2360 mcs_map = ath10k_mac_get_max_vht_mcs_map(tx_mcs_set, nss) & 2361 vht_mcs_limit[nss]; 2362 2363 if (mcs_map) 2364 idx_limit = fls(mcs_map) - 1; 2365 else 2366 idx_limit = -1; 2367 2368 switch (idx_limit) { 2369 case 0: /* fall through */ 2370 case 1: /* fall through */ 2371 case 2: /* fall through */ 2372 case 3: /* fall through */ 2373 case 4: /* fall through */ 2374 case 5: /* fall through */ 2375 case 6: /* fall through */ 2376 default: 2377 /* see ath10k_mac_can_set_bitrate_mask() */ 2378 WARN_ON(1); 2379 /* fall through */ 2380 case -1: 2381 mcs = IEEE80211_VHT_MCS_NOT_SUPPORTED; 2382 break; 2383 case 7: 2384 mcs = IEEE80211_VHT_MCS_SUPPORT_0_7; 2385 break; 2386 case 8: 2387 mcs = IEEE80211_VHT_MCS_SUPPORT_0_8; 2388 break; 2389 case 9: 2390 mcs = IEEE80211_VHT_MCS_SUPPORT_0_9; 2391 break; 2392 } 2393 2394 tx_mcs_set &= ~(0x3 << (nss * 2)); 2395 tx_mcs_set |= mcs << (nss * 2); 2396 } 2397 2398 return tx_mcs_set; 2399 } 2400 2401 static void ath10k_peer_assoc_h_vht(struct ath10k *ar, 2402 struct ieee80211_vif *vif, 2403 struct ieee80211_sta *sta, 2404 struct wmi_peer_assoc_complete_arg *arg) 2405 { 2406 const struct ieee80211_sta_vht_cap *vht_cap = &sta->vht_cap; 2407 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 2408 struct cfg80211_chan_def def; 2409 enum nl80211_band band; 2410 const u16 *vht_mcs_mask; 2411 u8 ampdu_factor; 2412 2413 if (WARN_ON(ath10k_mac_vif_chan(vif, &def))) 2414 return; 2415 2416 if (!vht_cap->vht_supported) 2417 return; 2418 2419 band = def.chan->band; 2420 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs; 2421 2422 if (ath10k_peer_assoc_h_vht_masked(vht_mcs_mask)) 2423 return; 2424 2425 arg->peer_flags |= ar->wmi.peer_flags->vht; 2426 2427 if (def.chan->band == NL80211_BAND_2GHZ) 2428 arg->peer_flags |= ar->wmi.peer_flags->vht_2g; 2429 2430 arg->peer_vht_caps = vht_cap->cap; 2431 2432 ampdu_factor = (vht_cap->cap & 2433 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_MASK) >> 2434 IEEE80211_VHT_CAP_MAX_A_MPDU_LENGTH_EXPONENT_SHIFT; 2435 2436 /* Workaround: Some Netgear/Linksys 11ac APs set Rx A-MPDU factor to 2437 * zero in VHT IE. Using it would result in degraded throughput. 2438 * arg->peer_max_mpdu at this point contains HT max_mpdu so keep 2439 * it if VHT max_mpdu is smaller. */ 2440 arg->peer_max_mpdu = max(arg->peer_max_mpdu, 2441 (1U << (IEEE80211_HT_MAX_AMPDU_FACTOR + 2442 ampdu_factor)) - 1); 2443 2444 if (sta->bandwidth == IEEE80211_STA_RX_BW_80) 2445 arg->peer_flags |= ar->wmi.peer_flags->bw80; 2446 2447 arg->peer_vht_rates.rx_max_rate = 2448 __le16_to_cpu(vht_cap->vht_mcs.rx_highest); 2449 arg->peer_vht_rates.rx_mcs_set = 2450 __le16_to_cpu(vht_cap->vht_mcs.rx_mcs_map); 2451 arg->peer_vht_rates.tx_max_rate = 2452 __le16_to_cpu(vht_cap->vht_mcs.tx_highest); 2453 arg->peer_vht_rates.tx_mcs_set = ath10k_peer_assoc_h_vht_limit( 2454 __le16_to_cpu(vht_cap->vht_mcs.tx_mcs_map), vht_mcs_mask); 2455 2456 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vht peer %pM max_mpdu %d flags 0x%x\n", 2457 sta->addr, arg->peer_max_mpdu, arg->peer_flags); 2458 } 2459 2460 static void ath10k_peer_assoc_h_qos(struct ath10k *ar, 2461 struct ieee80211_vif *vif, 2462 struct ieee80211_sta *sta, 2463 struct wmi_peer_assoc_complete_arg *arg) 2464 { 2465 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 2466 2467 switch (arvif->vdev_type) { 2468 case WMI_VDEV_TYPE_AP: 2469 if (sta->wme) 2470 arg->peer_flags |= arvif->ar->wmi.peer_flags->qos; 2471 2472 if (sta->wme && sta->uapsd_queues) { 2473 arg->peer_flags |= arvif->ar->wmi.peer_flags->apsd; 2474 arg->peer_rate_caps |= WMI_RC_UAPSD_FLAG; 2475 } 2476 break; 2477 case WMI_VDEV_TYPE_STA: 2478 if (vif->bss_conf.qos) 2479 arg->peer_flags |= arvif->ar->wmi.peer_flags->qos; 2480 break; 2481 case WMI_VDEV_TYPE_IBSS: 2482 if (sta->wme) 2483 arg->peer_flags |= arvif->ar->wmi.peer_flags->qos; 2484 break; 2485 default: 2486 break; 2487 } 2488 2489 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM qos %d\n", 2490 sta->addr, !!(arg->peer_flags & 2491 arvif->ar->wmi.peer_flags->qos)); 2492 } 2493 2494 static bool ath10k_mac_sta_has_ofdm_only(struct ieee80211_sta *sta) 2495 { 2496 return sta->supp_rates[NL80211_BAND_2GHZ] >> 2497 ATH10K_MAC_FIRST_OFDM_RATE_IDX; 2498 } 2499 2500 static void ath10k_peer_assoc_h_phymode(struct ath10k *ar, 2501 struct ieee80211_vif *vif, 2502 struct ieee80211_sta *sta, 2503 struct wmi_peer_assoc_complete_arg *arg) 2504 { 2505 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 2506 struct cfg80211_chan_def def; 2507 enum nl80211_band band; 2508 const u8 *ht_mcs_mask; 2509 const u16 *vht_mcs_mask; 2510 enum wmi_phy_mode phymode = MODE_UNKNOWN; 2511 2512 if (WARN_ON(ath10k_mac_vif_chan(vif, &def))) 2513 return; 2514 2515 band = def.chan->band; 2516 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs; 2517 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs; 2518 2519 switch (band) { 2520 case NL80211_BAND_2GHZ: 2521 if (sta->vht_cap.vht_supported && 2522 !ath10k_peer_assoc_h_vht_masked(vht_mcs_mask)) { 2523 if (sta->bandwidth == IEEE80211_STA_RX_BW_40) 2524 phymode = MODE_11AC_VHT40; 2525 else 2526 phymode = MODE_11AC_VHT20; 2527 } else if (sta->ht_cap.ht_supported && 2528 !ath10k_peer_assoc_h_ht_masked(ht_mcs_mask)) { 2529 if (sta->bandwidth == IEEE80211_STA_RX_BW_40) 2530 phymode = MODE_11NG_HT40; 2531 else 2532 phymode = MODE_11NG_HT20; 2533 } else if (ath10k_mac_sta_has_ofdm_only(sta)) { 2534 phymode = MODE_11G; 2535 } else { 2536 phymode = MODE_11B; 2537 } 2538 2539 break; 2540 case NL80211_BAND_5GHZ: 2541 /* 2542 * Check VHT first. 2543 */ 2544 if (sta->vht_cap.vht_supported && 2545 !ath10k_peer_assoc_h_vht_masked(vht_mcs_mask)) { 2546 if (sta->bandwidth == IEEE80211_STA_RX_BW_80) 2547 phymode = MODE_11AC_VHT80; 2548 else if (sta->bandwidth == IEEE80211_STA_RX_BW_40) 2549 phymode = MODE_11AC_VHT40; 2550 else if (sta->bandwidth == IEEE80211_STA_RX_BW_20) 2551 phymode = MODE_11AC_VHT20; 2552 } else if (sta->ht_cap.ht_supported && 2553 !ath10k_peer_assoc_h_ht_masked(ht_mcs_mask)) { 2554 if (sta->bandwidth >= IEEE80211_STA_RX_BW_40) 2555 phymode = MODE_11NA_HT40; 2556 else 2557 phymode = MODE_11NA_HT20; 2558 } else { 2559 phymode = MODE_11A; 2560 } 2561 2562 break; 2563 default: 2564 break; 2565 } 2566 2567 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac peer %pM phymode %s\n", 2568 sta->addr, ath10k_wmi_phymode_str(phymode)); 2569 2570 arg->peer_phymode = phymode; 2571 WARN_ON(phymode == MODE_UNKNOWN); 2572 } 2573 2574 static int ath10k_peer_assoc_prepare(struct ath10k *ar, 2575 struct ieee80211_vif *vif, 2576 struct ieee80211_sta *sta, 2577 struct wmi_peer_assoc_complete_arg *arg) 2578 { 2579 lockdep_assert_held(&ar->conf_mutex); 2580 2581 memset(arg, 0, sizeof(*arg)); 2582 2583 ath10k_peer_assoc_h_basic(ar, vif, sta, arg); 2584 ath10k_peer_assoc_h_crypto(ar, vif, sta, arg); 2585 ath10k_peer_assoc_h_rates(ar, vif, sta, arg); 2586 ath10k_peer_assoc_h_ht(ar, vif, sta, arg); 2587 ath10k_peer_assoc_h_vht(ar, vif, sta, arg); 2588 ath10k_peer_assoc_h_qos(ar, vif, sta, arg); 2589 ath10k_peer_assoc_h_phymode(ar, vif, sta, arg); 2590 2591 return 0; 2592 } 2593 2594 static const u32 ath10k_smps_map[] = { 2595 [WLAN_HT_CAP_SM_PS_STATIC] = WMI_PEER_SMPS_STATIC, 2596 [WLAN_HT_CAP_SM_PS_DYNAMIC] = WMI_PEER_SMPS_DYNAMIC, 2597 [WLAN_HT_CAP_SM_PS_INVALID] = WMI_PEER_SMPS_PS_NONE, 2598 [WLAN_HT_CAP_SM_PS_DISABLED] = WMI_PEER_SMPS_PS_NONE, 2599 }; 2600 2601 static int ath10k_setup_peer_smps(struct ath10k *ar, struct ath10k_vif *arvif, 2602 const u8 *addr, 2603 const struct ieee80211_sta_ht_cap *ht_cap) 2604 { 2605 int smps; 2606 2607 if (!ht_cap->ht_supported) 2608 return 0; 2609 2610 smps = ht_cap->cap & IEEE80211_HT_CAP_SM_PS; 2611 smps >>= IEEE80211_HT_CAP_SM_PS_SHIFT; 2612 2613 if (smps >= ARRAY_SIZE(ath10k_smps_map)) 2614 return -EINVAL; 2615 2616 return ath10k_wmi_peer_set_param(ar, arvif->vdev_id, addr, 2617 WMI_PEER_SMPS_STATE, 2618 ath10k_smps_map[smps]); 2619 } 2620 2621 static int ath10k_mac_vif_recalc_txbf(struct ath10k *ar, 2622 struct ieee80211_vif *vif, 2623 struct ieee80211_sta_vht_cap vht_cap) 2624 { 2625 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 2626 int ret; 2627 u32 param; 2628 u32 value; 2629 2630 if (ath10k_wmi_get_txbf_conf_scheme(ar) != WMI_TXBF_CONF_AFTER_ASSOC) 2631 return 0; 2632 2633 if (!(ar->vht_cap_info & 2634 (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE | 2635 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE | 2636 IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE | 2637 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE))) 2638 return 0; 2639 2640 param = ar->wmi.vdev_param->txbf; 2641 value = 0; 2642 2643 if (WARN_ON(param == WMI_VDEV_PARAM_UNSUPPORTED)) 2644 return 0; 2645 2646 /* The following logic is correct. If a remote STA advertises support 2647 * for being a beamformer then we should enable us being a beamformee. 2648 */ 2649 2650 if (ar->vht_cap_info & 2651 (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE | 2652 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)) { 2653 if (vht_cap.cap & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE) 2654 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE; 2655 2656 if (vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE) 2657 value |= WMI_VDEV_PARAM_TXBF_MU_TX_BFEE; 2658 } 2659 2660 if (ar->vht_cap_info & 2661 (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE | 2662 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)) { 2663 if (vht_cap.cap & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE) 2664 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER; 2665 2666 if (vht_cap.cap & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE) 2667 value |= WMI_VDEV_PARAM_TXBF_MU_TX_BFER; 2668 } 2669 2670 if (value & WMI_VDEV_PARAM_TXBF_MU_TX_BFEE) 2671 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE; 2672 2673 if (value & WMI_VDEV_PARAM_TXBF_MU_TX_BFER) 2674 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER; 2675 2676 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, param, value); 2677 if (ret) { 2678 ath10k_warn(ar, "failed to submit vdev param txbf 0x%x: %d\n", 2679 value, ret); 2680 return ret; 2681 } 2682 2683 return 0; 2684 } 2685 2686 /* can be called only in mac80211 callbacks due to `key_count` usage */ 2687 static void ath10k_bss_assoc(struct ieee80211_hw *hw, 2688 struct ieee80211_vif *vif, 2689 struct ieee80211_bss_conf *bss_conf) 2690 { 2691 struct ath10k *ar = hw->priv; 2692 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 2693 struct ieee80211_sta_ht_cap ht_cap; 2694 struct ieee80211_sta_vht_cap vht_cap; 2695 struct wmi_peer_assoc_complete_arg peer_arg; 2696 struct ieee80211_sta *ap_sta; 2697 int ret; 2698 2699 lockdep_assert_held(&ar->conf_mutex); 2700 2701 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i assoc bssid %pM aid %d\n", 2702 arvif->vdev_id, arvif->bssid, arvif->aid); 2703 2704 rcu_read_lock(); 2705 2706 ap_sta = ieee80211_find_sta(vif, bss_conf->bssid); 2707 if (!ap_sta) { 2708 ath10k_warn(ar, "failed to find station entry for bss %pM vdev %i\n", 2709 bss_conf->bssid, arvif->vdev_id); 2710 rcu_read_unlock(); 2711 return; 2712 } 2713 2714 /* ap_sta must be accessed only within rcu section which must be left 2715 * before calling ath10k_setup_peer_smps() which might sleep. */ 2716 ht_cap = ap_sta->ht_cap; 2717 vht_cap = ap_sta->vht_cap; 2718 2719 ret = ath10k_peer_assoc_prepare(ar, vif, ap_sta, &peer_arg); 2720 if (ret) { 2721 ath10k_warn(ar, "failed to prepare peer assoc for %pM vdev %i: %d\n", 2722 bss_conf->bssid, arvif->vdev_id, ret); 2723 rcu_read_unlock(); 2724 return; 2725 } 2726 2727 rcu_read_unlock(); 2728 2729 ret = ath10k_wmi_peer_assoc(ar, &peer_arg); 2730 if (ret) { 2731 ath10k_warn(ar, "failed to run peer assoc for %pM vdev %i: %d\n", 2732 bss_conf->bssid, arvif->vdev_id, ret); 2733 return; 2734 } 2735 2736 ret = ath10k_setup_peer_smps(ar, arvif, bss_conf->bssid, &ht_cap); 2737 if (ret) { 2738 ath10k_warn(ar, "failed to setup peer SMPS for vdev %i: %d\n", 2739 arvif->vdev_id, ret); 2740 return; 2741 } 2742 2743 ret = ath10k_mac_vif_recalc_txbf(ar, vif, vht_cap); 2744 if (ret) { 2745 ath10k_warn(ar, "failed to recalc txbf for vdev %i on bss %pM: %d\n", 2746 arvif->vdev_id, bss_conf->bssid, ret); 2747 return; 2748 } 2749 2750 ath10k_dbg(ar, ATH10K_DBG_MAC, 2751 "mac vdev %d up (associated) bssid %pM aid %d\n", 2752 arvif->vdev_id, bss_conf->bssid, bss_conf->aid); 2753 2754 WARN_ON(arvif->is_up); 2755 2756 arvif->aid = bss_conf->aid; 2757 ether_addr_copy(arvif->bssid, bss_conf->bssid); 2758 2759 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, arvif->aid, arvif->bssid); 2760 if (ret) { 2761 ath10k_warn(ar, "failed to set vdev %d up: %d\n", 2762 arvif->vdev_id, ret); 2763 return; 2764 } 2765 2766 arvif->is_up = true; 2767 2768 /* Workaround: Some firmware revisions (tested with qca6174 2769 * WLAN.RM.2.0-00073) have buggy powersave state machine and must be 2770 * poked with peer param command. 2771 */ 2772 ret = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, arvif->bssid, 2773 WMI_PEER_DUMMY_VAR, 1); 2774 if (ret) { 2775 ath10k_warn(ar, "failed to poke peer %pM param for ps workaround on vdev %i: %d\n", 2776 arvif->bssid, arvif->vdev_id, ret); 2777 return; 2778 } 2779 } 2780 2781 static void ath10k_bss_disassoc(struct ieee80211_hw *hw, 2782 struct ieee80211_vif *vif) 2783 { 2784 struct ath10k *ar = hw->priv; 2785 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 2786 struct ieee80211_sta_vht_cap vht_cap = {}; 2787 int ret; 2788 2789 lockdep_assert_held(&ar->conf_mutex); 2790 2791 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i disassoc bssid %pM\n", 2792 arvif->vdev_id, arvif->bssid); 2793 2794 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id); 2795 if (ret) 2796 ath10k_warn(ar, "faield to down vdev %i: %d\n", 2797 arvif->vdev_id, ret); 2798 2799 arvif->def_wep_key_idx = -1; 2800 2801 ret = ath10k_mac_vif_recalc_txbf(ar, vif, vht_cap); 2802 if (ret) { 2803 ath10k_warn(ar, "failed to recalc txbf for vdev %i: %d\n", 2804 arvif->vdev_id, ret); 2805 return; 2806 } 2807 2808 arvif->is_up = false; 2809 2810 cancel_delayed_work_sync(&arvif->connection_loss_work); 2811 } 2812 2813 static int ath10k_station_assoc(struct ath10k *ar, 2814 struct ieee80211_vif *vif, 2815 struct ieee80211_sta *sta, 2816 bool reassoc) 2817 { 2818 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 2819 struct wmi_peer_assoc_complete_arg peer_arg; 2820 int ret = 0; 2821 2822 lockdep_assert_held(&ar->conf_mutex); 2823 2824 ret = ath10k_peer_assoc_prepare(ar, vif, sta, &peer_arg); 2825 if (ret) { 2826 ath10k_warn(ar, "failed to prepare WMI peer assoc for %pM vdev %i: %i\n", 2827 sta->addr, arvif->vdev_id, ret); 2828 return ret; 2829 } 2830 2831 ret = ath10k_wmi_peer_assoc(ar, &peer_arg); 2832 if (ret) { 2833 ath10k_warn(ar, "failed to run peer assoc for STA %pM vdev %i: %d\n", 2834 sta->addr, arvif->vdev_id, ret); 2835 return ret; 2836 } 2837 2838 /* Re-assoc is run only to update supported rates for given station. It 2839 * doesn't make much sense to reconfigure the peer completely. 2840 */ 2841 if (!reassoc) { 2842 ret = ath10k_setup_peer_smps(ar, arvif, sta->addr, 2843 &sta->ht_cap); 2844 if (ret) { 2845 ath10k_warn(ar, "failed to setup peer SMPS for vdev %d: %d\n", 2846 arvif->vdev_id, ret); 2847 return ret; 2848 } 2849 2850 ret = ath10k_peer_assoc_qos_ap(ar, arvif, sta); 2851 if (ret) { 2852 ath10k_warn(ar, "failed to set qos params for STA %pM for vdev %i: %d\n", 2853 sta->addr, arvif->vdev_id, ret); 2854 return ret; 2855 } 2856 2857 if (!sta->wme) { 2858 arvif->num_legacy_stations++; 2859 ret = ath10k_recalc_rtscts_prot(arvif); 2860 if (ret) { 2861 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n", 2862 arvif->vdev_id, ret); 2863 return ret; 2864 } 2865 } 2866 2867 /* Plumb cached keys only for static WEP */ 2868 if (arvif->def_wep_key_idx != -1) { 2869 ret = ath10k_install_peer_wep_keys(arvif, sta->addr); 2870 if (ret) { 2871 ath10k_warn(ar, "failed to install peer wep keys for vdev %i: %d\n", 2872 arvif->vdev_id, ret); 2873 return ret; 2874 } 2875 } 2876 } 2877 2878 return ret; 2879 } 2880 2881 static int ath10k_station_disassoc(struct ath10k *ar, 2882 struct ieee80211_vif *vif, 2883 struct ieee80211_sta *sta) 2884 { 2885 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 2886 int ret = 0; 2887 2888 lockdep_assert_held(&ar->conf_mutex); 2889 2890 if (!sta->wme) { 2891 arvif->num_legacy_stations--; 2892 ret = ath10k_recalc_rtscts_prot(arvif); 2893 if (ret) { 2894 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n", 2895 arvif->vdev_id, ret); 2896 return ret; 2897 } 2898 } 2899 2900 ret = ath10k_clear_peer_keys(arvif, sta->addr); 2901 if (ret) { 2902 ath10k_warn(ar, "failed to clear all peer wep keys for vdev %i: %d\n", 2903 arvif->vdev_id, ret); 2904 return ret; 2905 } 2906 2907 return ret; 2908 } 2909 2910 /**************/ 2911 /* Regulatory */ 2912 /**************/ 2913 2914 static int ath10k_update_channel_list(struct ath10k *ar) 2915 { 2916 struct ieee80211_hw *hw = ar->hw; 2917 struct ieee80211_supported_band **bands; 2918 enum nl80211_band band; 2919 struct ieee80211_channel *channel; 2920 struct wmi_scan_chan_list_arg arg = {0}; 2921 struct wmi_channel_arg *ch; 2922 bool passive; 2923 int len; 2924 int ret; 2925 int i; 2926 2927 lockdep_assert_held(&ar->conf_mutex); 2928 2929 bands = hw->wiphy->bands; 2930 for (band = 0; band < NUM_NL80211_BANDS; band++) { 2931 if (!bands[band]) 2932 continue; 2933 2934 for (i = 0; i < bands[band]->n_channels; i++) { 2935 if (bands[band]->channels[i].flags & 2936 IEEE80211_CHAN_DISABLED) 2937 continue; 2938 2939 arg.n_channels++; 2940 } 2941 } 2942 2943 len = sizeof(struct wmi_channel_arg) * arg.n_channels; 2944 arg.channels = kzalloc(len, GFP_KERNEL); 2945 if (!arg.channels) 2946 return -ENOMEM; 2947 2948 ch = arg.channels; 2949 for (band = 0; band < NUM_NL80211_BANDS; band++) { 2950 if (!bands[band]) 2951 continue; 2952 2953 for (i = 0; i < bands[band]->n_channels; i++) { 2954 channel = &bands[band]->channels[i]; 2955 2956 if (channel->flags & IEEE80211_CHAN_DISABLED) 2957 continue; 2958 2959 ch->allow_ht = true; 2960 2961 /* FIXME: when should we really allow VHT? */ 2962 ch->allow_vht = true; 2963 2964 ch->allow_ibss = 2965 !(channel->flags & IEEE80211_CHAN_NO_IR); 2966 2967 ch->ht40plus = 2968 !(channel->flags & IEEE80211_CHAN_NO_HT40PLUS); 2969 2970 ch->chan_radar = 2971 !!(channel->flags & IEEE80211_CHAN_RADAR); 2972 2973 passive = channel->flags & IEEE80211_CHAN_NO_IR; 2974 ch->passive = passive; 2975 2976 ch->freq = channel->center_freq; 2977 ch->band_center_freq1 = channel->center_freq; 2978 ch->min_power = 0; 2979 ch->max_power = channel->max_power * 2; 2980 ch->max_reg_power = channel->max_reg_power * 2; 2981 ch->max_antenna_gain = channel->max_antenna_gain * 2; 2982 ch->reg_class_id = 0; /* FIXME */ 2983 2984 /* FIXME: why use only legacy modes, why not any 2985 * HT/VHT modes? Would that even make any 2986 * difference? */ 2987 if (channel->band == NL80211_BAND_2GHZ) 2988 ch->mode = MODE_11G; 2989 else 2990 ch->mode = MODE_11A; 2991 2992 if (WARN_ON_ONCE(ch->mode == MODE_UNKNOWN)) 2993 continue; 2994 2995 ath10k_dbg(ar, ATH10K_DBG_WMI, 2996 "mac channel [%zd/%d] freq %d maxpower %d regpower %d antenna %d mode %d\n", 2997 ch - arg.channels, arg.n_channels, 2998 ch->freq, ch->max_power, ch->max_reg_power, 2999 ch->max_antenna_gain, ch->mode); 3000 3001 ch++; 3002 } 3003 } 3004 3005 ret = ath10k_wmi_scan_chan_list(ar, &arg); 3006 kfree(arg.channels); 3007 3008 return ret; 3009 } 3010 3011 static enum wmi_dfs_region 3012 ath10k_mac_get_dfs_region(enum nl80211_dfs_regions dfs_region) 3013 { 3014 switch (dfs_region) { 3015 case NL80211_DFS_UNSET: 3016 return WMI_UNINIT_DFS_DOMAIN; 3017 case NL80211_DFS_FCC: 3018 return WMI_FCC_DFS_DOMAIN; 3019 case NL80211_DFS_ETSI: 3020 return WMI_ETSI_DFS_DOMAIN; 3021 case NL80211_DFS_JP: 3022 return WMI_MKK4_DFS_DOMAIN; 3023 } 3024 return WMI_UNINIT_DFS_DOMAIN; 3025 } 3026 3027 static void ath10k_regd_update(struct ath10k *ar) 3028 { 3029 struct reg_dmn_pair_mapping *regpair; 3030 int ret; 3031 enum wmi_dfs_region wmi_dfs_reg; 3032 enum nl80211_dfs_regions nl_dfs_reg; 3033 3034 lockdep_assert_held(&ar->conf_mutex); 3035 3036 ret = ath10k_update_channel_list(ar); 3037 if (ret) 3038 ath10k_warn(ar, "failed to update channel list: %d\n", ret); 3039 3040 regpair = ar->ath_common.regulatory.regpair; 3041 3042 if (IS_ENABLED(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) { 3043 nl_dfs_reg = ar->dfs_detector->region; 3044 wmi_dfs_reg = ath10k_mac_get_dfs_region(nl_dfs_reg); 3045 } else { 3046 wmi_dfs_reg = WMI_UNINIT_DFS_DOMAIN; 3047 } 3048 3049 /* Target allows setting up per-band regdomain but ath_common provides 3050 * a combined one only */ 3051 ret = ath10k_wmi_pdev_set_regdomain(ar, 3052 regpair->reg_domain, 3053 regpair->reg_domain, /* 2ghz */ 3054 regpair->reg_domain, /* 5ghz */ 3055 regpair->reg_2ghz_ctl, 3056 regpair->reg_5ghz_ctl, 3057 wmi_dfs_reg); 3058 if (ret) 3059 ath10k_warn(ar, "failed to set pdev regdomain: %d\n", ret); 3060 } 3061 3062 static void ath10k_reg_notifier(struct wiphy *wiphy, 3063 struct regulatory_request *request) 3064 { 3065 struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy); 3066 struct ath10k *ar = hw->priv; 3067 bool result; 3068 3069 ath_reg_notifier_apply(wiphy, request, &ar->ath_common.regulatory); 3070 3071 if (IS_ENABLED(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) { 3072 ath10k_dbg(ar, ATH10K_DBG_REGULATORY, "dfs region 0x%x\n", 3073 request->dfs_region); 3074 result = ar->dfs_detector->set_dfs_domain(ar->dfs_detector, 3075 request->dfs_region); 3076 if (!result) 3077 ath10k_warn(ar, "DFS region 0x%X not supported, will trigger radar for every pulse\n", 3078 request->dfs_region); 3079 } 3080 3081 mutex_lock(&ar->conf_mutex); 3082 if (ar->state == ATH10K_STATE_ON) 3083 ath10k_regd_update(ar); 3084 mutex_unlock(&ar->conf_mutex); 3085 } 3086 3087 /***************/ 3088 /* TX handlers */ 3089 /***************/ 3090 3091 enum ath10k_mac_tx_path { 3092 ATH10K_MAC_TX_HTT, 3093 ATH10K_MAC_TX_HTT_MGMT, 3094 ATH10K_MAC_TX_WMI_MGMT, 3095 ATH10K_MAC_TX_UNKNOWN, 3096 }; 3097 3098 void ath10k_mac_tx_lock(struct ath10k *ar, int reason) 3099 { 3100 lockdep_assert_held(&ar->htt.tx_lock); 3101 3102 WARN_ON(reason >= ATH10K_TX_PAUSE_MAX); 3103 ar->tx_paused |= BIT(reason); 3104 ieee80211_stop_queues(ar->hw); 3105 } 3106 3107 static void ath10k_mac_tx_unlock_iter(void *data, u8 *mac, 3108 struct ieee80211_vif *vif) 3109 { 3110 struct ath10k *ar = data; 3111 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 3112 3113 if (arvif->tx_paused) 3114 return; 3115 3116 ieee80211_wake_queue(ar->hw, arvif->vdev_id); 3117 } 3118 3119 void ath10k_mac_tx_unlock(struct ath10k *ar, int reason) 3120 { 3121 lockdep_assert_held(&ar->htt.tx_lock); 3122 3123 WARN_ON(reason >= ATH10K_TX_PAUSE_MAX); 3124 ar->tx_paused &= ~BIT(reason); 3125 3126 if (ar->tx_paused) 3127 return; 3128 3129 ieee80211_iterate_active_interfaces_atomic(ar->hw, 3130 IEEE80211_IFACE_ITER_RESUME_ALL, 3131 ath10k_mac_tx_unlock_iter, 3132 ar); 3133 3134 ieee80211_wake_queue(ar->hw, ar->hw->offchannel_tx_hw_queue); 3135 } 3136 3137 void ath10k_mac_vif_tx_lock(struct ath10k_vif *arvif, int reason) 3138 { 3139 struct ath10k *ar = arvif->ar; 3140 3141 lockdep_assert_held(&ar->htt.tx_lock); 3142 3143 WARN_ON(reason >= BITS_PER_LONG); 3144 arvif->tx_paused |= BIT(reason); 3145 ieee80211_stop_queue(ar->hw, arvif->vdev_id); 3146 } 3147 3148 void ath10k_mac_vif_tx_unlock(struct ath10k_vif *arvif, int reason) 3149 { 3150 struct ath10k *ar = arvif->ar; 3151 3152 lockdep_assert_held(&ar->htt.tx_lock); 3153 3154 WARN_ON(reason >= BITS_PER_LONG); 3155 arvif->tx_paused &= ~BIT(reason); 3156 3157 if (ar->tx_paused) 3158 return; 3159 3160 if (arvif->tx_paused) 3161 return; 3162 3163 ieee80211_wake_queue(ar->hw, arvif->vdev_id); 3164 } 3165 3166 static void ath10k_mac_vif_handle_tx_pause(struct ath10k_vif *arvif, 3167 enum wmi_tlv_tx_pause_id pause_id, 3168 enum wmi_tlv_tx_pause_action action) 3169 { 3170 struct ath10k *ar = arvif->ar; 3171 3172 lockdep_assert_held(&ar->htt.tx_lock); 3173 3174 switch (action) { 3175 case WMI_TLV_TX_PAUSE_ACTION_STOP: 3176 ath10k_mac_vif_tx_lock(arvif, pause_id); 3177 break; 3178 case WMI_TLV_TX_PAUSE_ACTION_WAKE: 3179 ath10k_mac_vif_tx_unlock(arvif, pause_id); 3180 break; 3181 default: 3182 ath10k_warn(ar, "received unknown tx pause action %d on vdev %i, ignoring\n", 3183 action, arvif->vdev_id); 3184 break; 3185 } 3186 } 3187 3188 struct ath10k_mac_tx_pause { 3189 u32 vdev_id; 3190 enum wmi_tlv_tx_pause_id pause_id; 3191 enum wmi_tlv_tx_pause_action action; 3192 }; 3193 3194 static void ath10k_mac_handle_tx_pause_iter(void *data, u8 *mac, 3195 struct ieee80211_vif *vif) 3196 { 3197 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 3198 struct ath10k_mac_tx_pause *arg = data; 3199 3200 if (arvif->vdev_id != arg->vdev_id) 3201 return; 3202 3203 ath10k_mac_vif_handle_tx_pause(arvif, arg->pause_id, arg->action); 3204 } 3205 3206 void ath10k_mac_handle_tx_pause_vdev(struct ath10k *ar, u32 vdev_id, 3207 enum wmi_tlv_tx_pause_id pause_id, 3208 enum wmi_tlv_tx_pause_action action) 3209 { 3210 struct ath10k_mac_tx_pause arg = { 3211 .vdev_id = vdev_id, 3212 .pause_id = pause_id, 3213 .action = action, 3214 }; 3215 3216 spin_lock_bh(&ar->htt.tx_lock); 3217 ieee80211_iterate_active_interfaces_atomic(ar->hw, 3218 IEEE80211_IFACE_ITER_RESUME_ALL, 3219 ath10k_mac_handle_tx_pause_iter, 3220 &arg); 3221 spin_unlock_bh(&ar->htt.tx_lock); 3222 } 3223 3224 static enum ath10k_hw_txrx_mode 3225 ath10k_mac_tx_h_get_txmode(struct ath10k *ar, 3226 struct ieee80211_vif *vif, 3227 struct ieee80211_sta *sta, 3228 struct sk_buff *skb) 3229 { 3230 const struct ieee80211_hdr *hdr = (void *)skb->data; 3231 __le16 fc = hdr->frame_control; 3232 3233 if (!vif || vif->type == NL80211_IFTYPE_MONITOR) 3234 return ATH10K_HW_TXRX_RAW; 3235 3236 if (ieee80211_is_mgmt(fc)) 3237 return ATH10K_HW_TXRX_MGMT; 3238 3239 /* Workaround: 3240 * 3241 * NullFunc frames are mostly used to ping if a client or AP are still 3242 * reachable and responsive. This implies tx status reports must be 3243 * accurate - otherwise either mac80211 or userspace (e.g. hostapd) can 3244 * come to a conclusion that the other end disappeared and tear down 3245 * BSS connection or it can never disconnect from BSS/client (which is 3246 * the case). 3247 * 3248 * Firmware with HTT older than 3.0 delivers incorrect tx status for 3249 * NullFunc frames to driver. However there's a HTT Mgmt Tx command 3250 * which seems to deliver correct tx reports for NullFunc frames. The 3251 * downside of using it is it ignores client powersave state so it can 3252 * end up disconnecting sleeping clients in AP mode. It should fix STA 3253 * mode though because AP don't sleep. 3254 */ 3255 if (ar->htt.target_version_major < 3 && 3256 (ieee80211_is_nullfunc(fc) || ieee80211_is_qos_nullfunc(fc)) && 3257 !test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX, 3258 ar->running_fw->fw_file.fw_features)) 3259 return ATH10K_HW_TXRX_MGMT; 3260 3261 /* Workaround: 3262 * 3263 * Some wmi-tlv firmwares for qca6174 have broken Tx key selection for 3264 * NativeWifi txmode - it selects AP key instead of peer key. It seems 3265 * to work with Ethernet txmode so use it. 3266 * 3267 * FIXME: Check if raw mode works with TDLS. 3268 */ 3269 if (ieee80211_is_data_present(fc) && sta && sta->tdls) 3270 return ATH10K_HW_TXRX_ETHERNET; 3271 3272 if (test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) 3273 return ATH10K_HW_TXRX_RAW; 3274 3275 return ATH10K_HW_TXRX_NATIVE_WIFI; 3276 } 3277 3278 static bool ath10k_tx_h_use_hwcrypto(struct ieee80211_vif *vif, 3279 struct sk_buff *skb) 3280 { 3281 const struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); 3282 const struct ieee80211_hdr *hdr = (void *)skb->data; 3283 const u32 mask = IEEE80211_TX_INTFL_DONT_ENCRYPT | 3284 IEEE80211_TX_CTL_INJECTED; 3285 3286 if (!ieee80211_has_protected(hdr->frame_control)) 3287 return false; 3288 3289 if ((info->flags & mask) == mask) 3290 return false; 3291 3292 if (vif) 3293 return !ath10k_vif_to_arvif(vif)->nohwcrypt; 3294 3295 return true; 3296 } 3297 3298 /* HTT Tx uses Native Wifi tx mode which expects 802.11 frames without QoS 3299 * Control in the header. 3300 */ 3301 static void ath10k_tx_h_nwifi(struct ieee80211_hw *hw, struct sk_buff *skb) 3302 { 3303 struct ieee80211_hdr *hdr = (void *)skb->data; 3304 struct ath10k_skb_cb *cb = ATH10K_SKB_CB(skb); 3305 u8 *qos_ctl; 3306 3307 if (!ieee80211_is_data_qos(hdr->frame_control)) 3308 return; 3309 3310 qos_ctl = ieee80211_get_qos_ctl(hdr); 3311 memmove(skb->data + IEEE80211_QOS_CTL_LEN, 3312 skb->data, (void *)qos_ctl - (void *)skb->data); 3313 skb_pull(skb, IEEE80211_QOS_CTL_LEN); 3314 3315 /* Some firmware revisions don't handle sending QoS NullFunc well. 3316 * These frames are mainly used for CQM purposes so it doesn't really 3317 * matter whether QoS NullFunc or NullFunc are sent. 3318 */ 3319 hdr = (void *)skb->data; 3320 if (ieee80211_is_qos_nullfunc(hdr->frame_control)) 3321 cb->flags &= ~ATH10K_SKB_F_QOS; 3322 3323 hdr->frame_control &= ~__cpu_to_le16(IEEE80211_STYPE_QOS_DATA); 3324 } 3325 3326 static void ath10k_tx_h_8023(struct sk_buff *skb) 3327 { 3328 struct ieee80211_hdr *hdr; 3329 struct rfc1042_hdr *rfc1042; 3330 struct ethhdr *eth; 3331 size_t hdrlen; 3332 u8 da[ETH_ALEN]; 3333 u8 sa[ETH_ALEN]; 3334 __be16 type; 3335 3336 hdr = (void *)skb->data; 3337 hdrlen = ieee80211_hdrlen(hdr->frame_control); 3338 rfc1042 = (void *)skb->data + hdrlen; 3339 3340 ether_addr_copy(da, ieee80211_get_DA(hdr)); 3341 ether_addr_copy(sa, ieee80211_get_SA(hdr)); 3342 type = rfc1042->snap_type; 3343 3344 skb_pull(skb, hdrlen + sizeof(*rfc1042)); 3345 skb_push(skb, sizeof(*eth)); 3346 3347 eth = (void *)skb->data; 3348 ether_addr_copy(eth->h_dest, da); 3349 ether_addr_copy(eth->h_source, sa); 3350 eth->h_proto = type; 3351 } 3352 3353 static void ath10k_tx_h_add_p2p_noa_ie(struct ath10k *ar, 3354 struct ieee80211_vif *vif, 3355 struct sk_buff *skb) 3356 { 3357 struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data; 3358 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 3359 3360 /* This is case only for P2P_GO */ 3361 if (vif->type != NL80211_IFTYPE_AP || !vif->p2p) 3362 return; 3363 3364 if (unlikely(ieee80211_is_probe_resp(hdr->frame_control))) { 3365 spin_lock_bh(&ar->data_lock); 3366 if (arvif->u.ap.noa_data) 3367 if (!pskb_expand_head(skb, 0, arvif->u.ap.noa_len, 3368 GFP_ATOMIC)) 3369 memcpy(skb_put(skb, arvif->u.ap.noa_len), 3370 arvif->u.ap.noa_data, 3371 arvif->u.ap.noa_len); 3372 spin_unlock_bh(&ar->data_lock); 3373 } 3374 } 3375 3376 static void ath10k_mac_tx_h_fill_cb(struct ath10k *ar, 3377 struct ieee80211_vif *vif, 3378 struct ieee80211_txq *txq, 3379 struct sk_buff *skb) 3380 { 3381 struct ieee80211_hdr *hdr = (void *)skb->data; 3382 struct ath10k_skb_cb *cb = ATH10K_SKB_CB(skb); 3383 3384 cb->flags = 0; 3385 if (!ath10k_tx_h_use_hwcrypto(vif, skb)) 3386 cb->flags |= ATH10K_SKB_F_NO_HWCRYPT; 3387 3388 if (ieee80211_is_mgmt(hdr->frame_control)) 3389 cb->flags |= ATH10K_SKB_F_MGMT; 3390 3391 if (ieee80211_is_data_qos(hdr->frame_control)) 3392 cb->flags |= ATH10K_SKB_F_QOS; 3393 3394 cb->vif = vif; 3395 cb->txq = txq; 3396 } 3397 3398 bool ath10k_mac_tx_frm_has_freq(struct ath10k *ar) 3399 { 3400 /* FIXME: Not really sure since when the behaviour changed. At some 3401 * point new firmware stopped requiring creation of peer entries for 3402 * offchannel tx (and actually creating them causes issues with wmi-htc 3403 * tx credit replenishment and reliability). Assuming it's at least 3.4 3404 * because that's when the `freq` was introduced to TX_FRM HTT command. 3405 */ 3406 return (ar->htt.target_version_major >= 3 && 3407 ar->htt.target_version_minor >= 4 && 3408 ar->running_fw->fw_file.htt_op_version == ATH10K_FW_HTT_OP_VERSION_TLV); 3409 } 3410 3411 static int ath10k_mac_tx_wmi_mgmt(struct ath10k *ar, struct sk_buff *skb) 3412 { 3413 struct sk_buff_head *q = &ar->wmi_mgmt_tx_queue; 3414 int ret = 0; 3415 3416 spin_lock_bh(&ar->data_lock); 3417 3418 if (skb_queue_len(q) == ATH10K_MAX_NUM_MGMT_PENDING) { 3419 ath10k_warn(ar, "wmi mgmt tx queue is full\n"); 3420 ret = -ENOSPC; 3421 goto unlock; 3422 } 3423 3424 __skb_queue_tail(q, skb); 3425 ieee80211_queue_work(ar->hw, &ar->wmi_mgmt_tx_work); 3426 3427 unlock: 3428 spin_unlock_bh(&ar->data_lock); 3429 3430 return ret; 3431 } 3432 3433 static enum ath10k_mac_tx_path 3434 ath10k_mac_tx_h_get_txpath(struct ath10k *ar, 3435 struct sk_buff *skb, 3436 enum ath10k_hw_txrx_mode txmode) 3437 { 3438 switch (txmode) { 3439 case ATH10K_HW_TXRX_RAW: 3440 case ATH10K_HW_TXRX_NATIVE_WIFI: 3441 case ATH10K_HW_TXRX_ETHERNET: 3442 return ATH10K_MAC_TX_HTT; 3443 case ATH10K_HW_TXRX_MGMT: 3444 if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX, 3445 ar->running_fw->fw_file.fw_features)) 3446 return ATH10K_MAC_TX_WMI_MGMT; 3447 else if (ar->htt.target_version_major >= 3) 3448 return ATH10K_MAC_TX_HTT; 3449 else 3450 return ATH10K_MAC_TX_HTT_MGMT; 3451 } 3452 3453 return ATH10K_MAC_TX_UNKNOWN; 3454 } 3455 3456 static int ath10k_mac_tx_submit(struct ath10k *ar, 3457 enum ath10k_hw_txrx_mode txmode, 3458 enum ath10k_mac_tx_path txpath, 3459 struct sk_buff *skb) 3460 { 3461 struct ath10k_htt *htt = &ar->htt; 3462 int ret = -EINVAL; 3463 3464 switch (txpath) { 3465 case ATH10K_MAC_TX_HTT: 3466 ret = ath10k_htt_tx(htt, txmode, skb); 3467 break; 3468 case ATH10K_MAC_TX_HTT_MGMT: 3469 ret = ath10k_htt_mgmt_tx(htt, skb); 3470 break; 3471 case ATH10K_MAC_TX_WMI_MGMT: 3472 ret = ath10k_mac_tx_wmi_mgmt(ar, skb); 3473 break; 3474 case ATH10K_MAC_TX_UNKNOWN: 3475 WARN_ON_ONCE(1); 3476 ret = -EINVAL; 3477 break; 3478 } 3479 3480 if (ret) { 3481 ath10k_warn(ar, "failed to transmit packet, dropping: %d\n", 3482 ret); 3483 ieee80211_free_txskb(ar->hw, skb); 3484 } 3485 3486 return ret; 3487 } 3488 3489 /* This function consumes the sk_buff regardless of return value as far as 3490 * caller is concerned so no freeing is necessary afterwards. 3491 */ 3492 static int ath10k_mac_tx(struct ath10k *ar, 3493 struct ieee80211_vif *vif, 3494 struct ieee80211_sta *sta, 3495 enum ath10k_hw_txrx_mode txmode, 3496 enum ath10k_mac_tx_path txpath, 3497 struct sk_buff *skb) 3498 { 3499 struct ieee80211_hw *hw = ar->hw; 3500 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); 3501 int ret; 3502 3503 /* We should disable CCK RATE due to P2P */ 3504 if (info->flags & IEEE80211_TX_CTL_NO_CCK_RATE) 3505 ath10k_dbg(ar, ATH10K_DBG_MAC, "IEEE80211_TX_CTL_NO_CCK_RATE\n"); 3506 3507 switch (txmode) { 3508 case ATH10K_HW_TXRX_MGMT: 3509 case ATH10K_HW_TXRX_NATIVE_WIFI: 3510 ath10k_tx_h_nwifi(hw, skb); 3511 ath10k_tx_h_add_p2p_noa_ie(ar, vif, skb); 3512 ath10k_tx_h_seq_no(vif, skb); 3513 break; 3514 case ATH10K_HW_TXRX_ETHERNET: 3515 ath10k_tx_h_8023(skb); 3516 break; 3517 case ATH10K_HW_TXRX_RAW: 3518 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) { 3519 WARN_ON_ONCE(1); 3520 ieee80211_free_txskb(hw, skb); 3521 return -ENOTSUPP; 3522 } 3523 } 3524 3525 if (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN) { 3526 if (!ath10k_mac_tx_frm_has_freq(ar)) { 3527 ath10k_dbg(ar, ATH10K_DBG_MAC, "queued offchannel skb %p\n", 3528 skb); 3529 3530 skb_queue_tail(&ar->offchan_tx_queue, skb); 3531 ieee80211_queue_work(hw, &ar->offchan_tx_work); 3532 return 0; 3533 } 3534 } 3535 3536 ret = ath10k_mac_tx_submit(ar, txmode, txpath, skb); 3537 if (ret) { 3538 ath10k_warn(ar, "failed to submit frame: %d\n", ret); 3539 return ret; 3540 } 3541 3542 return 0; 3543 } 3544 3545 void ath10k_offchan_tx_purge(struct ath10k *ar) 3546 { 3547 struct sk_buff *skb; 3548 3549 for (;;) { 3550 skb = skb_dequeue(&ar->offchan_tx_queue); 3551 if (!skb) 3552 break; 3553 3554 ieee80211_free_txskb(ar->hw, skb); 3555 } 3556 } 3557 3558 void ath10k_offchan_tx_work(struct work_struct *work) 3559 { 3560 struct ath10k *ar = container_of(work, struct ath10k, offchan_tx_work); 3561 struct ath10k_peer *peer; 3562 struct ath10k_vif *arvif; 3563 enum ath10k_hw_txrx_mode txmode; 3564 enum ath10k_mac_tx_path txpath; 3565 struct ieee80211_hdr *hdr; 3566 struct ieee80211_vif *vif; 3567 struct ieee80211_sta *sta; 3568 struct sk_buff *skb; 3569 const u8 *peer_addr; 3570 int vdev_id; 3571 int ret; 3572 unsigned long time_left; 3573 bool tmp_peer_created = false; 3574 3575 /* FW requirement: We must create a peer before FW will send out 3576 * an offchannel frame. Otherwise the frame will be stuck and 3577 * never transmitted. We delete the peer upon tx completion. 3578 * It is unlikely that a peer for offchannel tx will already be 3579 * present. However it may be in some rare cases so account for that. 3580 * Otherwise we might remove a legitimate peer and break stuff. */ 3581 3582 for (;;) { 3583 skb = skb_dequeue(&ar->offchan_tx_queue); 3584 if (!skb) 3585 break; 3586 3587 mutex_lock(&ar->conf_mutex); 3588 3589 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac offchannel skb %p\n", 3590 skb); 3591 3592 hdr = (struct ieee80211_hdr *)skb->data; 3593 peer_addr = ieee80211_get_DA(hdr); 3594 3595 spin_lock_bh(&ar->data_lock); 3596 vdev_id = ar->scan.vdev_id; 3597 peer = ath10k_peer_find(ar, vdev_id, peer_addr); 3598 spin_unlock_bh(&ar->data_lock); 3599 3600 if (peer) 3601 /* FIXME: should this use ath10k_warn()? */ 3602 ath10k_dbg(ar, ATH10K_DBG_MAC, "peer %pM on vdev %d already present\n", 3603 peer_addr, vdev_id); 3604 3605 if (!peer) { 3606 ret = ath10k_peer_create(ar, NULL, NULL, vdev_id, 3607 peer_addr, 3608 WMI_PEER_TYPE_DEFAULT); 3609 if (ret) 3610 ath10k_warn(ar, "failed to create peer %pM on vdev %d: %d\n", 3611 peer_addr, vdev_id, ret); 3612 tmp_peer_created = (ret == 0); 3613 } 3614 3615 spin_lock_bh(&ar->data_lock); 3616 reinit_completion(&ar->offchan_tx_completed); 3617 ar->offchan_tx_skb = skb; 3618 spin_unlock_bh(&ar->data_lock); 3619 3620 /* It's safe to access vif and sta - conf_mutex guarantees that 3621 * sta_state() and remove_interface() are locked exclusively 3622 * out wrt to this offchannel worker. 3623 */ 3624 arvif = ath10k_get_arvif(ar, vdev_id); 3625 if (arvif) { 3626 vif = arvif->vif; 3627 sta = ieee80211_find_sta(vif, peer_addr); 3628 } else { 3629 vif = NULL; 3630 sta = NULL; 3631 } 3632 3633 txmode = ath10k_mac_tx_h_get_txmode(ar, vif, sta, skb); 3634 txpath = ath10k_mac_tx_h_get_txpath(ar, skb, txmode); 3635 3636 ret = ath10k_mac_tx(ar, vif, sta, txmode, txpath, skb); 3637 if (ret) { 3638 ath10k_warn(ar, "failed to transmit offchannel frame: %d\n", 3639 ret); 3640 /* not serious */ 3641 } 3642 3643 time_left = 3644 wait_for_completion_timeout(&ar->offchan_tx_completed, 3 * HZ); 3645 if (time_left == 0) 3646 ath10k_warn(ar, "timed out waiting for offchannel skb %p\n", 3647 skb); 3648 3649 if (!peer && tmp_peer_created) { 3650 ret = ath10k_peer_delete(ar, vdev_id, peer_addr); 3651 if (ret) 3652 ath10k_warn(ar, "failed to delete peer %pM on vdev %d: %d\n", 3653 peer_addr, vdev_id, ret); 3654 } 3655 3656 mutex_unlock(&ar->conf_mutex); 3657 } 3658 } 3659 3660 void ath10k_mgmt_over_wmi_tx_purge(struct ath10k *ar) 3661 { 3662 struct sk_buff *skb; 3663 3664 for (;;) { 3665 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue); 3666 if (!skb) 3667 break; 3668 3669 ieee80211_free_txskb(ar->hw, skb); 3670 } 3671 } 3672 3673 void ath10k_mgmt_over_wmi_tx_work(struct work_struct *work) 3674 { 3675 struct ath10k *ar = container_of(work, struct ath10k, wmi_mgmt_tx_work); 3676 struct sk_buff *skb; 3677 int ret; 3678 3679 for (;;) { 3680 skb = skb_dequeue(&ar->wmi_mgmt_tx_queue); 3681 if (!skb) 3682 break; 3683 3684 ret = ath10k_wmi_mgmt_tx(ar, skb); 3685 if (ret) { 3686 ath10k_warn(ar, "failed to transmit management frame via WMI: %d\n", 3687 ret); 3688 ieee80211_free_txskb(ar->hw, skb); 3689 } 3690 } 3691 } 3692 3693 static void ath10k_mac_txq_init(struct ieee80211_txq *txq) 3694 { 3695 struct ath10k_txq *artxq; 3696 3697 if (!txq) 3698 return; 3699 3700 artxq = (void *)txq->drv_priv; 3701 INIT_LIST_HEAD(&artxq->list); 3702 } 3703 3704 static void ath10k_mac_txq_unref(struct ath10k *ar, struct ieee80211_txq *txq) 3705 { 3706 struct ath10k_txq *artxq; 3707 struct ath10k_skb_cb *cb; 3708 struct sk_buff *msdu; 3709 int msdu_id; 3710 3711 if (!txq) 3712 return; 3713 3714 artxq = (void *)txq->drv_priv; 3715 spin_lock_bh(&ar->txqs_lock); 3716 if (!list_empty(&artxq->list)) 3717 list_del_init(&artxq->list); 3718 spin_unlock_bh(&ar->txqs_lock); 3719 3720 spin_lock_bh(&ar->htt.tx_lock); 3721 idr_for_each_entry(&ar->htt.pending_tx, msdu, msdu_id) { 3722 cb = ATH10K_SKB_CB(msdu); 3723 if (cb->txq == txq) 3724 cb->txq = NULL; 3725 } 3726 spin_unlock_bh(&ar->htt.tx_lock); 3727 } 3728 3729 struct ieee80211_txq *ath10k_mac_txq_lookup(struct ath10k *ar, 3730 u16 peer_id, 3731 u8 tid) 3732 { 3733 struct ath10k_peer *peer; 3734 3735 lockdep_assert_held(&ar->data_lock); 3736 3737 peer = ar->peer_map[peer_id]; 3738 if (!peer) 3739 return NULL; 3740 3741 if (peer->sta) 3742 return peer->sta->txq[tid]; 3743 else if (peer->vif) 3744 return peer->vif->txq; 3745 else 3746 return NULL; 3747 } 3748 3749 static bool ath10k_mac_tx_can_push(struct ieee80211_hw *hw, 3750 struct ieee80211_txq *txq) 3751 { 3752 struct ath10k *ar = hw->priv; 3753 struct ath10k_txq *artxq = (void *)txq->drv_priv; 3754 3755 /* No need to get locks */ 3756 3757 if (ar->htt.tx_q_state.mode == HTT_TX_MODE_SWITCH_PUSH) 3758 return true; 3759 3760 if (ar->htt.num_pending_tx < ar->htt.tx_q_state.num_push_allowed) 3761 return true; 3762 3763 if (artxq->num_fw_queued < artxq->num_push_allowed) 3764 return true; 3765 3766 return false; 3767 } 3768 3769 int ath10k_mac_tx_push_txq(struct ieee80211_hw *hw, 3770 struct ieee80211_txq *txq) 3771 { 3772 struct ath10k *ar = hw->priv; 3773 struct ath10k_htt *htt = &ar->htt; 3774 struct ath10k_txq *artxq = (void *)txq->drv_priv; 3775 struct ieee80211_vif *vif = txq->vif; 3776 struct ieee80211_sta *sta = txq->sta; 3777 enum ath10k_hw_txrx_mode txmode; 3778 enum ath10k_mac_tx_path txpath; 3779 struct sk_buff *skb; 3780 size_t skb_len; 3781 int ret; 3782 3783 spin_lock_bh(&ar->htt.tx_lock); 3784 ret = ath10k_htt_tx_inc_pending(htt); 3785 spin_unlock_bh(&ar->htt.tx_lock); 3786 3787 if (ret) 3788 return ret; 3789 3790 skb = ieee80211_tx_dequeue(hw, txq); 3791 if (!skb) { 3792 spin_lock_bh(&ar->htt.tx_lock); 3793 ath10k_htt_tx_dec_pending(htt); 3794 spin_unlock_bh(&ar->htt.tx_lock); 3795 3796 return -ENOENT; 3797 } 3798 3799 ath10k_mac_tx_h_fill_cb(ar, vif, txq, skb); 3800 3801 skb_len = skb->len; 3802 txmode = ath10k_mac_tx_h_get_txmode(ar, vif, sta, skb); 3803 txpath = ath10k_mac_tx_h_get_txpath(ar, skb, txmode); 3804 3805 ret = ath10k_mac_tx(ar, vif, sta, txmode, txpath, skb); 3806 if (unlikely(ret)) { 3807 ath10k_warn(ar, "failed to push frame: %d\n", ret); 3808 3809 spin_lock_bh(&ar->htt.tx_lock); 3810 ath10k_htt_tx_dec_pending(htt); 3811 spin_unlock_bh(&ar->htt.tx_lock); 3812 3813 return ret; 3814 } 3815 3816 spin_lock_bh(&ar->htt.tx_lock); 3817 artxq->num_fw_queued++; 3818 spin_unlock_bh(&ar->htt.tx_lock); 3819 3820 return skb_len; 3821 } 3822 3823 void ath10k_mac_tx_push_pending(struct ath10k *ar) 3824 { 3825 struct ieee80211_hw *hw = ar->hw; 3826 struct ieee80211_txq *txq; 3827 struct ath10k_txq *artxq; 3828 struct ath10k_txq *last; 3829 int ret; 3830 int max; 3831 3832 if (ar->htt.num_pending_tx >= (ar->htt.max_num_pending_tx / 2)) 3833 return; 3834 3835 spin_lock_bh(&ar->txqs_lock); 3836 rcu_read_lock(); 3837 3838 last = list_last_entry(&ar->txqs, struct ath10k_txq, list); 3839 while (!list_empty(&ar->txqs)) { 3840 artxq = list_first_entry(&ar->txqs, struct ath10k_txq, list); 3841 txq = container_of((void *)artxq, struct ieee80211_txq, 3842 drv_priv); 3843 3844 /* Prevent aggressive sta/tid taking over tx queue */ 3845 max = 16; 3846 ret = 0; 3847 while (ath10k_mac_tx_can_push(hw, txq) && max--) { 3848 ret = ath10k_mac_tx_push_txq(hw, txq); 3849 if (ret < 0) 3850 break; 3851 } 3852 3853 list_del_init(&artxq->list); 3854 if (ret != -ENOENT) 3855 list_add_tail(&artxq->list, &ar->txqs); 3856 3857 ath10k_htt_tx_txq_update(hw, txq); 3858 3859 if (artxq == last || (ret < 0 && ret != -ENOENT)) 3860 break; 3861 } 3862 3863 rcu_read_unlock(); 3864 spin_unlock_bh(&ar->txqs_lock); 3865 } 3866 3867 /************/ 3868 /* Scanning */ 3869 /************/ 3870 3871 void __ath10k_scan_finish(struct ath10k *ar) 3872 { 3873 lockdep_assert_held(&ar->data_lock); 3874 3875 switch (ar->scan.state) { 3876 case ATH10K_SCAN_IDLE: 3877 break; 3878 case ATH10K_SCAN_RUNNING: 3879 case ATH10K_SCAN_ABORTING: 3880 if (!ar->scan.is_roc) { 3881 struct cfg80211_scan_info info = { 3882 .aborted = (ar->scan.state == 3883 ATH10K_SCAN_ABORTING), 3884 }; 3885 3886 ieee80211_scan_completed(ar->hw, &info); 3887 } else if (ar->scan.roc_notify) { 3888 ieee80211_remain_on_channel_expired(ar->hw); 3889 } 3890 /* fall through */ 3891 case ATH10K_SCAN_STARTING: 3892 ar->scan.state = ATH10K_SCAN_IDLE; 3893 ar->scan_channel = NULL; 3894 ar->scan.roc_freq = 0; 3895 ath10k_offchan_tx_purge(ar); 3896 cancel_delayed_work(&ar->scan.timeout); 3897 complete_all(&ar->scan.completed); 3898 break; 3899 } 3900 } 3901 3902 void ath10k_scan_finish(struct ath10k *ar) 3903 { 3904 spin_lock_bh(&ar->data_lock); 3905 __ath10k_scan_finish(ar); 3906 spin_unlock_bh(&ar->data_lock); 3907 } 3908 3909 static int ath10k_scan_stop(struct ath10k *ar) 3910 { 3911 struct wmi_stop_scan_arg arg = { 3912 .req_id = 1, /* FIXME */ 3913 .req_type = WMI_SCAN_STOP_ONE, 3914 .u.scan_id = ATH10K_SCAN_ID, 3915 }; 3916 int ret; 3917 3918 lockdep_assert_held(&ar->conf_mutex); 3919 3920 ret = ath10k_wmi_stop_scan(ar, &arg); 3921 if (ret) { 3922 ath10k_warn(ar, "failed to stop wmi scan: %d\n", ret); 3923 goto out; 3924 } 3925 3926 ret = wait_for_completion_timeout(&ar->scan.completed, 3 * HZ); 3927 if (ret == 0) { 3928 ath10k_warn(ar, "failed to receive scan abortion completion: timed out\n"); 3929 ret = -ETIMEDOUT; 3930 } else if (ret > 0) { 3931 ret = 0; 3932 } 3933 3934 out: 3935 /* Scan state should be updated upon scan completion but in case 3936 * firmware fails to deliver the event (for whatever reason) it is 3937 * desired to clean up scan state anyway. Firmware may have just 3938 * dropped the scan completion event delivery due to transport pipe 3939 * being overflown with data and/or it can recover on its own before 3940 * next scan request is submitted. 3941 */ 3942 spin_lock_bh(&ar->data_lock); 3943 if (ar->scan.state != ATH10K_SCAN_IDLE) 3944 __ath10k_scan_finish(ar); 3945 spin_unlock_bh(&ar->data_lock); 3946 3947 return ret; 3948 } 3949 3950 static void ath10k_scan_abort(struct ath10k *ar) 3951 { 3952 int ret; 3953 3954 lockdep_assert_held(&ar->conf_mutex); 3955 3956 spin_lock_bh(&ar->data_lock); 3957 3958 switch (ar->scan.state) { 3959 case ATH10K_SCAN_IDLE: 3960 /* This can happen if timeout worker kicked in and called 3961 * abortion while scan completion was being processed. 3962 */ 3963 break; 3964 case ATH10K_SCAN_STARTING: 3965 case ATH10K_SCAN_ABORTING: 3966 ath10k_warn(ar, "refusing scan abortion due to invalid scan state: %s (%d)\n", 3967 ath10k_scan_state_str(ar->scan.state), 3968 ar->scan.state); 3969 break; 3970 case ATH10K_SCAN_RUNNING: 3971 ar->scan.state = ATH10K_SCAN_ABORTING; 3972 spin_unlock_bh(&ar->data_lock); 3973 3974 ret = ath10k_scan_stop(ar); 3975 if (ret) 3976 ath10k_warn(ar, "failed to abort scan: %d\n", ret); 3977 3978 spin_lock_bh(&ar->data_lock); 3979 break; 3980 } 3981 3982 spin_unlock_bh(&ar->data_lock); 3983 } 3984 3985 void ath10k_scan_timeout_work(struct work_struct *work) 3986 { 3987 struct ath10k *ar = container_of(work, struct ath10k, 3988 scan.timeout.work); 3989 3990 mutex_lock(&ar->conf_mutex); 3991 ath10k_scan_abort(ar); 3992 mutex_unlock(&ar->conf_mutex); 3993 } 3994 3995 static int ath10k_start_scan(struct ath10k *ar, 3996 const struct wmi_start_scan_arg *arg) 3997 { 3998 int ret; 3999 4000 lockdep_assert_held(&ar->conf_mutex); 4001 4002 ret = ath10k_wmi_start_scan(ar, arg); 4003 if (ret) 4004 return ret; 4005 4006 ret = wait_for_completion_timeout(&ar->scan.started, 1 * HZ); 4007 if (ret == 0) { 4008 ret = ath10k_scan_stop(ar); 4009 if (ret) 4010 ath10k_warn(ar, "failed to stop scan: %d\n", ret); 4011 4012 return -ETIMEDOUT; 4013 } 4014 4015 /* If we failed to start the scan, return error code at 4016 * this point. This is probably due to some issue in the 4017 * firmware, but no need to wedge the driver due to that... 4018 */ 4019 spin_lock_bh(&ar->data_lock); 4020 if (ar->scan.state == ATH10K_SCAN_IDLE) { 4021 spin_unlock_bh(&ar->data_lock); 4022 return -EINVAL; 4023 } 4024 spin_unlock_bh(&ar->data_lock); 4025 4026 return 0; 4027 } 4028 4029 /**********************/ 4030 /* mac80211 callbacks */ 4031 /**********************/ 4032 4033 static void ath10k_mac_op_tx(struct ieee80211_hw *hw, 4034 struct ieee80211_tx_control *control, 4035 struct sk_buff *skb) 4036 { 4037 struct ath10k *ar = hw->priv; 4038 struct ath10k_htt *htt = &ar->htt; 4039 struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); 4040 struct ieee80211_vif *vif = info->control.vif; 4041 struct ieee80211_sta *sta = control->sta; 4042 struct ieee80211_txq *txq = NULL; 4043 struct ieee80211_hdr *hdr = (void *)skb->data; 4044 enum ath10k_hw_txrx_mode txmode; 4045 enum ath10k_mac_tx_path txpath; 4046 bool is_htt; 4047 bool is_mgmt; 4048 bool is_presp; 4049 int ret; 4050 4051 ath10k_mac_tx_h_fill_cb(ar, vif, txq, skb); 4052 4053 txmode = ath10k_mac_tx_h_get_txmode(ar, vif, sta, skb); 4054 txpath = ath10k_mac_tx_h_get_txpath(ar, skb, txmode); 4055 is_htt = (txpath == ATH10K_MAC_TX_HTT || 4056 txpath == ATH10K_MAC_TX_HTT_MGMT); 4057 is_mgmt = (txpath == ATH10K_MAC_TX_HTT_MGMT); 4058 4059 if (is_htt) { 4060 spin_lock_bh(&ar->htt.tx_lock); 4061 is_presp = ieee80211_is_probe_resp(hdr->frame_control); 4062 4063 ret = ath10k_htt_tx_inc_pending(htt); 4064 if (ret) { 4065 ath10k_warn(ar, "failed to increase tx pending count: %d, dropping\n", 4066 ret); 4067 spin_unlock_bh(&ar->htt.tx_lock); 4068 ieee80211_free_txskb(ar->hw, skb); 4069 return; 4070 } 4071 4072 ret = ath10k_htt_tx_mgmt_inc_pending(htt, is_mgmt, is_presp); 4073 if (ret) { 4074 ath10k_dbg(ar, ATH10K_DBG_MAC, "failed to increase tx mgmt pending count: %d, dropping\n", 4075 ret); 4076 ath10k_htt_tx_dec_pending(htt); 4077 spin_unlock_bh(&ar->htt.tx_lock); 4078 ieee80211_free_txskb(ar->hw, skb); 4079 return; 4080 } 4081 spin_unlock_bh(&ar->htt.tx_lock); 4082 } 4083 4084 ret = ath10k_mac_tx(ar, vif, sta, txmode, txpath, skb); 4085 if (ret) { 4086 ath10k_warn(ar, "failed to transmit frame: %d\n", ret); 4087 if (is_htt) { 4088 spin_lock_bh(&ar->htt.tx_lock); 4089 ath10k_htt_tx_dec_pending(htt); 4090 if (is_mgmt) 4091 ath10k_htt_tx_mgmt_dec_pending(htt); 4092 spin_unlock_bh(&ar->htt.tx_lock); 4093 } 4094 return; 4095 } 4096 } 4097 4098 static void ath10k_mac_op_wake_tx_queue(struct ieee80211_hw *hw, 4099 struct ieee80211_txq *txq) 4100 { 4101 struct ath10k *ar = hw->priv; 4102 struct ath10k_txq *artxq = (void *)txq->drv_priv; 4103 4104 spin_lock_bh(&ar->txqs_lock); 4105 if (list_empty(&artxq->list)) 4106 list_add_tail(&artxq->list, &ar->txqs); 4107 spin_unlock_bh(&ar->txqs_lock); 4108 4109 ath10k_mac_tx_push_pending(ar); 4110 ath10k_htt_tx_txq_update(hw, txq); 4111 } 4112 4113 /* Must not be called with conf_mutex held as workers can use that also. */ 4114 void ath10k_drain_tx(struct ath10k *ar) 4115 { 4116 /* make sure rcu-protected mac80211 tx path itself is drained */ 4117 synchronize_net(); 4118 4119 ath10k_offchan_tx_purge(ar); 4120 ath10k_mgmt_over_wmi_tx_purge(ar); 4121 4122 cancel_work_sync(&ar->offchan_tx_work); 4123 cancel_work_sync(&ar->wmi_mgmt_tx_work); 4124 } 4125 4126 void ath10k_halt(struct ath10k *ar) 4127 { 4128 struct ath10k_vif *arvif; 4129 4130 lockdep_assert_held(&ar->conf_mutex); 4131 4132 clear_bit(ATH10K_CAC_RUNNING, &ar->dev_flags); 4133 ar->filter_flags = 0; 4134 ar->monitor = false; 4135 ar->monitor_arvif = NULL; 4136 4137 if (ar->monitor_started) 4138 ath10k_monitor_stop(ar); 4139 4140 ar->monitor_started = false; 4141 ar->tx_paused = 0; 4142 4143 ath10k_scan_finish(ar); 4144 ath10k_peer_cleanup_all(ar); 4145 ath10k_core_stop(ar); 4146 ath10k_hif_power_down(ar); 4147 4148 spin_lock_bh(&ar->data_lock); 4149 list_for_each_entry(arvif, &ar->arvifs, list) 4150 ath10k_mac_vif_beacon_cleanup(arvif); 4151 spin_unlock_bh(&ar->data_lock); 4152 } 4153 4154 static int ath10k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant) 4155 { 4156 struct ath10k *ar = hw->priv; 4157 4158 mutex_lock(&ar->conf_mutex); 4159 4160 *tx_ant = ar->cfg_tx_chainmask; 4161 *rx_ant = ar->cfg_rx_chainmask; 4162 4163 mutex_unlock(&ar->conf_mutex); 4164 4165 return 0; 4166 } 4167 4168 static void ath10k_check_chain_mask(struct ath10k *ar, u32 cm, const char *dbg) 4169 { 4170 /* It is not clear that allowing gaps in chainmask 4171 * is helpful. Probably it will not do what user 4172 * is hoping for, so warn in that case. 4173 */ 4174 if (cm == 15 || cm == 7 || cm == 3 || cm == 1 || cm == 0) 4175 return; 4176 4177 ath10k_warn(ar, "mac %s antenna chainmask may be invalid: 0x%x. Suggested values: 15, 7, 3, 1 or 0.\n", 4178 dbg, cm); 4179 } 4180 4181 static int ath10k_mac_get_vht_cap_bf_sts(struct ath10k *ar) 4182 { 4183 int nsts = ar->vht_cap_info; 4184 4185 nsts &= IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK; 4186 nsts >>= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT; 4187 4188 /* If firmware does not deliver to host number of space-time 4189 * streams supported, assume it support up to 4 BF STS and return 4190 * the value for VHT CAP: nsts-1) 4191 */ 4192 if (nsts == 0) 4193 return 3; 4194 4195 return nsts; 4196 } 4197 4198 static int ath10k_mac_get_vht_cap_bf_sound_dim(struct ath10k *ar) 4199 { 4200 int sound_dim = ar->vht_cap_info; 4201 4202 sound_dim &= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK; 4203 sound_dim >>= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT; 4204 4205 /* If the sounding dimension is not advertised by the firmware, 4206 * let's use a default value of 1 4207 */ 4208 if (sound_dim == 0) 4209 return 1; 4210 4211 return sound_dim; 4212 } 4213 4214 static struct ieee80211_sta_vht_cap ath10k_create_vht_cap(struct ath10k *ar) 4215 { 4216 struct ieee80211_sta_vht_cap vht_cap = {0}; 4217 u16 mcs_map; 4218 u32 val; 4219 int i; 4220 4221 vht_cap.vht_supported = 1; 4222 vht_cap.cap = ar->vht_cap_info; 4223 4224 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE | 4225 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)) { 4226 val = ath10k_mac_get_vht_cap_bf_sts(ar); 4227 val <<= IEEE80211_VHT_CAP_BEAMFORMEE_STS_SHIFT; 4228 val &= IEEE80211_VHT_CAP_BEAMFORMEE_STS_MASK; 4229 4230 vht_cap.cap |= val; 4231 } 4232 4233 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE | 4234 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)) { 4235 val = ath10k_mac_get_vht_cap_bf_sound_dim(ar); 4236 val <<= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_SHIFT; 4237 val &= IEEE80211_VHT_CAP_SOUNDING_DIMENSIONS_MASK; 4238 4239 vht_cap.cap |= val; 4240 } 4241 4242 mcs_map = 0; 4243 for (i = 0; i < 8; i++) { 4244 if ((i < ar->num_rf_chains) && (ar->cfg_tx_chainmask & BIT(i))) 4245 mcs_map |= IEEE80211_VHT_MCS_SUPPORT_0_9 << (i * 2); 4246 else 4247 mcs_map |= IEEE80211_VHT_MCS_NOT_SUPPORTED << (i * 2); 4248 } 4249 4250 if (ar->cfg_tx_chainmask <= 1) 4251 vht_cap.cap &= ~IEEE80211_VHT_CAP_TXSTBC; 4252 4253 vht_cap.vht_mcs.rx_mcs_map = cpu_to_le16(mcs_map); 4254 vht_cap.vht_mcs.tx_mcs_map = cpu_to_le16(mcs_map); 4255 4256 return vht_cap; 4257 } 4258 4259 static struct ieee80211_sta_ht_cap ath10k_get_ht_cap(struct ath10k *ar) 4260 { 4261 int i; 4262 struct ieee80211_sta_ht_cap ht_cap = {0}; 4263 4264 if (!(ar->ht_cap_info & WMI_HT_CAP_ENABLED)) 4265 return ht_cap; 4266 4267 ht_cap.ht_supported = 1; 4268 ht_cap.ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K; 4269 ht_cap.ampdu_density = IEEE80211_HT_MPDU_DENSITY_8; 4270 ht_cap.cap |= IEEE80211_HT_CAP_SUP_WIDTH_20_40; 4271 ht_cap.cap |= IEEE80211_HT_CAP_DSSSCCK40; 4272 ht_cap.cap |= 4273 WLAN_HT_CAP_SM_PS_DISABLED << IEEE80211_HT_CAP_SM_PS_SHIFT; 4274 4275 if (ar->ht_cap_info & WMI_HT_CAP_HT20_SGI) 4276 ht_cap.cap |= IEEE80211_HT_CAP_SGI_20; 4277 4278 if (ar->ht_cap_info & WMI_HT_CAP_HT40_SGI) 4279 ht_cap.cap |= IEEE80211_HT_CAP_SGI_40; 4280 4281 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS) { 4282 u32 smps; 4283 4284 smps = WLAN_HT_CAP_SM_PS_DYNAMIC; 4285 smps <<= IEEE80211_HT_CAP_SM_PS_SHIFT; 4286 4287 ht_cap.cap |= smps; 4288 } 4289 4290 if (ar->ht_cap_info & WMI_HT_CAP_TX_STBC && (ar->cfg_tx_chainmask > 1)) 4291 ht_cap.cap |= IEEE80211_HT_CAP_TX_STBC; 4292 4293 if (ar->ht_cap_info & WMI_HT_CAP_RX_STBC) { 4294 u32 stbc; 4295 4296 stbc = ar->ht_cap_info; 4297 stbc &= WMI_HT_CAP_RX_STBC; 4298 stbc >>= WMI_HT_CAP_RX_STBC_MASK_SHIFT; 4299 stbc <<= IEEE80211_HT_CAP_RX_STBC_SHIFT; 4300 stbc &= IEEE80211_HT_CAP_RX_STBC; 4301 4302 ht_cap.cap |= stbc; 4303 } 4304 4305 if (ar->ht_cap_info & WMI_HT_CAP_LDPC) 4306 ht_cap.cap |= IEEE80211_HT_CAP_LDPC_CODING; 4307 4308 if (ar->ht_cap_info & WMI_HT_CAP_L_SIG_TXOP_PROT) 4309 ht_cap.cap |= IEEE80211_HT_CAP_LSIG_TXOP_PROT; 4310 4311 /* max AMSDU is implicitly taken from vht_cap_info */ 4312 if (ar->vht_cap_info & WMI_VHT_CAP_MAX_MPDU_LEN_MASK) 4313 ht_cap.cap |= IEEE80211_HT_CAP_MAX_AMSDU; 4314 4315 for (i = 0; i < ar->num_rf_chains; i++) { 4316 if (ar->cfg_rx_chainmask & BIT(i)) 4317 ht_cap.mcs.rx_mask[i] = 0xFF; 4318 } 4319 4320 ht_cap.mcs.tx_params |= IEEE80211_HT_MCS_TX_DEFINED; 4321 4322 return ht_cap; 4323 } 4324 4325 static void ath10k_mac_setup_ht_vht_cap(struct ath10k *ar) 4326 { 4327 struct ieee80211_supported_band *band; 4328 struct ieee80211_sta_vht_cap vht_cap; 4329 struct ieee80211_sta_ht_cap ht_cap; 4330 4331 ht_cap = ath10k_get_ht_cap(ar); 4332 vht_cap = ath10k_create_vht_cap(ar); 4333 4334 if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) { 4335 band = &ar->mac.sbands[NL80211_BAND_2GHZ]; 4336 band->ht_cap = ht_cap; 4337 } 4338 if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) { 4339 band = &ar->mac.sbands[NL80211_BAND_5GHZ]; 4340 band->ht_cap = ht_cap; 4341 band->vht_cap = vht_cap; 4342 } 4343 } 4344 4345 static int __ath10k_set_antenna(struct ath10k *ar, u32 tx_ant, u32 rx_ant) 4346 { 4347 int ret; 4348 4349 lockdep_assert_held(&ar->conf_mutex); 4350 4351 ath10k_check_chain_mask(ar, tx_ant, "tx"); 4352 ath10k_check_chain_mask(ar, rx_ant, "rx"); 4353 4354 ar->cfg_tx_chainmask = tx_ant; 4355 ar->cfg_rx_chainmask = rx_ant; 4356 4357 if ((ar->state != ATH10K_STATE_ON) && 4358 (ar->state != ATH10K_STATE_RESTARTED)) 4359 return 0; 4360 4361 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->tx_chain_mask, 4362 tx_ant); 4363 if (ret) { 4364 ath10k_warn(ar, "failed to set tx-chainmask: %d, req 0x%x\n", 4365 ret, tx_ant); 4366 return ret; 4367 } 4368 4369 ret = ath10k_wmi_pdev_set_param(ar, ar->wmi.pdev_param->rx_chain_mask, 4370 rx_ant); 4371 if (ret) { 4372 ath10k_warn(ar, "failed to set rx-chainmask: %d, req 0x%x\n", 4373 ret, rx_ant); 4374 return ret; 4375 } 4376 4377 /* Reload HT/VHT capability */ 4378 ath10k_mac_setup_ht_vht_cap(ar); 4379 4380 return 0; 4381 } 4382 4383 static int ath10k_set_antenna(struct ieee80211_hw *hw, u32 tx_ant, u32 rx_ant) 4384 { 4385 struct ath10k *ar = hw->priv; 4386 int ret; 4387 4388 mutex_lock(&ar->conf_mutex); 4389 ret = __ath10k_set_antenna(ar, tx_ant, rx_ant); 4390 mutex_unlock(&ar->conf_mutex); 4391 return ret; 4392 } 4393 4394 static int ath10k_start(struct ieee80211_hw *hw) 4395 { 4396 struct ath10k *ar = hw->priv; 4397 u32 param; 4398 int ret = 0; 4399 4400 /* 4401 * This makes sense only when restarting hw. It is harmless to call 4402 * unconditionally. This is necessary to make sure no HTT/WMI tx 4403 * commands will be submitted while restarting. 4404 */ 4405 ath10k_drain_tx(ar); 4406 4407 mutex_lock(&ar->conf_mutex); 4408 4409 switch (ar->state) { 4410 case ATH10K_STATE_OFF: 4411 ar->state = ATH10K_STATE_ON; 4412 break; 4413 case ATH10K_STATE_RESTARTING: 4414 ath10k_halt(ar); 4415 ar->state = ATH10K_STATE_RESTARTED; 4416 break; 4417 case ATH10K_STATE_ON: 4418 case ATH10K_STATE_RESTARTED: 4419 case ATH10K_STATE_WEDGED: 4420 WARN_ON(1); 4421 ret = -EINVAL; 4422 goto err; 4423 case ATH10K_STATE_UTF: 4424 ret = -EBUSY; 4425 goto err; 4426 } 4427 4428 ret = ath10k_hif_power_up(ar); 4429 if (ret) { 4430 ath10k_err(ar, "Could not init hif: %d\n", ret); 4431 goto err_off; 4432 } 4433 4434 ret = ath10k_core_start(ar, ATH10K_FIRMWARE_MODE_NORMAL, 4435 &ar->normal_mode_fw); 4436 if (ret) { 4437 ath10k_err(ar, "Could not init core: %d\n", ret); 4438 goto err_power_down; 4439 } 4440 4441 param = ar->wmi.pdev_param->pmf_qos; 4442 ret = ath10k_wmi_pdev_set_param(ar, param, 1); 4443 if (ret) { 4444 ath10k_warn(ar, "failed to enable PMF QOS: %d\n", ret); 4445 goto err_core_stop; 4446 } 4447 4448 param = ar->wmi.pdev_param->dynamic_bw; 4449 ret = ath10k_wmi_pdev_set_param(ar, param, 1); 4450 if (ret) { 4451 ath10k_warn(ar, "failed to enable dynamic BW: %d\n", ret); 4452 goto err_core_stop; 4453 } 4454 4455 if (test_bit(WMI_SERVICE_ADAPTIVE_OCS, ar->wmi.svc_map)) { 4456 ret = ath10k_wmi_adaptive_qcs(ar, true); 4457 if (ret) { 4458 ath10k_warn(ar, "failed to enable adaptive qcs: %d\n", 4459 ret); 4460 goto err_core_stop; 4461 } 4462 } 4463 4464 if (test_bit(WMI_SERVICE_BURST, ar->wmi.svc_map)) { 4465 param = ar->wmi.pdev_param->burst_enable; 4466 ret = ath10k_wmi_pdev_set_param(ar, param, 0); 4467 if (ret) { 4468 ath10k_warn(ar, "failed to disable burst: %d\n", ret); 4469 goto err_core_stop; 4470 } 4471 } 4472 4473 __ath10k_set_antenna(ar, ar->cfg_tx_chainmask, ar->cfg_rx_chainmask); 4474 4475 /* 4476 * By default FW set ARP frames ac to voice (6). In that case ARP 4477 * exchange is not working properly for UAPSD enabled AP. ARP requests 4478 * which arrives with access category 0 are processed by network stack 4479 * and send back with access category 0, but FW changes access category 4480 * to 6. Set ARP frames access category to best effort (0) solves 4481 * this problem. 4482 */ 4483 4484 param = ar->wmi.pdev_param->arp_ac_override; 4485 ret = ath10k_wmi_pdev_set_param(ar, param, 0); 4486 if (ret) { 4487 ath10k_warn(ar, "failed to set arp ac override parameter: %d\n", 4488 ret); 4489 goto err_core_stop; 4490 } 4491 4492 if (test_bit(ATH10K_FW_FEATURE_SUPPORTS_ADAPTIVE_CCA, 4493 ar->running_fw->fw_file.fw_features)) { 4494 ret = ath10k_wmi_pdev_enable_adaptive_cca(ar, 1, 4495 WMI_CCA_DETECT_LEVEL_AUTO, 4496 WMI_CCA_DETECT_MARGIN_AUTO); 4497 if (ret) { 4498 ath10k_warn(ar, "failed to enable adaptive cca: %d\n", 4499 ret); 4500 goto err_core_stop; 4501 } 4502 } 4503 4504 param = ar->wmi.pdev_param->ani_enable; 4505 ret = ath10k_wmi_pdev_set_param(ar, param, 1); 4506 if (ret) { 4507 ath10k_warn(ar, "failed to enable ani by default: %d\n", 4508 ret); 4509 goto err_core_stop; 4510 } 4511 4512 ar->ani_enabled = true; 4513 4514 if (ath10k_peer_stats_enabled(ar)) { 4515 param = ar->wmi.pdev_param->peer_stats_update_period; 4516 ret = ath10k_wmi_pdev_set_param(ar, param, 4517 PEER_DEFAULT_STATS_UPDATE_PERIOD); 4518 if (ret) { 4519 ath10k_warn(ar, 4520 "failed to set peer stats period : %d\n", 4521 ret); 4522 goto err_core_stop; 4523 } 4524 } 4525 4526 param = ar->wmi.pdev_param->enable_btcoex; 4527 if (test_bit(WMI_SERVICE_COEX_GPIO, ar->wmi.svc_map) && 4528 test_bit(ATH10K_FW_FEATURE_BTCOEX_PARAM, 4529 ar->running_fw->fw_file.fw_features)) { 4530 ret = ath10k_wmi_pdev_set_param(ar, param, 0); 4531 if (ret) { 4532 ath10k_warn(ar, 4533 "failed to set btcoex param: %d\n", ret); 4534 goto err_core_stop; 4535 } 4536 clear_bit(ATH10K_FLAG_BTCOEX, &ar->dev_flags); 4537 } 4538 4539 ar->num_started_vdevs = 0; 4540 ath10k_regd_update(ar); 4541 4542 ath10k_spectral_start(ar); 4543 ath10k_thermal_set_throttling(ar); 4544 4545 mutex_unlock(&ar->conf_mutex); 4546 return 0; 4547 4548 err_core_stop: 4549 ath10k_core_stop(ar); 4550 4551 err_power_down: 4552 ath10k_hif_power_down(ar); 4553 4554 err_off: 4555 ar->state = ATH10K_STATE_OFF; 4556 4557 err: 4558 mutex_unlock(&ar->conf_mutex); 4559 return ret; 4560 } 4561 4562 static void ath10k_stop(struct ieee80211_hw *hw) 4563 { 4564 struct ath10k *ar = hw->priv; 4565 4566 ath10k_drain_tx(ar); 4567 4568 mutex_lock(&ar->conf_mutex); 4569 if (ar->state != ATH10K_STATE_OFF) { 4570 ath10k_halt(ar); 4571 ar->state = ATH10K_STATE_OFF; 4572 } 4573 mutex_unlock(&ar->conf_mutex); 4574 4575 cancel_delayed_work_sync(&ar->scan.timeout); 4576 cancel_work_sync(&ar->restart_work); 4577 } 4578 4579 static int ath10k_config_ps(struct ath10k *ar) 4580 { 4581 struct ath10k_vif *arvif; 4582 int ret = 0; 4583 4584 lockdep_assert_held(&ar->conf_mutex); 4585 4586 list_for_each_entry(arvif, &ar->arvifs, list) { 4587 ret = ath10k_mac_vif_setup_ps(arvif); 4588 if (ret) { 4589 ath10k_warn(ar, "failed to setup powersave: %d\n", ret); 4590 break; 4591 } 4592 } 4593 4594 return ret; 4595 } 4596 4597 static int ath10k_mac_txpower_setup(struct ath10k *ar, int txpower) 4598 { 4599 int ret; 4600 u32 param; 4601 4602 lockdep_assert_held(&ar->conf_mutex); 4603 4604 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac txpower %d\n", txpower); 4605 4606 param = ar->wmi.pdev_param->txpower_limit2g; 4607 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2); 4608 if (ret) { 4609 ath10k_warn(ar, "failed to set 2g txpower %d: %d\n", 4610 txpower, ret); 4611 return ret; 4612 } 4613 4614 param = ar->wmi.pdev_param->txpower_limit5g; 4615 ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2); 4616 if (ret) { 4617 ath10k_warn(ar, "failed to set 5g txpower %d: %d\n", 4618 txpower, ret); 4619 return ret; 4620 } 4621 4622 return 0; 4623 } 4624 4625 static int ath10k_mac_txpower_recalc(struct ath10k *ar) 4626 { 4627 struct ath10k_vif *arvif; 4628 int ret, txpower = -1; 4629 4630 lockdep_assert_held(&ar->conf_mutex); 4631 4632 list_for_each_entry(arvif, &ar->arvifs, list) { 4633 WARN_ON(arvif->txpower < 0); 4634 4635 if (txpower == -1) 4636 txpower = arvif->txpower; 4637 else 4638 txpower = min(txpower, arvif->txpower); 4639 } 4640 4641 if (WARN_ON(txpower == -1)) 4642 return -EINVAL; 4643 4644 ret = ath10k_mac_txpower_setup(ar, txpower); 4645 if (ret) { 4646 ath10k_warn(ar, "failed to setup tx power %d: %d\n", 4647 txpower, ret); 4648 return ret; 4649 } 4650 4651 return 0; 4652 } 4653 4654 static int ath10k_config(struct ieee80211_hw *hw, u32 changed) 4655 { 4656 struct ath10k *ar = hw->priv; 4657 struct ieee80211_conf *conf = &hw->conf; 4658 int ret = 0; 4659 4660 mutex_lock(&ar->conf_mutex); 4661 4662 if (changed & IEEE80211_CONF_CHANGE_PS) 4663 ath10k_config_ps(ar); 4664 4665 if (changed & IEEE80211_CONF_CHANGE_MONITOR) { 4666 ar->monitor = conf->flags & IEEE80211_CONF_MONITOR; 4667 ret = ath10k_monitor_recalc(ar); 4668 if (ret) 4669 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret); 4670 } 4671 4672 mutex_unlock(&ar->conf_mutex); 4673 return ret; 4674 } 4675 4676 static u32 get_nss_from_chainmask(u16 chain_mask) 4677 { 4678 if ((chain_mask & 0xf) == 0xf) 4679 return 4; 4680 else if ((chain_mask & 0x7) == 0x7) 4681 return 3; 4682 else if ((chain_mask & 0x3) == 0x3) 4683 return 2; 4684 return 1; 4685 } 4686 4687 static int ath10k_mac_set_txbf_conf(struct ath10k_vif *arvif) 4688 { 4689 u32 value = 0; 4690 struct ath10k *ar = arvif->ar; 4691 int nsts; 4692 int sound_dim; 4693 4694 if (ath10k_wmi_get_txbf_conf_scheme(ar) != WMI_TXBF_CONF_BEFORE_ASSOC) 4695 return 0; 4696 4697 nsts = ath10k_mac_get_vht_cap_bf_sts(ar); 4698 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE | 4699 IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE)) 4700 value |= SM(nsts, WMI_TXBF_STS_CAP_OFFSET); 4701 4702 sound_dim = ath10k_mac_get_vht_cap_bf_sound_dim(ar); 4703 if (ar->vht_cap_info & (IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE | 4704 IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE)) 4705 value |= SM(sound_dim, WMI_BF_SOUND_DIM_OFFSET); 4706 4707 if (!value) 4708 return 0; 4709 4710 if (ar->vht_cap_info & IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE) 4711 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFER; 4712 4713 if (ar->vht_cap_info & IEEE80211_VHT_CAP_MU_BEAMFORMER_CAPABLE) 4714 value |= (WMI_VDEV_PARAM_TXBF_MU_TX_BFER | 4715 WMI_VDEV_PARAM_TXBF_SU_TX_BFER); 4716 4717 if (ar->vht_cap_info & IEEE80211_VHT_CAP_SU_BEAMFORMEE_CAPABLE) 4718 value |= WMI_VDEV_PARAM_TXBF_SU_TX_BFEE; 4719 4720 if (ar->vht_cap_info & IEEE80211_VHT_CAP_MU_BEAMFORMEE_CAPABLE) 4721 value |= (WMI_VDEV_PARAM_TXBF_MU_TX_BFEE | 4722 WMI_VDEV_PARAM_TXBF_SU_TX_BFEE); 4723 4724 return ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, 4725 ar->wmi.vdev_param->txbf, value); 4726 } 4727 4728 /* 4729 * TODO: 4730 * Figure out how to handle WMI_VDEV_SUBTYPE_P2P_DEVICE, 4731 * because we will send mgmt frames without CCK. This requirement 4732 * for P2P_FIND/GO_NEG should be handled by checking CCK flag 4733 * in the TX packet. 4734 */ 4735 static int ath10k_add_interface(struct ieee80211_hw *hw, 4736 struct ieee80211_vif *vif) 4737 { 4738 struct ath10k *ar = hw->priv; 4739 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 4740 struct ath10k_peer *peer; 4741 enum wmi_sta_powersave_param param; 4742 int ret = 0; 4743 u32 value; 4744 int bit; 4745 int i; 4746 u32 vdev_param; 4747 4748 vif->driver_flags |= IEEE80211_VIF_SUPPORTS_UAPSD; 4749 4750 mutex_lock(&ar->conf_mutex); 4751 4752 memset(arvif, 0, sizeof(*arvif)); 4753 ath10k_mac_txq_init(vif->txq); 4754 4755 arvif->ar = ar; 4756 arvif->vif = vif; 4757 4758 INIT_LIST_HEAD(&arvif->list); 4759 INIT_WORK(&arvif->ap_csa_work, ath10k_mac_vif_ap_csa_work); 4760 INIT_DELAYED_WORK(&arvif->connection_loss_work, 4761 ath10k_mac_vif_sta_connection_loss_work); 4762 4763 for (i = 0; i < ARRAY_SIZE(arvif->bitrate_mask.control); i++) { 4764 arvif->bitrate_mask.control[i].legacy = 0xffffffff; 4765 memset(arvif->bitrate_mask.control[i].ht_mcs, 0xff, 4766 sizeof(arvif->bitrate_mask.control[i].ht_mcs)); 4767 memset(arvif->bitrate_mask.control[i].vht_mcs, 0xff, 4768 sizeof(arvif->bitrate_mask.control[i].vht_mcs)); 4769 } 4770 4771 if (ar->num_peers >= ar->max_num_peers) { 4772 ath10k_warn(ar, "refusing vdev creation due to insufficient peer entry resources in firmware\n"); 4773 ret = -ENOBUFS; 4774 goto err; 4775 } 4776 4777 if (ar->free_vdev_map == 0) { 4778 ath10k_warn(ar, "Free vdev map is empty, no more interfaces allowed.\n"); 4779 ret = -EBUSY; 4780 goto err; 4781 } 4782 bit = __ffs64(ar->free_vdev_map); 4783 4784 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac create vdev %i map %llx\n", 4785 bit, ar->free_vdev_map); 4786 4787 arvif->vdev_id = bit; 4788 arvif->vdev_subtype = 4789 ath10k_wmi_get_vdev_subtype(ar, WMI_VDEV_SUBTYPE_NONE); 4790 4791 switch (vif->type) { 4792 case NL80211_IFTYPE_P2P_DEVICE: 4793 arvif->vdev_type = WMI_VDEV_TYPE_STA; 4794 arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype 4795 (ar, WMI_VDEV_SUBTYPE_P2P_DEVICE); 4796 break; 4797 case NL80211_IFTYPE_UNSPECIFIED: 4798 case NL80211_IFTYPE_STATION: 4799 arvif->vdev_type = WMI_VDEV_TYPE_STA; 4800 if (vif->p2p) 4801 arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype 4802 (ar, WMI_VDEV_SUBTYPE_P2P_CLIENT); 4803 break; 4804 case NL80211_IFTYPE_ADHOC: 4805 arvif->vdev_type = WMI_VDEV_TYPE_IBSS; 4806 break; 4807 case NL80211_IFTYPE_MESH_POINT: 4808 if (test_bit(WMI_SERVICE_MESH_11S, ar->wmi.svc_map)) { 4809 arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype 4810 (ar, WMI_VDEV_SUBTYPE_MESH_11S); 4811 } else if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) { 4812 ret = -EINVAL; 4813 ath10k_warn(ar, "must load driver with rawmode=1 to add mesh interfaces\n"); 4814 goto err; 4815 } 4816 arvif->vdev_type = WMI_VDEV_TYPE_AP; 4817 break; 4818 case NL80211_IFTYPE_AP: 4819 arvif->vdev_type = WMI_VDEV_TYPE_AP; 4820 4821 if (vif->p2p) 4822 arvif->vdev_subtype = ath10k_wmi_get_vdev_subtype 4823 (ar, WMI_VDEV_SUBTYPE_P2P_GO); 4824 break; 4825 case NL80211_IFTYPE_MONITOR: 4826 arvif->vdev_type = WMI_VDEV_TYPE_MONITOR; 4827 break; 4828 default: 4829 WARN_ON(1); 4830 break; 4831 } 4832 4833 /* Using vdev_id as queue number will make it very easy to do per-vif 4834 * tx queue locking. This shouldn't wrap due to interface combinations 4835 * but do a modulo for correctness sake and prevent using offchannel tx 4836 * queues for regular vif tx. 4837 */ 4838 vif->cab_queue = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1); 4839 for (i = 0; i < ARRAY_SIZE(vif->hw_queue); i++) 4840 vif->hw_queue[i] = arvif->vdev_id % (IEEE80211_MAX_QUEUES - 1); 4841 4842 /* Some firmware revisions don't wait for beacon tx completion before 4843 * sending another SWBA event. This could lead to hardware using old 4844 * (freed) beacon data in some cases, e.g. tx credit starvation 4845 * combined with missed TBTT. This is very very rare. 4846 * 4847 * On non-IOMMU-enabled hosts this could be a possible security issue 4848 * because hw could beacon some random data on the air. On 4849 * IOMMU-enabled hosts DMAR faults would occur in most cases and target 4850 * device would crash. 4851 * 4852 * Since there are no beacon tx completions (implicit nor explicit) 4853 * propagated to host the only workaround for this is to allocate a 4854 * DMA-coherent buffer for a lifetime of a vif and use it for all 4855 * beacon tx commands. Worst case for this approach is some beacons may 4856 * become corrupted, e.g. have garbled IEs or out-of-date TIM bitmap. 4857 */ 4858 if (vif->type == NL80211_IFTYPE_ADHOC || 4859 vif->type == NL80211_IFTYPE_MESH_POINT || 4860 vif->type == NL80211_IFTYPE_AP) { 4861 arvif->beacon_buf = dma_zalloc_coherent(ar->dev, 4862 IEEE80211_MAX_FRAME_LEN, 4863 &arvif->beacon_paddr, 4864 GFP_ATOMIC); 4865 if (!arvif->beacon_buf) { 4866 ret = -ENOMEM; 4867 ath10k_warn(ar, "failed to allocate beacon buffer: %d\n", 4868 ret); 4869 goto err; 4870 } 4871 } 4872 if (test_bit(ATH10K_FLAG_HW_CRYPTO_DISABLED, &ar->dev_flags)) 4873 arvif->nohwcrypt = true; 4874 4875 if (arvif->nohwcrypt && 4876 !test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) { 4877 ath10k_warn(ar, "cryptmode module param needed for sw crypto\n"); 4878 goto err; 4879 } 4880 4881 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev create %d (add interface) type %d subtype %d bcnmode %s\n", 4882 arvif->vdev_id, arvif->vdev_type, arvif->vdev_subtype, 4883 arvif->beacon_buf ? "single-buf" : "per-skb"); 4884 4885 ret = ath10k_wmi_vdev_create(ar, arvif->vdev_id, arvif->vdev_type, 4886 arvif->vdev_subtype, vif->addr); 4887 if (ret) { 4888 ath10k_warn(ar, "failed to create WMI vdev %i: %d\n", 4889 arvif->vdev_id, ret); 4890 goto err; 4891 } 4892 4893 ar->free_vdev_map &= ~(1LL << arvif->vdev_id); 4894 list_add(&arvif->list, &ar->arvifs); 4895 4896 /* It makes no sense to have firmware do keepalives. mac80211 already 4897 * takes care of this with idle connection polling. 4898 */ 4899 ret = ath10k_mac_vif_disable_keepalive(arvif); 4900 if (ret) { 4901 ath10k_warn(ar, "failed to disable keepalive on vdev %i: %d\n", 4902 arvif->vdev_id, ret); 4903 goto err_vdev_delete; 4904 } 4905 4906 arvif->def_wep_key_idx = -1; 4907 4908 vdev_param = ar->wmi.vdev_param->tx_encap_type; 4909 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, 4910 ATH10K_HW_TXRX_NATIVE_WIFI); 4911 /* 10.X firmware does not support this VDEV parameter. Do not warn */ 4912 if (ret && ret != -EOPNOTSUPP) { 4913 ath10k_warn(ar, "failed to set vdev %i TX encapsulation: %d\n", 4914 arvif->vdev_id, ret); 4915 goto err_vdev_delete; 4916 } 4917 4918 /* Configuring number of spatial stream for monitor interface is causing 4919 * target assert in qca9888 and qca6174. 4920 */ 4921 if (ar->cfg_tx_chainmask && (vif->type != NL80211_IFTYPE_MONITOR)) { 4922 u16 nss = get_nss_from_chainmask(ar->cfg_tx_chainmask); 4923 4924 vdev_param = ar->wmi.vdev_param->nss; 4925 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, 4926 nss); 4927 if (ret) { 4928 ath10k_warn(ar, "failed to set vdev %i chainmask 0x%x, nss %i: %d\n", 4929 arvif->vdev_id, ar->cfg_tx_chainmask, nss, 4930 ret); 4931 goto err_vdev_delete; 4932 } 4933 } 4934 4935 if (arvif->vdev_type == WMI_VDEV_TYPE_AP || 4936 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) { 4937 ret = ath10k_peer_create(ar, vif, NULL, arvif->vdev_id, 4938 vif->addr, WMI_PEER_TYPE_DEFAULT); 4939 if (ret) { 4940 ath10k_warn(ar, "failed to create vdev %i peer for AP/IBSS: %d\n", 4941 arvif->vdev_id, ret); 4942 goto err_vdev_delete; 4943 } 4944 4945 spin_lock_bh(&ar->data_lock); 4946 4947 peer = ath10k_peer_find(ar, arvif->vdev_id, vif->addr); 4948 if (!peer) { 4949 ath10k_warn(ar, "failed to lookup peer %pM on vdev %i\n", 4950 vif->addr, arvif->vdev_id); 4951 spin_unlock_bh(&ar->data_lock); 4952 ret = -ENOENT; 4953 goto err_peer_delete; 4954 } 4955 4956 arvif->peer_id = find_first_bit(peer->peer_ids, 4957 ATH10K_MAX_NUM_PEER_IDS); 4958 4959 spin_unlock_bh(&ar->data_lock); 4960 } else { 4961 arvif->peer_id = HTT_INVALID_PEERID; 4962 } 4963 4964 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) { 4965 ret = ath10k_mac_set_kickout(arvif); 4966 if (ret) { 4967 ath10k_warn(ar, "failed to set vdev %i kickout parameters: %d\n", 4968 arvif->vdev_id, ret); 4969 goto err_peer_delete; 4970 } 4971 } 4972 4973 if (arvif->vdev_type == WMI_VDEV_TYPE_STA) { 4974 param = WMI_STA_PS_PARAM_RX_WAKE_POLICY; 4975 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE; 4976 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, 4977 param, value); 4978 if (ret) { 4979 ath10k_warn(ar, "failed to set vdev %i RX wake policy: %d\n", 4980 arvif->vdev_id, ret); 4981 goto err_peer_delete; 4982 } 4983 4984 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif); 4985 if (ret) { 4986 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n", 4987 arvif->vdev_id, ret); 4988 goto err_peer_delete; 4989 } 4990 4991 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif); 4992 if (ret) { 4993 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n", 4994 arvif->vdev_id, ret); 4995 goto err_peer_delete; 4996 } 4997 } 4998 4999 ret = ath10k_mac_set_txbf_conf(arvif); 5000 if (ret) { 5001 ath10k_warn(ar, "failed to set txbf for vdev %d: %d\n", 5002 arvif->vdev_id, ret); 5003 goto err_peer_delete; 5004 } 5005 5006 ret = ath10k_mac_set_rts(arvif, ar->hw->wiphy->rts_threshold); 5007 if (ret) { 5008 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n", 5009 arvif->vdev_id, ret); 5010 goto err_peer_delete; 5011 } 5012 5013 arvif->txpower = vif->bss_conf.txpower; 5014 ret = ath10k_mac_txpower_recalc(ar); 5015 if (ret) { 5016 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret); 5017 goto err_peer_delete; 5018 } 5019 5020 if (vif->type == NL80211_IFTYPE_MONITOR) { 5021 ar->monitor_arvif = arvif; 5022 ret = ath10k_monitor_recalc(ar); 5023 if (ret) { 5024 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret); 5025 goto err_peer_delete; 5026 } 5027 } 5028 5029 spin_lock_bh(&ar->htt.tx_lock); 5030 if (!ar->tx_paused) 5031 ieee80211_wake_queue(ar->hw, arvif->vdev_id); 5032 spin_unlock_bh(&ar->htt.tx_lock); 5033 5034 mutex_unlock(&ar->conf_mutex); 5035 return 0; 5036 5037 err_peer_delete: 5038 if (arvif->vdev_type == WMI_VDEV_TYPE_AP || 5039 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) 5040 ath10k_wmi_peer_delete(ar, arvif->vdev_id, vif->addr); 5041 5042 err_vdev_delete: 5043 ath10k_wmi_vdev_delete(ar, arvif->vdev_id); 5044 ar->free_vdev_map |= 1LL << arvif->vdev_id; 5045 list_del(&arvif->list); 5046 5047 err: 5048 if (arvif->beacon_buf) { 5049 dma_free_coherent(ar->dev, IEEE80211_MAX_FRAME_LEN, 5050 arvif->beacon_buf, arvif->beacon_paddr); 5051 arvif->beacon_buf = NULL; 5052 } 5053 5054 mutex_unlock(&ar->conf_mutex); 5055 5056 return ret; 5057 } 5058 5059 static void ath10k_mac_vif_tx_unlock_all(struct ath10k_vif *arvif) 5060 { 5061 int i; 5062 5063 for (i = 0; i < BITS_PER_LONG; i++) 5064 ath10k_mac_vif_tx_unlock(arvif, i); 5065 } 5066 5067 static void ath10k_remove_interface(struct ieee80211_hw *hw, 5068 struct ieee80211_vif *vif) 5069 { 5070 struct ath10k *ar = hw->priv; 5071 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 5072 struct ath10k_peer *peer; 5073 int ret; 5074 int i; 5075 5076 cancel_work_sync(&arvif->ap_csa_work); 5077 cancel_delayed_work_sync(&arvif->connection_loss_work); 5078 5079 mutex_lock(&ar->conf_mutex); 5080 5081 spin_lock_bh(&ar->data_lock); 5082 ath10k_mac_vif_beacon_cleanup(arvif); 5083 spin_unlock_bh(&ar->data_lock); 5084 5085 ret = ath10k_spectral_vif_stop(arvif); 5086 if (ret) 5087 ath10k_warn(ar, "failed to stop spectral for vdev %i: %d\n", 5088 arvif->vdev_id, ret); 5089 5090 ar->free_vdev_map |= 1LL << arvif->vdev_id; 5091 list_del(&arvif->list); 5092 5093 if (arvif->vdev_type == WMI_VDEV_TYPE_AP || 5094 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) { 5095 ret = ath10k_wmi_peer_delete(arvif->ar, arvif->vdev_id, 5096 vif->addr); 5097 if (ret) 5098 ath10k_warn(ar, "failed to submit AP/IBSS self-peer removal on vdev %i: %d\n", 5099 arvif->vdev_id, ret); 5100 5101 kfree(arvif->u.ap.noa_data); 5102 } 5103 5104 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %i delete (remove interface)\n", 5105 arvif->vdev_id); 5106 5107 ret = ath10k_wmi_vdev_delete(ar, arvif->vdev_id); 5108 if (ret) 5109 ath10k_warn(ar, "failed to delete WMI vdev %i: %d\n", 5110 arvif->vdev_id, ret); 5111 5112 /* Some firmware revisions don't notify host about self-peer removal 5113 * until after associated vdev is deleted. 5114 */ 5115 if (arvif->vdev_type == WMI_VDEV_TYPE_AP || 5116 arvif->vdev_type == WMI_VDEV_TYPE_IBSS) { 5117 ret = ath10k_wait_for_peer_deleted(ar, arvif->vdev_id, 5118 vif->addr); 5119 if (ret) 5120 ath10k_warn(ar, "failed to remove AP self-peer on vdev %i: %d\n", 5121 arvif->vdev_id, ret); 5122 5123 spin_lock_bh(&ar->data_lock); 5124 ar->num_peers--; 5125 spin_unlock_bh(&ar->data_lock); 5126 } 5127 5128 spin_lock_bh(&ar->data_lock); 5129 for (i = 0; i < ARRAY_SIZE(ar->peer_map); i++) { 5130 peer = ar->peer_map[i]; 5131 if (!peer) 5132 continue; 5133 5134 if (peer->vif == vif) { 5135 ath10k_warn(ar, "found vif peer %pM entry on vdev %i after it was supposedly removed\n", 5136 vif->addr, arvif->vdev_id); 5137 peer->vif = NULL; 5138 } 5139 } 5140 spin_unlock_bh(&ar->data_lock); 5141 5142 ath10k_peer_cleanup(ar, arvif->vdev_id); 5143 ath10k_mac_txq_unref(ar, vif->txq); 5144 5145 if (vif->type == NL80211_IFTYPE_MONITOR) { 5146 ar->monitor_arvif = NULL; 5147 ret = ath10k_monitor_recalc(ar); 5148 if (ret) 5149 ath10k_warn(ar, "failed to recalc monitor: %d\n", ret); 5150 } 5151 5152 spin_lock_bh(&ar->htt.tx_lock); 5153 ath10k_mac_vif_tx_unlock_all(arvif); 5154 spin_unlock_bh(&ar->htt.tx_lock); 5155 5156 ath10k_mac_txq_unref(ar, vif->txq); 5157 5158 mutex_unlock(&ar->conf_mutex); 5159 } 5160 5161 /* 5162 * FIXME: Has to be verified. 5163 */ 5164 #define SUPPORTED_FILTERS \ 5165 (FIF_ALLMULTI | \ 5166 FIF_CONTROL | \ 5167 FIF_PSPOLL | \ 5168 FIF_OTHER_BSS | \ 5169 FIF_BCN_PRBRESP_PROMISC | \ 5170 FIF_PROBE_REQ | \ 5171 FIF_FCSFAIL) 5172 5173 static void ath10k_configure_filter(struct ieee80211_hw *hw, 5174 unsigned int changed_flags, 5175 unsigned int *total_flags, 5176 u64 multicast) 5177 { 5178 struct ath10k *ar = hw->priv; 5179 int ret; 5180 5181 mutex_lock(&ar->conf_mutex); 5182 5183 changed_flags &= SUPPORTED_FILTERS; 5184 *total_flags &= SUPPORTED_FILTERS; 5185 ar->filter_flags = *total_flags; 5186 5187 ret = ath10k_monitor_recalc(ar); 5188 if (ret) 5189 ath10k_warn(ar, "failed to recalc montior: %d\n", ret); 5190 5191 mutex_unlock(&ar->conf_mutex); 5192 } 5193 5194 static void ath10k_bss_info_changed(struct ieee80211_hw *hw, 5195 struct ieee80211_vif *vif, 5196 struct ieee80211_bss_conf *info, 5197 u32 changed) 5198 { 5199 struct ath10k *ar = hw->priv; 5200 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 5201 int ret = 0; 5202 u32 vdev_param, pdev_param, slottime, preamble; 5203 5204 mutex_lock(&ar->conf_mutex); 5205 5206 if (changed & BSS_CHANGED_IBSS) 5207 ath10k_control_ibss(arvif, info, vif->addr); 5208 5209 if (changed & BSS_CHANGED_BEACON_INT) { 5210 arvif->beacon_interval = info->beacon_int; 5211 vdev_param = ar->wmi.vdev_param->beacon_interval; 5212 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, 5213 arvif->beacon_interval); 5214 ath10k_dbg(ar, ATH10K_DBG_MAC, 5215 "mac vdev %d beacon_interval %d\n", 5216 arvif->vdev_id, arvif->beacon_interval); 5217 5218 if (ret) 5219 ath10k_warn(ar, "failed to set beacon interval for vdev %d: %i\n", 5220 arvif->vdev_id, ret); 5221 } 5222 5223 if (changed & BSS_CHANGED_BEACON) { 5224 ath10k_dbg(ar, ATH10K_DBG_MAC, 5225 "vdev %d set beacon tx mode to staggered\n", 5226 arvif->vdev_id); 5227 5228 pdev_param = ar->wmi.pdev_param->beacon_tx_mode; 5229 ret = ath10k_wmi_pdev_set_param(ar, pdev_param, 5230 WMI_BEACON_STAGGERED_MODE); 5231 if (ret) 5232 ath10k_warn(ar, "failed to set beacon mode for vdev %d: %i\n", 5233 arvif->vdev_id, ret); 5234 5235 ret = ath10k_mac_setup_bcn_tmpl(arvif); 5236 if (ret) 5237 ath10k_warn(ar, "failed to update beacon template: %d\n", 5238 ret); 5239 5240 if (ieee80211_vif_is_mesh(vif)) { 5241 /* mesh doesn't use SSID but firmware needs it */ 5242 strncpy(arvif->u.ap.ssid, "mesh", 5243 sizeof(arvif->u.ap.ssid)); 5244 arvif->u.ap.ssid_len = 4; 5245 } 5246 } 5247 5248 if (changed & BSS_CHANGED_AP_PROBE_RESP) { 5249 ret = ath10k_mac_setup_prb_tmpl(arvif); 5250 if (ret) 5251 ath10k_warn(ar, "failed to setup probe resp template on vdev %i: %d\n", 5252 arvif->vdev_id, ret); 5253 } 5254 5255 if (changed & (BSS_CHANGED_BEACON_INFO | BSS_CHANGED_BEACON)) { 5256 arvif->dtim_period = info->dtim_period; 5257 5258 ath10k_dbg(ar, ATH10K_DBG_MAC, 5259 "mac vdev %d dtim_period %d\n", 5260 arvif->vdev_id, arvif->dtim_period); 5261 5262 vdev_param = ar->wmi.vdev_param->dtim_period; 5263 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, 5264 arvif->dtim_period); 5265 if (ret) 5266 ath10k_warn(ar, "failed to set dtim period for vdev %d: %i\n", 5267 arvif->vdev_id, ret); 5268 } 5269 5270 if (changed & BSS_CHANGED_SSID && 5271 vif->type == NL80211_IFTYPE_AP) { 5272 arvif->u.ap.ssid_len = info->ssid_len; 5273 if (info->ssid_len) 5274 memcpy(arvif->u.ap.ssid, info->ssid, info->ssid_len); 5275 arvif->u.ap.hidden_ssid = info->hidden_ssid; 5276 } 5277 5278 if (changed & BSS_CHANGED_BSSID && !is_zero_ether_addr(info->bssid)) 5279 ether_addr_copy(arvif->bssid, info->bssid); 5280 5281 if (changed & BSS_CHANGED_BEACON_ENABLED) 5282 ath10k_control_beaconing(arvif, info); 5283 5284 if (changed & BSS_CHANGED_ERP_CTS_PROT) { 5285 arvif->use_cts_prot = info->use_cts_prot; 5286 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d cts_prot %d\n", 5287 arvif->vdev_id, info->use_cts_prot); 5288 5289 ret = ath10k_recalc_rtscts_prot(arvif); 5290 if (ret) 5291 ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n", 5292 arvif->vdev_id, ret); 5293 5294 vdev_param = ar->wmi.vdev_param->protection_mode; 5295 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, 5296 info->use_cts_prot ? 1 : 0); 5297 if (ret) 5298 ath10k_warn(ar, "failed to set protection mode %d on vdev %i: %d\n", 5299 info->use_cts_prot, arvif->vdev_id, ret); 5300 } 5301 5302 if (changed & BSS_CHANGED_ERP_SLOT) { 5303 if (info->use_short_slot) 5304 slottime = WMI_VDEV_SLOT_TIME_SHORT; /* 9us */ 5305 5306 else 5307 slottime = WMI_VDEV_SLOT_TIME_LONG; /* 20us */ 5308 5309 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d slot_time %d\n", 5310 arvif->vdev_id, slottime); 5311 5312 vdev_param = ar->wmi.vdev_param->slot_time; 5313 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, 5314 slottime); 5315 if (ret) 5316 ath10k_warn(ar, "failed to set erp slot for vdev %d: %i\n", 5317 arvif->vdev_id, ret); 5318 } 5319 5320 if (changed & BSS_CHANGED_ERP_PREAMBLE) { 5321 if (info->use_short_preamble) 5322 preamble = WMI_VDEV_PREAMBLE_SHORT; 5323 else 5324 preamble = WMI_VDEV_PREAMBLE_LONG; 5325 5326 ath10k_dbg(ar, ATH10K_DBG_MAC, 5327 "mac vdev %d preamble %dn", 5328 arvif->vdev_id, preamble); 5329 5330 vdev_param = ar->wmi.vdev_param->preamble; 5331 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, 5332 preamble); 5333 if (ret) 5334 ath10k_warn(ar, "failed to set preamble for vdev %d: %i\n", 5335 arvif->vdev_id, ret); 5336 } 5337 5338 if (changed & BSS_CHANGED_ASSOC) { 5339 if (info->assoc) { 5340 /* Workaround: Make sure monitor vdev is not running 5341 * when associating to prevent some firmware revisions 5342 * (e.g. 10.1 and 10.2) from crashing. 5343 */ 5344 if (ar->monitor_started) 5345 ath10k_monitor_stop(ar); 5346 ath10k_bss_assoc(hw, vif, info); 5347 ath10k_monitor_recalc(ar); 5348 } else { 5349 ath10k_bss_disassoc(hw, vif); 5350 } 5351 } 5352 5353 if (changed & BSS_CHANGED_TXPOWER) { 5354 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev_id %i txpower %d\n", 5355 arvif->vdev_id, info->txpower); 5356 5357 arvif->txpower = info->txpower; 5358 ret = ath10k_mac_txpower_recalc(ar); 5359 if (ret) 5360 ath10k_warn(ar, "failed to recalc tx power: %d\n", ret); 5361 } 5362 5363 if (changed & BSS_CHANGED_PS) { 5364 arvif->ps = vif->bss_conf.ps; 5365 5366 ret = ath10k_config_ps(ar); 5367 if (ret) 5368 ath10k_warn(ar, "failed to setup ps on vdev %i: %d\n", 5369 arvif->vdev_id, ret); 5370 } 5371 5372 mutex_unlock(&ar->conf_mutex); 5373 } 5374 5375 static int ath10k_hw_scan(struct ieee80211_hw *hw, 5376 struct ieee80211_vif *vif, 5377 struct ieee80211_scan_request *hw_req) 5378 { 5379 struct ath10k *ar = hw->priv; 5380 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 5381 struct cfg80211_scan_request *req = &hw_req->req; 5382 struct wmi_start_scan_arg arg; 5383 int ret = 0; 5384 int i; 5385 5386 mutex_lock(&ar->conf_mutex); 5387 5388 spin_lock_bh(&ar->data_lock); 5389 switch (ar->scan.state) { 5390 case ATH10K_SCAN_IDLE: 5391 reinit_completion(&ar->scan.started); 5392 reinit_completion(&ar->scan.completed); 5393 ar->scan.state = ATH10K_SCAN_STARTING; 5394 ar->scan.is_roc = false; 5395 ar->scan.vdev_id = arvif->vdev_id; 5396 ret = 0; 5397 break; 5398 case ATH10K_SCAN_STARTING: 5399 case ATH10K_SCAN_RUNNING: 5400 case ATH10K_SCAN_ABORTING: 5401 ret = -EBUSY; 5402 break; 5403 } 5404 spin_unlock_bh(&ar->data_lock); 5405 5406 if (ret) 5407 goto exit; 5408 5409 memset(&arg, 0, sizeof(arg)); 5410 ath10k_wmi_start_scan_init(ar, &arg); 5411 arg.vdev_id = arvif->vdev_id; 5412 arg.scan_id = ATH10K_SCAN_ID; 5413 5414 if (req->ie_len) { 5415 arg.ie_len = req->ie_len; 5416 memcpy(arg.ie, req->ie, arg.ie_len); 5417 } 5418 5419 if (req->n_ssids) { 5420 arg.n_ssids = req->n_ssids; 5421 for (i = 0; i < arg.n_ssids; i++) { 5422 arg.ssids[i].len = req->ssids[i].ssid_len; 5423 arg.ssids[i].ssid = req->ssids[i].ssid; 5424 } 5425 } else { 5426 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE; 5427 } 5428 5429 if (req->n_channels) { 5430 arg.n_channels = req->n_channels; 5431 for (i = 0; i < arg.n_channels; i++) 5432 arg.channels[i] = req->channels[i]->center_freq; 5433 } 5434 5435 ret = ath10k_start_scan(ar, &arg); 5436 if (ret) { 5437 ath10k_warn(ar, "failed to start hw scan: %d\n", ret); 5438 spin_lock_bh(&ar->data_lock); 5439 ar->scan.state = ATH10K_SCAN_IDLE; 5440 spin_unlock_bh(&ar->data_lock); 5441 } 5442 5443 /* Add a 200ms margin to account for event/command processing */ 5444 ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout, 5445 msecs_to_jiffies(arg.max_scan_time + 5446 200)); 5447 5448 exit: 5449 mutex_unlock(&ar->conf_mutex); 5450 return ret; 5451 } 5452 5453 static void ath10k_cancel_hw_scan(struct ieee80211_hw *hw, 5454 struct ieee80211_vif *vif) 5455 { 5456 struct ath10k *ar = hw->priv; 5457 5458 mutex_lock(&ar->conf_mutex); 5459 ath10k_scan_abort(ar); 5460 mutex_unlock(&ar->conf_mutex); 5461 5462 cancel_delayed_work_sync(&ar->scan.timeout); 5463 } 5464 5465 static void ath10k_set_key_h_def_keyidx(struct ath10k *ar, 5466 struct ath10k_vif *arvif, 5467 enum set_key_cmd cmd, 5468 struct ieee80211_key_conf *key) 5469 { 5470 u32 vdev_param = arvif->ar->wmi.vdev_param->def_keyid; 5471 int ret; 5472 5473 /* 10.1 firmware branch requires default key index to be set to group 5474 * key index after installing it. Otherwise FW/HW Txes corrupted 5475 * frames with multi-vif APs. This is not required for main firmware 5476 * branch (e.g. 636). 5477 * 5478 * This is also needed for 636 fw for IBSS-RSN to work more reliably. 5479 * 5480 * FIXME: It remains unknown if this is required for multi-vif STA 5481 * interfaces on 10.1. 5482 */ 5483 5484 if (arvif->vdev_type != WMI_VDEV_TYPE_AP && 5485 arvif->vdev_type != WMI_VDEV_TYPE_IBSS) 5486 return; 5487 5488 if (key->cipher == WLAN_CIPHER_SUITE_WEP40) 5489 return; 5490 5491 if (key->cipher == WLAN_CIPHER_SUITE_WEP104) 5492 return; 5493 5494 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE) 5495 return; 5496 5497 if (cmd != SET_KEY) 5498 return; 5499 5500 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, 5501 key->keyidx); 5502 if (ret) 5503 ath10k_warn(ar, "failed to set vdev %i group key as default key: %d\n", 5504 arvif->vdev_id, ret); 5505 } 5506 5507 static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd, 5508 struct ieee80211_vif *vif, struct ieee80211_sta *sta, 5509 struct ieee80211_key_conf *key) 5510 { 5511 struct ath10k *ar = hw->priv; 5512 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 5513 struct ath10k_peer *peer; 5514 const u8 *peer_addr; 5515 bool is_wep = key->cipher == WLAN_CIPHER_SUITE_WEP40 || 5516 key->cipher == WLAN_CIPHER_SUITE_WEP104; 5517 int ret = 0; 5518 int ret2; 5519 u32 flags = 0; 5520 u32 flags2; 5521 5522 /* this one needs to be done in software */ 5523 if (key->cipher == WLAN_CIPHER_SUITE_AES_CMAC) 5524 return 1; 5525 5526 if (arvif->nohwcrypt) 5527 return 1; 5528 5529 if (key->keyidx > WMI_MAX_KEY_INDEX) 5530 return -ENOSPC; 5531 5532 mutex_lock(&ar->conf_mutex); 5533 5534 if (sta) 5535 peer_addr = sta->addr; 5536 else if (arvif->vdev_type == WMI_VDEV_TYPE_STA) 5537 peer_addr = vif->bss_conf.bssid; 5538 else 5539 peer_addr = vif->addr; 5540 5541 key->hw_key_idx = key->keyidx; 5542 5543 if (is_wep) { 5544 if (cmd == SET_KEY) 5545 arvif->wep_keys[key->keyidx] = key; 5546 else 5547 arvif->wep_keys[key->keyidx] = NULL; 5548 } 5549 5550 /* the peer should not disappear in mid-way (unless FW goes awry) since 5551 * we already hold conf_mutex. we just make sure its there now. */ 5552 spin_lock_bh(&ar->data_lock); 5553 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr); 5554 spin_unlock_bh(&ar->data_lock); 5555 5556 if (!peer) { 5557 if (cmd == SET_KEY) { 5558 ath10k_warn(ar, "failed to install key for non-existent peer %pM\n", 5559 peer_addr); 5560 ret = -EOPNOTSUPP; 5561 goto exit; 5562 } else { 5563 /* if the peer doesn't exist there is no key to disable 5564 * anymore */ 5565 goto exit; 5566 } 5567 } 5568 5569 if (key->flags & IEEE80211_KEY_FLAG_PAIRWISE) 5570 flags |= WMI_KEY_PAIRWISE; 5571 else 5572 flags |= WMI_KEY_GROUP; 5573 5574 if (is_wep) { 5575 if (cmd == DISABLE_KEY) 5576 ath10k_clear_vdev_key(arvif, key); 5577 5578 /* When WEP keys are uploaded it's possible that there are 5579 * stations associated already (e.g. when merging) without any 5580 * keys. Static WEP needs an explicit per-peer key upload. 5581 */ 5582 if (vif->type == NL80211_IFTYPE_ADHOC && 5583 cmd == SET_KEY) 5584 ath10k_mac_vif_update_wep_key(arvif, key); 5585 5586 /* 802.1x never sets the def_wep_key_idx so each set_key() 5587 * call changes default tx key. 5588 * 5589 * Static WEP sets def_wep_key_idx via .set_default_unicast_key 5590 * after first set_key(). 5591 */ 5592 if (cmd == SET_KEY && arvif->def_wep_key_idx == -1) 5593 flags |= WMI_KEY_TX_USAGE; 5594 } 5595 5596 ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags); 5597 if (ret) { 5598 WARN_ON(ret > 0); 5599 ath10k_warn(ar, "failed to install key for vdev %i peer %pM: %d\n", 5600 arvif->vdev_id, peer_addr, ret); 5601 goto exit; 5602 } 5603 5604 /* mac80211 sets static WEP keys as groupwise while firmware requires 5605 * them to be installed twice as both pairwise and groupwise. 5606 */ 5607 if (is_wep && !sta && vif->type == NL80211_IFTYPE_STATION) { 5608 flags2 = flags; 5609 flags2 &= ~WMI_KEY_GROUP; 5610 flags2 |= WMI_KEY_PAIRWISE; 5611 5612 ret = ath10k_install_key(arvif, key, cmd, peer_addr, flags2); 5613 if (ret) { 5614 WARN_ON(ret > 0); 5615 ath10k_warn(ar, "failed to install (ucast) key for vdev %i peer %pM: %d\n", 5616 arvif->vdev_id, peer_addr, ret); 5617 ret2 = ath10k_install_key(arvif, key, DISABLE_KEY, 5618 peer_addr, flags); 5619 if (ret2) { 5620 WARN_ON(ret2 > 0); 5621 ath10k_warn(ar, "failed to disable (mcast) key for vdev %i peer %pM: %d\n", 5622 arvif->vdev_id, peer_addr, ret2); 5623 } 5624 goto exit; 5625 } 5626 } 5627 5628 ath10k_set_key_h_def_keyidx(ar, arvif, cmd, key); 5629 5630 spin_lock_bh(&ar->data_lock); 5631 peer = ath10k_peer_find(ar, arvif->vdev_id, peer_addr); 5632 if (peer && cmd == SET_KEY) 5633 peer->keys[key->keyidx] = key; 5634 else if (peer && cmd == DISABLE_KEY) 5635 peer->keys[key->keyidx] = NULL; 5636 else if (peer == NULL) 5637 /* impossible unless FW goes crazy */ 5638 ath10k_warn(ar, "Peer %pM disappeared!\n", peer_addr); 5639 spin_unlock_bh(&ar->data_lock); 5640 5641 exit: 5642 mutex_unlock(&ar->conf_mutex); 5643 return ret; 5644 } 5645 5646 static void ath10k_set_default_unicast_key(struct ieee80211_hw *hw, 5647 struct ieee80211_vif *vif, 5648 int keyidx) 5649 { 5650 struct ath10k *ar = hw->priv; 5651 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 5652 int ret; 5653 5654 mutex_lock(&arvif->ar->conf_mutex); 5655 5656 if (arvif->ar->state != ATH10K_STATE_ON) 5657 goto unlock; 5658 5659 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d set keyidx %d\n", 5660 arvif->vdev_id, keyidx); 5661 5662 ret = ath10k_wmi_vdev_set_param(arvif->ar, 5663 arvif->vdev_id, 5664 arvif->ar->wmi.vdev_param->def_keyid, 5665 keyidx); 5666 5667 if (ret) { 5668 ath10k_warn(ar, "failed to update wep key index for vdev %d: %d\n", 5669 arvif->vdev_id, 5670 ret); 5671 goto unlock; 5672 } 5673 5674 arvif->def_wep_key_idx = keyidx; 5675 5676 unlock: 5677 mutex_unlock(&arvif->ar->conf_mutex); 5678 } 5679 5680 static void ath10k_sta_rc_update_wk(struct work_struct *wk) 5681 { 5682 struct ath10k *ar; 5683 struct ath10k_vif *arvif; 5684 struct ath10k_sta *arsta; 5685 struct ieee80211_sta *sta; 5686 struct cfg80211_chan_def def; 5687 enum nl80211_band band; 5688 const u8 *ht_mcs_mask; 5689 const u16 *vht_mcs_mask; 5690 u32 changed, bw, nss, smps; 5691 int err; 5692 5693 arsta = container_of(wk, struct ath10k_sta, update_wk); 5694 sta = container_of((void *)arsta, struct ieee80211_sta, drv_priv); 5695 arvif = arsta->arvif; 5696 ar = arvif->ar; 5697 5698 if (WARN_ON(ath10k_mac_vif_chan(arvif->vif, &def))) 5699 return; 5700 5701 band = def.chan->band; 5702 ht_mcs_mask = arvif->bitrate_mask.control[band].ht_mcs; 5703 vht_mcs_mask = arvif->bitrate_mask.control[band].vht_mcs; 5704 5705 spin_lock_bh(&ar->data_lock); 5706 5707 changed = arsta->changed; 5708 arsta->changed = 0; 5709 5710 bw = arsta->bw; 5711 nss = arsta->nss; 5712 smps = arsta->smps; 5713 5714 spin_unlock_bh(&ar->data_lock); 5715 5716 mutex_lock(&ar->conf_mutex); 5717 5718 nss = max_t(u32, 1, nss); 5719 nss = min(nss, max(ath10k_mac_max_ht_nss(ht_mcs_mask), 5720 ath10k_mac_max_vht_nss(vht_mcs_mask))); 5721 5722 if (changed & IEEE80211_RC_BW_CHANGED) { 5723 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM peer bw %d\n", 5724 sta->addr, bw); 5725 5726 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr, 5727 WMI_PEER_CHAN_WIDTH, bw); 5728 if (err) 5729 ath10k_warn(ar, "failed to update STA %pM peer bw %d: %d\n", 5730 sta->addr, bw, err); 5731 } 5732 5733 if (changed & IEEE80211_RC_NSS_CHANGED) { 5734 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM nss %d\n", 5735 sta->addr, nss); 5736 5737 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr, 5738 WMI_PEER_NSS, nss); 5739 if (err) 5740 ath10k_warn(ar, "failed to update STA %pM nss %d: %d\n", 5741 sta->addr, nss, err); 5742 } 5743 5744 if (changed & IEEE80211_RC_SMPS_CHANGED) { 5745 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM smps %d\n", 5746 sta->addr, smps); 5747 5748 err = ath10k_wmi_peer_set_param(ar, arvif->vdev_id, sta->addr, 5749 WMI_PEER_SMPS_STATE, smps); 5750 if (err) 5751 ath10k_warn(ar, "failed to update STA %pM smps %d: %d\n", 5752 sta->addr, smps, err); 5753 } 5754 5755 if (changed & IEEE80211_RC_SUPP_RATES_CHANGED || 5756 changed & IEEE80211_RC_NSS_CHANGED) { 5757 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac update sta %pM supp rates/nss\n", 5758 sta->addr); 5759 5760 err = ath10k_station_assoc(ar, arvif->vif, sta, true); 5761 if (err) 5762 ath10k_warn(ar, "failed to reassociate station: %pM\n", 5763 sta->addr); 5764 } 5765 5766 mutex_unlock(&ar->conf_mutex); 5767 } 5768 5769 static int ath10k_mac_inc_num_stations(struct ath10k_vif *arvif, 5770 struct ieee80211_sta *sta) 5771 { 5772 struct ath10k *ar = arvif->ar; 5773 5774 lockdep_assert_held(&ar->conf_mutex); 5775 5776 if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls) 5777 return 0; 5778 5779 if (ar->num_stations >= ar->max_num_stations) 5780 return -ENOBUFS; 5781 5782 ar->num_stations++; 5783 5784 return 0; 5785 } 5786 5787 static void ath10k_mac_dec_num_stations(struct ath10k_vif *arvif, 5788 struct ieee80211_sta *sta) 5789 { 5790 struct ath10k *ar = arvif->ar; 5791 5792 lockdep_assert_held(&ar->conf_mutex); 5793 5794 if (arvif->vdev_type == WMI_VDEV_TYPE_STA && !sta->tdls) 5795 return; 5796 5797 ar->num_stations--; 5798 } 5799 5800 struct ath10k_mac_tdls_iter_data { 5801 u32 num_tdls_stations; 5802 struct ieee80211_vif *curr_vif; 5803 }; 5804 5805 static void ath10k_mac_tdls_vif_stations_count_iter(void *data, 5806 struct ieee80211_sta *sta) 5807 { 5808 struct ath10k_mac_tdls_iter_data *iter_data = data; 5809 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv; 5810 struct ieee80211_vif *sta_vif = arsta->arvif->vif; 5811 5812 if (sta->tdls && sta_vif == iter_data->curr_vif) 5813 iter_data->num_tdls_stations++; 5814 } 5815 5816 static int ath10k_mac_tdls_vif_stations_count(struct ieee80211_hw *hw, 5817 struct ieee80211_vif *vif) 5818 { 5819 struct ath10k_mac_tdls_iter_data data = {}; 5820 5821 data.curr_vif = vif; 5822 5823 ieee80211_iterate_stations_atomic(hw, 5824 ath10k_mac_tdls_vif_stations_count_iter, 5825 &data); 5826 return data.num_tdls_stations; 5827 } 5828 5829 static void ath10k_mac_tdls_vifs_count_iter(void *data, u8 *mac, 5830 struct ieee80211_vif *vif) 5831 { 5832 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 5833 int *num_tdls_vifs = data; 5834 5835 if (vif->type != NL80211_IFTYPE_STATION) 5836 return; 5837 5838 if (ath10k_mac_tdls_vif_stations_count(arvif->ar->hw, vif) > 0) 5839 (*num_tdls_vifs)++; 5840 } 5841 5842 static int ath10k_mac_tdls_vifs_count(struct ieee80211_hw *hw) 5843 { 5844 int num_tdls_vifs = 0; 5845 5846 ieee80211_iterate_active_interfaces_atomic(hw, 5847 IEEE80211_IFACE_ITER_NORMAL, 5848 ath10k_mac_tdls_vifs_count_iter, 5849 &num_tdls_vifs); 5850 return num_tdls_vifs; 5851 } 5852 5853 static int ath10k_sta_state(struct ieee80211_hw *hw, 5854 struct ieee80211_vif *vif, 5855 struct ieee80211_sta *sta, 5856 enum ieee80211_sta_state old_state, 5857 enum ieee80211_sta_state new_state) 5858 { 5859 struct ath10k *ar = hw->priv; 5860 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 5861 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv; 5862 struct ath10k_peer *peer; 5863 int ret = 0; 5864 int i; 5865 5866 if (old_state == IEEE80211_STA_NOTEXIST && 5867 new_state == IEEE80211_STA_NONE) { 5868 memset(arsta, 0, sizeof(*arsta)); 5869 arsta->arvif = arvif; 5870 INIT_WORK(&arsta->update_wk, ath10k_sta_rc_update_wk); 5871 5872 for (i = 0; i < ARRAY_SIZE(sta->txq); i++) 5873 ath10k_mac_txq_init(sta->txq[i]); 5874 } 5875 5876 /* cancel must be done outside the mutex to avoid deadlock */ 5877 if ((old_state == IEEE80211_STA_NONE && 5878 new_state == IEEE80211_STA_NOTEXIST)) 5879 cancel_work_sync(&arsta->update_wk); 5880 5881 mutex_lock(&ar->conf_mutex); 5882 5883 if (old_state == IEEE80211_STA_NOTEXIST && 5884 new_state == IEEE80211_STA_NONE) { 5885 /* 5886 * New station addition. 5887 */ 5888 enum wmi_peer_type peer_type = WMI_PEER_TYPE_DEFAULT; 5889 u32 num_tdls_stations; 5890 u32 num_tdls_vifs; 5891 5892 ath10k_dbg(ar, ATH10K_DBG_MAC, 5893 "mac vdev %d peer create %pM (new sta) sta %d / %d peer %d / %d\n", 5894 arvif->vdev_id, sta->addr, 5895 ar->num_stations + 1, ar->max_num_stations, 5896 ar->num_peers + 1, ar->max_num_peers); 5897 5898 ret = ath10k_mac_inc_num_stations(arvif, sta); 5899 if (ret) { 5900 ath10k_warn(ar, "refusing to associate station: too many connected already (%d)\n", 5901 ar->max_num_stations); 5902 goto exit; 5903 } 5904 5905 if (sta->tdls) 5906 peer_type = WMI_PEER_TYPE_TDLS; 5907 5908 ret = ath10k_peer_create(ar, vif, sta, arvif->vdev_id, 5909 sta->addr, peer_type); 5910 if (ret) { 5911 ath10k_warn(ar, "failed to add peer %pM for vdev %d when adding a new sta: %i\n", 5912 sta->addr, arvif->vdev_id, ret); 5913 ath10k_mac_dec_num_stations(arvif, sta); 5914 goto exit; 5915 } 5916 5917 spin_lock_bh(&ar->data_lock); 5918 5919 peer = ath10k_peer_find(ar, arvif->vdev_id, sta->addr); 5920 if (!peer) { 5921 ath10k_warn(ar, "failed to lookup peer %pM on vdev %i\n", 5922 vif->addr, arvif->vdev_id); 5923 spin_unlock_bh(&ar->data_lock); 5924 ath10k_peer_delete(ar, arvif->vdev_id, sta->addr); 5925 ath10k_mac_dec_num_stations(arvif, sta); 5926 ret = -ENOENT; 5927 goto exit; 5928 } 5929 5930 arsta->peer_id = find_first_bit(peer->peer_ids, 5931 ATH10K_MAX_NUM_PEER_IDS); 5932 5933 spin_unlock_bh(&ar->data_lock); 5934 5935 if (!sta->tdls) 5936 goto exit; 5937 5938 num_tdls_stations = ath10k_mac_tdls_vif_stations_count(hw, vif); 5939 num_tdls_vifs = ath10k_mac_tdls_vifs_count(hw); 5940 5941 if (num_tdls_vifs >= ar->max_num_tdls_vdevs && 5942 num_tdls_stations == 0) { 5943 ath10k_warn(ar, "vdev %i exceeded maximum number of tdls vdevs %i\n", 5944 arvif->vdev_id, ar->max_num_tdls_vdevs); 5945 ath10k_peer_delete(ar, arvif->vdev_id, sta->addr); 5946 ath10k_mac_dec_num_stations(arvif, sta); 5947 ret = -ENOBUFS; 5948 goto exit; 5949 } 5950 5951 if (num_tdls_stations == 0) { 5952 /* This is the first tdls peer in current vif */ 5953 enum wmi_tdls_state state = WMI_TDLS_ENABLE_ACTIVE; 5954 5955 ret = ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id, 5956 state); 5957 if (ret) { 5958 ath10k_warn(ar, "failed to update fw tdls state on vdev %i: %i\n", 5959 arvif->vdev_id, ret); 5960 ath10k_peer_delete(ar, arvif->vdev_id, 5961 sta->addr); 5962 ath10k_mac_dec_num_stations(arvif, sta); 5963 goto exit; 5964 } 5965 } 5966 5967 ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id, sta, 5968 WMI_TDLS_PEER_STATE_PEERING); 5969 if (ret) { 5970 ath10k_warn(ar, 5971 "failed to update tdls peer %pM for vdev %d when adding a new sta: %i\n", 5972 sta->addr, arvif->vdev_id, ret); 5973 ath10k_peer_delete(ar, arvif->vdev_id, sta->addr); 5974 ath10k_mac_dec_num_stations(arvif, sta); 5975 5976 if (num_tdls_stations != 0) 5977 goto exit; 5978 ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id, 5979 WMI_TDLS_DISABLE); 5980 } 5981 } else if ((old_state == IEEE80211_STA_NONE && 5982 new_state == IEEE80211_STA_NOTEXIST)) { 5983 /* 5984 * Existing station deletion. 5985 */ 5986 ath10k_dbg(ar, ATH10K_DBG_MAC, 5987 "mac vdev %d peer delete %pM (sta gone)\n", 5988 arvif->vdev_id, sta->addr); 5989 5990 ret = ath10k_peer_delete(ar, arvif->vdev_id, sta->addr); 5991 if (ret) 5992 ath10k_warn(ar, "failed to delete peer %pM for vdev %d: %i\n", 5993 sta->addr, arvif->vdev_id, ret); 5994 5995 ath10k_mac_dec_num_stations(arvif, sta); 5996 5997 spin_lock_bh(&ar->data_lock); 5998 for (i = 0; i < ARRAY_SIZE(ar->peer_map); i++) { 5999 peer = ar->peer_map[i]; 6000 if (!peer) 6001 continue; 6002 6003 if (peer->sta == sta) { 6004 ath10k_warn(ar, "found sta peer %pM (ptr %p id %d) entry on vdev %i after it was supposedly removed\n", 6005 sta->addr, peer, i, arvif->vdev_id); 6006 peer->sta = NULL; 6007 6008 /* Clean up the peer object as well since we 6009 * must have failed to do this above. 6010 */ 6011 list_del(&peer->list); 6012 ar->peer_map[i] = NULL; 6013 kfree(peer); 6014 ar->num_peers--; 6015 } 6016 } 6017 spin_unlock_bh(&ar->data_lock); 6018 6019 for (i = 0; i < ARRAY_SIZE(sta->txq); i++) 6020 ath10k_mac_txq_unref(ar, sta->txq[i]); 6021 6022 if (!sta->tdls) 6023 goto exit; 6024 6025 if (ath10k_mac_tdls_vif_stations_count(hw, vif)) 6026 goto exit; 6027 6028 /* This was the last tdls peer in current vif */ 6029 ret = ath10k_wmi_update_fw_tdls_state(ar, arvif->vdev_id, 6030 WMI_TDLS_DISABLE); 6031 if (ret) { 6032 ath10k_warn(ar, "failed to update fw tdls state on vdev %i: %i\n", 6033 arvif->vdev_id, ret); 6034 } 6035 } else if (old_state == IEEE80211_STA_AUTH && 6036 new_state == IEEE80211_STA_ASSOC && 6037 (vif->type == NL80211_IFTYPE_AP || 6038 vif->type == NL80211_IFTYPE_MESH_POINT || 6039 vif->type == NL80211_IFTYPE_ADHOC)) { 6040 /* 6041 * New association. 6042 */ 6043 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM associated\n", 6044 sta->addr); 6045 6046 ret = ath10k_station_assoc(ar, vif, sta, false); 6047 if (ret) 6048 ath10k_warn(ar, "failed to associate station %pM for vdev %i: %i\n", 6049 sta->addr, arvif->vdev_id, ret); 6050 } else if (old_state == IEEE80211_STA_ASSOC && 6051 new_state == IEEE80211_STA_AUTHORIZED && 6052 sta->tdls) { 6053 /* 6054 * Tdls station authorized. 6055 */ 6056 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac tdls sta %pM authorized\n", 6057 sta->addr); 6058 6059 ret = ath10k_station_assoc(ar, vif, sta, false); 6060 if (ret) { 6061 ath10k_warn(ar, "failed to associate tdls station %pM for vdev %i: %i\n", 6062 sta->addr, arvif->vdev_id, ret); 6063 goto exit; 6064 } 6065 6066 ret = ath10k_mac_tdls_peer_update(ar, arvif->vdev_id, sta, 6067 WMI_TDLS_PEER_STATE_CONNECTED); 6068 if (ret) 6069 ath10k_warn(ar, "failed to update tdls peer %pM for vdev %i: %i\n", 6070 sta->addr, arvif->vdev_id, ret); 6071 } else if (old_state == IEEE80211_STA_ASSOC && 6072 new_state == IEEE80211_STA_AUTH && 6073 (vif->type == NL80211_IFTYPE_AP || 6074 vif->type == NL80211_IFTYPE_MESH_POINT || 6075 vif->type == NL80211_IFTYPE_ADHOC)) { 6076 /* 6077 * Disassociation. 6078 */ 6079 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac sta %pM disassociated\n", 6080 sta->addr); 6081 6082 ret = ath10k_station_disassoc(ar, vif, sta); 6083 if (ret) 6084 ath10k_warn(ar, "failed to disassociate station: %pM vdev %i: %i\n", 6085 sta->addr, arvif->vdev_id, ret); 6086 } 6087 exit: 6088 mutex_unlock(&ar->conf_mutex); 6089 return ret; 6090 } 6091 6092 static int ath10k_conf_tx_uapsd(struct ath10k *ar, struct ieee80211_vif *vif, 6093 u16 ac, bool enable) 6094 { 6095 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 6096 struct wmi_sta_uapsd_auto_trig_arg arg = {}; 6097 u32 prio = 0, acc = 0; 6098 u32 value = 0; 6099 int ret = 0; 6100 6101 lockdep_assert_held(&ar->conf_mutex); 6102 6103 if (arvif->vdev_type != WMI_VDEV_TYPE_STA) 6104 return 0; 6105 6106 switch (ac) { 6107 case IEEE80211_AC_VO: 6108 value = WMI_STA_PS_UAPSD_AC3_DELIVERY_EN | 6109 WMI_STA_PS_UAPSD_AC3_TRIGGER_EN; 6110 prio = 7; 6111 acc = 3; 6112 break; 6113 case IEEE80211_AC_VI: 6114 value = WMI_STA_PS_UAPSD_AC2_DELIVERY_EN | 6115 WMI_STA_PS_UAPSD_AC2_TRIGGER_EN; 6116 prio = 5; 6117 acc = 2; 6118 break; 6119 case IEEE80211_AC_BE: 6120 value = WMI_STA_PS_UAPSD_AC1_DELIVERY_EN | 6121 WMI_STA_PS_UAPSD_AC1_TRIGGER_EN; 6122 prio = 2; 6123 acc = 1; 6124 break; 6125 case IEEE80211_AC_BK: 6126 value = WMI_STA_PS_UAPSD_AC0_DELIVERY_EN | 6127 WMI_STA_PS_UAPSD_AC0_TRIGGER_EN; 6128 prio = 0; 6129 acc = 0; 6130 break; 6131 } 6132 6133 if (enable) 6134 arvif->u.sta.uapsd |= value; 6135 else 6136 arvif->u.sta.uapsd &= ~value; 6137 6138 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, 6139 WMI_STA_PS_PARAM_UAPSD, 6140 arvif->u.sta.uapsd); 6141 if (ret) { 6142 ath10k_warn(ar, "failed to set uapsd params: %d\n", ret); 6143 goto exit; 6144 } 6145 6146 if (arvif->u.sta.uapsd) 6147 value = WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD; 6148 else 6149 value = WMI_STA_PS_RX_WAKE_POLICY_WAKE; 6150 6151 ret = ath10k_wmi_set_sta_ps_param(ar, arvif->vdev_id, 6152 WMI_STA_PS_PARAM_RX_WAKE_POLICY, 6153 value); 6154 if (ret) 6155 ath10k_warn(ar, "failed to set rx wake param: %d\n", ret); 6156 6157 ret = ath10k_mac_vif_recalc_ps_wake_threshold(arvif); 6158 if (ret) { 6159 ath10k_warn(ar, "failed to recalc ps wake threshold on vdev %i: %d\n", 6160 arvif->vdev_id, ret); 6161 return ret; 6162 } 6163 6164 ret = ath10k_mac_vif_recalc_ps_poll_count(arvif); 6165 if (ret) { 6166 ath10k_warn(ar, "failed to recalc ps poll count on vdev %i: %d\n", 6167 arvif->vdev_id, ret); 6168 return ret; 6169 } 6170 6171 if (test_bit(WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, ar->wmi.svc_map) || 6172 test_bit(WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, ar->wmi.svc_map)) { 6173 /* Only userspace can make an educated decision when to send 6174 * trigger frame. The following effectively disables u-UAPSD 6175 * autotrigger in firmware (which is enabled by default 6176 * provided the autotrigger service is available). 6177 */ 6178 6179 arg.wmm_ac = acc; 6180 arg.user_priority = prio; 6181 arg.service_interval = 0; 6182 arg.suspend_interval = WMI_STA_UAPSD_MAX_INTERVAL_MSEC; 6183 arg.delay_interval = WMI_STA_UAPSD_MAX_INTERVAL_MSEC; 6184 6185 ret = ath10k_wmi_vdev_sta_uapsd(ar, arvif->vdev_id, 6186 arvif->bssid, &arg, 1); 6187 if (ret) { 6188 ath10k_warn(ar, "failed to set uapsd auto trigger %d\n", 6189 ret); 6190 return ret; 6191 } 6192 } 6193 6194 exit: 6195 return ret; 6196 } 6197 6198 static int ath10k_conf_tx(struct ieee80211_hw *hw, 6199 struct ieee80211_vif *vif, u16 ac, 6200 const struct ieee80211_tx_queue_params *params) 6201 { 6202 struct ath10k *ar = hw->priv; 6203 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 6204 struct wmi_wmm_params_arg *p = NULL; 6205 int ret; 6206 6207 mutex_lock(&ar->conf_mutex); 6208 6209 switch (ac) { 6210 case IEEE80211_AC_VO: 6211 p = &arvif->wmm_params.ac_vo; 6212 break; 6213 case IEEE80211_AC_VI: 6214 p = &arvif->wmm_params.ac_vi; 6215 break; 6216 case IEEE80211_AC_BE: 6217 p = &arvif->wmm_params.ac_be; 6218 break; 6219 case IEEE80211_AC_BK: 6220 p = &arvif->wmm_params.ac_bk; 6221 break; 6222 } 6223 6224 if (WARN_ON(!p)) { 6225 ret = -EINVAL; 6226 goto exit; 6227 } 6228 6229 p->cwmin = params->cw_min; 6230 p->cwmax = params->cw_max; 6231 p->aifs = params->aifs; 6232 6233 /* 6234 * The channel time duration programmed in the HW is in absolute 6235 * microseconds, while mac80211 gives the txop in units of 6236 * 32 microseconds. 6237 */ 6238 p->txop = params->txop * 32; 6239 6240 if (ar->wmi.ops->gen_vdev_wmm_conf) { 6241 ret = ath10k_wmi_vdev_wmm_conf(ar, arvif->vdev_id, 6242 &arvif->wmm_params); 6243 if (ret) { 6244 ath10k_warn(ar, "failed to set vdev wmm params on vdev %i: %d\n", 6245 arvif->vdev_id, ret); 6246 goto exit; 6247 } 6248 } else { 6249 /* This won't work well with multi-interface cases but it's 6250 * better than nothing. 6251 */ 6252 ret = ath10k_wmi_pdev_set_wmm_params(ar, &arvif->wmm_params); 6253 if (ret) { 6254 ath10k_warn(ar, "failed to set wmm params: %d\n", ret); 6255 goto exit; 6256 } 6257 } 6258 6259 ret = ath10k_conf_tx_uapsd(ar, vif, ac, params->uapsd); 6260 if (ret) 6261 ath10k_warn(ar, "failed to set sta uapsd: %d\n", ret); 6262 6263 exit: 6264 mutex_unlock(&ar->conf_mutex); 6265 return ret; 6266 } 6267 6268 #define ATH10K_ROC_TIMEOUT_HZ (2 * HZ) 6269 6270 static int ath10k_remain_on_channel(struct ieee80211_hw *hw, 6271 struct ieee80211_vif *vif, 6272 struct ieee80211_channel *chan, 6273 int duration, 6274 enum ieee80211_roc_type type) 6275 { 6276 struct ath10k *ar = hw->priv; 6277 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 6278 struct wmi_start_scan_arg arg; 6279 int ret = 0; 6280 u32 scan_time_msec; 6281 6282 mutex_lock(&ar->conf_mutex); 6283 6284 spin_lock_bh(&ar->data_lock); 6285 switch (ar->scan.state) { 6286 case ATH10K_SCAN_IDLE: 6287 reinit_completion(&ar->scan.started); 6288 reinit_completion(&ar->scan.completed); 6289 reinit_completion(&ar->scan.on_channel); 6290 ar->scan.state = ATH10K_SCAN_STARTING; 6291 ar->scan.is_roc = true; 6292 ar->scan.vdev_id = arvif->vdev_id; 6293 ar->scan.roc_freq = chan->center_freq; 6294 ar->scan.roc_notify = true; 6295 ret = 0; 6296 break; 6297 case ATH10K_SCAN_STARTING: 6298 case ATH10K_SCAN_RUNNING: 6299 case ATH10K_SCAN_ABORTING: 6300 ret = -EBUSY; 6301 break; 6302 } 6303 spin_unlock_bh(&ar->data_lock); 6304 6305 if (ret) 6306 goto exit; 6307 6308 scan_time_msec = ar->hw->wiphy->max_remain_on_channel_duration * 2; 6309 6310 memset(&arg, 0, sizeof(arg)); 6311 ath10k_wmi_start_scan_init(ar, &arg); 6312 arg.vdev_id = arvif->vdev_id; 6313 arg.scan_id = ATH10K_SCAN_ID; 6314 arg.n_channels = 1; 6315 arg.channels[0] = chan->center_freq; 6316 arg.dwell_time_active = scan_time_msec; 6317 arg.dwell_time_passive = scan_time_msec; 6318 arg.max_scan_time = scan_time_msec; 6319 arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE; 6320 arg.scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ; 6321 arg.burst_duration_ms = duration; 6322 6323 ret = ath10k_start_scan(ar, &arg); 6324 if (ret) { 6325 ath10k_warn(ar, "failed to start roc scan: %d\n", ret); 6326 spin_lock_bh(&ar->data_lock); 6327 ar->scan.state = ATH10K_SCAN_IDLE; 6328 spin_unlock_bh(&ar->data_lock); 6329 goto exit; 6330 } 6331 6332 ret = wait_for_completion_timeout(&ar->scan.on_channel, 3 * HZ); 6333 if (ret == 0) { 6334 ath10k_warn(ar, "failed to switch to channel for roc scan\n"); 6335 6336 ret = ath10k_scan_stop(ar); 6337 if (ret) 6338 ath10k_warn(ar, "failed to stop scan: %d\n", ret); 6339 6340 ret = -ETIMEDOUT; 6341 goto exit; 6342 } 6343 6344 ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout, 6345 msecs_to_jiffies(duration)); 6346 6347 ret = 0; 6348 exit: 6349 mutex_unlock(&ar->conf_mutex); 6350 return ret; 6351 } 6352 6353 static int ath10k_cancel_remain_on_channel(struct ieee80211_hw *hw) 6354 { 6355 struct ath10k *ar = hw->priv; 6356 6357 mutex_lock(&ar->conf_mutex); 6358 6359 spin_lock_bh(&ar->data_lock); 6360 ar->scan.roc_notify = false; 6361 spin_unlock_bh(&ar->data_lock); 6362 6363 ath10k_scan_abort(ar); 6364 6365 mutex_unlock(&ar->conf_mutex); 6366 6367 cancel_delayed_work_sync(&ar->scan.timeout); 6368 6369 return 0; 6370 } 6371 6372 /* 6373 * Both RTS and Fragmentation threshold are interface-specific 6374 * in ath10k, but device-specific in mac80211. 6375 */ 6376 6377 static int ath10k_set_rts_threshold(struct ieee80211_hw *hw, u32 value) 6378 { 6379 struct ath10k *ar = hw->priv; 6380 struct ath10k_vif *arvif; 6381 int ret = 0; 6382 6383 mutex_lock(&ar->conf_mutex); 6384 list_for_each_entry(arvif, &ar->arvifs, list) { 6385 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac vdev %d rts threshold %d\n", 6386 arvif->vdev_id, value); 6387 6388 ret = ath10k_mac_set_rts(arvif, value); 6389 if (ret) { 6390 ath10k_warn(ar, "failed to set rts threshold for vdev %d: %d\n", 6391 arvif->vdev_id, ret); 6392 break; 6393 } 6394 } 6395 mutex_unlock(&ar->conf_mutex); 6396 6397 return ret; 6398 } 6399 6400 static int ath10k_mac_op_set_frag_threshold(struct ieee80211_hw *hw, u32 value) 6401 { 6402 /* Even though there's a WMI enum for fragmentation threshold no known 6403 * firmware actually implements it. Moreover it is not possible to rely 6404 * frame fragmentation to mac80211 because firmware clears the "more 6405 * fragments" bit in frame control making it impossible for remote 6406 * devices to reassemble frames. 6407 * 6408 * Hence implement a dummy callback just to say fragmentation isn't 6409 * supported. This effectively prevents mac80211 from doing frame 6410 * fragmentation in software. 6411 */ 6412 return -EOPNOTSUPP; 6413 } 6414 6415 static void ath10k_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 6416 u32 queues, bool drop) 6417 { 6418 struct ath10k *ar = hw->priv; 6419 bool skip; 6420 long time_left; 6421 6422 /* mac80211 doesn't care if we really xmit queued frames or not 6423 * we'll collect those frames either way if we stop/delete vdevs */ 6424 if (drop) 6425 return; 6426 6427 mutex_lock(&ar->conf_mutex); 6428 6429 if (ar->state == ATH10K_STATE_WEDGED) 6430 goto skip; 6431 6432 time_left = wait_event_timeout(ar->htt.empty_tx_wq, ({ 6433 bool empty; 6434 6435 spin_lock_bh(&ar->htt.tx_lock); 6436 empty = (ar->htt.num_pending_tx == 0); 6437 spin_unlock_bh(&ar->htt.tx_lock); 6438 6439 skip = (ar->state == ATH10K_STATE_WEDGED) || 6440 test_bit(ATH10K_FLAG_CRASH_FLUSH, 6441 &ar->dev_flags); 6442 6443 (empty || skip); 6444 }), ATH10K_FLUSH_TIMEOUT_HZ); 6445 6446 if (time_left == 0 || skip) 6447 ath10k_warn(ar, "failed to flush transmit queue (skip %i ar-state %i): %ld\n", 6448 skip, ar->state, time_left); 6449 6450 skip: 6451 mutex_unlock(&ar->conf_mutex); 6452 } 6453 6454 /* TODO: Implement this function properly 6455 * For now it is needed to reply to Probe Requests in IBSS mode. 6456 * Propably we need this information from FW. 6457 */ 6458 static int ath10k_tx_last_beacon(struct ieee80211_hw *hw) 6459 { 6460 return 1; 6461 } 6462 6463 static void ath10k_reconfig_complete(struct ieee80211_hw *hw, 6464 enum ieee80211_reconfig_type reconfig_type) 6465 { 6466 struct ath10k *ar = hw->priv; 6467 6468 if (reconfig_type != IEEE80211_RECONFIG_TYPE_RESTART) 6469 return; 6470 6471 mutex_lock(&ar->conf_mutex); 6472 6473 /* If device failed to restart it will be in a different state, e.g. 6474 * ATH10K_STATE_WEDGED */ 6475 if (ar->state == ATH10K_STATE_RESTARTED) { 6476 ath10k_info(ar, "device successfully recovered\n"); 6477 ar->state = ATH10K_STATE_ON; 6478 ieee80211_wake_queues(ar->hw); 6479 } 6480 6481 mutex_unlock(&ar->conf_mutex); 6482 } 6483 6484 static void 6485 ath10k_mac_update_bss_chan_survey(struct ath10k *ar, 6486 struct ieee80211_channel *channel) 6487 { 6488 int ret; 6489 enum wmi_bss_survey_req_type type = WMI_BSS_SURVEY_REQ_TYPE_READ_CLEAR; 6490 6491 lockdep_assert_held(&ar->conf_mutex); 6492 6493 if (!test_bit(WMI_SERVICE_BSS_CHANNEL_INFO_64, ar->wmi.svc_map) || 6494 (ar->rx_channel != channel)) 6495 return; 6496 6497 if (ar->scan.state != ATH10K_SCAN_IDLE) { 6498 ath10k_dbg(ar, ATH10K_DBG_MAC, "ignoring bss chan info request while scanning..\n"); 6499 return; 6500 } 6501 6502 reinit_completion(&ar->bss_survey_done); 6503 6504 ret = ath10k_wmi_pdev_bss_chan_info_request(ar, type); 6505 if (ret) { 6506 ath10k_warn(ar, "failed to send pdev bss chan info request\n"); 6507 return; 6508 } 6509 6510 ret = wait_for_completion_timeout(&ar->bss_survey_done, 3 * HZ); 6511 if (!ret) { 6512 ath10k_warn(ar, "bss channel survey timed out\n"); 6513 return; 6514 } 6515 } 6516 6517 static int ath10k_get_survey(struct ieee80211_hw *hw, int idx, 6518 struct survey_info *survey) 6519 { 6520 struct ath10k *ar = hw->priv; 6521 struct ieee80211_supported_band *sband; 6522 struct survey_info *ar_survey = &ar->survey[idx]; 6523 int ret = 0; 6524 6525 mutex_lock(&ar->conf_mutex); 6526 6527 sband = hw->wiphy->bands[NL80211_BAND_2GHZ]; 6528 if (sband && idx >= sband->n_channels) { 6529 idx -= sband->n_channels; 6530 sband = NULL; 6531 } 6532 6533 if (!sband) 6534 sband = hw->wiphy->bands[NL80211_BAND_5GHZ]; 6535 6536 if (!sband || idx >= sband->n_channels) { 6537 ret = -ENOENT; 6538 goto exit; 6539 } 6540 6541 ath10k_mac_update_bss_chan_survey(ar, survey->channel); 6542 6543 spin_lock_bh(&ar->data_lock); 6544 memcpy(survey, ar_survey, sizeof(*survey)); 6545 spin_unlock_bh(&ar->data_lock); 6546 6547 survey->channel = &sband->channels[idx]; 6548 6549 if (ar->rx_channel == survey->channel) 6550 survey->filled |= SURVEY_INFO_IN_USE; 6551 6552 exit: 6553 mutex_unlock(&ar->conf_mutex); 6554 return ret; 6555 } 6556 6557 static bool 6558 ath10k_mac_bitrate_mask_has_single_rate(struct ath10k *ar, 6559 enum nl80211_band band, 6560 const struct cfg80211_bitrate_mask *mask) 6561 { 6562 int num_rates = 0; 6563 int i; 6564 6565 num_rates += hweight32(mask->control[band].legacy); 6566 6567 for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++) 6568 num_rates += hweight8(mask->control[band].ht_mcs[i]); 6569 6570 for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++) 6571 num_rates += hweight16(mask->control[band].vht_mcs[i]); 6572 6573 return num_rates == 1; 6574 } 6575 6576 static bool 6577 ath10k_mac_bitrate_mask_get_single_nss(struct ath10k *ar, 6578 enum nl80211_band band, 6579 const struct cfg80211_bitrate_mask *mask, 6580 int *nss) 6581 { 6582 struct ieee80211_supported_band *sband = &ar->mac.sbands[band]; 6583 u16 vht_mcs_map = le16_to_cpu(sband->vht_cap.vht_mcs.tx_mcs_map); 6584 u8 ht_nss_mask = 0; 6585 u8 vht_nss_mask = 0; 6586 int i; 6587 6588 if (mask->control[band].legacy) 6589 return false; 6590 6591 for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++) { 6592 if (mask->control[band].ht_mcs[i] == 0) 6593 continue; 6594 else if (mask->control[band].ht_mcs[i] == 6595 sband->ht_cap.mcs.rx_mask[i]) 6596 ht_nss_mask |= BIT(i); 6597 else 6598 return false; 6599 } 6600 6601 for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++) { 6602 if (mask->control[band].vht_mcs[i] == 0) 6603 continue; 6604 else if (mask->control[band].vht_mcs[i] == 6605 ath10k_mac_get_max_vht_mcs_map(vht_mcs_map, i)) 6606 vht_nss_mask |= BIT(i); 6607 else 6608 return false; 6609 } 6610 6611 if (ht_nss_mask != vht_nss_mask) 6612 return false; 6613 6614 if (ht_nss_mask == 0) 6615 return false; 6616 6617 if (BIT(fls(ht_nss_mask)) - 1 != ht_nss_mask) 6618 return false; 6619 6620 *nss = fls(ht_nss_mask); 6621 6622 return true; 6623 } 6624 6625 static int 6626 ath10k_mac_bitrate_mask_get_single_rate(struct ath10k *ar, 6627 enum nl80211_band band, 6628 const struct cfg80211_bitrate_mask *mask, 6629 u8 *rate, u8 *nss) 6630 { 6631 struct ieee80211_supported_band *sband = &ar->mac.sbands[band]; 6632 int rate_idx; 6633 int i; 6634 u16 bitrate; 6635 u8 preamble; 6636 u8 hw_rate; 6637 6638 if (hweight32(mask->control[band].legacy) == 1) { 6639 rate_idx = ffs(mask->control[band].legacy) - 1; 6640 6641 hw_rate = sband->bitrates[rate_idx].hw_value; 6642 bitrate = sband->bitrates[rate_idx].bitrate; 6643 6644 if (ath10k_mac_bitrate_is_cck(bitrate)) 6645 preamble = WMI_RATE_PREAMBLE_CCK; 6646 else 6647 preamble = WMI_RATE_PREAMBLE_OFDM; 6648 6649 *nss = 1; 6650 *rate = preamble << 6 | 6651 (*nss - 1) << 4 | 6652 hw_rate << 0; 6653 6654 return 0; 6655 } 6656 6657 for (i = 0; i < ARRAY_SIZE(mask->control[band].ht_mcs); i++) { 6658 if (hweight8(mask->control[band].ht_mcs[i]) == 1) { 6659 *nss = i + 1; 6660 *rate = WMI_RATE_PREAMBLE_HT << 6 | 6661 (*nss - 1) << 4 | 6662 (ffs(mask->control[band].ht_mcs[i]) - 1); 6663 6664 return 0; 6665 } 6666 } 6667 6668 for (i = 0; i < ARRAY_SIZE(mask->control[band].vht_mcs); i++) { 6669 if (hweight16(mask->control[band].vht_mcs[i]) == 1) { 6670 *nss = i + 1; 6671 *rate = WMI_RATE_PREAMBLE_VHT << 6 | 6672 (*nss - 1) << 4 | 6673 (ffs(mask->control[band].vht_mcs[i]) - 1); 6674 6675 return 0; 6676 } 6677 } 6678 6679 return -EINVAL; 6680 } 6681 6682 static int ath10k_mac_set_fixed_rate_params(struct ath10k_vif *arvif, 6683 u8 rate, u8 nss, u8 sgi, u8 ldpc) 6684 { 6685 struct ath10k *ar = arvif->ar; 6686 u32 vdev_param; 6687 int ret; 6688 6689 lockdep_assert_held(&ar->conf_mutex); 6690 6691 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac set fixed rate params vdev %i rate 0x%02hhx nss %hhu sgi %hhu\n", 6692 arvif->vdev_id, rate, nss, sgi); 6693 6694 vdev_param = ar->wmi.vdev_param->fixed_rate; 6695 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, rate); 6696 if (ret) { 6697 ath10k_warn(ar, "failed to set fixed rate param 0x%02x: %d\n", 6698 rate, ret); 6699 return ret; 6700 } 6701 6702 vdev_param = ar->wmi.vdev_param->nss; 6703 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, nss); 6704 if (ret) { 6705 ath10k_warn(ar, "failed to set nss param %d: %d\n", nss, ret); 6706 return ret; 6707 } 6708 6709 vdev_param = ar->wmi.vdev_param->sgi; 6710 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, sgi); 6711 if (ret) { 6712 ath10k_warn(ar, "failed to set sgi param %d: %d\n", sgi, ret); 6713 return ret; 6714 } 6715 6716 vdev_param = ar->wmi.vdev_param->ldpc; 6717 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, vdev_param, ldpc); 6718 if (ret) { 6719 ath10k_warn(ar, "failed to set ldpc param %d: %d\n", ldpc, ret); 6720 return ret; 6721 } 6722 6723 return 0; 6724 } 6725 6726 static bool 6727 ath10k_mac_can_set_bitrate_mask(struct ath10k *ar, 6728 enum nl80211_band band, 6729 const struct cfg80211_bitrate_mask *mask) 6730 { 6731 int i; 6732 u16 vht_mcs; 6733 6734 /* Due to firmware limitation in WMI_PEER_ASSOC_CMDID it is impossible 6735 * to express all VHT MCS rate masks. Effectively only the following 6736 * ranges can be used: none, 0-7, 0-8 and 0-9. 6737 */ 6738 for (i = 0; i < NL80211_VHT_NSS_MAX; i++) { 6739 vht_mcs = mask->control[band].vht_mcs[i]; 6740 6741 switch (vht_mcs) { 6742 case 0: 6743 case BIT(8) - 1: 6744 case BIT(9) - 1: 6745 case BIT(10) - 1: 6746 break; 6747 default: 6748 ath10k_warn(ar, "refusing bitrate mask with missing 0-7 VHT MCS rates\n"); 6749 return false; 6750 } 6751 } 6752 6753 return true; 6754 } 6755 6756 static void ath10k_mac_set_bitrate_mask_iter(void *data, 6757 struct ieee80211_sta *sta) 6758 { 6759 struct ath10k_vif *arvif = data; 6760 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv; 6761 struct ath10k *ar = arvif->ar; 6762 6763 if (arsta->arvif != arvif) 6764 return; 6765 6766 spin_lock_bh(&ar->data_lock); 6767 arsta->changed |= IEEE80211_RC_SUPP_RATES_CHANGED; 6768 spin_unlock_bh(&ar->data_lock); 6769 6770 ieee80211_queue_work(ar->hw, &arsta->update_wk); 6771 } 6772 6773 static int ath10k_mac_op_set_bitrate_mask(struct ieee80211_hw *hw, 6774 struct ieee80211_vif *vif, 6775 const struct cfg80211_bitrate_mask *mask) 6776 { 6777 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 6778 struct cfg80211_chan_def def; 6779 struct ath10k *ar = arvif->ar; 6780 enum nl80211_band band; 6781 const u8 *ht_mcs_mask; 6782 const u16 *vht_mcs_mask; 6783 u8 rate; 6784 u8 nss; 6785 u8 sgi; 6786 u8 ldpc; 6787 int single_nss; 6788 int ret; 6789 6790 if (ath10k_mac_vif_chan(vif, &def)) 6791 return -EPERM; 6792 6793 band = def.chan->band; 6794 ht_mcs_mask = mask->control[band].ht_mcs; 6795 vht_mcs_mask = mask->control[band].vht_mcs; 6796 ldpc = !!(ar->ht_cap_info & WMI_HT_CAP_LDPC); 6797 6798 sgi = mask->control[band].gi; 6799 if (sgi == NL80211_TXRATE_FORCE_LGI) 6800 return -EINVAL; 6801 6802 if (ath10k_mac_bitrate_mask_has_single_rate(ar, band, mask)) { 6803 ret = ath10k_mac_bitrate_mask_get_single_rate(ar, band, mask, 6804 &rate, &nss); 6805 if (ret) { 6806 ath10k_warn(ar, "failed to get single rate for vdev %i: %d\n", 6807 arvif->vdev_id, ret); 6808 return ret; 6809 } 6810 } else if (ath10k_mac_bitrate_mask_get_single_nss(ar, band, mask, 6811 &single_nss)) { 6812 rate = WMI_FIXED_RATE_NONE; 6813 nss = single_nss; 6814 } else { 6815 rate = WMI_FIXED_RATE_NONE; 6816 nss = min(ar->num_rf_chains, 6817 max(ath10k_mac_max_ht_nss(ht_mcs_mask), 6818 ath10k_mac_max_vht_nss(vht_mcs_mask))); 6819 6820 if (!ath10k_mac_can_set_bitrate_mask(ar, band, mask)) 6821 return -EINVAL; 6822 6823 mutex_lock(&ar->conf_mutex); 6824 6825 arvif->bitrate_mask = *mask; 6826 ieee80211_iterate_stations_atomic(ar->hw, 6827 ath10k_mac_set_bitrate_mask_iter, 6828 arvif); 6829 6830 mutex_unlock(&ar->conf_mutex); 6831 } 6832 6833 mutex_lock(&ar->conf_mutex); 6834 6835 ret = ath10k_mac_set_fixed_rate_params(arvif, rate, nss, sgi, ldpc); 6836 if (ret) { 6837 ath10k_warn(ar, "failed to set fixed rate params on vdev %i: %d\n", 6838 arvif->vdev_id, ret); 6839 goto exit; 6840 } 6841 6842 exit: 6843 mutex_unlock(&ar->conf_mutex); 6844 6845 return ret; 6846 } 6847 6848 static void ath10k_sta_rc_update(struct ieee80211_hw *hw, 6849 struct ieee80211_vif *vif, 6850 struct ieee80211_sta *sta, 6851 u32 changed) 6852 { 6853 struct ath10k *ar = hw->priv; 6854 struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv; 6855 u32 bw, smps; 6856 6857 spin_lock_bh(&ar->data_lock); 6858 6859 ath10k_dbg(ar, ATH10K_DBG_MAC, 6860 "mac sta rc update for %pM changed %08x bw %d nss %d smps %d\n", 6861 sta->addr, changed, sta->bandwidth, sta->rx_nss, 6862 sta->smps_mode); 6863 6864 if (changed & IEEE80211_RC_BW_CHANGED) { 6865 bw = WMI_PEER_CHWIDTH_20MHZ; 6866 6867 switch (sta->bandwidth) { 6868 case IEEE80211_STA_RX_BW_20: 6869 bw = WMI_PEER_CHWIDTH_20MHZ; 6870 break; 6871 case IEEE80211_STA_RX_BW_40: 6872 bw = WMI_PEER_CHWIDTH_40MHZ; 6873 break; 6874 case IEEE80211_STA_RX_BW_80: 6875 bw = WMI_PEER_CHWIDTH_80MHZ; 6876 break; 6877 case IEEE80211_STA_RX_BW_160: 6878 ath10k_warn(ar, "Invalid bandwidth %d in rc update for %pM\n", 6879 sta->bandwidth, sta->addr); 6880 bw = WMI_PEER_CHWIDTH_20MHZ; 6881 break; 6882 } 6883 6884 arsta->bw = bw; 6885 } 6886 6887 if (changed & IEEE80211_RC_NSS_CHANGED) 6888 arsta->nss = sta->rx_nss; 6889 6890 if (changed & IEEE80211_RC_SMPS_CHANGED) { 6891 smps = WMI_PEER_SMPS_PS_NONE; 6892 6893 switch (sta->smps_mode) { 6894 case IEEE80211_SMPS_AUTOMATIC: 6895 case IEEE80211_SMPS_OFF: 6896 smps = WMI_PEER_SMPS_PS_NONE; 6897 break; 6898 case IEEE80211_SMPS_STATIC: 6899 smps = WMI_PEER_SMPS_STATIC; 6900 break; 6901 case IEEE80211_SMPS_DYNAMIC: 6902 smps = WMI_PEER_SMPS_DYNAMIC; 6903 break; 6904 case IEEE80211_SMPS_NUM_MODES: 6905 ath10k_warn(ar, "Invalid smps %d in sta rc update for %pM\n", 6906 sta->smps_mode, sta->addr); 6907 smps = WMI_PEER_SMPS_PS_NONE; 6908 break; 6909 } 6910 6911 arsta->smps = smps; 6912 } 6913 6914 arsta->changed |= changed; 6915 6916 spin_unlock_bh(&ar->data_lock); 6917 6918 ieee80211_queue_work(hw, &arsta->update_wk); 6919 } 6920 6921 static u64 ath10k_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif) 6922 { 6923 /* 6924 * FIXME: Return 0 for time being. Need to figure out whether FW 6925 * has the API to fetch 64-bit local TSF 6926 */ 6927 6928 return 0; 6929 } 6930 6931 static void ath10k_set_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif, 6932 u64 tsf) 6933 { 6934 struct ath10k *ar = hw->priv; 6935 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 6936 u32 tsf_offset, vdev_param = ar->wmi.vdev_param->set_tsf; 6937 int ret; 6938 6939 /* Workaround: 6940 * 6941 * Given tsf argument is entire TSF value, but firmware accepts 6942 * only TSF offset to current TSF. 6943 * 6944 * get_tsf function is used to get offset value, however since 6945 * ath10k_get_tsf is not implemented properly, it will return 0 always. 6946 * Luckily all the caller functions to set_tsf, as of now, also rely on 6947 * get_tsf function to get entire tsf value such get_tsf() + tsf_delta, 6948 * final tsf offset value to firmware will be arithmetically correct. 6949 */ 6950 tsf_offset = tsf - ath10k_get_tsf(hw, vif); 6951 ret = ath10k_wmi_vdev_set_param(ar, arvif->vdev_id, 6952 vdev_param, tsf_offset); 6953 if (ret && ret != -EOPNOTSUPP) 6954 ath10k_warn(ar, "failed to set tsf offset: %d\n", ret); 6955 } 6956 6957 static int ath10k_ampdu_action(struct ieee80211_hw *hw, 6958 struct ieee80211_vif *vif, 6959 struct ieee80211_ampdu_params *params) 6960 { 6961 struct ath10k *ar = hw->priv; 6962 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 6963 struct ieee80211_sta *sta = params->sta; 6964 enum ieee80211_ampdu_mlme_action action = params->action; 6965 u16 tid = params->tid; 6966 6967 ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %hu action %d\n", 6968 arvif->vdev_id, sta->addr, tid, action); 6969 6970 switch (action) { 6971 case IEEE80211_AMPDU_RX_START: 6972 case IEEE80211_AMPDU_RX_STOP: 6973 /* HTT AddBa/DelBa events trigger mac80211 Rx BA session 6974 * creation/removal. Do we need to verify this? 6975 */ 6976 return 0; 6977 case IEEE80211_AMPDU_TX_START: 6978 case IEEE80211_AMPDU_TX_STOP_CONT: 6979 case IEEE80211_AMPDU_TX_STOP_FLUSH: 6980 case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT: 6981 case IEEE80211_AMPDU_TX_OPERATIONAL: 6982 /* Firmware offloads Tx aggregation entirely so deny mac80211 6983 * Tx aggregation requests. 6984 */ 6985 return -EOPNOTSUPP; 6986 } 6987 6988 return -EINVAL; 6989 } 6990 6991 static void 6992 ath10k_mac_update_rx_channel(struct ath10k *ar, 6993 struct ieee80211_chanctx_conf *ctx, 6994 struct ieee80211_vif_chanctx_switch *vifs, 6995 int n_vifs) 6996 { 6997 struct cfg80211_chan_def *def = NULL; 6998 6999 /* Both locks are required because ar->rx_channel is modified. This 7000 * allows readers to hold either lock. 7001 */ 7002 lockdep_assert_held(&ar->conf_mutex); 7003 lockdep_assert_held(&ar->data_lock); 7004 7005 WARN_ON(ctx && vifs); 7006 WARN_ON(vifs && n_vifs != 1); 7007 7008 /* FIXME: Sort of an optimization and a workaround. Peers and vifs are 7009 * on a linked list now. Doing a lookup peer -> vif -> chanctx for each 7010 * ppdu on Rx may reduce performance on low-end systems. It should be 7011 * possible to make tables/hashmaps to speed the lookup up (be vary of 7012 * cpu data cache lines though regarding sizes) but to keep the initial 7013 * implementation simple and less intrusive fallback to the slow lookup 7014 * only for multi-channel cases. Single-channel cases will remain to 7015 * use the old channel derival and thus performance should not be 7016 * affected much. 7017 */ 7018 rcu_read_lock(); 7019 if (!ctx && ath10k_mac_num_chanctxs(ar) == 1) { 7020 ieee80211_iter_chan_contexts_atomic(ar->hw, 7021 ath10k_mac_get_any_chandef_iter, 7022 &def); 7023 7024 if (vifs) 7025 def = &vifs[0].new_ctx->def; 7026 7027 ar->rx_channel = def->chan; 7028 } else if ((ctx && ath10k_mac_num_chanctxs(ar) == 0) || 7029 (ctx && (ar->state == ATH10K_STATE_RESTARTED))) { 7030 /* During driver restart due to firmware assert, since mac80211 7031 * already has valid channel context for given radio, channel 7032 * context iteration return num_chanctx > 0. So fix rx_channel 7033 * when restart is in progress. 7034 */ 7035 ar->rx_channel = ctx->def.chan; 7036 } else { 7037 ar->rx_channel = NULL; 7038 } 7039 rcu_read_unlock(); 7040 } 7041 7042 static void 7043 ath10k_mac_update_vif_chan(struct ath10k *ar, 7044 struct ieee80211_vif_chanctx_switch *vifs, 7045 int n_vifs) 7046 { 7047 struct ath10k_vif *arvif; 7048 int ret; 7049 int i; 7050 7051 lockdep_assert_held(&ar->conf_mutex); 7052 7053 /* First stop monitor interface. Some FW versions crash if there's a 7054 * lone monitor interface. 7055 */ 7056 if (ar->monitor_started) 7057 ath10k_monitor_stop(ar); 7058 7059 for (i = 0; i < n_vifs; i++) { 7060 arvif = ath10k_vif_to_arvif(vifs[i].vif); 7061 7062 ath10k_dbg(ar, ATH10K_DBG_MAC, 7063 "mac chanctx switch vdev_id %i freq %hu->%hu width %d->%d\n", 7064 arvif->vdev_id, 7065 vifs[i].old_ctx->def.chan->center_freq, 7066 vifs[i].new_ctx->def.chan->center_freq, 7067 vifs[i].old_ctx->def.width, 7068 vifs[i].new_ctx->def.width); 7069 7070 if (WARN_ON(!arvif->is_started)) 7071 continue; 7072 7073 if (WARN_ON(!arvif->is_up)) 7074 continue; 7075 7076 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id); 7077 if (ret) { 7078 ath10k_warn(ar, "failed to down vdev %d: %d\n", 7079 arvif->vdev_id, ret); 7080 continue; 7081 } 7082 } 7083 7084 /* All relevant vdevs are downed and associated channel resources 7085 * should be available for the channel switch now. 7086 */ 7087 7088 spin_lock_bh(&ar->data_lock); 7089 ath10k_mac_update_rx_channel(ar, NULL, vifs, n_vifs); 7090 spin_unlock_bh(&ar->data_lock); 7091 7092 for (i = 0; i < n_vifs; i++) { 7093 arvif = ath10k_vif_to_arvif(vifs[i].vif); 7094 7095 if (WARN_ON(!arvif->is_started)) 7096 continue; 7097 7098 if (WARN_ON(!arvif->is_up)) 7099 continue; 7100 7101 ret = ath10k_mac_setup_bcn_tmpl(arvif); 7102 if (ret) 7103 ath10k_warn(ar, "failed to update bcn tmpl during csa: %d\n", 7104 ret); 7105 7106 ret = ath10k_mac_setup_prb_tmpl(arvif); 7107 if (ret) 7108 ath10k_warn(ar, "failed to update prb tmpl during csa: %d\n", 7109 ret); 7110 7111 ret = ath10k_vdev_restart(arvif, &vifs[i].new_ctx->def); 7112 if (ret) { 7113 ath10k_warn(ar, "failed to restart vdev %d: %d\n", 7114 arvif->vdev_id, ret); 7115 continue; 7116 } 7117 7118 ret = ath10k_wmi_vdev_up(arvif->ar, arvif->vdev_id, arvif->aid, 7119 arvif->bssid); 7120 if (ret) { 7121 ath10k_warn(ar, "failed to bring vdev up %d: %d\n", 7122 arvif->vdev_id, ret); 7123 continue; 7124 } 7125 } 7126 7127 ath10k_monitor_recalc(ar); 7128 } 7129 7130 static int 7131 ath10k_mac_op_add_chanctx(struct ieee80211_hw *hw, 7132 struct ieee80211_chanctx_conf *ctx) 7133 { 7134 struct ath10k *ar = hw->priv; 7135 7136 ath10k_dbg(ar, ATH10K_DBG_MAC, 7137 "mac chanctx add freq %hu width %d ptr %p\n", 7138 ctx->def.chan->center_freq, ctx->def.width, ctx); 7139 7140 mutex_lock(&ar->conf_mutex); 7141 7142 spin_lock_bh(&ar->data_lock); 7143 ath10k_mac_update_rx_channel(ar, ctx, NULL, 0); 7144 spin_unlock_bh(&ar->data_lock); 7145 7146 ath10k_recalc_radar_detection(ar); 7147 ath10k_monitor_recalc(ar); 7148 7149 mutex_unlock(&ar->conf_mutex); 7150 7151 return 0; 7152 } 7153 7154 static void 7155 ath10k_mac_op_remove_chanctx(struct ieee80211_hw *hw, 7156 struct ieee80211_chanctx_conf *ctx) 7157 { 7158 struct ath10k *ar = hw->priv; 7159 7160 ath10k_dbg(ar, ATH10K_DBG_MAC, 7161 "mac chanctx remove freq %hu width %d ptr %p\n", 7162 ctx->def.chan->center_freq, ctx->def.width, ctx); 7163 7164 mutex_lock(&ar->conf_mutex); 7165 7166 spin_lock_bh(&ar->data_lock); 7167 ath10k_mac_update_rx_channel(ar, NULL, NULL, 0); 7168 spin_unlock_bh(&ar->data_lock); 7169 7170 ath10k_recalc_radar_detection(ar); 7171 ath10k_monitor_recalc(ar); 7172 7173 mutex_unlock(&ar->conf_mutex); 7174 } 7175 7176 struct ath10k_mac_change_chanctx_arg { 7177 struct ieee80211_chanctx_conf *ctx; 7178 struct ieee80211_vif_chanctx_switch *vifs; 7179 int n_vifs; 7180 int next_vif; 7181 }; 7182 7183 static void 7184 ath10k_mac_change_chanctx_cnt_iter(void *data, u8 *mac, 7185 struct ieee80211_vif *vif) 7186 { 7187 struct ath10k_mac_change_chanctx_arg *arg = data; 7188 7189 if (rcu_access_pointer(vif->chanctx_conf) != arg->ctx) 7190 return; 7191 7192 arg->n_vifs++; 7193 } 7194 7195 static void 7196 ath10k_mac_change_chanctx_fill_iter(void *data, u8 *mac, 7197 struct ieee80211_vif *vif) 7198 { 7199 struct ath10k_mac_change_chanctx_arg *arg = data; 7200 struct ieee80211_chanctx_conf *ctx; 7201 7202 ctx = rcu_access_pointer(vif->chanctx_conf); 7203 if (ctx != arg->ctx) 7204 return; 7205 7206 if (WARN_ON(arg->next_vif == arg->n_vifs)) 7207 return; 7208 7209 arg->vifs[arg->next_vif].vif = vif; 7210 arg->vifs[arg->next_vif].old_ctx = ctx; 7211 arg->vifs[arg->next_vif].new_ctx = ctx; 7212 arg->next_vif++; 7213 } 7214 7215 static void 7216 ath10k_mac_op_change_chanctx(struct ieee80211_hw *hw, 7217 struct ieee80211_chanctx_conf *ctx, 7218 u32 changed) 7219 { 7220 struct ath10k *ar = hw->priv; 7221 struct ath10k_mac_change_chanctx_arg arg = { .ctx = ctx }; 7222 7223 mutex_lock(&ar->conf_mutex); 7224 7225 ath10k_dbg(ar, ATH10K_DBG_MAC, 7226 "mac chanctx change freq %hu width %d ptr %p changed %x\n", 7227 ctx->def.chan->center_freq, ctx->def.width, ctx, changed); 7228 7229 /* This shouldn't really happen because channel switching should use 7230 * switch_vif_chanctx(). 7231 */ 7232 if (WARN_ON(changed & IEEE80211_CHANCTX_CHANGE_CHANNEL)) 7233 goto unlock; 7234 7235 if (changed & IEEE80211_CHANCTX_CHANGE_WIDTH) { 7236 ieee80211_iterate_active_interfaces_atomic( 7237 hw, 7238 IEEE80211_IFACE_ITER_NORMAL, 7239 ath10k_mac_change_chanctx_cnt_iter, 7240 &arg); 7241 if (arg.n_vifs == 0) 7242 goto radar; 7243 7244 arg.vifs = kcalloc(arg.n_vifs, sizeof(arg.vifs[0]), 7245 GFP_KERNEL); 7246 if (!arg.vifs) 7247 goto radar; 7248 7249 ieee80211_iterate_active_interfaces_atomic( 7250 hw, 7251 IEEE80211_IFACE_ITER_NORMAL, 7252 ath10k_mac_change_chanctx_fill_iter, 7253 &arg); 7254 ath10k_mac_update_vif_chan(ar, arg.vifs, arg.n_vifs); 7255 kfree(arg.vifs); 7256 } 7257 7258 radar: 7259 ath10k_recalc_radar_detection(ar); 7260 7261 /* FIXME: How to configure Rx chains properly? */ 7262 7263 /* No other actions are actually necessary. Firmware maintains channel 7264 * definitions per vdev internally and there's no host-side channel 7265 * context abstraction to configure, e.g. channel width. 7266 */ 7267 7268 unlock: 7269 mutex_unlock(&ar->conf_mutex); 7270 } 7271 7272 static int 7273 ath10k_mac_op_assign_vif_chanctx(struct ieee80211_hw *hw, 7274 struct ieee80211_vif *vif, 7275 struct ieee80211_chanctx_conf *ctx) 7276 { 7277 struct ath10k *ar = hw->priv; 7278 struct ath10k_vif *arvif = (void *)vif->drv_priv; 7279 int ret; 7280 7281 mutex_lock(&ar->conf_mutex); 7282 7283 ath10k_dbg(ar, ATH10K_DBG_MAC, 7284 "mac chanctx assign ptr %p vdev_id %i\n", 7285 ctx, arvif->vdev_id); 7286 7287 if (WARN_ON(arvif->is_started)) { 7288 mutex_unlock(&ar->conf_mutex); 7289 return -EBUSY; 7290 } 7291 7292 ret = ath10k_vdev_start(arvif, &ctx->def); 7293 if (ret) { 7294 ath10k_warn(ar, "failed to start vdev %i addr %pM on freq %d: %d\n", 7295 arvif->vdev_id, vif->addr, 7296 ctx->def.chan->center_freq, ret); 7297 goto err; 7298 } 7299 7300 arvif->is_started = true; 7301 7302 ret = ath10k_mac_vif_setup_ps(arvif); 7303 if (ret) { 7304 ath10k_warn(ar, "failed to update vdev %i ps: %d\n", 7305 arvif->vdev_id, ret); 7306 goto err_stop; 7307 } 7308 7309 if (vif->type == NL80211_IFTYPE_MONITOR) { 7310 ret = ath10k_wmi_vdev_up(ar, arvif->vdev_id, 0, vif->addr); 7311 if (ret) { 7312 ath10k_warn(ar, "failed to up monitor vdev %i: %d\n", 7313 arvif->vdev_id, ret); 7314 goto err_stop; 7315 } 7316 7317 arvif->is_up = true; 7318 } 7319 7320 mutex_unlock(&ar->conf_mutex); 7321 return 0; 7322 7323 err_stop: 7324 ath10k_vdev_stop(arvif); 7325 arvif->is_started = false; 7326 ath10k_mac_vif_setup_ps(arvif); 7327 7328 err: 7329 mutex_unlock(&ar->conf_mutex); 7330 return ret; 7331 } 7332 7333 static void 7334 ath10k_mac_op_unassign_vif_chanctx(struct ieee80211_hw *hw, 7335 struct ieee80211_vif *vif, 7336 struct ieee80211_chanctx_conf *ctx) 7337 { 7338 struct ath10k *ar = hw->priv; 7339 struct ath10k_vif *arvif = (void *)vif->drv_priv; 7340 int ret; 7341 7342 mutex_lock(&ar->conf_mutex); 7343 7344 ath10k_dbg(ar, ATH10K_DBG_MAC, 7345 "mac chanctx unassign ptr %p vdev_id %i\n", 7346 ctx, arvif->vdev_id); 7347 7348 WARN_ON(!arvif->is_started); 7349 7350 if (vif->type == NL80211_IFTYPE_MONITOR) { 7351 WARN_ON(!arvif->is_up); 7352 7353 ret = ath10k_wmi_vdev_down(ar, arvif->vdev_id); 7354 if (ret) 7355 ath10k_warn(ar, "failed to down monitor vdev %i: %d\n", 7356 arvif->vdev_id, ret); 7357 7358 arvif->is_up = false; 7359 } 7360 7361 ret = ath10k_vdev_stop(arvif); 7362 if (ret) 7363 ath10k_warn(ar, "failed to stop vdev %i: %d\n", 7364 arvif->vdev_id, ret); 7365 7366 arvif->is_started = false; 7367 7368 mutex_unlock(&ar->conf_mutex); 7369 } 7370 7371 static int 7372 ath10k_mac_op_switch_vif_chanctx(struct ieee80211_hw *hw, 7373 struct ieee80211_vif_chanctx_switch *vifs, 7374 int n_vifs, 7375 enum ieee80211_chanctx_switch_mode mode) 7376 { 7377 struct ath10k *ar = hw->priv; 7378 7379 mutex_lock(&ar->conf_mutex); 7380 7381 ath10k_dbg(ar, ATH10K_DBG_MAC, 7382 "mac chanctx switch n_vifs %d mode %d\n", 7383 n_vifs, mode); 7384 ath10k_mac_update_vif_chan(ar, vifs, n_vifs); 7385 7386 mutex_unlock(&ar->conf_mutex); 7387 return 0; 7388 } 7389 7390 static const struct ieee80211_ops ath10k_ops = { 7391 .tx = ath10k_mac_op_tx, 7392 .wake_tx_queue = ath10k_mac_op_wake_tx_queue, 7393 .start = ath10k_start, 7394 .stop = ath10k_stop, 7395 .config = ath10k_config, 7396 .add_interface = ath10k_add_interface, 7397 .remove_interface = ath10k_remove_interface, 7398 .configure_filter = ath10k_configure_filter, 7399 .bss_info_changed = ath10k_bss_info_changed, 7400 .hw_scan = ath10k_hw_scan, 7401 .cancel_hw_scan = ath10k_cancel_hw_scan, 7402 .set_key = ath10k_set_key, 7403 .set_default_unicast_key = ath10k_set_default_unicast_key, 7404 .sta_state = ath10k_sta_state, 7405 .conf_tx = ath10k_conf_tx, 7406 .remain_on_channel = ath10k_remain_on_channel, 7407 .cancel_remain_on_channel = ath10k_cancel_remain_on_channel, 7408 .set_rts_threshold = ath10k_set_rts_threshold, 7409 .set_frag_threshold = ath10k_mac_op_set_frag_threshold, 7410 .flush = ath10k_flush, 7411 .tx_last_beacon = ath10k_tx_last_beacon, 7412 .set_antenna = ath10k_set_antenna, 7413 .get_antenna = ath10k_get_antenna, 7414 .reconfig_complete = ath10k_reconfig_complete, 7415 .get_survey = ath10k_get_survey, 7416 .set_bitrate_mask = ath10k_mac_op_set_bitrate_mask, 7417 .sta_rc_update = ath10k_sta_rc_update, 7418 .get_tsf = ath10k_get_tsf, 7419 .set_tsf = ath10k_set_tsf, 7420 .ampdu_action = ath10k_ampdu_action, 7421 .get_et_sset_count = ath10k_debug_get_et_sset_count, 7422 .get_et_stats = ath10k_debug_get_et_stats, 7423 .get_et_strings = ath10k_debug_get_et_strings, 7424 .add_chanctx = ath10k_mac_op_add_chanctx, 7425 .remove_chanctx = ath10k_mac_op_remove_chanctx, 7426 .change_chanctx = ath10k_mac_op_change_chanctx, 7427 .assign_vif_chanctx = ath10k_mac_op_assign_vif_chanctx, 7428 .unassign_vif_chanctx = ath10k_mac_op_unassign_vif_chanctx, 7429 .switch_vif_chanctx = ath10k_mac_op_switch_vif_chanctx, 7430 7431 CFG80211_TESTMODE_CMD(ath10k_tm_cmd) 7432 7433 #ifdef CONFIG_PM 7434 .suspend = ath10k_wow_op_suspend, 7435 .resume = ath10k_wow_op_resume, 7436 #endif 7437 #ifdef CONFIG_MAC80211_DEBUGFS 7438 .sta_add_debugfs = ath10k_sta_add_debugfs, 7439 .sta_statistics = ath10k_sta_statistics, 7440 #endif 7441 }; 7442 7443 #define CHAN2G(_channel, _freq, _flags) { \ 7444 .band = NL80211_BAND_2GHZ, \ 7445 .hw_value = (_channel), \ 7446 .center_freq = (_freq), \ 7447 .flags = (_flags), \ 7448 .max_antenna_gain = 0, \ 7449 .max_power = 30, \ 7450 } 7451 7452 #define CHAN5G(_channel, _freq, _flags) { \ 7453 .band = NL80211_BAND_5GHZ, \ 7454 .hw_value = (_channel), \ 7455 .center_freq = (_freq), \ 7456 .flags = (_flags), \ 7457 .max_antenna_gain = 0, \ 7458 .max_power = 30, \ 7459 } 7460 7461 static const struct ieee80211_channel ath10k_2ghz_channels[] = { 7462 CHAN2G(1, 2412, 0), 7463 CHAN2G(2, 2417, 0), 7464 CHAN2G(3, 2422, 0), 7465 CHAN2G(4, 2427, 0), 7466 CHAN2G(5, 2432, 0), 7467 CHAN2G(6, 2437, 0), 7468 CHAN2G(7, 2442, 0), 7469 CHAN2G(8, 2447, 0), 7470 CHAN2G(9, 2452, 0), 7471 CHAN2G(10, 2457, 0), 7472 CHAN2G(11, 2462, 0), 7473 CHAN2G(12, 2467, 0), 7474 CHAN2G(13, 2472, 0), 7475 CHAN2G(14, 2484, 0), 7476 }; 7477 7478 static const struct ieee80211_channel ath10k_5ghz_channels[] = { 7479 CHAN5G(36, 5180, 0), 7480 CHAN5G(40, 5200, 0), 7481 CHAN5G(44, 5220, 0), 7482 CHAN5G(48, 5240, 0), 7483 CHAN5G(52, 5260, 0), 7484 CHAN5G(56, 5280, 0), 7485 CHAN5G(60, 5300, 0), 7486 CHAN5G(64, 5320, 0), 7487 CHAN5G(100, 5500, 0), 7488 CHAN5G(104, 5520, 0), 7489 CHAN5G(108, 5540, 0), 7490 CHAN5G(112, 5560, 0), 7491 CHAN5G(116, 5580, 0), 7492 CHAN5G(120, 5600, 0), 7493 CHAN5G(124, 5620, 0), 7494 CHAN5G(128, 5640, 0), 7495 CHAN5G(132, 5660, 0), 7496 CHAN5G(136, 5680, 0), 7497 CHAN5G(140, 5700, 0), 7498 CHAN5G(144, 5720, 0), 7499 CHAN5G(149, 5745, 0), 7500 CHAN5G(153, 5765, 0), 7501 CHAN5G(157, 5785, 0), 7502 CHAN5G(161, 5805, 0), 7503 CHAN5G(165, 5825, 0), 7504 }; 7505 7506 struct ath10k *ath10k_mac_create(size_t priv_size) 7507 { 7508 struct ieee80211_hw *hw; 7509 struct ieee80211_ops *ops; 7510 struct ath10k *ar; 7511 7512 ops = kmemdup(&ath10k_ops, sizeof(ath10k_ops), GFP_KERNEL); 7513 if (!ops) 7514 return NULL; 7515 7516 hw = ieee80211_alloc_hw(sizeof(struct ath10k) + priv_size, ops); 7517 if (!hw) { 7518 kfree(ops); 7519 return NULL; 7520 } 7521 7522 ar = hw->priv; 7523 ar->hw = hw; 7524 ar->ops = ops; 7525 7526 return ar; 7527 } 7528 7529 void ath10k_mac_destroy(struct ath10k *ar) 7530 { 7531 struct ieee80211_ops *ops = ar->ops; 7532 7533 ieee80211_free_hw(ar->hw); 7534 kfree(ops); 7535 } 7536 7537 static const struct ieee80211_iface_limit ath10k_if_limits[] = { 7538 { 7539 .max = 8, 7540 .types = BIT(NL80211_IFTYPE_STATION) 7541 | BIT(NL80211_IFTYPE_P2P_CLIENT) 7542 }, 7543 { 7544 .max = 3, 7545 .types = BIT(NL80211_IFTYPE_P2P_GO) 7546 }, 7547 { 7548 .max = 1, 7549 .types = BIT(NL80211_IFTYPE_P2P_DEVICE) 7550 }, 7551 { 7552 .max = 7, 7553 .types = BIT(NL80211_IFTYPE_AP) 7554 #ifdef CONFIG_MAC80211_MESH 7555 | BIT(NL80211_IFTYPE_MESH_POINT) 7556 #endif 7557 }, 7558 }; 7559 7560 static const struct ieee80211_iface_limit ath10k_10x_if_limits[] = { 7561 { 7562 .max = 8, 7563 .types = BIT(NL80211_IFTYPE_AP) 7564 #ifdef CONFIG_MAC80211_MESH 7565 | BIT(NL80211_IFTYPE_MESH_POINT) 7566 #endif 7567 }, 7568 { 7569 .max = 1, 7570 .types = BIT(NL80211_IFTYPE_STATION) 7571 }, 7572 }; 7573 7574 static const struct ieee80211_iface_combination ath10k_if_comb[] = { 7575 { 7576 .limits = ath10k_if_limits, 7577 .n_limits = ARRAY_SIZE(ath10k_if_limits), 7578 .max_interfaces = 8, 7579 .num_different_channels = 1, 7580 .beacon_int_infra_match = true, 7581 }, 7582 }; 7583 7584 static const struct ieee80211_iface_combination ath10k_10x_if_comb[] = { 7585 { 7586 .limits = ath10k_10x_if_limits, 7587 .n_limits = ARRAY_SIZE(ath10k_10x_if_limits), 7588 .max_interfaces = 8, 7589 .num_different_channels = 1, 7590 .beacon_int_infra_match = true, 7591 #ifdef CONFIG_ATH10K_DFS_CERTIFIED 7592 .radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) | 7593 BIT(NL80211_CHAN_WIDTH_20) | 7594 BIT(NL80211_CHAN_WIDTH_40) | 7595 BIT(NL80211_CHAN_WIDTH_80), 7596 #endif 7597 }, 7598 }; 7599 7600 static const struct ieee80211_iface_limit ath10k_tlv_if_limit[] = { 7601 { 7602 .max = 2, 7603 .types = BIT(NL80211_IFTYPE_STATION), 7604 }, 7605 { 7606 .max = 2, 7607 .types = BIT(NL80211_IFTYPE_AP) | 7608 #ifdef CONFIG_MAC80211_MESH 7609 BIT(NL80211_IFTYPE_MESH_POINT) | 7610 #endif 7611 BIT(NL80211_IFTYPE_P2P_CLIENT) | 7612 BIT(NL80211_IFTYPE_P2P_GO), 7613 }, 7614 { 7615 .max = 1, 7616 .types = BIT(NL80211_IFTYPE_P2P_DEVICE), 7617 }, 7618 }; 7619 7620 static const struct ieee80211_iface_limit ath10k_tlv_qcs_if_limit[] = { 7621 { 7622 .max = 2, 7623 .types = BIT(NL80211_IFTYPE_STATION), 7624 }, 7625 { 7626 .max = 2, 7627 .types = BIT(NL80211_IFTYPE_P2P_CLIENT), 7628 }, 7629 { 7630 .max = 1, 7631 .types = BIT(NL80211_IFTYPE_AP) | 7632 #ifdef CONFIG_MAC80211_MESH 7633 BIT(NL80211_IFTYPE_MESH_POINT) | 7634 #endif 7635 BIT(NL80211_IFTYPE_P2P_GO), 7636 }, 7637 { 7638 .max = 1, 7639 .types = BIT(NL80211_IFTYPE_P2P_DEVICE), 7640 }, 7641 }; 7642 7643 static const struct ieee80211_iface_limit ath10k_tlv_if_limit_ibss[] = { 7644 { 7645 .max = 1, 7646 .types = BIT(NL80211_IFTYPE_STATION), 7647 }, 7648 { 7649 .max = 1, 7650 .types = BIT(NL80211_IFTYPE_ADHOC), 7651 }, 7652 }; 7653 7654 /* FIXME: This is not thouroughly tested. These combinations may over- or 7655 * underestimate hw/fw capabilities. 7656 */ 7657 static struct ieee80211_iface_combination ath10k_tlv_if_comb[] = { 7658 { 7659 .limits = ath10k_tlv_if_limit, 7660 .num_different_channels = 1, 7661 .max_interfaces = 4, 7662 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit), 7663 }, 7664 { 7665 .limits = ath10k_tlv_if_limit_ibss, 7666 .num_different_channels = 1, 7667 .max_interfaces = 2, 7668 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit_ibss), 7669 }, 7670 }; 7671 7672 static struct ieee80211_iface_combination ath10k_tlv_qcs_if_comb[] = { 7673 { 7674 .limits = ath10k_tlv_if_limit, 7675 .num_different_channels = 1, 7676 .max_interfaces = 4, 7677 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit), 7678 }, 7679 { 7680 .limits = ath10k_tlv_qcs_if_limit, 7681 .num_different_channels = 2, 7682 .max_interfaces = 4, 7683 .n_limits = ARRAY_SIZE(ath10k_tlv_qcs_if_limit), 7684 }, 7685 { 7686 .limits = ath10k_tlv_if_limit_ibss, 7687 .num_different_channels = 1, 7688 .max_interfaces = 2, 7689 .n_limits = ARRAY_SIZE(ath10k_tlv_if_limit_ibss), 7690 }, 7691 }; 7692 7693 static const struct ieee80211_iface_limit ath10k_10_4_if_limits[] = { 7694 { 7695 .max = 1, 7696 .types = BIT(NL80211_IFTYPE_STATION), 7697 }, 7698 { 7699 .max = 16, 7700 .types = BIT(NL80211_IFTYPE_AP) 7701 #ifdef CONFIG_MAC80211_MESH 7702 | BIT(NL80211_IFTYPE_MESH_POINT) 7703 #endif 7704 }, 7705 }; 7706 7707 static const struct ieee80211_iface_combination ath10k_10_4_if_comb[] = { 7708 { 7709 .limits = ath10k_10_4_if_limits, 7710 .n_limits = ARRAY_SIZE(ath10k_10_4_if_limits), 7711 .max_interfaces = 16, 7712 .num_different_channels = 1, 7713 .beacon_int_infra_match = true, 7714 #ifdef CONFIG_ATH10K_DFS_CERTIFIED 7715 .radar_detect_widths = BIT(NL80211_CHAN_WIDTH_20_NOHT) | 7716 BIT(NL80211_CHAN_WIDTH_20) | 7717 BIT(NL80211_CHAN_WIDTH_40) | 7718 BIT(NL80211_CHAN_WIDTH_80), 7719 #endif 7720 }, 7721 }; 7722 7723 static void ath10k_get_arvif_iter(void *data, u8 *mac, 7724 struct ieee80211_vif *vif) 7725 { 7726 struct ath10k_vif_iter *arvif_iter = data; 7727 struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); 7728 7729 if (arvif->vdev_id == arvif_iter->vdev_id) 7730 arvif_iter->arvif = arvif; 7731 } 7732 7733 struct ath10k_vif *ath10k_get_arvif(struct ath10k *ar, u32 vdev_id) 7734 { 7735 struct ath10k_vif_iter arvif_iter; 7736 u32 flags; 7737 7738 memset(&arvif_iter, 0, sizeof(struct ath10k_vif_iter)); 7739 arvif_iter.vdev_id = vdev_id; 7740 7741 flags = IEEE80211_IFACE_ITER_RESUME_ALL; 7742 ieee80211_iterate_active_interfaces_atomic(ar->hw, 7743 flags, 7744 ath10k_get_arvif_iter, 7745 &arvif_iter); 7746 if (!arvif_iter.arvif) { 7747 ath10k_warn(ar, "No VIF found for vdev %d\n", vdev_id); 7748 return NULL; 7749 } 7750 7751 return arvif_iter.arvif; 7752 } 7753 7754 int ath10k_mac_register(struct ath10k *ar) 7755 { 7756 static const u32 cipher_suites[] = { 7757 WLAN_CIPHER_SUITE_WEP40, 7758 WLAN_CIPHER_SUITE_WEP104, 7759 WLAN_CIPHER_SUITE_TKIP, 7760 WLAN_CIPHER_SUITE_CCMP, 7761 WLAN_CIPHER_SUITE_AES_CMAC, 7762 }; 7763 struct ieee80211_supported_band *band; 7764 void *channels; 7765 int ret; 7766 7767 SET_IEEE80211_PERM_ADDR(ar->hw, ar->mac_addr); 7768 7769 SET_IEEE80211_DEV(ar->hw, ar->dev); 7770 7771 BUILD_BUG_ON((ARRAY_SIZE(ath10k_2ghz_channels) + 7772 ARRAY_SIZE(ath10k_5ghz_channels)) != 7773 ATH10K_NUM_CHANS); 7774 7775 if (ar->phy_capability & WHAL_WLAN_11G_CAPABILITY) { 7776 channels = kmemdup(ath10k_2ghz_channels, 7777 sizeof(ath10k_2ghz_channels), 7778 GFP_KERNEL); 7779 if (!channels) { 7780 ret = -ENOMEM; 7781 goto err_free; 7782 } 7783 7784 band = &ar->mac.sbands[NL80211_BAND_2GHZ]; 7785 band->n_channels = ARRAY_SIZE(ath10k_2ghz_channels); 7786 band->channels = channels; 7787 7788 if (ar->hw_params.cck_rate_map_rev2) { 7789 band->n_bitrates = ath10k_g_rates_rev2_size; 7790 band->bitrates = ath10k_g_rates_rev2; 7791 } else { 7792 band->n_bitrates = ath10k_g_rates_size; 7793 band->bitrates = ath10k_g_rates; 7794 } 7795 7796 ar->hw->wiphy->bands[NL80211_BAND_2GHZ] = band; 7797 } 7798 7799 if (ar->phy_capability & WHAL_WLAN_11A_CAPABILITY) { 7800 channels = kmemdup(ath10k_5ghz_channels, 7801 sizeof(ath10k_5ghz_channels), 7802 GFP_KERNEL); 7803 if (!channels) { 7804 ret = -ENOMEM; 7805 goto err_free; 7806 } 7807 7808 band = &ar->mac.sbands[NL80211_BAND_5GHZ]; 7809 band->n_channels = ARRAY_SIZE(ath10k_5ghz_channels); 7810 band->channels = channels; 7811 band->n_bitrates = ath10k_a_rates_size; 7812 band->bitrates = ath10k_a_rates; 7813 ar->hw->wiphy->bands[NL80211_BAND_5GHZ] = band; 7814 } 7815 7816 ath10k_mac_setup_ht_vht_cap(ar); 7817 7818 ar->hw->wiphy->interface_modes = 7819 BIT(NL80211_IFTYPE_STATION) | 7820 BIT(NL80211_IFTYPE_AP) | 7821 BIT(NL80211_IFTYPE_MESH_POINT); 7822 7823 ar->hw->wiphy->available_antennas_rx = ar->cfg_rx_chainmask; 7824 ar->hw->wiphy->available_antennas_tx = ar->cfg_tx_chainmask; 7825 7826 if (!test_bit(ATH10K_FW_FEATURE_NO_P2P, ar->normal_mode_fw.fw_file.fw_features)) 7827 ar->hw->wiphy->interface_modes |= 7828 BIT(NL80211_IFTYPE_P2P_DEVICE) | 7829 BIT(NL80211_IFTYPE_P2P_CLIENT) | 7830 BIT(NL80211_IFTYPE_P2P_GO); 7831 7832 ieee80211_hw_set(ar->hw, SIGNAL_DBM); 7833 ieee80211_hw_set(ar->hw, SUPPORTS_PS); 7834 ieee80211_hw_set(ar->hw, SUPPORTS_DYNAMIC_PS); 7835 ieee80211_hw_set(ar->hw, MFP_CAPABLE); 7836 ieee80211_hw_set(ar->hw, REPORTS_TX_ACK_STATUS); 7837 ieee80211_hw_set(ar->hw, HAS_RATE_CONTROL); 7838 ieee80211_hw_set(ar->hw, AP_LINK_PS); 7839 ieee80211_hw_set(ar->hw, SPECTRUM_MGMT); 7840 ieee80211_hw_set(ar->hw, SUPPORT_FAST_XMIT); 7841 ieee80211_hw_set(ar->hw, CONNECTION_MONITOR); 7842 ieee80211_hw_set(ar->hw, SUPPORTS_PER_STA_GTK); 7843 ieee80211_hw_set(ar->hw, WANT_MONITOR_VIF); 7844 ieee80211_hw_set(ar->hw, CHANCTX_STA_CSA); 7845 ieee80211_hw_set(ar->hw, QUEUE_CONTROL); 7846 7847 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) 7848 ieee80211_hw_set(ar->hw, SW_CRYPTO_CONTROL); 7849 7850 ar->hw->wiphy->features |= NL80211_FEATURE_STATIC_SMPS; 7851 ar->hw->wiphy->flags |= WIPHY_FLAG_IBSS_RSN; 7852 7853 if (ar->ht_cap_info & WMI_HT_CAP_DYNAMIC_SMPS) 7854 ar->hw->wiphy->features |= NL80211_FEATURE_DYNAMIC_SMPS; 7855 7856 if (ar->ht_cap_info & WMI_HT_CAP_ENABLED) { 7857 ieee80211_hw_set(ar->hw, AMPDU_AGGREGATION); 7858 ieee80211_hw_set(ar->hw, TX_AMPDU_SETUP_IN_HW); 7859 } 7860 7861 ar->hw->wiphy->max_scan_ssids = WLAN_SCAN_PARAMS_MAX_SSID; 7862 ar->hw->wiphy->max_scan_ie_len = WLAN_SCAN_PARAMS_MAX_IE_LEN; 7863 7864 ar->hw->vif_data_size = sizeof(struct ath10k_vif); 7865 ar->hw->sta_data_size = sizeof(struct ath10k_sta); 7866 ar->hw->txq_data_size = sizeof(struct ath10k_txq); 7867 7868 ar->hw->max_listen_interval = ATH10K_MAX_HW_LISTEN_INTERVAL; 7869 7870 if (test_bit(WMI_SERVICE_BEACON_OFFLOAD, ar->wmi.svc_map)) { 7871 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_PROBE_RESP_OFFLOAD; 7872 7873 /* Firmware delivers WPS/P2P Probe Requests frames to driver so 7874 * that userspace (e.g. wpa_supplicant/hostapd) can generate 7875 * correct Probe Responses. This is more of a hack advert.. 7876 */ 7877 ar->hw->wiphy->probe_resp_offload |= 7878 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS | 7879 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_WPS2 | 7880 NL80211_PROBE_RESP_OFFLOAD_SUPPORT_P2P; 7881 } 7882 7883 if (test_bit(WMI_SERVICE_TDLS, ar->wmi.svc_map)) 7884 ar->hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_TDLS; 7885 7886 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL; 7887 ar->hw->wiphy->flags |= WIPHY_FLAG_HAS_CHANNEL_SWITCH; 7888 ar->hw->wiphy->max_remain_on_channel_duration = 5000; 7889 7890 ar->hw->wiphy->flags |= WIPHY_FLAG_AP_UAPSD; 7891 ar->hw->wiphy->features |= NL80211_FEATURE_AP_MODE_CHAN_WIDTH_CHANGE | 7892 NL80211_FEATURE_AP_SCAN; 7893 7894 ar->hw->wiphy->max_ap_assoc_sta = ar->max_num_stations; 7895 7896 ret = ath10k_wow_init(ar); 7897 if (ret) { 7898 ath10k_warn(ar, "failed to init wow: %d\n", ret); 7899 goto err_free; 7900 } 7901 7902 wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_VHT_IBSS); 7903 7904 /* 7905 * on LL hardware queues are managed entirely by the FW 7906 * so we only advertise to mac we can do the queues thing 7907 */ 7908 ar->hw->queues = IEEE80211_MAX_QUEUES; 7909 7910 /* vdev_ids are used as hw queue numbers. Make sure offchan tx queue is 7911 * something that vdev_ids can't reach so that we don't stop the queue 7912 * accidentally. 7913 */ 7914 ar->hw->offchannel_tx_hw_queue = IEEE80211_MAX_QUEUES - 1; 7915 7916 switch (ar->running_fw->fw_file.wmi_op_version) { 7917 case ATH10K_FW_WMI_OP_VERSION_MAIN: 7918 ar->hw->wiphy->iface_combinations = ath10k_if_comb; 7919 ar->hw->wiphy->n_iface_combinations = 7920 ARRAY_SIZE(ath10k_if_comb); 7921 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC); 7922 break; 7923 case ATH10K_FW_WMI_OP_VERSION_TLV: 7924 if (test_bit(WMI_SERVICE_ADAPTIVE_OCS, ar->wmi.svc_map)) { 7925 ar->hw->wiphy->iface_combinations = 7926 ath10k_tlv_qcs_if_comb; 7927 ar->hw->wiphy->n_iface_combinations = 7928 ARRAY_SIZE(ath10k_tlv_qcs_if_comb); 7929 } else { 7930 ar->hw->wiphy->iface_combinations = ath10k_tlv_if_comb; 7931 ar->hw->wiphy->n_iface_combinations = 7932 ARRAY_SIZE(ath10k_tlv_if_comb); 7933 } 7934 ar->hw->wiphy->interface_modes |= BIT(NL80211_IFTYPE_ADHOC); 7935 break; 7936 case ATH10K_FW_WMI_OP_VERSION_10_1: 7937 case ATH10K_FW_WMI_OP_VERSION_10_2: 7938 case ATH10K_FW_WMI_OP_VERSION_10_2_4: 7939 ar->hw->wiphy->iface_combinations = ath10k_10x_if_comb; 7940 ar->hw->wiphy->n_iface_combinations = 7941 ARRAY_SIZE(ath10k_10x_if_comb); 7942 break; 7943 case ATH10K_FW_WMI_OP_VERSION_10_4: 7944 ar->hw->wiphy->iface_combinations = ath10k_10_4_if_comb; 7945 ar->hw->wiphy->n_iface_combinations = 7946 ARRAY_SIZE(ath10k_10_4_if_comb); 7947 break; 7948 case ATH10K_FW_WMI_OP_VERSION_UNSET: 7949 case ATH10K_FW_WMI_OP_VERSION_MAX: 7950 WARN_ON(1); 7951 ret = -EINVAL; 7952 goto err_free; 7953 } 7954 7955 if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) 7956 ar->hw->netdev_features = NETIF_F_HW_CSUM; 7957 7958 if (IS_ENABLED(CONFIG_ATH10K_DFS_CERTIFIED)) { 7959 /* Init ath dfs pattern detector */ 7960 ar->ath_common.debug_mask = ATH_DBG_DFS; 7961 ar->dfs_detector = dfs_pattern_detector_init(&ar->ath_common, 7962 NL80211_DFS_UNSET); 7963 7964 if (!ar->dfs_detector) 7965 ath10k_warn(ar, "failed to initialise DFS pattern detector\n"); 7966 } 7967 7968 /* Current wake_tx_queue implementation imposes a significant 7969 * performance penalty in some setups. The tx scheduling code needs 7970 * more work anyway so disable the wake_tx_queue unless firmware 7971 * supports the pull-push mechanism. 7972 */ 7973 if (!test_bit(ATH10K_FW_FEATURE_PEER_FLOW_CONTROL, 7974 ar->running_fw->fw_file.fw_features)) 7975 ar->ops->wake_tx_queue = NULL; 7976 7977 ret = ath_regd_init(&ar->ath_common.regulatory, ar->hw->wiphy, 7978 ath10k_reg_notifier); 7979 if (ret) { 7980 ath10k_err(ar, "failed to initialise regulatory: %i\n", ret); 7981 goto err_dfs_detector_exit; 7982 } 7983 7984 ar->hw->wiphy->cipher_suites = cipher_suites; 7985 ar->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites); 7986 7987 ret = ieee80211_register_hw(ar->hw); 7988 if (ret) { 7989 ath10k_err(ar, "failed to register ieee80211: %d\n", ret); 7990 goto err_dfs_detector_exit; 7991 } 7992 7993 if (!ath_is_world_regd(&ar->ath_common.regulatory)) { 7994 ret = regulatory_hint(ar->hw->wiphy, 7995 ar->ath_common.regulatory.alpha2); 7996 if (ret) 7997 goto err_unregister; 7998 } 7999 8000 return 0; 8001 8002 err_unregister: 8003 ieee80211_unregister_hw(ar->hw); 8004 8005 err_dfs_detector_exit: 8006 if (IS_ENABLED(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) 8007 ar->dfs_detector->exit(ar->dfs_detector); 8008 8009 err_free: 8010 kfree(ar->mac.sbands[NL80211_BAND_2GHZ].channels); 8011 kfree(ar->mac.sbands[NL80211_BAND_5GHZ].channels); 8012 8013 SET_IEEE80211_DEV(ar->hw, NULL); 8014 return ret; 8015 } 8016 8017 void ath10k_mac_unregister(struct ath10k *ar) 8018 { 8019 ieee80211_unregister_hw(ar->hw); 8020 8021 if (IS_ENABLED(CONFIG_ATH10K_DFS_CERTIFIED) && ar->dfs_detector) 8022 ar->dfs_detector->exit(ar->dfs_detector); 8023 8024 kfree(ar->mac.sbands[NL80211_BAND_2GHZ].channels); 8025 kfree(ar->mac.sbands[NL80211_BAND_5GHZ].channels); 8026 8027 SET_IEEE80211_DEV(ar->hw, NULL); 8028 } 8029