Page MenuHomeFreeBSD

D47861.id147340.diff
No OneTemporary

D47861.id147340.diff

diff --git a/sys/dev/rtwn/if_rtwn.c b/sys/dev/rtwn/if_rtwn.c
--- a/sys/dev/rtwn/if_rtwn.c
+++ b/sys/dev/rtwn/if_rtwn.c
@@ -331,6 +331,11 @@
"ht40", CTLFLAG_RDTUN, &sc->sc_ht40,
sc->sc_ht40, "Enable 40 MHz mode support");
+ sc->sc_ena_tsf64 = 0;
+ SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
+ "ena_tsf64", CTLFLAG_RWTUN, &sc->sc_ena_tsf64,
+ sc->sc_ena_tsf64, "Enable/disable per-packet TSF64 reporting");
+
#ifdef RTWN_DEBUG
SYSCTL_ADD_U32(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
"debug", CTLFLAG_RWTUN, &sc->sc_debug, sc->sc_debug,
diff --git a/sys/dev/rtwn/if_rtwn_rx.c b/sys/dev/rtwn/if_rtwn_rx.c
--- a/sys/dev/rtwn/if_rtwn_rx.c
+++ b/sys/dev/rtwn/if_rtwn_rx.c
@@ -285,8 +285,18 @@
rxs.c_pktflags |= IEEE80211_RX_F_FAIL_FCSCRC;
rxs.r_flags |= IEEE80211_R_TSF_START; /* XXX undocumented */
- rxs.r_flags |= IEEE80211_R_TSF64;
- rxs.c_rx_tsf = rtwn_extend_rx_tsf(sc, stat);
+
+ /*
+ * Doing the TSF64 extension on USB is expensive, especially
+ * if it's being done on every MPDU in an AMPDU burst.
+ */
+ if (sc->sc_ena_tsf64) {
+ rxs.r_flags |= IEEE80211_R_TSF64;
+ rxs.c_rx_tsf = rtwn_extend_rx_tsf(sc, stat);
+ } else {
+ rxs.r_flags |= IEEE80211_R_TSF32;
+ rxs.c_rx_tsf = le32toh(stat->tsf_low);
+ }
/* Get RSSI from PHY status descriptor. */
is_cck = (rxs.c_pktflags & IEEE80211_RX_F_CCK) != 0;
diff --git a/sys/dev/rtwn/if_rtwnvar.h b/sys/dev/rtwn/if_rtwnvar.h
--- a/sys/dev/rtwn/if_rtwnvar.h
+++ b/sys/dev/rtwn/if_rtwnvar.h
@@ -172,6 +172,7 @@
device_t sc_dev;
int sc_ht40;
+ int sc_ena_tsf64;
uint32_t sc_debug;
int sc_hwcrypto;
int sc_ratectl_sysctl;

File Metadata

Mime Type
text/plain
Expires
Tue, Mar 4, 7:09 AM (15 h, 41 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16964649
Default Alt Text
D47861.id147340.diff (1 KB)

Event Timeline