Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 15 Jun 2012 01:15:59 +0000 (UTC)
From:      Adrian Chadd <adrian@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r237108 - head/sys/dev/ath
Message-ID:  <201206150115.q5F1FxBr032594@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: adrian
Date: Fri Jun 15 01:15:59 2012
New Revision: 237108
URL: http://svn.freebsd.org/changeset/base/237108

Log:
  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

Modified:
  head/sys/dev/ath/if_ath.c

Modified: head/sys/dev/ath/if_ath.c
==============================================================================
--- head/sys/dev/ath/if_ath.c	Thu Jun 14 22:19:23 2012	(r237107)
+++ head/sys/dev/ath/if_ath.c	Fri Jun 15 01:15:59 2012	(r237108)
@@ -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);
 	}
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201206150115.q5F1FxBr032594>