From owner-svn-src-user@FreeBSD.ORG Tue Apr 28 20:36:07 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E17FF106564A; Tue, 28 Apr 2009 20:36:07 +0000 (UTC) (envelope-from thompsa@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id CFFB08FC0A; Tue, 28 Apr 2009 20:36:07 +0000 (UTC) (envelope-from thompsa@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n3SKa7ro059251; Tue, 28 Apr 2009 20:36:07 GMT (envelope-from thompsa@svn.freebsd.org) Received: (from thompsa@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n3SKa7mH059248; Tue, 28 Apr 2009 20:36:07 GMT (envelope-from thompsa@svn.freebsd.org) Message-Id: <200904282036.n3SKa7mH059248@svn.freebsd.org> From: Andrew Thompson Date: Tue, 28 Apr 2009 20:36:07 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r191636 - user/thompsa/vaptq/sys/net80211 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 28 Apr 2009 20:36:08 -0000 Author: thompsa Date: Tue Apr 28 20:36:07 2009 New Revision: 191636 URL: http://svn.freebsd.org/changeset/base/191636 Log: Split out the channel logic of ieee80211_setcurchan() to ieee80211_setupcurchan() so it can be used to change the channel without deferring the driver callback. Previously the scan would not go back to the bss channel immediately since the channel change was requeued. Modified: user/thompsa/vaptq/sys/net80211/ieee80211_node.c user/thompsa/vaptq/sys/net80211/ieee80211_node.h user/thompsa/vaptq/sys/net80211/ieee80211_scan.c Modified: user/thompsa/vaptq/sys/net80211/ieee80211_node.c ============================================================================== --- user/thompsa/vaptq/sys/net80211/ieee80211_node.c Tue Apr 28 20:23:58 2009 (r191635) +++ user/thompsa/vaptq/sys/net80211/ieee80211_node.c Tue Apr 28 20:36:07 2009 (r191636) @@ -636,11 +636,11 @@ ieee80211_sync_curchan(struct ieee80211c } /* - * Change the current channel. The request channel may be + * Setup the current channel. The request channel may be * promoted if other vap's are operating with HT20/HT40. */ void -ieee80211_setcurchan(struct ieee80211com *ic, struct ieee80211_channel *c) +ieee80211_setupcurchan(struct ieee80211com *ic, struct ieee80211_channel *c) { if (ic->ic_htcaps & IEEE80211_HTC_HT) { int flags = gethtadjustflags(ic); @@ -656,10 +656,16 @@ ieee80211_setcurchan(struct ieee80211com ic->ic_bsschan = ic->ic_curchan = c; ic->ic_curmode = ieee80211_chan2mode(ic->ic_curchan); ic->ic_rt = ieee80211_get_ratetable(ic->ic_curchan); - /* - * The channel change is guaranteed to have happened before the next - * state change - */ +} + +/* + * Change the current channel. The channel change is guaranteed to have + * happened before the next state change. + */ +void +ieee80211_setcurchan(struct ieee80211com *ic, struct ieee80211_channel *c) +{ + ieee80211_setupcurchan(ic, c); ieee80211_runtask(ic, &ic->ic_chan_task); } Modified: user/thompsa/vaptq/sys/net80211/ieee80211_node.h ============================================================================== --- user/thompsa/vaptq/sys/net80211/ieee80211_node.h Tue Apr 28 20:23:58 2009 (r191635) +++ user/thompsa/vaptq/sys/net80211/ieee80211_node.h Tue Apr 28 20:36:07 2009 (r191636) @@ -286,6 +286,8 @@ void ieee80211_node_set_chan(struct ieee void ieee80211_create_ibss(struct ieee80211vap*, struct ieee80211_channel *); void ieee80211_reset_bss(struct ieee80211vap *); void ieee80211_sync_curchan(struct ieee80211com *); +void ieee80211_setupcurchan(struct ieee80211com *, + struct ieee80211_channel *); void ieee80211_setcurchan(struct ieee80211com *, struct ieee80211_channel *); int ieee80211_ibss_merge(struct ieee80211_node *); struct ieee80211_scan_entry; Modified: user/thompsa/vaptq/sys/net80211/ieee80211_scan.c ============================================================================== --- user/thompsa/vaptq/sys/net80211/ieee80211_scan.c Tue Apr 28 20:23:58 2009 (r191635) +++ user/thompsa/vaptq/sys/net80211/ieee80211_scan.c Tue Apr 28 20:36:07 2009 (r191636) @@ -864,6 +864,7 @@ scan_task(void *arg, int pending) /* * Use an 1ms delay so the null data frame has a chance * to go out. + * XXX Should use M_TXCB mechanism to eliminate this. */ cv_timedwait(&SCAN_PRIVATE(ss)->ss_scan_cv, IEEE80211_LOCK_OBJ(ic), hz / 1000); @@ -960,8 +961,12 @@ scan_task(void *arg, int pending) ic->ic_lastscan = ticks; /* return to the bss channel */ if (ic->ic_bsschan != IEEE80211_CHAN_ANYC && - ic->ic_curchan != ic->ic_bsschan) - ieee80211_setcurchan(ic, ic->ic_bsschan); /* XXX */ + ic->ic_curchan != ic->ic_bsschan) { + ieee80211_setupcurchan(ic, ic->ic_bsschan); + IEEE80211_UNLOCK(ic); + ic->ic_set_channel(ic); + IEEE80211_LOCK(ic); + } /* clear internal flags and any indication of a pick */ SCAN_PRIVATE(ss)->ss_iflags &= ~ISCAN_REP; ss->ss_flags &= ~IEEE80211_SCAN_GOTPICK;