aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVasanthakumar Thiagarajan <vasanth@atheros.com>2008-12-24 13:53:11 +0530
committerJohn W. Linville <linville@tuxdriver.com>2009-01-29 15:59:36 -0500
commite3c92df08cbf6a0cb60a9c7ce377378383967e07 (patch)
tree088d70d7924c6dac0e900d4190db928623ec3c76
parenta085ff718c8c9f14c44feb337774fadfd982e1a5 (diff)
mac80211: Fix tx power setting
power_level in ieee80211_conf is being used for more than one purpose. It being used as user configured power limit and the final power limit given to the driver. By doing so, except very first time, the tx power limit is taken from min(chan->max_power, local->hw.conf.power_level) which is not what we want. This patch defines a new memeber in ieee80211_conf which is meant only for user configured power limit. Signed-off-by: Vasanthakumar Thiagarajan <vasanth@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--include/net/mac80211.h2
-rw-r--r--net/mac80211/main.c4
-rw-r--r--net/mac80211/wext.c5
3 files changed, 6 insertions, 5 deletions
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index 9d67fdf1c26..ffcbd12775a 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -546,6 +546,7 @@ enum ieee80211_conf_changed {
* @listen_interval: listen interval in units of beacon interval
* @flags: configuration flags defined above
* @power_level: requested transmit power (in dBm)
+ * @user_power_level: User configured transmit power (in dBm)
* @channel: the channel to tune to
* @ht: the HT configuration for the device
* @long_frame_max_tx_count: Maximum number of transmissions for a "long" frame
@@ -559,6 +560,7 @@ struct ieee80211_conf {
int beacon_int;
u32 flags;
int power_level;
+ int user_power_level;
u16 listen_interval;
bool radio_enabled;
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index a6cb480dda0..dca4b7da6ca 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -214,10 +214,10 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
changed |= IEEE80211_CONF_CHANGE_CHANNEL;
}
- if (!local->hw.conf.power_level)
+ if (!local->hw.conf.user_power_level)
power = chan->max_power;
else
- power = min(chan->max_power, local->hw.conf.power_level);
+ power = min(chan->max_power, local->hw.conf.user_power_level);
if (local->hw.conf.power_level != power) {
changed |= IEEE80211_CONF_CHANGE_POWER;
local->hw.conf.power_level = power;
diff --git a/net/mac80211/wext.c b/net/mac80211/wext.c
index 48fc6b9a62a..654041b9373 100644
--- a/net/mac80211/wext.c
+++ b/net/mac80211/wext.c
@@ -549,10 +549,9 @@ static int ieee80211_ioctl_siwtxpower(struct net_device *dev,
else /* Automatic power level setting */
new_power_level = chan->max_power;
- if (local->hw.conf.power_level != new_power_level) {
- local->hw.conf.power_level = new_power_level;
+ local->hw.conf.user_power_level = new_power_level;
+ if (local->hw.conf.power_level != new_power_level)
reconf_flags |= IEEE80211_CONF_CHANGE_POWER;
- }
if (local->hw.conf.radio_enabled != !(data->txpower.disabled)) {
local->hw.conf.radio_enabled = !(data->txpower.disabled);