diff options
author | Christian Lamparter <chunkeey@web.de> | 2008-11-29 18:48:41 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-12-05 09:35:43 -0500 |
commit | 4571d3bf87b76eae875283ff9f7243984b5ddcae (patch) | |
tree | 7c621ac727de783f9446765208470a53aeafb184 /net/mac80211 | |
parent | 2a163c6de452c0b321396caceac5d163949b4cf2 (diff) |
mac80211: add sta_notify_ps callback
This patch is necessary in order to provide a proper Access point support for p54.
Unfortunately for us, there is no documented way to disable the interfering
power save buffering mechanism in firmware completely.
Therefore we give in and notify the driver through our new sta_notify_ps callback,
so that we can update the filter state.
Signed-off-by: Christian Lamparter <chunkeey@web.de>
Acked-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211')
-rw-r--r-- | net/mac80211/rx.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index 68a6e973c72c..14be095b8528 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c | |||
@@ -654,9 +654,13 @@ ieee80211_rx_h_decrypt(struct ieee80211_rx_data *rx) | |||
654 | static void ap_sta_ps_start(struct sta_info *sta) | 654 | static void ap_sta_ps_start(struct sta_info *sta) |
655 | { | 655 | { |
656 | struct ieee80211_sub_if_data *sdata = sta->sdata; | 656 | struct ieee80211_sub_if_data *sdata = sta->sdata; |
657 | struct ieee80211_local *local = sdata->local; | ||
657 | 658 | ||
658 | atomic_inc(&sdata->bss->num_sta_ps); | 659 | atomic_inc(&sdata->bss->num_sta_ps); |
659 | set_and_clear_sta_flags(sta, WLAN_STA_PS, WLAN_STA_PSPOLL); | 660 | set_and_clear_sta_flags(sta, WLAN_STA_PS, WLAN_STA_PSPOLL); |
661 | if (local->ops->sta_notify_ps) | ||
662 | local->ops->sta_notify_ps(local_to_hw(local), STA_NOTIFY_SLEEP, | ||
663 | &sta->sta); | ||
660 | #ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG | 664 | #ifdef CONFIG_MAC80211_VERBOSE_PS_DEBUG |
661 | printk(KERN_DEBUG "%s: STA %pM aid %d enters power save mode\n", | 665 | printk(KERN_DEBUG "%s: STA %pM aid %d enters power save mode\n", |
662 | sdata->dev->name, sta->sta.addr, sta->sta.aid); | 666 | sdata->dev->name, sta->sta.addr, sta->sta.aid); |
@@ -673,6 +677,9 @@ static int ap_sta_ps_end(struct sta_info *sta) | |||
673 | atomic_dec(&sdata->bss->num_sta_ps); | 677 | atomic_dec(&sdata->bss->num_sta_ps); |
674 | 678 | ||
675 | clear_sta_flags(sta, WLAN_STA_PS | WLAN_STA_PSPOLL); | 679 | clear_sta_flags(sta, WLAN_STA_PS | WLAN_STA_PSPOLL); |
680 | if (local->ops->sta_notify_ps) | ||
681 | local->ops->sta_notify_ps(local_to_hw(local), STA_NOTIFY_AWAKE, | ||
682 | &sta->sta); | ||
676 | 683 | ||
677 | if (!skb_queue_empty(&sta->ps_tx_buf)) | 684 | if (!skb_queue_empty(&sta->ps_tx_buf)) |
678 | sta_info_clear_tim_bit(sta); | 685 | sta_info_clear_tim_bit(sta); |