summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2012-06-15 01:15:59 +0000
committeradrian <adrian@FreeBSD.org>2012-06-15 01:15:59 +0000
commit610e0d131b596189d87adf33193df2530b30a543 (patch)
tree52f9951d63284415d3643848eef320021a09ce7e
parent924ef2a7f39c06df352467e4e5f1b738d37befe6 (diff)
downloadFreeBSD-src-610e0d131b596189d87adf33193df2530b30a543.zip
FreeBSD-src-610e0d131b596189d87adf33193df2530b30a543.tar.gz
Convert ath(4) to just use ieee80211_suspend_all() and ieee80211_resume_all().
The existing code tries to use the beacon miss timer to signal that the AP has gone away. Unfortunately this doesn't seem to be behaving itself. I'll try to investigate why this is for the sake of completeness. The result is the STA will stay "associated" to the AP it was associated with when it suspended. It never receives a bmiss notification so it never tries reassociating. PR: kern/169084
-rw-r--r--sys/dev/ath/if_ath.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/sys/dev/ath/if_ath.c b/sys/dev/ath/if_ath.c
index 6140206..6a551f0 100644
--- a/sys/dev/ath/if_ath.c
+++ b/sys/dev/ath/if_ath.c
@@ -1310,8 +1310,13 @@ ath_suspend(struct ath_softc *sc)
sc->sc_resume_up = (ifp->if_flags & IFF_UP) != 0;
if (ic->ic_opmode == IEEE80211_M_STA)
+ /*
+ * This has been disabled - see PR kern/169084.
+ */
+#if 0
ath_stop(ifp);
else
+#endif
ieee80211_suspend_all(ic);
/*
* NB: don't worry about putting the chip in low power
@@ -1379,6 +1384,15 @@ ath_resume(struct ath_softc *sc)
ath_hal_setledstate(ah, HAL_LED_INIT);
if (sc->sc_resume_up) {
+ /*
+ * This particular feature doesn't work at the present,
+ * at least on the 802.11n chips. It's quite possible
+ * that the STA Beacon timers aren't being configured
+ * properly.
+ *
+ * See PR kern/169084.
+ */
+#if 0
if (ic->ic_opmode == IEEE80211_M_STA) {
ath_init(sc);
ath_hal_setledstate(ah, HAL_LED_RUN);
@@ -1392,7 +1406,9 @@ ath_resume(struct ath_softc *sc)
*/
ath_beacon_config(sc, NULL);
sc->sc_syncbeacon = 1;
+ ieee80211_resume_all(ic);
} else
+#endif
ieee80211_resume_all(ic);
}
OpenPOWER on IntegriCloud