|
@@ -1615,35 +1615,41 @@ static int ath10k_station_assoc(struct ath10k *ar,
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
- ret = ath10k_setup_peer_smps(ar, arvif, sta->addr, &sta->ht_cap);
|
|
|
- if (ret) {
|
|
|
- ath10k_warn(ar, "failed to setup peer SMPS for vdev %d: %d\n",
|
|
|
- arvif->vdev_id, ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
-
|
|
|
- if (!sta->wme && !reassoc) {
|
|
|
- arvif->num_legacy_stations++;
|
|
|
- ret = ath10k_recalc_rtscts_prot(arvif);
|
|
|
+ /* Re-assoc is run only to update supported rates for given station. It
|
|
|
+ * doesn't make much sense to reconfigure the peer completely.
|
|
|
+ */
|
|
|
+ if (!reassoc) {
|
|
|
+ ret = ath10k_setup_peer_smps(ar, arvif, sta->addr,
|
|
|
+ &sta->ht_cap);
|
|
|
if (ret) {
|
|
|
- ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
|
|
|
+ ath10k_warn(ar, "failed to setup peer SMPS for vdev %d: %d\n",
|
|
|
arvif->vdev_id, ret);
|
|
|
return ret;
|
|
|
}
|
|
|
- }
|
|
|
|
|
|
- ret = ath10k_install_peer_wep_keys(arvif, sta->addr);
|
|
|
- if (ret) {
|
|
|
- ath10k_warn(ar, "failed to install peer wep keys for vdev %i: %d\n",
|
|
|
- arvif->vdev_id, ret);
|
|
|
- return ret;
|
|
|
- }
|
|
|
+ ret = ath10k_peer_assoc_qos_ap(ar, arvif, sta);
|
|
|
+ if (ret) {
|
|
|
+ ath10k_warn(ar, "failed to set qos params for STA %pM for vdev %i: %d\n",
|
|
|
+ sta->addr, arvif->vdev_id, ret);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
|
|
|
- ret = ath10k_peer_assoc_qos_ap(ar, arvif, sta);
|
|
|
- if (ret) {
|
|
|
- ath10k_warn(ar, "failed to set qos params for STA %pM for vdev %i: %d\n",
|
|
|
- sta->addr, arvif->vdev_id, ret);
|
|
|
- return ret;
|
|
|
+ if (!sta->wme) {
|
|
|
+ arvif->num_legacy_stations++;
|
|
|
+ ret = ath10k_recalc_rtscts_prot(arvif);
|
|
|
+ if (ret) {
|
|
|
+ ath10k_warn(ar, "failed to recalculate rts/cts prot for vdev %d: %d\n",
|
|
|
+ arvif->vdev_id, ret);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ ret = ath10k_install_peer_wep_keys(arvif, sta->addr);
|
|
|
+ if (ret) {
|
|
|
+ ath10k_warn(ar, "failed to install peer wep keys for vdev %i: %d\n",
|
|
|
+ arvif->vdev_id, ret);
|
|
|
+ return ret;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return ret;
|