From owner-p4-projects@FreeBSD.ORG Tue May 17 23:34:41 2005 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 2E07416A4D1; Tue, 17 May 2005 23:34:41 +0000 (GMT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 0982916A4CE for ; Tue, 17 May 2005 23:34:41 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id BDA7243DBB for ; Tue, 17 May 2005 23:34:40 +0000 (GMT) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.13.1/8.13.1) with ESMTP id j4HNYeS5060788 for ; Tue, 17 May 2005 23:34:40 GMT (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id j4HNYe5d060785 for perforce@freebsd.org; Tue, 17 May 2005 23:34:40 GMT (envelope-from sam@freebsd.org) Date: Tue, 17 May 2005 23:34:40 GMT Message-Id: <200505172334.j4HNYe5d060785@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to sam@freebsd.org using -f From: Sam Leffler To: Perforce Change Reviews Subject: PERFORCE change 77114 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 17 May 2005 23:34:41 -0000 http://perforce.freebsd.org/chv.cgi?CH=77114 Change 77114 by sam@sam_ebb on 2005/05/17 23:34:12 Synchronize wme and dynamic turbo state for multiple vap's by marking ic_flags with the intersection of all vap's. This permits drivers to check ic_flags to see if wme/dturbo should be setup. Affected files ... .. //depot/projects/vap/sys/net80211/ieee80211.c#10 edit .. //depot/projects/vap/sys/net80211/ieee80211_ioctl.c#10 edit .. //depot/projects/vap/sys/net80211/ieee80211_var.h#11 edit Differences ... ==== //depot/projects/vap/sys/net80211/ieee80211.c#10 (text+ko) ==== @@ -329,6 +329,8 @@ IEEE80211_LOCK(ic); TAILQ_INSERT_TAIL(&ic->ic_vaps, vap, iv_next); + ieee80211_syncflag(ic, IEEE80211_F_WME); + ieee80211_syncflag(ic, IEEE80211_F_TURBOP); IEEE80211_UNLOCK(ic); return 1; @@ -347,6 +349,8 @@ TAILQ_REMOVE(&ic->ic_vaps, vap, iv_next); if (TAILQ_EMPTY(&ic->ic_vaps)) /* reset to supported mode */ ic->ic_opmode = IEEE80211_M_STA; + ieee80211_syncflag(ic, IEEE80211_F_WME); + ieee80211_syncflag(ic, IEEE80211_F_TURBOP); IEEE80211_UNLOCK(ic); ifmedia_removeall(&vap->iv_media); @@ -363,6 +367,23 @@ ieee80211_node_vdetach(vap); } +void +ieee80211_syncflag(struct ieee80211com *ic, int flag) +{ + struct ieee80211vap *vap; + int bit; + + bit = 1; + /* XXX locking */ + TAILQ_FOREACH(vap, &ic->ic_vaps, iv_next) + if ((vap->iv_flags & flag) == 0) + bit = 0; + if (bit) + ic->ic_flags |= flag; + else + ic->ic_flags &= ~flag; +} + /* * Convert MHz frequency to IEEE channel number. */ ==== //depot/projects/vap/sys/net80211/ieee80211_ioctl.c#10 (text+ko) ==== @@ -1620,6 +1620,7 @@ vap->iv_flags |= IEEE80211_F_WME; } else vap->iv_flags &= ~IEEE80211_F_WME; + ieee80211_syncflag(ic, IEEE80211_F_WME); error = ENETRESET; /* XXX maybe not for station? */ break; case IEEE80211_IOC_HIDESSID: @@ -1716,6 +1717,8 @@ error = ieee80211_ioctl_setchanlist(vap, ireq); break; case IEEE80211_IOC_SCAN_REQ: + IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN, + "%s: active scan request\n", __func__); error = ieee80211_start_scan(vap, IEEE80211_SCAN_ACTIVE | IEEE80211_SCAN_NOPICK | @@ -1777,6 +1780,7 @@ vap->iv_flags |= IEEE80211_F_TURBOP; } else vap->iv_flags &= ~IEEE80211_F_TURBOP; + ieee80211_syncflag(ic, IEEE80211_F_TURBOP); error = ENETRESET; /* XXX maybe not for station? */ break; case IEEE80211_IOC_BGSCAN: ==== //depot/projects/vap/sys/net80211/ieee80211_var.h#11 (text+ko) ==== @@ -391,6 +391,7 @@ int ieee80211_rate2media(struct ieee80211com *, int, enum ieee80211_phymode); int ieee80211_media2rate(int); +void ieee80211_syncflag(struct ieee80211com *, int); u_int ieee80211_mhz2ieee(u_int, u_int); u_int ieee80211_chan2ieee(struct ieee80211com *, const struct ieee80211_channel *);