diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c | 37 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mac80211.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/rx.c | 1 |
3 files changed, 38 insertions, 3 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c b/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c index 0854dc338881..c33bec83b807 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c +++ b/drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c | |||
@@ -585,10 +585,43 @@ static void iwl_mvm_mac_ctxt_cmd_fill_sta(struct iwl_mvm *mvm, | |||
585 | struct iwl_mac_data_sta *ctxt_sta) | 585 | struct iwl_mac_data_sta *ctxt_sta) |
586 | { | 586 | { |
587 | /* We need the dtim_period to set the MAC as associated */ | 587 | /* We need the dtim_period to set the MAC as associated */ |
588 | if (vif->bss_conf.assoc && vif->bss_conf.dtim_period) | 588 | if (vif->bss_conf.assoc && vif->bss_conf.dtim_period) { |
589 | u32 dtim_offs; | ||
590 | |||
591 | /* | ||
592 | * The DTIM count counts down, so when it is N that means N | ||
593 | * more beacon intervals happen until the DTIM TBTT. Therefore | ||
594 | * add this to the current time. If that ends up being in the | ||
595 | * future, the firmware will handle it. | ||
596 | * | ||
597 | * Also note that the system_timestamp (which we get here as | ||
598 | * "sync_device_ts") and TSF timestamp aren't at exactly the | ||
599 | * same offset in the frame -- the TSF is at the first symbol | ||
600 | * of the TSF, the system timestamp is at signal acquisition | ||
601 | * time. This means there's an offset between them of at most | ||
602 | * a few hundred microseconds (24 * 8 bits + PLCP time gives | ||
603 | * 384us in the longest case), this is currently not relevant | ||
604 | * as the firmware wakes up around 2ms before the TBTT. | ||
605 | */ | ||
606 | dtim_offs = vif->bss_conf.sync_dtim_count * | ||
607 | vif->bss_conf.beacon_int; | ||
608 | /* convert TU to usecs */ | ||
609 | dtim_offs *= 1024; | ||
610 | |||
611 | ctxt_sta->dtim_tsf = | ||
612 | cpu_to_le64(vif->bss_conf.sync_tsf + dtim_offs); | ||
613 | ctxt_sta->dtim_time = | ||
614 | cpu_to_le32(vif->bss_conf.sync_device_ts + dtim_offs); | ||
615 | |||
616 | IWL_DEBUG_INFO(mvm, "DTIM TBTT is 0x%llx/0x%x, offset %d\n", | ||
617 | le64_to_cpu(ctxt_sta->dtim_tsf), | ||
618 | le32_to_cpu(ctxt_sta->dtim_time), | ||
619 | dtim_offs); | ||
620 | |||
589 | ctxt_sta->is_assoc = cpu_to_le32(1); | 621 | ctxt_sta->is_assoc = cpu_to_le32(1); |
590 | else | 622 | } else { |
591 | ctxt_sta->is_assoc = cpu_to_le32(0); | 623 | ctxt_sta->is_assoc = cpu_to_le32(0); |
624 | } | ||
592 | 625 | ||
593 | ctxt_sta->bi = cpu_to_le32(vif->bss_conf.beacon_int); | 626 | ctxt_sta->bi = cpu_to_le32(vif->bss_conf.beacon_int); |
594 | ctxt_sta->bi_reciprocal = | 627 | ctxt_sta->bi_reciprocal = |
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c index 6fb084f2c257..76794940e1f0 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c | |||
@@ -115,7 +115,8 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm) | |||
115 | IEEE80211_HW_WANT_MONITOR_VIF | | 115 | IEEE80211_HW_WANT_MONITOR_VIF | |
116 | IEEE80211_HW_SUPPORTS_PS | | 116 | IEEE80211_HW_SUPPORTS_PS | |
117 | IEEE80211_HW_SUPPORTS_DYNAMIC_PS | | 117 | IEEE80211_HW_SUPPORTS_DYNAMIC_PS | |
118 | IEEE80211_HW_AMPDU_AGGREGATION; | 118 | IEEE80211_HW_AMPDU_AGGREGATION | |
119 | IEEE80211_HW_TIMING_BEACON_ONLY; | ||
119 | 120 | ||
120 | hw->queues = IWL_FIRST_AMPDU_QUEUE; | 121 | hw->queues = IWL_FIRST_AMPDU_QUEUE; |
121 | hw->offchannel_tx_hw_queue = IWL_OFFCHANNEL_QUEUE; | 122 | hw->offchannel_tx_hw_queue = IWL_OFFCHANNEL_QUEUE; |
diff --git a/drivers/net/wireless/iwlwifi/mvm/rx.c b/drivers/net/wireless/iwlwifi/mvm/rx.c index 3f3ce91ad5c2..3f40ab05bbd8 100644 --- a/drivers/net/wireless/iwlwifi/mvm/rx.c +++ b/drivers/net/wireless/iwlwifi/mvm/rx.c | |||
@@ -267,6 +267,7 @@ int iwl_mvm_rx_rx_mpdu(struct iwl_mvm *mvm, struct iwl_rx_cmd_buffer *rxb, | |||
267 | 267 | ||
268 | /* rx_status carries information about the packet to mac80211 */ | 268 | /* rx_status carries information about the packet to mac80211 */ |
269 | rx_status.mactime = le64_to_cpu(phy_info->timestamp); | 269 | rx_status.mactime = le64_to_cpu(phy_info->timestamp); |
270 | rx_status.device_timestamp = le32_to_cpu(phy_info->system_timestamp); | ||
270 | rx_status.band = | 271 | rx_status.band = |
271 | (phy_info->phy_flags & cpu_to_le16(RX_RES_PHY_FLAGS_BAND_24)) ? | 272 | (phy_info->phy_flags & cpu_to_le16(RX_RES_PHY_FLAGS_BAND_24)) ? |
272 | IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ; | 273 | IEEE80211_BAND_2GHZ : IEEE80211_BAND_5GHZ; |