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