mac80211_hwsim: fix tsf adjustment
authorThomas Pedersen <thomas@cozybit.com>
Wed, 2 Jan 2013 22:55:16 +0000 (14:55 -0800)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 4 Jan 2013 12:52:50 +0000 (13:52 +0100)
Make hwsim TSF offset adjustments cumulative and relative
to the fake PHY TSF. Now adding 1000us, then adding -1000us
doesn't result in a tsf_offset of -1000. Also the beacon
timestamp can now correctly be expressed as (tsf +
data->tsf_offset), which will be done in a later patch.

Signed-off-by: Thomas Pedersen <thomas@cozybit.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/mac80211_hwsim.c

index d248a4cc665645c1aa8c59e0296d5499f596450a..807d713414f8e16edba3cd5fa7049a7f0528e28d 100644 (file)
@@ -361,7 +361,7 @@ struct mac80211_hwsim_data {
        int power_level;
 
        /* difference between this hw's clock and the real clock, in usecs */
-       u64 tsf_offset;
+       s64 tsf_offset;
 };
 
 
@@ -427,9 +427,10 @@ static void mac80211_hwsim_set_tsf(struct ieee80211_hw *hw,
                struct ieee80211_vif *vif, u64 tsf)
 {
        struct mac80211_hwsim_data *data = hw->priv;
-       struct timeval tv = ktime_to_timeval(ktime_get_real());
-       u64 now = tv.tv_sec * USEC_PER_SEC + tv.tv_usec;
-       data->tsf_offset = tsf - now;
+       u64 now = mac80211_hwsim_get_tsf(hw, vif);
+       s64 delta = tsf - now;
+
+       data->tsf_offset += delta;
 }
 
 static void mac80211_hwsim_monitor_rx(struct ieee80211_hw *hw,