aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/iwlwifi')
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c6
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/mac80211.c10
-rw-r--r--drivers/net/wireless/iwlwifi/mvm/time-event.c4
3 files changed, 15 insertions, 5 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c b/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
index c08a17a3cab9..0854dc338881 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
@@ -584,7 +584,11 @@ static void iwl_mvm_mac_ctxt_cmd_fill_sta(struct iwl_mvm *mvm,
584 struct ieee80211_vif *vif, 584 struct ieee80211_vif *vif,
585 struct iwl_mac_data_sta *ctxt_sta) 585 struct iwl_mac_data_sta *ctxt_sta)
586{ 586{
587 ctxt_sta->is_assoc = cpu_to_le32(vif->bss_conf.assoc ? 1 : 0); 587 /* We need the dtim_period to set the MAC as associated */
588 if (vif->bss_conf.assoc && vif->bss_conf.dtim_period)
589 ctxt_sta->is_assoc = cpu_to_le32(1);
590 else
591 ctxt_sta->is_assoc = cpu_to_le32(0);
588 592
589 ctxt_sta->bi = cpu_to_le32(vif->bss_conf.beacon_int); 593 ctxt_sta->bi = cpu_to_le32(vif->bss_conf.beacon_int);
590 ctxt_sta->bi_reciprocal = 594 ctxt_sta->bi_reciprocal =
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
index e0d79e328d0c..6bfcb3b5bfa6 100644
--- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c
+++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c
@@ -114,7 +114,6 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
114 IEEE80211_HW_QUEUE_CONTROL | 114 IEEE80211_HW_QUEUE_CONTROL |
115 IEEE80211_HW_WANT_MONITOR_VIF | 115 IEEE80211_HW_WANT_MONITOR_VIF |
116 IEEE80211_HW_SCAN_WHILE_IDLE | 116 IEEE80211_HW_SCAN_WHILE_IDLE |
117 IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC |
118 IEEE80211_HW_SUPPORTS_PS | 117 IEEE80211_HW_SUPPORTS_PS |
119 IEEE80211_HW_SUPPORTS_DYNAMIC_PS | 118 IEEE80211_HW_SUPPORTS_DYNAMIC_PS |
120 IEEE80211_HW_AMPDU_AGGREGATION; 119 IEEE80211_HW_AMPDU_AGGREGATION;
@@ -671,8 +670,6 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
671 IWL_ERR(mvm, "failed to update quotas\n"); 670 IWL_ERR(mvm, "failed to update quotas\n");
672 return; 671 return;
673 } 672 }
674 iwl_mvm_remove_time_event(mvm, mvmvif,
675 &mvmvif->time_event_data);
676 } else if (mvmvif->ap_sta_id != IWL_MVM_STATION_COUNT) { 673 } else if (mvmvif->ap_sta_id != IWL_MVM_STATION_COUNT) {
677 /* remove AP station now that the MAC is unassoc */ 674 /* remove AP station now that the MAC is unassoc */
678 ret = iwl_mvm_rm_sta_id(mvm, vif, mvmvif->ap_sta_id); 675 ret = iwl_mvm_rm_sta_id(mvm, vif, mvmvif->ap_sta_id);
@@ -684,6 +681,13 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
684 if (ret) 681 if (ret)
685 IWL_ERR(mvm, "failed to update quotas\n"); 682 IWL_ERR(mvm, "failed to update quotas\n");
686 } 683 }
684 } else if (changes & BSS_CHANGED_DTIM_PERIOD) {
685 /*
686 * We received a beacon _after_ association so
687 * remove the session protection.
688 */
689 iwl_mvm_remove_time_event(mvm, mvmvif,
690 &mvmvif->time_event_data);
687 } else if (changes & BSS_CHANGED_PS) { 691 } else if (changes & BSS_CHANGED_PS) {
688 /* 692 /*
689 * TODO: remove this temporary code. 693 * TODO: remove this temporary code.
diff --git a/drivers/net/wireless/iwlwifi/mvm/time-event.c b/drivers/net/wireless/iwlwifi/mvm/time-event.c
index 4d62a5d4254d..194bfb7a7d7f 100644
--- a/drivers/net/wireless/iwlwifi/mvm/time-event.c
+++ b/drivers/net/wireless/iwlwifi/mvm/time-event.c
@@ -184,9 +184,11 @@ static void iwl_mvm_te_handle_notif(struct iwl_mvm *mvm,
184 */ 184 */
185 if (te_data->vif->type == NL80211_IFTYPE_STATION && 185 if (te_data->vif->type == NL80211_IFTYPE_STATION &&
186 (!te_data->vif->bss_conf.assoc || 186 (!te_data->vif->bss_conf.assoc ||
187 !te_data->vif->bss_conf.dtim_period)) 187 !te_data->vif->bss_conf.dtim_period)) {
188 IWL_ERR(mvm, 188 IWL_ERR(mvm,
189 "No assocation and the time event is over already...\n"); 189 "No assocation and the time event is over already...\n");
190 ieee80211_connection_loss(te_data->vif);
191 }
190 192
191 iwl_mvm_te_clear_data(mvm, te_data); 193 iwl_mvm_te_clear_data(mvm, te_data);
192 } else if (le32_to_cpu(notif->action) == TE_NOTIF_HOST_START) { 194 } else if (le32_to_cpu(notif->action) == TE_NOTIF_HOST_START) {