1 /*
2 * Copyright (c) 2011-2021 The Linux Foundation. All rights reserved.
3 * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4 *
5 * Permission to use, copy, modify, and/or distribute this software for
6 * any purpose with or without fee is hereby granted, provided that the
7 * above copyright notice and this permission notice appear in all
8 * copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17 * PERFORMANCE OF THIS SOFTWARE.
18 */
19
20 /**
21 * \file csr_api.h
22 *
23 * Exports and types for the Common Scan and Roaming Module interfaces.
24 */
25
26 #ifndef CSRAPI_H__
27 #define CSRAPI_H__
28
29 #include "sir_api.h"
30 #include "sir_mac_prot_def.h"
31 #include "csr_link_list.h"
32 #include "wlan_scan_public_structs.h"
33 #include "wlan_mlme_public_struct.h"
34 #include "wlan_mlme_main.h"
35
36 #define CSR_INVALID_SCANRESULT_HANDLE (NULL)
37
38 /* Length to print MAC 12 char + 5 ":" + 2 space + mld string */
39 #define MAC_ADDR_DUMP_LEN 26
40
41 enum csr_akm_type {
42 /* never used */
43 eCSR_AUTH_TYPE_NONE,
44 /* MAC layer authentication types */
45 eCSR_AUTH_TYPE_OPEN_SYSTEM,
46 eCSR_AUTH_TYPE_SHARED_KEY,
47 eCSR_AUTH_TYPE_SAE,
48 eCSR_AUTH_TYPE_AUTOSWITCH,
49
50 /* Upper layer authentication types */
51 eCSR_AUTH_TYPE_WPA,
52 eCSR_AUTH_TYPE_WPA_PSK,
53 eCSR_AUTH_TYPE_WPA_NONE,
54
55 eCSR_AUTH_TYPE_RSN,
56 eCSR_AUTH_TYPE_RSN_PSK,
57 eCSR_AUTH_TYPE_FT_RSN,
58 eCSR_AUTH_TYPE_FT_RSN_PSK,
59 #ifdef FEATURE_WLAN_WAPI
60 eCSR_AUTH_TYPE_WAPI_WAI_CERTIFICATE,
61 eCSR_AUTH_TYPE_WAPI_WAI_PSK,
62 #endif /* FEATURE_WLAN_WAPI */
63 eCSR_AUTH_TYPE_CCKM_WPA,
64 eCSR_AUTH_TYPE_CCKM_RSN,
65 eCSR_AUTH_TYPE_RSN_PSK_SHA256,
66 eCSR_AUTH_TYPE_RSN_8021X_SHA256,
67 eCSR_AUTH_TYPE_FILS_SHA256,
68 eCSR_AUTH_TYPE_FILS_SHA384,
69 eCSR_AUTH_TYPE_FT_FILS_SHA256,
70 eCSR_AUTH_TYPE_FT_FILS_SHA384,
71 eCSR_AUTH_TYPE_DPP_RSN,
72 eCSR_AUTH_TYPE_OWE,
73 eCSR_AUTH_TYPE_SUITEB_EAP_SHA256,
74 eCSR_AUTH_TYPE_SUITEB_EAP_SHA384,
75 eCSR_AUTH_TYPE_OSEN,
76 eCSR_AUTH_TYPE_FT_SAE,
77 eCSR_AUTH_TYPE_FT_SUITEB_EAP_SHA384,
78 eCSR_AUTH_TYPE_SAE_EXT_KEY,
79 eCSR_AUTH_TYPE_FT_SAE_EXT_KEY,
80 eCSR_NUM_OF_SUPPORT_AUTH_TYPE,
81 eCSR_AUTH_TYPE_FAILED = 0xff,
82 eCSR_AUTH_TYPE_UNKNOWN = eCSR_AUTH_TYPE_FAILED,
83
84 };
85
86 typedef enum {
87 eCSR_ENCRYPT_TYPE_NONE,
88 eCSR_ENCRYPT_TYPE_WEP40_STATICKEY,
89 eCSR_ENCRYPT_TYPE_WEP104_STATICKEY,
90 eCSR_ENCRYPT_TYPE_WEP40,
91 eCSR_ENCRYPT_TYPE_WEP104,
92 eCSR_ENCRYPT_TYPE_TKIP,
93 eCSR_ENCRYPT_TYPE_AES,/* CCMP */
94 #ifdef FEATURE_WLAN_WAPI
95 /* WAPI */
96 eCSR_ENCRYPT_TYPE_WPI,
97 #endif /* FEATURE_WLAN_WAPI */
98 eCSR_ENCRYPT_TYPE_KRK,
99 eCSR_ENCRYPT_TYPE_BTK,
100 eCSR_ENCRYPT_TYPE_AES_CMAC,
101 eCSR_ENCRYPT_TYPE_AES_GMAC_128,
102 eCSR_ENCRYPT_TYPE_AES_GMAC_256,
103 eCSR_ENCRYPT_TYPE_AES_GCMP,
104 eCSR_ENCRYPT_TYPE_AES_GCMP_256,
105 eCSR_ENCRYPT_TYPE_ANY,
106 eCSR_NUM_OF_ENCRYPT_TYPE = eCSR_ENCRYPT_TYPE_ANY,
107
108 eCSR_ENCRYPT_TYPE_FAILED = 0xff,
109 eCSR_ENCRYPT_TYPE_UNKNOWN = eCSR_ENCRYPT_TYPE_FAILED,
110
111 } eCsrEncryptionType;
112
113 typedef enum {
114 /* 11a/b/g only, no HT, no proprietary */
115 eCSR_DOT11_MODE_abg = 0x0001,
116 eCSR_DOT11_MODE_11a = 0x0002,
117 eCSR_DOT11_MODE_11b = 0x0004,
118 eCSR_DOT11_MODE_11g = 0x0008,
119 eCSR_DOT11_MODE_11n = 0x0010,
120 eCSR_DOT11_MODE_11g_ONLY = 0x0020,
121 eCSR_DOT11_MODE_11n_ONLY = 0x0040,
122 eCSR_DOT11_MODE_11b_ONLY = 0x0080,
123 eCSR_DOT11_MODE_11ac = 0x0100,
124 eCSR_DOT11_MODE_11ac_ONLY = 0x0200,
125 /*
126 * This is for WIFI test. It is same as eWNIAPI_MAC_PROTOCOL_ALL
127 * It is for CSR internal use
128 */
129 eCSR_DOT11_MODE_AUTO = 0x0400,
130 eCSR_DOT11_MODE_11ax = 0x0800,
131 eCSR_DOT11_MODE_11ax_ONLY = 0x1000,
132 eCSR_DOT11_MODE_11be = 0x2000,
133 eCSR_DOT11_MODE_11be_ONLY = 0x4000,
134
135 /* specify the number of maximum bits for phyMode */
136 eCSR_NUM_PHY_MODE = 18,
137 } eCsrPhyMode;
138
139 #ifdef WLAN_FEATURE_11BE
140 #define CSR_IS_DOT11_PHY_MODE_11BE(dot11mode) \
141 ((dot11mode) == eCSR_DOT11_MODE_11be)
142 #define CSR_IS_DOT11_PHY_MODE_11BE_ONLY(dot11mode) \
143 ((dot11mode) == eCSR_DOT11_MODE_11be_ONLY)
144 #else
145 #define CSR_IS_DOT11_PHY_MODE_11BE(dot11mode) 0
146 #define CSR_IS_DOT11_PHY_MODE_11BE_ONLY(dot11mode) 0
147 #endif
148
149 /**
150 * enum eCsrRoamBssType - BSS type in CSR operations
151 * @eCSR_BSS_TYPE_INFRASTRUCTURE: Infrastructure station
152 * @eCSR_BSS_TYPE_INFRA_AP: SoftAP
153 * @eCSR_BSS_TYPE_NDI: NAN datapath interface
154 * @eCSR_BSS_TYPE_ANY: any BSS type
155 */
156 typedef enum {
157 eCSR_BSS_TYPE_INFRASTRUCTURE,
158 eCSR_BSS_TYPE_INFRA_AP,
159 eCSR_BSS_TYPE_NDI,
160 eCSR_BSS_TYPE_ANY,
161 } eCsrRoamBssType;
162
163 typedef enum {
164 eCSR_SCAN_SUCCESS,
165 eCSR_SCAN_FAILURE,
166 eCSR_SCAN_ABORT,
167 eCSR_SCAN_FOUND_PEER,
168 } eCsrScanStatus;
169
170 typedef enum {
171 eCSR_BW_20MHz_VAL = 20,
172 eCSR_BW_40MHz_VAL = 40,
173 eCSR_BW_80MHz_VAL = 80,
174 eCSR_BW_160MHz_VAL = 160
175 } eCSR_BW_Val;
176
177 typedef enum {
178 eCSR_INI_SINGLE_CHANNEL_CENTERED = 0,
179 eCSR_INI_DOUBLE_CHANNEL_LOW_PRIMARY = 1,
180 eCSR_INI_DOUBLE_CHANNEL_HIGH_PRIMARY = 3,
181 eCSR_INI_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED = 4,
182 eCSR_INI_QUADRUPLE_CHANNEL_20MHZ_CENTERED_40MHZ_CENTERED = 5,
183 eCSR_INI_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED = 6,
184 eCSR_INI_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW = 7,
185 eCSR_INI_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW = 8,
186 eCSR_INI_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH = 9,
187 eCSR_INI_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH = 10,
188 eCSR_INI_CHANNEL_BONDING_STATE_MAX = 11
189 } eIniChanBondState;
190
191 typedef struct tagCsrChannelInfo {
192 uint8_t numOfChannels;
193 uint32_t *freq_list;
194 } tCsrChannelInfo, *tpCsrChannelInfo;
195
196 typedef enum {
197 eHIDDEN_SSID_NOT_IN_USE,
198 eHIDDEN_SSID_ZERO_LEN,
199 eHIDDEN_SSID_ZERO_CONTENTS
200 } tHiddenssId;
201
202 typedef struct tagCsrSSIDInfo {
203 tSirMacSSid SSID;
204 tHiddenssId ssidHidden;
205 } tCsrSSIDInfo;
206
207 typedef struct tagCsrSSIDs {
208 uint32_t numOfSSIDs;
209 tCsrSSIDInfo *SSIDList; /* To be allocated for array of SSIDs */
210 } tCsrSSIDs;
211
212 typedef struct tagCsrBSSIDs {
213 uint32_t numOfBSSIDs;
214 struct qdf_mac_addr *bssid;
215 } tCsrBSSIDs;
216
217 typedef struct tagCsrScanResultInfo {
218 /*
219 * Carry the IEs for the current BSSDescription.
220 * A pointer to tDot11fBeaconIEs. Maybe NULL for start BSS.
221 */
222 void *pvIes;
223 tAniSSID ssId;
224 unsigned long timer; /* timer is variable for hidden SSID timer */
225 /*
226 * This member must be the last in the structure because the
227 * end of struct bss_description is an
228 * array with nonknown size at this time */
229 struct bss_description BssDescriptor;
230 } tCsrScanResultInfo;
231
232 typedef struct tagCsrAuthList {
233 uint32_t numEntries;
234 enum csr_akm_type authType[eCSR_NUM_OF_SUPPORT_AUTH_TYPE];
235 } tCsrAuthList, *tpCsrAuthList;
236
237 typedef struct sCsrChannel_ {
238 uint8_t numChannels;
239 uint32_t channel_freq_list[CFG_VALID_CHANNEL_LIST_LEN];
240 } sCsrChannel;
241
242 typedef struct sCsrChnPower_ {
243 uint32_t first_chan_freq;
244 uint8_t numChannels;
245 uint8_t maxtxPower;
246 } sCsrChnPower;
247
248 typedef struct tagCsr11dinfo {
249 sCsrChannel Channels;
250 /* max power channel list */
251 sCsrChnPower ChnPower[CFG_VALID_CHANNEL_LIST_LEN];
252 } tCsr11dinfo;
253
254 typedef enum {
255 /* CSR is done lostlink roaming and still cannot reconnect */
256 eCSR_ROAM_LOSTLINK = 12,
257 /*
258 * TKIP MIC error detected, callback gets a pointer
259 * to struct mic_failure_ind
260 */
261 eCSR_ROAM_MIC_ERROR_IND = 14,
262 eCSR_ROAM_SET_KEY_COMPLETE = 17,
263 /* BSS in SoftAP mode status indication */
264 eCSR_ROAM_INFRA_IND = 18,
265 eCSR_ROAM_WPS_PBC_PROBE_REQ_IND = 19,
266 /* Disaconnect all the clients */
267 eCSR_ROAM_DISCONNECT_ALL_P2P_CLIENTS = 31,
268 /* Stopbss triggered from SME due to different */
269 eCSR_ROAM_SEND_P2P_STOP_BSS = 32,
270 /* beacon interval */
271 eCSR_ROAM_UNPROT_MGMT_FRAME_IND = 33,
272
273 #ifdef FEATURE_WLAN_ESE
274 eCSR_ROAM_TSM_IE_IND = 34,
275 eCSR_ROAM_ESE_ADJ_AP_REPORT_IND = 36,
276 eCSR_ROAM_ESE_BCN_REPORT_IND = 37,
277 #endif /* FEATURE_WLAN_ESE */
278
279 /* Radar indication from lower layers */
280 eCSR_ROAM_DFS_RADAR_IND = 38,
281 eCSR_ROAM_SET_CHANNEL_RSP = 39,
282
283 /* Channel sw update notification */
284 eCSR_ROAM_DFS_CHAN_SW_NOTIFY = 40,
285 eCSR_ROAM_EXT_CHG_CHNL_IND = 41,
286 eCSR_ROAM_STA_CHANNEL_SWITCH = 42,
287 eCSR_ROAM_NDP_STATUS_UPDATE = 43,
288 eCSR_ROAM_CHANNEL_COMPLETE_IND = 47,
289 eCSR_ROAM_CAC_COMPLETE_IND = 48,
290 eCSR_ROAM_SAE_COMPUTE = 49,
291 eCSR_ROAM_CHANNEL_INFO_EVENT_IND = 50,
292 } eRoamCmdStatus;
293
294 /* comment inside indicates what roaming callback gets */
295 typedef enum {
296 eCSR_ROAM_RESULT_NONE,
297 eCSR_ROAM_RESULT_SUCCESS = eCSR_ROAM_RESULT_NONE,
298 /*
299 * If roamStatus is eCSR_ROAM_ASSOCIATION_COMPLETION,
300 * struct csr_roam_info's bss_desc may pass back
301 */
302 eCSR_ROAM_RESULT_FAILURE,
303 /* Pass back pointer to struct csr_roam_info */
304 eCSR_ROAM_RESULT_ASSOCIATED,
305 eCSR_ROAM_RESULT_NOT_ASSOCIATED,
306 eCSR_ROAM_RESULT_MIC_FAILURE,
307 eCSR_ROAM_RESULT_FORCED,
308 eCSR_ROAM_RESULT_DISASSOC_IND,
309 eCSR_ROAM_RESULT_DEAUTH_IND,
310 eCSR_ROAM_RESULT_CAP_CHANGED,
311 eCSR_ROAM_RESULT_LOSTLINK,
312 eCSR_ROAM_RESULT_MIC_ERROR_UNICAST,
313 eCSR_ROAM_RESULT_MIC_ERROR_GROUP,
314 eCSR_ROAM_RESULT_AUTHENTICATED,
315 eCSR_ROAM_RESULT_NEW_RSN_BSS,
316 #ifdef FEATURE_WLAN_WAPI
317 eCSR_ROAM_RESULT_NEW_WAPI_BSS,
318 #endif /* FEATURE_WLAN_WAPI */
319 /* INFRA started successfully */
320 eCSR_ROAM_RESULT_INFRA_STARTED,
321 /* INFRA start failed */
322 eCSR_ROAM_RESULT_INFRA_START_FAILED,
323 /* INFRA stopped */
324 eCSR_ROAM_RESULT_INFRA_STOPPED,
325 /* A station joining INFRA AP */
326 eCSR_ROAM_RESULT_INFRA_ASSOCIATION_IND,
327 /* A station joined INFRA AP */
328 eCSR_ROAM_RESULT_INFRA_ASSOCIATION_CNF,
329 /* INFRA disassociated */
330 eCSR_ROAM_RESULT_INFRA_DISASSOCIATED,
331 eCSR_ROAM_RESULT_WPS_PBC_PROBE_REQ_IND,
332 eCSR_ROAM_RESULT_SEND_ACTION_FAIL,
333 /* peer rejected assoc because max assoc limit reached */
334 eCSR_ROAM_RESULT_MAX_ASSOC_EXCEEDED,
335 /* Assoc rejected due to concurrent session running on a diff channel */
336 eCSR_ROAM_RESULT_ASSOC_FAIL_CON_CHANNEL,
337 /* TDLS events */
338 eCSR_ROAM_RESULT_ADD_TDLS_PEER,
339 eCSR_ROAM_RESULT_UPDATE_TDLS_PEER,
340 eCSR_ROAM_RESULT_DELETE_TDLS_PEER,
341 eCSR_ROAM_RESULT_TEARDOWN_TDLS_PEER_IND,
342 eCSR_ROAM_RESULT_DELETE_ALL_TDLS_PEER_IND,
343 eCSR_ROAM_RESULT_LINK_ESTABLISH_REQ_RSP,
344 eCSR_ROAM_RESULT_TDLS_SHOULD_DISCOVER,
345 eCSR_ROAM_RESULT_TDLS_SHOULD_TEARDOWN,
346 eCSR_ROAM_RESULT_TDLS_SHOULD_PEER_DISCONNECTED,
347 eCSR_ROAM_RESULT_TDLS_CONNECTION_TRACKER_NOTIFICATION,
348 eCSR_ROAM_RESULT_DFS_RADAR_FOUND_IND,
349 eCSR_ROAM_RESULT_CHANNEL_CHANGE_SUCCESS,
350 eCSR_ROAM_RESULT_CHANNEL_CHANGE_FAILURE,
351 eCSR_ROAM_RESULT_CSA_RESTART_RSP,
352 eCSR_ROAM_RESULT_DFS_CHANSW_UPDATE_SUCCESS,
353 eCSR_ROAM_EXT_CHG_CHNL_UPDATE_IND,
354
355 eCSR_ROAM_RESULT_NDI_CREATE_RSP,
356 eCSR_ROAM_RESULT_NDI_DELETE_RSP,
357 eCSR_ROAM_RESULT_NDP_INITIATOR_RSP,
358 eCSR_ROAM_RESULT_NDP_NEW_PEER_IND,
359 eCSR_ROAM_RESULT_NDP_CONFIRM_IND,
360 eCSR_ROAM_RESULT_NDP_INDICATION,
361 eCSR_ROAM_RESULT_NDP_SCHED_UPDATE_RSP,
362 eCSR_ROAM_RESULT_NDP_RESPONDER_RSP,
363 eCSR_ROAM_RESULT_NDP_END_RSP,
364 eCSR_ROAM_RESULT_NDP_PEER_DEPARTED_IND,
365 eCSR_ROAM_RESULT_NDP_END_IND,
366 eCSR_ROAM_RESULT_CAC_END_IND,
367 /* If Scan for SSID failed to found proper BSS */
368 eCSR_ROAM_RESULT_SCAN_FOR_SSID_FAILURE,
369 eCSR_ROAM_RESULT_INVOKE_FAILED,
370 } eCsrRoamResult;
371
372 typedef enum {
373 /* Not associated in Infra or participating in an Ad-hoc */
374 eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED,
375 /* Participating in WDS network in AP/STA mode but not connected yet */
376 eCSR_ASSOC_STATE_TYPE_WDS_DISCONNECTED,
377 /* Participating in a WDS network and connected peer to peer */
378 eCSR_ASSOC_STATE_TYPE_WDS_CONNECTED,
379 /* Participating in a Infra network in AP not yet in connected state */
380 eCSR_ASSOC_STATE_TYPE_INFRA_DISCONNECTED,
381 /* Participating in a Infra network and connected to a peer */
382 eCSR_ASSOC_STATE_TYPE_INFRA_CONNECTED,
383 /* NAN Data interface not started */
384 eCSR_CONNECT_STATE_TYPE_NDI_NOT_STARTED,
385 /* NAN Data interface started */
386 eCSR_CONNECT_STATE_TYPE_NDI_STARTED,
387 } eCsrConnectState;
388
389 typedef enum {
390 eCSR_OPERATING_CHANNEL_ALL = 0,
391 eCSR_OPERATING_CHANNEL_AUTO = eCSR_OPERATING_CHANNEL_ALL,
392 eCSR_OPERATING_CHANNEL_ANY = eCSR_OPERATING_CHANNEL_ALL,
393 } eOperationChannel;
394
395 typedef enum {
396 /*
397 * Roaming because HDD requested for reassoc by changing one of the
398 * fields in tCsrRoamModifyProfileFields. OR Roaming because SME
399 * requested for reassoc by changing one of the fields in
400 * tCsrRoamModifyProfileFields.
401 */
402 eCsrRoamReasonStaCapabilityChanged,
403 /*
404 * Roaming because SME requested for reassoc to a different AP,
405 * as part of inter AP handoff.
406 */
407 eCsrRoamReasonBetterAP,
408 /*
409 * Roaming because SME requested it as the link is lost - placeholder,
410 * will clean it up once handoff code gets in
411 */
412 eCsrRoamReasonSmeIssuedForLostLink,
413
414 } eCsrRoamReasonCodes;
415
416 /*
417 * Following fields might need modification dynamically once STA is up
418 * & running & this'd trigger reassoc.
419 */
420 typedef struct tagCsrRoamModifyProfileFields {
421 /*
422 * during connect this specifies ACs U-APSD is to be setup
423 * for (Bit0:VO; Bit1:VI; Bit2:BK; Bit3:BE all other bits are ignored).
424 * During assoc response this COULD carry confirmation of what
425 * ACs U-APSD got setup for. Later if an APP looking for APSD,
426 * SME-QoS might need to modify this field
427 */
428 uint8_t uapsd_mask;
429 } tCsrRoamModifyProfileFields;
430
431 struct csr_roam_profile {
432 tCsrSSIDs SSIDs;
433 tCsrBSSIDs BSSIDs;
434 /* this is bit mask of all the needed phy mode defined in eCsrPhyMode */
435 uint32_t phyMode;
436 eCsrRoamBssType BSSType;
437 tCsrChannelInfo ChannelInfo;
438 uint32_t op_freq;
439 struct ch_params ch_params;
440 /* If this is 0, SME will fill in for caller. */
441 uint16_t beaconInterval;
442 /*
443 * during connect this specifies ACs U-APSD is to be setup
444 * for (Bit0:VO; Bit1:VI; Bit2:BK; Bit3:BE all other bits are ignored).
445 * During assoc resp this'd carry cnf of what ACs U-APSD got setup for
446 */
447 uint8_t uapsd_mask;
448 uint32_t nRSNReqIELength; /* The byte count in the pRSNReqIE */
449 uint8_t *pRSNReqIE; /* If not null,it's IE byte stream for RSN */
450 uint8_t privacy;
451 tAniAuthType csr80211AuthType;
452 uint32_t dtimPeriod;
453 bool chan_switch_hostapd_rate_enabled;
454 uint16_t cfg_protection;
455 uint8_t wps_state;
456 enum QDF_OPMODE csrPersona;
457 /* addIe params */
458 struct add_ie_params add_ie_params;
459 uint16_t beacon_tx_rate;
460 tSirMacRateSet supported_rates;
461 tSirMacRateSet extended_rates;
462 bool require_h2e;
463 uint32_t cac_duration_ms;
464 uint32_t dfs_regdomain;
465 };
466
467 struct csr_config_params {
468 /* keep this uint32_t. This gets converted to ePhyChannelBondState */
469 uint32_t channelBondingMode24GHz;
470 uint32_t channelBondingMode5GHz;
471 eCsrPhyMode phyMode;
472 uint32_t HeartbeatThresh50;
473 enum wmm_user_mode WMMSupportMode;
474 bool Is11eSupportEnabled;
475 bool ProprietaryRatesEnabled;
476 /* to set MCC Enable/Disable mode */
477 uint8_t fEnableMCCMode;
478 bool mcc_rts_cts_prot_enable;
479 bool mcc_bcast_prob_resp_enable;
480 /*
481 * To allow MCC GO different B.I than STA's.
482 * NOTE: make sure if RIVA firmware can handle this combination before
483 * enabling this at the moment, this flag is provided only to pass
484 * Wi-Fi Cert. 5.1.12
485 */
486 uint8_t fAllowMCCGODiffBI;
487 tCsr11dinfo Csr11dinfo;
488 /*
489 * Customer wants to optimize the scan time. Avoiding scans(passive)
490 * on DFS channels while swipping through both bands can save some time
491 * (apprx 1.3 sec)
492 */
493 uint8_t fEnableDFSChnlScan;
494 bool send_smps_action;
495
496 #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
497 uint8_t cc_switch_mode;
498 #endif
499 bool obssEnabled;
500 uint8_t conc_custom_rule1;
501 uint8_t conc_custom_rule2;
502 uint8_t is_sta_connection_in_5gz_enabled;
503
504 uint8_t max_intf_count;
505 uint32_t f_sta_miracast_mcc_rest_time_val;
506 #ifdef FEATURE_AP_MCC_CH_AVOIDANCE
507 bool sap_channel_avoidance;
508 #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
509 enum force_1x1_type is_force_1x1;
510 bool wep_tkip_in_he;
511 };
512
513 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
514 #define DEFAULT_REASSOC_FAILURE_TIMEOUT 1000
515 #endif
516
517 struct csr_roam_info {
518 uint32_t nFrameLength;
519 uint8_t frameType;
520 /*
521 * Point to a buffer contain the beacon, assoc req, assoc rsp frame,
522 * in that order user needs to use nBeaconLength, nAssocReqLength,
523 * nAssocRspLength to desice where each frame starts and ends.
524 */
525 uint8_t *pbFrames;
526 bool fReassocReq; /* set to true if for re-association */
527 struct qdf_mac_addr bssid;
528 struct qdf_mac_addr peerMac;
529 tSirResultCodes status_code;
530 /* this'd be our own defined or sent from otherBSS(per 802.11spec) */
531 uint32_t reasonCode;
532
533 uint8_t disassoc_reason;
534
535 uint8_t staId; /* Peer stationId when connected */
536 /* false means auth needed from supplicant. true means authenticated */
537 bool fAuthRequired;
538 uint8_t rsnIELen;
539 uint8_t *prsnIE;
540 uint8_t wapiIELen;
541 uint8_t *pwapiIE;
542 uint8_t addIELen;
543 uint8_t *paddIE;
544 union {
545 tSirMicFailureInfo *pMICFailureInfo;
546 tSirWPSPBCProbeReq *pWPSPBCProbeReq;
547 } u;
548 bool wmmEnabledSta; /* set to true if WMM enabled STA */
549 #ifdef FEATURE_WLAN_ESE
550 struct tsm_ie tsm_ie;
551 uint16_t tsmRoamDelay;
552 struct ese_bcn_report_rsp *pEseBcnReportRsp;
553 #endif
554 /* Required for indicating the frames to upper layer */
555 uint32_t assocReqLength;
556 uint8_t *assocReqPtr;
557 tSirChanChangeResponse *channelChangeRespEvent;
558 /* Timing and fine Timing measurement capability clubbed together */
559 uint8_t timingMeasCap;
560 struct oem_channel_info chan_info;
561 uint32_t target_chan_freq;
562
563 #ifdef WLAN_FEATURE_NAN
564 union {
565 struct ndi_create_rsp ndi_create_params;
566 struct ndi_delete_rsp ndi_delete_params;
567 } ndp;
568 #endif
569 tDot11fIEHTCaps ht_caps;
570 tDot11fIEVHTCaps vht_caps;
571 bool he_caps_present;
572 bool eht_caps_present;
573 bool ampdu;
574 bool sgi_enable;
575 bool tx_stbc;
576 bool rx_stbc;
577 tSirMacHTChannelWidth ch_width;
578 enum sir_sme_phy_mode mode;
579 uint8_t max_supp_idx;
580 uint8_t max_ext_idx;
581 uint8_t max_real_mcs_idx;
582 uint8_t max_mcs_idx;
583 uint8_t rx_mcs_map;
584 uint8_t tx_mcs_map;
585 /* Extended capabilities of STA */
586 uint8_t ecsa_capable;
587 uint32_t ext_cap;
588 uint8_t supported_band;
589 int rssi;
590 int tx_rate;
591 int rx_rate;
592 tSirMacCapabilityInfo capability_info;
593 uint32_t rx_mc_bc_cnt;
594 uint32_t rx_retry_cnt;
595 #ifdef WLAN_FEATURE_SAE
596 struct sir_sae_info *sae_info;
597 #endif
598 struct assoc_ind *owe_pending_assoc_ind;
599 struct assoc_ind *ft_pending_assoc_ind;
600
601 struct qdf_mac_addr peer_mld;
602 #ifdef WLAN_FEATURE_SAP_ACS_OPTIMIZE
603 uint32_t chan_info_freq;
604 #endif
605 };
606
607 typedef struct sSirSmeAssocIndToUpperLayerCnf {
608 uint16_t messageType; /* eWNI_SME_ASSOC_CNF */
609 uint16_t length;
610 uint8_t sessionId;
611 tSirResultCodes status_code;
612 tSirMacAddr bssId; /* Self BSSID */
613 tSirMacAddr peerMacAddr;
614 uint16_t aid;
615 uint8_t wmmEnabledSta; /* set to true if WMM enabled STA */
616 tSirRSNie rsnIE; /* RSN IE received from peer */
617 tSirWAPIie wapiIE; /* WAPI IE received from peer */
618 tSirAddie addIE; /* this can be WSC and/or P2P IE */
619 uint8_t reassocReq; /* set to true if reassoc */
620 /* Timing and fine Timing measurement capability clubbed together */
621 uint8_t timingMeasCap;
622 struct oem_channel_info chan_info;
623 uint8_t target_channel;
624 bool ampdu;
625 bool sgi_enable;
626 bool tx_stbc;
627 tSirMacHTChannelWidth ch_width;
628 enum sir_sme_phy_mode mode;
629 bool rx_stbc;
630 uint8_t max_supp_idx;
631 uint8_t max_ext_idx;
632 uint8_t max_mcs_idx;
633 uint8_t max_real_mcs_idx;
634 uint8_t rx_mcs_map;
635 uint8_t tx_mcs_map;
636 /* Extended capabilities of STA */
637 uint8_t ecsa_capable;
638 uint32_t ext_cap;
639 uint8_t supported_band;
640
641 uint32_t ies_len;
642 uint8_t *ies;
643 tDot11fIEHTCaps ht_caps;
644 tDot11fIEVHTCaps vht_caps;
645 tSirMacCapabilityInfo capability_info;
646 bool he_caps_present;
647 bool eht_caps_present;
648 #ifdef WLAN_FEATURE_11BE_MLO
649 tSirMacAddr peer_mld_addr;
650 #endif
651 } tSirSmeAssocIndToUpperLayerCnf, *tpSirSmeAssocIndToUpperLayerCnf;
652
653 typedef struct tagCsrSummaryStatsInfo {
654 uint32_t snr;
655 int8_t rssi;
656 uint32_t retry_cnt[4];
657 uint32_t multiple_retry_cnt[4];
658 uint32_t tx_frm_cnt[4];
659 /* uint32_t num_rx_frm_crc_err; same as rx_error_cnt */
660 /* uint32_t num_rx_frm_crc_ok; same as rx_frm_cnt */
661 uint32_t rx_frm_cnt;
662 uint32_t frm_dup_cnt;
663 uint32_t fail_cnt[4];
664 uint32_t rts_fail_cnt;
665 uint32_t ack_fail_cnt;
666 uint32_t rts_succ_cnt;
667 uint32_t rx_discard_cnt;
668 uint32_t rx_error_cnt;
669 uint32_t tx_byte_cnt;
670
671 } tCsrSummaryStatsInfo;
672
673 typedef struct tagCsrGlobalClassAStatsInfo {
674 uint8_t tx_nss;
675 uint8_t rx_nss;
676 uint8_t rx_preamble;
677 uint8_t rx_bw;
678 uint32_t max_pwr;
679 uint32_t tx_rate;
680 uint32_t rx_rate;
681 /* mcs index for HT20 and HT40 rates */
682 uint32_t tx_mcs_index;
683 uint32_t rx_mcs_index;
684 enum tx_rate_info tx_mcs_rate_flags;
685 enum tx_rate_info rx_mcs_rate_flags;
686 uint8_t tx_dcm;
687 uint8_t rx_dcm;
688 enum txrate_gi tx_gi;
689 enum txrate_gi rx_gi;
690 /* to diff between HT20 & HT40 rates;short & long guard interval */
691 enum tx_rate_info tx_rx_rate_flags;
692
693 } tCsrGlobalClassAStatsInfo;
694
695 typedef struct tagCsrGlobalClassDStatsInfo {
696 uint32_t tx_uc_frm_cnt;
697 uint32_t tx_mc_frm_cnt;
698 uint32_t tx_bc_frm_cnt;
699 uint32_t rx_uc_frm_cnt;
700 uint32_t rx_mc_frm_cnt;
701 uint32_t rx_bc_frm_cnt;
702 uint32_t tx_uc_byte_cnt[4];
703 uint32_t tx_mc_byte_cnt;
704 uint32_t tx_bc_byte_cnt;
705 uint32_t rx_uc_byte_cnt[4];
706 uint32_t rx_mc_byte_cnt;
707 uint32_t rx_bc_byte_cnt;
708 uint32_t rx_byte_cnt;
709 uint32_t num_rx_bytes_crc_ok;
710 uint32_t rx_rate;
711
712 } tCsrGlobalClassDStatsInfo;
713
714 /**
715 * struct csr_per_chain_rssi_stats_info - stores chain rssi
716 * @rssi: array containing rssi for all chains
717 * @peer_mac_addr: peer mac address
718 */
719 struct csr_per_chain_rssi_stats_info {
720 int8_t rssi[NUM_CHAINS_MAX];
721 tSirMacAddr peer_mac_addr;
722 };
723
724 typedef void *tScanResultHandle;
725
726 typedef enum {
727 REASSOC = 0,
728 FASTREASSOC = 1,
729 CONNECT_CMD_USERSPACE = 2,
730 } handoff_src;
731
732 typedef struct tagCsrHandoffRequest {
733 struct qdf_mac_addr bssid;
734 uint32_t ch_freq;
735 uint8_t src; /* To check if its a REASSOC or a FASTREASSOC IOCTL */
736 } tCsrHandoffRequest;
737
738 #ifdef FEATURE_WLAN_ESE
739 typedef struct tagCsrEseBeaconReqParams {
740 uint16_t measurementToken;
741 uint32_t ch_freq;
742 uint8_t scanMode;
743 uint16_t measurementDuration;
744 } tCsrEseBeaconReqParams, *tpCsrEseBeaconReqParams;
745
746 typedef struct tagCsrEseBeaconReq {
747 uint8_t numBcnReqIe;
748 tCsrEseBeaconReqParams bcnReq[SIR_ESE_MAX_MEAS_IE_REQS];
749 } tCsrEseBeaconReq, *tpCsrEseBeaconReq;
750 #endif /* FEATURE_WLAN_ESE */
751
752 struct csr_del_sta_params {
753 struct qdf_mac_addr peerMacAddr;
754 struct qdf_mac_addr peer_mld_addr;
755 uint16_t reason_code;
756 uint8_t subtype;
757 };
758
759 /* Struct bss_dot11_config - Dot11 parameters for
760 * SAP operation
761 * @vdev_id: vdev id
762 * @privacy: privacy config
763 * @phy_mode: phy mode
764 * @bss_op_ch_freq: operational frequency
765 * @dot11_mode: dot11 mode
766 * @nw_type: network type
767 * @p_band: operating band
768 * @opr_rates: operational rates
769 * @ext_rates: extended rates
770 */
771 struct bss_dot11_config {
772 uint8_t vdev_id;
773 uint8_t privacy;
774 eCsrPhyMode phy_mode;
775 uint32_t bss_op_ch_freq;
776 uint8_t dot11_mode;
777 tSirNwType nw_type;
778 enum reg_wifi_band p_band;
779 tSirMacRateSet opr_rates;
780 tSirMacRateSet ext_rates;
781 };
782
783 typedef QDF_STATUS (*csr_roam_complete_cb)(struct wlan_objmgr_psoc *psoc,
784 uint8_t session_id,
785 struct csr_roam_info *param,
786 eRoamCmdStatus roam_status,
787 eCsrRoamResult roam_result);
788 typedef QDF_STATUS (*csr_session_close_cb)(uint8_t session_id);
789
790 #define CSR_IS_ANY_BSS_TYPE(pProfile) (eCSR_BSS_TYPE_ANY == \
791 (pProfile)->BSSType)
792 #define CSR_IS_INFRA_AP(pProfile) (eCSR_BSS_TYPE_INFRA_AP == \
793 (pProfile)->BSSType)
794 #ifdef WLAN_FEATURE_NAN
795 #define CSR_IS_NDI(profile) (eCSR_BSS_TYPE_NDI == (profile)->BSSType)
796 #else
797 #define CSR_IS_NDI(profile) (false)
798 #endif
799
800 #ifdef WLAN_FEATURE_NAN
801 #define CSR_IS_CONN_NDI(profile) (eCSR_BSS_TYPE_NDI == (profile)->BSSType)
802 #else
803 #define CSR_IS_CONN_NDI(profile) (false)
804 #endif
805
806 QDF_STATUS csr_set_channels(struct mac_context *mac,
807 struct csr_config_params *pParam);
808
809 /* enum to string conversion for debug output */
810 const char *get_e_roam_cmd_status_str(eRoamCmdStatus val);
811 const char *get_e_csr_roam_result_str(eCsrRoamResult val);
812 const char *csr_phy_mode_str(eCsrPhyMode phy_mode);
813
814 #ifdef FEATURE_WLAN_ESE
815 typedef void (*tCsrTsmStatsCallback)(tAniTrafStrmMetrics tsmMetrics,
816 void *pContext);
817 #endif /* FEATURE_WLAN_ESE */
818 typedef void (*tCsrSnrCallback)(int8_t snr, void *pContext);
819
820 typedef void (*csr_readyToSuspendCallback)(void *pContext, bool suspended);
821 #ifdef WLAN_FEATURE_EXTWOW_SUPPORT
822 typedef void (*csr_readyToExtWoWCallback)(void *pContext, bool status);
823 #endif
824 typedef void (*csr_link_status_callback)(uint8_t status, void *context);
825
826 typedef void (*sme_get_raom_scan_ch_callback)(
827 hdd_handle_t hdd_handle,
828 struct roam_scan_ch_resp *roam_ch,
829 void *context);
830
831 #if defined(WLAN_LOGGING_SOCK_SVC_ENABLE) && \
832 defined(CONNECTIVITY_PKTLOG)
833 /**
834 * csr_packetdump_timer_stop() - stops packet dump timer
835 *
836 * This function is used to stop packet dump timer
837 *
838 * Return: None
839 *
840 */
841 void csr_packetdump_timer_stop(void);
842
843 /**
844 * csr_packetdump_timer_start() - start packet dump timer
845 *
846 * This function is used to start packet dump timer
847 *
848 * Return: None
849 *
850 */
851 void csr_packetdump_timer_start(void);
852 #else
csr_packetdump_timer_stop(void)853 static inline void csr_packetdump_timer_stop(void) {}
csr_packetdump_timer_start(void)854 static inline void csr_packetdump_timer_start(void) {}
855 #endif
856
857 /**
858 * csr_update_owe_info() - Update OWE info
859 * @mac: mac context
860 * @assoc_ind: assoc ind
861 *
862 * Return: QDF_STATUS
863 */
864 QDF_STATUS csr_update_owe_info(struct mac_context *mac,
865 struct assoc_ind *assoc_ind);
866
867 /**
868 * csr_update_ft_info() - Update FT info
869 * @mac: mac context
870 * @assoc_ind: assoc ind
871 *
872 * Return: QDF_STATUS
873 */
874
875 QDF_STATUS csr_update_ft_info(struct mac_context *mac,
876 struct assoc_ind *assoc_ind);
877
878 typedef void (*csr_ani_callback)(int8_t *ani, void *context);
879
880 /*
881 * csr_convert_to_reg_phy_mode() - CSR API to convert CSR phymode into
882 * regulatory phymode
883 * @csr_phy_mode: csr phymode with type eCsrPhyMode
884 * @freq: current operating frequency
885 *
886 * This API is used to convert a phymode from CSR to a phymode from regulatory
887 *
888 * Return: regulatory phymode that is comparable to input
889 */
890 enum reg_phymode csr_convert_to_reg_phy_mode(eCsrPhyMode csr_phy_mode,
891 qdf_freq_t freq);
892
893 /*
894 * csr_convert_from_reg_phy_mode() - CSR API to convert regulatory phymode into
895 * CSR phymode
896 * @reg_phymode: regulatory phymode
897 *
898 * This API is used to convert a regulatory phymode to a CSR phymode
899 *
900 * Return: eCSR phymode that is comparable to input
901 */
902 eCsrPhyMode csr_convert_from_reg_phy_mode(enum reg_phymode phymode);
903
904 /*
905 * csr_update_beacon() - CSR API to update beacon template
906 * @mac: mac context
907 *
908 * This API is used to update beacon template to FW
909 *
910 * Return: None
911 */
912 void csr_update_beacon(struct mac_context *mac);
913
914 /**
915 * csr_fill_enc_type() - converts crypto cipher set to csr specific cipher type
916 * @cipher_type: output csr cipher type
917 * @ cipherset:input cipher set
918 *
919 * Return: None
920 */
921 void csr_fill_enc_type(eCsrEncryptionType *cipher_type, uint32_t cipherset);
922
923 /**
924 * csr_fill_auth_type() - auth mode set to csr specific auth type
925 * @auth_type: output csr auth type
926 * @ authmodeset: authmode set
927 * @akm: akm
928 * @ucastcipherset: ucastcipherset
929 *
930 * Return: None
931 */
932 void csr_fill_auth_type(enum csr_akm_type *auth_type,
933 uint32_t authmodeset, uint32_t akm,
934 uint32_t ucastcipherset);
935
936 /**
937 * csr_phy_mode_to_dot11mode() - converts phy mode to dot11 mode
938 * @phy_mode: wlan phy mode
939 *
940 * Return: csr_cfgdot11mode
941 */
942 enum csr_cfgdot11mode csr_phy_mode_to_dot11mode(enum wlan_phymode phy_mode);
943
944 /*
945 * csr_mlme_vdev_disconnect_all_p2p_client_event() - Callback for MLME module
946 * to send a disconnect all P2P event to the SAP event handler
947 * @vdev_id: vdev id of SAP
948 *
949 * Return: QDF_STATUS
950 */
951 QDF_STATUS csr_mlme_vdev_disconnect_all_p2p_client_event(uint8_t vdev_id);
952
953 /*
954 * csr_mlme_vdev_stop_bss() - Callback for MLME module to send a stop BSS event
955 * to the SAP event handler
956 * @vdev_id: vdev id of SAP
957 *
958 * Return: QDF_STATUS
959 */
960 QDF_STATUS csr_mlme_vdev_stop_bss(uint8_t vdev_id);
961
962 /*
963 * csr_mlme_get_concurrent_operation_freq() - Callback for MLME module to
964 * get the concurrent operation frequency
965 *
966 * Return: concurrent frequency
967 */
968 qdf_freq_t csr_mlme_get_concurrent_operation_freq(void);
969
970 /* csr_convert_mode_to_nw_type() - CSR API to convert dot11 mode
971 * to network type.
972 *
973 * @dot11_mode: dot11 mode
974 * @band: reg band
975 *
976 * Return: network type
977 */
978 tSirNwType
979 csr_convert_mode_to_nw_type(enum csr_cfgdot11mode dot11_mode,
980 enum reg_wifi_band band);
981
982 /*
983 * csr_roam_get_phy_mode_band_for_bss() - CSR API to get phy mode and
984 * band for particular dot11 config
985 * @mac : mac context
986 * @dot11_cfg : pointer to the dot11 config
987 *
988 * Return : Void
989 */
990 enum csr_cfgdot11mode
991 csr_roam_get_phy_mode_band_for_bss(struct mac_context *mac,
992 struct bss_dot11_config *dot11_cfg);
993 #endif
994