aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath6kl
diff options
context:
space:
mode:
authorThomas Pedersen <c_tpeder@qca.qualcomm.com>2012-05-16 16:41:13 -0400
committerKalle Valo <kvalo@qca.qualcomm.com>2012-05-17 02:10:46 -0400
commit33a6664a6e4b45814ef6e3129842f3fd7e5d1117 (patch)
tree96b42a9d12c605ab2e371f8436c4f8b0922e8290 /drivers/net/wireless/ath/ath6kl
parentdd45b7598f1c52933f276ba7ce175fa1305b8ba0 (diff)
ath6kl: issue wmi disconnect after notifying cfg80211
ath6kl would issue a wmi disconnect command in response to a remote disconnect and return early without notifying cfg80211, only sending a cfg80211_disconnected (with reason code always 3) in response to the second disconnect firmware event. Pass the right reason code to cfg80211 on the first disconnect instead. This fixes at least one bug where a p2p client would stop trying to connect after receiving a stale RSN deauth which was reported to cfg80211 as GO leaving BSS. Signed-off-by: Thomas Pedersen <c_tpeder@qca.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath6kl')
-rw-r--r--drivers/net/wireless/ath/ath6kl/cfg80211.c27
1 files changed, 12 insertions, 15 deletions
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index f3a6cfc0ddc..7845d33deed 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -860,20 +860,6 @@ void ath6kl_cfg80211_disconnect_event(struct ath6kl_vif *vif, u8 reason,
860 } 860 }
861 } 861 }
862 862
863 /*
864 * Send a disconnect command to target when a disconnect event is
865 * received with reason code other than 3 (DISCONNECT_CMD - disconnect
866 * request from host) to make the firmware stop trying to connect even
867 * after giving disconnect event. There will be one more disconnect
868 * event for this disconnect command with reason code DISCONNECT_CMD
869 * which will be notified to cfg80211.
870 */
871
872 if (reason != DISCONNECT_CMD) {
873 ath6kl_wmi_disconnect_cmd(ar->wmi, vif->fw_vif_idx);
874 return;
875 }
876
877 clear_bit(CONNECT_PEND, &vif->flags); 863 clear_bit(CONNECT_PEND, &vif->flags);
878 864
879 if (vif->sme_state == SME_CONNECTING) { 865 if (vif->sme_state == SME_CONNECTING) {
@@ -883,11 +869,22 @@ void ath6kl_cfg80211_disconnect_event(struct ath6kl_vif *vif, u8 reason,
883 WLAN_STATUS_UNSPECIFIED_FAILURE, 869 WLAN_STATUS_UNSPECIFIED_FAILURE,
884 GFP_KERNEL); 870 GFP_KERNEL);
885 } else if (vif->sme_state == SME_CONNECTED) { 871 } else if (vif->sme_state == SME_CONNECTED) {
886 cfg80211_disconnected(vif->ndev, reason, 872 cfg80211_disconnected(vif->ndev, proto_reason,
887 NULL, 0, GFP_KERNEL); 873 NULL, 0, GFP_KERNEL);
888 } 874 }
889 875
890 vif->sme_state = SME_DISCONNECTED; 876 vif->sme_state = SME_DISCONNECTED;
877
878 /*
879 * Send a disconnect command to target when a disconnect event is
880 * received with reason code other than 3 (DISCONNECT_CMD - disconnect
881 * request from host) to make the firmware stop trying to connect even
882 * after giving disconnect event. There will be one more disconnect
883 * event for this disconnect command with reason code DISCONNECT_CMD
884 * which won't be notified to cfg80211.
885 */
886 if (reason != DISCONNECT_CMD)
887 ath6kl_wmi_disconnect_cmd(ar->wmi, vif->fw_vif_idx);
891} 888}
892 889
893static int ath6kl_set_probed_ssids(struct ath6kl *ar, 890static int ath6kl_set_probed_ssids(struct ath6kl *ar,