svn commit: r219985 - in head/sys/dev/ath: . ath_rate/sample
Adrian Chadd
adrian at FreeBSD.org
Fri Mar 25 10:55:25 UTC 2011
Author: adrian
Date: Fri Mar 25 10:55:25 2011
New Revision: 219985
URL: http://svn.freebsd.org/changeset/base/219985
Log:
After discussing with Bernhard, the "right" way in net80211 to check
the channel width is ni->ni_chw, which is set to the negotiated channel
width. ni->ni_htflags is the capability, rather than the negotiated
value.
Teach both the TX path and the sample rate module about this.
Modified:
head/sys/dev/ath/ath_rate/sample/sample.c
head/sys/dev/ath/if_ath_tx_ht.c
Modified: head/sys/dev/ath/ath_rate/sample/sample.c
==============================================================================
--- head/sys/dev/ath/ath_rate/sample/sample.c Fri Mar 25 10:53:13 2011 (r219984)
+++ head/sys/dev/ath/ath_rate/sample/sample.c Fri Mar 25 10:55:25 2011 (r219985)
@@ -484,7 +484,7 @@ update_stats(struct ath_softc *sc, struc
const int size_bin = size_to_bin(frame_size);
const int size = bin_to_size(size_bin);
int tt, tries_so_far;
- int is_ht40 = (an->an_node.ni_htcap & IEEE80211_HTCAP_CHWIDTH40);
+ int is_ht40 = (an->an_node.ni_chw == 40);
if (!IS_RATE_DEFINED(sn, rix0))
return;
@@ -799,7 +799,7 @@ ath_rate_ctl_reset(struct ath_softc *sc,
continue;
printf(" %d %s/%d", dot11rate(rt, rix), dot11rate_label(rt, rix),
calc_usecs_unicast_packet(sc, 1600, rix, 0,0,
- (ni->ni_htcap & IEEE80211_HTCAP_CHWIDTH40)));
+ (ni->ni_chw == 40)));
}
printf("\n");
}
@@ -829,7 +829,7 @@ ath_rate_ctl_reset(struct ath_softc *sc,
sn->stats[y][rix].perfect_tx_time =
calc_usecs_unicast_packet(sc, size, rix, 0, 0,
- (ni->ni_htcap & IEEE80211_HTCAP_CHWIDTH40));
+ (ni->ni_chw == 40));
sn->stats[y][rix].average_tx_time =
sn->stats[y][rix].perfect_tx_time;
}
Modified: head/sys/dev/ath/if_ath_tx_ht.c
==============================================================================
--- head/sys/dev/ath/if_ath_tx_ht.c Fri Mar 25 10:53:13 2011 (r219984)
+++ head/sys/dev/ath/if_ath_tx_ht.c Fri Mar 25 10:55:25 2011 (r219985)
@@ -129,9 +129,14 @@ ath_rateseries_setup(struct ath_softc *s
if (flags & (HAL_TXDESC_RTSENA | HAL_TXDESC_CTSENA))
series[i].RateFlags |= HAL_RATESERIES_RTS_CTS;
-#if 0
- if (ni->ni_htcap & IEEE80211_HTCAP_CHWIDTH40)
+ /*
+ * Transmit 40MHz frames only if the node has negotiated
+ * it rather than whether the node is capable of it or not.
+ * It's subtly different in the hostap case.
+ */
+ if (ni->ni_chw == 40)
series[i].RateFlags |= HAL_RATESERIES_2040;
+#if 0
/*
* The hardware only supports short-gi in 40mhz mode -
* if later hardware supports it in 20mhz mode, be sure
More information about the svn-src-head
mailing list