boolean_t arn_stoprecv(struct arn_softc *sc) { struct ath_hal *ah = sc->sc_ah; boolean_t stopped; ath9k_hw_stoppcurecv(ah); ath9k_hw_setrxfilter(ah, 0); stopped = ath9k_hw_stopdmarecv(ah); /* 3ms is long enough for 1 frame ??? */ drv_usecwait(3000); sc->sc_rxlink = NULL; return (stopped); }
void ath9k_htc_ps_restore(struct ath9k_htc_priv *priv) { bool reset; mutex_lock(&priv->htc_pm_lock); if (--priv->ps_usecount != 0) goto unlock; if (priv->ps_idle) { ath9k_hw_setrxabort(priv->ah, true); ath9k_hw_stopdmarecv(priv->ah, &reset); ath9k_hw_setpower(priv->ah, ATH9K_PM_FULL_SLEEP); } else if (priv->ps_enabled) { ath9k_hw_setpower(priv->ah, ATH9K_PM_NETWORK_SLEEP); } unlock: mutex_unlock(&priv->htc_pm_lock); }