提交 311dce71 编写于 作者: J Johannes Berg 提交者: John W. Linville

iwlagn: properly wait for PAN disable

Previously I hacked this with an msleep(300)
which was fine since we never had longer PAN
time slots, but now that we will have them I
need to fix that. Use the new notification
wait support to properly wait for the WIPAN
deactivation complete signal from the ucode.
Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
Signed-off-by: NWey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: NJohn W. Linville <linville@tuxdriver.com>
上级 7194207c
...@@ -52,10 +52,14 @@ static int iwlagn_disable_pan(struct iwl_priv *priv, ...@@ -52,10 +52,14 @@ static int iwlagn_disable_pan(struct iwl_priv *priv,
struct iwl_rxon_context *ctx, struct iwl_rxon_context *ctx,
struct iwl_rxon_cmd *send) struct iwl_rxon_cmd *send)
{ {
struct iwl_notification_wait disable_wait;
__le32 old_filter = send->filter_flags; __le32 old_filter = send->filter_flags;
u8 old_dev_type = send->dev_type; u8 old_dev_type = send->dev_type;
int ret; int ret;
iwlagn_init_notification_wait(priv, &disable_wait, NULL,
REPLY_WIPAN_DEACTIVATION_COMPLETE);
send->filter_flags &= ~RXON_FILTER_ASSOC_MSK; send->filter_flags &= ~RXON_FILTER_ASSOC_MSK;
send->dev_type = RXON_DEV_TYPE_P2P; send->dev_type = RXON_DEV_TYPE_P2P;
ret = iwl_send_cmd_pdu(priv, ctx->rxon_cmd, sizeof(*send), send); ret = iwl_send_cmd_pdu(priv, ctx->rxon_cmd, sizeof(*send), send);
...@@ -63,11 +67,16 @@ static int iwlagn_disable_pan(struct iwl_priv *priv, ...@@ -63,11 +67,16 @@ static int iwlagn_disable_pan(struct iwl_priv *priv,
send->filter_flags = old_filter; send->filter_flags = old_filter;
send->dev_type = old_dev_type; send->dev_type = old_dev_type;
if (ret) if (ret) {
IWL_ERR(priv, "Error disabling PAN (%d)\n", ret); IWL_ERR(priv, "Error disabling PAN (%d)\n", ret);
iwlagn_remove_notification(priv, &disable_wait);
} else {
signed long wait_res;
/* FIXME: WAIT FOR PAN DISABLE */ wait_res = iwlagn_wait_notification(priv, &disable_wait, HZ);
msleep(300); if (wait_res == 0)
IWL_ERR(priv, "Timed out waiting for PAN disable\n");
}
return ret; return ret;
} }
......
...@@ -189,6 +189,7 @@ enum { ...@@ -189,6 +189,7 @@ enum {
REPLY_WIPAN_WEPKEY = 0xb8, /* use REPLY_WEPKEY structure */ REPLY_WIPAN_WEPKEY = 0xb8, /* use REPLY_WEPKEY structure */
REPLY_WIPAN_P2P_CHANNEL_SWITCH = 0xb9, REPLY_WIPAN_P2P_CHANNEL_SWITCH = 0xb9,
REPLY_WIPAN_NOA_NOTIFICATION = 0xbc, REPLY_WIPAN_NOA_NOTIFICATION = 0xbc,
REPLY_WIPAN_DEACTIVATION_COMPLETE = 0xbd,
REPLY_MAX = 0xff REPLY_MAX = 0xff
}; };
......
...@@ -108,6 +108,7 @@ const char *get_cmd_string(u8 cmd) ...@@ -108,6 +108,7 @@ const char *get_cmd_string(u8 cmd)
IWL_CMD(REPLY_WIPAN_WEPKEY); IWL_CMD(REPLY_WIPAN_WEPKEY);
IWL_CMD(REPLY_WIPAN_P2P_CHANNEL_SWITCH); IWL_CMD(REPLY_WIPAN_P2P_CHANNEL_SWITCH);
IWL_CMD(REPLY_WIPAN_NOA_NOTIFICATION); IWL_CMD(REPLY_WIPAN_NOA_NOTIFICATION);
IWL_CMD(REPLY_WIPAN_DEACTIVATION_COMPLETE);
default: default:
return "UNKNOWN"; return "UNKNOWN";
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册