OSDN Git Service

ath9k: Fix nexttbtt calculation
authorSujith <Sujith.Manoharan@atheros.com>
Wed, 17 Sep 2008 04:45:36 +0000 (10:15 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 24 Sep 2008 20:18:02 +0000 (16:18 -0400)
nexttbtt has to be obtained from the timestamp of the beacon
obtained from mac80211. Fix this.
And <asm/unaligned.h> is not needed anymore.

Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath9k/beacon.c
drivers/net/wireless/ath9k/core.h

index f8d952c..eedb465 100644 (file)
@@ -16,7 +16,6 @@
 
  /* Implementation of beacon processing. */
 
-#include <asm/unaligned.h>
 #include "core.h"
 
 /*
@@ -305,6 +304,7 @@ int ath_beacon_alloc(struct ath_softc *sc, int if_id)
        struct ieee80211_hdr *hdr;
        struct ath_buf *bf;
        struct sk_buff *skb;
+       __le64 tstamp;
 
        avp = sc->sc_vaps[if_id];
        ASSERT(avp);
@@ -370,6 +370,9 @@ int ath_beacon_alloc(struct ath_softc *sc, int if_id)
                return -ENOMEM;
        }
 
+       tstamp = ((struct ieee80211_mgmt *)skb->data)->u.beacon.timestamp;
+       sc->bc_tstamp = le64_to_cpu(tstamp);
+
        /*
         * Calculate a TSF adjustment factor required for
         * staggered beacons.  Note that we assume the format
@@ -669,8 +672,8 @@ void ath_beacon_config(struct ath_softc *sc, int if_id)
        conf.bmiss_timeout = ATH_DEFAULT_BMISS_LIMIT * conf.beacon_interval;
 
        /* extract tstamp from last beacon and convert to TU */
-       nexttbtt = TSF_TO_TU(get_unaligned_le32(conf.u.last_tstamp + 4),
-                            get_unaligned_le32(conf.u.last_tstamp));
+       nexttbtt = TSF_TO_TU(sc->bc_tstamp >> 32, sc->bc_tstamp);
+
        /* XXX conditionalize multi-bss support? */
        if (sc->sc_ah->ah_opmode == ATH9K_M_HOSTAP) {
                /*
index b66de29..6ff3bef 100644 (file)
@@ -1001,6 +1001,7 @@ struct ath_softc {
        u32 sc_bhalq;
        u32 sc_bmisscount;
        u32 ast_be_xmit;        /* beacons transmitted */
+       u64 bc_tstamp;
 
        /* Rate */
        struct ieee80211_rate rates[IEEE80211_NUM_BANDS][ATH_RATE_MAX];