static void cw1200_scan_restart_delayed(struct cw1200_common *priv) { if (priv->delayed_link_loss) { int tmo = priv->cqm_beacon_loss_count; if (priv->scan.direct_probe) tmo = 0; priv->delayed_link_loss = 0; /* Restart beacon loss timer and requeue BSS loss work. */ wiphy_dbg(priv->hw->wiphy, "[CQM] Requeue BSS loss in %d " "beacons.\n", tmo); spin_lock(&priv->bss_loss_lock); priv->bss_loss_status = CW1200_BSS_LOSS_NONE; spin_unlock(&priv->bss_loss_lock); cancel_delayed_work_sync(&priv->bss_loss_work); queue_delayed_work(priv->workqueue, &priv->bss_loss_work, tmo * HZ / 10); } /* FW bug: driver has to restart p2p-dev mode after scan. */ if (priv->join_status == CW1200_JOIN_STATUS_MONITOR) { cw1200_enable_listening(priv); cw1200_update_filtering(priv); } if (priv->delayed_unjoin) { priv->delayed_unjoin = false; if (queue_work(priv->workqueue, &priv->unjoin_work) <= 0) wsm_unlock_tx(priv); } }
static void cw1200_scan_restart_delayed(struct cw1200_common *priv) { /* FW bug: driver has to restart p2p-dev mode after scan. */ if (priv->join_status == CW1200_JOIN_STATUS_MONITOR) { cw1200_enable_listening(priv); cw1200_update_filtering(priv); } if (priv->delayed_unjoin) { priv->delayed_unjoin = false; if (queue_work(priv->workqueue, &priv->unjoin_work) <= 0) wsm_unlock_tx(priv); } else if (priv->delayed_link_loss) { wiphy_dbg(priv->hw->wiphy, "[CQM] Requeue BSS loss.\n"); priv->delayed_link_loss = 0; cw1200_cqm_bssloss_sm(priv, 1, 0, 0); } }