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