svn commit: r245031 - head/sys/dev/ath
Adrian Chadd
adrian at FreeBSD.org
Fri Jan 4 06:28:35 UTC 2013
Author: adrian
Date: Fri Jan 4 06:28:34 2013
New Revision: 245031
URL: http://svnweb.freebsd.org/changeset/base/245031
Log:
For PHY error frames, populate the configured channel flags rather than
based on the received frame.
PHY errors don't have the relevant HT or 40MHz MCS flag set.
Modified:
head/sys/dev/ath/if_ath_rx.c
Modified: head/sys/dev/ath/if_ath_rx.c
==============================================================================
--- head/sys/dev/ath/if_ath_rx.c Fri Jan 4 05:53:17 2013 (r245030)
+++ head/sys/dev/ath/if_ath_rx.c Fri Jan 4 06:28:34 2013 (r245031)
@@ -423,7 +423,21 @@ ath_rx_tap(struct ifnet *ifp, struct mbu
sc->sc_rx_th.wr_flags = sc->sc_hwmap[rix].rxflags;
#ifdef AH_SUPPORT_AR5416
sc->sc_rx_th.wr_chan_flags &= ~CHAN_HT;
- if (sc->sc_rx_th.wr_rate & IEEE80211_RATE_MCS) { /* HT rate */
+ if (rs->rs_status & HAL_RXERR_PHY) {
+ struct ieee80211com *ic = ifp->if_l2com;
+
+ /*
+ * PHY error - make sure the channel flags
+ * reflect the actual channel configuration,
+ * not the received frame.
+ */
+ if (IEEE80211_IS_CHAN_HT40U(ic->ic_curchan))
+ sc->sc_rx_th.wr_chan_flags |= CHAN_HT40U;
+ else if (IEEE80211_IS_CHAN_HT40D(ic->ic_curchan))
+ sc->sc_rx_th.wr_chan_flags |= CHAN_HT40D;
+ else if (IEEE80211_IS_CHAN_HT20(ic->ic_curchan))
+ sc->sc_rx_th.wr_chan_flags |= CHAN_HT20;
+ } else if (sc->sc_rx_th.wr_rate & IEEE80211_RATE_MCS) { /* HT rate */
struct ieee80211com *ic = ifp->if_l2com;
if ((rs->rs_flags & HAL_RX_2040) == 0)
@@ -435,6 +449,7 @@ ath_rx_tap(struct ifnet *ifp, struct mbu
if ((rs->rs_flags & HAL_RX_GI) == 0)
sc->sc_rx_th.wr_flags |= IEEE80211_RADIOTAP_F_SHORTGI;
}
+
#endif
sc->sc_rx_th.wr_tsf = htole64(ath_extend_tsf(sc, rs->rs_tstamp, tsf));
if (rs->rs_status & HAL_RXERR_CRC)
More information about the svn-src-head
mailing list