Skip to content

Commit

Permalink
mac80211: Fix tx power setting
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Vasanthakumar Thiagarajan authored and John W. Linville committed Jan 29, 2009
1 parent a085ff7 commit e3c92df
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 5 deletions.
2 changes: 2 additions & 0 deletions include/net/mac80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions net/mac80211/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
5 changes: 2 additions & 3 deletions net/mac80211/wext.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit e3c92df

Please sign in to comment.