diff options
author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2015-03-30 03:55:57 -0400 |
---|---|---|
committer | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2015-04-02 02:29:13 -0400 |
commit | 31755207afc5d5a30e3eea9e4f2a518fc5b680c1 (patch) | |
tree | 9b3388a7026669772115471a2a466c62f748da6f /drivers/net/wireless | |
parent | 874c174eb9950a62032a7c90c4a23947a2bb863d (diff) |
iwlwifi: mvm: capture connection loss as part of MLME trigger
The only other way to catch these would have been to monitor
the Tx deauth event, but we can send a deauth when we roam.
So it would have been tricky to make sure we capture the
connection losses only.
Define a separate trigger for the connection losses to make
it easier to catch them.
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-fw-file.h | 8 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mvm.h | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/ops.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/time-event.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/utils.c | 24 |
5 files changed, 37 insertions, 5 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-fw-file.h b/drivers/net/wireless/iwlwifi/iwl-fw-file.h index ee149482061f..bfdf3faa6c47 100644 --- a/drivers/net/wireless/iwlwifi/iwl-fw-file.h +++ b/drivers/net/wireless/iwlwifi/iwl-fw-file.h | |||
@@ -586,12 +586,14 @@ struct iwl_fw_dbg_trigger_low_rssi { | |||
586 | * @stop_tx_deauth: number of Tx deauth before to collect | 586 | * @stop_tx_deauth: number of Tx deauth before to collect |
587 | * @stop_assoc_denied: number of denied association to collect | 587 | * @stop_assoc_denied: number of denied association to collect |
588 | * @stop_assoc_timeout: number of association timeout to collect | 588 | * @stop_assoc_timeout: number of association timeout to collect |
589 | * @stop_connection_loss: number of connection loss to collect | ||
589 | * @start_auth_denied: number of denied authentication to start recording | 590 | * @start_auth_denied: number of denied authentication to start recording |
590 | * @start_auth_timeout: number of authentication timeout to start recording | 591 | * @start_auth_timeout: number of authentication timeout to start recording |
591 | * @start_rx_deauth: number of Rx deauth to start recording | 592 | * @start_rx_deauth: number of Rx deauth to start recording |
592 | * @start_tx_deauth: number of Tx deauth to start recording | 593 | * @start_tx_deauth: number of Tx deauth to start recording |
593 | * @start_assoc_denied: number of denied association to start recording | 594 | * @start_assoc_denied: number of denied association to start recording |
594 | * @start_assoc_timeout: number of association timeout to start recording | 595 | * @start_assoc_timeout: number of association timeout to start recording |
596 | * @start_connection_loss: number of connection loss to start recording | ||
595 | */ | 597 | */ |
596 | struct iwl_fw_dbg_trigger_mlme { | 598 | struct iwl_fw_dbg_trigger_mlme { |
597 | u8 stop_auth_denied; | 599 | u8 stop_auth_denied; |
@@ -601,7 +603,8 @@ struct iwl_fw_dbg_trigger_mlme { | |||
601 | 603 | ||
602 | u8 stop_assoc_denied; | 604 | u8 stop_assoc_denied; |
603 | u8 stop_assoc_timeout; | 605 | u8 stop_assoc_timeout; |
604 | __le16 reserved2; | 606 | u8 stop_connection_loss; |
607 | u8 reserved; | ||
605 | 608 | ||
606 | u8 start_auth_denied; | 609 | u8 start_auth_denied; |
607 | u8 start_auth_timeout; | 610 | u8 start_auth_timeout; |
@@ -610,7 +613,8 @@ struct iwl_fw_dbg_trigger_mlme { | |||
610 | 613 | ||
611 | u8 start_assoc_denied; | 614 | u8 start_assoc_denied; |
612 | u8 start_assoc_timeout; | 615 | u8 start_assoc_timeout; |
613 | __le16 reserved4; | 616 | u8 start_connection_loss; |
617 | u8 reserved2; | ||
614 | } __packed; | 618 | } __packed; |
615 | 619 | ||
616 | /** | 620 | /** |
diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h index ef78ebc23a0f..d5522a161242 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mvm.h +++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h | |||
@@ -1484,6 +1484,8 @@ int iwl_mvm_fw_dbg_collect_trig(struct iwl_mvm *mvm, | |||
1484 | unsigned int iwl_mvm_get_wd_timeout(struct iwl_mvm *mvm, | 1484 | unsigned int iwl_mvm_get_wd_timeout(struct iwl_mvm *mvm, |
1485 | struct ieee80211_vif *vif, | 1485 | struct ieee80211_vif *vif, |
1486 | bool tdls, bool cmd_q); | 1486 | bool tdls, bool cmd_q); |
1487 | void iwl_mvm_connection_loss(struct iwl_mvm *mvm, struct ieee80211_vif *vif, | ||
1488 | const char *errmsg); | ||
1487 | static inline bool | 1489 | static inline bool |
1488 | iwl_fw_dbg_trigger_vif_match(struct iwl_fw_dbg_trigger_tlv *trig, | 1490 | iwl_fw_dbg_trigger_vif_match(struct iwl_fw_dbg_trigger_tlv *trig, |
1489 | struct ieee80211_vif *vif) | 1491 | struct ieee80211_vif *vif) |
diff --git a/drivers/net/wireless/iwlwifi/mvm/ops.c b/drivers/net/wireless/iwlwifi/mvm/ops.c index e656511bdbec..a08b03d58d4b 100644 --- a/drivers/net/wireless/iwlwifi/mvm/ops.c +++ b/drivers/net/wireless/iwlwifi/mvm/ops.c | |||
@@ -1161,7 +1161,7 @@ static void iwl_mvm_d0i3_disconnect_iter(void *data, u8 *mac, | |||
1161 | 1161 | ||
1162 | if (vif->type == NL80211_IFTYPE_STATION && vif->bss_conf.assoc && | 1162 | if (vif->type == NL80211_IFTYPE_STATION && vif->bss_conf.assoc && |
1163 | mvm->d0i3_ap_sta_id == mvmvif->ap_sta_id) | 1163 | mvm->d0i3_ap_sta_id == mvmvif->ap_sta_id) |
1164 | ieee80211_connection_loss(vif); | 1164 | iwl_mvm_connection_loss(mvm, vif, "D0i3"); |
1165 | } | 1165 | } |
1166 | 1166 | ||
1167 | void iwl_mvm_d0i3_enable_tx(struct iwl_mvm *mvm, __le16 *qos_seq) | 1167 | void iwl_mvm_d0i3_enable_tx(struct iwl_mvm *mvm, __le16 *qos_seq) |
diff --git a/drivers/net/wireless/iwlwifi/mvm/time-event.c b/drivers/net/wireless/iwlwifi/mvm/time-event.c index 647822366fe5..fd7b0d36f9a6 100644 --- a/drivers/net/wireless/iwlwifi/mvm/time-event.c +++ b/drivers/net/wireless/iwlwifi/mvm/time-event.c | |||
@@ -187,7 +187,8 @@ static bool iwl_mvm_te_check_disconnect(struct iwl_mvm *mvm, | |||
187 | return false; | 187 | return false; |
188 | if (errmsg) | 188 | if (errmsg) |
189 | IWL_ERR(mvm, "%s\n", errmsg); | 189 | IWL_ERR(mvm, "%s\n", errmsg); |
190 | ieee80211_connection_loss(vif); | 190 | |
191 | iwl_mvm_connection_loss(mvm, vif, errmsg); | ||
191 | return true; | 192 | return true; |
192 | } | 193 | } |
193 | 194 | ||
@@ -210,7 +211,8 @@ iwl_mvm_te_handle_notify_csa(struct iwl_mvm *mvm, | |||
210 | break; | 211 | break; |
211 | case NL80211_IFTYPE_STATION: | 212 | case NL80211_IFTYPE_STATION: |
212 | if (!notif->status) { | 213 | if (!notif->status) { |
213 | ieee80211_connection_loss(te_data->vif); | 214 | iwl_mvm_connection_loss(mvm, vif, |
215 | "CSA TE failed to start"); | ||
214 | break; | 216 | break; |
215 | } | 217 | } |
216 | iwl_mvm_csa_client_absent(mvm, te_data->vif); | 218 | iwl_mvm_csa_client_absent(mvm, te_data->vif); |
diff --git a/drivers/net/wireless/iwlwifi/mvm/utils.c b/drivers/net/wireless/iwlwifi/mvm/utils.c index 54e3556842c4..bc55a8b82db6 100644 --- a/drivers/net/wireless/iwlwifi/mvm/utils.c +++ b/drivers/net/wireless/iwlwifi/mvm/utils.c | |||
@@ -965,3 +965,27 @@ unsigned int iwl_mvm_get_wd_timeout(struct iwl_mvm *mvm, | |||
965 | return mvm->cfg->base_params->wd_timeout; | 965 | return mvm->cfg->base_params->wd_timeout; |
966 | } | 966 | } |
967 | } | 967 | } |
968 | |||
969 | void iwl_mvm_connection_loss(struct iwl_mvm *mvm, struct ieee80211_vif *vif, | ||
970 | const char *errmsg) | ||
971 | { | ||
972 | struct iwl_fw_dbg_trigger_tlv *trig; | ||
973 | struct iwl_fw_dbg_trigger_mlme *trig_mlme; | ||
974 | |||
975 | if (!iwl_fw_dbg_trigger_enabled(mvm->fw, FW_DBG_TRIGGER_MLME)) | ||
976 | goto out; | ||
977 | |||
978 | trig = iwl_fw_dbg_get_trigger(mvm->fw, FW_DBG_TRIGGER_MLME); | ||
979 | trig_mlme = (void *)trig->data; | ||
980 | if (!iwl_fw_dbg_trigger_check_stop(mvm, vif, trig)) | ||
981 | goto out; | ||
982 | |||
983 | if (trig_mlme->stop_connection_loss && | ||
984 | --trig_mlme->stop_connection_loss) | ||
985 | goto out; | ||
986 | |||
987 | iwl_mvm_fw_dbg_collect_trig(mvm, trig, "%s", errmsg); | ||
988 | |||
989 | out: | ||
990 | ieee80211_connection_loss(vif); | ||
991 | } | ||