From 5a970609a5fbacab6dfb67ea24fbeac756a13d46 Mon Sep 17 00:00:00 2001 From: Alexander Egorenkov Date: Wed, 12 May 2010 21:52:40 +0200 Subject: [PATCH] Fixed wrong RSSI reported to net80211 --- rt2860.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/rt2860.c b/rt2860.c index df086c4..e2ddf87 100644 --- a/rt2860.c +++ b/rt2860.c @@ -5032,7 +5032,7 @@ static int rt2860_rx_eof(struct rt2860_softc *sc, int limit) uint8_t cipher_err, rssi, ant, phymode, bw, shortgi, stbc, mcs, keyidx, tid, frag; uint16_t seq; int8_t rssi_dbm; - int error, nsegs, len, ampdu, amsdu, nframes, i; + int error, nsegs, len, ampdu, amsdu, rssi_dbm_rel, nframes, i; ic = &sc->ic; ifp = sc->ifp; @@ -5297,15 +5297,25 @@ static int rt2860_rx_eof(struct rt2860_softc *sc, int limit) bpf_mtap2(sc->drvbpf, tap, sc->rxtap_len, m); } + /* + * net80211 assumes that RSSI data are in the range [-127..127] and + * in .5 dBm units relative to the current noise floor + */ + + rssi_dbm_rel = (rssi_dbm - RT2860_NOISE_FLOOR) * 2; + if (rssi_dbm_rel > 127) + rssi_dbm_rel = 127; + RT2860_DPRINTF(sc, RT2860_DEBUG_RX, "%s: received frame: len=%d, phymode=%d, bw=%d, shortgi=%d, stbc=0x%02x, mcs=%d, " "ant=%d, rssi=%d/%d/%d, snr=%d/%d, wcid=0x%02x, ampdu=%d, amsdu=%d, " - "tid=%d, seq=%d, frag=%d, retry=%d\n", + "tid=%d, seq=%d, frag=%d, retry=%d, rssi_dbm=%d, rssi_dbm_rel=%d\n", device_get_nameunit(sc->dev), len, phymode, bw, shortgi, stbc, mcs, ant, rxwi->rssi[0], rxwi->rssi[1], rxwi->rssi[2], rxwi->snr[0], rxwi->snr[1], - rxwi->wcid, ampdu, amsdu, tid, seq, frag, (wh->i_fc[1] & IEEE80211_FC1_RETRY) ? 1 : 0); + rxwi->wcid, ampdu, amsdu, tid, seq, frag, (wh->i_fc[1] & IEEE80211_FC1_RETRY) ? 1 : 0, + rssi_dbm, rssi_dbm_rel); ni = ieee80211_find_rxnode(ic, (struct ieee80211_frame_min *) wh); @@ -5320,7 +5330,7 @@ static int rt2860_rx_eof(struct rt2860_softc *sc, int limit) } } - ieee80211_input(ic, m, ni, rssi_dbm, RT2860_NOISE_FLOOR, 0); + ieee80211_input(ic, m, ni, rssi_dbm_rel, RT2860_NOISE_FLOOR, 0); ieee80211_free_node(ni); -- 2.11.4.GIT