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