From: Malcolm Priestley Date: Sun, 27 Sep 2015 08:17:40 +0000 (+0100) Subject: staging: vt6656: implement TSF counter X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=c15158797df6c36780bd07252eb079ff4c9d1706;p=openwrt%2Fstaging%2Fblogic.git staging: vt6656: implement TSF counter 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 Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/vt6656/main_usb.c b/drivers/staging/vt6656/main_usb.c index af572d718135..7246c7607361 100644 --- a/drivers/staging/vt6656/main_usb.c +++ b/drivers/staging/vt6656/main_usb.c @@ -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,