Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 311dce71 authored by Johannes Berg's avatar Johannes Berg Committed by John W. Linville
Browse files

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: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarWey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 7194207c
Loading
Loading
Loading
Loading
+12 −3
Original line number Diff line number Diff line
@@ -52,10 +52,14 @@ static int iwlagn_disable_pan(struct iwl_priv *priv,
			      struct iwl_rxon_context *ctx,
			      struct iwl_rxon_cmd *send)
{
	struct iwl_notification_wait disable_wait;
	__le32 old_filter = send->filter_flags;
	u8 old_dev_type = send->dev_type;
	int ret;

	iwlagn_init_notification_wait(priv, &disable_wait, NULL,
				      REPLY_WIPAN_DEACTIVATION_COMPLETE);

	send->filter_flags &= ~RXON_FILTER_ASSOC_MSK;
	send->dev_type = RXON_DEV_TYPE_P2P;
	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,
	send->filter_flags = old_filter;
	send->dev_type = old_dev_type;

	if (ret)
	if (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 */
	msleep(300);
		wait_res = iwlagn_wait_notification(priv, &disable_wait, HZ);
		if (wait_res == 0)
			IWL_ERR(priv, "Timed out waiting for PAN disable\n");
	}

	return ret;
}
+1 −0
Original line number Diff line number Diff line
@@ -189,6 +189,7 @@ enum {
	REPLY_WIPAN_WEPKEY = 0xb8,	/* use REPLY_WEPKEY structure */
	REPLY_WIPAN_P2P_CHANNEL_SWITCH = 0xb9,
	REPLY_WIPAN_NOA_NOTIFICATION = 0xbc,
	REPLY_WIPAN_DEACTIVATION_COMPLETE = 0xbd,

	REPLY_MAX = 0xff
};
+1 −0
Original line number Diff line number Diff line
@@ -108,6 +108,7 @@ const char *get_cmd_string(u8 cmd)
		IWL_CMD(REPLY_WIPAN_WEPKEY);
		IWL_CMD(REPLY_WIPAN_P2P_CHANNEL_SWITCH);
		IWL_CMD(REPLY_WIPAN_NOA_NOTIFICATION);
		IWL_CMD(REPLY_WIPAN_DEACTIVATION_COMPLETE);
	default:
		return "UNKNOWN";