|
@@ -685,11 +685,16 @@ static void mac80211_hwsim_set_tsf(struct ieee80211_hw *hw,
|
|
|
struct mac80211_hwsim_data *data = hw->priv;
|
|
|
u64 now = mac80211_hwsim_get_tsf(hw, vif);
|
|
|
u32 bcn_int = data->beacon_int;
|
|
|
- s64 delta = tsf - now;
|
|
|
+ u64 delta = abs64(tsf - now);
|
|
|
|
|
|
- data->tsf_offset += delta;
|
|
|
/* adjust after beaconing with new timestamp at old TBTT */
|
|
|
- data->bcn_delta = do_div(delta, bcn_int);
|
|
|
+ if (tsf > now) {
|
|
|
+ data->tsf_offset += delta;
|
|
|
+ data->bcn_delta = do_div(delta, bcn_int);
|
|
|
+ } else {
|
|
|
+ data->tsf_offset -= delta;
|
|
|
+ data->bcn_delta = -do_div(delta, bcn_int);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
static void mac80211_hwsim_monitor_rx(struct ieee80211_hw *hw,
|