summaryrefslogtreecommitdiffstats
path: root/package/madwifi/patches/116-adhoc_beacon_PR_1033.patch
diff options
context:
space:
mode:
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2007-12-02 22:28:14 +0000
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2007-12-02 22:28:14 +0000
commit6b3c1f56d16aa225b7ee2d96f24e74f1b9369954 (patch)
tree251d0439db575209e6a42e9d8546b0724c571b5c /package/madwifi/patches/116-adhoc_beacon_PR_1033.patch
parentb34619e8be3104dc35bd724eb332dc14c14cabe1 (diff)
update madwifi to the madwifi-dfs branch - should fix a few ad-hoc mode issues, needs more testing
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@9648 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/madwifi/patches/116-adhoc_beacon_PR_1033.patch')
-rw-r--r--package/madwifi/patches/116-adhoc_beacon_PR_1033.patch197
1 files changed, 0 insertions, 197 deletions
diff --git a/package/madwifi/patches/116-adhoc_beacon_PR_1033.patch b/package/madwifi/patches/116-adhoc_beacon_PR_1033.patch
deleted file mode 100644
index 8643f6a60..000000000
--- a/package/madwifi/patches/116-adhoc_beacon_PR_1033.patch
+++ /dev/null
@@ -1,197 +0,0 @@
-Index: madwifi-ng-r2834-20071106/ath/if_ath.c
-===================================================================
---- madwifi-ng-r2834-20071106.orig/ath/if_ath.c 2007-11-07 14:02:01.785472625 +0100
-+++ madwifi-ng-r2834-20071106/ath/if_ath.c 2007-11-07 14:02:02.637521177 +0100
-@@ -4559,16 +4559,31 @@
- struct ieee80211com *ic = &sc->sc_ic;
- struct ath_hal *ah = sc->sc_ah;
- struct ieee80211_node *ni;
-- u_int32_t nexttbtt, intval;
-+ u_int32_t nexttbtt = 0;
-+ u_int32_t intval;
-+ u_int64_t tsf, hw_tsf;
-+ u_int32_t tsftu, hw_tsftu;
-+ int should_reset_tsf = 0;
-
- if (vap == NULL)
- vap = TAILQ_FIRST(&ic->ic_vaps); /* XXX */
-
- ni = vap->iv_bss;
-
-- /* extract tstamp from last beacon and convert to TU */
-- nexttbtt = TSF_TO_TU(LE_READ_4(ni->ni_tstamp.data + 4),
-- LE_READ_4(ni->ni_tstamp.data));
-+ hw_tsf = ath_hal_gettsf64(ah);
-+ tsf = le64_to_cpu(ni->ni_tstamp.tsf);
-+ hw_tsftu = hw_tsf >> 10;
-+ tsftu = tsf >> 10;
-+
-+ /* we should reset hw TSF only once, so we increment
-+ ni_tstamp.tsf to avoid resetting the hw TSF multiple
-+ times */
-+
-+ if (tsf == 0) {
-+ should_reset_tsf = 1;
-+ ni->ni_tstamp.tsf = cpu_to_le64(1);
-+ }
-+
- /* XXX conditionalize multi-bss support? */
- if (ic->ic_opmode == IEEE80211_M_HOSTAP) {
- /*
-@@ -4582,20 +4597,61 @@
- if (sc->sc_stagbeacons)
- intval /= ATH_BCBUF; /* for staggered beacons */
- if ((sc->sc_nostabeacons) &&
-- (vap->iv_opmode == IEEE80211_M_HOSTAP))
-- nexttbtt = 0;
-+ (vap->iv_opmode == IEEE80211_M_HOSTAP))
-+ should_reset_tsf = 1;
- } else
- intval = ni->ni_intval & HAL_BEACON_PERIOD;
-- if (nexttbtt == 0) /* e.g. for ap mode */
-+
-+#define FUDGE 2
-+ sc->sc_syncbeacon = 0;
-+ if (should_reset_tsf) {
-+
-+ /* We just created the interface and TSF will be reset to
-+ zero, so next beacon will be sent at the next intval
-+ time */
-+
- 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);
-+ } else if (intval) { /* NB: can be 0 for monitor mode */
-+ if (tsf == 1) {
-+
-+ /* We do not receive any beacons or probe response. Since
-+ a beacon should be sent every 'intval' ms, we compute
-+ the next beacon timestamp using the hardware TSF. We
-+ ensure that it is at least FUDGE ms ahead of the
-+ current TSF. Otherwise, we use the next beacon
-+ timestamp again */
-+
-+ nexttbtt = roundup(hw_tsftu +1, intval);
-+ while (nexttbtt <= hw_tsftu + FUDGE) {
-+ nexttbtt += intval;
-+ }
-+ } else {
-+ if (tsf > hw_tsf) {
-+
-+ /* We do receive a beacon from someone else in the past,
-+ but the hw TSF has not been updated (otherwise we
-+ would have tsf >= hw_tsf). Since we cannot use the
-+ hardware TSF, we will do nothing and wait for the
-+ next beacon. In order to do so, we set sc->syncbeacon
-+ again */
-+
-+ sc->sc_syncbeacon = 1;
-+ goto ath_beacon_config_debug;
-+ } else {
-+ /* We do receive a beacon in the past, normal case. We
-+ make sure that the timestamp is at least FUDGE ms
-+ ahead of the hardware TSF */
-+
-+ nexttbtt = tsftu + intval;
-+ while (nexttbtt <= hw_tsftu + FUDGE) {
-+ nexttbtt += intval;
-+ }
-+ }
-+ }
-+ }
-+
- if (ic->ic_opmode == IEEE80211_M_STA && !(sc->sc_nostabeacons)) {
- HAL_BEACON_STATE bs;
-- u_int64_t tsf;
-- u_int32_t tsftu;
- int dtimperiod, dtimcount;
- int cfpperiod, cfpcount;
-
-@@ -4611,13 +4667,13 @@
- dtimcount = 0; /* XXX? */
- cfpperiod = 1; /* NB: no PCF support yet */
- cfpcount = 0;
--#define FUDGE 2
- /*
- * Pull nexttbtt forward to reflect the current
- * TSF and calculate dtim+cfp state for the result.
- */
-- tsf = ath_hal_gettsf64(ah);
-- tsftu = TSF_TO_TU(tsf>>32, tsf) + FUDGE;
-+ nexttbtt = tsftu;
-+ if (nexttbtt == 0) /* e.g. for ap mode */
-+ nexttbtt = intval;
- do {
- nexttbtt += intval;
- if (--dtimcount < 0) {
-@@ -4625,7 +4681,7 @@
- if (--cfpcount < 0)
- cfpcount = cfpperiod - 1;
- }
-- } while (nexttbtt < tsftu);
-+ } while (nexttbtt < hw_tsftu + FUDGE);
- #undef FUDGE
- memset(&bs, 0, sizeof(bs));
- bs.bs_intval = intval;
-@@ -4677,7 +4733,7 @@
- DPRINTF(sc, ATH_DEBUG_BEACON,
- "%s: tsf %llu tsf:tu %u intval %u nexttbtt %u dtim %u nextdtim %u bmiss %u sleep %u cfp:period %u maxdur %u next %u timoffset %u\n",
- __func__,
-- (unsigned long long) tsf, tsftu,
-+ (unsigned long long) hw_tsf, hw_tsftu,
- bs.bs_intval,
- bs.bs_nexttbtt,
- bs.bs_dtimperiod,
-@@ -4699,7 +4755,7 @@
- ath_hal_intrset(ah, sc->sc_imask);
- } else {
- ath_hal_intrset(ah, 0);
-- if (nexttbtt == intval)
-+ if (should_reset_tsf)
- intval |= HAL_BEACON_RESET_TSF;
- if (ic->ic_opmode == IEEE80211_M_IBSS) {
- /*
-@@ -4736,8 +4792,40 @@
- if (ic->ic_opmode == IEEE80211_M_IBSS && sc->sc_hasveol)
- ath_beacon_start_adhoc(sc, vap);
- }
-- sc->sc_syncbeacon = 0;
- #undef TSF_TO_TU
-+
-+ ath_beacon_config_debug:
-+
-+ /* we print all debug messages here, in order to preserve the
-+ time critical aspect of this function */
-+
-+ DPRINTF(sc, ATH_DEBUG_BEACON,
-+ "%s: ni=%p tsf=%llu hw_tsf=%llu tsftu=%u hw_tsftu=%u\n",
-+ __func__, ni, tsf, hw_tsf, tsftu, hw_tsftu);
-+
-+ if (should_reset_tsf) {
-+ /* we just created the interface */
-+ DPRINTF(sc, ATH_DEBUG_BEACON, "%s: first beacon\n",__func__);
-+ } else {
-+ if (tsf == 1) {
-+ /* we do not receive any beacons or probe response */
-+ DPRINTF(sc, ATH_DEBUG_BEACON,
-+ "%s: no beacon received...\n",__func__);
-+ } else {
-+ if (tsf > hw_tsf) {
-+ /* we do receive a beacon and the hw TSF has not been updated */
-+ DPRINTF(sc, ATH_DEBUG_BEACON,
-+ "%s: beacon received, but TSF is incorrect\n",__func__);
-+ } else {
-+ /* we do receive a beacon in the past, normal case */
-+ DPRINTF(sc, ATH_DEBUG_BEACON,
-+ "%s: beacon received, TSF is correct\n",__func__);
-+ }
-+ }
-+ }
-+
-+ DPRINTF(sc, ATH_DEBUG_BEACON, "%s: nexttbtt=%u intval=%u\n",
-+ __func__,nexttbtt, intval & HAL_BEACON_PERIOD);
- }
-
- static int