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