Thread: [Madwifi-cvs] madwifi/ath if_ath.c,1.36.2.38,1.36.2.39
Status: Beta
Brought to you by:
otaku
From: Bruno R. <br...@us...> - 2005-03-31 13:10:12
|
Update of /cvsroot/madwifi/madwifi/ath In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32111/ath Modified Files: Tag: BSD if_ath.c Log Message: changes from freebsd: - extend the timestamp from the rx descriptor to calculate the tsf to use when checking for an ibss merge (R1.80) - close unlikely race (R1.85) Index: if_ath.c =================================================================== RCS file: /cvsroot/madwifi/madwifi/ath/if_ath.c,v retrieving revision 1.36.2.38 retrieving revision 1.36.2.39 diff -C2 -d -r1.36.2.38 -r1.36.2.39 *** if_ath.c 31 Mar 2005 08:50:05 -0000 1.36.2.38 --- if_ath.c 31 Mar 2005 13:09:56 -0000 1.36.2.39 *************** *** 2222,2226 **** nexttbtt = intval; else if (intval) /* NB: can be 0 for monitor mode */ ! nexttbtt = roundup(nexttbtt, intval); DPRINTF(sc, ATH_DEBUG_BEACON, "%s: nexttbtt %u intval %u (%u)\n", __func__, nexttbtt, intval, ni->ni_intval); --- 2222,2226 ---- nexttbtt = intval; else if (intval) /* NB: can be 0 for monitor mode */ ! nexttbtt = roundup(nexttbtt, intval); DPRINTF(sc, ATH_DEBUG_BEACON, "%s: nexttbtt %u intval %u (%u)\n", __func__, nexttbtt, intval, ni->ni_intval); *************** *** 2743,2746 **** --- 2743,2750 ---- } + /* + * Extend 15-bit time stamp from rx descriptor to + * a full 64-bit TSF using the current h/w TSF. + */ static inline uint64_t ath_tsf_extend(struct ath_hal *ah, uint32_t rstamp) *************** *** 2748,2762 **** uint64_t tsf; - /* rstamp is assigned from ath_rx_status.rs_tstamp which is 16bit */ - KASSERT((rstamp & 0xffff0000) == 0, - ("rx timestamp > 16 bits wide, %u", rstamp)); - tsf = ath_hal_gettsf64(ah); /* Compensate for rollover. */ ! if ((tsf & 0xffff) <= rstamp) ! tsf -= 0x10000; ! ! return (tsf & ~(uint64_t)0xffff) | rstamp; } --- 2752,2762 ---- uint64_t tsf; tsf = ath_hal_gettsf64(ah); /* Compensate for rollover. */ ! if ((tsf & 0x7fff) < rstamp) ! tsf -= 0x8000; ! ! return ((tsf & ~(uint64_t)0x7fff) | rstamp); } *************** *** 2794,2802 **** * is determined by the tsf. Note that hardware * reconfiguration happens through callback to ! * ath_newstate as the state machine will be go ! * from RUN -> RUN when this happens. */ ! if (le64toh(ni->ni_tstamp.tsf) >= tsf) ieee80211_ibss_merge(ic, ni); } break; --- 2794,2807 ---- * is determined by the tsf. Note that hardware * reconfiguration happens through callback to ! * ath_newstate as the state machine will go from ! * RUN -> RUN when this happens. */ ! if (le64toh(ni->ni_tstamp.tsf) >= tsf) { ! DPRINTF(sc, ATH_DEBUG_STATE, ! "ibss merge, rstamp %u tsf %llx " ! "tstamp %llx\n", rstamp, tsf, ! ni->ni_tstamp.tsf); ieee80211_ibss_merge(ic, ni); + } } break; *************** *** 3639,3643 **** } txq->axq_link = &bf->bf_desc->ds_link; - ATH_TXQ_UNLOCK_BH(txq); /* --- 3644,3647 ---- *************** *** 3647,3651 **** if (txq != sc->sc_cabq) ath_hal_txstart(ah, txq->axq_qnum); ! dev->trans_start = jiffies; return 0; --- 3651,3656 ---- if (txq != sc->sc_cabq) ath_hal_txstart(ah, txq->axq_qnum); ! ATH_TXQ_UNLOCK_BH(txq); ! dev->trans_start = jiffies; return 0; |