Commit fcf98446 authored by Michal Kazior's avatar Michal Kazior Committed by Kalle Valo

ath10k: fix hw roc expiration

It is not guaranteed firmware will switch to
foreign channel immediately after starting scan
sequence. To account for that don't use duration
parameter for scan time. Instead request insanely
long scan and use timeout worker to cancel it from
driver.

This should improve P2P reliability a bit.
Signed-off-by: default avatarMichal Kazior <michal.kazior@tieto.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent 694c0e0a
...@@ -5395,6 +5395,7 @@ static int ath10k_remain_on_channel(struct ieee80211_hw *hw, ...@@ -5395,6 +5395,7 @@ static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif); struct ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
struct wmi_start_scan_arg arg; struct wmi_start_scan_arg arg;
int ret = 0; int ret = 0;
u32 scan_time_msec;
mutex_lock(&ar->conf_mutex); mutex_lock(&ar->conf_mutex);
...@@ -5421,7 +5422,7 @@ static int ath10k_remain_on_channel(struct ieee80211_hw *hw, ...@@ -5421,7 +5422,7 @@ static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
if (ret) if (ret)
goto exit; goto exit;
duration = max(duration, WMI_SCAN_CHAN_MIN_TIME_MSEC); scan_time_msec = ar->hw->wiphy->max_remain_on_channel_duration * 2;
memset(&arg, 0, sizeof(arg)); memset(&arg, 0, sizeof(arg));
ath10k_wmi_start_scan_init(ar, &arg); ath10k_wmi_start_scan_init(ar, &arg);
...@@ -5429,9 +5430,9 @@ static int ath10k_remain_on_channel(struct ieee80211_hw *hw, ...@@ -5429,9 +5430,9 @@ static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
arg.scan_id = ATH10K_SCAN_ID; arg.scan_id = ATH10K_SCAN_ID;
arg.n_channels = 1; arg.n_channels = 1;
arg.channels[0] = chan->center_freq; arg.channels[0] = chan->center_freq;
arg.dwell_time_active = duration; arg.dwell_time_active = scan_time_msec;
arg.dwell_time_passive = duration; arg.dwell_time_passive = scan_time_msec;
arg.max_scan_time = 2 * duration; arg.max_scan_time = scan_time_msec;
arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE; arg.scan_ctrl_flags |= WMI_SCAN_FLAG_PASSIVE;
arg.scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ; arg.scan_ctrl_flags |= WMI_SCAN_FILTER_PROBE_REQ;
...@@ -5456,6 +5457,9 @@ static int ath10k_remain_on_channel(struct ieee80211_hw *hw, ...@@ -5456,6 +5457,9 @@ static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
goto exit; goto exit;
} }
ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
msecs_to_jiffies(duration));
ret = 0; ret = 0;
exit: exit:
mutex_unlock(&ar->conf_mutex); mutex_unlock(&ar->conf_mutex);
......
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