PERFORCE change 87169 for review
Sam Leffler
sam at FreeBSD.org
Wed Nov 23 21:13:54 PST 2005
http://perforce.freebsd.org/chv.cgi?CH=87169
Change 87169 by sam at sam_ebb on 2005/11/24 05:12:58
include local tsf in rx radiotap header
Affected files ...
.. //depot/projects/wifi/sys/dev/ath/if_ath.c#114 edit
.. //depot/projects/wifi/sys/dev/ath/if_athioctl.h#12 edit
Differences ...
==== //depot/projects/wifi/sys/dev/ath/if_ath.c#114 (text+ko) ====
@@ -3070,14 +3070,11 @@
/*
* Extend 15-bit time stamp from rx descriptor to
- * a full 64-bit TSF using the current h/w TSF.
+ * a full 64-bit TSF using the specified TSF.
*/
static __inline u_int64_t
-ath_extend_tsf(struct ath_hal *ah, u_int32_t rstamp)
+ath_extend_tsf(u_int32_t rstamp, u_int64_t tsf)
{
- u_int64_t tsf;
-
- tsf = ath_hal_gettsf64(ah);
if ((tsf & 0x7fff) < rstamp)
tsf -= 0x8000;
return ((tsf &~ 0x7fff) | rstamp);
@@ -3115,7 +3112,8 @@
case IEEE80211_FC0_SUBTYPE_PROBE_RESP:
if (ic->ic_opmode == IEEE80211_M_IBSS &&
ic->ic_state == IEEE80211_S_RUN) {
- u_int64_t tsf = ath_extend_tsf(sc->sc_ah, rstamp);
+ u_int64_t tsf = ath_extend_tsf(rstamp,
+ ath_hal_gettsf64(sc->sc_ah));
/*
* Handle ibss merge as needed; check the tsf on the
* frame before attempting the merge. The 802.11 spec
@@ -3172,12 +3170,14 @@
int len, type, ngood, noise;
u_int phyerr;
HAL_STATUS status;
+ u_int64_t tsf;
NET_LOCK_GIANT(); /* XXX */
DPRINTF(sc, ATH_DEBUG_RX_PROC, "%s: pending %u\n", __func__, npending);
ngood = 0;
noise = ath_hal_getchannoise(ah, &sc->sc_curchan);
+ tsf = ath_hal_gettsf64(ah);
do {
bf = STAILQ_FIRST(&sc->sc_rxbuf);
if (bf == NULL) { /* NB: shouldn't happen */
@@ -3347,14 +3347,15 @@
m_freem(m);
goto rx_next;
}
+ sc->sc_rx_th.wr_tsf = htole64(
+ ath_extend_tsf(ds->ds_rxstat.rs_tstamp, tsf));
rix = ds->ds_rxstat.rs_rate;
sc->sc_rx_th.wr_flags = sc->sc_hwmap[rix].rxflags;
sc->sc_rx_th.wr_rate = sc->sc_hwmap[rix].ieeerate;
- sc->sc_rx_th.wr_antenna = ds->ds_rxstat.rs_antenna;
nf = ath_hal_getchannoise(ah, &sc->sc_curchan);
sc->sc_rx_th.wr_antsignal = ds->ds_rxstat.rs_rssi + nf;
sc->sc_rx_th.wr_antnoise = nf;
- /* XXX TSF */
+ sc->sc_rx_th.wr_antenna = ds->ds_rxstat.rs_antenna;
bpf_mtap2(sc->sc_drvbpf,
&sc->sc_rx_th, sc->sc_rx_th_len, m);
@@ -3442,7 +3443,7 @@
/* rx signal state monitoring */
ath_hal_rxmonitor(ah, &sc->sc_halstats, &sc->sc_curchan);
if (ngood)
- sc->sc_lastrx = ath_hal_gettsf64(ah);
+ sc->sc_lastrx = tsf;
NET_UNLOCK_GIANT(); /* XXX */
#undef PA2DESC
==== //depot/projects/wifi/sys/dev/ath/if_athioctl.h#12 (text+ko) ====
@@ -136,6 +136,7 @@
* Radio capture format.
*/
#define ATH_RX_RADIOTAP_PRESENT ( \
+ (1 << IEEE80211_RADIOTAP_TSFT) | \
(1 << IEEE80211_RADIOTAP_FLAGS) | \
(1 << IEEE80211_RADIOTAP_RATE) | \
(1 << IEEE80211_RADIOTAP_CHANNEL) | \
@@ -146,6 +147,7 @@
struct ath_rx_radiotap_header {
struct ieee80211_radiotap_header wr_ihdr;
+ u_int64_t wr_tsf;
u_int8_t wr_flags; /* XXX for padding */
u_int8_t wr_rate;
u_int16_t wr_chan_freq;
More information about the p4-projects
mailing list