1 /* 2 * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2021-2023 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 #ifndef WLAN_QCT_WLANSAP_H 21 #define WLAN_QCT_WLANSAP_H 22 23 /* 24 * W L A N S O F T A P P A L L A Y E R 25 * E X T E R N A L A P I 26 * 27 * DESCRIPTION 28 * This file contains the external API exposed by the wlan SAP PAL layer 29 * module. 30 */ 31 32 /*---------------------------------------------------------------------------- 33 * Include Files 34 * -------------------------------------------------------------------------*/ 35 #include "cds_api.h" 36 #include "cds_packet.h" 37 #include "qdf_types.h" 38 39 #include "sme_api.h" 40 /*---------------------------------------------------------------------------- 41 * Preprocessor Definitions and Constants 42 * -------------------------------------------------------------------------*/ 43 #ifdef __cplusplus 44 extern "C" { 45 #endif 46 47 /*--------------------------------------------------------------------------- 48 * defines and enum 49 *--------------------------------------------------------------------------*/ 50 #define MAX_ACL_MAC_ADDRESS 32 51 #define AUTO_CHANNEL_SELECT 0 52 #define MAX_ASSOC_IND_IE_LEN 255 53 #define MAX_ASSOC_REQ_IE_LEN 2000 54 #define ASSOC_REQ_IE_OFFSET 4 55 56 /* defines for WPS config states */ 57 #define SAP_WPS_DISABLED 0 58 #define SAP_WPS_ENABLED_UNCONFIGURED 1 59 #define SAP_WPS_ENABLED_CONFIGURED 2 60 61 #define MAX_CHANNEL_LIST_LEN 256 62 #ifndef QDF_MAX_NO_OF_SAP_MODE 63 #define QDF_MAX_NO_OF_SAP_MODE 2 /* max # of SAP */ 64 #endif 65 #define SAP_MAX_NUM_SESSION 5 66 #define SAP_MAX_OBSS_STA_CNT 1 /* max # of OBSS STA */ 67 #define SAP_ACS_WEIGHT_MAX (26664) 68 /* ACS will mark non ACS channels(filtered by PCL) or channels not in 69 * ACS scan list to SAP_ACS_WEIGHT_MAX. 70 * But the filtered channel still need a reasonable weight to 71 * calculate the combined weight for ACS bw 40/80/160/320. 72 * Assign SAP_ACS_WEIGHT_ADJUSTABLE to such channels and update it 73 * with reasonable weight after all channels weight are computed. 74 */ 75 #define SAP_ACS_WEIGHT_ADJUSTABLE (SAP_ACS_WEIGHT_MAX - 1) 76 77 #define SAP_DEFAULT_24GHZ_CHANNEL (6) 78 #define SAP_DEFAULT_5GHZ_CHANNEL (40) 79 #define SAP_CHANNEL_NOT_SELECTED (0) 80 81 #define SAP_PRE_CAC_IFNAME "precac" 82 83 /*-------------------------------------------------------------------------- 84 * reasonCode taken from 802.11 standard. 85 * ------------------------------------------------------------------------*/ 86 87 typedef enum { 88 eSAP_RC_RESERVED0, /*0 */ 89 eSAP_RC_UNSPECIFIED, /*1 */ 90 eSAP_RC_PREV_AUTH_INVALID, /*2 */ 91 eSAP_RC_STA_LEFT_DEAUTH, /*3 */ 92 eSAP_RC_INACTIVITY_DISASSOC, /*4 */ 93 eSAP_RC_AP_CAPACITY_FULL, /*5 */ 94 eSAP_RC_CLS2_FROM_NON_AUTH_STA, /*6 */ 95 eSAP_RC_CLS3_FROM_NON_AUTH_STA, /*7 */ 96 eSAP_RC_STA_LEFT_DISASSOC, /*8 */ 97 eSAP_RC_STA_NOT_AUTH, /*9 */ 98 eSAP_RC_PC_UNACCEPTABLE, /*10 */ 99 eSAP_RC_SC_UNACCEPTABLE, /*11 */ 100 eSAP_RC_RESERVED1, /*12 */ 101 eSAP_RC_INVALID_IE, /*13 */ 102 eSAP_RC_MIC_FAIL, /*14 */ 103 eSAP_RC_4_WAY_HANDSHAKE_TO, /*15 */ 104 eSAP_RC_GO_KEY_HANDSHAKE_TO, /*16 */ 105 eSAP_RC_IE_MISMATCH, /*17 */ 106 eSAP_RC_INVALID_GRP_CHIPHER, /*18 */ 107 eSAP_RC_INVALID_PAIR_CHIPHER, /*19 */ 108 eSAP_RC_INVALID_AKMP, /*20 */ 109 eSAP_RC_UNSUPPORTED_RSN, /*21 */ 110 eSAP_RC_INVALID_RSN, /*22 */ 111 eSAP_RC_1X_AUTH_FAILED, /*23 */ 112 eSAP_RC_CHIPER_SUITE_REJECTED, /*24 */ 113 } eSapReasonCode; 114 115 typedef enum { 116 eSAP_ACCEPT_UNLESS_DENIED = 0, 117 eSAP_DENY_UNLESS_ACCEPTED = 1, 118 /* this type is added to support accept & deny list at the same time */ 119 eSAP_SUPPORT_ACCEPT_AND_DENY = 2, 120 /*In this mode all MAC addresses are allowed to connect */ 121 eSAP_ALLOW_ALL = 3, 122 } eSapMacAddrACL; 123 124 typedef enum { 125 SAP_DENY_LIST = 0, /* List of mac addresses NOT allowed to assoc */ 126 SAP_ALLOW_LIST = 1, /* List of mac addresses allowed to assoc */ 127 } eSapACLType; 128 129 typedef enum { 130 ADD_STA_TO_ACL = 0, /* cmd to add STA to access control list */ 131 DELETE_STA_FROM_ACL = 1, /* cmd to del STA from access control list */ 132 /* only add STA to ACL, do not trigger deauth */ 133 ADD_STA_TO_ACL_NO_DEAUTH = 2, 134 /* only delete STA from ACL, do not trigger deauth */ 135 DELETE_STA_FROM_ACL_NO_DEAUTH = 3, 136 } eSapACLCmdType; 137 138 typedef enum { 139 eSAP_START_BSS_EVENT = 0, /* Event sent when BSS is started */ 140 eSAP_STOP_BSS_EVENT, /* Event sent when BSS is stopped */ 141 eSAP_STA_ASSOC_IND, /* Indicate assoc req to upper layers */ 142 /* 143 * Event sent when we have successfully associated a station and 144 * upper layer needs to allocate a context 145 */ 146 eSAP_STA_ASSOC_EVENT, 147 /* 148 * Event sent when we have successfully reassociated a station and 149 * upper layer needs to allocate a context 150 */ 151 eSAP_STA_REASSOC_EVENT, 152 /* 153 * Event sent when associated a station has disassociated as a 154 * result of various conditions 155 */ 156 eSAP_STA_DISASSOC_EVENT, 157 /* Event sent when user called wlansap_set_key_sta */ 158 eSAP_STA_SET_KEY_EVENT, 159 /* Event sent whenever there is MIC failure detected */ 160 eSAP_STA_MIC_FAILURE_EVENT, 161 /* Event send on WPS PBC probe request is received */ 162 eSAP_WPS_PBC_PROBE_REQ_EVENT, 163 eSAP_DISCONNECT_ALL_P2P_CLIENT, 164 eSAP_MAC_TRIG_STOP_BSS_EVENT, 165 /* 166 * Event send when a STA in neither allow list or deny list tries to 167 * associate in softap mode 168 */ 169 eSAP_UNKNOWN_STA_JOIN, 170 /* Event send when a new STA is rejected association since softAP 171 * max assoc limit has reached 172 */ 173 eSAP_MAX_ASSOC_EXCEEDED, 174 eSAP_CHANNEL_CHANGE_EVENT, 175 eSAP_DFS_CAC_START, 176 eSAP_DFS_CAC_INTERRUPTED, 177 eSAP_DFS_CAC_END, 178 eSAP_DFS_RADAR_DETECT, 179 /* No ch available after DFS RADAR detect */ 180 eSAP_DFS_NO_AVAILABLE_CHANNEL, 181 eSAP_STOP_BSS_DUE_TO_NO_CHNL, 182 eSAP_ACS_SCAN_SUCCESS_EVENT, 183 eSAP_ACS_CHANNEL_SELECTED, 184 eSAP_ECSA_CHANGE_CHAN_IND, 185 eSAP_DFS_NEXT_CHANNEL_REQ, 186 /* Event sent channel switch status to upper layer */ 187 eSAP_CHANNEL_CHANGE_RESP, 188 } eSapHddEvent; 189 190 typedef enum { 191 eSAP_OPEN_SYSTEM, 192 eSAP_SHARED_KEY, 193 eSAP_AUTO_SWITCH 194 } eSapAuthType; 195 196 typedef enum { 197 /* Disassociation was internally initiated from CORE stack */ 198 eSAP_MAC_INITATED_DISASSOC = 0x10000, 199 /* 200 * Disassociation was internally initiated from host by 201 * invoking wlansap_disassoc_sta call 202 */ 203 eSAP_USR_INITATED_DISASSOC 204 } eSapDisassocReason; 205 206 typedef enum { 207 eSAP_DFS_NOL_CLEAR, 208 eSAP_DFS_NOL_RANDOMIZE, 209 } eSapDfsNolType; 210 211 /*--------------------------------------------------------------------------- 212 SAP PAL "status" and "reason" error code defines 213 ---------------------------------------------------------------------------*/ 214 typedef enum { 215 eSAP_STATUS_SUCCESS, /* Success. */ 216 eSAP_STATUS_FAILURE, /* General Failure. */ 217 /* Channel not selected during initial scan. */ 218 eSAP_START_BSS_CHANNEL_NOT_SELECTED, 219 eSAP_ERROR_MAC_START_FAIL, /* Failed to start Infra BSS */ 220 } eSapStatus; 221 222 /*--------------------------------------------------------------------------- 223 SAP PAL "status" and "reason" error code defines 224 ---------------------------------------------------------------------------*/ 225 typedef enum { 226 eSAP_WPSPBC_OVERLAP_IN120S, /* Overlap */ 227 /* no WPS probe request in 120 second */ 228 eSAP_WPSPBC_NO_WPSPBC_PROBE_REQ_IN120S, 229 /* One WPS probe request in 120 second */ 230 eSAP_WPSPBC_ONE_WPSPBC_PROBE_REQ_IN120S, 231 } eWPSPBCOverlap; 232 233 /*--------------------------------------------------------------------------- 234 SAP Associated station types 235 ---------------------------------------------------------------------------*/ 236 typedef enum { 237 eSTA_TYPE_NONE = 0x00000000, /* No station type */ 238 eSTA_TYPE_INFRA = 0x00000001, /* legacy station */ 239 eSTA_TYPE_P2P_CLI = 0x00000002, /* p2p client */ 240 } eStationType; 241 242 /*---------------------------------------------------------------------------- 243 * Typedefs 244 * -------------------------------------------------------------------------*/ 245 typedef struct sap_StartBssCompleteEvent_s { 246 uint8_t status; 247 uint32_t operating_chan_freq; 248 enum phy_ch_width ch_width; 249 uint16_t staId; /* self StaID */ 250 uint8_t sessionId; /* SoftAP SME session ID */ 251 } tSap_StartBssCompleteEvent; 252 253 typedef struct sap_StopBssCompleteEvent_s { 254 uint8_t status; 255 } tSap_StopBssCompleteEvent; 256 257 typedef struct sap_StationAssocIndication_s { 258 struct qdf_mac_addr staMac; 259 uint8_t staId; 260 uint8_t status; 261 /* Required for indicating the frames to upper layer */ 262 uint32_t assocReqLength; 263 uint8_t *assocReqPtr; 264 bool fWmmEnabled; 265 uint8_t ecsa_capable; 266 uint32_t owe_ie_len; 267 uint8_t *owe_ie; 268 } tSap_StationAssocIndication; 269 270 typedef struct sap_StationAssocReassocCompleteEvent_s { 271 struct qdf_mac_addr staMac; 272 eStationType staType; 273 uint8_t staId; 274 uint8_t status; 275 uint8_t *ies; 276 uint32_t ies_len; 277 uint32_t status_code; 278 bool wmmEnabled; 279 uint8_t timingMeasCap; 280 struct oem_channel_info chan_info; 281 bool ampdu; 282 bool sgi_enable; 283 bool tx_stbc; 284 bool rx_stbc; 285 tSirMacHTChannelWidth ch_width; 286 enum sir_sme_phy_mode mode; 287 uint8_t max_supp_idx; 288 uint8_t max_ext_idx; 289 uint8_t max_mcs_idx; 290 uint8_t max_real_mcs_idx; 291 uint8_t rx_mcs_map; 292 uint8_t tx_mcs_map; 293 uint8_t ecsa_capable; 294 uint32_t ext_cap; 295 uint8_t supported_band; 296 tDot11fIEHTCaps ht_caps; 297 tDot11fIEVHTCaps vht_caps; 298 bool eht_caps_present; 299 tSirMacCapabilityInfo capability_info; 300 bool he_caps_present; 301 struct qdf_mac_addr sta_mld; 302 } tSap_StationAssocReassocCompleteEvent; 303 304 typedef struct sap_StationDisassocCompleteEvent_s { 305 struct qdf_mac_addr staMac; 306 uint8_t staId; /* STAID should not be used */ 307 uint8_t status; 308 uint32_t status_code; 309 uint32_t reason_code; 310 eSapDisassocReason reason; 311 int rssi; 312 int tx_rate; 313 int rx_rate; 314 uint32_t rx_mc_bc_cnt; 315 uint32_t rx_retry_cnt; 316 } tSap_StationDisassocCompleteEvent; 317 318 typedef struct sap_StationSetKeyCompleteEvent_s { 319 uint8_t status; 320 struct qdf_mac_addr peerMacAddr; 321 } tSap_StationSetKeyCompleteEvent; 322 323 /*struct corresponding to SAP_STA_MIC_FAILURE_EVENT */ 324 typedef struct sap_StationMICFailureEvent_s { 325 struct qdf_mac_addr srcMacAddr; /* address used to compute MIC */ 326 struct qdf_mac_addr staMac; /* taMacAddr transmitter address */ 327 struct qdf_mac_addr dstMacAddr; 328 bool multicast; 329 uint8_t IV1; /* first byte of IV */ 330 uint8_t keyId; /* second byte of IV */ 331 uint8_t TSC[SIR_CIPHER_SEQ_CTR_SIZE]; /* sequence number */ 332 333 } tSap_StationMICFailureEvent; 334 335 typedef struct sap_WPSPBCProbeReqEvent_s { 336 uint8_t status; 337 /* module id that was passed in wlansap_get_assoc_stations API */ 338 QDF_MODULE_ID module; 339 tSirWPSPBCProbeReq WPSPBCProbeReq; 340 } tSap_WPSPBCProbeReqEvent; 341 342 typedef struct sap_SendActionCnf_s { 343 eSapStatus actionSendSuccess; 344 } tSap_SendActionCnf; 345 346 typedef struct sap_UnknownSTAJoinEvent_s { 347 struct qdf_mac_addr macaddr; 348 } tSap_UnknownSTAJoinEvent; 349 350 typedef struct sap_MaxAssocExceededEvent_s { 351 struct qdf_mac_addr macaddr; 352 } tSap_MaxAssocExceededEvent; 353 354 /** 355 * struct sap_ch_selected_s - structure to hold the selected channels 356 * @pri_ch_freq: Holds the ACS selected primary channel frequency 357 * @ht_sec_ch_freq: Holds the ACS selected secondary ht channel frequency 358 * @vht_seg0_center_ch_freq: Holds the ACS selected center channel of vht seg0 359 * @vht_seg1_center_ch_freq: Holds the ACS selected center channel of vht seg1 360 * @ch_width: Holds the ACS selected channel bandwidth 361 * 362 * Holds the primary and secondary channel selected by ACS and is 363 * used to send it to the HDD. 364 */ 365 struct sap_ch_selected_s { 366 uint32_t pri_ch_freq; 367 uint32_t ht_sec_ch_freq; 368 uint16_t vht_seg0_center_ch_freq; 369 uint16_t vht_seg1_center_ch_freq; 370 uint16_t ch_width; 371 }; 372 373 /** 374 * struct sap_acs_scan_complete_event - acs scan complete event 375 * @status: status of acs scan 376 * @freq_list: acs scan channel frequency list 377 * @num_of_channels: number of channels 378 */ 379 struct sap_acs_scan_complete_event { 380 uint8_t status; 381 uint32_t *freq_list; 382 uint8_t num_of_channels; 383 }; 384 385 /** 386 * struct sap_ch_change_ind - channel change indication 387 * @new_chan_freq: channel frequency to change to 388 */ 389 struct sap_ch_change_ind { 390 uint32_t new_chan_freq; 391 }; 392 393 /** 394 * struct sap_ch_change_rsp - channel change response 395 * @sap_ch_selected: channel parameters of new channel 396 * @ch_change_rsp_status: channel change response status 397 */ 398 struct sap_ch_change_rsp { 399 struct sap_ch_selected_s sap_ch_selected; 400 eSapStatus ch_change_rsp_status; 401 }; 402 403 /* 404 * This struct will be filled in and passed to sap_event_cb that is 405 * provided during wlansap_start_bss call The event id corresponding to 406 * structure in the union is defined in comment next to the structure 407 */ 408 409 struct sap_event { 410 eSapHddEvent sapHddEventCode; 411 union { 412 /*SAP_START_BSS_EVENT */ 413 tSap_StartBssCompleteEvent sapStartBssCompleteEvent; 414 /*SAP_STOP_BSS_EVENT */ 415 tSap_StopBssCompleteEvent sapStopBssCompleteEvent; 416 /*SAP_ASSOC_INDICATION */ 417 tSap_StationAssocIndication sapAssocIndication; 418 /*SAP_STA_ASSOC_EVENT, SAP_STA_REASSOC_EVENT */ 419 tSap_StationAssocReassocCompleteEvent 420 sapStationAssocReassocCompleteEvent; 421 /*SAP_STA_DISASSOC_EVENT */ 422 tSap_StationDisassocCompleteEvent 423 sapStationDisassocCompleteEvent; 424 /*SAP_STA_SET_KEY_EVENT */ 425 tSap_StationSetKeyCompleteEvent sapStationSetKeyCompleteEvent; 426 /*SAP_STA_MIC_FAILURE_EVENT */ 427 tSap_StationMICFailureEvent sapStationMICFailureEvent; 428 /*eSAP_WPS_PBC_PROBE_REQ_EVENT */ 429 tSap_WPSPBCProbeReqEvent sapPBCProbeReqEvent; 430 tSap_SendActionCnf sapActionCnf; 431 /* eSAP_UNKNOWN_STA_JOIN */ 432 tSap_UnknownSTAJoinEvent sapUnknownSTAJoin; 433 /* eSAP_MAX_ASSOC_EXCEEDED */ 434 tSap_MaxAssocExceededEvent sapMaxAssocExceeded; 435 struct sap_ch_selected_s sap_ch_selected; 436 struct sap_ch_change_ind sap_chan_cng_ind; 437 struct sap_ch_change_rsp sap_chan_cng_rsp; 438 struct sap_acs_scan_complete_event sap_acs_scan_comp; 439 } sapevt; 440 }; 441 442 typedef struct sap_SSID { 443 uint8_t length; 444 uint8_t ssId[WLAN_SSID_MAX_LEN]; 445 } qdf_packed tSap_SSID_t; 446 447 typedef struct sap_SSIDInfo { 448 tSap_SSID_t ssid; /* SSID of the AP */ 449 /* SSID should/shouldn't be bcast in probe RSP & beacon */ 450 uint8_t ssidHidden; 451 } qdf_packed tSap_SSIDInfo_t; 452 453 /** 454 * struct master_acs - acs attributes received from userspace 455 * @hw_mode: hw mode 456 * @ht: ht flag 457 * @ht40: ht40 flag 458 * @vht: vht flag 459 * @eht: eht flag 460 * @ch_width: channel bandwidth 461 */ 462 struct master_acs { 463 uint8_t hw_mode; 464 uint8_t ht; 465 uint8_t ht40; 466 uint8_t vht; 467 uint8_t eht; 468 uint16_t ch_width; 469 }; 470 471 struct sap_acs_cfg { 472 /* ACS Algo Input */ 473 uint8_t acs_mode; 474 eCsrPhyMode hw_mode; 475 qdf_freq_t start_ch_freq; 476 qdf_freq_t end_ch_freq; 477 qdf_freq_t *freq_list; 478 uint8_t ch_list_count; 479 qdf_freq_t *master_freq_list; 480 uint8_t master_ch_list_count; 481 bool master_ch_list_updated; 482 #ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE 483 uint8_t skip_scan_status; 484 uint32_t skip_scan_range1_stch; 485 uint32_t skip_scan_range1_endch; 486 uint32_t skip_scan_range2_stch; 487 uint32_t skip_scan_range2_endch; 488 #endif 489 490 uint16_t ch_width; 491 uint32_t pcl_chan_freq[NUM_CHANNELS]; 492 uint8_t pcl_channels_weight_list[NUM_CHANNELS]; 493 uint32_t pcl_ch_count; 494 uint8_t is_ht_enabled; 495 uint8_t is_vht_enabled; 496 /* ACS Algo Output */ 497 uint32_t pri_ch_freq; 498 uint32_t ht_sec_ch_freq; 499 uint32_t vht_seg0_center_ch_freq; 500 uint32_t vht_seg1_center_ch_freq; 501 uint32_t band; 502 #ifdef WLAN_FEATURE_11BE 503 bool is_eht_enabled; 504 uint16_t acs_puncture_bitmap; 505 #endif 506 bool skip_acs_scan; 507 uint32_t last_scan_ageout_time; 508 struct master_acs master_acs_cfg; 509 }; 510 511 /* 512 * enum sap_acs_dfs_mode- state of DFS mode 513 * @ACS_DFS_MODE_NONE: DFS mode attribute is not valid 514 * @ACS_DFS_MODE_ENABLE: DFS mode is enabled 515 * @ACS_DFS_MODE_DISABLE: DFS mode is disabled 516 * @ACS_DFS_MODE_DEPRIORITIZE: Deprioritize DFS channels in scanning 517 */ 518 enum sap_acs_dfs_mode { 519 ACS_DFS_MODE_NONE, 520 ACS_DFS_MODE_ENABLE, 521 ACS_DFS_MODE_DISABLE, 522 ACS_DFS_MODE_DEPRIORITIZE 523 }; 524 525 struct sap_config { 526 tSap_SSIDInfo_t SSIDinfo; 527 eCsrPhyMode sap_orig_hw_mode; /* Previous wireless Mode */ 528 eCsrPhyMode SapHw_mode; /* Wireless Mode */ 529 eSapMacAddrACL SapMacaddr_acl; 530 struct qdf_mac_addr accept_mac[MAX_ACL_MAC_ADDRESS]; /* MAC filtering */ 531 struct qdf_mac_addr deny_mac[MAX_ACL_MAC_ADDRESS]; /* MAC filtering */ 532 struct qdf_mac_addr self_macaddr; /* self macaddress or BSSID */ 533 uint32_t chan_freq; /* Operation channel frequency */ 534 uint32_t sec_ch_freq; 535 struct ch_params ch_params; 536 enum phy_ch_width ch_width_orig; 537 uint8_t dtim_period; /* dtim interval */ 538 uint16_t num_accept_mac; 539 uint16_t num_deny_mac; 540 /* Max ie length 255 * 2(WPA+RSN) + 2 bytes(vendor specific ID) * 2 */ 541 uint8_t RSNWPAReqIE[(WLAN_MAX_IE_LEN * 2) + 4]; 542 eSapAuthType authType; 543 tCsrAuthList akm_list; 544 bool privacy; 545 /* 0 - disabled, 1 - not configured , 2 - configured */ 546 uint8_t wps_state; 547 uint16_t RSNWPAReqIELength; /* The byte count in the pWPAReqIE */ 548 uint32_t beacon_int; /* Beacon Interval */ 549 enum QDF_OPMODE persona; /* Tells us which persona, GO or AP */ 550 bool enOverLapCh; 551 #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH 552 uint8_t cc_switch_mode; 553 #endif 554 struct sap_acs_cfg acs_cfg; 555 uint16_t probeRespIEsBufferLen; 556 /* buffer for addn ies comes from hostapd */ 557 void *pProbeRespIEsBuffer; 558 uint16_t assocRespIEsLen; 559 /* buffer for addn ies comes from hostapd */ 560 void *pAssocRespIEsBuffer; 561 uint16_t probeRespBcnIEsLen; 562 /* buffer for addn ies comes from hostapd */ 563 void *pProbeRespBcnIEsBuffer; 564 uint16_t beacon_tx_rate; 565 uint8_t *vendor_ie; 566 tSirMacRateSet supported_rates; 567 tSirMacRateSet extended_rates; 568 bool require_h2e; 569 enum sap_acs_dfs_mode acs_dfs_mode; 570 struct hdd_channel_info *channel_info; 571 uint32_t channel_info_count; 572 bool dfs_cac_offload; 573 #ifdef WLAN_SUPPORT_TWT 574 bool cfg80211_twt_responder; 575 #endif 576 #ifdef WLAN_FEATURE_11BE_MLO 577 bool mlo_sap; 578 uint8_t link_id; 579 uint8_t num_link; 580 #endif 581 qdf_freq_t last_acs_freq; 582 qdf_time_t last_acs_complete_time; 583 }; 584 585 #ifdef FEATURE_WLAN_AP_AP_ACS_OPTIMIZE 586 typedef enum { 587 eSAP_DO_NEW_ACS_SCAN, 588 eSAP_DO_PAR_ACS_SCAN, 589 eSAP_SKIP_ACS_SCAN 590 } tSap_skip_acs_scan; 591 #endif 592 593 typedef enum { 594 eSAP_DFS_DO_NOT_SKIP_CAC, 595 eSAP_DFS_SKIP_CAC 596 } eSapDfsCACState_t; 597 598 typedef enum { 599 eSAP_DFS_CHANNEL_USABLE, 600 eSAP_DFS_CHANNEL_AVAILABLE, 601 eSAP_DFS_CHANNEL_UNAVAILABLE 602 } eSapDfsChanStatus_t; 603 604 typedef struct sSapDfsNolInfo { 605 uint8_t dfs_channel_number; 606 eSapDfsChanStatus_t radar_status_flag; 607 uint64_t radar_found_timestamp; 608 } tSapDfsNolInfo; 609 610 typedef struct sSapDfsInfo { 611 qdf_mc_timer_t sap_dfs_cac_timer; 612 /* 613 * New channel frequency to move to when a Radar is 614 * detected on current Channel 615 */ 616 uint32_t target_chan_freq; 617 uint8_t ignore_cac; 618 uint32_t user_provided_target_chan_freq; 619 620 /* 621 * Requests for Channel Switch Announcement IE 622 * generation and transmission 623 */ 624 uint8_t csaIERequired; 625 uint8_t is_dfs_cac_timer_running; 626 /* 627 * New channel width and new channel bonding mode 628 * will only be updated via channel fallback mechanism 629 */ 630 enum phy_ch_width orig_chanWidth; 631 enum phy_ch_width new_chanWidth; 632 struct ch_params new_ch_params; 633 634 /* 635 * sap_operating_channel_location holds SAP indoor, 636 * outdoor location information. Currently, if this 637 * param is set this Indoor/outdoor channel interop 638 * restriction will only be implemented for JAPAN 639 * regulatory domain. 640 * 641 * 0 - Indicates that location unknown 642 * (or) SAP Indoor/outdoor interop is allowed 643 * 644 * 1 - Indicates device is operating on Indoor channels 645 * and SAP cannot pick next random channel from outdoor 646 * list of channels when a radar is found on current operating 647 * DFS channel. 648 * 649 * 2 - Indicates device is operating on Outdoor Channels 650 * and SAP cannot pick next random channel from indoor 651 * list of channels when a radar is found on current 652 * operating DFS channel. 653 */ 654 uint8_t sap_operating_chan_preferred_location; 655 656 /* 657 * Flag to indicate if DFS test mode is enabled and 658 * channel switch is disabled. 659 */ 660 uint8_t disable_dfs_ch_switch; 661 uint16_t tx_leakage_threshold; 662 /* beacon count before channel switch */ 663 uint8_t sap_ch_switch_beacon_cnt; 664 uint8_t sap_ch_switch_mode; 665 uint16_t reduced_beacon_interval; 666 uint8_t vdev_id; 667 } tSapDfsInfo; 668 669 /* MAX number of CAC channels to be recorded */ 670 #define MAX_NUM_OF_CAC_HISTORY 8 671 672 /** 673 * struct prev_cac_result - previous cac result 674 * @ap_start_time: ap start timestamp 675 * @ap_end_time: ap stop or cac end timestamp 676 * @cac_complete: cac complete without found radar event 677 * @cac_ch_param: ap channel parameters 678 */ 679 struct prev_cac_result { 680 uint64_t ap_start_time; 681 uint64_t ap_end_time; 682 bool cac_complete; 683 struct ch_params cac_ch_param; 684 }; 685 686 /** 687 * struct dfs_radar_history - radar found history element 688 * @time: timestamp in us from system boot 689 * @radar_found: radar found or not 690 * @ch_freq: channel frequency in Mhz 691 */ 692 struct dfs_radar_history { 693 uint64_t time; 694 bool radar_found; 695 uint16_t ch_freq; 696 }; 697 698 #ifdef DCS_INTERFERENCE_DETECTION 699 /** 700 * struct sap_dcs_info - record sap dcs information. 701 * @wlan_interference_mitigation_enable: wlan interference mitigation 702 * is enabled per vdev. 703 * @is_vdev_starting: is vdev doing restart because of dcs. 704 */ 705 struct sap_dcs_info { 706 bool wlan_interference_mitigation_enable[WLAN_MAX_VDEVS]; 707 bool is_vdev_starting[WLAN_MAX_VDEVS]; 708 }; 709 #endif 710 711 struct sap_ctx_list { 712 void *sap_context; 713 enum QDF_OPMODE sapPersona; 714 }; 715 716 typedef struct tagSapStruct { 717 /* Information Required for SAP DFS Master mode */ 718 tSapDfsInfo SapDfsInfo; 719 struct sap_ctx_list sapCtxList[SAP_MAX_NUM_SESSION]; 720 #ifdef FEATURE_AP_MCC_CH_AVOIDANCE 721 bool sap_channel_avoidance; 722 #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */ 723 bool acs_with_more_param; 724 bool enable_dfs_phy_error_logs; 725 uint8_t one_time_csa_count; 726 #ifdef DCS_INTERFERENCE_DETECTION 727 struct sap_dcs_info dcs_info; 728 #endif 729 } tSapStruct, *tpSapStruct; 730 731 /* 732 * struct sap_context - per-BSS Context for SAP 733 * 734 * struct sap_context is used to share per-BSS context between SAP and 735 * its clients. A context is generated by sap_create_ctx() and is 736 * destroyed by sap_destroy_ctx(). During the lifetime of the BSS the 737 * SAP context is passed as the primary parameter to SAP APIs. Note 738 * that by design the contents of the structure are opaque to the 739 * clients and a SAP context pointer must only be dereferenced by SAP. 740 */ 741 struct sap_context; 742 743 /** 744 * wlansap_roam_callback() - API to get the events for SAP persona 745 * @ctx: callback context registered with SME (sap context is registered) 746 * @csr_roam_info: pointer to SME CSR roam info structure 747 * @roam_status: status of the event reported by SME to SAP 748 * @roam_result: result of the event reported by SME to SAP 749 * 750 * Any activity like start_bss, stop_bss, and etc for SAP persona 751 * happens, SME reports the result of those events to SAP through this 752 * callback. 753 * 754 * Return: QDF_STATUS based on overall result 755 */ 756 QDF_STATUS wlansap_roam_callback(void *ctx, 757 struct csr_roam_info *csr_roam_info, 758 eRoamCmdStatus roam_status, 759 eCsrRoamResult roam_result); 760 761 /** 762 * sap_create_ctx() - API to create the sap context 763 * 764 * This API assigns the sap context from global sap context pool 765 * stored in gp_sap_ctx[i] array. 766 * 767 * Return: Pointer to the SAP context, or NULL if a context could not 768 * be allocated 769 */ 770 struct sap_context *sap_create_ctx(void); 771 772 /** 773 * sap_destroy_ctx - API to destroy the sap context 774 * @sap_ctx: Pointer to the SAP context 775 * 776 * This API puts back the given sap context to global sap context pool which 777 * makes current sap session's sap context invalid. 778 * 779 * Return: The result code associated with performing the operation 780 * QDF_STATUS_E_FAULT: Pointer to SAP cb is NULL; 781 * access would cause a page fault 782 * QDF_STATUS_SUCCESS: Success 783 */ 784 QDF_STATUS sap_destroy_ctx(struct sap_context *sap_ctx); 785 786 /** 787 * sap_init_ctx - Initialize the sap context 788 * @sap_ctx: Pointer to the SAP context 789 * @mode: Device mode 790 * @addr: MAC address of the SAP 791 * @session_id: Pointer to the session id 792 * @reinit: if called as part of reinit 793 * 794 * sap_create_ctx() allocates the sap context which is uninitialized. 795 * This API needs to be called to properly initialize the sap context 796 * which is just created. 797 * 798 * Return: The result code associated with performing the operation 799 * QDF_STATUS_E_FAULT: BSS could not be started 800 * QDF_STATUS_SUCCESS: Success 801 */ 802 QDF_STATUS sap_init_ctx(struct sap_context *sap_ctx, 803 enum QDF_OPMODE mode, 804 uint8_t *addr, uint32_t session_id, bool reinit); 805 806 /** 807 * sap_deinit_ctx() - De-initialize the sap context 808 * @sap_ctx: Pointer to the SAP context 809 * 810 * When SAP session is about to close, this API needs to be called 811 * to de-initialize all the members of sap context structure, so that 812 * nobody can accidentally start using the sap context. 813 * 814 * Return: The result code associated with performing the operation 815 * QDF_STATUS_E_FAULT: BSS could not be stopped 816 * QDF_STATUS_SUCCESS: Success 817 */ 818 QDF_STATUS sap_deinit_ctx(struct sap_context *sap_ctx); 819 820 /** 821 * sap_is_auto_channel_select() - is channel AUTO_CHANNEL_SELECT 822 * @sapcontext: Pointer to the SAP context 823 * 824 * Return: true on AUTO_CHANNEL_SELECT, false otherwise 825 */ 826 bool sap_is_auto_channel_select(struct sap_context *sapcontext); 827 828 QDF_STATUS wlansap_global_init(void); 829 QDF_STATUS wlansap_global_deinit(void); 830 typedef QDF_STATUS (*sap_event_cb)(struct sap_event *sap_event, 831 void *user_context); 832 833 /** 834 * wlansap_is_channel_in_nol_list() - This API checks if channel is 835 * in nol list 836 * @sap_ctx: SAP context pointer 837 * @chan_freq: channel frequency 838 * @chanBondState: channel bonding state 839 * 840 * Return: True if the channel is in the NOL list, false otherwise 841 */ 842 bool wlansap_is_channel_in_nol_list(struct sap_context *sap_ctx, 843 qdf_freq_t chan_freq, 844 ePhyChanBondState chanBondState); 845 846 /** 847 * wlansap_is_channel_leaking_in_nol() - This API checks if channel is leaking 848 * in nol list 849 * @sap_ctx: SAP context pointer 850 * @chan_freq: channel frequency 851 * @chan_bw: channel bandwidth 852 * 853 * Return: True/False 854 */ 855 bool wlansap_is_channel_leaking_in_nol(struct sap_context *sap_ctx, 856 uint16_t chan_freq, 857 uint8_t chan_bw); 858 859 /** 860 * wlansap_start_bss() - start BSS 861 * @sap_ctx: Pointer to the SAP context 862 * @sap_event_cb: Callback function in HDD called by SAP to inform HDD 863 * about SAP results 864 * @config: Pointer to configuration structure passed down from 865 * HDD(HostApd for Android) 866 * @user_context: Parameter that will be passed back in all the SAP callback 867 * events. 868 * 869 * This api function provides SAP FSM event eWLAN_SAP_PHYSICAL_LINK_CREATE for 870 * starting AP BSS 871 * 872 * Return: The result code associated with performing the operation 873 * QDF_STATUS_E_FAULT: Pointer to SAP cb is NULL; 874 * access would cause a page fault 875 * QDF_STATUS_SUCCESS: Success 876 */ 877 QDF_STATUS wlansap_start_bss(struct sap_context *sap_ctx, 878 sap_event_cb sap_event_cb, 879 struct sap_config *config, void *user_context); 880 881 /** 882 * wlansap_stop_bss() - stop BSS. 883 * @sap_ctx: Pointer to SAP context 884 * 885 * This api function provides SAP FSM event eSAP_HDD_STOP_INFRA_BSS for 886 * stopping AP BSS 887 * 888 * Return: The result code associated with performing the operation 889 * QDF_STATUS_E_FAULT: Pointer to SAP cb is NULL; 890 * access would cause a page fault 891 * QDF_STATUS_SUCCESS: Success 892 */ 893 QDF_STATUS wlansap_stop_bss(struct sap_context *sap_ctx); 894 895 /** 896 * wlan_sap_update_next_channel() - Update next channel configured using vendor 897 * command in SAP context 898 * @sap_ctx: SAP context 899 * @channel: channel number 900 * @chan_bw: channel width 901 * 902 * Return: QDF_STATUS 903 */ 904 QDF_STATUS wlan_sap_update_next_channel(struct sap_context *sap_ctx, 905 uint8_t channel, 906 enum phy_ch_width chan_bw); 907 908 #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH 909 /** 910 * wlansap_check_cc_intf() - Get interfering concurrent channel 911 * @sap_ctx: SAP context pointer 912 * 913 * Determine if a concurrent channel is interfering. 914 * 915 * Return: Channel freq (Mhz) of the interfering channel, or 0 if none. 916 */ 917 uint16_t wlansap_check_cc_intf(struct sap_context *sap_ctx); 918 #endif 919 920 /** 921 * wlansap_set_mac_acl() - set MAC list entry in ACL. 922 * @sap_ctx: Pointer to the SAP context 923 * @config: Pointer to SAP config. 924 * 925 * This api function provides SAP to set mac list entry in accept list as well 926 * as deny list 927 * 928 * Return: The result code associated with performing the operation 929 * QDF_STATUS_E_FAULT: Pointer to SAP cb is NULL; 930 * access would cause a page fault 931 * QDF_STATUS_SUCCESS: Success 932 */ 933 QDF_STATUS wlansap_set_mac_acl(struct sap_context *sap_ctx, 934 struct sap_config *config); 935 936 /** 937 * wlansap_disassoc_sta() - initiate disassociation of station. 938 * @sap_ctx: Pointer to the SAP context 939 * @p_del_sta_params: pointer to station deletion parameters 940 * 941 * This api function provides for Ap App/HDD initiated disassociation of station 942 * 943 * Return: The QDF_STATUS code associated with performing the operation 944 * QDF_STATUS_SUCCESS: Success 945 */ 946 QDF_STATUS wlansap_disassoc_sta(struct sap_context *sap_ctx, 947 struct csr_del_sta_params *p_del_sta_params); 948 949 /** 950 * wlansap_deauth_sta() - Ap App/HDD initiated deauthentication of station 951 * @sap_ctx: Pointer to the SAP context 952 * @pDelStaParams: Pointer to parameters of the station to deauthenticate 953 * 954 * This api function provides for Ap App/HDD initiated deauthentication of 955 * station 956 * 957 * Return: The QDF_STATUS code associated with performing the operation 958 */ 959 QDF_STATUS wlansap_deauth_sta(struct sap_context *sap_ctx, 960 struct csr_del_sta_params *pDelStaParams); 961 962 /** 963 * wlansap_set_channel_change_with_csa() - Set channel change with CSA 964 * @sap_ctx: Pointer to SAP context 965 * @target_chan_freq: Target channel frequency 966 * @target_bw: Target bandwidth 967 * @strict: if true switch to the requested channel always, fail 968 * otherwise 969 * 970 * This api function does a channel change to the target channel specified. 971 * CSA IE is included in the beacons before doing a channel change. 972 * 973 * Return: QDF_STATUS 974 */ 975 QDF_STATUS wlansap_set_channel_change_with_csa(struct sap_context *sap_ctx, 976 uint32_t target_chan_freq, 977 enum phy_ch_width target_bw, 978 bool strict); 979 980 981 /** 982 * wlan_sap_getstation_ie_information() - RSNIE Population 983 * @sap_ctx: Pointer to the SAP context 984 * @len: Length of @buf 985 * @buf: RSNIE IE data 986 * 987 * Populate RSN IE from CSR to HDD context 988 * 989 * Return: QDF_STATUS enumeration 990 */ 991 992 QDF_STATUS wlan_sap_getstation_ie_information(struct sap_context *sap_ctx, 993 uint32_t *len, uint8_t *buf); 994 995 /** 996 * wlansap_clear_acl() - Clear all ACLs 997 * @sap_ctx: Pointer to the SAP context 998 * 999 * Return: QDF_STATUS. If success the ACLs were cleared, otherwise an 1000 * error occurred. 1001 */ 1002 QDF_STATUS wlansap_clear_acl(struct sap_context *sap_ctx); 1003 1004 /** 1005 * wlansap_get_acl_accept_list() - Get ACL accept list 1006 * @sap_ctx: Pointer to the SAP context 1007 * @pAcceptList: Pointer to the buffer to store the ACL accept list 1008 * @nAcceptList: Pointer to the location to store the number of 1009 * entries in the ACL accept list. 1010 * 1011 * Return: QDF_STATUS. If success the data was returned, otherwise an 1012 * error occurred. 1013 */ 1014 QDF_STATUS wlansap_get_acl_accept_list(struct sap_context *sap_ctx, 1015 struct qdf_mac_addr *pAcceptList, 1016 uint16_t *nAcceptList); 1017 1018 /** 1019 * wlansap_is_channel_present_in_acs_list() - Freq present in ACS list or not 1020 * @freq: Frequency to be searched 1021 * @ch_freq_list: channel frequency list. 1022 * @ch_count: Channel frequency list count 1023 * 1024 * Return: True is found, false otherwise 1025 */ 1026 bool wlansap_is_channel_present_in_acs_list(uint32_t freq, 1027 uint32_t *ch_freq_list, 1028 uint8_t ch_count); 1029 1030 /** 1031 * wlansap_get_acl_deny_list() - Get ACL deny list 1032 * @sap_ctx: Pointer to the SAP context 1033 * @pDenyList: Pointer to the buffer to store the ACL deny list 1034 * @nDenyList: Pointer to the location to store the number of 1035 * entries in the ACL deny list. 1036 * 1037 * Return: QDF_STATUS. If success the data was returned, otherwise an 1038 * error occurred. 1039 */ 1040 QDF_STATUS wlansap_get_acl_deny_list(struct sap_context *sap_ctx, 1041 struct qdf_mac_addr *pDenyList, 1042 uint16_t *nDenyList); 1043 1044 /** 1045 * wlansap_set_acl_mode() - Set the SAP ACL mode 1046 * @sap_ctx: The SAP context pointer 1047 * @mode: the desired ACL mode 1048 * 1049 * Return: QDF_STATUS 1050 */ 1051 QDF_STATUS wlansap_set_acl_mode(struct sap_context *sap_ctx, 1052 eSapMacAddrACL mode); 1053 1054 /** 1055 * wlansap_get_acl_mode() - Get the SAP ACL mode 1056 * @sap_ctx: The SAP context pointer 1057 * @mode: Pointer where to return the current ACL mode 1058 * 1059 * Return: QDF_STATUS 1060 */ 1061 QDF_STATUS wlansap_get_acl_mode(struct sap_context *sap_ctx, 1062 eSapMacAddrACL *mode); 1063 1064 /** 1065 * wlansap_modify_acl() - Update ACL entries 1066 * @sap_ctx: Pointer to the SAP context 1067 * @peer_sta_mac: peer sta mac to be updated. 1068 * @list_type: allow/Deny list type. 1069 * @cmd: command to be executed on ACL. 1070 * 1071 * This function is called when a peer needs to be added or deleted from the 1072 * allow/deny ACL 1073 * 1074 * Return: Status 1075 */ 1076 QDF_STATUS wlansap_modify_acl(struct sap_context *sap_ctx, 1077 uint8_t *peer_sta_mac, 1078 eSapACLType list_type, eSapACLCmdType cmd); 1079 1080 /** 1081 * wlansap_channel_change_request() - Send channel change request 1082 * @sap_ctx: Pointer to the SAP context 1083 * @target_chan_freq: Target channel 1084 * 1085 * This API is used to send an Indication to SME/PE to change the 1086 * current operating channel to a different target channel. 1087 * 1088 * The Channel change will be issued by SAP under the following 1089 * scenarios. 1090 * 1. A radar indication is received during SAP CAC WAIT STATE and 1091 * channel change is required. 1092 * 2. A radar indication is received during SAP STARTED STATE and 1093 * channel change is required. 1094 * 1095 * Return: The QDF_STATUS code associated with performing the operation 1096 * QDF_STATUS_SUCCESS: Success 1097 * 1098 */ 1099 QDF_STATUS wlansap_channel_change_request(struct sap_context *sap_ctx, 1100 uint32_t target_chan_freq); 1101 1102 /** 1103 * wlansap_get_sec_channel() - get the secondary sap channel 1104 * @sec_ch_offset: secondary channel offset. 1105 * @op_chan_freq: Operating sap channel frequency. 1106 * @sec_chan_freq: channel frequency to be filled. 1107 * 1108 * This API will get the secondary sap channel from the offset, and 1109 * operating channel. 1110 * 1111 * Return: None 1112 * 1113 */ 1114 void wlansap_get_sec_channel(uint8_t sec_ch_offset, 1115 uint32_t op_chan_freq, 1116 uint32_t *sec_chan_freq); 1117 1118 /** 1119 * wlansap_start_beacon_req() - Send Start Beaconing Request 1120 * @sap_ctx: Pointer to the SAP context 1121 * 1122 * This API is used to send an Indication to SME/PE to start 1123 * beaconing on the current operating channel. 1124 * 1125 * When SAP is started on DFS channel and when ADD BSS RESP is received 1126 * LIM temporarily holds off Beaconing for SAP to do CAC WAIT. When 1127 * CAC WAIT is done SAP resumes the Beacon Tx by sending a start beacon 1128 * request to LIM. 1129 * 1130 * Return: The QDF_STATUS code associated with performing the operation 1131 * QDF_STATUS_SUCCESS: Success 1132 */ 1133 QDF_STATUS wlansap_start_beacon_req(struct sap_context *sap_ctx); 1134 1135 /** 1136 * wlansap_dfs_send_csa_ie_request() - Send CSA IE 1137 * @sap_ctx: Pointer to the SAP context 1138 * 1139 * This API is used to send channel switch announcement request to PE 1140 * 1141 * Return: The QDF_STATUS code associated with performing the operation 1142 * QDF_STATUS_SUCCESS: Success 1143 */ 1144 QDF_STATUS wlansap_dfs_send_csa_ie_request(struct sap_context *sap_ctx); 1145 1146 /** 1147 * wlansap_get_dfs_ignore_cac() - Get ignore_cac value 1148 * @mac_handle: Opaque handle to the global MAC context 1149 * @ignore_cac: Location to store ignore_cac value 1150 * 1151 * This API is used to Get the value of ignore_cac value 1152 * 1153 * Return: The QDF_STATUS code associated with performing the operation 1154 */ 1155 QDF_STATUS wlansap_get_dfs_ignore_cac(mac_handle_t mac_handle, 1156 uint8_t *ignore_cac); 1157 1158 /** 1159 * wlansap_set_dfs_ignore_cac() - Set ignore_cac value 1160 * @mac_handle: Opaque handle to the global MAC context 1161 * @ignore_cac: value to set for ignore_cac variable in DFS global structure. 1162 * 1163 * This API is used to Set the value of ignore_cac value 1164 * 1165 * Return: The QDF_STATUS code associated with performing the operation 1166 */ 1167 QDF_STATUS wlansap_set_dfs_ignore_cac(mac_handle_t mac_handle, 1168 uint8_t ignore_cac); 1169 /** 1170 * wlansap_get_dfs_cac_state() - Get cac_state value 1171 * @mac_handle: Opaque handle to the global MAC context 1172 * @sap_context: sap adapter context 1173 * @cac_state: Location to store cac_state value 1174 * 1175 * This API is used to Get the value of current cac state 1176 * 1177 * Return: The QDF_STATUS code associated with performing the operation 1178 */ 1179 QDF_STATUS wlansap_get_dfs_cac_state(mac_handle_t mac_handle, 1180 struct sap_context *sap_context, 1181 bool *cac_state); 1182 1183 /** 1184 * wlansap_get_csa_chanwidth_from_phymode() - function to populate 1185 * channel width from user configured phymode for csa 1186 * @sap_context: sap adapter context 1187 * @chan_freq: target channel frequency (MHz) 1188 * @tgt_ch_params: target new channel bw parameters to be updated 1189 * 1190 * Return: phy_ch_width 1191 */ 1192 enum phy_ch_width 1193 wlansap_get_csa_chanwidth_from_phymode(struct sap_context *sap_context, 1194 uint32_t chan_freq, 1195 struct ch_params *tgt_ch_params); 1196 1197 #ifdef FEATURE_AP_MCC_CH_AVOIDANCE 1198 QDF_STATUS 1199 wlan_sap_set_channel_avoidance(mac_handle_t mac_handle, 1200 bool sap_channel_avoidance); 1201 #endif 1202 1203 /** 1204 * wlan_sap_set_acs_with_more_param() - sets acs_with_more_param ini param 1205 * @mac_handle: Opaque handle to the global MAC context 1206 * @acs_with_more_param: ini parameter value 1207 * 1208 * Return: The QDF_STATUS code. 1209 */ 1210 QDF_STATUS 1211 wlan_sap_set_acs_with_more_param(mac_handle_t mac_handle, 1212 bool acs_with_more_param); 1213 1214 /** 1215 * wlansap_set_dfs_preferred_channel_location() - set dfs preferred channel 1216 * @mac_handle: Opaque handle to the global MAC context 1217 * 1218 * This API is used to set sap preferred channels location 1219 * to resetrict the DFS random channel selection algorithm 1220 * either Indoor/Outdoor channels only. 1221 * dfs_Preferred_Channels_location : 1222 * 0 - Indicates No preferred channel location restrictions 1223 * 1 - Indicates SAP Indoor Channels operation only. 1224 * 2 - Indicates SAP Outdoor Channels operation only. 1225 * 1226 * Return: The QDF_STATUS code associated with performing the operation 1227 * QDF_STATUS_SUCCESS: Success and error code otherwise. 1228 */ 1229 QDF_STATUS wlansap_set_dfs_preferred_channel_location(mac_handle_t mac_handle); 1230 1231 /** 1232 * wlansap_set_dfs_target_chnl() - Set target channel 1233 * @mac_handle: Opaque handle for the global MAC context 1234 * @target_chan_freq: target channel frequency to be set 1235 * 1236 * This API is used to set next target chnl as provided channel. 1237 * you can provide any valid channel to this API. 1238 * 1239 * Return: The QDF_STATUS code associated with performing the operation 1240 */ 1241 QDF_STATUS wlansap_set_dfs_target_chnl(mac_handle_t mac_handle, 1242 uint32_t target_chan_freq); 1243 1244 /** 1245 * wlan_sap_get_phymode() - Returns sap phymode. 1246 * @sap_ctx: Pointer to Sap Context. 1247 * 1248 * This function provides the SAP current phymode. 1249 * 1250 * Return: phymode 1251 */ 1252 eCsrPhyMode wlan_sap_get_phymode(struct sap_context *sap_ctx); 1253 1254 /** 1255 * wlan_sap_get_concurrent_bw() - Returns SAP BW based on concurrent channel & 1256 * STA DFS channel 1257 * @pdev: Pointer to Pdev 1258 * @psoc: Pointer to Psoc 1259 * @con_ch_freq: interfering concurrent channel 1260 * @channel_width: Channel width 1261 * 1262 * Return: Channel width. If STA is not present on con_ch_freq, it returns 1263 * max of STA BW and 80 Mhz. If STA is not connected in dfs chan or STA 1264 *........BW is not 160 Mhz (which includes DFS channel), then it will return 1265 * BW maximum of STA BW and 80 Mhz. If DFS STA is present, then return 1266 * BW as min of 80 and STA BW. 1267 */ 1268 enum phy_ch_width wlan_sap_get_concurrent_bw(struct wlan_objmgr_pdev *pdev, 1269 struct wlan_objmgr_psoc *psoc, 1270 qdf_freq_t con_ch_freq, 1271 enum phy_ch_width channel_width); 1272 1273 /** 1274 * wlan_sap_get_vht_ch_width() - Returns SAP VHT channel width. 1275 * @sap_ctx: Pointer to Sap Context 1276 * 1277 * This function provides the SAP current VHT channel with. 1278 * 1279 * Return: VHT channel width 1280 */ 1281 uint32_t wlan_sap_get_vht_ch_width(struct sap_context *sap_ctx); 1282 1283 /** 1284 * wlan_sap_get_ch_params() - get ch params 1285 * @sap_ctx: Pointer to Sap Context 1286 * @ch_params: returned ch_params 1287 * 1288 * This function get sap's ch_params 1289 * 1290 * Return: true for success 1291 */ 1292 bool wlan_sap_get_ch_params(struct sap_context *sap_ctx, 1293 struct ch_params *ch_params); 1294 1295 /** 1296 * wlan_sap_set_sap_ctx_acs_cfg() - Sets acs cfg 1297 * @sap_ctx: Pointer to Sap Context 1298 * @sap_config: Pointer to sap config 1299 * 1300 * This function sets the acs cfg in sap context. 1301 * 1302 * Return: None 1303 */ 1304 void wlan_sap_set_sap_ctx_acs_cfg(struct sap_context *sap_ctx, 1305 struct sap_config *sap_config); 1306 1307 void sap_config_acs_result(mac_handle_t mac_handle, 1308 struct sap_context *sap_ctx, 1309 uint32_t sec_ch_freq); 1310 1311 QDF_STATUS wlansap_update_sap_config_add_ie(struct sap_config *config, 1312 const uint8_t *pAdditionIEBuffer, 1313 uint16_t additionIELength, 1314 eUpdateIEsType updateType); 1315 1316 QDF_STATUS wlansap_reset_sap_config_add_ie(struct sap_config *config, 1317 eUpdateIEsType updateType); 1318 1319 void wlansap_extend_to_acs_range(mac_handle_t mac_handle, 1320 uint32_t *start_ch_freq, 1321 uint32_t *end_ch_freq, 1322 uint32_t *bandStartChannel, 1323 uint32_t *bandEndChannel); 1324 1325 #ifdef WLAN_FEATURE_SON 1326 /** 1327 * wlansap_son_update_sap_config_phymode() - update sap config according to 1328 * phy_mode. This API is for son, 1329 * There is no band switching when 1330 * son phy mode is changed. 1331 * @vdev: Pointer to vdev object 1332 * @config: Pointer to sap config 1333 * @phy_mode: pointer to phy mode 1334 * 1335 * Return: QDF_STATUS 1336 */ 1337 QDF_STATUS 1338 wlansap_son_update_sap_config_phymode(struct wlan_objmgr_vdev *vdev, 1339 struct sap_config *config, 1340 enum qca_wlan_vendor_phy_mode phy_mode); 1341 #endif 1342 1343 /** 1344 * wlansap_set_dfs_nol() - Set dfs nol 1345 * @sap_ctx: SAP context 1346 * @conf: set type 1347 * 1348 * Return: QDF_STATUS 1349 */ 1350 #ifdef DFS_COMPONENT_ENABLE 1351 QDF_STATUS wlansap_set_dfs_nol(struct sap_context *sap_ctx, 1352 eSapDfsNolType conf); 1353 #else wlansap_set_dfs_nol(struct sap_context * sap_ctx,eSapDfsNolType conf)1354 static inline QDF_STATUS wlansap_set_dfs_nol(struct sap_context *sap_ctx, 1355 eSapDfsNolType conf) 1356 { 1357 return QDF_STATUS_SUCCESS; 1358 } 1359 #endif 1360 1361 /** 1362 * wlan_sap_set_dfs_pri_multiplier() - Set dfs_pri_multiplier 1363 * @mac_handle: Opaque handle to the global MAC context 1364 * 1365 * Return: none 1366 */ 1367 #ifdef DFS_PRI_MULTIPLIER 1368 void wlan_sap_set_dfs_pri_multiplier(mac_handle_t mac_handle); 1369 #else wlan_sap_set_dfs_pri_multiplier(mac_handle_t mac_handle)1370 static inline void wlan_sap_set_dfs_pri_multiplier(mac_handle_t mac_handle) 1371 { 1372 } 1373 #endif 1374 1375 /** 1376 * wlan_sap_set_vendor_acs() - Set vendor specific acs in sap context 1377 * @sap_context: SAP context 1378 * @is_vendor_acs: if vendor specific acs is enabled 1379 * 1380 * Return: QDF_STATUS 1381 */ 1382 QDF_STATUS wlan_sap_set_vendor_acs(struct sap_context *sap_context, 1383 bool is_vendor_acs); 1384 1385 /** 1386 * wlansap_populate_del_sta_params() - populate delete station parameter 1387 * @mac: Pointer to peer mac address. 1388 * @reason_code: Reason code for the disassoc/deauth. 1389 * @subtype: Subtype points to either disassoc/deauth frame. 1390 * @params: Parameters to be populated. 1391 * 1392 * This API is used to populate delete station parameter structure 1393 * 1394 * Return: none 1395 */ 1396 void wlansap_populate_del_sta_params(const uint8_t *mac, 1397 uint16_t reason_code, 1398 uint8_t subtype, 1399 struct csr_del_sta_params *params); 1400 1401 /** 1402 * wlansap_acs_chselect() - Initiates acs channel selection 1403 * @sap_context: Pointer to SAP context structure 1404 * @acs_event_callback: Callback function in hdd called by sap 1405 * to inform hdd about channel selection result 1406 * @config: Pointer to configuration structure 1407 * passed down from hdd 1408 * @pusr_context: Parameter that will be passed back in all 1409 * the sap callback events. 1410 * 1411 * This function serves as an api for hdd to initiate acs scan pre 1412 * start bss. 1413 * 1414 * Return: The QDF_STATUS code associated with performing the operation. 1415 */ 1416 QDF_STATUS wlansap_acs_chselect(struct sap_context *sap_context, 1417 sap_event_cb acs_event_callback, 1418 struct sap_config *config, 1419 void *pusr_context); 1420 1421 /** 1422 * sap_undo_acs() - Undo acs i.e free the allocated ch lists 1423 * @sap_context: pointer to the SAP context 1424 * @sap_cfg: pointer to the SAP confid structure 1425 * 1426 * This function will free the memory allocated to the sap ctx channel list, acs 1427 * cfg ch list and master ch list. 1428 * 1429 * Return: None 1430 */ 1431 void sap_undo_acs(struct sap_context *sap_context, struct sap_config *sap_cfg); 1432 1433 /** 1434 * wlansap_get_chan_width() - get sap channel width. 1435 * @sap_ctx: pointer to the SAP context 1436 * 1437 * This function get channel width of sap. 1438 * 1439 * Return: sap channel width 1440 */ 1441 uint32_t wlansap_get_chan_width(struct sap_context *sap_ctx); 1442 1443 /** 1444 * wlansap_get_max_bw_by_phymode() - get max channel width based on phymode 1445 * @sap_ctx: pointer to the SAP context 1446 * 1447 * This function get max channel width of sap based on phymode. 1448 * 1449 * Return: channel width 1450 */ 1451 enum phy_ch_width 1452 wlansap_get_max_bw_by_phymode(struct sap_context *sap_ctx); 1453 1454 /* 1455 * wlansap_set_invalid_session() - set session ID to invalid 1456 * @sap_ctx: pointer to the SAP context 1457 * 1458 * This function sets session ID to invalid 1459 * 1460 * Return: QDF_STATUS 1461 */ 1462 QDF_STATUS wlansap_set_invalid_session(struct sap_context *sap_ctx); 1463 1464 /* 1465 * wlansap_set_invalid_session() - Release vdev ref taken by sap context 1466 * @sap_ctx: pointer to the SAP context 1467 * 1468 * Return: QDF_STATUS 1469 */ 1470 QDF_STATUS wlansap_release_vdev_ref(struct sap_context *sap_ctx); 1471 1472 /** 1473 * sap_get_cac_dur_dfs_region() - get cac duration and dfs region. 1474 * @sap_ctx: sap context 1475 * @cac_duration_ms: pointer to cac duration 1476 * @dfs_region: pointer to dfs region 1477 * @chan_freq: channel frequency 1478 * @ch_params: pointer to ch_params 1479 * 1480 * Get cac duration and dfs region. 1481 * 1482 * Return: None 1483 */ 1484 void sap_get_cac_dur_dfs_region(struct sap_context *sap_ctx, 1485 uint32_t *cac_duration_ms, 1486 uint32_t *dfs_region, 1487 qdf_freq_t chan_freq, 1488 struct ch_params *ch_params); 1489 1490 /** 1491 * sap_clear_global_dfs_param() - Reset global dfs param of sap ctx 1492 * @mac_handle: pointer to mac handle 1493 * @sap_ctx: sap context 1494 * 1495 * This API resets global dfs param of sap ctx. 1496 * 1497 * Return: QDF_STATUS 1498 */ 1499 QDF_STATUS sap_clear_global_dfs_param(mac_handle_t mac_handle, 1500 struct sap_context *sap_ctx); 1501 1502 /** 1503 * sap_dfs_set_current_channel() - Set current channel params in dfs component 1504 * @sap_ctx: sap context 1505 * 1506 * Set current channel params in dfs component, this info will be used to mark 1507 * the channels in nol when radar is detected. 1508 * 1509 * Return: None 1510 */ 1511 void sap_dfs_set_current_channel(void *sap_ctx); 1512 1513 /** 1514 * wlansap_cleanup_cac_timer() - Force cleanup DFS CAC timer 1515 * @sap_ctx: sap context 1516 * 1517 * Force cleanup DFS CAC timer when reset all adapters. It will not 1518 * check concurrency SAP since just called when reset all adapters. 1519 * 1520 * Return: None 1521 */ 1522 void wlansap_cleanup_cac_timer(struct sap_context *sap_ctx); 1523 1524 /** 1525 * wlansap_update_owe_info() - Update OWE info 1526 * @sap_ctx: sap context 1527 * @peer: peer mac 1528 * @ie: IE from hostapd 1529 * @ie_len: IE length 1530 * @owe_status: status from hostapd 1531 * 1532 * Return: QDF_STATUS 1533 */ 1534 QDF_STATUS wlansap_update_owe_info(struct sap_context *sap_ctx, 1535 uint8_t *peer, const uint8_t *ie, 1536 uint32_t ie_len, uint16_t owe_status); 1537 1538 /** 1539 * wlansap_update_ft_info() - Update FT info 1540 * @sap_ctx: sap context 1541 * @peer: peer mac 1542 * @ie: IE from hostapd 1543 * @ie_len: IE length 1544 * @ft_status: wlan status codes 1545 * 1546 * Return: QDF_STATUS 1547 */ 1548 QDF_STATUS wlansap_update_ft_info(struct sap_context *sap_ctx, 1549 uint8_t *peer, const uint8_t *ie, 1550 uint32_t ie_len, uint16_t ft_status); 1551 1552 /** 1553 * wlansap_filter_ch_based_acs() -filter out channel based on acs 1554 * @sap_ctx: sap context 1555 * @ch_freq_list: pointer to channel frequency list 1556 * @ch_cnt: channel number of channel list 1557 * 1558 * Return: QDF_STATUS 1559 */ 1560 QDF_STATUS wlansap_filter_ch_based_acs(struct sap_context *sap_ctx, 1561 uint32_t *ch_freq_list, 1562 uint32_t *ch_cnt); 1563 1564 /** 1565 * wlansap_is_6ghz_included_in_acs_range() - check 6ghz channel included in 1566 * ACS range 1567 * @sap_ctx: sap context 1568 * 1569 * Return: QDF_STATUS 1570 */ 1571 bool wlansap_is_6ghz_included_in_acs_range(struct sap_context *sap_ctx); 1572 1573 /** 1574 * wlansap_get_safe_channel_from_pcl_and_acs_range() - Get safe channel for SAP 1575 * restart 1576 * @sap_ctx: sap context 1577 * @ch_width: selected channel bandwdith 1578 * 1579 * Get a safe channel to restart SAP. PCL already takes into account the 1580 * unsafe channels. So, the PCL is validated with the ACS range to provide 1581 * a safe channel for the SAP to restart. 1582 * 1583 * Return: Chan freq num to restart SAP in case of success. In case of any 1584 * failure, the channel number returned is zero. 1585 */ 1586 uint32_t 1587 wlansap_get_safe_channel_from_pcl_and_acs_range(struct sap_context *sap_ctx, 1588 enum phy_ch_width *ch_width); 1589 1590 /** 1591 * wlansap_get_safe_channel_from_pcl_for_sap() - Get safe and active channel 1592 * for SAP restart 1593 * @sap_ctx: sap context 1594 * 1595 * Get a safe and active channel to restart SAP. PCL already takes into account 1596 * the unsafe channels. 1597 * 1598 * Return: Chan freq num to restart SAP in case of success. In case of any 1599 * failure, the channel number returned is zero. 1600 */ 1601 uint32_t wlansap_get_safe_channel_from_pcl_for_sap(struct sap_context *sap_ctx); 1602 1603 /** 1604 * wlansap_get_chan_band_restrict() - get new chan for band change 1605 * @sap_ctx: sap context pointer 1606 * @csa_reason: channel switch reason to update 1607 * 1608 * Sap/p2p go channel switch from 5G to 2G by CSA when 5G band disabled to 1609 * avoid conflict with modem N79. 1610 * Sap/p2p go channel restore to 5G channel when 5G band enabled. 1611 * Note: csa_reason is only updated when channel is disabled or band is 1612 * restricted, so it must be initialized to a default value beforehand 1613 * 1614 * Return - restart channel in MHZ 1615 */ 1616 qdf_freq_t wlansap_get_chan_band_restrict(struct sap_context *sap_ctx, 1617 enum sap_csa_reason_code *csa_reason); 1618 1619 /** 1620 * wlansap_override_csa_strict_for_sap() - check user CSA strict or not 1621 * @mac_handle: Opaque handle to the global MAC context 1622 * @sap_ctx: sap context 1623 * @target_chan_freq: target channel frequency in MHz 1624 * @strict: CSA strict flag 1625 * 1626 * If force SCC enabled, user trigger SAP CSA and target channel 1627 * doesn't cause MCC with existing STA/CLI, then override strict flag to 1628 * true, so that driver can skip the overlap interference check and 1629 * allow the CSA go through. This is to allow SAP/GO force SCC in 1630 * same band. 1631 * 1632 * Return: true if CSA is strict, otherwise false 1633 */ 1634 bool 1635 wlansap_override_csa_strict_for_sap(mac_handle_t mac_handle, 1636 struct sap_context *sap_ctx, 1637 uint32_t target_chan_freq, 1638 bool strict); 1639 1640 /** 1641 * wlansap_validate_channel_post_csa() - Check SAP channel unsafe or not 1642 * after CSA 1643 * @mac_handle: global MAC context 1644 * @sap_ctx: SAP context 1645 * 1646 * Return: bool 1647 */ 1648 bool wlansap_validate_channel_post_csa(mac_handle_t mac_handle, 1649 struct sap_context *sap_ctx); 1650 1651 /** 1652 * sap_get_csa_reason_str() - Get csa reason in string 1653 * @reason: sap reason enum value 1654 * 1655 * Return: string reason 1656 */ 1657 const char *sap_get_csa_reason_str(enum sap_csa_reason_code reason); 1658 1659 #ifdef FEATURE_RADAR_HISTORY 1660 /** 1661 * wlansap_query_radar_history() - get radar history info 1662 * @mac_handle: mac context 1663 * @radar_history: radar history buffer to be returned 1664 * @count: total history count 1665 * 1666 * The API will return the dfs nol list(Radar found history) and 1667 * CAC history (no Radar found). 1668 * 1669 * Return - QDF_STATUS 1670 */ 1671 QDF_STATUS 1672 wlansap_query_radar_history(mac_handle_t mac_handle, 1673 struct dfs_radar_history **radar_history, 1674 uint32_t *count); 1675 #endif 1676 1677 #ifdef DCS_INTERFERENCE_DETECTION 1678 /** 1679 * wlansap_dcs_set_vdev_wlan_interference_mitigation() - set wlan 1680 * interference mitigation enable information per vdev 1681 * @sap_context: sap context 1682 * @wlan_interference_mitigation_enable: wlan interference mitigation 1683 * enable or not 1684 * 1685 * This function is used to set whether wlan interference mitigation 1686 * enable or not 1687 * 1688 * Return: QDF_STATUS 1689 */ 1690 QDF_STATUS wlansap_dcs_set_vdev_wlan_interference_mitigation( 1691 struct sap_context *sap_context, 1692 bool wlan_interference_mitigation_enable); 1693 1694 /** 1695 * wlansap_dcs_set_wlan_interference_mitigation_on_band() - set wlan 1696 * interference mitigation enable information based on band information 1697 * @sap_context: sap context 1698 * @sap_cfg: sap config 1699 * 1700 * This function is used to set whether wlan interference mitigation 1701 * enable or not based on band information 1702 * 1703 * Return: QDF_STATUS 1704 */ 1705 QDF_STATUS wlansap_dcs_set_wlan_interference_mitigation_on_band( 1706 struct sap_context *sap_context, 1707 struct sap_config *sap_cfg); 1708 1709 /** 1710 * wlansap_dcs_set_vdev_starting() - set vdev starting 1711 * @sap_context: sap context 1712 * @vdev_starting: vdev in starting states 1713 * 1714 * This function is used to set whether vdev starting or not 1715 * 1716 * Return: QDF_STATUS 1717 */ 1718 QDF_STATUS wlansap_dcs_set_vdev_starting(struct sap_context *sap_context, 1719 bool vdev_starting); 1720 1721 /** 1722 * wlansap_dcs_is_wlan_interference_mitigation_enabled() - get wlan interference 1723 * mitigation enabled information 1724 * @sap_context: sap context 1725 * 1726 * This function is used to get wlan interference mitigation enabled information 1727 * with given sap 1728 * 1729 * Return: true if wlan interference mitigation is enabled with given sap 1730 */ 1731 bool wlansap_dcs_is_wlan_interference_mitigation_enabled( 1732 struct sap_context *sap_context); 1733 1734 /** 1735 * wlansap_dcs_get_freq() - get dcs channel frequency 1736 * @sap_context: sap context 1737 * 1738 * This function is used to get dcs channel frequency with give sap 1739 * 1740 * Return: sap dcs channel frequency 1741 */ 1742 qdf_freq_t wlansap_dcs_get_freq(struct sap_context *sap_context); 1743 #else wlansap_dcs_set_vdev_wlan_interference_mitigation(struct sap_context * sap_context,bool wlan_interference_mitigation_enable)1744 static inline QDF_STATUS wlansap_dcs_set_vdev_wlan_interference_mitigation( 1745 struct sap_context *sap_context, 1746 bool wlan_interference_mitigation_enable) 1747 { 1748 return QDF_STATUS_SUCCESS; 1749 } 1750 wlansap_dcs_set_wlan_interference_mitigation_on_band(struct sap_context * sap_context,struct sap_config * sap_cfg)1751 static inline QDF_STATUS wlansap_dcs_set_wlan_interference_mitigation_on_band( 1752 struct sap_context *sap_context, 1753 struct sap_config *sap_cfg) 1754 { 1755 return QDF_STATUS_SUCCESS; 1756 } 1757 wlansap_dcs_set_vdev_starting(struct sap_context * sap_context,bool vdev_starting)1758 static inline QDF_STATUS wlansap_dcs_set_vdev_starting( 1759 struct sap_context *sap_context, bool vdev_starting) 1760 { 1761 return QDF_STATUS_SUCCESS; 1762 } 1763 wlansap_dcs_is_wlan_interference_mitigation_enabled(struct sap_context * sap_context)1764 static inline bool wlansap_dcs_is_wlan_interference_mitigation_enabled( 1765 struct sap_context *sap_context) 1766 { 1767 return false; 1768 } 1769 wlansap_dcs_get_freq(struct sap_context * sap_context)1770 static inline qdf_freq_t wlansap_dcs_get_freq(struct sap_context *sap_context) 1771 { 1772 return 0; 1773 } 1774 #endif 1775 1776 /** 1777 * wlansap_filter_vendor_unsafe_ch_freq() - filter sap acs ch list by 1778 * vendor unsafe ch freq ranges 1779 * @sap_context: sap context 1780 * @sap_config: sap conifg 1781 * 1782 * This function is used to filter out unsafe channel frequency from acs 1783 * channel frequency list based on vendor unsafe channel frequency ranges. 1784 * 1785 * Return: true if vendor unsafe ch range is present, otherwise false 1786 */ 1787 bool wlansap_filter_vendor_unsafe_ch_freq( 1788 struct sap_context *sap_context, struct sap_config *sap_config); 1789 1790 /** 1791 * wlansap_dump_acs_ch_freq() - print acs channel frequency 1792 * @sap_context: sap context 1793 * 1794 * This function is used to print acs channel frequecny 1795 * 1796 * Return: None 1797 */ 1798 void wlansap_dump_acs_ch_freq(struct sap_context *sap_context); 1799 1800 /** 1801 * wlansap_set_acs_ch_freq() - set acs channel frequency 1802 * @sap_context: sap context 1803 * @ch_freq: ch_freq to be set 1804 * 1805 * This function is used to set acs channel frequency 1806 * 1807 * Return: None 1808 */ 1809 void wlansap_set_acs_ch_freq(struct sap_context *sap_context, 1810 qdf_freq_t ch_freq); 1811 1812 /** 1813 * sap_acquire_vdev_ref() - Increment reference count for vdev object 1814 * @psoc: Object Manager PSoC object 1815 * @sap_ctx: to store vdev object pointer 1816 * @session_id: used to get vdev object 1817 * 1818 * This function is used to increment vdev object reference count and store 1819 * vdev pointer in sap_ctx. 1820 * 1821 * Return: QDF_STATUS_SUCCESS - If able to get vdev object reference 1822 * else qdf status failure codes 1823 */ 1824 QDF_STATUS sap_acquire_vdev_ref(struct wlan_objmgr_psoc *psoc, 1825 struct sap_context *sap_ctx, 1826 uint8_t session_id); 1827 1828 /** 1829 * sap_dump_acs_channel() - dump acs channel list 1830 * @acs_cfg: acs config 1831 * 1832 * This function dump acs channel list 1833 * 1834 * Return: void. 1835 */ 1836 void sap_dump_acs_channel(struct sap_acs_cfg *acs_cfg); 1837 1838 /** 1839 * sap_release_vdev_ref() - Decrement reference count for vdev object 1840 * @sap_ctx: for which vdev reference is to be decremented 1841 * 1842 * Return: None 1843 */ 1844 void sap_release_vdev_ref(struct sap_context *sap_ctx); 1845 1846 #ifdef CONFIG_AFC_SUPPORT 1847 /** 1848 * sap_afc_dcs_sel_chan() - API to select best SAP best channel/bandwidth with 1849 * channel ACS weighted algorithm 1850 * @sap_ctx: SAP context handle 1851 * @cur_freq: SAP current home channel frequency 1852 * @cur_bw: SAP current channel bandwidth 1853 * @pref_bw: pointer to channel bandwidth prefer to set as input, and target 1854 * channel bandwidth can set as output 1855 * 1856 * Return: target home channel frequency selected 1857 */ 1858 qdf_freq_t sap_afc_dcs_sel_chan(struct sap_context *sap_ctx, 1859 qdf_freq_t cur_freq, 1860 enum phy_ch_width cur_bw, 1861 enum phy_ch_width *pref_bw); 1862 #endif 1863 1864 #ifdef WLAN_FEATURE_11BE 1865 /** 1866 * sap_phymode_is_eht() - Is sap phymode EHT 1867 * @phymode: phy mode 1868 * 1869 * Return: true if phy mode is EHT 1870 */ 1871 bool sap_phymode_is_eht(eCsrPhyMode phymode); 1872 1873 /** 1874 * sap_acs_is_puncture_applicable() - Is static puncturing applicable according 1875 * to ACS configure of given sap acs config. 1876 * @acs_cfg: pointer to sap_acs_cfg 1877 * 1878 * Return: true if static puncturing is applicable to given sap acs config. 1879 */ 1880 bool sap_acs_is_puncture_applicable(struct sap_acs_cfg *acs_cfg); 1881 1882 /** 1883 * sap_acs_set_puncture_support() - Set puncturing support according 1884 * to ACS configure of given sap. 1885 * @sap_ctx: Pointer to SAP Context 1886 * @ch_params: pointer to ch_params 1887 * 1888 * Return: void. 1889 */ 1890 void sap_acs_set_puncture_support(struct sap_context *sap_ctx, 1891 struct ch_params *ch_params); 1892 #else sap_phymode_is_eht(eCsrPhyMode phymode)1893 static inline bool sap_phymode_is_eht(eCsrPhyMode phymode) 1894 { 1895 return false; 1896 } 1897 sap_acs_is_puncture_applicable(struct sap_acs_cfg * acs_cfg)1898 static inline bool sap_acs_is_puncture_applicable(struct sap_acs_cfg *acs_cfg) 1899 { 1900 return false; 1901 } 1902 sap_acs_set_puncture_support(struct sap_context * sap_ctx,struct ch_params * ch_params)1903 static inline void sap_acs_set_puncture_support(struct sap_context *sap_ctx, 1904 struct ch_params *ch_params) 1905 { 1906 } 1907 #endif /* WLAN_FEATURE_11BE */ 1908 1909 /** 1910 * sap_cac_end_notify() - Notify CAC end to HDD 1911 * @mac_handle: Opaque handle to the global MAC context 1912 * @roamInfo: pointer to the struct csr_roam_info 1913 * 1914 * Function will be called to notify eSAP_DFS_CAC_END event to HDD 1915 * 1916 * Return: QDF_STATUS_SUCCESS if the notification was sent, otherwise 1917 * an appropriate QDF_STATUS error 1918 */ 1919 QDF_STATUS sap_cac_end_notify(mac_handle_t mac_handle, 1920 struct csr_roam_info *roamInfo); 1921 1922 #ifdef WLAN_FEATURE_SAP_ACS_OPTIMIZE sap_is_acs_scan_optimize_enable(void)1923 static inline bool sap_is_acs_scan_optimize_enable(void) 1924 { 1925 return true; 1926 } 1927 1928 void wlansap_process_chan_info_event(struct sap_context *sap_ctx, 1929 struct csr_roam_info *roam_info); 1930 #else sap_is_acs_scan_optimize_enable(void)1931 static inline bool sap_is_acs_scan_optimize_enable(void) 1932 { 1933 return false; 1934 } 1935 1936 static inline wlansap_process_chan_info_event(struct sap_context * sap_ctx,struct csr_roam_info * roam_info)1937 void wlansap_process_chan_info_event(struct sap_context *sap_ctx, 1938 struct csr_roam_info *roam_info) 1939 { 1940 } 1941 #endif 1942 1943 /** 1944 * wlansap_update_ll_lt_sap_acs_result() - Update acs result of LL_LT_SAP 1945 * @sap_ctx: sap context 1946 * @last_acs_freq: last acs frequency to be set 1947 * 1948 * This function is used to update stored acs channel frequency 1949 * 1950 * Return: None 1951 */ 1952 void wlansap_update_ll_lt_sap_acs_result(struct sap_context *sap_ctx, 1953 qdf_freq_t last_acs_freq); 1954 1955 /** 1956 * wlansap_update_sap_chan_list() - set channel list of sap 1957 * @sap_config: sap config 1958 * @freq_list: freq list sent by userspace 1959 * @count: valid freq count 1960 * 1961 * Return: 0 on success, else error number 1962 */ 1963 int wlansap_update_sap_chan_list(struct sap_config *sap_config, 1964 qdf_freq_t *freq_list, uint16_t count); 1965 1966 /** 1967 * wlansap_sort_channel_list() - Sort channel list 1968 * @vdev_id: Vdev Id 1969 * @list: List of channels which needs to sort 1970 * @ch_info: Fill sorted channels list in ch_info 1971 * 1972 * Return: QDF_STATUS 1973 */ 1974 QDF_STATUS wlansap_sort_channel_list(uint8_t vdev_id, qdf_list_t *list, 1975 struct sap_sel_ch_info *ch_info); 1976 1977 /** 1978 * wlansap_free_chan_info() - API to free allocated memory 1979 * @ch_param: Pointer to sap_sel_ch_info structure 1980 * 1981 * Return: None 1982 */ 1983 void wlansap_free_chan_info(struct sap_sel_ch_info *ch_param); 1984 1985 /** 1986 * wlansap_get_user_config_acs_ch_list() - Get user config ACS channel list 1987 * @vdev_id: Vdev Id 1988 * @filter: Filter to apply to get scan result 1989 * 1990 * Return: None 1991 */ 1992 void wlansap_get_user_config_acs_ch_list(uint8_t vdev_id, 1993 struct scan_filter *filter); 1994 #ifdef __cplusplus 1995 } 1996 #endif 1997 #endif /* #ifndef WLAN_QCT_WLANSAP_H */ 1998