diff options
author | Juuso Oikarinen <juuso.oikarinen@nokia.com> | 2010-04-27 05:47:40 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-04-27 16:09:22 -0400 |
commit | 195e294d21e88af879da4f88db2ceeb4ec28a755 (patch) | |
tree | 22a75db60cc8743888054460db85eb9a76b0cecb /net/mac80211/mlme.c | |
parent | 3a37495268ab45507b4cab9d4cb18c5496ab7a10 (diff) |
mac80211: Determine dynamic PS timeout based on ps-qos network latency
Determine the dynamic PS timeout based on the configured ps-qos network
latency. For backwards wext compatibility, allow the dynamic PS timeout
configured by the cfg80211 to overrule the automatically determined value.
Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'net/mac80211/mlme.c')
-rw-r--r-- | net/mac80211/mlme.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index d811e3fa1d75..2d1a2bef366d 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c | |||
@@ -475,6 +475,7 @@ void ieee80211_recalc_ps(struct ieee80211_local *local, s32 latency) | |||
475 | { | 475 | { |
476 | struct ieee80211_sub_if_data *sdata, *found = NULL; | 476 | struct ieee80211_sub_if_data *sdata, *found = NULL; |
477 | int count = 0; | 477 | int count = 0; |
478 | int timeout; | ||
478 | 479 | ||
479 | if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS)) { | 480 | if (!(local->hw.flags & IEEE80211_HW_SUPPORTS_PS)) { |
480 | local->ps_sdata = NULL; | 481 | local->ps_sdata = NULL; |
@@ -508,6 +509,26 @@ void ieee80211_recalc_ps(struct ieee80211_local *local, s32 latency) | |||
508 | beaconint_us = ieee80211_tu_to_usec( | 509 | beaconint_us = ieee80211_tu_to_usec( |
509 | found->vif.bss_conf.beacon_int); | 510 | found->vif.bss_conf.beacon_int); |
510 | 511 | ||
512 | timeout = local->hw.conf.dynamic_ps_forced_timeout; | ||
513 | if (timeout < 0) { | ||
514 | /* | ||
515 | * The 2 second value is there for compatibility until | ||
516 | * the PM_QOS_NETWORK_LATENCY is configured with real | ||
517 | * values. | ||
518 | */ | ||
519 | if (latency == 2000000000) | ||
520 | timeout = 100; | ||
521 | else if (latency <= 50000) | ||
522 | timeout = 300; | ||
523 | else if (latency <= 100000) | ||
524 | timeout = 100; | ||
525 | else if (latency <= 500000) | ||
526 | timeout = 50; | ||
527 | else | ||
528 | timeout = 0; | ||
529 | } | ||
530 | local->hw.conf.dynamic_ps_timeout = timeout; | ||
531 | |||
511 | if (beaconint_us > latency) { | 532 | if (beaconint_us > latency) { |
512 | local->ps_sdata = NULL; | 533 | local->ps_sdata = NULL; |
513 | } else { | 534 | } else { |