[PATCH] wifi: ath11k: add support to configure channel dwell time

Jeff Johnson quic_jjohnson at quicinc.com
Fri Oct 7 14:17:10 PDT 2022


On 10/6/2022 10:11 PM, Manikanta Pubbisetty wrote:
> Add support to configure channel dwell time during scan.
> Dwell time help to stay on the channel for a specified duration
> during scan and aid userspace in finding WiFi networks. Very
> useful in passive scans where longer dwell times are needed
> to find the WiFi networks.
> 
> Configure channel dwell time from duration of the scan request
> received from mac80211 when the duration is non-zero. When the
> scan request does not have duration value, use the default ones,
> the current implementation.
> 
> Advertise orresponding feature flag NL80211_EXT_FEATURE_SET_SCAN_DWELL

s/orresponding/corresponding/
Kalle can fix that when he merges so don't repost for that

> to enable the feature.
> 
> Change is applicable for all ath11k hardware.
> 
> Tested-on: WCN6750 hw1.0 AHB WLAN.MSL.1.0.1-00887-QCAMSLSWPLZ-1
> 
> Signed-off-by: Manikanta Pubbisetty <quic_mpubbise at quicinc.com>

Reviewed-by: Jeff Johnson <quic_jjohnson at quicinc.com>

> ---
>   drivers/net/wireless/ath/ath11k/mac.c | 33 +++++++++++++++++++++++----
>   1 file changed, 29 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/net/wireless/ath/ath11k/mac.c b/drivers/net/wireless/ath/ath11k/mac.c
> index 84d956ad4093..0da136916e0e 100644
> --- a/drivers/net/wireless/ath/ath11k/mac.c
> +++ b/drivers/net/wireless/ath/ath11k/mac.c
> @@ -241,7 +241,10 @@ const struct htt_rx_ring_tlv_filter ath11k_mac_mon_status_filter_default = {
>   #define ath11k_a_rates (ath11k_legacy_rates + 4)
>   #define ath11k_a_rates_size (ARRAY_SIZE(ath11k_legacy_rates) - 4)
>   
> -#define ATH11K_MAC_SCAN_TIMEOUT_MSECS 200 /* in msecs */
> +#define ATH11K_MAC_SCAN_CMD_EVT_OVERHEAD		200 /* in msecs */
> +
> +/* Overhead due to the processing of channel switch events from FW */
> +#define ATH11K_SCAN_CHANNEL_SWITCH_WMI_EVT_OVERHEAD	10 /* in msecs */
>   
>   static const u32 ath11k_smps_map[] = {
>   	[WLAN_HT_CAP_SM_PS_STATIC] = WMI_PEER_SMPS_STATIC,
> @@ -3611,6 +3614,7 @@ static int ath11k_mac_op_hw_scan(struct ieee80211_hw *hw,
>   	struct scan_req_params arg;
>   	int ret = 0;
>   	int i;
> +	u32 scan_timeout;
>   
>   	mutex_lock(&ar->conf_mutex);
>   
> @@ -3680,6 +3684,26 @@ static int ath11k_mac_op_hw_scan(struct ieee80211_hw *hw,
>   		ether_addr_copy(arg.mac_mask.addr, req->mac_addr_mask);
>   	}
>   
> +	/* if duration is set, default dwell times will be overwritten */
> +	if (req->duration) {
> +		arg.dwell_time_active = req->duration;
> +		arg.dwell_time_active_2g = req->duration;
> +		arg.dwell_time_active_6g = req->duration;
> +		arg.dwell_time_passive = req->duration;
> +		arg.dwell_time_passive_6g = req->duration;
> +		arg.burst_duration = req->duration;
> +
> +		scan_timeout = min_t(u32, arg.max_rest_time *
> +				(arg.num_chan - 1) + (req->duration +
> +				ATH11K_SCAN_CHANNEL_SWITCH_WMI_EVT_OVERHEAD) *
> +				arg.num_chan, arg.max_scan_time);
> +	} else {
> +		scan_timeout = arg.max_scan_time;
> +	}
> +
> +	/* Add a margin to account for event/command processing */
> +	scan_timeout += ATH11K_MAC_SCAN_CMD_EVT_OVERHEAD;
> +
>   	ret = ath11k_start_scan(ar, &arg);
>   	if (ret) {
>   		ath11k_warn(ar->ab, "failed to start hw scan: %d\n", ret);
> @@ -3688,10 +3712,8 @@ static int ath11k_mac_op_hw_scan(struct ieee80211_hw *hw,
>   		spin_unlock_bh(&ar->data_lock);
>   	}
>   
> -	/* Add a 200ms margin to account for event/command processing */
>   	ieee80211_queue_delayed_work(ar->hw, &ar->scan.timeout,
> -				     msecs_to_jiffies(arg.max_scan_time +
> -						      ATH11K_MAC_SCAN_TIMEOUT_MSECS));
> +				     msecs_to_jiffies(scan_timeout));
>   
>   exit:
>   	kfree(arg.chan_list);
> @@ -9013,6 +9035,9 @@ static int __ath11k_mac_register(struct ath11k *ar)
>   				      NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP);
>   	}
>   
> +	wiphy_ext_feature_set(ar->hw->wiphy,
> +			      NL80211_EXT_FEATURE_SET_SCAN_DWELL);
> +
>   	ath11k_reg_init(ar);
>   
>   	if (!test_bit(ATH11K_FLAG_RAW_MODE, &ab->dev_flags)) {
> 
> base-commit: 023baf1318ef21442fab3842bf03883bc81223e0




More information about the ath11k mailing list