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