Skip to content

Commit

Permalink
iwlagn: update beacon smarter
Browse files Browse the repository at this point in the history
Updating the beacon every time right after one was
transmitted is pointless, most of the time we might
not even have to update it. We will update it every
time it changes, which includes from set_tim(), a
callback iwlwifi didn't implement so far.

This also reduces latency for clients, previously
we would update the beacon right after the previous
one was transmitted, and then a TIM change would
only take effect after that again -- updating the
beacon right after the TIM changes makes the TIM
change go out to the air faster.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Johannes Berg authored and John W. Linville committed Oct 14, 2011
1 parent 7e4005c commit 3bde2b6
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 2 deletions.
11 changes: 11 additions & 0 deletions drivers/net/wireless/iwlwifi/iwl-agn.c
Original file line number Diff line number Diff line change
Expand Up @@ -3074,6 +3074,16 @@ static void iwl_mac_rssi_callback(struct ieee80211_hw *hw,
mutex_unlock(&priv->shrd->mutex);
}

static int iwl_mac_set_tim(struct ieee80211_hw *hw,
struct ieee80211_sta *sta, bool set)
{
struct iwl_priv *priv = hw->priv;

queue_work(priv->shrd->workqueue, &priv->beacon_update);

return 0;
}

struct ieee80211_ops iwlagn_hw_ops = {
.tx = iwlagn_mac_tx,
.start = iwlagn_mac_start,
Expand Down Expand Up @@ -3107,6 +3117,7 @@ struct ieee80211_ops iwlagn_hw_ops = {
CFG80211_TESTMODE_DUMP(iwl_testmode_dump)
.tx_sync = iwl_mac_tx_sync,
.finish_tx_sync = iwl_mac_finish_tx_sync,
.set_tim = iwl_mac_set_tim,
};

static u32 iwl_hw_detect(struct iwl_priv *priv)
Expand Down
2 changes: 0 additions & 2 deletions drivers/net/wireless/iwlwifi/iwl-rx.c
Original file line number Diff line number Diff line change
Expand Up @@ -243,8 +243,6 @@ static int iwl_rx_beacon_notif(struct iwl_priv *priv,

priv->ibss_manager = le32_to_cpu(beacon->ibss_mgr_status);

if (!test_bit(STATUS_EXIT_PENDING, &priv->shrd->status))
queue_work(priv->shrd->workqueue, &priv->beacon_update);
return 0;
}

Expand Down

0 comments on commit 3bde2b6

Please sign in to comment.