* [PATCH v2 1/1] mac80211: tell driver when dtim change detected
@ 2010-01-21 20:31 wey-yi.w.guy
2010-01-21 20:44 ` Johannes Berg
0 siblings, 1 reply; 3+ messages in thread
From: wey-yi.w.guy @ 2010-01-21 20:31 UTC (permalink / raw)
To: johannes; +Cc: linux-wireless, Wey-Yi Guy
From: Wey-Yi Guy <wey-yi.w.guy@intel.com>
In current implementation, mac80211 send dtim_period update to driver
during association, but if no NetworkManager or similar application perform
scan operation, plus tim_ie is not part of probe response; mac80211 will not
get beacon with dtim information later, then mac80211 will not pass the
information to driver for update.
Call ieee80211_hw_config() with IEEE80211_CONF_CHANGE_PS flag set to
allow driver make correct dtim adjustment if dtim_period change
detected. Also perform recalc_ps operation if needed.
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
---
v2: move the function to ieee80211_rx_bss_info() to make sure only call
when needed
---
net/mac80211/mlme.c | 21 ++++++++++++++++++++-
1 files changed, 20 insertions(+), 1 deletions(-)
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 1e1d16c..1cc1b5b 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -1157,6 +1157,23 @@ static bool ieee80211_assoc_success(struct ieee80211_work *wk,
}
+static void ieee80211_update_dtim(struct ieee80211_sub_if_data *sdata,
+ struct ieee80211_local *local,
+ struct ieee80211_bss *bss)
+{
+ if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS))
+ return;
+
+ if (sdata->vif.type == NL80211_IFTYPE_STATION &&
+ sdata->vif.bss_conf.dtim_period != bss->dtim_period) {
+ sdata->vif.bss_conf.dtim_period = bss->dtim_period;
+ ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS);
+ mutex_lock(&local->iflist_mtx);
+ ieee80211_recalc_ps(local, -1);
+ mutex_unlock(&local->iflist_mtx);
+ }
+}
+
static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata,
struct ieee80211_mgmt *mgmt,
size_t len,
@@ -1181,8 +1198,10 @@ static void ieee80211_rx_bss_info(struct ieee80211_sub_if_data *sdata,
bss = ieee80211_bss_info_update(local, rx_status, mgmt, len, elems,
channel, beacon);
- if (bss)
+ if (bss) {
ieee80211_rx_bss_put(local, bss);
+ ieee80211_update_dtim(sdata, local, bss);
+ }
if (!sdata->u.mgd.associated)
return;
--
1.5.6.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2 1/1] mac80211: tell driver when dtim change detected
2010-01-21 20:31 [PATCH v2 1/1] mac80211: tell driver when dtim change detected wey-yi.w.guy
@ 2010-01-21 20:44 ` Johannes Berg
2010-01-21 21:31 ` Guy, Wey-Yi
0 siblings, 1 reply; 3+ messages in thread
From: Johannes Berg @ 2010-01-21 20:44 UTC (permalink / raw)
To: wey-yi.w.guy; +Cc: linux-wireless
[-- Attachment #1: Type: text/plain, Size: 863 bytes --]
On Thu, 2010-01-21 at 12:31 -0800, wey-yi.w.guy@intel.com wrote:
> --- a/net/mac80211/mlme.c
> +++ b/net/mac80211/mlme.c
This is all in mlme.c, so ...
> +static void ieee80211_update_dtim(struct ieee80211_sub_if_data *sdata,
> + struct ieee80211_local *local,
> + struct ieee80211_bss *bss)
> +{
> + if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS))
> + return;
> +
> + if (sdata->vif.type == NL80211_IFTYPE_STATION &&
I don't think you need this check?
> + sdata->vif.bss_conf.dtim_period != bss->dtim_period) {
> + sdata->vif.bss_conf.dtim_period = bss->dtim_period;
> + ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS);
> + mutex_lock(&local->iflist_mtx);
> + ieee80211_recalc_ps(local, -1);
> + mutex_unlock(&local->iflist_mtx);
And afaict recalc_ps() will call hw_config() if appropriate.
johannes
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 801 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH v2 1/1] mac80211: tell driver when dtim change detected
2010-01-21 20:44 ` Johannes Berg
@ 2010-01-21 21:31 ` Guy, Wey-Yi
0 siblings, 0 replies; 3+ messages in thread
From: Guy, Wey-Yi @ 2010-01-21 21:31 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless@vger.kernel.org
On Thu, 2010-01-21 at 12:44 -0800, Johannes Berg wrote:
> On Thu, 2010-01-21 at 12:31 -0800, wey-yi.w.guy@intel.com wrote:
>
> > --- a/net/mac80211/mlme.c
> > +++ b/net/mac80211/mlme.c
>
> This is all in mlme.c, so ...
>
> > +static void ieee80211_update_dtim(struct ieee80211_sub_if_data *sdata,
> > + struct ieee80211_local *local,
> > + struct ieee80211_bss *bss)
> > +{
> > + if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS))
> > + return;
> > +
> > + if (sdata->vif.type == NL80211_IFTYPE_STATION &&
>
> I don't think you need this check?
yes, that make sense.
>
> > + sdata->vif.bss_conf.dtim_period != bss->dtim_period) {
> > + sdata->vif.bss_conf.dtim_period = bss->dtim_period;
> > + ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_PS);
> > + mutex_lock(&local->iflist_mtx);
> > + ieee80211_recalc_ps(local, -1);
> > + mutex_unlock(&local->iflist_mtx);
>
> And afaict recalc_ps() will call hw_config() if appropriate.
>
That is the part I am not sure, so I call the hw_config manually, since
you confirm hw_config will happen, then there is no point to call first
I will make those changes and submit again
Wey
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-01-21 21:35 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-01-21 20:31 [PATCH v2 1/1] mac80211: tell driver when dtim change detected wey-yi.w.guy
2010-01-21 20:44 ` Johannes Berg
2010-01-21 21:31 ` Guy, Wey-Yi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).