PERFORCE change 76727 for review

Sam Leffler sam at FreeBSD.org
Sun May 8 21:33:58 PDT 2005


http://perforce.freebsd.org/chv.cgi?CH=76727

Change 76727 by sam at sam_ebb on 2005/05/09 04:33:19

	o add dynamic turbo base/boost switching based on beacon
	  when operating in station mode 
	o don't futz with the count of sta's in power save mode when
	  operating in station mode; this insures drivers can use it
	  to decide when to queue multicast frames (just started doing
	  pwr-save stuff in station mode for background scanning)

Affected files ...

.. //depot/projects/vap/sys/net80211/ieee80211_input.c#9 edit
.. //depot/projects/vap/sys/net80211/ieee80211_node.c#6 edit
.. //depot/projects/vap/sys/net80211/ieee80211_node.h#6 edit

Differences ...

==== //depot/projects/vap/sys/net80211/ieee80211_input.c#9 (text+ko) ====

@@ -533,7 +533,7 @@
 		IEEE80211_NODE_STAT_ADD(ni, rx_bytes, m->m_pkthdr.len);
 
 #define	FF_LLC_SIZE	(sizeof(struct ether_header) + sizeof(struct llc))
-		if ((ni->ni_flags & IEEE80211_NODE_FF) &&
+		if (IEEE80211_ATH_CAP(vap, ni, FF) &&
 		    m->m_pkthdr.len >= 3*FF_LLC_SIZE) {
 			struct llc *llc;
 
@@ -1920,14 +1920,16 @@
 		caps |= IEEE80211_NODE_TURBOP;
 	if (ath->ath_capability & ATHEROS_CAP_FAST_FRAME)
 		caps |= IEEE80211_NODE_FF;
+	if (ath->ath_capability & ATHEROS_CAP_BOOST)
+		caps |= IEEE80211_NODE_BOOST;
 	if ((ni->ni_flags ^ caps) & IEEE80211_NODE_ATH) {
 		IEEE80211_NOTE(vap, IEEE80211_MSG_SUPERG, ni,
-		    "ath ie: caps 0x%x defkeyix 0x%x, use 0x%x\n",
+		    "ath ie: caps 0x%x defkeyix 0x%x, use 0x%x",
 		    ath->ath_capability, LE_READ_2(ath->ath_defkeyix), caps);
 		ni->ni_flags = (ni->ni_flags &~ IEEE80211_NODE_ATH) | caps;
 		return 1;
 	} else
-		return 0;			/* NB: no change */
+		return 0;
 }
 
 void
@@ -2298,8 +2300,22 @@
 				ieee80211_wme_updateparams(vap);
 			} else
 				ni->ni_flags &= ~IEEE80211_NODE_QOS;
-			if (scan.ath != NULL)
-				ieee80211_parse_athparams(ni, scan.ath, wh);
+			if (scan.ath != NULL &&
+			    ieee80211_parse_athparams(ni, scan.ath, wh) > 0 &&
+			    IEEE80211_ATH_CAP(vap, ni, TURBOP)) {
+				u_int16_t curflags, newflags;
+				/*
+				 * Check for turbo mode switch.  Calculate flags
+				 * for the new mode and effect the switch.
+				 */
+				newflags = curflags = ic->ic_bsschan->ic_flags;
+				if (ni->ni_flags & IEEE80211_NODE_BOOST)
+					newflags |= IEEE80211_CHAN_TURBO;
+				else
+					newflags &= ~IEEE80211_CHAN_TURBO;
+				if (newflags != curflags)
+					ieee80211_dturbo_switch(ic, newflags);
+			}
 			if (scan.doth != NULL)
 				ieee80211_parse_dothparams(vap, scan.doth, wh);
 			/* NB: don't need the rest of this */
@@ -2894,7 +2910,8 @@
 	struct mbuf *m;
 
 	if (enable) {
-		if ((ni->ni_flags & IEEE80211_NODE_PWR_MGT) == 0)
+		if (vap->iv_opmode != IEEE80211_M_STA &&
+		    (ni->ni_flags & IEEE80211_NODE_PWR_MGT) == 0)
 			vap->iv_ps_sta++;
 		ni->ni_flags |= IEEE80211_NODE_PWR_MGT;
 		IEEE80211_NOTE(vap, IEEE80211_MSG_POWER, ni,
@@ -2902,7 +2919,8 @@
 		return;
 	}
 
-	if (ni->ni_flags & IEEE80211_NODE_PWR_MGT)
+	if (vap->iv_opmode != IEEE80211_M_STA &&
+	    (ni->ni_flags & IEEE80211_NODE_PWR_MGT))
 		vap->iv_ps_sta--;
 	ni->ni_flags &= ~IEEE80211_NODE_PWR_MGT;
 	IEEE80211_NOTE(vap, IEEE80211_MSG_POWER, ni,

==== //depot/projects/vap/sys/net80211/ieee80211_node.c#6 (text+ko) ====

@@ -522,7 +522,8 @@
 
 	/* NB: preserve ni_table */
 	if (ni->ni_flags & IEEE80211_NODE_PWR_MGT) {
-		vap->iv_ps_sta--;
+		if (vap->iv_opmode != IEEE80211_M_STA)
+			vap->iv_ps_sta--;
 		ni->ni_flags &= ~IEEE80211_NODE_PWR_MGT;
 		IEEE80211_NOTE(vap, IEEE80211_MSG_POWER, ni,
 		    "power save mode off, %u sta's in ps mode", vap->iv_ps_sta);

==== //depot/projects/vap/sys/net80211/ieee80211_node.h#6 (text+ko) ====

@@ -105,6 +105,7 @@
 #define	IEEE80211_NODE_PWR_MGT	0x0010		/* power save mode enabled */
 #define IEEE80211_NODE_FF	0x0020          /* Atheros fast-frames enabled*/
 #define IEEE80211_NODE_TURBOP	0x0040		/* Atheros Turbo' enabled */
+#define IEEE80211_NODE_BOOST	0x0080		/* Atheros Turbo' boosted */
 	u_int16_t		ni_associd;	/* assoc response */
 	u_int16_t		ni_txpower;	/* current transmit power */
 	u_int16_t		ni_vlan;	/* vlan tag */
@@ -153,7 +154,8 @@
 };
 MALLOC_DECLARE(M_80211_NODE);
 
-#define	IEEE80211_NODE_ATH	(IEEE80211_NODE_FF | IEEE80211_NODE_TURBOP)
+#define	IEEE80211_NODE_ATH \
+	(IEEE80211_NODE_FF | IEEE80211_NODE_TURBOP | IEEE80211_NODE_BOOST)
 
 #define	IEEE80211_NODE_AID(ni)	IEEE80211_AID(ni->ni_associd)
 


More information about the p4-projects mailing list