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