wifi: mac80211: apply duration for SW scan
authorMichael-CY Lee <michael-cy.lee@mediatek.com>
Tue, 23 Jan 2024 05:47:52 +0000 (13:47 +0800)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 26 Jan 2024 08:40:42 +0000 (09:40 +0100)
This patch makes duration in scan request be applicable when using
SW scan, but only accepts durations greater than the default value for
the following reasons:
1. Most APs have a beacoon interval of 100ms.
2. Sending and receiving probe require some delay.
3. Setting channel to HW also requires some delays

Signed-off-by: Michael-CY Lee <michael-cy.lee@mediatek.com>
Link: https://msgid.link/20240123054752.22833-1-michael-cy.lee@mediatek.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/scan.c

index 645355e..8adcb23 100644 (file)
@@ -671,7 +671,10 @@ static void ieee80211_scan_state_send_probe(struct ieee80211_local *local,
         * After sending probe requests, wait for probe responses
         * on the channel.
         */
-       *next_delay = IEEE80211_CHANNEL_TIME;
+       *next_delay = msecs_to_jiffies(scan_req->duration) >
+                     IEEE80211_PROBE_DELAY + IEEE80211_CHANNEL_TIME ?
+                     msecs_to_jiffies(scan_req->duration) - IEEE80211_PROBE_DELAY :
+                     IEEE80211_CHANNEL_TIME;
        local->next_scan_state = SCAN_DECISION;
 }
 
@@ -994,7 +997,10 @@ set_channel:
         */
        if ((chan->flags & (IEEE80211_CHAN_NO_IR | IEEE80211_CHAN_RADAR)) ||
            !scan_req->n_ssids) {
-               *next_delay = IEEE80211_PASSIVE_CHANNEL_TIME;
+               *next_delay = msecs_to_jiffies(scan_req->duration) >
+                             IEEE80211_PASSIVE_CHANNEL_TIME ?
+                             msecs_to_jiffies(scan_req->duration) :
+                             IEEE80211_PASSIVE_CHANNEL_TIME;
                local->next_scan_state = SCAN_DECISION;
                if (scan_req->n_ssids)
                        set_bit(SCAN_BEACON_WAIT, &local->scanning);