svn commit: r219599 - head/sys/net80211

Bernhard Schmidt bschmidt at FreeBSD.org
Sun Mar 13 11:47:44 UTC 2011


Author: bschmidt
Date: Sun Mar 13 11:47:43 2011
New Revision: 219599
URL: http://svn.freebsd.org/changeset/base/219599

Log:
  While determining the maxrate for ieee80211_media_setup() honor
  the device capabilities.

Modified:
  head/sys/net80211/ieee80211.c

Modified: head/sys/net80211/ieee80211.c
==============================================================================
--- head/sys/net80211/ieee80211.c	Sun Mar 13 11:45:58 2011	(r219598)
+++ head/sys/net80211/ieee80211.c	Sun Mar 13 11:47:43 2011	(r219599)
@@ -1076,10 +1076,18 @@ ieee80211_media_setup(struct ieee80211co
 	    isset(ic->ic_modecaps, IEEE80211_MODE_11NG)) {
 		addmedia(media, caps, addsta,
 		    IEEE80211_MODE_AUTO, IFM_IEEE80211_MCS);
-		/* XXX could walk htrates */
-		/* XXX known array size */
-		if (ieee80211_htrates[15].ht40_rate_400ns > maxrate)
-			maxrate = ieee80211_htrates[15].ht40_rate_400ns;
+		i = ic->ic_txstream * 8 - 1;
+		if ((ic->ic_htcaps & IEEE80211_HTCAP_CHWIDTH40) &&
+		    (ic->ic_htcaps & IEEE80211_HTCAP_SHORTGI40))
+			rate = ieee80211_htrates[i].ht40_rate_400ns;
+		else if ((ic->ic_htcaps & IEEE80211_HTCAP_CHWIDTH40))
+			rate = ieee80211_htrates[i].ht40_rate_800ns;
+		else if ((ic->ic_htcaps & IEEE80211_HTCAP_SHORTGI20))
+			rate = ieee80211_htrates[i].ht20_rate_400ns;
+		else
+			rate = ieee80211_htrates[i].ht20_rate_800ns;
+		if (rate > maxrate)
+			maxrate = rate;
 	}
 	return maxrate;
 }


More information about the svn-src-all mailing list