From f1c3b82d68fded838b95dc014a27d09f439c9dc7 Mon Sep 17 00:00:00 2001 From: Wey-Yi Guy Date: Mon, 10 Oct 2011 07:26:49 -0700 Subject: [PATCH] --- yaml --- r: 266727 b: refs/heads/master c: 317d09f76976c5a0b1e758fe45474a47cbea1aef h: refs/heads/master i: 266725: 9fefd95670eaba9375fccfcbd2c025a87555191c 266723: 9d45071113b93ee5e5b11800be507776a441acec 266719: bb1f479beabc727cff4df4340240889ba3ac29ad v: v3 --- [refs] | 2 +- trunk/drivers/net/wireless/iwlwifi/iwl-core.c | 23 ++++++++++++++++++- trunk/drivers/net/wireless/iwlwifi/iwl-core.h | 1 + 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index fc9a731d51bc..b8b0d3f66209 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 05c89b917da27c15c82433bc6fc740548ee1cb35 +refs/heads/master: 317d09f76976c5a0b1e758fe45474a47cbea1aef diff --git a/trunk/drivers/net/wireless/iwlwifi/iwl-core.c b/trunk/drivers/net/wireless/iwlwifi/iwl-core.c index 0725603dbf1d..59d1968e6ae9 100644 --- a/trunk/drivers/net/wireless/iwlwifi/iwl-core.c +++ b/trunk/drivers/net/wireless/iwlwifi/iwl-core.c @@ -1732,10 +1732,31 @@ int iwl_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif, return err; } +int iwl_cmd_echo_test(struct iwl_priv *priv) +{ + struct iwl_host_cmd cmd = { + .id = REPLY_ECHO, + .flags = CMD_SYNC, + }; + + return iwl_trans_send_cmd(trans(priv), &cmd); +} + static inline int iwl_check_stuck_queue(struct iwl_priv *priv, int txq) { if (iwl_trans_check_stuck_queue(trans(priv), txq)) { - int ret = iwl_force_reset(priv, IWL_FW_RESET, false); + int ret; + if (txq == priv->shrd->cmd_queue) { + /* + * validate command queue still working + * by sending "ECHO" command + */ + if (!iwl_cmd_echo_test(priv)) + return 0; + else + IWL_DEBUG_HC(priv, "echo testing fail\n"); + } + ret = iwl_force_reset(priv, IWL_FW_RESET, false); return (ret == -EAGAIN) ? 0 : 1; } return 0; diff --git a/trunk/drivers/net/wireless/iwlwifi/iwl-core.h b/trunk/drivers/net/wireless/iwlwifi/iwl-core.h index db50b650756c..080c35543881 100644 --- a/trunk/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/trunk/drivers/net/wireless/iwlwifi/iwl-core.h @@ -266,6 +266,7 @@ void iwl_mac_remove_interface(struct ieee80211_hw *hw, int iwl_mac_change_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif, enum nl80211_iftype newtype, bool newp2p); +int iwl_cmd_echo_test(struct iwl_priv *priv); #ifdef CONFIG_IWLWIFI_DEBUGFS int iwl_alloc_traffic_mem(struct iwl_priv *priv); void iwl_free_traffic_mem(struct iwl_priv *priv);