diff options
Diffstat (limited to 'net/mac80211/sta_info.c')
-rw-r--r-- | net/mac80211/sta_info.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index 8a9068ac0673..7c5c6da01bea 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c | |||
@@ -612,7 +612,8 @@ static bool sta_info_cleanup_expire_buffered(struct ieee80211_local *local, | |||
612 | #endif | 612 | #endif |
613 | dev_kfree_skb(skb); | 613 | dev_kfree_skb(skb); |
614 | 614 | ||
615 | if (skb_queue_empty(&sta->ps_tx_buf)) | 615 | if (skb_queue_empty(&sta->ps_tx_buf) && |
616 | !test_sta_flags(sta, WLAN_STA_PS_DRIVER_BUF)) | ||
616 | sta_info_clear_tim_bit(sta); | 617 | sta_info_clear_tim_bit(sta); |
617 | } | 618 | } |
618 | 619 | ||
@@ -896,6 +897,7 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta) | |||
896 | struct ieee80211_local *local = sdata->local; | 897 | struct ieee80211_local *local = sdata->local; |
897 | int sent, buffered; | 898 | int sent, buffered; |
898 | 899 | ||
900 | clear_sta_flags(sta, WLAN_STA_PS_DRIVER_BUF); | ||
899 | if (!(local->hw.flags & IEEE80211_HW_AP_LINK_PS)) | 901 | if (!(local->hw.flags & IEEE80211_HW_AP_LINK_PS)) |
900 | drv_sta_notify(local, sdata, STA_NOTIFY_AWAKE, &sta->sta); | 902 | drv_sta_notify(local, sdata, STA_NOTIFY_AWAKE, &sta->sta); |
901 | 903 | ||
@@ -988,3 +990,12 @@ void ieee80211_sta_block_awake(struct ieee80211_hw *hw, | |||
988 | ieee80211_queue_work(hw, &sta->drv_unblock_wk); | 990 | ieee80211_queue_work(hw, &sta->drv_unblock_wk); |
989 | } | 991 | } |
990 | EXPORT_SYMBOL(ieee80211_sta_block_awake); | 992 | EXPORT_SYMBOL(ieee80211_sta_block_awake); |
993 | |||
994 | void ieee80211_sta_set_tim(struct ieee80211_sta *pubsta) | ||
995 | { | ||
996 | struct sta_info *sta = container_of(pubsta, struct sta_info, sta); | ||
997 | |||
998 | set_sta_flags(sta, WLAN_STA_PS_DRIVER_BUF); | ||
999 | sta_info_set_tim_bit(sta); | ||
1000 | } | ||
1001 | EXPORT_SYMBOL(ieee80211_sta_set_tim); | ||