svn commit: r257415 - head/sys/dev/iwn

Adrian Chadd adrian at FreeBSD.org
Thu Oct 31 02:21:49 UTC 2013


Author: adrian
Date: Thu Oct 31 02:21:48 2013
New Revision: 257415
URL: http://svnweb.freebsd.org/changeset/base/257415

Log:
  Don't base the rate table selection based on the channel mode;
  it needs to check whether there are rate entries in there or not.
  
  PR:		kern/183428

Modified:
  head/sys/dev/iwn/if_iwn.c

Modified: head/sys/dev/iwn/if_iwn.c
==============================================================================
--- head/sys/dev/iwn/if_iwn.c	Thu Oct 31 02:14:28 2013	(r257414)
+++ head/sys/dev/iwn/if_iwn.c	Thu Oct 31 02:21:48 2013	(r257415)
@@ -4312,6 +4312,7 @@ iwn_set_link_quality(struct iwn_softc *s
 	struct iwn_cmd_link_quality linkq;
 	uint8_t txant;
 	int i, rate, txrate;
+	int is_11n;
 
 	DPRINTF(sc, IWN_DEBUG_TRACE, "->%s begin\n", __func__);
 
@@ -4326,15 +4327,25 @@ iwn_set_link_quality(struct iwn_softc *s
 	linkq.ampdu_threshold = 3;
 	linkq.ampdu_limit = htole16(4000);	/* 4ms */
 
+	/*
+	 * Are we using 11n rates? Ensure the channel is
+	 * 11n _and_ we have some 11n rates, or don't
+	 * try.
+	 */
+	if (IEEE80211_IS_CHAN_HT(ni->ni_chan) && ni->ni_htrates.rs_nrates > 0)
+		is_11n = 1;
+	else
+		is_11n = 0;
+
 	/* Start at highest available bit-rate. */
-	if (IEEE80211_IS_CHAN_HT(ni->ni_chan))
+	if (is_11n)
 		txrate = ni->ni_htrates.rs_nrates - 1;
 	else
 		txrate = rs->rs_nrates - 1;
 	for (i = 0; i < IWN_MAX_TX_RETRIES; i++) {
 		uint32_t plcp;
 
-		if (IEEE80211_IS_CHAN_HT(ni->ni_chan))
+		if (is_11n)
 			rate = IEEE80211_RATE_MCS | txrate;
 		else
 			rate = RV(rs->rs_rates[txrate]);


More information about the svn-src-head mailing list