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-all
mailing list