Lines Matching +full:data +full:- +full:rates

3 /*-
6 * Copyright (c) 2015-2016 Andriy Voskoboinyk <avos@FreeBSD.org>
16 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
65 * be applied; the HT rateset will be applied to 11n rates.
72 uint32_t rates = 0, htrates = 0; in rtwn_get_rates() local
76 /* Get rates mask. */ in rtwn_get_rates()
77 rates = 0; in rtwn_get_rates()
81 for (i = 0; i < rs->rs_nrates; i++) { in rtwn_get_rates()
83 ridx = rate2ridx(IEEE80211_RV(rs->rs_rates[i])); in rtwn_get_rates()
86 if (((rs->rs_rates[i] & IEEE80211_RATE_BASIC) != 0) || in rtwn_get_rates()
88 rates |= 1 << ridx; in rtwn_get_rates()
94 /* If we're doing 11n, enable 11n rates */ 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()
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()
117 "%s: rates 0x%08X htrates 0x%08X, maxrate %d\n", in rtwn_get_rates()
118 __func__, rates, htrates, maxrate); in rtwn_get_rates()
121 *rates_p = rates; in rtwn_get_rates()
129 rtwn_set_basicrates(struct rtwn_softc *sc, uint32_t rates) in rtwn_set_basicrates() argument
132 RTWN_DPRINTF(sc, RTWN_DEBUG_RA, "%s: rates 0x%08X\n", __func__, rates); in rtwn_set_basicrates()
134 rtwn_setbits_4(sc, R92C_RRSR, R92C_RRSR_RATE_BITMAP_M, rates); in rtwn_set_basicrates()
141 rtwn_set_rts_rate(struct rtwn_softc *sc, uint32_t rates) in rtwn_set_rts_rate() argument
147 * as the highest available rate - that may end up in rtwn_set_rts_rate()
154 rates &= (1 << RTWN_RIDX_CCK1) | (1 << RTWN_RIDX_CCK55) | in rtwn_set_rts_rate()
158 if (rates == 0) { in rtwn_set_rts_rate()
159 device_printf(sc->sc_dev, in rtwn_set_rts_rate()
163 ridx = fls(rates) - 1; in rtwn_set_rts_rate()
167 __func__, rates, ridx); in rtwn_set_rts_rate()
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()
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()
522 /* Reject all data frames. */ in rtwn_rxfilter_init()
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()