diff options
author | adrian <adrian@FreeBSD.org> | 2015-10-03 15:49:55 +0000 |
---|---|---|
committer | adrian <adrian@FreeBSD.org> | 2015-10-03 15:49:55 +0000 |
commit | dd03e2895272ec35f88247c00a282f47b11c5df5 (patch) | |
tree | fb14dcf11aa2626ed2d343a7456c3c3dda045faa /sys | |
parent | 9521a842ec44f4b85650d4a85c56f777546e82d9 (diff) | |
download | FreeBSD-src-dd03e2895272ec35f88247c00a282f47b11c5df5.zip FreeBSD-src-dd03e2895272ec35f88247c00a282f47b11c5df5.tar.gz |
rum(4): add TSF field into radiotap headers
Submitted by: <s3erios@gmail.com>
Differential Revision: https://reviews.freebsd.org/D3607
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/usb/wlan/if_rum.c | 10 | ||||
-rw-r--r-- | sys/dev/usb/wlan/if_rumvar.h | 8 |
2 files changed, 15 insertions, 3 deletions
diff --git a/sys/dev/usb/wlan/if_rum.c b/sys/dev/usb/wlan/if_rum.c index 886e470..6b9cd9f 100644 --- a/sys/dev/usb/wlan/if_rum.c +++ b/sys/dev/usb/wlan/if_rum.c @@ -206,6 +206,7 @@ static void rum_set_chan(struct rum_softc *, static void rum_enable_tsf_sync(struct rum_softc *); static void rum_enable_tsf(struct rum_softc *); static void rum_abort_tsf_sync(struct rum_softc *); +static void rum_get_tsf(struct rum_softc *, uint64_t *); static void rum_update_slot(struct rum_softc *); static void rum_set_bssid(struct rum_softc *, const uint8_t *); static void rum_set_macaddr(struct rum_softc *, const uint8_t *); @@ -857,6 +858,7 @@ tr_setup: tap->wt_flags = 0; tap->wt_rate = data->rate; + rum_get_tsf(sc, &tap->wt_tsf); tap->wt_antenna = sc->tx_ant; ieee80211_radiotap_tx(vap, m); @@ -963,11 +965,11 @@ rum_bulk_read_callback(struct usb_xfer *xfer, usb_error_t error) if (ieee80211_radiotap_active(ic)) { struct rum_rx_radiotap_header *tap = &sc->sc_rxtap; - /* XXX read tsf */ tap->wr_flags = 0; tap->wr_rate = ieee80211_plcp2rate(sc->sc_rx_desc.rate, (flags & RT2573_RX_OFDM) ? IEEE80211_T_OFDM : IEEE80211_T_CCK); + rum_get_tsf(sc, &tap->wr_tsf); tap->wr_antsignal = RT2573_NOISE_FLOOR + rssi; tap->wr_antnoise = RT2573_NOISE_FLOOR; tap->wr_antenna = sc->rx_ant; @@ -1836,6 +1838,12 @@ rum_abort_tsf_sync(struct rum_softc *sc) } static void +rum_get_tsf(struct rum_softc *sc, uint64_t *buf) +{ + rum_read_multi(sc, RT2573_TXRX_CSR12, buf, sizeof (*buf)); +} + +static void rum_update_slot(struct rum_softc *sc) { struct ieee80211com *ic = &sc->sc_ic; diff --git a/sys/dev/usb/wlan/if_rumvar.h b/sys/dev/usb/wlan/if_rumvar.h index 5a53578..fd3d8fa 100644 --- a/sys/dev/usb/wlan/if_rumvar.h +++ b/sys/dev/usb/wlan/if_rumvar.h @@ -22,6 +22,7 @@ struct rum_rx_radiotap_header { struct ieee80211_radiotap_header wr_ihdr; + uint64_t wr_tsf; uint8_t wr_flags; uint8_t wr_rate; uint16_t wr_chan_freq; @@ -32,7 +33,8 @@ struct rum_rx_radiotap_header { } __packed __aligned(8); #define RT2573_RX_RADIOTAP_PRESENT \ - ((1 << IEEE80211_RADIOTAP_FLAGS) | \ + ((1 << IEEE80211_RADIOTAP_TSFT) | \ + (1 << IEEE80211_RADIOTAP_FLAGS) | \ (1 << IEEE80211_RADIOTAP_RATE) | \ (1 << IEEE80211_RADIOTAP_CHANNEL) | \ (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) | \ @@ -42,6 +44,7 @@ struct rum_rx_radiotap_header { struct rum_tx_radiotap_header { struct ieee80211_radiotap_header wt_ihdr; + uint64_t wt_tsf; uint8_t wt_flags; uint8_t wt_rate; uint16_t wt_chan_freq; @@ -50,7 +53,8 @@ struct rum_tx_radiotap_header { } __packed __aligned(8); #define RT2573_TX_RADIOTAP_PRESENT \ - ((1 << IEEE80211_RADIOTAP_FLAGS) | \ + ((1 << IEEE80211_RADIOTAP_TSFT) | \ + (1 << IEEE80211_RADIOTAP_FLAGS) | \ (1 << IEEE80211_RADIOTAP_RATE) | \ (1 << IEEE80211_RADIOTAP_CHANNEL) | \ (1 << IEEE80211_RADIOTAP_ANTENNA)) |