From 87f1ae748b087240f81e9a63fb4088ac8b393993 Mon Sep 17 00:00:00 2001 From: Hong Liu Date: Wed, 14 Sep 2005 21:04:15 -0500 Subject: [PATCH] --- yaml --- r: 13589 b: refs/heads/master c: e63247269de722c3e753991025fb7f15c6aba9aa h: refs/heads/master i: 13587: c522e18471316bc90ce3d34ddf6ae8041b21a140 v: v3 --- [refs] | 2 +- trunk/drivers/net/wireless/ipw2200.c | 31 ++++++++++++---------------- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/[refs] b/[refs] index 3e7dd1e3ceb8..f94afdc1b950 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f4ff497d45c7071166277a39590cc59b50dc893c +refs/heads/master: e63247269de722c3e753991025fb7f15c6aba9aa diff --git a/trunk/drivers/net/wireless/ipw2200.c b/trunk/drivers/net/wireless/ipw2200.c index 549f582551e5..a7630920ace8 100644 --- a/trunk/drivers/net/wireless/ipw2200.c +++ b/trunk/drivers/net/wireless/ipw2200.c @@ -1882,18 +1882,6 @@ static int ipw_send_cmd(struct ipw_priv *priv, struct host_cmd *cmd) return -EAGAIN; } - if (priv->status & STATUS_ASSOCIATING) { - IPW_DEBUG_HC("abandon a command while associating\n"); - spin_unlock_irqrestore(&priv->lock, flags); - return -1; - } - - if (priv->status & STATUS_DISASSOCIATING) { - IPW_DEBUG_HC("abandon a command while disassociating\n"); - spin_unlock_irqrestore(&priv->lock, flags); - return -1; - } - priv->status |= STATUS_HCMD_ACTIVE; if (priv->cmdlog) { @@ -3697,10 +3685,14 @@ static void ipw_send_disassociate(struct ipw_priv *priv, int quiet) MAC_ARG(priv->assoc_request.bssid), priv->assoc_request.channel); + priv->status &= ~(STATUS_ASSOCIATING | STATUS_ASSOCIATED); + priv->status |= STATUS_DISASSOCIATING; + if (quiet) priv->assoc_request.assoc_type = HC_DISASSOC_QUIET; else priv->assoc_request.assoc_type = HC_DISASSOCIATE; + err = ipw_send_associate(priv, &priv->assoc_request); if (err) { IPW_DEBUG_HC("Attempt to send [dis]associate command " @@ -3708,9 +3700,6 @@ static void ipw_send_disassociate(struct ipw_priv *priv, int quiet) return; } - priv->status &= ~(STATUS_ASSOCIATING | STATUS_ASSOCIATED); - priv->status |= STATUS_DISASSOCIATING; - } static int ipw_disassociate(void *data) @@ -7672,6 +7661,8 @@ static int ipw_associate_network(struct ipw_priv *priv, */ priv->channel = network->channel; memcpy(priv->bssid, network->bssid, ETH_ALEN); + priv->status |= STATUS_ASSOCIATING; + priv->status &= ~STATUS_SECURITY_UPDATED; priv->assoc_network = network; @@ -7685,9 +7676,6 @@ static int ipw_associate_network(struct ipw_priv *priv, return err; } - priv->status |= STATUS_ASSOCIATING; - priv->status &= ~STATUS_SECURITY_UPDATED; - IPW_DEBUG(IPW_DL_STATE, "associating: '%s' " MAC_FMT " \n", escape_essid(priv->essid, priv->essid_len), MAC_ARG(priv->bssid)); @@ -7791,6 +7779,13 @@ static int ipw_associate(void *data) return 0; } + if (priv->status & STATUS_DISASSOCIATING) { + IPW_DEBUG_ASSOC("Not attempting association (in " + "disassociating)\n "); + queue_work(priv->workqueue, &priv->associate); + return 0; + } + if (!ipw_is_init(priv) || (priv->status & STATUS_SCANNING)) { IPW_DEBUG_ASSOC("Not attempting association (scanning or not " "initialized)\n");