Commit 59bdf3b0 authored by Ben Greear's avatar Ben Greear Committed by John W. Linville

mac80211: Ensure power-level set properly for scanning.

My previous patch to optimize scanning on operating channel
accidentally removed the code that would ensure power was
set to maximum for scanning.

This patch re-adds that functionality.
Signed-off-by: default avatarBen Greear <greearb@candelatech.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 603b3eef
...@@ -199,7 +199,8 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed) ...@@ -199,7 +199,8 @@ int ieee80211_hw_config(struct ieee80211_local *local, u32 changed)
changed |= IEEE80211_CONF_CHANGE_SMPS; changed |= IEEE80211_CONF_CHANGE_SMPS;
} }
if (scan_chan) if ((local->scanning & SCAN_SW_SCANNING) ||
(local->scanning & SCAN_HW_SCANNING))
power = chan->max_power; power = chan->max_power;
else else
power = local->power_constr_level ? power = local->power_constr_level ?
......
...@@ -307,11 +307,15 @@ static void __ieee80211_scan_completed_finish(struct ieee80211_hw *hw, ...@@ -307,11 +307,15 @@ static void __ieee80211_scan_completed_finish(struct ieee80211_hw *hw,
mutex_lock(&local->mtx); mutex_lock(&local->mtx);
on_oper_chan = ieee80211_cfg_on_oper_channel(local); on_oper_chan = ieee80211_cfg_on_oper_channel(local);
WARN_ON(local->scanning & (SCAN_SW_SCANNING | SCAN_HW_SCANNING));
if (was_hw_scan || !on_oper_chan) { if (was_hw_scan || !on_oper_chan) {
if (WARN_ON(local->scan_channel)) if (WARN_ON(local->scan_channel))
local->scan_channel = NULL; local->scan_channel = NULL;
ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL); ieee80211_hw_config(local, IEEE80211_CONF_CHANGE_CHANNEL);
} } else
/* Set power back to normal operating levels. */
ieee80211_hw_config(local, 0);
if (!was_hw_scan) { if (!was_hw_scan) {
bool on_oper_chan2; bool on_oper_chan2;
...@@ -377,6 +381,9 @@ static int ieee80211_start_sw_scan(struct ieee80211_local *local) ...@@ -377,6 +381,9 @@ static int ieee80211_start_sw_scan(struct ieee80211_local *local)
ieee80211_configure_filter(local); ieee80211_configure_filter(local);
/* We need to set power level at maximum rate for scanning. */
ieee80211_hw_config(local, 0);
ieee80211_queue_delayed_work(&local->hw, ieee80211_queue_delayed_work(&local->hw,
&local->scan_work, &local->scan_work,
IEEE80211_CHANNEL_TIME); IEEE80211_CHANNEL_TIME);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment