Try three times for the NULL recovery.
This commit is contained in:
parent
474fe3bb66
commit
4c2a3825b1
|
@ -156,6 +156,10 @@ void cw1200_cqm_bssloss_sm(struct cw1200_common *priv, int init, int good, int b
|
|||
priv->bss_loss_confirm_id,
|
||||
init, good, bad);
|
||||
|
||||
/* Reset state */
|
||||
if (!(init || good || bad))
|
||||
priv->bss_loss_state = 0;
|
||||
|
||||
if (!priv->bss_loss_state && init) {
|
||||
tx = 1;
|
||||
queue_delayed_work(priv->workqueue,
|
||||
|
@ -163,13 +167,16 @@ void cw1200_cqm_bssloss_sm(struct cw1200_common *priv, int init, int good, int b
|
|||
1 * HZ);
|
||||
priv->bss_loss_state = 1;
|
||||
} else if (priv->bss_loss_state) {
|
||||
priv->bss_loss_state = 0;
|
||||
if (good)
|
||||
queue_work(priv->workqueue, &priv->bss_params_work);
|
||||
else if (bad)
|
||||
queue_delayed_work(priv->workqueue,
|
||||
&priv->bss_loss_work,
|
||||
1 * HZ); /* XXX 0 immediate ? */
|
||||
if (++priv->bss_loss_state > 3) {
|
||||
queue_delayed_work(priv->workqueue,
|
||||
&priv->bss_loss_work,
|
||||
HZ/4); /* XXX 0 immediate ? */
|
||||
} else {
|
||||
tx = 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Spit out a NULL packet if necessary */
|
||||
|
@ -1047,6 +1054,11 @@ void cw1200_bss_params_work(struct work_struct *work)
|
|||
container_of(work, struct cw1200_common, bss_params_work);
|
||||
mutex_lock(&priv->conf_mutex);
|
||||
|
||||
/* Clear state */
|
||||
spin_lock(&priv->bss_loss_lock);
|
||||
priv->bss_loss_state = 0;
|
||||
spin_unlock(&priv->bss_loss_lock);
|
||||
|
||||
priv->bss_params.reset_beacon_loss = 1;
|
||||
wsm_set_bss_params(priv, &priv->bss_params);
|
||||
priv->bss_params.reset_beacon_loss = 0;
|
||||
|
|
Loading…
Reference in New Issue