Lines Matching +full:convert +full:- +full:rate

3 /*-
6 * Copyright (c) 2015-2016 Andriy Voskoboinyk <avos@FreeBSD.org>
56 * Get the driver rate set for the current operating rateset(s).
58 * rates_p is set to a mask of 11abg ridx values (not HW rate values.)
59 * htrates_p is set to a mask of 11n ridx values (not HW rate values),
64 * If basic_rates is 1 then only the 11abg basic rate logic will
81 for (i = 0; i < rs->rs_nrates; i++) { in rtwn_get_rates()
82 /* Convert 802.11 rate to HW rate index. */ in rtwn_get_rates()
83 ridx = rate2ridx(IEEE80211_RV(rs->rs_rates[i])); in rtwn_get_rates()
84 if (ridx == RTWN_RIDX_UNKNOWN) /* Unknown rate, skip. */ in rtwn_get_rates()
86 if (((rs->rs_rates[i] & IEEE80211_RATE_BASIC) != 0) || in rtwn_get_rates()
96 for (i = 0; i < rs_ht->rs_nrates; i++) { in rtwn_get_rates()
97 uint8_t rate = rs_ht->rs_rates[i] & 0x7f; in rtwn_get_rates() local
98 bool is_basic = rs_ht->rs_rates[i] & in rtwn_get_rates()
100 /* Only do up to 2-stream rates for now */ in rtwn_get_rates()
101 if ((rate) > 0xf) in rtwn_get_rates()
107 ridx = rate & 0xf; in rtwn_get_rates()
110 /* Guard against the rate table being oddly ordered */ in rtwn_get_rates()
138 * Configure the initial RTS rate to use.
146 * We shouldn't set the initial RTS/CTS generation rate in rtwn_set_rts_rate()
147 * as the highest available rate - that may end up in rtwn_set_rts_rate()
150 * Instead, choose a suitable low OFDM/CCK rate based in rtwn_set_rts_rate()
151 * on the basic rate bitmask. Assume the caller in rtwn_set_rts_rate()
159 device_printf(sc->sc_dev, in rtwn_set_rts_rate()
160 "WARNING: no configured basic RTS rate!\n"); in rtwn_set_rts_rate()
163 ridx = fls(rates) - 1; in rtwn_set_rts_rate()
178 /* Convert antenna signal to percentage. */ in rtwn_update_avgrssi()
179 if (rssi <= -100 || rssi >= 20) in rtwn_update_avgrssi()
191 pwdb -= 4; in rtwn_update_avgrssi()
193 pwdb -= 8; in rtwn_update_avgrssi()
195 pwdb -= 6; in rtwn_update_avgrssi()
197 pwdb -= 2; in rtwn_update_avgrssi()
200 if (un->avg_pwdb == -1) /* Init. */ in rtwn_update_avgrssi()
201 un->avg_pwdb = pwdb; in rtwn_update_avgrssi()
202 else if (un->avg_pwdb < pwdb) in rtwn_update_avgrssi()
203 un->avg_pwdb = ((un->avg_pwdb * 19 + pwdb) / 20) + 1; in rtwn_update_avgrssi()
205 un->avg_pwdb = ((un->avg_pwdb * 19 + pwdb) / 20); in rtwn_update_avgrssi()
208 "MACID %d, PWDB %d, EMA %d\n", un->id, pwdb, un->avg_pwdb); in rtwn_update_avgrssi()
253 rxdw3 = le32toh(stat->rxdw3); in rtwn_extend_rx_tsf()
254 tsfl = le32toh(stat->tsf_low); in rtwn_extend_rx_tsf()
270 if (abs(tsfl0 - tsfl) < abs(tsfl1 - tsfl)) { in rtwn_extend_rx_tsf()
283 tsft--; in rtwn_extend_rx_tsf()
293 struct ieee80211com *ic = &sc->sc_ic; in rtwn_rx_common()
305 rxdw0 = le32toh(stat->rxdw0); in rtwn_rx_common()
313 if ((wh->i_fc[1] & IEEE80211_FC1_PROTECTED) && in rtwn_rx_common()
315 m->m_flags |= M_WEP; in rtwn_rx_common()
319 if (ni != NULL && (ni->ni_flags & IEEE80211_NODE_HT)) in rtwn_rx_common()
320 m->m_flags |= M_AMPDU; in rtwn_rx_common()
328 physt = (un != NULL) ? &un->last_physt : &sc->last_physt; in rtwn_rx_common()
334 memcpy(&sc->last_physt, physt, sizeof(sc->last_physt)); in rtwn_rx_common()
336 memcpy(&un->last_physt, physt, sizeof(sc->last_physt)); in rtwn_rx_common()
350 if (sc->sc_ena_tsf64) { in rtwn_rx_common()
355 rxs.c_rx_tsf = le32toh(stat->tsf_low); in rtwn_rx_common()
362 /* XXX TODO: we really need a rate-to-string method */ in rtwn_rx_common()
363 RTWN_DPRINTF(sc, RTWN_DEBUG_RSSI, "%s: rssi %d, rate %d\n", in rtwn_rx_common()
372 rxs.c_rssi = rssi - rxs.c_nf; in rtwn_rx_common()
376 struct rtwn_rx_radiotap_header *tap = &sc->sc_rxtap; in rtwn_rx_common()
378 tap->wr_flags = rtwn_rx_radiotap_flags(sc, desc); in rtwn_rx_common()
379 tap->wr_tsft = htole64(rxs.c_rx_tsf); in rtwn_rx_common()
380 tap->wr_rate = rxs.c_rate; in rtwn_rx_common()
381 tap->wr_dbm_antsignal = rssi; in rtwn_rx_common()
382 tap->wr_dbm_antnoise = rxs.c_nf; in rtwn_rx_common()
389 if (sc->rcr & R92C_RCR_APPFCS) in rtwn_rx_common()
390 m_adj(m, -IEEE80211_CRC_LEN); in rtwn_rx_common()
400 struct ieee80211vap *vap = ni->ni_vap; in rtwn_adhoc_recv_mgmt()
401 struct rtwn_softc *sc = vap->iv_ic->ic_softc; in rtwn_adhoc_recv_mgmt()
405 uvp->recv_mgmt(ni, m, subtype, rxs, rssi, nf); in rtwn_adhoc_recv_mgmt()
407 if (vap->iv_state == IEEE80211_S_RUN && in rtwn_adhoc_recv_mgmt()
410 ni_tstamp = le64toh(ni->ni_tstamp.tsf); in rtwn_adhoc_recv_mgmt()
412 rtwn_get_tsf(sc, &curr_tstamp, uvp->id); in rtwn_adhoc_recv_mgmt()
430 pos ^= (mask >> (i * 8 + j - 1)); in rtwn_get_multi_pos()
452 struct ieee80211com *ic = &sc->sc_ic; in rtwn_set_multi()
458 if (ic->ic_allmulti == 0) { in rtwn_set_multi()
465 TAILQ_FOREACH(vap, &ic->ic_vaps, iv_next) in rtwn_set_multi()
466 if_foreach_llmaddr(vap->iv_ifp, rtwm_hash_maddr, mfilt); in rtwn_set_multi()
483 if (sc->bcn_vaps == 0) { /* STA and/or MONITOR mode vaps */ in rtwn_rxfilter_update_mgt()
489 if (sc->ap_vaps == sc->nvaps - sc->mon_vaps) { /* AP vaps only */ in rtwn_rxfilter_update_mgt()
526 sc->rcr |= R92C_RCR_AM | R92C_RCR_AB | R92C_RCR_APM | in rtwn_rxfilter_init()
537 sc->rcr |= R92C_RCR_APPFCS; in rtwn_rxfilter_init()
546 if (!(sc->sc_flags & RTWN_RCR_LOCKED)) in rtwn_rxfilter_set()
547 rtwn_write_4(sc, R92C_RCR, sc->rcr); in rtwn_rxfilter_set()
555 sc->rcr &= ~R92C_RCR_CBSSID_BCN; in rtwn_set_rx_bssid_all()
557 sc->rcr |= R92C_RCR_CBSSID_BCN; in rtwn_set_rx_bssid_all()
564 struct ieee80211com *ic = &sc->sc_ic; in rtwn_set_promisc()
572 if (sc->bcn_vaps == 0) in rtwn_set_promisc()
574 if (sc->ap_vaps == 0) in rtwn_set_promisc()
577 if (ic->ic_promisc == 0 && sc->mon_vaps == 0) { in rtwn_set_promisc()
578 if (sc->bcn_vaps != 0) in rtwn_set_promisc()
580 if (sc->ap_vaps != 0) /* for Null data frames */ in rtwn_set_promisc()
583 sc->rcr &= ~mask_all; in rtwn_set_promisc()
584 sc->rcr |= mask_min; in rtwn_set_promisc()
586 sc->rcr &= ~mask_min; in rtwn_set_promisc()
587 sc->rcr |= mask_all; in rtwn_set_promisc()
594 sc->rcr |= R92C_RCR_APPFCS; in rtwn_set_promisc()