mac80211: Allow tsf increments via debugfs
authorJavier Cardona <javier@cozybit.com>
Sat, 31 Mar 2012 18:31:31 +0000 (11:31 -0700)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 10 Apr 2012 19:20:30 +0000 (15:20 -0400)
Reading and writing back the tsf value via tsf is too slow if one wants
to make small increments to this timer.  With this change you can use
the syntax "+=<some value>" or "-=<some value>" to add or substract a
value from the tsf counter.

Signed-off-by: Javier Cardona <javier@cozybit.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
net/mac80211/debugfs_netdev.c

index 6ed0455..b0fc205 100644 (file)
@@ -424,6 +424,7 @@ static ssize_t ieee80211_if_parse_tsf(
        struct ieee80211_local *local = sdata->local;
        unsigned long long tsf;
        int ret;
+       int tsf_is_delta = 0;
 
        if (strncmp(buf, "reset", 5) == 0) {
                if (local->ops->reset_tsf) {
@@ -431,9 +432,20 @@ static ssize_t ieee80211_if_parse_tsf(
                        wiphy_info(local->hw.wiphy, "debugfs reset TSF\n");
                }
        } else {
+               if (buflen > 10 && buf[1] == '=') {
+                       if (buf[0] == '+')
+                               tsf_is_delta = 1;
+                       else if (buf[0] == '-')
+                               tsf_is_delta = -1;
+                       else
+                               return -EINVAL;
+                       buf += 2;
+               }
                ret = kstrtoull(buf, 10, &tsf);
                if (ret < 0)
                        return -EINVAL;
+               if (tsf_is_delta)
+                       tsf = drv_get_tsf(local, sdata) + tsf_is_delta * tsf;
                if (local->ops->set_tsf) {
                        drv_set_tsf(local, sdata, tsf);
                        wiphy_info(local->hw.wiphy,