staging: vt6656: implement TSF counter
authorMalcolm Priestley <[email protected]>
Sun, 27 Sep 2015 08:17:40 +0000 (09:17 +0100)
committerGreg Kroah-Hartman <[email protected]>
Tue, 29 Sep 2015 02:19:53 +0000 (04:19 +0200)
The TSF counter is presently unused on driver in infrastructure mode.

It is needed to implement power saving functions and wireless stats that
are passed in interrupt handling.

Ensuring counter is synced with access point beacon.

Signed-off-by: Malcolm Priestley <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
drivers/staging/vt6656/main_usb.c

index af572d71813531fa89453f5692ef834cb0bd856b..7246c7607361048d93cf9e80d66eefc098a481c9 100644 (file)
@@ -757,6 +757,26 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw,
                        vnt_mac_reg_bits_off(priv, MAC_REG_TCR, TCR_AUTOBCNTX);
                }
        }
+
+       if (changed & (BSS_CHANGED_ASSOC | BSS_CHANGED_BEACON_INFO) &&
+           priv->op_mode != NL80211_IFTYPE_AP) {
+               if (conf->assoc && conf->beacon_rate) {
+                       vnt_mac_reg_bits_on(priv, MAC_REG_TFTCTL,
+                                           TFTCTL_TSFCNTREN);
+
+                       vnt_adjust_tsf(priv, conf->beacon_rate->hw_value,
+                                      conf->sync_tsf, priv->current_tsf);
+
+                       vnt_mac_set_beacon_interval(priv, conf->beacon_int);
+
+                       vnt_reset_next_tbtt(priv, conf->beacon_int);
+               } else {
+                       vnt_clear_current_tsf(priv);
+
+                       vnt_mac_reg_bits_off(priv, MAC_REG_TFTCTL,
+                                            TFTCTL_TSFCNTREN);
+               }
+       }
 }
 
 static u64 vnt_prepare_multicast(struct ieee80211_hw *hw,