diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi')
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mac80211.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/time-event.c | 4 |
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) { |