79b79e1053e49f30fe578d152f02e4b45df2eec5
[librecmc/librecmc.git] /
1 From cf8f3d4deb02a8fdc806c46d4112b69868544697 Mon Sep 17 00:00:00 2001
2 From: Tamizh Chelvam Raja <quic_tamizhr@quicinc.com>
3 Date: Wed, 15 Feb 2023 20:31:36 +0200
4 Subject: [PATCH] wifi: ath11k: Set ext passive scan flag to adjust passive
5  scan start time
6
7 Set the WMI_SCAN_FLAG_EXT_PASSIVE_SCAN_START_TIME_ENHANCE flag
8 while sending the scan command.  If this flag is enabled when the
9 incoming scan request comes with a strict start time and its duration
10 overlaps with next TBTT, then target adjust the start time accordingly
11 for passive scan. Target supporting this feature will advertise
12 WMI_TLV_SERVICE_PASSIVE_SCAN_START_TIME_ENHANCE.
13
14 Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01467-QCAHKSWPL_SILICONZ-1
15
16 Signed-off-by: Tamizh Chelvam Raja <quic_tamizhr@quicinc.com>
17 Signed-off-by: Kalle Valo <quic_kvalo@quicinc.com>
18 Link: https://lore.kernel.org/r/20221222131720.11368-1-quic_tamizhr@quicinc.com
19 ---
20  drivers/net/wireless/ath/ath11k/wmi.c | 8 ++++++++
21  drivers/net/wireless/ath/ath11k/wmi.h | 3 +++
22  2 files changed, 11 insertions(+)
23
24 --- a/drivers/net/wireless/ath/ath11k/wmi.c
25 +++ b/drivers/net/wireless/ath/ath11k/wmi.c
26 @@ -2068,6 +2068,12 @@ void ath11k_wmi_start_scan_init(struct a
27                                   WMI_SCAN_EVENT_FOREIGN_CHAN |
28                                   WMI_SCAN_EVENT_DEQUEUED;
29         arg->scan_flags |= WMI_SCAN_CHAN_STAT_EVENT;
30 +
31 +       if (test_bit(WMI_TLV_SERVICE_PASSIVE_SCAN_START_TIME_ENHANCE,
32 +                    ar->ab->wmi_ab.svc_map))
33 +               arg->scan_ctrl_flags_ext |=
34 +                       WMI_SCAN_FLAG_EXT_PASSIVE_SCAN_START_TIME_ENHANCE;
35 +
36         arg->num_bssid = 1;
37  
38         /* fill bssid_list[0] with 0xff, otherwise bssid and RA will be
39 @@ -2149,6 +2155,8 @@ ath11k_wmi_copy_scan_event_cntrl_flags(s
40         /* for adaptive scan mode using 3 bits (21 - 23 bits) */
41         WMI_SCAN_SET_DWELL_MODE(cmd->scan_ctrl_flags,
42                                 param->adaptive_dwell_time_mode);
43 +
44 +       cmd->scan_ctrl_flags_ext = param->scan_ctrl_flags_ext;
45  }
46  
47  int ath11k_wmi_send_scan_start_cmd(struct ath11k *ar,
48 --- a/drivers/net/wireless/ath/ath11k/wmi.h
49 +++ b/drivers/net/wireless/ath/ath11k/wmi.h
50 @@ -2093,6 +2093,7 @@ enum wmi_tlv_service {
51         WMI_TLV_SERVICE_EXT2_MSG = 220,
52         WMI_TLV_SERVICE_PEER_POWER_SAVE_DURATION_SUPPORT = 246,
53         WMI_TLV_SERVICE_SRG_SRP_SPATIAL_REUSE_SUPPORT = 249,
54 +       WMI_TLV_SERVICE_PASSIVE_SCAN_START_TIME_ENHANCE = 263,
55  
56         /* The second 128 bits */
57         WMI_MAX_EXT_SERVICE = 256,
58 @@ -3223,6 +3224,7 @@ struct  wmi_start_scan_cmd {
59  
60  #define WMI_SCAN_DWELL_MODE_MASK 0x00E00000
61  #define WMI_SCAN_DWELL_MODE_SHIFT        21
62 +#define WMI_SCAN_FLAG_EXT_PASSIVE_SCAN_START_TIME_ENHANCE   0x00000800
63  
64  enum {
65         WMI_SCAN_DWELL_MODE_DEFAULT      = 0,
66 @@ -3270,6 +3272,7 @@ struct scan_req_params {
67                 };
68                 u32 scan_events;
69         };
70 +       u32 scan_ctrl_flags_ext;
71         u32 dwell_time_active;
72         u32 dwell_time_active_2g;
73         u32 dwell_time_passive;