Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Jan 2005 03:53:29 GMT
From:      Sam Leffler <sam@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 68799 for review
Message-ID:  <200501120353.j0C3rT8V031157@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=68799

Change 68799 by sam@sam_ebb on 2005/01/12 03:53:12

	cleanup ibss merge handling: we don't need to do anything
	specifically to reprogram the beacon timers, it all happens
	automatically when the state machine is clocked; just move
	the call to stop tx dma on the beacon queue to the right
	place

Affected files ...

.. //depot/projects/wifi/sys/dev/ath/if_ath.c#66 edit

Differences ...

==== //depot/projects/wifi/sys/dev/ath/if_ath.c#66 (text+ko) ====

@@ -2795,21 +2795,13 @@
 			 * frame before attempting the merge.  The 802.11 spec
 			 * says the station should change it's bssid to match
 			 * the oldest station with the same ssid, where oldest
-			 * is determined by the tsf.
+			 * is determined by the tsf.  Note that hardware
+			 * reconfiguration happens through callback to
+			 * ath_newstate as the state machine will be go
+			 * from RUN -> RUN when this happens.
 			 */
-			if (le64toh(ni->ni_tstamp.tsf) >= tsf &&
-			    ieee80211_ibss_merge(ic, ni)) {
-				/*
-				 * XXX rather than handle this here it's
-				 *     probably better to do it at the 802.11
-				 *     layer through the state machine so,
-				 *     we can switch channel, etc.
-				 */
-				/* XXX adopt beacon interval and ATIM window */
-				ath_hal_setassocid(ah, ic->ic_bss->ni_bssid, 0);
-				ath_hal_stoptxdma(ah, sc->sc_bhalq);
-				ath_beacon_config(sc);
-			}
+			if (le64toh(ni->ni_tstamp.tsf) >= tsf)
+				(void) ieee80211_ibss_merge(ic, ni);
 		}
 		break;
 	}
@@ -4338,6 +4330,14 @@
 		 */
 		if (ic->ic_opmode == IEEE80211_M_HOSTAP ||
 		    ic->ic_opmode == IEEE80211_M_IBSS) {
+			/*
+			 * Stop any previous beacon DMA.  This may be
+			 * necessary, for example, when an ibss merge
+			 * causes reconfiguration; there will be a state
+			 * transition from RUN->RUN that means we may
+			 * be called with beacon transmission active.
+			 */
+			ath_hal_stoptxdma(ah, sc->sc_bhalq);
 			error = ath_beacon_alloc(sc, ni);
 			if (error != 0)
 				goto bad;



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