From owner-p4-projects@FreeBSD.ORG Mon May 9 04:33:58 2005 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 439AA16A4E8; Mon, 9 May 2005 04:33:58 +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 0943A16A4E6 for ; Mon, 9 May 2005 04:33:58 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id DF98443D94 for ; Mon, 9 May 2005 04:33:57 +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 j494Xvqu026627 for ; Mon, 9 May 2005 04:33:57 GMT (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.13.1/8.13.1/Submit) id j494XvHW026624 for perforce@freebsd.org; Mon, 9 May 2005 04:33:57 GMT (envelope-from sam@freebsd.org) Date: Mon, 9 May 2005 04:33:57 GMT Message-Id: <200505090433.j494XvHW026624@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 76727 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: Mon, 09 May 2005 04:33:58 -0000 http://perforce.freebsd.org/chv.cgi?CH=76727 Change 76727 by sam@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)