xref: /wlan-driver/qca-wifi-host-cmn/umac/scan/dispatcher/inc/wlan_scan_public_structs.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name 
20*5113495bSYour Name /*
21*5113495bSYour Name  * DOC: contains scan structure definitions
22*5113495bSYour Name  */
23*5113495bSYour Name 
24*5113495bSYour Name #ifndef _WLAN_SCAN_STRUCTS_H_
25*5113495bSYour Name #define _WLAN_SCAN_STRUCTS_H_
26*5113495bSYour Name #include <wlan_cmn.h>
27*5113495bSYour Name #include <qdf_time.h>
28*5113495bSYour Name #include <qdf_list.h>
29*5113495bSYour Name #include <qdf_atomic.h>
30*5113495bSYour Name #include <wlan_cmn_ieee80211.h>
31*5113495bSYour Name #include <wlan_mgmt_txrx_utils_api.h>
32*5113495bSYour Name #include <reg_services_public_struct.h>
33*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
34*5113495bSYour Name #include "wlan_mlo_mgr_public_structs.h"
35*5113495bSYour Name #endif
36*5113495bSYour Name 
37*5113495bSYour Name typedef uint16_t wlan_scan_requester;
38*5113495bSYour Name typedef uint32_t wlan_scan_id;
39*5113495bSYour Name 
40*5113495bSYour Name #define WLAN_SCAN_MAX_HINT_S_SSID        10
41*5113495bSYour Name #define WLAN_SCAN_MAX_HINT_BSSID         10
42*5113495bSYour Name /*
43*5113495bSYour Name  * For N(4 LINK) link MLO, Max RNR BSS will be given:
44*5113495bSYour Name  * 16(N_6G_LINKS) + N - (N_6G_LINKS) - 1(SELF_LINK) = 16*2 + N-2-1 = 33
45*5113495bSYour Name  */
46*5113495bSYour Name #define MAX_RNR_BSS                      33
47*5113495bSYour Name #define WLAN_SCAN_MAX_NUM_SSID          16
48*5113495bSYour Name #define WLAN_SCAN_MAX_NUM_BSSID         4
49*5113495bSYour Name 
50*5113495bSYour Name #define SCM_CANCEL_SCAN_WAIT_TIME 50
51*5113495bSYour Name #define SCM_CANCEL_SCAN_WAIT_ITERATION 600
52*5113495bSYour Name 
53*5113495bSYour Name #define INVAL_SCAN_ID        0xFFFFFFFF
54*5113495bSYour Name #define CANCEL_HOST_SCAN_ID  0xFFFFFFFE
55*5113495bSYour Name #define INVAL_VDEV_ID        0xFFFFFFFF
56*5113495bSYour Name #define INVAL_PDEV_ID        0xFFFFFFFF
57*5113495bSYour Name 
58*5113495bSYour Name #define USER_SCAN_REQUESTOR_ID  0xA0000
59*5113495bSYour Name #define PREAUTH_REQUESTOR_ID    0xC0000
60*5113495bSYour Name 
61*5113495bSYour Name #define BURST_SCAN_MAX_NUM_OFFCHANNELS 3
62*5113495bSYour Name #define P2P_SCAN_MAX_BURST_DURATION 180
63*5113495bSYour Name /* Increase dwell time for P2P search in ms */
64*5113495bSYour Name #define P2P_SEARCH_DWELL_TIME_INC 20
65*5113495bSYour Name 
66*5113495bSYour Name #define PROBE_REQ_BITMAP_LEN 8
67*5113495bSYour Name #define MAX_PROBE_REQ_OUIS 16
68*5113495bSYour Name 
69*5113495bSYour Name #define TBTT_INFO_COUNT 16
70*5113495bSYour Name 
71*5113495bSYour Name /*
72*5113495bSYour Name  * IE Field nomenclature
73*5113495bSYour Name  * @MBSSID_INDICATOR_POS: Position of MaxBSSID indicator inside MBSSID tag
74*5113495bSYour Name  * @MIN_IE_LEN: 2bytes, which includes Tag Number and Tag length field
75*5113495bSYour Name  * @TAG_LEN_POS: Position of tag length field in MBSSID tag
76*5113495bSYour Name  * @VALID_ELEM_LEAST_LEN: Minimum fields required after tag length to call
77*5113495bSYour Name  * a MBSSID tag valid. (MaxBSSID Indicator + subelement ID + Subelement length
78*5113495bSYour Name  * atleast 1 byte of payload from subelement)
79*5113495bSYour Name  * @SUBELEMENT_START_POS: Starting position of 1st subelement in MBSSID tag
80*5113495bSYour Name  * @MAX_SUBELEM_LEN: Maximum length of a subelement
81*5113495bSYour Name  * @PAYLOAD_START_POS: Payload start position of a non tx bssid profile
82*5113495bSYour Name  * @FIXED_LENGTH: Length which includes header, timestamp, interval and
83*5113495bSYour Name  * capability
84*5113495bSYour Name  * @CAP_INFO_POS: Position of capability information in a non tx bssid profile
85*5113495bSYour Name  * @CAP_INFO_LEN: Length of capability information
86*5113495bSYour Name  * @SUBELEM_DATA_POS_FROM_MBSSID: Position of first byte of subelement payload
87*5113495bSYour Name  * from MBSSID Tag
88*5113495bSYour Name  * @ID_POS: Position of subelement ID in a non tx BSSID profile
89*5113495bSYour Name  * @NONTX_BSSID_CAP_TAG_LEN_POS: Position of tag length field of nontx bssid
90*5113495bSYour Name  * capability tag from starting of nontx bssid profile
91*5113495bSYour Name  * @VALID_BSS_PROF_LEAST_LEN: At least one tag should present to call it a valid
92*5113495bSYour Name  * non tx bssid profile and that is nothing but nontx bssid capability tag which
93*5113495bSYour Name  * is of 4 bytes
94*5113495bSYour Name  * @SPLIT_PROF_DATA_LEAST_LEN: Least possible length of second part of a split
95*5113495bSYour Name  * profile, which includes at least one tag, which may have tag number + tag
96*5113495bSYour Name  * length + atleast 1 byte of datai
97*5113495bSYour Name  * @BSS_INDEX_POS: Position of BSSID index field in Multiple BSSID index tag
98*5113495bSYour Name  * @MIN_VENDOR_TAG_LEN: Minimum length of a vendor specific tag
99*5113495bSYour Name  * @OUI_LEN: OUI + OUI Type + Min DATA
100*5113495bSYour Name  * @ELEM_ID_EXTN_POS: Position of element ID extension in an extension element
101*5113495bSYour Name  * @ELEM_ID_LIST_LEN_POS: Position of length field in list of element IDs
102*5113495bSYour Name  * @ELEM_ID_LIST_POS: Position to the start of element ID list
103*5113495bSYour Name  */
104*5113495bSYour Name #define MBSSID_INDICATOR_POS 2
105*5113495bSYour Name #define MIN_IE_LEN 2
106*5113495bSYour Name #define TAG_LEN_POS 1
107*5113495bSYour Name #define VALID_ELEM_LEAST_LEN 4
108*5113495bSYour Name #define SUBELEMENT_START_POS 3
109*5113495bSYour Name #define MAX_SUBELEM_LEN 252
110*5113495bSYour Name #define PAYLOAD_START_POS 2
111*5113495bSYour Name #define FIXED_LENGTH 36
112*5113495bSYour Name #define CAP_INFO_POS 4
113*5113495bSYour Name #define CAP_INFO_LEN 2
114*5113495bSYour Name #define SUBELEM_DATA_POS_FROM_MBSSID 5
115*5113495bSYour Name #define ID_POS 0
116*5113495bSYour Name #define NONTX_BSSID_CAP_TAG_LEN_POS 3
117*5113495bSYour Name #define VALID_BSS_PROF_LEAST_LEN 4
118*5113495bSYour Name #define SPLIT_PROF_DATA_LEAST_LEN 3
119*5113495bSYour Name #define BSS_INDEX_POS 2
120*5113495bSYour Name #define MIN_VENDOR_TAG_LEN 7
121*5113495bSYour Name #define OUI_LEN 5
122*5113495bSYour Name #define ELEM_ID_EXTN_POS 2
123*5113495bSYour Name #define ELEM_ID_LIST_LEN_POS 3
124*5113495bSYour Name #define ELEM_ID_LIST_POS 4
125*5113495bSYour Name 
126*5113495bSYour Name /* Active dwell time in low span scan mode(NL80211_SCAN_FLAG_LOW_SPAN)
127*5113495bSYour Name  * in msec
128*5113495bSYour Name  */
129*5113495bSYour Name #define LOW_SPAN_ACTIVE_DWELL_TIME 40
130*5113495bSYour Name /* passive dwell time in low span scan mode (NL80211_SCAN_FLAG_LOW_SPAN)
131*5113495bSYour Name  * in msec
132*5113495bSYour Name  */
133*5113495bSYour Name #define LOW_SPAN_PASSIVE_DWELL_TIME 110
134*5113495bSYour Name 
135*5113495bSYour Name /* Min & Max offset from TBTT, after which Scan can start */
136*5113495bSYour Name #define SCAN_START_OFFSET_MIN 26 /* msec */
137*5113495bSYour Name #define SCAN_START_OFFSET_MAX 90 /* msec */
138*5113495bSYour Name 
139*5113495bSYour Name /* forward declaration */
140*5113495bSYour Name struct wlan_objmgr_vdev;
141*5113495bSYour Name struct wlan_objmgr_pdev;
142*5113495bSYour Name struct wlan_objmgr_psoc;
143*5113495bSYour Name 
144*5113495bSYour Name /**
145*5113495bSYour Name  * struct channel_info - BSS channel information
146*5113495bSYour Name  * @chan_freq: channel frequency
147*5113495bSYour Name  * @cfreq0: channel frequency index0
148*5113495bSYour Name  * @cfreq1: channel frequency index1
149*5113495bSYour Name  * @puncture_bitmap: puncture bitmap advertised in beacon
150*5113495bSYour Name  * @priv: channel private information
151*5113495bSYour Name  */
152*5113495bSYour Name struct channel_info {
153*5113495bSYour Name 	uint32_t chan_freq;
154*5113495bSYour Name 	uint32_t cfreq0;
155*5113495bSYour Name 	uint32_t cfreq1;
156*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
157*5113495bSYour Name 	uint16_t puncture_bitmap;
158*5113495bSYour Name #endif
159*5113495bSYour Name 	void *priv;
160*5113495bSYour Name };
161*5113495bSYour Name 
162*5113495bSYour Name /**
163*5113495bSYour Name  * struct ie_list - pointers to various IEs
164*5113495bSYour Name  * @tim:        pointer to tim ie
165*5113495bSYour Name  * @country:    pointer to country ie
166*5113495bSYour Name  * @ssid:       pointer to ssid ie
167*5113495bSYour Name  * @rates:      pointer to supported rates ie
168*5113495bSYour Name  * @xrates:     pointer to extended supported rate ie
169*5113495bSYour Name  * @ds_param:   pointer to ds params
170*5113495bSYour Name  * @csa:        pointer to csa ie
171*5113495bSYour Name  * @xcsa:       pointer to extended csa ie
172*5113495bSYour Name  * @mcst:       pointer to maximum channel switch time ie
173*5113495bSYour Name  * @wpa:        pointer to wpa ie
174*5113495bSYour Name  * @wcn:        pointer to wcn ie
175*5113495bSYour Name  * @rsn:        pointer to rsn ie
176*5113495bSYour Name  * @wps:        pointer to wps ie
177*5113495bSYour Name  * @wmeinfo:    pointer to wmeinfo ie
178*5113495bSYour Name  * @wmeparam:   pointer to wmeparam ie
179*5113495bSYour Name  * @quiet:      pointer to quiet ie
180*5113495bSYour Name  * @htcap:      pointer to htcap ie
181*5113495bSYour Name  * @htinfo:     pointer to htinfo ie
182*5113495bSYour Name  * @athcaps:    pointer to athcaps ie
183*5113495bSYour Name  * @athextcaps: pointer to extended athcaps ie
184*5113495bSYour Name  * @sfa:        pointer to sfa ie
185*5113495bSYour Name  * @vendor:     pointer to vendor ie
186*5113495bSYour Name  * @qbssload:   pointer to qbssload ie
187*5113495bSYour Name  * @wapi:       pointer to wapi ie
188*5113495bSYour Name  * @p2p:        pointer to p2p ie
189*5113495bSYour Name  * @alt_wcn:    pointer to alternate wcn ie
190*5113495bSYour Name  * @extcaps:    pointer to extended caps ie
191*5113495bSYour Name  * @ibssdfs:    pointer to ibssdfs ie
192*5113495bSYour Name  * @sonadv:     pointer to wifi son ie
193*5113495bSYour Name  * @vhtcap:     pointer to vhtcap ie
194*5113495bSYour Name  * @vhtop:      pointer to vhtop ie
195*5113495bSYour Name  * @opmode:     pointer to opmode ie
196*5113495bSYour Name  * @tpe:        array of pointers to transmit power envelope ie
197*5113495bSYour Name  * @cswrp:      pointer to channel switch announcement wrapper ie
198*5113495bSYour Name  * @widebw:     pointer to wide band channel switch sub ie
199*5113495bSYour Name  * @txpwrenvlp: pointer to tx power envelop sub ie
200*5113495bSYour Name  * @hecap:      pointer to hecap ie
201*5113495bSYour Name  * @hecap_6g:   pointer to he 6ghz cap ie
202*5113495bSYour Name  * @srp: pointer to spatial reuse parameter sub extended ie
203*5113495bSYour Name  * @fils_indication: pointer to FILS indication ie
204*5113495bSYour Name  * @esp: pointer to ESP indication ie
205*5113495bSYour Name  * @mbo_oce: pointer to mbo/oce indication ie
206*5113495bSYour Name  * @rnrie: reduced neighbor report IE
207*5113495bSYour Name  * @adaptive_11r: pointer to adaptive 11r IE
208*5113495bSYour Name  * @single_pmk: Pointer to sae single pmk IE
209*5113495bSYour Name  * @rsnxe: Pointer to rsnxe IE
210*5113495bSYour Name  * @ehtcap: pointer to ehtcap ie
211*5113495bSYour Name  * @ehtop: pointer to eht op ie
212*5113495bSYour Name  * @bw_ind: pointer to bandwidth indication element sub ie
213*5113495bSYour Name  * @multi_link_bv: pointer to multi link basic variant IE
214*5113495bSYour Name  * @multi_link_rv: pointer to multi link reconfig IE
215*5113495bSYour Name  * @t2lm: array of pointers to t2lm op ie
216*5113495bSYour Name  * @bwnss_map: pointer to NSS map IE
217*5113495bSYour Name  * @secchanoff: pointer to secondary chan IE
218*5113495bSYour Name  * @mdie: pointer to md IE
219*5113495bSYour Name  * @heop: pointer to HE op IE
220*5113495bSYour Name  * @muedca: pointer to muedca IE
221*5113495bSYour Name  * @extender: pointer to extended IE
222*5113495bSYour Name  * @qcn: pointer to QCN IE
223*5113495bSYour Name  */
224*5113495bSYour Name struct ie_list {
225*5113495bSYour Name 	uint8_t *tim;
226*5113495bSYour Name 	uint8_t *country;
227*5113495bSYour Name 	uint8_t *ssid;
228*5113495bSYour Name 	uint8_t *rates;
229*5113495bSYour Name 	uint8_t *xrates;
230*5113495bSYour Name 	uint8_t *ds_param;
231*5113495bSYour Name 	uint8_t *csa;
232*5113495bSYour Name 	uint8_t *xcsa;
233*5113495bSYour Name 	uint8_t *mcst;
234*5113495bSYour Name 	uint8_t *wpa;
235*5113495bSYour Name 	uint8_t *wcn;
236*5113495bSYour Name 	uint8_t *rsn;
237*5113495bSYour Name 	uint8_t *wps;
238*5113495bSYour Name 	uint8_t *wmeinfo;
239*5113495bSYour Name 	uint8_t *wmeparam;
240*5113495bSYour Name 	uint8_t *quiet;
241*5113495bSYour Name 	uint8_t *htcap;
242*5113495bSYour Name 	uint8_t *htinfo;
243*5113495bSYour Name 	uint8_t *athcaps;
244*5113495bSYour Name 	uint8_t *athextcaps;
245*5113495bSYour Name 	uint8_t *sfa;
246*5113495bSYour Name 	uint8_t *vendor;
247*5113495bSYour Name 	uint8_t *qbssload;
248*5113495bSYour Name 	uint8_t *wapi;
249*5113495bSYour Name 	uint8_t *p2p;
250*5113495bSYour Name 	uint8_t *alt_wcn;
251*5113495bSYour Name 	uint8_t *extcaps;
252*5113495bSYour Name 	uint8_t *ibssdfs;
253*5113495bSYour Name 	uint8_t *sonadv;
254*5113495bSYour Name 	uint8_t *vhtcap;
255*5113495bSYour Name 	uint8_t *vhtop;
256*5113495bSYour Name 	uint8_t *opmode;
257*5113495bSYour Name 	uint8_t *tpe[WLAN_MAX_NUM_TPE_IE];
258*5113495bSYour Name 	uint8_t *cswrp;
259*5113495bSYour Name 	uint8_t *widebw;
260*5113495bSYour Name 	uint8_t *txpwrenvlp;
261*5113495bSYour Name 	uint8_t *bwnss_map;
262*5113495bSYour Name 	uint8_t *secchanoff;
263*5113495bSYour Name 	uint8_t *mdie;
264*5113495bSYour Name 	uint8_t *hecap;
265*5113495bSYour Name 	uint8_t *hecap_6g;
266*5113495bSYour Name 	uint8_t *heop;
267*5113495bSYour Name 	uint8_t *srp;
268*5113495bSYour Name 	uint8_t *fils_indication;
269*5113495bSYour Name 	uint8_t *esp;
270*5113495bSYour Name 	uint8_t *mbo_oce;
271*5113495bSYour Name 	uint8_t *muedca;
272*5113495bSYour Name 	uint8_t *rnrie;
273*5113495bSYour Name 	uint8_t *extender;
274*5113495bSYour Name 	uint8_t *adaptive_11r;
275*5113495bSYour Name 	uint8_t *single_pmk;
276*5113495bSYour Name 	uint8_t *rsnxe;
277*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
278*5113495bSYour Name 	uint8_t *ehtcap;
279*5113495bSYour Name 	uint8_t *ehtop;
280*5113495bSYour Name 	uint8_t *bw_ind;
281*5113495bSYour Name #endif
282*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
283*5113495bSYour Name 	uint8_t *multi_link_bv;
284*5113495bSYour Name 	uint8_t *multi_link_rv;
285*5113495bSYour Name 	uint8_t *t2lm[WLAN_MAX_T2LM_IE];
286*5113495bSYour Name #endif
287*5113495bSYour Name 	uint8_t *qcn;
288*5113495bSYour Name 
289*5113495bSYour Name /*
290*5113495bSYour Name  * For any new IEs in this structure, add handling in
291*5113495bSYour Name  * util_scan_copy_beacon_data API.
292*5113495bSYour Name  */
293*5113495bSYour Name };
294*5113495bSYour Name 
295*5113495bSYour Name enum scan_entry_connection_state {
296*5113495bSYour Name 	SCAN_ENTRY_CON_STATE_NONE,
297*5113495bSYour Name 	SCAN_ENTRY_CON_STATE_AUTH,
298*5113495bSYour Name 	SCAN_ENTRY_CON_STATE_ASSOC
299*5113495bSYour Name };
300*5113495bSYour Name 
301*5113495bSYour Name /**
302*5113495bSYour Name  * struct mlme_info - mlme specific info
303*5113495bSYour Name  * temporarily maintained in scan cache for backward compatibility.
304*5113495bSYour Name  * must be removed as part of umac convergence.
305*5113495bSYour Name  * @bad_ap_time: time when this ap was marked bad
306*5113495bSYour Name  * @status: status
307*5113495bSYour Name  * @rank: rank
308*5113495bSYour Name  * @utility: utility
309*5113495bSYour Name  * @assoc_state: association state
310*5113495bSYour Name  * @chanload: channel load
311*5113495bSYour Name  */
312*5113495bSYour Name struct mlme_info {
313*5113495bSYour Name 	qdf_time_t bad_ap_time;
314*5113495bSYour Name 	uint32_t status;
315*5113495bSYour Name 	uint32_t rank;
316*5113495bSYour Name 	uint32_t utility;
317*5113495bSYour Name 	uint32_t assoc_state;
318*5113495bSYour Name 	uint32_t chanload;
319*5113495bSYour Name };
320*5113495bSYour Name 
321*5113495bSYour Name /**
322*5113495bSYour Name  * struct bss_info - information required to uniquely define a bss
323*5113495bSYour Name  * @freq: freq of operating primary channel
324*5113495bSYour Name  * @ssid: ssid of bss
325*5113495bSYour Name  * @bssid: bssid of bss
326*5113495bSYour Name  */
327*5113495bSYour Name struct bss_info {
328*5113495bSYour Name 	uint32_t freq;
329*5113495bSYour Name 	struct wlan_ssid ssid;
330*5113495bSYour Name 	struct qdf_mac_addr bssid;
331*5113495bSYour Name };
332*5113495bSYour Name 
333*5113495bSYour Name #define SCAN_NODE_ACTIVE_COOKIE 0x1248F842
334*5113495bSYour Name /**
335*5113495bSYour Name  * struct scan_cache_node - Scan cache entry node
336*5113495bSYour Name  * @node: node pointers
337*5113495bSYour Name  * @ref_cnt: ref count if in use
338*5113495bSYour Name  * @cookie: cookie to check if entry is logically active
339*5113495bSYour Name  * @entry: scan entry pointer
340*5113495bSYour Name  */
341*5113495bSYour Name struct scan_cache_node {
342*5113495bSYour Name 	qdf_list_node_t node;
343*5113495bSYour Name 	qdf_atomic_t ref_cnt;
344*5113495bSYour Name 	uint32_t cookie;
345*5113495bSYour Name 	struct scan_cache_entry *entry;
346*5113495bSYour Name };
347*5113495bSYour Name 
348*5113495bSYour Name /**
349*5113495bSYour Name  * struct security_info - Scan cache security info
350*5113495bSYour Name  * @authmodeset: auth mode
351*5113495bSYour Name  * @key_mgmt: key management
352*5113495bSYour Name  * @ucastcipherset: unicast cipher set
353*5113495bSYour Name  * @mcastcipherset: multicast cipher set
354*5113495bSYour Name  * @mgmtcipherset: mgmt cipher set
355*5113495bSYour Name  * @rsn_caps: rsn caps of scan entry
356*5113495bSYour Name  */
357*5113495bSYour Name struct security_info {
358*5113495bSYour Name 	uint32_t authmodeset;
359*5113495bSYour Name 	uint32_t key_mgmt;
360*5113495bSYour Name 	uint32_t ucastcipherset;
361*5113495bSYour Name 	uint32_t mcastcipherset;
362*5113495bSYour Name 	uint32_t mgmtcipherset;
363*5113495bSYour Name 	uint16_t rsn_caps;
364*5113495bSYour Name };
365*5113495bSYour Name 
366*5113495bSYour Name /**
367*5113495bSYour Name  * struct scan_mbssid_info - Scan mbssid information
368*5113495bSYour Name  * @profile_num: profile number
369*5113495bSYour Name  * @profile_count: total profile count
370*5113495bSYour Name  * @trans_bssid: TX BSSID address
371*5113495bSYour Name  * @non_trans_bssid: non TX BSSID address
372*5113495bSYour Name  * @split_profile: Indicates if next MBSSID tag has the other part
373*5113495bSYour Name  *                 of the non tx profile
374*5113495bSYour Name  * @prof_residue: Set prof_residue to true, if the first non TX
375*5113495bSYour Name  *                     profile of the subsequent MBSSID IE does not contain
376*5113495bSYour Name  *                     nontx BSSID Capability as the 1st tag of the payload
377*5113495bSYour Name  *                     of nontx profile
378*5113495bSYour Name  * @split_prof_continue: Indicates if we are evaluating the fragmented part
379*5113495bSYour Name  *                      present in the subsequent MBSSID tag
380*5113495bSYour Name  * @skip_bssid_copy: For the 2nd fragmented part of the split profile
381*5113495bSYour Name  *                  skip copying bssid if BSSID index is already found
382*5113495bSYour Name  *                  in the previous part of split profile
383*5113495bSYour Name  */
384*5113495bSYour Name struct scan_mbssid_info {
385*5113495bSYour Name 	uint8_t profile_num;
386*5113495bSYour Name 	uint8_t profile_count;
387*5113495bSYour Name 	uint8_t trans_bssid[QDF_MAC_ADDR_SIZE];
388*5113495bSYour Name 	uint8_t non_trans_bssid[QDF_MAC_ADDR_SIZE];
389*5113495bSYour Name 	bool split_profile;
390*5113495bSYour Name 	bool prof_residue;
391*5113495bSYour Name 	bool split_prof_continue;
392*5113495bSYour Name 	bool skip_bssid_copy;
393*5113495bSYour Name };
394*5113495bSYour Name 
395*5113495bSYour Name /**
396*5113495bSYour Name  * enum nontx_profile_reasoncode - Reason codes based on which the decision
397*5113495bSYour Name  * needs to be taken whether to continue with the on going nontx profile or
398*5113495bSYour Name  * move to the next one
399*5113495bSYour Name  * @VALID_NONTX_PROF: Continue with the on-going profile
400*5113495bSYour Name  * @INVALID_SPLIT_PROF: Invalid data seen in the split profile
401*5113495bSYour Name  * @INVALID_NONTX_PROF: Invalid data in a non split profile
402*5113495bSYour Name  */
403*5113495bSYour Name enum nontx_profile_reasoncode {
404*5113495bSYour Name 	VALID_NONTX_PROF = 0,
405*5113495bSYour Name 	INVALID_SPLIT_PROF = 0x1,
406*5113495bSYour Name 	INVALID_NONTX_PROF = 0x2
407*5113495bSYour Name };
408*5113495bSYour Name 
409*5113495bSYour Name /**
410*5113495bSYour Name  * struct non_inheritance_ie - Non inheritance tag information
411*5113495bSYour Name  * @list_len: Length of element ID list
412*5113495bSYour Name  * @extn_len: Length of element ID extension list
413*5113495bSYour Name  * @non_inherit: Flag to indicate if any noninheritance tag present
414*5113495bSYour Name  *              in the non tx BSSID profile
415*5113495bSYour Name  * @non_inh_ie_found: Flag to indicate if the noninheritance tag found
416*5113495bSYour Name  *                   from non tx BSSID profile present in the tx profile
417*5113495bSYour Name  *                   so that the copy of that IE can be skipped.
418*5113495bSYour Name  */
419*5113495bSYour Name struct non_inheritance_ie {
420*5113495bSYour Name 	uint8_t list_len;
421*5113495bSYour Name 	uint8_t extn_len;
422*5113495bSYour Name 	bool non_inherit;
423*5113495bSYour Name 	bool non_inh_ie_found;
424*5113495bSYour Name };
425*5113495bSYour Name 
426*5113495bSYour Name #define TBTT_BSS_PARAM_MBSSID_BIT      0x04
427*5113495bSYour Name #define TBTT_BSS_PARAM_TRANS_BSSID_BIT 0x08
428*5113495bSYour Name #define TBTT_BSS_PARAM_MBSSID_TX_MASK  (TBTT_BSS_PARAM_MBSSID_BIT |\
429*5113495bSYour Name 					TBTT_BSS_PARAM_TRANS_BSSID_BIT)
430*5113495bSYour Name #define TBTT_BSS_PARAM_MBSSID_NONTX_MASK TBTT_BSS_PARAM_MBSSID_BIT
431*5113495bSYour Name /**
432*5113495bSYour Name  * struct rnr_bss_info - Reduced Neighbor Report BSS information
433*5113495bSYour Name  * @neighbor_ap_tbtt_offset: Neighbor AP TBTT offset
434*5113495bSYour Name  * @channel_number: channel number
435*5113495bSYour Name  * @operating_class: operting class
436*5113495bSYour Name  * @bssid: BSS MAC address
437*5113495bSYour Name  * @short_ssid: short ssid
438*5113495bSYour Name  * @bss_params: BSS parameters
439*5113495bSYour Name  * @psd_20mhz: 20MHz power spectral density
440*5113495bSYour Name  * @mld_info_valid: valid MLD info
441*5113495bSYour Name  * @mld_info: MLD information
442*5113495bSYour Name  */
443*5113495bSYour Name struct rnr_bss_info {
444*5113495bSYour Name 	uint8_t neighbor_ap_tbtt_offset;
445*5113495bSYour Name 	uint32_t channel_number;
446*5113495bSYour Name 	uint32_t operating_class;
447*5113495bSYour Name 	struct qdf_mac_addr bssid;
448*5113495bSYour Name 	uint32_t short_ssid;
449*5113495bSYour Name 	uint8_t bss_params;
450*5113495bSYour Name 	uint8_t psd_20mhz;
451*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
452*5113495bSYour Name 	bool mld_info_valid;
453*5113495bSYour Name 	struct rnr_mld_info mld_info;
454*5113495bSYour Name #endif
455*5113495bSYour Name };
456*5113495bSYour Name 
457*5113495bSYour Name /**
458*5113495bSYour Name  * struct neighbor_ap_info_field - Neighbor information field
459*5113495bSYour Name  * @tbtt_header: TBTT information header
460*5113495bSYour Name  * @operting_class: operating class
461*5113495bSYour Name  * @channel_number: channel number
462*5113495bSYour Name  */
463*5113495bSYour Name struct neighbor_ap_info_field {
464*5113495bSYour Name 	struct tbtt_information_header tbtt_header;
465*5113495bSYour Name 	uint8_t operting_class;
466*5113495bSYour Name 	uint8_t channel_number;
467*5113495bSYour Name };
468*5113495bSYour Name 
469*5113495bSYour Name /**
470*5113495bSYour Name  * enum tbtt_information_field - TBTT information field
471*5113495bSYour Name  * @TBTT_NEIGHBOR_AP_OFFSET_ONLY: TBTT information field type
472*5113495bSYour Name  * @TBTT_NEIGHBOR_AP_BSS_PARAM: neighbor AP and bss param
473*5113495bSYour Name  * @TBTT_NEIGHBOR_AP_SHORTSSID: neighbor AP and Short ssid
474*5113495bSYour Name  * @TBTT_NEIGHBOR_AP_S_SSID_BSS_PARAM: neighbor AP, short ssid and bss param
475*5113495bSYour Name  * @TBTT_NEIGHBOR_AP_BSSID: neighbor AP and bssid
476*5113495bSYour Name  * @TBTT_NEIGHBOR_AP_BSSID_BSS_PARAM: neighbor AP, bssid and bss param
477*5113495bSYour Name  * @TBTT_NEIGHBOR_AP_BSSID_BSS_PARAM_20MHZ_PSD: neighbor AP, bssid and bss
478*5113495bSYour Name  * param and 20MHz PSD
479*5113495bSYour Name  * @TBTT_NEIGHBOR_AP_BSSSID_S_SSID: neighbor AP, bssid and short ssid
480*5113495bSYour Name  * @TBTT_NEIGHBOR_AP_BSSID_S_SSID_BSS_PARAM: neighbor AP, bssid, short ssid
481*5113495bSYour Name  * and bss params
482*5113495bSYour Name  * @TBTT_NEIGHBOR_AP_BSSID_S_SSID_BSS_PARAM_20MHZ_PSD: neighbor AP, bssid,
483*5113495bSYour Name  * short ssid, bss params and 20MHz PSD
484*5113495bSYour Name  * bssid, short ssid, bss params, 20MHz PSD and MLD param
485*5113495bSYour Name  * @TBTT_NEIGHBOR_AP_BSSID_S_SSID_BSS_PARAM_20MHZ_PSD_MLD_PARAM:
486*5113495bSYour Name  * @TBTT_NEIGHBOR_AP_PARAM_AFTER_LAST: This is to calculate the max supported
487*5113495bSYour Name  * param length and maintain it in TBTT_NEIGHBOR_AP_PARAM_MAX
488*5113495bSYour Name  * @TBTT_NEIGHBOR_AP_PARAM_MAX: This is to track the max supported param length
489*5113495bSYour Name  */
490*5113495bSYour Name enum tbtt_information_field {
491*5113495bSYour Name 	TBTT_NEIGHBOR_AP_OFFSET_ONLY = 1,
492*5113495bSYour Name 	TBTT_NEIGHBOR_AP_BSS_PARAM = 2,
493*5113495bSYour Name 	TBTT_NEIGHBOR_AP_SHORTSSID = 5,
494*5113495bSYour Name 	TBTT_NEIGHBOR_AP_S_SSID_BSS_PARAM = 6,
495*5113495bSYour Name 	TBTT_NEIGHBOR_AP_BSSID = 7,
496*5113495bSYour Name 	TBTT_NEIGHBOR_AP_BSSID_BSS_PARAM = 8,
497*5113495bSYour Name 	TBTT_NEIGHBOR_AP_BSSID_BSS_PARAM_20MHZ_PSD = 9,
498*5113495bSYour Name 	TBTT_NEIGHBOR_AP_BSSSID_S_SSID = 11,
499*5113495bSYour Name 	TBTT_NEIGHBOR_AP_BSSID_S_SSID_BSS_PARAM = 12,
500*5113495bSYour Name 	TBTT_NEIGHBOR_AP_BSSID_S_SSID_BSS_PARAM_20MHZ_PSD = 13,
501*5113495bSYour Name 	TBTT_NEIGHBOR_AP_BSSID_S_SSID_BSS_PARAM_20MHZ_PSD_MLD_PARAM = 16,
502*5113495bSYour Name 
503*5113495bSYour Name 	/* keep last */
504*5113495bSYour Name 	TBTT_NEIGHBOR_AP_PARAM_AFTER_LAST,
505*5113495bSYour Name 	TBTT_NEIGHBOR_AP_PARAM_MAX = TBTT_NEIGHBOR_AP_PARAM_AFTER_LAST - 1,
506*5113495bSYour Name };
507*5113495bSYour Name 
508*5113495bSYour Name /**
509*5113495bSYour Name  * struct reduced_neighbor_report - Reduced Neighbor Report
510*5113495bSYour Name  * @count: number of RNR info
511*5113495bSYour Name  * @bss_info: RNR BSS Information
512*5113495bSYour Name  */
513*5113495bSYour Name struct reduced_neighbor_report {
514*5113495bSYour Name 	uint8_t count;
515*5113495bSYour Name 	struct rnr_bss_info bss_info[MAX_RNR_BSS];
516*5113495bSYour Name };
517*5113495bSYour Name 
518*5113495bSYour Name #define SCAN_SECURITY_TYPE_WEP 0x01
519*5113495bSYour Name #define SCAN_SECURITY_TYPE_WPA 0x02
520*5113495bSYour Name #define SCAN_SECURITY_TYPE_WAPI 0x04
521*5113495bSYour Name #define SCAN_SECURITY_TYPE_RSN 0x08
522*5113495bSYour Name 
523*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
524*5113495bSYour Name #define MLD_MAX_LINKS 4
525*5113495bSYour Name 
526*5113495bSYour Name /**
527*5113495bSYour Name  * struct partner_link_info: Partner link information of an ML
528*5113495bSYour Name  * @link_addr: BSSID of the link
529*5113495bSYour Name  * @freq: center frequency in MHz
530*5113495bSYour Name  * @cfreq2: center frequency of the secondary channel in MHz
531*5113495bSYour Name  * @link_id: Link id advertised by the AP
532*5113495bSYour Name  * @csa_ie: Pointer to CSA IE
533*5113495bSYour Name  * @ecsa_ie: Pointer to eCSA IE
534*5113495bSYour Name  * @max_cst_ie: Pointer to Max Channel Switch Time IE
535*5113495bSYour Name  * @is_valid_link: The partner link can be used if true
536*5113495bSYour Name  * @op_class: Operating class
537*5113495bSYour Name  */
538*5113495bSYour Name struct partner_link_info {
539*5113495bSYour Name 	struct qdf_mac_addr link_addr;
540*5113495bSYour Name 	uint16_t freq;
541*5113495bSYour Name 	uint16_t cfreq2;
542*5113495bSYour Name 	uint8_t link_id;
543*5113495bSYour Name 	const uint8_t *csa_ie;
544*5113495bSYour Name 	const uint8_t *ecsa_ie;
545*5113495bSYour Name 	const uint8_t *max_cst_ie;
546*5113495bSYour Name 	bool is_valid_link;
547*5113495bSYour Name 	uint8_t op_class;
548*5113495bSYour Name };
549*5113495bSYour Name 
550*5113495bSYour Name /**
551*5113495bSYour Name  * struct ml_info: Multi link formation of a 11be beacon
552*5113495bSYour Name  * @mld_mac_addr: MLD mac address
553*5113495bSYour Name  * @num_links: Number of links supported by ML AP
554*5113495bSYour Name  * @self_link_id: Link id of the scan entry
555*5113495bSYour Name  * @link_info: Array containing partner links information
556*5113495bSYour Name  * @ml_bss_score: Multi link BSS score
557*5113495bSYour Name  * @link_score: MLO link score
558*5113495bSYour Name  */
559*5113495bSYour Name struct ml_info {
560*5113495bSYour Name 	struct qdf_mac_addr mld_mac_addr;
561*5113495bSYour Name 	uint8_t num_links;
562*5113495bSYour Name 	uint8_t self_link_id;
563*5113495bSYour Name 	struct partner_link_info link_info[MLD_MAX_LINKS - 1];
564*5113495bSYour Name 	uint16_t ml_bss_score;
565*5113495bSYour Name 	uint16_t link_score;
566*5113495bSYour Name };
567*5113495bSYour Name 
568*5113495bSYour Name /**
569*5113495bSYour Name  * enum number_of_partner_link: Enumeration for number of partner links
570*5113495bSYour Name  * @NO_LINK:    Default value
571*5113495bSYour Name  * @ONE_LINK:   Single Link
572*5113495bSYour Name  * @TWO_LINK:   2 Links
573*5113495bSYour Name  * @THREE_LINK: 3 Links
574*5113495bSYour Name  */
575*5113495bSYour Name enum number_of_partner_link {
576*5113495bSYour Name 	NO_LINK,
577*5113495bSYour Name 	ONE_LINK,
578*5113495bSYour Name 	TWO_LINK,
579*5113495bSYour Name 	THREE_LINK,
580*5113495bSYour Name };
581*5113495bSYour Name #endif
582*5113495bSYour Name 
583*5113495bSYour Name /**
584*5113495bSYour Name  * struct scan_cache_entry: structure containing scan entry
585*5113495bSYour Name  * @frm_subtype: updated from beacon/probe
586*5113495bSYour Name  * @bssid: bssid
587*5113495bSYour Name  * @mac_addr: mac address
588*5113495bSYour Name  * @ssid: ssid
589*5113495bSYour Name  * @is_hidden_ssid: is AP having hidden ssid.
590*5113495bSYour Name  * @security_type: security supported
591*5113495bSYour Name  * @seq_num: sequence number
592*5113495bSYour Name  * @phy_mode: Phy mode of the AP
593*5113495bSYour Name  * @avg_rssi: Average RSSI of the AP
594*5113495bSYour Name  * @rssi_raw: The rssi of the last beacon/probe received
595*5113495bSYour Name  * @snr: The snr of the last beacon/probe received
596*5113495bSYour Name  * @avg_snr: Average SNR of the AP
597*5113495bSYour Name  * @bcn_int: Beacon interval of the AP
598*5113495bSYour Name  * @cap_info: Capability of the AP
599*5113495bSYour Name  * @tsf_info: TSF info
600*5113495bSYour Name  * @erp: erp info
601*5113495bSYour Name  * @dtim_period: dtime period
602*5113495bSYour Name  * @air_time_fraction: Air time fraction from ESP param
603*5113495bSYour Name  * @qbss_chan_load: Qbss channel load
604*5113495bSYour Name  * @nss: supported NSS information
605*5113495bSYour Name  * @is_p2p: is P2P entry
606*5113495bSYour Name  * @adaptive_11r_ap: flag to check if AP supports adaptive 11r
607*5113495bSYour Name  * @scan_entry_time: boottime in microsec when last beacon/probe is received
608*5113495bSYour Name  * @rssi_timestamp: boottime in microsec when RSSI was updated
609*5113495bSYour Name  * @hidden_ssid_timestamp: boottime in microsec when hidden
610*5113495bSYour Name  *                         ssid was received
611*5113495bSYour Name  * @mbssid_info: Multi bssid information
612*5113495bSYour Name  * @rnr: Reduced neighbor report information
613*5113495bSYour Name  * @channel: channel info on which AP is present
614*5113495bSYour Name  * @channel_mismatch: if channel received in metadata
615*5113495bSYour Name  *                    doesn't match the one in beacon
616*5113495bSYour Name  * @mlme_info: Mlme info, this will be updated by MLME for the scan entry
617*5113495bSYour Name  * @tsf_delta: TSF delta
618*5113495bSYour Name  * @bss_score: bss score calculated on basis of RSSI/caps etc.
619*5113495bSYour Name  * @neg_sec_info: negotiated security info
620*5113495bSYour Name  * @per_chain_rssi: per chain RSSI value received.
621*5113495bSYour Name  * @boottime_ns: boottime in ns.
622*5113495bSYour Name  * @rrm_parent_tsf: RRM parent tsf
623*5113495bSYour Name  * @alt_wcn_ie: alternate WCN IE
624*5113495bSYour Name  * @ie_list: IE list pointers
625*5113495bSYour Name  * @raw_frame: contain raw frame and the length of the raw frame
626*5113495bSYour Name  * @pdev_id: pdev id
627*5113495bSYour Name  * @ml_info: Multi link information
628*5113495bSYour Name  * @mlo_max_recom_simult_links: Max recommended simultaneous link
629*5113495bSYour Name  * @non_intersected_phymode: Non intersected phy mode of the AP
630*5113495bSYour Name  */
631*5113495bSYour Name struct scan_cache_entry {
632*5113495bSYour Name 	uint8_t frm_subtype;
633*5113495bSYour Name 	struct qdf_mac_addr bssid;
634*5113495bSYour Name 	struct qdf_mac_addr mac_addr;
635*5113495bSYour Name 	struct wlan_ssid ssid;
636*5113495bSYour Name 	bool is_hidden_ssid;
637*5113495bSYour Name 	uint8_t security_type;
638*5113495bSYour Name 	uint16_t seq_num;
639*5113495bSYour Name 	enum wlan_phymode phy_mode;
640*5113495bSYour Name 	int32_t avg_rssi;
641*5113495bSYour Name 	int8_t rssi_raw;
642*5113495bSYour Name 	uint8_t snr;
643*5113495bSYour Name 	uint32_t avg_snr;
644*5113495bSYour Name 	uint16_t bcn_int;
645*5113495bSYour Name 	union wlan_capability cap_info;
646*5113495bSYour Name 	union {
647*5113495bSYour Name 		uint8_t data[8];
648*5113495bSYour Name 		uint64_t tsf;
649*5113495bSYour Name 	} tsf_info;
650*5113495bSYour Name 	uint8_t erp;
651*5113495bSYour Name 	uint8_t dtim_period;
652*5113495bSYour Name 	uint8_t air_time_fraction;
653*5113495bSYour Name 	uint8_t qbss_chan_load;
654*5113495bSYour Name 	uint8_t nss;
655*5113495bSYour Name 	bool is_p2p;
656*5113495bSYour Name 	bool adaptive_11r_ap;
657*5113495bSYour Name 	qdf_time_t scan_entry_time;
658*5113495bSYour Name 	qdf_time_t rssi_timestamp;
659*5113495bSYour Name 	qdf_time_t hidden_ssid_timestamp;
660*5113495bSYour Name 	struct scan_mbssid_info mbssid_info;
661*5113495bSYour Name 	struct reduced_neighbor_report rnr;
662*5113495bSYour Name 	struct channel_info channel;
663*5113495bSYour Name 	bool channel_mismatch;
664*5113495bSYour Name 	struct mlme_info mlme_info;
665*5113495bSYour Name 	uint32_t tsf_delta;
666*5113495bSYour Name 	uint32_t bss_score;
667*5113495bSYour Name 	struct security_info neg_sec_info;
668*5113495bSYour Name 	uint8_t per_chain_rssi[WLAN_MGMT_TXRX_HOST_MAX_ANTENNA];
669*5113495bSYour Name 	uint64_t boottime_ns;
670*5113495bSYour Name 	uint32_t rrm_parent_tsf;
671*5113495bSYour Name 	struct element_info alt_wcn_ie;
672*5113495bSYour Name 	struct ie_list ie_list;
673*5113495bSYour Name 	struct element_info raw_frame;
674*5113495bSYour Name 	/*
675*5113495bSYour Name 	 * This is added temporarily for 6GHz channel to freq conversion
676*5113495bSYour Name 	 * to get pdev wherever it requores to convert frequency to
677*5113495bSYour Name 	 * channel as regulatory apis requires pdev as argument
678*5113495bSYour Name 	 */
679*5113495bSYour Name 	uint8_t pdev_id;
680*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
681*5113495bSYour Name 	struct ml_info ml_info;
682*5113495bSYour Name 	uint8_t mlo_max_recom_simult_links;
683*5113495bSYour Name #endif
684*5113495bSYour Name 	enum wlan_phymode non_intersected_phymode;
685*5113495bSYour Name };
686*5113495bSYour Name 
687*5113495bSYour Name #define MAX_FAVORED_BSSID 16
688*5113495bSYour Name #define MAX_ALLOWED_SSID_LIST 4
689*5113495bSYour Name 
690*5113495bSYour Name #define WLAN_SCAN_FILTER_NUM_SSID 5
691*5113495bSYour Name #define WLAN_SCAN_FILTER_NUM_BSSID 5
692*5113495bSYour Name 
693*5113495bSYour Name #define REALM_HASH_LEN 2
694*5113495bSYour Name #define CACHE_IDENTIFIER_LEN 2
695*5113495bSYour Name #define HESSID_LEN 6
696*5113495bSYour Name 
697*5113495bSYour Name #ifdef WLAN_FEATURE_FILS_SK
698*5113495bSYour Name /**
699*5113495bSYour Name  * struct fils_filter_info: FILS info present in scan filter
700*5113495bSYour Name  * @realm_check: whether realm check is required
701*5113495bSYour Name  * @fils_realm: realm hash value
702*5113495bSYour Name  * @security_type: type of security supported
703*5113495bSYour Name  */
704*5113495bSYour Name struct fils_filter_info {
705*5113495bSYour Name 	bool realm_check;
706*5113495bSYour Name 	uint8_t fils_realm[REALM_HASH_LEN];
707*5113495bSYour Name 	uint8_t security_type;
708*5113495bSYour Name };
709*5113495bSYour Name #endif
710*5113495bSYour Name 
711*5113495bSYour Name /*
712*5113495bSYour Name  * struct filter_arg: Opaque pointer for the filter arguments
713*5113495bSYour Name  */
714*5113495bSYour Name struct filter_arg;
715*5113495bSYour Name typedef struct filter_arg *bss_filter_arg_t;
716*5113495bSYour Name 
717*5113495bSYour Name /**
718*5113495bSYour Name  * enum dot11_mode_filter - Filter APs according to dot11mode
719*5113495bSYour Name  * @ALLOW_ALL: ignore check
720*5113495bSYour Name  * @ALLOW_11N_ONLY: allow only 11n AP
721*5113495bSYour Name  * @ALLOW_11AC_ONLY: allow only 11ac AP
722*5113495bSYour Name  * @ALLOW_11AX_ONLY: allow only 11ax AP
723*5113495bSYour Name  * @ALLOW_11BE_ONLY: allow only 11be AP
724*5113495bSYour Name  */
725*5113495bSYour Name enum dot11_mode_filter {
726*5113495bSYour Name 	ALLOW_ALL,
727*5113495bSYour Name 	ALLOW_11N_ONLY,
728*5113495bSYour Name 	ALLOW_11AC_ONLY,
729*5113495bSYour Name 	ALLOW_11AX_ONLY,
730*5113495bSYour Name 	ALLOW_11BE_ONLY,
731*5113495bSYour Name };
732*5113495bSYour Name 
733*5113495bSYour Name /**
734*5113495bSYour Name  * struct scan_filter: scan filter
735*5113495bSYour Name  * @enable_adaptive_11r:    flag to check if adaptive 11r ini is enabled
736*5113495bSYour Name  * @rrm_measurement_filter: For measurement reports.if set, only SSID, BSSID
737*5113495bSYour Name  *                          and channel is considered for filtering.
738*5113495bSYour Name  * @ignore_pmf_cap: Ignore pmf capability match
739*5113495bSYour Name  * @ignore_auth_enc_type: Ignore enc type if
740*5113495bSYour Name  *                        this is set (For WPS/OSEN connection)
741*5113495bSYour Name  * @ignore_nol_chan: Ignore entry with channel in the NOL list
742*5113495bSYour Name  * @ignore_6ghz_channel: ignore 6Ghz channels
743*5113495bSYour Name  * @match_mld_addr: Flag to match mld addr of scan entry
744*5113495bSYour Name  * @age_threshold: If set return entry which are newer than the age_threshold
745*5113495bSYour Name  * @num_of_bssid: number of bssid passed
746*5113495bSYour Name  * @num_of_ssid: number of ssid
747*5113495bSYour Name  * @num_of_channels: number of  channels
748*5113495bSYour Name  * @bss_type: bss type IBSS or BSS or ANY
749*5113495bSYour Name  * @pmf_cap: Pmf capability
750*5113495bSYour Name  * @dot11mode: Filter APs based upon dot11mode
751*5113495bSYour Name  * @rssi_threshold: AP having RSSI greater than
752*5113495bSYour Name  *                  rssi threasholed (ignored if set 0)
753*5113495bSYour Name  * @mobility_domain: Mobility domain for 11r
754*5113495bSYour Name  * @authmodeset: auth mode
755*5113495bSYour Name  * @key_mgmt: key management
756*5113495bSYour Name  * @ucastcipherset: unicast cipher set
757*5113495bSYour Name  * @mcastcipherset: multicast cipher set
758*5113495bSYour Name  * @mgmtcipherset: mgmt cipher set
759*5113495bSYour Name  * @fils_scan_filter: FILS info
760*5113495bSYour Name  * @bssid_hint: Mac address of bssid_hint
761*5113495bSYour Name  * @bssid_list: bssid list
762*5113495bSYour Name  * @ssid_list: ssid list
763*5113495bSYour Name  * @chan_freq_list: channel frequency list, frequency unit: MHz
764*5113495bSYour Name  * @match_security_func: Function pointer to custom security filter
765*5113495bSYour Name  * @match_security_func_arg: Function argument to custom security filter
766*5113495bSYour Name  * @ccx_validate_bss: Function pointer to custom bssid filter
767*5113495bSYour Name  * @ccx_validate_bss_arg: Function argument to custom bssid filter
768*5113495bSYour Name  * @band_bitmap: Allowed band bit map, BIT0: 2G, BIT1: 5G, BIT2: 6G
769*5113495bSYour Name  * @mld_addr: MLD addr to match if @match_mld_addr is set to true.
770*5113495bSYour Name  */
771*5113495bSYour Name struct scan_filter {
772*5113495bSYour Name 	uint8_t enable_adaptive_11r:1,
773*5113495bSYour Name 		rrm_measurement_filter:1,
774*5113495bSYour Name 		ignore_pmf_cap:1,
775*5113495bSYour Name 		ignore_auth_enc_type:1,
776*5113495bSYour Name 		ignore_nol_chan:1,
777*5113495bSYour Name 		ignore_6ghz_channel:1,
778*5113495bSYour Name 		match_mld_addr:1;
779*5113495bSYour Name 	qdf_time_t age_threshold;
780*5113495bSYour Name 	uint8_t num_of_bssid;
781*5113495bSYour Name 	uint8_t num_of_ssid;
782*5113495bSYour Name 	uint16_t num_of_channels;
783*5113495bSYour Name 	enum wlan_bss_type bss_type;
784*5113495bSYour Name 	enum wlan_pmf_cap pmf_cap;
785*5113495bSYour Name 	enum dot11_mode_filter dot11mode;
786*5113495bSYour Name 	uint8_t rssi_threshold;
787*5113495bSYour Name 	uint32_t mobility_domain;
788*5113495bSYour Name 	uint32_t authmodeset;
789*5113495bSYour Name 	uint32_t key_mgmt;
790*5113495bSYour Name 	uint32_t ucastcipherset;
791*5113495bSYour Name 	uint32_t mcastcipherset;
792*5113495bSYour Name 	uint32_t mgmtcipherset;
793*5113495bSYour Name #ifdef WLAN_FEATURE_FILS_SK
794*5113495bSYour Name 	struct fils_filter_info fils_scan_filter;
795*5113495bSYour Name #endif
796*5113495bSYour Name 	struct qdf_mac_addr bssid_hint;
797*5113495bSYour Name 	/* Variable params list */
798*5113495bSYour Name 	struct qdf_mac_addr bssid_list[WLAN_SCAN_FILTER_NUM_BSSID];
799*5113495bSYour Name 	struct wlan_ssid ssid_list[WLAN_SCAN_FILTER_NUM_SSID];
800*5113495bSYour Name 	qdf_freq_t chan_freq_list[NUM_CHANNELS];
801*5113495bSYour Name 	bool (*match_security_func)(void *, struct scan_cache_entry *);
802*5113495bSYour Name 	bss_filter_arg_t match_security_func_arg;
803*5113495bSYour Name 	bool (*ccx_validate_bss)(void *, struct scan_cache_entry *, int);
804*5113495bSYour Name 	bss_filter_arg_t ccx_validate_bss_arg;
805*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
806*5113495bSYour Name 	uint32_t band_bitmap;
807*5113495bSYour Name 	struct qdf_mac_addr mld_addr;
808*5113495bSYour Name #endif
809*5113495bSYour Name };
810*5113495bSYour Name 
811*5113495bSYour Name /**
812*5113495bSYour Name  * enum scan_disable_reason - scan enable/disable reason
813*5113495bSYour Name  * @REASON_SUSPEND: reason is suspend
814*5113495bSYour Name  * @REASON_SYSTEM_DOWN: reason is system going down
815*5113495bSYour Name  * @REASON_USER_SPACE: reason is user space initiated
816*5113495bSYour Name  * @REASON_VDEV_DOWN: reason is vdev going down
817*5113495bSYour Name  */
818*5113495bSYour Name enum scan_disable_reason {
819*5113495bSYour Name 	REASON_SUSPEND  = 0x1,
820*5113495bSYour Name 	REASON_SYSTEM_DOWN = 0x2,
821*5113495bSYour Name 	REASON_USER_SPACE = 0x4,
822*5113495bSYour Name 	REASON_VDEV_DOWN = 0x8,
823*5113495bSYour Name };
824*5113495bSYour Name 
825*5113495bSYour Name /**
826*5113495bSYour Name  * enum scan_priority - scan priority definitions
827*5113495bSYour Name  * @SCAN_PRIORITY_VERY_LOW: very low priority
828*5113495bSYour Name  * @SCAN_PRIORITY_LOW: low scan priority
829*5113495bSYour Name  * @SCAN_PRIORITY_MEDIUM: medium priority
830*5113495bSYour Name  * @SCAN_PRIORITY_HIGH: high priority
831*5113495bSYour Name  * @SCAN_PRIORITY_VERY_HIGH: very high priority
832*5113495bSYour Name  * @SCAN_PRIORITY_COUNT: number of priorities supported
833*5113495bSYour Name  */
834*5113495bSYour Name enum scan_priority {
835*5113495bSYour Name 	SCAN_PRIORITY_VERY_LOW,
836*5113495bSYour Name 	SCAN_PRIORITY_LOW,
837*5113495bSYour Name 	SCAN_PRIORITY_MEDIUM,
838*5113495bSYour Name 	SCAN_PRIORITY_HIGH,
839*5113495bSYour Name 	SCAN_PRIORITY_VERY_HIGH,
840*5113495bSYour Name 	SCAN_PRIORITY_COUNT,
841*5113495bSYour Name };
842*5113495bSYour Name 
843*5113495bSYour Name /**
844*5113495bSYour Name  * enum scan_phy_mode - phymode used for scan
845*5113495bSYour Name  * @SCAN_PHY_MODE_11A: 11a mode
846*5113495bSYour Name  * @SCAN_PHY_MODE_11G: 11g mode
847*5113495bSYour Name  * @SCAN_PHY_MODE_11B: 11b mode
848*5113495bSYour Name  * @SCAN_PHY_MODE_11GONLY: 11g only mode
849*5113495bSYour Name  * @SCAN_PHY_MODE_11NA_HT20: 11na ht20 mode
850*5113495bSYour Name  * @SCAN_PHY_MODE_11NG_HT20: 11ng ht20 mode
851*5113495bSYour Name  * @SCAN_PHY_MODE_11NA_HT40: 11na ht40 mode
852*5113495bSYour Name  * @SCAN_PHY_MODE_11NG_HT40: 11ng ht40 mode
853*5113495bSYour Name  * @SCAN_PHY_MODE_11AC_VHT20: 11ac vht20 mode
854*5113495bSYour Name  * @SCAN_PHY_MODE_11AC_VHT40: 11ac vht40 mode
855*5113495bSYour Name  * @SCAN_PHY_MODE_11AC_VHT80: 11ac vht80 mode
856*5113495bSYour Name  * @SCAN_PHY_MODE_11AC_VHT20_2G: 2GHz 11ac vht20 mode
857*5113495bSYour Name  * @SCAN_PHY_MODE_11AC_VHT40_2G: 2GHz 11ac vht40 mode
858*5113495bSYour Name  * @SCAN_PHY_MODE_11AC_VHT80_2G: 2GHz 11ac vht80 mode
859*5113495bSYour Name  * @SCAN_PHY_MODE_11AC_VHT80_80: 11ac vht 80+80 mode
860*5113495bSYour Name  * @SCAN_PHY_MODE_11AC_VHT160: 11ac vht160 mode
861*5113495bSYour Name  * @SCAN_PHY_MODE_11AX_HE20: 11ax he20 mode
862*5113495bSYour Name  * @SCAN_PHY_MODE_11AX_HE40: 11ax he40 mode
863*5113495bSYour Name  * @SCAN_PHY_MODE_11AX_HE80: 11ax he80 mode
864*5113495bSYour Name  * @SCAN_PHY_MODE_11AX_HE80_80: 11ax he80+80 mode
865*5113495bSYour Name  * @SCAN_PHY_MODE_11AX_HE160: 11ax he160 mode
866*5113495bSYour Name  * @SCAN_PHY_MODE_11AX_HE20_2G: 2GHz 11ax he20 mode
867*5113495bSYour Name  * @SCAN_PHY_MODE_11AX_HE40_2G: 2GHz 11ax he40 mode
868*5113495bSYour Name  * @SCAN_PHY_MODE_11AX_HE80_2G: 2GHz 11ax he80 mode
869*5113495bSYour Name  * @SCAN_PHY_MODE_11BE_EHT20: 11be EHT 20 mode
870*5113495bSYour Name  * @SCAN_PHY_MODE_11BE_EHT40: 11be EHT 40 mode
871*5113495bSYour Name  * @SCAN_PHY_MODE_11BE_EHT80: 11be EHT 80 mode
872*5113495bSYour Name  * @SCAN_PHY_MODE_11BE_EHT80_80: 11be EHT 80+80 mode
873*5113495bSYour Name  * @SCAN_PHY_MODE_11BE_EHT160: 11be EHT 160 mode
874*5113495bSYour Name  * @SCAN_PHY_MODE_11BE_EHT160_160: 11be EHT 160+160 mode
875*5113495bSYour Name  * @SCAN_PHY_MODE_11BE_EHT320: 11be EHT 320 mode
876*5113495bSYour Name  * @SCAN_PHY_MODE_11BE_EHT20_2G: 2GHz 11be EHT 20 mode
877*5113495bSYour Name  * @SCAN_PHY_MODE_11BE_EHT40_2G: 2GHz 11be EHT 40 mode
878*5113495bSYour Name  * @SCAN_PHY_MODE_11BE_EHT80_2G: 2GHz 11be EHT 80 mode
879*5113495bSYour Name  * @SCAN_PHY_MODE_UNKNOWN: unknown phy mode
880*5113495bSYour Name  * @SCAN_PHY_MODE_MAX: max valid phymode
881*5113495bSYour Name  */
882*5113495bSYour Name enum scan_phy_mode {
883*5113495bSYour Name 	SCAN_PHY_MODE_11A = 0,
884*5113495bSYour Name 	SCAN_PHY_MODE_11G = 1,
885*5113495bSYour Name 	SCAN_PHY_MODE_11B = 2,
886*5113495bSYour Name 	SCAN_PHY_MODE_11GONLY = 3,
887*5113495bSYour Name 	SCAN_PHY_MODE_11NA_HT20 = 4,
888*5113495bSYour Name 	SCAN_PHY_MODE_11NG_HT20 = 5,
889*5113495bSYour Name 	SCAN_PHY_MODE_11NA_HT40 = 6,
890*5113495bSYour Name 	SCAN_PHY_MODE_11NG_HT40 = 7,
891*5113495bSYour Name 	SCAN_PHY_MODE_11AC_VHT20 = 8,
892*5113495bSYour Name 	SCAN_PHY_MODE_11AC_VHT40 = 9,
893*5113495bSYour Name 	SCAN_PHY_MODE_11AC_VHT80 = 10,
894*5113495bSYour Name 	SCAN_PHY_MODE_11AC_VHT20_2G = 11,
895*5113495bSYour Name 	SCAN_PHY_MODE_11AC_VHT40_2G = 12,
896*5113495bSYour Name 	SCAN_PHY_MODE_11AC_VHT80_2G = 13,
897*5113495bSYour Name 	SCAN_PHY_MODE_11AC_VHT80_80 = 14,
898*5113495bSYour Name 	SCAN_PHY_MODE_11AC_VHT160 = 15,
899*5113495bSYour Name 	SCAN_PHY_MODE_11AX_HE20 = 16,
900*5113495bSYour Name 	SCAN_PHY_MODE_11AX_HE40 = 17,
901*5113495bSYour Name 	SCAN_PHY_MODE_11AX_HE80 = 18,
902*5113495bSYour Name 	SCAN_PHY_MODE_11AX_HE80_80 = 19,
903*5113495bSYour Name 	SCAN_PHY_MODE_11AX_HE160 = 20,
904*5113495bSYour Name 	SCAN_PHY_MODE_11AX_HE20_2G = 21,
905*5113495bSYour Name 	SCAN_PHY_MODE_11AX_HE40_2G = 22,
906*5113495bSYour Name 	SCAN_PHY_MODE_11AX_HE80_2G = 23,
907*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
908*5113495bSYour Name 	SCAN_PHY_MODE_11BE_EHT20 = 24,
909*5113495bSYour Name 	SCAN_PHY_MODE_11BE_EHT40 = 25,
910*5113495bSYour Name 	SCAN_PHY_MODE_11BE_EHT80 = 26,
911*5113495bSYour Name 	SCAN_PHY_MODE_11BE_EHT80_80 = 27,
912*5113495bSYour Name 	SCAN_PHY_MODE_11BE_EHT160 = 28,
913*5113495bSYour Name 	SCAN_PHY_MODE_11BE_EHT160_160 = 29,
914*5113495bSYour Name 	SCAN_PHY_MODE_11BE_EHT320 = 30,
915*5113495bSYour Name 	SCAN_PHY_MODE_11BE_EHT20_2G = 31,
916*5113495bSYour Name 	SCAN_PHY_MODE_11BE_EHT40_2G = 32,
917*5113495bSYour Name 	SCAN_PHY_MODE_11BE_EHT80_2G = 33,
918*5113495bSYour Name #endif
919*5113495bSYour Name 	SCAN_PHY_MODE_UNKNOWN = 34,
920*5113495bSYour Name 	SCAN_PHY_MODE_MAX = 34
921*5113495bSYour Name };
922*5113495bSYour Name 
923*5113495bSYour Name /**
924*5113495bSYour Name  * enum scan_dwelltime_adaptive_mode: dwelltime_mode
925*5113495bSYour Name  * @SCAN_DWELL_MODE_DEFAULT: Use firmware default mode
926*5113495bSYour Name  * @SCAN_DWELL_MODE_CONSERVATIVE: Conservative adaptive mode
927*5113495bSYour Name  * @SCAN_DWELL_MODE_MODERATE: Moderate adaptive mode
928*5113495bSYour Name  * @SCAN_DWELL_MODE_AGGRESSIVE: Aggressive adaptive mode
929*5113495bSYour Name  * @SCAN_DWELL_MODE_STATIC: static adaptive mode
930*5113495bSYour Name  */
931*5113495bSYour Name enum scan_dwelltime_adaptive_mode {
932*5113495bSYour Name 	SCAN_DWELL_MODE_DEFAULT = 0,
933*5113495bSYour Name 	SCAN_DWELL_MODE_CONSERVATIVE = 1,
934*5113495bSYour Name 	SCAN_DWELL_MODE_MODERATE = 2,
935*5113495bSYour Name 	SCAN_DWELL_MODE_AGGRESSIVE = 3,
936*5113495bSYour Name 	SCAN_DWELL_MODE_STATIC = 4
937*5113495bSYour Name };
938*5113495bSYour Name 
939*5113495bSYour Name /**
940*5113495bSYour Name  * struct scan_random_attr - holds scan randomization attrs
941*5113495bSYour Name  * @randomize: set to true for scan randomization
942*5113495bSYour Name  * @mac_addr: mac addr to be randomized
943*5113495bSYour Name  * @mac_mask: used to represent bits in mac_addr for randomization
944*5113495bSYour Name  */
945*5113495bSYour Name struct scan_random_attr {
946*5113495bSYour Name 	bool randomize;
947*5113495bSYour Name 	uint8_t mac_addr[QDF_MAC_ADDR_SIZE];
948*5113495bSYour Name 	uint8_t mac_mask[QDF_MAC_ADDR_SIZE];
949*5113495bSYour Name };
950*5113495bSYour Name 
951*5113495bSYour Name /**
952*5113495bSYour Name  * struct probe_req_allowlist_attr - holds probe req ie allowlist attrs
953*5113495bSYour Name  * @allow_list: enable/disable allowlist
954*5113495bSYour Name  * @ie_bitmap: bitmap of IEs to be enabled
955*5113495bSYour Name  * @num_vendor_oui: number of vendor OUIs
956*5113495bSYour Name  * @voui: vendor oui buffer
957*5113495bSYour Name  */
958*5113495bSYour Name struct probe_req_allowlist_attr {
959*5113495bSYour Name 	bool allow_list;
960*5113495bSYour Name 	uint32_t ie_bitmap[PROBE_REQ_BITMAP_LEN];
961*5113495bSYour Name 	uint32_t num_vendor_oui;
962*5113495bSYour Name 	uint32_t voui[MAX_PROBE_REQ_OUIS];
963*5113495bSYour Name };
964*5113495bSYour Name 
965*5113495bSYour Name /**
966*5113495bSYour Name  * enum scan_flags: scan flags
967*5113495bSYour Name  * @FLAG_SCAN_ONLY_IF_RNR_FOUND: Set this flag for a 6g channel to scan it only
968*5113495bSYour Name  *  if an RNR IE is found with that channel while scanning 2g/5g bands.
969*5113495bSYour Name  */
970*5113495bSYour Name enum scan_flags {
971*5113495bSYour Name 	FLAG_SCAN_ONLY_IF_RNR_FOUND = 0x1,
972*5113495bSYour Name };
973*5113495bSYour Name 
974*5113495bSYour Name /**
975*5113495bSYour Name  * struct chan_info - channel information
976*5113495bSYour Name  * @freq: frequency to scan
977*5113495bSYour Name  * @phymode: phymode in which @frequency should be scanned
978*5113495bSYour Name  * @flags: Flags to define channel property as defined @enum scan_flags.
979*5113495bSYour Name  *  Firmware can use this info for different operations, e.g.: scan
980*5113495bSYour Name  */
981*5113495bSYour Name struct chan_info {
982*5113495bSYour Name 	qdf_freq_t freq;
983*5113495bSYour Name 	enum scan_phy_mode phymode;
984*5113495bSYour Name 	enum scan_flags flags;
985*5113495bSYour Name };
986*5113495bSYour Name 
987*5113495bSYour Name struct chan_list_info {
988*5113495bSYour Name 	qdf_freq_t freq;
989*5113495bSYour Name 	uint32_t last_scan_time;
990*5113495bSYour Name };
991*5113495bSYour Name 
992*5113495bSYour Name struct chan_list_scan_info {
993*5113495bSYour Name 	uint8_t num_chan;
994*5113495bSYour Name 	struct chan_list_info ch_scan_info[NUM_CHANNELS];
995*5113495bSYour Name };
996*5113495bSYour Name 
997*5113495bSYour Name /**
998*5113495bSYour Name  * struct chan_list - list of frequencies to be scanned
999*5113495bSYour Name  *  and their phymode
1000*5113495bSYour Name  * @num_chan: number of channels to scan
1001*5113495bSYour Name  * @chan: channel parameters used for this scan
1002*5113495bSYour Name  */
1003*5113495bSYour Name struct chan_list {
1004*5113495bSYour Name 	uint8_t num_chan;
1005*5113495bSYour Name 	struct chan_info chan[NUM_CHANNELS];
1006*5113495bSYour Name };
1007*5113495bSYour Name 
1008*5113495bSYour Name /**
1009*5113495bSYour Name  * struct hint_short_ssid - short SSID hint
1010*5113495bSYour Name  *  and their phymode
1011*5113495bSYour Name  * @freq_flags: freq unit: MHz (upper 16bits)
1012*5113495bSYour Name  *              flags (lower 16bits)
1013*5113495bSYour Name  * @short_ssid: short SSID
1014*5113495bSYour Name  */
1015*5113495bSYour Name struct hint_short_ssid {
1016*5113495bSYour Name 	uint32_t freq_flags;
1017*5113495bSYour Name 	uint32_t short_ssid;
1018*5113495bSYour Name };
1019*5113495bSYour Name 
1020*5113495bSYour Name /**
1021*5113495bSYour Name  * struct hint_bssid - BSSID hint
1022*5113495bSYour Name  *  and their phymode
1023*5113495bSYour Name  * @freq_flags: freq unit: MHz (upper 16bits)
1024*5113495bSYour Name  *              flags (lower 16bits)
1025*5113495bSYour Name  * @bssid: BSSID
1026*5113495bSYour Name  */
1027*5113495bSYour Name struct hint_bssid {
1028*5113495bSYour Name 	uint32_t freq_flags;
1029*5113495bSYour Name 	struct qdf_mac_addr bssid;
1030*5113495bSYour Name };
1031*5113495bSYour Name 
1032*5113495bSYour Name /**
1033*5113495bSYour Name  * enum scan_request_type: scan type
1034*5113495bSYour Name  * @SCAN_TYPE_DEFAULT: Def scan
1035*5113495bSYour Name  * @SCAN_TYPE_P2P_SEARCH: P2P Search
1036*5113495bSYour Name  * @SCAN_TYPE_P2P_LISTEN: P2P listed
1037*5113495bSYour Name  * @SCAN_TYPE_RRM: RRM scan request
1038*5113495bSYour Name  * @SCAN_TYPE_SCAN_FOR_CONNECT : Scan for connect
1039*5113495bSYour Name  */
1040*5113495bSYour Name enum scan_request_type {
1041*5113495bSYour Name 	SCAN_TYPE_DEFAULT = 0,
1042*5113495bSYour Name 	SCAN_TYPE_P2P_SEARCH = 1,
1043*5113495bSYour Name 	SCAN_TYPE_P2P_LISTEN = 2,
1044*5113495bSYour Name 	SCAN_TYPE_RRM = 3,
1045*5113495bSYour Name 	SCAN_TYPE_SCAN_FOR_CONNECT = 4
1046*5113495bSYour Name };
1047*5113495bSYour Name 
1048*5113495bSYour Name /**
1049*5113495bSYour Name  * struct scan_req_params - start scan request parameter
1050*5113495bSYour Name  * @scan_id: scan id
1051*5113495bSYour Name  * @scan_req_id: scan requester id
1052*5113495bSYour Name  * @vdev_id: vdev id where scan was originated
1053*5113495bSYour Name  * @pdev_id: pdev id of parent pdev
1054*5113495bSYour Name  * @scan_priority: scan priority
1055*5113495bSYour Name  * @scan_type: scan request type
1056*5113495bSYour Name  * @scan_ev_started: notify scan started event
1057*5113495bSYour Name  * @scan_ev_completed: notify scan completed event
1058*5113495bSYour Name  * @scan_ev_bss_chan: notify bss chan event
1059*5113495bSYour Name  * @scan_ev_foreign_chan: notify foreign chan event
1060*5113495bSYour Name  * @scan_ev_dequeued: notify scan request dequeued event
1061*5113495bSYour Name  * @scan_ev_preempted: notify scan preempted event
1062*5113495bSYour Name  * @scan_ev_start_failed: notify scan start failed event
1063*5113495bSYour Name  * @scan_ev_restarted: notify scan restarted event
1064*5113495bSYour Name  * @scan_ev_foreign_chn_exit: notify foreign chan exit event
1065*5113495bSYour Name  * @scan_ev_invalid: notify invalid scan request event
1066*5113495bSYour Name  * @scan_ev_gpio_timeout: notify gpio timeout event
1067*5113495bSYour Name  * @scan_ev_suspended: notify scan suspend event
1068*5113495bSYour Name  * @scan_ev_resumed: notify scan resumed event
1069*5113495bSYour Name  * @scan_events: variable to read and set scan_ev_* flags in one shot
1070*5113495bSYour Name  *               can be used to dump all scan_ev_* flags for debug
1071*5113495bSYour Name  * @dwell_time_active: active dwell time
1072*5113495bSYour Name  * @dwell_time_active_2g: active dwell time for 2G channels, if it's not zero
1073*5113495bSYour Name  * @dwell_time_passive: passive dwell time
1074*5113495bSYour Name  * @min_dwell_time_6g: 6Ghz min dwell time
1075*5113495bSYour Name  * @dwell_time_active_6g: 6Ghz active dwell time
1076*5113495bSYour Name  * @dwell_time_passive_6g: 6Ghz passive dwell time
1077*5113495bSYour Name  * @min_rest_time: min rest time
1078*5113495bSYour Name  * @max_rest_time: max rest time
1079*5113495bSYour Name  * @repeat_probe_time: repeat probe time
1080*5113495bSYour Name  * @probe_spacing_time: probe spacing time
1081*5113495bSYour Name  * @idle_time: idle time
1082*5113495bSYour Name  * @max_scan_time: max scan time
1083*5113495bSYour Name  * @probe_delay: probe delay
1084*5113495bSYour Name  * @scan_offset_time: Support split scanning on the
1085*5113495bSYour Name  *                    same channel for CBS feature.
1086*5113495bSYour Name  * @scan_f_passive: passively scan all channels including active channels
1087*5113495bSYour Name  * @scan_f_bcast_probe: add wild card ssid prbreq even if ssid_list is specified
1088*5113495bSYour Name  * @scan_f_cck_rates: add cck rates to rates/xrates ie in prb req
1089*5113495bSYour Name  * @scan_f_ofdm_rates: add ofdm rates to rates/xrates ie in prb req
1090*5113495bSYour Name  * @scan_f_chan_stat_evnt: enable indication of chan load and noise floor
1091*5113495bSYour Name  * @scan_f_filter_prb_req: filter Probe request frames
1092*5113495bSYour Name  * @scan_f_bypass_dfs_chn: when set, do not scan DFS channels
1093*5113495bSYour Name  * @scan_f_continue_on_err:continue scan even if few certain errors have occurred
1094*5113495bSYour Name  * @scan_f_offchan_mgmt_tx: allow mgmt transmission during off channel scan
1095*5113495bSYour Name  * @scan_f_offchan_data_tx: allow data transmission during off channel scan
1096*5113495bSYour Name  * @scan_f_promisc_mode: scan with promiscuous mode
1097*5113495bSYour Name  * @scan_f_capture_phy_err: enable capture ppdu with phy errors
1098*5113495bSYour Name  * @scan_f_strict_passive_pch: do passive scan on passive channels
1099*5113495bSYour Name  * @scan_f_half_rate: enable HALF (10MHz) rate support
1100*5113495bSYour Name  * @scan_f_quarter_rate: set Quarter (5MHz) rate support
1101*5113495bSYour Name  * @scan_f_force_active_dfs_chn: allow to send probe req on DFS channel
1102*5113495bSYour Name  * @scan_f_add_tpc_ie_in_probe: add TPC ie in probe req frame
1103*5113495bSYour Name  * @scan_f_add_ds_ie_in_probe: add DS ie in probe req frame
1104*5113495bSYour Name  * @scan_f_add_spoofed_mac_in_probe: use random mac address for TA in probe
1105*5113495bSYour Name  * @scan_f_add_rand_seq_in_probe: use random sequence number in probe
1106*5113495bSYour Name  * @scan_f_en_ie_allowlist_in_probe: enable ie allowlist in probe
1107*5113495bSYour Name  * @scan_f_forced: force scan even in presence of data traffic
1108*5113495bSYour Name  * @scan_f_2ghz: scan 2.4 GHz channels
1109*5113495bSYour Name  * @scan_f_5ghz: scan 5 GHz channels
1110*5113495bSYour Name  * @scan_f_wide_band: scan in 40 MHz or higher bandwidth
1111*5113495bSYour Name  * @scan_f_pause_home_channel: To pause home channel in FW when scan channel is
1112*5113495bSYour Name  * same as home channel
1113*5113495bSYour Name  * @scan_f_report_cca_busy_for_each_20mhz: Allow FW to report CCA busy for each
1114*5113495bSYour Name  * possible 20Mhz subbands of the wideband scan channel
1115*5113495bSYour Name  * @scan_flags: variable to read and set scan_f_* flags in one shot
1116*5113495bSYour Name  *              can be used to dump all scan_f_* flags for debug
1117*5113495bSYour Name  * @scan_policy_high_accuracy:
1118*5113495bSYour Name  * @scan_policy_low_span:
1119*5113495bSYour Name  * @scan_policy_low_power:
1120*5113495bSYour Name  * @scan_policy_colocated_6ghz:
1121*5113495bSYour Name  * @scan_policy_type: variable to read and set all scan_policy_* flags
1122*5113495bSYour Name  * @adaptive_dwell_time_mode:
1123*5113495bSYour Name  * @burst_duration: burst duration
1124*5113495bSYour Name  * @num_bssid: no of bssid
1125*5113495bSYour Name  * @num_ssids: no of ssid
1126*5113495bSYour Name  * @n_probes: no of probe
1127*5113495bSYour Name  * @chan_list: channel list
1128*5113495bSYour Name  * @ssid: ssid list
1129*5113495bSYour Name  * @bssid_list: Lisst of bssid to scan
1130*5113495bSYour Name  * @scan_random: scan randomization params
1131*5113495bSYour Name  * @ie_allowlist: probe req IE allowlist attrs
1132*5113495bSYour Name  * @extraie: list of optional/vendor specific ie's to be added in probe requests
1133*5113495bSYour Name  * @htcap: htcap ie
1134*5113495bSYour Name  * @vhtcap: vhtcap ie
1135*5113495bSYour Name  * @scan_ctrl_flags_ext: scan control flag extended
1136*5113495bSYour Name  * @num_hint_s_ssid: number of short SSID hints
1137*5113495bSYour Name  * @num_hint_bssid: number of BSSID hints
1138*5113495bSYour Name  * @hint_s_ssid: short SSID hints
1139*5113495bSYour Name  * @hint_bssid: BSSID hints
1140*5113495bSYour Name  * @mld_id: MLD ID of the requested BSS within ML probe request
1141*5113495bSYour Name  */
1142*5113495bSYour Name struct scan_req_params {
1143*5113495bSYour Name 	uint32_t scan_id;
1144*5113495bSYour Name 	uint32_t scan_req_id;
1145*5113495bSYour Name 	uint32_t vdev_id;
1146*5113495bSYour Name 	uint32_t pdev_id;
1147*5113495bSYour Name 	enum scan_priority scan_priority;
1148*5113495bSYour Name 	enum scan_request_type scan_type;
1149*5113495bSYour Name 	union {
1150*5113495bSYour Name 		struct {
1151*5113495bSYour Name 			uint32_t scan_ev_started:1,
1152*5113495bSYour Name 				 scan_ev_completed:1,
1153*5113495bSYour Name 				 scan_ev_bss_chan:1,
1154*5113495bSYour Name 				 scan_ev_foreign_chan:1,
1155*5113495bSYour Name 				 scan_ev_dequeued:1,
1156*5113495bSYour Name 				 scan_ev_preempted:1,
1157*5113495bSYour Name 				 scan_ev_start_failed:1,
1158*5113495bSYour Name 				 scan_ev_restarted:1,
1159*5113495bSYour Name 				 scan_ev_foreign_chn_exit:1,
1160*5113495bSYour Name 				 scan_ev_invalid:1,
1161*5113495bSYour Name 				 scan_ev_gpio_timeout:1,
1162*5113495bSYour Name 				 scan_ev_suspended:1,
1163*5113495bSYour Name 				 scan_ev_resumed:1;
1164*5113495bSYour Name 		};
1165*5113495bSYour Name 		uint32_t scan_events;
1166*5113495bSYour Name 	};
1167*5113495bSYour Name 	uint32_t dwell_time_active;
1168*5113495bSYour Name 	uint32_t dwell_time_active_2g;
1169*5113495bSYour Name 	uint32_t dwell_time_passive;
1170*5113495bSYour Name 	uint32_t min_dwell_time_6g;
1171*5113495bSYour Name 	uint32_t dwell_time_active_6g;
1172*5113495bSYour Name 	uint32_t dwell_time_passive_6g;
1173*5113495bSYour Name 	uint32_t min_rest_time;
1174*5113495bSYour Name 	uint32_t max_rest_time;
1175*5113495bSYour Name 	uint32_t repeat_probe_time;
1176*5113495bSYour Name 	uint32_t probe_spacing_time;
1177*5113495bSYour Name 	uint32_t idle_time;
1178*5113495bSYour Name 	uint32_t max_scan_time;
1179*5113495bSYour Name 	uint32_t probe_delay;
1180*5113495bSYour Name 	uint32_t scan_offset_time;
1181*5113495bSYour Name 	union {
1182*5113495bSYour Name 		struct {
1183*5113495bSYour Name 			uint32_t scan_f_passive:1,
1184*5113495bSYour Name 				 scan_f_bcast_probe:1,
1185*5113495bSYour Name 				 scan_f_cck_rates:1,
1186*5113495bSYour Name 				 scan_f_ofdm_rates:1,
1187*5113495bSYour Name 				 scan_f_chan_stat_evnt:1,
1188*5113495bSYour Name 				 scan_f_filter_prb_req:1,
1189*5113495bSYour Name 				 scan_f_bypass_dfs_chn:1,
1190*5113495bSYour Name 				 scan_f_continue_on_err:1,
1191*5113495bSYour Name 				 scan_f_offchan_mgmt_tx:1,
1192*5113495bSYour Name 				 scan_f_offchan_data_tx:1,
1193*5113495bSYour Name 				 scan_f_promisc_mode:1,
1194*5113495bSYour Name 				 scan_f_capture_phy_err:1,
1195*5113495bSYour Name 				 scan_f_strict_passive_pch:1,
1196*5113495bSYour Name 				 scan_f_half_rate:1,
1197*5113495bSYour Name 				 scan_f_quarter_rate:1,
1198*5113495bSYour Name 				 scan_f_force_active_dfs_chn:1,
1199*5113495bSYour Name 				 scan_f_add_tpc_ie_in_probe:1,
1200*5113495bSYour Name 				 scan_f_add_ds_ie_in_probe:1,
1201*5113495bSYour Name 				 scan_f_add_spoofed_mac_in_probe:1,
1202*5113495bSYour Name 				 scan_f_add_rand_seq_in_probe:1,
1203*5113495bSYour Name 				 scan_f_en_ie_allowlist_in_probe:1,
1204*5113495bSYour Name 				 scan_f_forced:1,
1205*5113495bSYour Name 				 scan_f_2ghz:1,
1206*5113495bSYour Name 				 scan_f_5ghz:1,
1207*5113495bSYour Name 				 scan_f_wide_band:1,
1208*5113495bSYour Name 				 scan_f_pause_home_channel:1,
1209*5113495bSYour Name 				 scan_f_report_cca_busy_for_each_20mhz:1;
1210*5113495bSYour Name 		};
1211*5113495bSYour Name 		uint32_t scan_flags;
1212*5113495bSYour Name 	};
1213*5113495bSYour Name 	union {
1214*5113495bSYour Name 		struct {
1215*5113495bSYour Name 			uint32_t scan_policy_high_accuracy:1,
1216*5113495bSYour Name 				 scan_policy_low_span:1,
1217*5113495bSYour Name 				 scan_policy_low_power:1,
1218*5113495bSYour Name 				 scan_policy_colocated_6ghz:1;
1219*5113495bSYour Name 		};
1220*5113495bSYour Name 		uint32_t scan_policy_type;
1221*5113495bSYour Name 	};
1222*5113495bSYour Name 
1223*5113495bSYour Name 	enum scan_dwelltime_adaptive_mode adaptive_dwell_time_mode;
1224*5113495bSYour Name 	uint32_t burst_duration;
1225*5113495bSYour Name 	uint32_t num_bssid;
1226*5113495bSYour Name 	uint32_t num_ssids;
1227*5113495bSYour Name 	uint32_t n_probes;
1228*5113495bSYour Name 	struct chan_list chan_list;
1229*5113495bSYour Name 	struct wlan_ssid ssid[WLAN_SCAN_MAX_NUM_SSID];
1230*5113495bSYour Name 	struct qdf_mac_addr bssid_list[WLAN_SCAN_MAX_NUM_BSSID];
1231*5113495bSYour Name 	struct scan_random_attr scan_random;
1232*5113495bSYour Name 	struct probe_req_allowlist_attr ie_allowlist;
1233*5113495bSYour Name 	struct element_info extraie;
1234*5113495bSYour Name 	struct element_info htcap;
1235*5113495bSYour Name 	struct element_info vhtcap;
1236*5113495bSYour Name 	uint32_t scan_ctrl_flags_ext;
1237*5113495bSYour Name 	uint32_t num_hint_s_ssid;
1238*5113495bSYour Name 	uint32_t num_hint_bssid;
1239*5113495bSYour Name 	struct hint_short_ssid hint_s_ssid[WLAN_SCAN_MAX_HINT_S_SSID];
1240*5113495bSYour Name 	struct hint_bssid hint_bssid[WLAN_SCAN_MAX_HINT_BSSID];
1241*5113495bSYour Name 	uint8_t mld_id;
1242*5113495bSYour Name };
1243*5113495bSYour Name 
1244*5113495bSYour Name /**
1245*5113495bSYour Name  * struct scan_start_request - scan request config
1246*5113495bSYour Name  * @vdev: vdev
1247*5113495bSYour Name  * @scan_req: common scan start request parameters
1248*5113495bSYour Name  */
1249*5113495bSYour Name struct scan_start_request {
1250*5113495bSYour Name 	struct wlan_objmgr_vdev *vdev;
1251*5113495bSYour Name 	struct scan_req_params scan_req;
1252*5113495bSYour Name };
1253*5113495bSYour Name 
1254*5113495bSYour Name /**
1255*5113495bSYour Name  * enum scan_cancel_req_type - type specifiers for cancel scan request
1256*5113495bSYour Name  * @WLAN_SCAN_CANCEL_SINGLE: cancel particular scan specified by scan_id
1257*5113495bSYour Name  * @WLAN_SCAN_CANCEL_VDEV_ALL: cancel all scans running on a particular vdevid
1258*5113495bSYour Name  * @WLAN_SCAN_CANCEL_PDEV_ALL: cancel all scans running on parent pdev of vdevid
1259*5113495bSYour Name  * @WLAN_SCAN_CANCEL_HOST_VDEV_ALL: Cancel all host triggered scans alone on
1260*5113495bSYour Name  * vdev
1261*5113495bSYour Name  */
1262*5113495bSYour Name enum scan_cancel_req_type {
1263*5113495bSYour Name 	WLAN_SCAN_CANCEL_SINGLE = 1,
1264*5113495bSYour Name 	WLAN_SCAN_CANCEL_VDEV_ALL,
1265*5113495bSYour Name 	WLAN_SCAN_CANCEL_PDEV_ALL,
1266*5113495bSYour Name 	WLAN_SCAN_CANCEL_HOST_VDEV_ALL,
1267*5113495bSYour Name };
1268*5113495bSYour Name 
1269*5113495bSYour Name /**
1270*5113495bSYour Name  * struct scan_cancel_param - stop scan cmd parameter
1271*5113495bSYour Name  * @requester: scan requester
1272*5113495bSYour Name  * @scan_id: scan id
1273*5113495bSYour Name  * @req_type: scan request type
1274*5113495bSYour Name  * @vdev_id: vdev id
1275*5113495bSYour Name  * @pdev_id: pdev id of parent pdev
1276*5113495bSYour Name  */
1277*5113495bSYour Name struct scan_cancel_param {
1278*5113495bSYour Name 	uint32_t requester;
1279*5113495bSYour Name 	uint32_t scan_id;
1280*5113495bSYour Name 	enum scan_cancel_req_type req_type;
1281*5113495bSYour Name 	uint32_t vdev_id;
1282*5113495bSYour Name 	uint32_t pdev_id;
1283*5113495bSYour Name };
1284*5113495bSYour Name 
1285*5113495bSYour Name /**
1286*5113495bSYour Name  * struct scan_cancel_request - stop scan cmd
1287*5113495bSYour Name  * @vdev: vdev object
1288*5113495bSYour Name  * @wait_tgt_cancel: wait for target to cancel scan
1289*5113495bSYour Name  * @cancel_req: stop scan cmd parameter
1290*5113495bSYour Name  */
1291*5113495bSYour Name struct scan_cancel_request {
1292*5113495bSYour Name 	/* Extra parameters consumed by scan module or serialization */
1293*5113495bSYour Name 	struct wlan_objmgr_vdev *vdev;
1294*5113495bSYour Name 	bool wait_tgt_cancel;
1295*5113495bSYour Name 	/* Actual scan cancel request parameters */
1296*5113495bSYour Name 	struct scan_cancel_param cancel_req;
1297*5113495bSYour Name };
1298*5113495bSYour Name 
1299*5113495bSYour Name /**
1300*5113495bSYour Name  * enum scan_event_type - scan event types
1301*5113495bSYour Name  * @SCAN_EVENT_TYPE_STARTED: scan started
1302*5113495bSYour Name  * @SCAN_EVENT_TYPE_COMPLETED: scan completed
1303*5113495bSYour Name  * @SCAN_EVENT_TYPE_BSS_CHANNEL: HW came back to home channel
1304*5113495bSYour Name  * @SCAN_EVENT_TYPE_FOREIGN_CHANNEL: HW moved to foreign channel
1305*5113495bSYour Name  * @SCAN_EVENT_TYPE_DEQUEUED: scan request dequeued
1306*5113495bSYour Name  * @SCAN_EVENT_TYPE_PREEMPTED: scan got preempted
1307*5113495bSYour Name  * @SCAN_EVENT_TYPE_START_FAILED: couldn't start scan
1308*5113495bSYour Name  * @SCAN_EVENT_TYPE_RESTARTED: scan restarted
1309*5113495bSYour Name  * @SCAN_EVENT_TYPE_FOREIGN_CHANNEL_EXIT: HW exited foreign channel
1310*5113495bSYour Name  * @SCAN_EVENT_TYPE_SUSPENDED: scan got suspended
1311*5113495bSYour Name  * @SCAN_EVENT_TYPE_RESUMED: scan resumed
1312*5113495bSYour Name  * @SCAN_EVENT_TYPE_NLO_COMPLETE: NLO completed
1313*5113495bSYour Name  * @SCAN_EVENT_TYPE_NLO_MATCH: NLO match event
1314*5113495bSYour Name  * @SCAN_EVENT_TYPE_INVALID: invalid request
1315*5113495bSYour Name  * @SCAN_EVENT_TYPE_GPIO_TIMEOUT: gpio timeout
1316*5113495bSYour Name  * @SCAN_EVENT_TYPE_RADIO_MEASUREMENT_START: radio measurement start
1317*5113495bSYour Name  * @SCAN_EVENT_TYPE_RADIO_MEASUREMENT_END: radio measurement end
1318*5113495bSYour Name  * @SCAN_EVENT_TYPE_BSSID_MATCH: bssid match found
1319*5113495bSYour Name  * @SCAN_EVENT_TYPE_FOREIGN_CHANNEL_GET_NF: foreign channel noise floor
1320*5113495bSYour Name  * @SCAN_EVENT_TYPE_MAX: marker for invalid event
1321*5113495bSYour Name  */
1322*5113495bSYour Name enum scan_event_type {
1323*5113495bSYour Name 	SCAN_EVENT_TYPE_STARTED,
1324*5113495bSYour Name 	SCAN_EVENT_TYPE_COMPLETED,
1325*5113495bSYour Name 	SCAN_EVENT_TYPE_BSS_CHANNEL,
1326*5113495bSYour Name 	SCAN_EVENT_TYPE_FOREIGN_CHANNEL,
1327*5113495bSYour Name 	SCAN_EVENT_TYPE_DEQUEUED,
1328*5113495bSYour Name 	SCAN_EVENT_TYPE_PREEMPTED,
1329*5113495bSYour Name 	SCAN_EVENT_TYPE_START_FAILED,
1330*5113495bSYour Name 	SCAN_EVENT_TYPE_RESTARTED,
1331*5113495bSYour Name 	SCAN_EVENT_TYPE_FOREIGN_CHANNEL_EXIT,
1332*5113495bSYour Name 	SCAN_EVENT_TYPE_SUSPENDED,
1333*5113495bSYour Name 	SCAN_EVENT_TYPE_RESUMED,
1334*5113495bSYour Name 	SCAN_EVENT_TYPE_NLO_COMPLETE,
1335*5113495bSYour Name 	SCAN_EVENT_TYPE_NLO_MATCH,
1336*5113495bSYour Name 	SCAN_EVENT_TYPE_INVALID,
1337*5113495bSYour Name 	SCAN_EVENT_TYPE_GPIO_TIMEOUT,
1338*5113495bSYour Name 	SCAN_EVENT_TYPE_RADIO_MEASUREMENT_START,
1339*5113495bSYour Name 	SCAN_EVENT_TYPE_RADIO_MEASUREMENT_END,
1340*5113495bSYour Name 	SCAN_EVENT_TYPE_BSSID_MATCH,
1341*5113495bSYour Name 	SCAN_EVENT_TYPE_FOREIGN_CHANNEL_GET_NF,
1342*5113495bSYour Name 	SCAN_EVENT_TYPE_MAX,
1343*5113495bSYour Name };
1344*5113495bSYour Name 
1345*5113495bSYour Name /**
1346*5113495bSYour Name  * enum scan_completion_reason - scan completion reason
1347*5113495bSYour Name  * @SCAN_REASON_NONE: un specified reason
1348*5113495bSYour Name  * @SCAN_REASON_COMPLETED: scan successfully completed
1349*5113495bSYour Name  * @SCAN_REASON_CANCELLED: scan got cancelled
1350*5113495bSYour Name  * @SCAN_REASON_PREEMPTED: scan got preempted
1351*5113495bSYour Name  * @SCAN_REASON_TIMEDOUT: couldn't complete within specified time
1352*5113495bSYour Name  * @SCAN_REASON_INTERNAL_FAILURE: cancelled because of some failure
1353*5113495bSYour Name  * @SCAN_REASON_SUSPENDED: scan suspended
1354*5113495bSYour Name  * @SCAN_REASON_RUN_FAILED: run failed
1355*5113495bSYour Name  * @SCAN_REASON_TERMINATION_FUNCTION: termination function
1356*5113495bSYour Name  * @SCAN_REASON_MAX_OFFCHAN_RETRIES: max retries exceeded threshold
1357*5113495bSYour Name  * @SCAN_REASON_DFS_VIOLATION: Scan start failure due to DFS violation.
1358*5113495bSYour Name  * @SCAN_REASON_MAX: invalid completion reason marker
1359*5113495bSYour Name  */
1360*5113495bSYour Name enum scan_completion_reason {
1361*5113495bSYour Name 	SCAN_REASON_NONE,
1362*5113495bSYour Name 	SCAN_REASON_COMPLETED,
1363*5113495bSYour Name 	SCAN_REASON_CANCELLED,
1364*5113495bSYour Name 	SCAN_REASON_PREEMPTED,
1365*5113495bSYour Name 	SCAN_REASON_TIMEDOUT,
1366*5113495bSYour Name 	SCAN_REASON_INTERNAL_FAILURE,
1367*5113495bSYour Name 	SCAN_REASON_SUSPENDED,
1368*5113495bSYour Name 	SCAN_REASON_RUN_FAILED,
1369*5113495bSYour Name 	SCAN_REASON_TERMINATION_FUNCTION,
1370*5113495bSYour Name 	SCAN_REASON_MAX_OFFCHAN_RETRIES,
1371*5113495bSYour Name 	SCAN_REASON_DFS_VIOLATION,
1372*5113495bSYour Name 	SCAN_REASON_MAX,
1373*5113495bSYour Name };
1374*5113495bSYour Name 
1375*5113495bSYour Name /**
1376*5113495bSYour Name  * struct scan_event - scan event definition
1377*5113495bSYour Name  * @vdev_id: vdev where scan was run
1378*5113495bSYour Name  * @type: type of scan event
1379*5113495bSYour Name  * @reason: completion reason
1380*5113495bSYour Name  * @chan_freq: channel centre frequency
1381*5113495bSYour Name  * @requester: requester id
1382*5113495bSYour Name  * @scan_id: scan id
1383*5113495bSYour Name  * @timestamp: timestamp in microsec recorded by target for the scan event
1384*5113495bSYour Name  * @scan_start_req: scan request object used to start this scan
1385*5113495bSYour Name  */
1386*5113495bSYour Name struct scan_event {
1387*5113495bSYour Name 	uint32_t vdev_id;
1388*5113495bSYour Name 	enum scan_event_type type;
1389*5113495bSYour Name 	enum scan_completion_reason reason;
1390*5113495bSYour Name 	uint32_t chan_freq;
1391*5113495bSYour Name 	uint32_t requester;
1392*5113495bSYour Name 	uint32_t scan_id;
1393*5113495bSYour Name 	uint32_t timestamp;
1394*5113495bSYour Name 	struct scan_start_request *scan_start_req;
1395*5113495bSYour Name };
1396*5113495bSYour Name 
1397*5113495bSYour Name /**
1398*5113495bSYour Name  * struct scan_event_info - scan event information
1399*5113495bSYour Name  * @vdev: vdev object
1400*5113495bSYour Name  * @event: scan event
1401*5113495bSYour Name  */
1402*5113495bSYour Name struct scan_event_info {
1403*5113495bSYour Name 	struct wlan_objmgr_vdev *vdev;
1404*5113495bSYour Name 	struct scan_event event;
1405*5113495bSYour Name };
1406*5113495bSYour Name 
1407*5113495bSYour Name /**
1408*5113495bSYour Name  * enum scm_scan_status - scan status
1409*5113495bSYour Name  * @SCAN_NOT_IN_PROGRESS: Neither active nor pending scan in progress
1410*5113495bSYour Name  * @SCAN_IS_ACTIVE: scan request is present only in active list
1411*5113495bSYour Name  * @SCAN_IS_PENDING: scan request is present only in pending list
1412*5113495bSYour Name  * @SCAN_IS_ACTIVE_AND_PENDING: scan request is present in active
1413*5113495bSYour Name  *                               and pending both lists
1414*5113495bSYour Name  */
1415*5113495bSYour Name enum scm_scan_status {
1416*5113495bSYour Name 	SCAN_NOT_IN_PROGRESS = 0, /* Must be 0 */
1417*5113495bSYour Name 	SCAN_IS_ACTIVE,
1418*5113495bSYour Name 	SCAN_IS_PENDING,
1419*5113495bSYour Name 	SCAN_IS_ACTIVE_AND_PENDING,
1420*5113495bSYour Name };
1421*5113495bSYour Name 
1422*5113495bSYour Name /**
1423*5113495bSYour Name  * typedef scan_event_handler() - function prototype of scan event handlers
1424*5113495bSYour Name  * @vdev: vdev object
1425*5113495bSYour Name  * @event: scan event
1426*5113495bSYour Name  * @arg: argument
1427*5113495bSYour Name  *
1428*5113495bSYour Name  * PROTO TYPE, scan event handler call back function prototype
1429*5113495bSYour Name  *
1430*5113495bSYour Name  * Return: void
1431*5113495bSYour Name  */
1432*5113495bSYour Name typedef void (*scan_event_handler) (struct wlan_objmgr_vdev *vdev,
1433*5113495bSYour Name 	struct scan_event *event, void *arg);
1434*5113495bSYour Name 
1435*5113495bSYour Name /**
1436*5113495bSYour Name  * enum scan_cb_type - update beacon cb type
1437*5113495bSYour Name  * @SCAN_CB_TYPE_INFORM_BCN: Callback to indicate beacon to OS
1438*5113495bSYour Name  * @SCAN_CB_TYPE_UPDATE_BCN: Callback to indicate beacon
1439*5113495bSYour Name  * @SCAN_CB_TYPE_UNLINK_BSS: cb to unlink bss entry
1440*5113495bSYour Name  *                    to MLME and update MLME info
1441*5113495bSYour Name  *
1442*5113495bSYour Name  */
1443*5113495bSYour Name enum scan_cb_type {
1444*5113495bSYour Name 	SCAN_CB_TYPE_INFORM_BCN,
1445*5113495bSYour Name 	SCAN_CB_TYPE_UPDATE_BCN,
1446*5113495bSYour Name 	SCAN_CB_TYPE_UNLINK_BSS,
1447*5113495bSYour Name };
1448*5113495bSYour Name 
1449*5113495bSYour Name /* Set PNO */
1450*5113495bSYour Name #define SCAN_PNO_MAX_PLAN_REQUEST   2
1451*5113495bSYour Name #define SCAN_PNO_MAX_NETW_CHANNELS_EX  (NUM_CHANNELS)
1452*5113495bSYour Name #define SCAN_PNO_MAX_SUPP_NETWORKS  16
1453*5113495bSYour Name #define SCAN_PNO_DEF_SLOW_SCAN_MULTIPLIER 6
1454*5113495bSYour Name #define SCAN_PNO_DEF_SCAN_TIMER_REPEAT 20
1455*5113495bSYour Name #define SCAN_PNO_MATCH_WAKE_LOCK_TIMEOUT         (5 * 1000)     /* in msec */
1456*5113495bSYour Name #define SCAN_MAX_IE_LENGTH 255
1457*5113495bSYour Name #ifdef CONFIG_SLUB_DEBUG_ON
1458*5113495bSYour Name #define SCAN_PNO_SCAN_COMPLETE_WAKE_LOCK_TIMEOUT (2 * 1000)     /* in msec */
1459*5113495bSYour Name #else
1460*5113495bSYour Name #define SCAN_PNO_SCAN_COMPLETE_WAKE_LOCK_TIMEOUT (1 * 1000)     /* in msec */
1461*5113495bSYour Name #endif /* CONFIG_SLUB_DEBUG_ON */
1462*5113495bSYour Name 
1463*5113495bSYour Name /**
1464*5113495bSYour Name  * enum ssid_bc_type - SSID broadcast type
1465*5113495bSYour Name  * @SSID_BC_TYPE_UNKNOWN: Broadcast unknown
1466*5113495bSYour Name  * @SSID_BC_TYPE_NORMAL: Broadcast normal
1467*5113495bSYour Name  * @SSID_BC_TYPE_HIDDEN: Broadcast hidden
1468*5113495bSYour Name  */
1469*5113495bSYour Name enum ssid_bc_type {
1470*5113495bSYour Name 	SSID_BC_TYPE_UNKNOWN = 0,
1471*5113495bSYour Name 	SSID_BC_TYPE_NORMAL = 1,
1472*5113495bSYour Name 	SSID_BC_TYPE_HIDDEN = 2,
1473*5113495bSYour Name };
1474*5113495bSYour Name 
1475*5113495bSYour Name /**
1476*5113495bSYour Name  * struct pno_nw_type - pno nw type
1477*5113495bSYour Name  * @ssid: ssid
1478*5113495bSYour Name  * @authentication: authentication type
1479*5113495bSYour Name  * @encryption: encryption type
1480*5113495bSYour Name  * @bc_new_type: broadcast nw type
1481*5113495bSYour Name  * @pno_chan_list: pno channel list info
1482*5113495bSYour Name  * @rssi_thresh: rssi threshold
1483*5113495bSYour Name  */
1484*5113495bSYour Name struct pno_nw_type {
1485*5113495bSYour Name 	struct wlan_ssid ssid;
1486*5113495bSYour Name 	uint32_t authentication;
1487*5113495bSYour Name 	uint32_t encryption;
1488*5113495bSYour Name 	uint32_t bc_new_type;
1489*5113495bSYour Name 	struct chan_list pno_chan_list;
1490*5113495bSYour Name 	int32_t rssi_thresh;
1491*5113495bSYour Name };
1492*5113495bSYour Name 
1493*5113495bSYour Name /**
1494*5113495bSYour Name  * struct cpno_band_rssi_pref - BSS preference based on band and RSSI
1495*5113495bSYour Name  * @band: band preference
1496*5113495bSYour Name  * @rssi: RSSI preference
1497*5113495bSYour Name  */
1498*5113495bSYour Name struct cpno_band_rssi_pref {
1499*5113495bSYour Name 	int8_t band;
1500*5113495bSYour Name 	int8_t rssi;
1501*5113495bSYour Name };
1502*5113495bSYour Name 
1503*5113495bSYour Name /**
1504*5113495bSYour Name  * struct nlo_mawc_params - Motion Aided Wireless Connectivity based
1505*5113495bSYour Name  *                          Network List Offload configuration
1506*5113495bSYour Name  * @vdev_id: VDEV ID on which the configuration needs to be applied
1507*5113495bSYour Name  * @enable: flag to enable or disable
1508*5113495bSYour Name  * @exp_backoff_ratio: ratio of exponential backoff
1509*5113495bSYour Name  * @init_scan_interval: initial scan interval(msec)
1510*5113495bSYour Name  * @max_scan_interval:  max scan interval(msec)
1511*5113495bSYour Name  */
1512*5113495bSYour Name struct nlo_mawc_params {
1513*5113495bSYour Name 	uint8_t vdev_id;
1514*5113495bSYour Name 	bool enable;
1515*5113495bSYour Name 	uint32_t exp_backoff_ratio;
1516*5113495bSYour Name 	uint32_t init_scan_interval;
1517*5113495bSYour Name 	uint32_t max_scan_interval;
1518*5113495bSYour Name };
1519*5113495bSYour Name 
1520*5113495bSYour Name /**
1521*5113495bSYour Name  * struct pno_scan_req_params - PNO Scan request structure
1522*5113495bSYour Name  * @vdev: vdev object
1523*5113495bSYour Name  * @networks_cnt: Number of networks
1524*5113495bSYour Name  * @do_passive_scan: Flag to request passive scan to fw
1525*5113495bSYour Name  * @vdev_id: vdev id
1526*5113495bSYour Name  * @fast_scan_period: Fast Scan period
1527*5113495bSYour Name  * @slow_scan_period: Slow scan period
1528*5113495bSYour Name  * @delay_start_time: delay in seconds to use before starting the first scan
1529*5113495bSYour Name  * @fast_scan_max_cycles: Fast scan max cycles
1530*5113495bSYour Name  * @scan_backoff_multiplier: multiply fast scan period by this after max cycles
1531*5113495bSYour Name  * @pno_channel_prediction: PNO channel prediction feature status
1532*5113495bSYour Name  * @active_dwell_time: active dwell time
1533*5113495bSYour Name  * @passive_dwell_time: passive dwell time
1534*5113495bSYour Name  * @top_k_num_of_channels: top K number of channels are used for tanimoto
1535*5113495bSYour Name  * distance calculation.
1536*5113495bSYour Name  * @stationary_thresh: threshold value to determine that the STA is stationary.
1537*5113495bSYour Name  * @adaptive_dwell_mode: adaptive dwelltime mode for pno scan
1538*5113495bSYour Name  * @channel_prediction_full_scan: periodic timer upon which a full scan needs
1539*5113495bSYour Name  * to be triggered.
1540*5113495bSYour Name  * @networks_list: Preferred network list
1541*5113495bSYour Name  * @scan_random: scan randomization params
1542*5113495bSYour Name  * @ie_allowlist: probe req IE allowlist attrs
1543*5113495bSYour Name  * @relative_rssi_set: Flag to check whether realtive_rssi is set or not
1544*5113495bSYour Name  * @relative_rssi: Relative rssi threshold, used for connected pno
1545*5113495bSYour Name  * @band_rssi_pref: Band and RSSI preference that can be given to one BSS
1546*5113495bSYour Name  *     over the other BSS
1547*5113495bSYour Name  *
1548*5113495bSYour Name  * E.g.
1549*5113495bSYour Name  *	{ fast_scan_period=120, fast_scan_max_cycles=2,
1550*5113495bSYour Name  *	  slow_scan_period=1800, scan_backoff_multiplier=2 }
1551*5113495bSYour Name  *	Result: 120s x2, 240s x2, 480s x2, 960s x2, 1800s xN
1552*5113495bSYour Name  * @mawc_params: Configuration parameters for NLO MAWC.
1553*5113495bSYour Name  * @scan_policy_colocated_6ghz: colocated_6ghz flag is set in pno scan req
1554*5113495bSYour Name  */
1555*5113495bSYour Name struct pno_scan_req_params {
1556*5113495bSYour Name 	struct wlan_objmgr_vdev *vdev;
1557*5113495bSYour Name 	uint32_t networks_cnt;
1558*5113495bSYour Name 	bool     do_passive_scan;
1559*5113495bSYour Name 	uint32_t vdev_id;
1560*5113495bSYour Name 	uint32_t fast_scan_period;
1561*5113495bSYour Name 	uint32_t slow_scan_period;
1562*5113495bSYour Name 	uint32_t delay_start_time;
1563*5113495bSYour Name 	uint32_t fast_scan_max_cycles;
1564*5113495bSYour Name 	uint8_t scan_backoff_multiplier;
1565*5113495bSYour Name 	uint32_t active_dwell_time;
1566*5113495bSYour Name 	uint32_t passive_dwell_time;
1567*5113495bSYour Name 	uint32_t pno_channel_prediction;
1568*5113495bSYour Name 	uint32_t top_k_num_of_channels;
1569*5113495bSYour Name 	uint32_t stationary_thresh;
1570*5113495bSYour Name 	enum scan_dwelltime_adaptive_mode adaptive_dwell_mode;
1571*5113495bSYour Name 	uint32_t channel_prediction_full_scan;
1572*5113495bSYour Name 	struct pno_nw_type networks_list[SCAN_PNO_MAX_SUPP_NETWORKS];
1573*5113495bSYour Name 	struct scan_random_attr scan_random;
1574*5113495bSYour Name 	struct probe_req_allowlist_attr ie_allowlist;
1575*5113495bSYour Name 	bool relative_rssi_set;
1576*5113495bSYour Name 	int8_t relative_rssi;
1577*5113495bSYour Name 	struct cpno_band_rssi_pref band_rssi_pref;
1578*5113495bSYour Name 	struct nlo_mawc_params mawc_params;
1579*5113495bSYour Name 	bool scan_policy_colocated_6ghz;
1580*5113495bSYour Name };
1581*5113495bSYour Name 
1582*5113495bSYour Name /**
1583*5113495bSYour Name  * struct scan_user_cfg - user configuration required for for scan
1584*5113495bSYour Name  * @ie_allowlist: probe req IE allowlist attrs
1585*5113495bSYour Name  * @sta_miracast_mcc_rest_time: sta miracast mcc rest time
1586*5113495bSYour Name  */
1587*5113495bSYour Name struct scan_user_cfg {
1588*5113495bSYour Name 	struct probe_req_allowlist_attr ie_allowlist;
1589*5113495bSYour Name 	uint32_t sta_miracast_mcc_rest_time;
1590*5113495bSYour Name };
1591*5113495bSYour Name 
1592*5113495bSYour Name /**
1593*5113495bSYour Name  * typedef update_mbssid_bcn_prb_rsp() - cb to inform mbssid beacon or prob resp
1594*5113495bSYour Name  * @frame: the pointer of frame data
1595*5113495bSYour Name  * @frame_len: the length of frame data
1596*5113495bSYour Name  * @frm_subtype: frame type
1597*5113495bSYour Name  * @bssid: the pointer of bssid
1598*5113495bSYour Name  *
1599*5113495bSYour Name  * Return: QDF_STATUS
1600*5113495bSYour Name  */
1601*5113495bSYour Name typedef QDF_STATUS (*update_mbssid_bcn_prb_rsp)(uint8_t *frame,
1602*5113495bSYour Name 						uint32_t frame_len,
1603*5113495bSYour Name 						uint8_t frm_subtype,
1604*5113495bSYour Name 						char *bssid);
1605*5113495bSYour Name 
1606*5113495bSYour Name /**
1607*5113495bSYour Name  * typedef update_beacon_cb() - cb to inform/update beacon
1608*5113495bSYour Name  * @pdev: pdev pointer
1609*5113495bSYour Name  * @scan_entry:  scan entry to inform/update
1610*5113495bSYour Name  *
1611*5113495bSYour Name  * Return: void
1612*5113495bSYour Name  */
1613*5113495bSYour Name typedef void (*update_beacon_cb) (struct wlan_objmgr_pdev *pdev,
1614*5113495bSYour Name 	struct scan_cache_entry *scan_entry);
1615*5113495bSYour Name 
1616*5113495bSYour Name /**
1617*5113495bSYour Name  * typedef scan_iterator_func() - function prototype of scan iterator function
1618*5113495bSYour Name  * @arg: extra argument
1619*5113495bSYour Name  * @scan_entry: scan entry object
1620*5113495bSYour Name  *
1621*5113495bSYour Name  * PROTO TYPE, scan iterator function prototype
1622*5113495bSYour Name  *
1623*5113495bSYour Name  * Return: QDF_STATUS
1624*5113495bSYour Name  */
1625*5113495bSYour Name typedef QDF_STATUS (*scan_iterator_func) (void *arg,
1626*5113495bSYour Name 	struct scan_cache_entry *scan_entry);
1627*5113495bSYour Name 
1628*5113495bSYour Name /**
1629*5113495bSYour Name  * enum scan_config - scan configuration definitions
1630*5113495bSYour Name  * @SCAN_CFG_DISABLE_SCAN_COMMAND_TIMEOUT: disable scan command timeout
1631*5113495bSYour Name  * @SCAN_CFG_DROP_BCN_ON_CHANNEL_MISMATCH: config to drop beacon/probe
1632*5113495bSYour Name  *  response frames if received channel and IE channels do not match
1633*5113495bSYour Name  */
1634*5113495bSYour Name enum scan_config {
1635*5113495bSYour Name 	SCAN_CFG_DISABLE_SCAN_COMMAND_TIMEOUT,
1636*5113495bSYour Name 	SCAN_CFG_DROP_BCN_ON_CHANNEL_MISMATCH,
1637*5113495bSYour Name };
1638*5113495bSYour Name 
1639*5113495bSYour Name /**
1640*5113495bSYour Name  * enum ext_cap_bit_field - Extended capabilities bit field
1641*5113495bSYour Name  * @BSS_2040_COEX_MGMT_SUPPORT: 20/40 BSS Coexistence Management Support field
1642*5113495bSYour Name  * @OBSS_NARROW_BW_RU_IN_ULOFDMA_TOLERENT_SUPPORT: OBSS Narrow  Bandwidth RU
1643*5113495bSYour Name  *     in UL OFDMA  Tolerance Support
1644*5113495bSYour Name  */
1645*5113495bSYour Name enum ext_cap_bit_field {
1646*5113495bSYour Name 	BSS_2040_COEX_MGMT_SUPPORT = 0,
1647*5113495bSYour Name 	OBSS_NARROW_BW_RU_IN_ULOFDMA_TOLERENT_SUPPORT = 79,
1648*5113495bSYour Name };
1649*5113495bSYour Name 
1650*5113495bSYour Name /**
1651*5113495bSYour Name  * struct scan_rnr_info - RNR information
1652*5113495bSYour Name  * @timestamp: time stamp of beacon/probe
1653*5113495bSYour Name  * @short_ssid: Short SSID
1654*5113495bSYour Name  * @bssid: BSSID
1655*5113495bSYour Name  * @bss_params: bss params present in RNR IE
1656*5113495bSYour Name  */
1657*5113495bSYour Name struct scan_rnr_info {
1658*5113495bSYour Name 	qdf_time_t timestamp;
1659*5113495bSYour Name 	uint32_t short_ssid;
1660*5113495bSYour Name 	struct qdf_mac_addr bssid;
1661*5113495bSYour Name 	uint8_t bss_params;
1662*5113495bSYour Name };
1663*5113495bSYour Name 
1664*5113495bSYour Name /**
1665*5113495bSYour Name  * struct scan_rnr_node - Scan RNR entry node
1666*5113495bSYour Name  * @node: node pointers
1667*5113495bSYour Name  * @entry: scan RNR entry pointer
1668*5113495bSYour Name  */
1669*5113495bSYour Name struct scan_rnr_node {
1670*5113495bSYour Name 	qdf_list_node_t node;
1671*5113495bSYour Name 	struct scan_rnr_info entry;
1672*5113495bSYour Name };
1673*5113495bSYour Name 
1674*5113495bSYour Name /**
1675*5113495bSYour Name  * struct meta_rnr_channel - Channel information for scan priority algorithm
1676*5113495bSYour Name  * @chan_freq: channel frequency
1677*5113495bSYour Name  * @bss_beacon_probe_count: Beacon and probe request count
1678*5113495bSYour Name  * @saved_profile_count: Saved profile count
1679*5113495bSYour Name  * @beacon_probe_last_time_found: Timestamp of beacon/probe observed
1680*5113495bSYour Name  * @rnr_list: RNR list to store RNR IE information
1681*5113495bSYour Name  */
1682*5113495bSYour Name struct meta_rnr_channel {
1683*5113495bSYour Name 	uint32_t chan_freq;
1684*5113495bSYour Name 	uint32_t bss_beacon_probe_count;
1685*5113495bSYour Name 	uint32_t saved_profile_count;
1686*5113495bSYour Name 	qdf_time_t beacon_probe_last_time_found;
1687*5113495bSYour Name 	qdf_list_t rnr_list;
1688*5113495bSYour Name };
1689*5113495bSYour Name 
1690*5113495bSYour Name #define RNR_UPDATE_SCAN_CNT_THRESHOLD 2
1691*5113495bSYour Name /**
1692*5113495bSYour Name  * struct channel_list_db - Database for channel information
1693*5113495bSYour Name  * @channel: channel meta information
1694*5113495bSYour Name  * @scan_count: scan count since the db was updated
1695*5113495bSYour Name  */
1696*5113495bSYour Name struct channel_list_db {
1697*5113495bSYour Name 	struct meta_rnr_channel channel[NUM_6GHZ_CHANNELS];
1698*5113495bSYour Name 	uint8_t scan_count;
1699*5113495bSYour Name };
1700*5113495bSYour Name 
1701*5113495bSYour Name /**
1702*5113495bSYour Name  * struct rnr_chan_weight - RNR channel weightage
1703*5113495bSYour Name  * @chan_freq: channel frequency
1704*5113495bSYour Name  * @weight: weightage of the channel
1705*5113495bSYour Name  * @phymode: phymode in which @frequency should be scanned
1706*5113495bSYour Name  * @flags: Flags to define channel property as defined @enum scan_flags.
1707*5113495bSYour Name  *  Firmware can use this info for different operations, e.g.: scan
1708*5113495bSYour Name  */
1709*5113495bSYour Name struct rnr_chan_weight {
1710*5113495bSYour Name 	uint32_t chan_freq;
1711*5113495bSYour Name 	uint32_t weight;
1712*5113495bSYour Name 	enum scan_phy_mode phymode;
1713*5113495bSYour Name 	enum scan_flags flags;
1714*5113495bSYour Name };
1715*5113495bSYour Name 
1716*5113495bSYour Name /**
1717*5113495bSYour Name  * enum trim_channel_list - which channel list need trim
1718*5113495bSYour Name  * @TRIM_CHANNEL_LIST_NONE: no channel need trim
1719*5113495bSYour Name  * @TRIM_CHANNEL_LIST_5G: 5G channel need trim
1720*5113495bSYour Name  * @TRIM_CHANNEL_LIST_24G: 2.4G channel need trim
1721*5113495bSYour Name  */
1722*5113495bSYour Name enum trim_channel_list {
1723*5113495bSYour Name 	TRIM_CHANNEL_LIST_NONE,
1724*5113495bSYour Name 	TRIM_CHANNEL_LIST_5G,
1725*5113495bSYour Name 	TRIM_CHANNEL_LIST_24G,
1726*5113495bSYour Name };
1727*5113495bSYour Name 
1728*5113495bSYour Name #ifdef FEATURE_SET
1729*5113495bSYour Name /**
1730*5113495bSYour Name  * struct wlan_scan_features - Scan feature set structure
1731*5113495bSYour Name  * @pno_in_unassoc_state: is pno supported in unassoc state
1732*5113495bSYour Name  * @pno_in_assoc_state: is pno supported in assoc state
1733*5113495bSYour Name  */
1734*5113495bSYour Name struct wlan_scan_features {
1735*5113495bSYour Name 	bool pno_in_unassoc_state;
1736*5113495bSYour Name 	bool pno_in_assoc_state;
1737*5113495bSYour Name };
1738*5113495bSYour Name #endif
1739*5113495bSYour Name #endif
1740