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