xref: /wlan-driver/qcacld-3.0/core/sme/inc/csr_internal.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2011-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2022-2024 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 /**
21*5113495bSYour Name  *   \file csr_internal.h
22*5113495bSYour Name  *
23*5113495bSYour Name  *   Define internal data structure for MAC.
24*5113495bSYour Name  */
25*5113495bSYour Name #ifndef CSRINTERNAL_H__
26*5113495bSYour Name #define CSRINTERNAL_H__
27*5113495bSYour Name 
28*5113495bSYour Name #include "qdf_status.h"
29*5113495bSYour Name #include "qdf_lock.h"
30*5113495bSYour Name 
31*5113495bSYour Name #include "qdf_mc_timer.h"
32*5113495bSYour Name #include "csr_support.h"
33*5113495bSYour Name #include "cds_reg_service.h"
34*5113495bSYour Name #include "wlan_scan_public_structs.h"
35*5113495bSYour Name #include "wlan_cm_roam_api.h"
36*5113495bSYour Name #include "sir_types.h"
37*5113495bSYour Name #include "wlan_mlme_public_struct.h"
38*5113495bSYour Name 
39*5113495bSYour Name /* No of sessions to be supported, and a session is for Infra, BT-AMP */
40*5113495bSYour Name #define CSR_IS_SESSION_VALID(mac, sessionId) \
41*5113495bSYour Name 	((sessionId) < WLAN_MAX_VDEVS && \
42*5113495bSYour Name 	 (mac != NULL) && \
43*5113495bSYour Name 	 ((mac)->roam.roamSession != NULL) && \
44*5113495bSYour Name 	 (mac)->roam.roamSession[(sessionId)].sessionActive)
45*5113495bSYour Name 
46*5113495bSYour Name #define CSR_GET_SESSION(mac, sessionId) \
47*5113495bSYour Name 	(sessionId < WLAN_MAX_VDEVS ? \
48*5113495bSYour Name 	 &(mac)->roam.roamSession[(sessionId)] : NULL)
49*5113495bSYour Name 
50*5113495bSYour Name #define CSR_IS_SESSION_ANY(sessionId) (sessionId == SME_SESSION_ID_ANY)
51*5113495bSYour Name #define CSR_IS_DFS_CH_ROAM_ALLOWED(mac_ctx) \
52*5113495bSYour Name 	( \
53*5113495bSYour Name 	  ((((mac_ctx)->mlme_cfg->lfr.roaming_dfs_channel) != \
54*5113495bSYour Name 	    ROAMING_DFS_CHANNEL_DISABLED) ? true : false) \
55*5113495bSYour Name 	)
56*5113495bSYour Name #define CSR_IS_ROAM_PREFER_5GHZ(mac)	\
57*5113495bSYour Name 	( \
58*5113495bSYour Name 	  ((mac)->mlme_cfg->lfr.roam_prefer_5ghz) \
59*5113495bSYour Name 	)
60*5113495bSYour Name 
61*5113495bSYour Name /* Used to determine what to set to the MLME_DOT11_MODE */
62*5113495bSYour Name enum csr_cfgdot11mode {
63*5113495bSYour Name 	eCSR_CFG_DOT11_MODE_ABG,
64*5113495bSYour Name 	eCSR_CFG_DOT11_MODE_11A,
65*5113495bSYour Name 	eCSR_CFG_DOT11_MODE_11B,
66*5113495bSYour Name 	eCSR_CFG_DOT11_MODE_11G,
67*5113495bSYour Name 	eCSR_CFG_DOT11_MODE_11N,
68*5113495bSYour Name 	eCSR_CFG_DOT11_MODE_11AC,
69*5113495bSYour Name 	eCSR_CFG_DOT11_MODE_11G_ONLY,
70*5113495bSYour Name 	eCSR_CFG_DOT11_MODE_11N_ONLY,
71*5113495bSYour Name 	eCSR_CFG_DOT11_MODE_11AC_ONLY,
72*5113495bSYour Name 	/* This value can never set to CFG. Its for CSR's internal use */
73*5113495bSYour Name 	eCSR_CFG_DOT11_MODE_AUTO,
74*5113495bSYour Name 	eCSR_CFG_DOT11_MODE_11AX,
75*5113495bSYour Name 	eCSR_CFG_DOT11_MODE_11AX_ONLY,
76*5113495bSYour Name 	eCSR_CFG_DOT11_MODE_11BE,
77*5113495bSYour Name 	eCSR_CFG_DOT11_MODE_11BE_ONLY,
78*5113495bSYour Name 	eCSR_CFG_DOT11_MODE_MAX,
79*5113495bSYour Name };
80*5113495bSYour Name 
81*5113495bSYour Name enum csr_roam_reason {
82*5113495bSYour Name 	eCsrForcedDisassocSta = 1,
83*5113495bSYour Name 	eCsrForcedDeauthSta,
84*5113495bSYour Name };
85*5113495bSYour Name 
86*5113495bSYour Name enum csr_roam_substate {
87*5113495bSYour Name 	eCSR_ROAM_SUBSTATE_NONE = 0,
88*5113495bSYour Name 	eCSR_ROAM_SUBSTATE_START_BSS_REQ,
89*5113495bSYour Name 	eCSR_ROAM_SUBSTATE_DISASSOC_REQ,
90*5113495bSYour Name 	eCSR_ROAM_SUBSTATE_STOP_BSS_REQ,
91*5113495bSYour Name 	eCSR_ROAM_SUBSTATE_DEAUTH_REQ,
92*5113495bSYour Name 	eCSR_ROAM_SUBSTATE_WAIT_FOR_KEY,
93*5113495bSYour Name 	/*  max is 15 unless the bitfield is expanded... */
94*5113495bSYour Name };
95*5113495bSYour Name 
96*5113495bSYour Name enum csr_roam_state {
97*5113495bSYour Name 	eCSR_ROAMING_STATE_STOP = 0,
98*5113495bSYour Name 	eCSR_ROAMING_STATE_IDLE,
99*5113495bSYour Name 	eCSR_ROAMING_STATE_JOINING,
100*5113495bSYour Name 	eCSR_ROAMING_STATE_JOINED,
101*5113495bSYour Name };
102*5113495bSYour Name 
103*5113495bSYour Name enum csr_join_state {
104*5113495bSYour Name 	eCsrContinueRoaming,
105*5113495bSYour Name 	eCsrStopRoaming,
106*5113495bSYour Name };
107*5113495bSYour Name 
108*5113495bSYour Name enum csr_roam_wmstatus_changetypes {
109*5113495bSYour Name 	eCsrDisassociated,
110*5113495bSYour Name 	eCsrDeauthenticated
111*5113495bSYour Name };
112*5113495bSYour Name 
113*5113495bSYour Name struct csr_channel {
114*5113495bSYour Name 	uint8_t numChannels;
115*5113495bSYour Name 	uint32_t channel_freq_list[CFG_VALID_CHANNEL_LIST_LEN];
116*5113495bSYour Name };
117*5113495bSYour Name 
118*5113495bSYour Name struct roam_cmd {
119*5113495bSYour Name 	enum csr_roam_reason roamReason;
120*5113495bSYour Name 	tSirMacAddr peerMac;
121*5113495bSYour Name 	struct qdf_mac_addr peer_mld_addr;
122*5113495bSYour Name 	enum wlan_reason_code reason;
123*5113495bSYour Name };
124*5113495bSYour Name 
125*5113495bSYour Name struct wmstatus_changecmd {
126*5113495bSYour Name 	enum csr_roam_wmstatus_changetypes Type;
127*5113495bSYour Name 	union {
128*5113495bSYour Name 		struct deauth_ind DeauthIndMsg;
129*5113495bSYour Name 		struct disassoc_ind DisassocIndMsg;
130*5113495bSYour Name 	} u;
131*5113495bSYour Name 
132*5113495bSYour Name };
133*5113495bSYour Name 
134*5113495bSYour Name struct csr_config {
135*5113495bSYour Name 	uint32_t channelBondingMode24GHz;
136*5113495bSYour Name 	uint32_t channelBondingMode5GHz;
137*5113495bSYour Name 	eCsrPhyMode phyMode;
138*5113495bSYour Name 	enum csr_cfgdot11mode uCfgDot11Mode;
139*5113495bSYour Name 	uint32_t HeartbeatThresh50;
140*5113495bSYour Name 	enum wmm_user_mode WMMSupportMode;
141*5113495bSYour Name 	bool Is11eSupportEnabled;
142*5113495bSYour Name 	bool ProprietaryRatesEnabled;
143*5113495bSYour Name 	bool fenableMCCMode;
144*5113495bSYour Name 	bool mcc_rts_cts_prot_enable;
145*5113495bSYour Name 	bool mcc_bcast_prob_resp_enable;
146*5113495bSYour Name 	uint8_t fAllowMCCGODiffBI;
147*5113495bSYour Name 	uint32_t nVhtChannelWidth;
148*5113495bSYour Name 	bool send_smps_action;
149*5113495bSYour Name #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
150*5113495bSYour Name 	uint8_t cc_switch_mode;
151*5113495bSYour Name #endif
152*5113495bSYour Name 	bool obssEnabled;
153*5113495bSYour Name 	uint8_t conc_custom_rule1;
154*5113495bSYour Name 	uint8_t conc_custom_rule2;
155*5113495bSYour Name 	uint8_t is_sta_connection_in_5gz_enabled;
156*5113495bSYour Name 	enum force_1x1_type is_force_1x1;
157*5113495bSYour Name 	bool wep_tkip_in_he;
158*5113495bSYour Name };
159*5113495bSYour Name 
160*5113495bSYour Name struct csr_channel_powerinfo {
161*5113495bSYour Name 	tListElem link;
162*5113495bSYour Name 	uint32_t first_chan_freq;
163*5113495bSYour Name 	uint8_t numChannels;
164*5113495bSYour Name 	uint8_t txPower;
165*5113495bSYour Name 	uint8_t interChannelOffset;
166*5113495bSYour Name };
167*5113495bSYour Name 
168*5113495bSYour Name struct csr_scanstruct {
169*5113495bSYour Name 	struct csr_channel channels11d;
170*5113495bSYour Name 	struct channel_power defaultPowerTable[CFG_VALID_CHANNEL_LIST_LEN];
171*5113495bSYour Name 	struct csr_channel base_channels;  /* The channel base to work on */
172*5113495bSYour Name 	tDblLinkList channelPowerInfoList24;
173*5113495bSYour Name 	tDblLinkList channelPowerInfoList5G;
174*5113495bSYour Name 	/*
175*5113495bSYour Name 	 * Customer wants to optimize the scan time. Avoiding scans(passive)
176*5113495bSYour Name 	 * on DFS channels while swipping through both bands can save some time
177*5113495bSYour Name 	 * (apprx 1.3 sec)
178*5113495bSYour Name 	 */
179*5113495bSYour Name 	uint8_t fEnableDFSChnlScan;
180*5113495bSYour Name 	bool fcc_constraint;
181*5113495bSYour Name 	bool pending_channel_list_req;
182*5113495bSYour Name };
183*5113495bSYour Name 
184*5113495bSYour Name /*
185*5113495bSYour Name  * Save the connected information. This structure + connectedProfile
186*5113495bSYour Name  * should contain all information about the connection
187*5113495bSYour Name  */
188*5113495bSYour Name struct csr_roam_connectedinfo {
189*5113495bSYour Name 	uint32_t nBeaconLength;
190*5113495bSYour Name 	uint32_t nAssocReqLength;
191*5113495bSYour Name 	uint32_t nAssocRspLength;
192*5113495bSYour Name 	/* len of the parsed RIC resp IEs received in reassoc response */
193*5113495bSYour Name 	uint32_t nRICRspLength;
194*5113495bSYour Name #ifdef FEATURE_WLAN_ESE
195*5113495bSYour Name 	uint32_t nTspecIeLength;
196*5113495bSYour Name #endif
197*5113495bSYour Name 	/*
198*5113495bSYour Name 	 * Point to a buffer contain the beacon, assoc req, assoc rsp frame, in
199*5113495bSYour Name 	 * that order user needs to use nBeaconLength, nAssocReqLength,
200*5113495bSYour Name 	 * nAssocRspLength to desice where each frame starts and ends.
201*5113495bSYour Name 	 */
202*5113495bSYour Name 	uint8_t *pbFrames;
203*5113495bSYour Name };
204*5113495bSYour Name 
205*5113495bSYour Name /**
206*5113495bSYour Name  * struct csr_disconnect_stats - Disconnect Stats per session
207*5113495bSYour Name  * @disconnection_cnt: total no. of disconnections
208*5113495bSYour Name  * @disconnection_by_app: diconnections triggered by application
209*5113495bSYour Name  * @disassoc_by_peer: disassoc sent by peer
210*5113495bSYour Name  * @deauth_by_peer: deauth sent by peer
211*5113495bSYour Name  * @bmiss: disconnect triggered by beacon miss
212*5113495bSYour Name  * @peer_kickout: disconnect triggered by peer kickout
213*5113495bSYour Name  */
214*5113495bSYour Name struct csr_disconnect_stats {
215*5113495bSYour Name 	uint32_t disconnection_cnt;
216*5113495bSYour Name 	uint32_t disconnection_by_app;
217*5113495bSYour Name 	uint32_t disassoc_by_peer;
218*5113495bSYour Name 	uint32_t deauth_by_peer;
219*5113495bSYour Name 	uint32_t bmiss;
220*5113495bSYour Name 	uint32_t peer_kickout;
221*5113495bSYour Name };
222*5113495bSYour Name 
223*5113495bSYour Name /**
224*5113495bSYour Name  * struct csr_roam_session - CSR per-vdev context
225*5113495bSYour Name  * @vdev_id: ID of the vdev for which this entry is applicable
226*5113495bSYour Name  * @cb_mode: channel bonding mode
227*5113495bSYour Name  * @bcn_int: beacon interval
228*5113495bSYour Name  * @update_bcn_int: updated beacon interval
229*5113495bSYour Name  * @is_bcn_recv_start: Allow to process bcn recv indication
230*5113495bSYour Name  * @beacon_report_do_not_resume: Do not resume the beacon reporting after scan
231*5113495bSYour Name  */
232*5113495bSYour Name struct csr_roam_session {
233*5113495bSYour Name 	uint8_t vdev_id;
234*5113495bSYour Name 	bool sessionActive;     /* true if it is used */
235*5113495bSYour Name 
236*5113495bSYour Name 	eCsrConnectState connectState;
237*5113495bSYour Name 	struct csr_roam_connectedinfo connectedInfo;
238*5113495bSYour Name 	tCsrRoamModifyProfileFields modifyProfileFields;
239*5113495bSYour Name 	/*
240*5113495bSYour Name 	 * to remember some parameters needed for START_BSS.
241*5113495bSYour Name 	 * All member must be set every time we try to join
242*5113495bSYour Name 	 */
243*5113495bSYour Name 	ePhyChanBondState cb_mode;
244*5113495bSYour Name 	uint16_t bcn_int;
245*5113495bSYour Name 	bool update_bcn_int;
246*5113495bSYour Name 
247*5113495bSYour Name #ifdef WLAN_BCN_RECV_FEATURE
248*5113495bSYour Name 	bool is_bcn_recv_start;
249*5113495bSYour Name 	bool beacon_report_do_not_resume;
250*5113495bSYour Name #endif
251*5113495bSYour Name #ifdef FEATURE_WLAN_ESE
252*5113495bSYour Name 	bool isPrevApInfoValid;
253*5113495bSYour Name 	uint32_t roamTS1;
254*5113495bSYour Name #endif
255*5113495bSYour Name 	bool ch_switch_in_progress;
256*5113495bSYour Name 	uint8_t nss;
257*5113495bSYour Name 	bool dhcp_done;
258*5113495bSYour Name 	struct csr_disconnect_stats disconnect_stats;
259*5113495bSYour Name };
260*5113495bSYour Name 
261*5113495bSYour Name struct csr_roamstruct {
262*5113495bSYour Name 	struct csr_config configParam;
263*5113495bSYour Name 	enum csr_roam_state curState[WLAN_MAX_VDEVS];
264*5113495bSYour Name 	enum csr_roam_substate curSubState[WLAN_MAX_VDEVS];
265*5113495bSYour Name 	/*
266*5113495bSYour Name 	 * This may or may not have the up-to-date valid channel list. It is
267*5113495bSYour Name 	 * used to get CFG_VALID_CHANNEL_LIST and not alloc mem all time
268*5113495bSYour Name 	 */
269*5113495bSYour Name 	int32_t sPendingCommands;
270*5113495bSYour Name 	struct csr_roam_session *roamSession;
271*5113495bSYour Name #if defined(WLAN_LOGGING_SOCK_SVC_ENABLE) && \
272*5113495bSYour Name 	defined(CONNECTIVITY_PKTLOG)
273*5113495bSYour Name 	qdf_mc_timer_t packetdump_timer;
274*5113495bSYour Name #endif
275*5113495bSYour Name 	spinlock_t roam_state_lock;
276*5113495bSYour Name };
277*5113495bSYour Name 
278*5113495bSYour Name #define CSR_IS_ROAM_STATE(mac, state, sessionId) \
279*5113495bSYour Name 			((state) == (mac)->roam.curState[sessionId])
280*5113495bSYour Name #define CSR_IS_ROAM_STOP(mac, sessionId) \
281*5113495bSYour Name 		CSR_IS_ROAM_STATE((mac), eCSR_ROAMING_STATE_STOP, sessionId)
282*5113495bSYour Name #define CSR_IS_ROAM_JOINING(mac, sessionId)  \
283*5113495bSYour Name 		CSR_IS_ROAM_STATE(mac, eCSR_ROAMING_STATE_JOINING, sessionId)
284*5113495bSYour Name #define CSR_IS_ROAM_JOINED(mac, sessionId) \
285*5113495bSYour Name 		CSR_IS_ROAM_STATE(mac, eCSR_ROAMING_STATE_JOINED, sessionId)
286*5113495bSYour Name #define CSR_IS_ROAM_SUBSTATE(mac, subState, sessionId) \
287*5113495bSYour Name 		((subState) == (mac)->roam.curSubState[sessionId])
288*5113495bSYour Name #define CSR_IS_ROAM_SUBSTATE_DISASSOC_REQ(mac, sessionId) \
289*5113495bSYour Name 		CSR_IS_ROAM_SUBSTATE((mac), eCSR_ROAM_SUBSTATE_DISASSOC_REQ, sessionId)
290*5113495bSYour Name #define CSR_IS_ROAM_SUBSTATE_DEAUTH_REQ(mac, sessionId) \
291*5113495bSYour Name 		CSR_IS_ROAM_SUBSTATE((mac), \
292*5113495bSYour Name 			eCSR_ROAM_SUBSTATE_DEAUTH_REQ, sessionId)
293*5113495bSYour Name #define CSR_IS_ROAM_SUBSTATE_START_BSS_REQ(mac, sessionId) \
294*5113495bSYour Name 		CSR_IS_ROAM_SUBSTATE((mac), \
295*5113495bSYour Name 			eCSR_ROAM_SUBSTATE_START_BSS_REQ, sessionId)
296*5113495bSYour Name #define CSR_IS_ROAM_SUBSTATE_STOP_BSS_REQ(mac, sessionId) \
297*5113495bSYour Name 		CSR_IS_ROAM_SUBSTATE((mac), \
298*5113495bSYour Name 			eCSR_ROAM_SUBSTATE_STOP_BSS_REQ, sessionId)
299*5113495bSYour Name #define CSR_IS_ROAM_SUBSTATE_WAITFORKEY(mac, sessionId) \
300*5113495bSYour Name 		CSR_IS_ROAM_SUBSTATE((mac), \
301*5113495bSYour Name 			eCSR_ROAM_SUBSTATE_WAIT_FOR_KEY, sessionId)
302*5113495bSYour Name 
303*5113495bSYour Name #define CSR_IS_PHY_MODE_DUAL_BAND(phyMode) \
304*5113495bSYour Name 	((eCSR_DOT11_MODE_abg & (phyMode)) || \
305*5113495bSYour Name 	 (eCSR_DOT11_MODE_11n & (phyMode)) || \
306*5113495bSYour Name 	 (eCSR_DOT11_MODE_11ac & (phyMode)) || \
307*5113495bSYour Name 	 (eCSR_DOT11_MODE_11ax & (phyMode)) || \
308*5113495bSYour Name 	 (eCSR_DOT11_MODE_11be & (phyMode)) || \
309*5113495bSYour Name 	 (eCSR_DOT11_MODE_AUTO & (phyMode)))
310*5113495bSYour Name 
311*5113495bSYour Name #define CSR_IS_DOT11_MODE_11N(dot11mode) \
312*5113495bSYour Name 	((dot11mode == eCSR_CFG_DOT11_MODE_AUTO) || \
313*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11N) || \
314*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11AC) || \
315*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11N_ONLY) || \
316*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11AC_ONLY) || \
317*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11AX) || \
318*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11AX_ONLY) || \
319*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11BE) || \
320*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11BE_ONLY))
321*5113495bSYour Name 
322*5113495bSYour Name #define CSR_IS_DOT11_MODE_11AC(dot11mode) \
323*5113495bSYour Name 	((dot11mode == eCSR_CFG_DOT11_MODE_AUTO) || \
324*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11AC) || \
325*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11AC_ONLY) || \
326*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11AX) || \
327*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11AX_ONLY) || \
328*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11BE) || \
329*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11BE_ONLY))
330*5113495bSYour Name 
331*5113495bSYour Name #define CSR_IS_DOT11_MODE_11AX(dot11mode) \
332*5113495bSYour Name 	((dot11mode == eCSR_CFG_DOT11_MODE_AUTO) || \
333*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11AX) || \
334*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11AX_ONLY) || \
335*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11BE) || \
336*5113495bSYour Name 	 (dot11mode == eCSR_CFG_DOT11_MODE_11BE_ONLY))
337*5113495bSYour Name 
338*5113495bSYour Name #define CSR_IS_DOT11_MODE_11BE(dot11mode) \
339*5113495bSYour Name 	(((dot11mode) == eCSR_CFG_DOT11_MODE_AUTO) || \
340*5113495bSYour Name 	 ((dot11mode) == eCSR_CFG_DOT11_MODE_11BE) || \
341*5113495bSYour Name 	 ((dot11mode) == eCSR_CFG_DOT11_MODE_11BE_ONLY))
342*5113495bSYour Name 
343*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
344*5113495bSYour Name #define CSR_IS_CFG_DOT11_PHY_MODE_11BE(dot11mode) \
345*5113495bSYour Name 	((dot11mode) == eCSR_CFG_DOT11_MODE_11BE)
346*5113495bSYour Name 
347*5113495bSYour Name #define CSR_IS_CFG_DOT11_PHY_MODE_11BE_ONLY(dot11mode) \
348*5113495bSYour Name 	((dot11mode) == eCSR_CFG_DOT11_MODE_11BE_ONLY)
349*5113495bSYour Name #else
350*5113495bSYour Name #define CSR_IS_CFG_DOT11_PHY_MODE_11BE(dot11mode) 0
351*5113495bSYour Name #define CSR_IS_CFG_DOT11_PHY_MODE_11BE_ONLY(dot11mode) 0
352*5113495bSYour Name #endif
353*5113495bSYour Name /*
354*5113495bSYour Name  * this function returns true if the NIC is operating exclusively in
355*5113495bSYour Name  * the 2.4 GHz band, meaning. it is NOT operating in the 5.0 GHz band.
356*5113495bSYour Name  */
357*5113495bSYour Name #define CSR_IS_24_BAND_ONLY(mac) \
358*5113495bSYour Name 	(BIT(REG_BAND_2G) == (mac)->mlme_cfg->gen.band)
359*5113495bSYour Name 
360*5113495bSYour Name #define CSR_IS_5G_BAND_ONLY(mac) \
361*5113495bSYour Name 	(BIT(REG_BAND_5G) == (mac)->mlme_cfg->gen.band)
362*5113495bSYour Name 
363*5113495bSYour Name #define CSR_IS_RADIO_DUAL_BAND(mac) \
364*5113495bSYour Name 	((BIT(REG_BAND_2G) | BIT(REG_BAND_5G)) == \
365*5113495bSYour Name 		(mac)->mlme_cfg->gen.band_capability)
366*5113495bSYour Name 
367*5113495bSYour Name #define CSR_IS_RADIO_BG_ONLY(mac) \
368*5113495bSYour Name 	(BIT(REG_BAND_2G) == (mac)->mlme_cfg->gen.band_capability)
369*5113495bSYour Name 
370*5113495bSYour Name /*
371*5113495bSYour Name  * this function returns true if the NIC is operating exclusively in the 5.0 GHz
372*5113495bSYour Name  * band, meaning. it is NOT operating in the 2.4 GHz band
373*5113495bSYour Name  */
374*5113495bSYour Name #define CSR_IS_RADIO_A_ONLY(mac) \
375*5113495bSYour Name 	(BAND_5G == (mac)->mlme_cfg->gen.band_capability)
376*5113495bSYour Name /* this function returns true if the NIC is operating in both bands. */
377*5113495bSYour Name #define CSR_IS_OPEARTING_DUAL_BAND(mac) \
378*5113495bSYour Name 	((BAND_ALL == (mac)->mlme_cfg->gen.band_capability) && \
379*5113495bSYour Name 		(BAND_ALL == (mac)->mlme_cfg->gen.band))
380*5113495bSYour Name /*
381*5113495bSYour Name  * this function returns true if the NIC can operate in the 5.0 GHz band
382*5113495bSYour Name  * (could operate in the 2.4 GHz band also)
383*5113495bSYour Name  */
384*5113495bSYour Name #define CSR_IS_OPERATING_A_BAND(mac) \
385*5113495bSYour Name 	(CSR_IS_OPEARTING_DUAL_BAND((mac)) || \
386*5113495bSYour Name 		CSR_IS_RADIO_A_ONLY((mac)) || CSR_IS_5G_BAND_ONLY((mac)))
387*5113495bSYour Name 
388*5113495bSYour Name /*
389*5113495bSYour Name  * this function returns true if the NIC can operate in the 2.4 GHz band
390*5113495bSYour Name  * (could operate in the 5.0 GHz band also).
391*5113495bSYour Name  */
392*5113495bSYour Name #define CSR_IS_OPERATING_BG_BAND(mac) \
393*5113495bSYour Name 	(CSR_IS_OPEARTING_DUAL_BAND((mac)) || \
394*5113495bSYour Name 		CSR_IS_RADIO_BG_ONLY((mac)) || CSR_IS_24_BAND_ONLY((mac)))
395*5113495bSYour Name 
396*5113495bSYour Name #define CSR_IS_ADDTS_WHEN_ACMOFF_SUPPORTED(mac) \
397*5113495bSYour Name 	(mac->mlme_cfg->wmm_params.wmm_tspec_element.ts_acm_is_off)
398*5113495bSYour Name 
399*5113495bSYour Name /**
400*5113495bSYour Name  * csr_get_vdev_dot11_mode() - get the supported dot11mode by vdev
401*5113495bSYour Name  * @mac_ctx:  pointer to global mac structure
402*5113495bSYour Name  * @vdev_id: vdev id
403*5113495bSYour Name  * @curr_dot11_mode: Current dot11 mode
404*5113495bSYour Name  *
405*5113495bSYour Name  * The function return the min of supported dot11 mode and vdev type dot11mode
406*5113495bSYour Name  * for given vdev type.
407*5113495bSYour Name  *
408*5113495bSYour Name  * Return:csr_cfgdot11mode
409*5113495bSYour Name  */
410*5113495bSYour Name enum csr_cfgdot11mode
411*5113495bSYour Name csr_get_vdev_dot11_mode(struct mac_context *mac,
412*5113495bSYour Name 			uint8_t vdev_id,
413*5113495bSYour Name 			enum csr_cfgdot11mode curr_dot11_mode);
414*5113495bSYour Name 
415*5113495bSYour Name QDF_STATUS csr_get_channel_and_power_list(struct mac_context *mac);
416*5113495bSYour Name 
417*5113495bSYour Name QDF_STATUS csr_set_modify_profile_fields(struct mac_context *mac,
418*5113495bSYour Name 		uint32_t sessionId, tCsrRoamModifyProfileFields *
419*5113495bSYour Name 		pModifyProfileFields);
420*5113495bSYour Name QDF_STATUS csr_get_modify_profile_fields(struct mac_context *mac,
421*5113495bSYour Name 		uint32_t sessionId, tCsrRoamModifyProfileFields *
422*5113495bSYour Name 		pModifyProfileFields);
423*5113495bSYour Name void csr_set_global_cfgs(struct mac_context *mac);
424*5113495bSYour Name void csr_set_default_dot11_mode(struct mac_context *mac);
425*5113495bSYour Name bool csr_is_conn_state_disconnected(struct mac_context *mac,
426*5113495bSYour Name 				    uint8_t vdev_id);
427*5113495bSYour Name bool csr_is_conn_state_connected(struct mac_context *mac,
428*5113495bSYour Name 					       uint32_t sessionId);
429*5113495bSYour Name bool csr_is_conn_state_wds(struct mac_context *mac, uint32_t sessionId);
430*5113495bSYour Name bool csr_is_conn_state_connected_wds(struct mac_context *mac,
431*5113495bSYour Name 						    uint32_t sessionId);
432*5113495bSYour Name bool csr_is_conn_state_disconnected_wds(struct mac_context *mac,
433*5113495bSYour Name 		uint32_t sessionId);
434*5113495bSYour Name bool csr_is_any_session_in_connect_state(struct mac_context *mac);
435*5113495bSYour Name bool csr_is_all_session_disconnected(struct mac_context *mac);
436*5113495bSYour Name 
437*5113495bSYour Name bool csr_is_infra_ap_started(struct mac_context *mac);
438*5113495bSYour Name bool csr_is_conn_state_connected_infra_ap(struct mac_context *mac,
439*5113495bSYour Name 		uint32_t sessionId);
440*5113495bSYour Name QDF_STATUS csr_get_snr(struct mac_context *mac, tCsrSnrCallback callback,
441*5113495bSYour Name 			  struct qdf_mac_addr bssId, void *pContext);
442*5113495bSYour Name QDF_STATUS csr_get_config_param(struct mac_context *mac,
443*5113495bSYour Name 					  struct csr_config_params *pParam);
444*5113495bSYour Name QDF_STATUS csr_change_default_config_param(struct mac_context *mac,
445*5113495bSYour Name 		struct csr_config_params *pParam);
446*5113495bSYour Name QDF_STATUS csr_msg_processor(struct mac_context *mac, void *msg_buf);
447*5113495bSYour Name QDF_STATUS csr_open(struct mac_context *mac);
448*5113495bSYour Name QDF_STATUS csr_init_chan_list(struct mac_context *mac);
449*5113495bSYour Name QDF_STATUS csr_close(struct mac_context *mac);
450*5113495bSYour Name QDF_STATUS csr_start(struct mac_context *mac);
451*5113495bSYour Name QDF_STATUS csr_stop(struct mac_context *mac);
452*5113495bSYour Name QDF_STATUS csr_ready(struct mac_context *mac);
453*5113495bSYour Name 
454*5113495bSYour Name /**
455*5113495bSYour Name  * csr_get_concurrent_operation_freq() - To get concurrent operating freq
456*5113495bSYour Name  * @mac_ctx: Pointer to mac context
457*5113495bSYour Name  *
458*5113495bSYour Name  * This routine will return operating freq on FIRST BSS that is
459*5113495bSYour Name  * active/operating to be used for concurrency mode.
460*5113495bSYour Name  * If other BSS is not up or not connected it will return 0
461*5113495bSYour Name  *
462*5113495bSYour Name  * Return: uint32_t
463*5113495bSYour Name  */
464*5113495bSYour Name uint32_t csr_get_concurrent_operation_freq(struct mac_context *mac_ctx);
465*5113495bSYour Name 
466*5113495bSYour Name /**
467*5113495bSYour Name  * csr_get_beaconing_concurrent_channel() - To get concurrent operating channel
468*5113495bSYour Name  * frequency of beaconing interface
469*5113495bSYour Name  * @mac_ctx: Pointer to mac context
470*5113495bSYour Name  * @vdev_id_to_skip: channel of which vdev id to skip
471*5113495bSYour Name  *
472*5113495bSYour Name  * This routine will return operating channel of active AP/GO channel
473*5113495bSYour Name  * and will skip the channel of vdev_id_to_skip.
474*5113495bSYour Name  * If other no requested mode is active it will return 0
475*5113495bSYour Name  *
476*5113495bSYour Name  * Return: uint32_t
477*5113495bSYour Name  */
478*5113495bSYour Name uint32_t csr_get_beaconing_concurrent_channel(struct mac_context *mac_ctx,
479*5113495bSYour Name 					      uint8_t vdev_id_to_skip);
480*5113495bSYour Name 
481*5113495bSYour Name #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
482*5113495bSYour Name /**
483*5113495bSYour Name  * csr_check_concurrent_channel_overlap() - To check concurrent overlap chnls
484*5113495bSYour Name  * @mac: Pointer to mac context
485*5113495bSYour Name  * @sap_freq: Requested SAP freq
486*5113495bSYour Name  * @sap_phymode: SAP phy mode
487*5113495bSYour Name  * @cc_switch_mode: concurrent switch mode
488*5113495bSYour Name  * @vdev_id: vdev id of SAP/GO requesting
489*5113495bSYour Name  *
490*5113495bSYour Name  * This routine will be called to check concurrent overlap channels
491*5113495bSYour Name  *
492*5113495bSYour Name  * Return: uint16_t
493*5113495bSYour Name  */
494*5113495bSYour Name uint16_t csr_check_concurrent_channel_overlap(struct mac_context *mac,
495*5113495bSYour Name 				uint32_t sap_freq, eCsrPhyMode sap_phymode,
496*5113495bSYour Name 				uint8_t cc_switch_mode, uint8_t vdev_id);
497*5113495bSYour Name #endif
498*5113495bSYour Name 
499*5113495bSYour Name /* Returns whether the current association is a 11r assoc or not */
500*5113495bSYour Name bool csr_roam_is11r_assoc(struct mac_context *mac, uint8_t sessionId);
501*5113495bSYour Name 
502*5113495bSYour Name #ifdef FEATURE_WLAN_ESE
503*5113495bSYour Name /* Returns whether the current association is a ESE assoc or not */
504*5113495bSYour Name bool csr_roam_is_ese_assoc(struct mac_context *mac, uint32_t sessionId);
505*5113495bSYour Name QDF_STATUS csr_get_tsm_stats(struct mac_context *mac,
506*5113495bSYour Name 		tCsrTsmStatsCallback callback,
507*5113495bSYour Name 		struct qdf_mac_addr bssId,
508*5113495bSYour Name 		void *pContext, uint8_t tid);
509*5113495bSYour Name #endif
510*5113495bSYour Name 
511*5113495bSYour Name /**
512*5113495bSYour Name  * csr_send_channel_change_req() - Post channel change request to LIM
513*5113495bSYour Name  * @mac : mac context
514*5113495bSYour Name  * @req : channel change request
515*5113495bSYour Name  *
516*5113495bSYour Name  * This API is primarily used to post Channel Change Req for SAP
517*5113495bSYour Name  *
518*5113495bSYour Name  *  Return: QDF_STATUS
519*5113495bSYour Name  */
520*5113495bSYour Name QDF_STATUS csr_send_channel_change_req(struct mac_context *mac,
521*5113495bSYour Name 				       struct channel_change_req *req);
522*5113495bSYour Name 
523*5113495bSYour Name /* Post Beacon Tx Start Indication */
524*5113495bSYour Name QDF_STATUS csr_roam_start_beacon_req(struct mac_context *mac,
525*5113495bSYour Name 		struct qdf_mac_addr bssid, uint8_t dfsCacWaitStatus);
526*5113495bSYour Name 
527*5113495bSYour Name /**
528*5113495bSYour Name  * csr_roam_send_chan_sw_ie_request() - Request to transmit CSA IE
529*5113495bSYour Name  * @mac_ctx:        Global MAC context
530*5113495bSYour Name  * @bssid:          BSSID
531*5113495bSYour Name  * @target_chan_freq: Channel frequency on which to send the IE
532*5113495bSYour Name  * @csa_ie_reqd:    Include/Exclude CSA IE.
533*5113495bSYour Name  * @ch_params:  operating Channel related information
534*5113495bSYour Name  * @new_cac_ms: cac duration of new channel
535*5113495bSYour Name  *
536*5113495bSYour Name  * This function sends request to transmit channel switch announcement
537*5113495bSYour Name  * IE to lower layers
538*5113495bSYour Name  *
539*5113495bSYour Name  * Return: success or failure
540*5113495bSYour Name  **/
541*5113495bSYour Name QDF_STATUS csr_roam_send_chan_sw_ie_request(struct mac_context *mac,
542*5113495bSYour Name 					    struct qdf_mac_addr bssid,
543*5113495bSYour Name 					    uint32_t target_chan_freq,
544*5113495bSYour Name 					    uint8_t csaIeReqd,
545*5113495bSYour Name 					    struct ch_params *ch_params,
546*5113495bSYour Name 					    uint32_t new_cac_ms);
547*5113495bSYour Name 
548*5113495bSYour Name QDF_STATUS csr_roam_modify_add_ies(struct mac_context *mac,
549*5113495bSYour Name 					tSirModifyIE *pModifyIE,
550*5113495bSYour Name 				   eUpdateIEsType updateType);
551*5113495bSYour Name QDF_STATUS
552*5113495bSYour Name csr_roam_update_add_ies(struct mac_context *mac,
553*5113495bSYour Name 		tSirUpdateIE *pUpdateIE, eUpdateIEsType updateType);
554*5113495bSYour Name 
555*5113495bSYour Name bool csr_nonscan_active_ll_remove_entry(
556*5113495bSYour Name 			struct mac_context *mac_ctx,
557*5113495bSYour Name 			tListElem *pEntryToRemove, bool inter_locked);
558*5113495bSYour Name tListElem *csr_nonscan_active_ll_peek_head(
559*5113495bSYour Name 			struct mac_context *mac_ctx,
560*5113495bSYour Name 			bool inter_locked);
561*5113495bSYour Name tListElem *csr_nonscan_pending_ll_peek_head(
562*5113495bSYour Name 			struct mac_context *mac_ctx,
563*5113495bSYour Name 			bool inter_locked);
564*5113495bSYour Name tListElem *csr_nonscan_pending_ll_next(
565*5113495bSYour Name 			struct mac_context *mac_ctx,
566*5113495bSYour Name 		tListElem *entry, bool inter_locked);
567*5113495bSYour Name 
568*5113495bSYour Name /**
569*5113495bSYour Name  * csr_purge_pdev_all_ser_cmd_list() - purge all scan and non-scan
570*5113495bSYour Name  * active and pending cmds for all vdevs in pdev
571*5113495bSYour Name  * @mac_ctx: pointer to global MAC context
572*5113495bSYour Name  *
573*5113495bSYour Name  * Return : none
574*5113495bSYour Name  */
575*5113495bSYour Name void csr_purge_pdev_all_ser_cmd_list(struct mac_context *mac_ctx);
576*5113495bSYour Name 
577*5113495bSYour Name void csr_roam_substate_change(
578*5113495bSYour Name 			struct mac_context *mac, enum csr_roam_substate
579*5113495bSYour Name 					NewSubstate, uint32_t sessionId);
580*5113495bSYour Name 
581*5113495bSYour Name bool csr_is_ndi_started(struct mac_context *mac_ctx, uint32_t session_id);
582*5113495bSYour Name 
583*5113495bSYour Name QDF_STATUS csr_roam_update_config(
584*5113495bSYour Name 			struct mac_context *mac_ctx, uint8_t session_id,
585*5113495bSYour Name 				  uint16_t capab, uint32_t value);
586*5113495bSYour Name 
587*5113495bSYour Name /**
588*5113495bSYour Name  * csr_is_mcc_channel() - check if using the channel results into MCC
589*5113495bSYour Name  * @mac_ctx: pointer to global MAC context
590*5113495bSYour Name  * @chan_freq: channel frequency to check for MCC scenario
591*5113495bSYour Name  *
592*5113495bSYour Name  * Return : true if channel causes MCC, else false
593*5113495bSYour Name  */
594*5113495bSYour Name bool csr_is_mcc_channel(struct mac_context *mac_ctx, uint32_t chan_freq);
595*5113495bSYour Name 
596*5113495bSYour Name #ifdef WLAN_FEATURE_ROAM_OFFLOAD
597*5113495bSYour Name /**
598*5113495bSYour Name  * csr_roam_auth_offload_callback() - Registered CSR Callback function to handle
599*5113495bSYour Name  * WPA3 roam pre-auth event from firmware.
600*5113495bSYour Name  * @mac_ctx: Global mac context pointer
601*5113495bSYour Name  * @vdev_id: Vdev id
602*5113495bSYour Name  * @bssid: candidate AP bssid
603*5113495bSYour Name  * @akm: candidate AKM
604*5113495bSYour Name  */
605*5113495bSYour Name QDF_STATUS
606*5113495bSYour Name csr_roam_auth_offload_callback(struct mac_context *mac_ctx,
607*5113495bSYour Name 			       uint8_t vdev_id,
608*5113495bSYour Name 			       struct qdf_mac_addr bssid,
609*5113495bSYour Name 			       uint32_t akm);
610*5113495bSYour Name #else
611*5113495bSYour Name static inline QDF_STATUS
csr_roam_auth_offload_callback(struct mac_context * mac_ctx,uint8_t vdev_id,struct qdf_mac_addr bssid,uint32_t akm)612*5113495bSYour Name csr_roam_auth_offload_callback(struct mac_context *mac_ctx,
613*5113495bSYour Name 			       uint8_t vdev_id,
614*5113495bSYour Name 			       struct qdf_mac_addr bssid,
615*5113495bSYour Name 			       uint32_t akm)
616*5113495bSYour Name {
617*5113495bSYour Name 	return QDF_STATUS_E_NOSUPPORT;
618*5113495bSYour Name }
619*5113495bSYour Name #endif
620*5113495bSYour Name 
621*5113495bSYour Name /**
622*5113495bSYour Name  * csr_invoke_neighbor_report_request - Send neighbor report invoke command to
623*5113495bSYour Name  *					WMA
624*5113495bSYour Name  * @mac_ctx: MAC context
625*5113495bSYour Name  * @session_id: session id
626*5113495bSYour Name  *
627*5113495bSYour Name  * API called from IW to invoke neighbor report request to WMA then to FW
628*5113495bSYour Name  *
629*5113495bSYour Name  * Return: QDF_STATUS
630*5113495bSYour Name  */
631*5113495bSYour Name QDF_STATUS csr_invoke_neighbor_report_request(uint8_t session_id,
632*5113495bSYour Name 				struct sRrmNeighborReq *neighbor_report_req,
633*5113495bSYour Name 				bool send_resp_to_host);
634*5113495bSYour Name 
635*5113495bSYour Name /**
636*5113495bSYour Name  * csr_set_vdev_ies_per_band() - sends the per band IEs to vdev
637*5113495bSYour Name  * @mac_handle: Opaque handle to the global MAC context
638*5113495bSYour Name  * @vdev_id: vdev_id for which IE is targeted
639*5113495bSYour Name  * @device_mode: vdev mode
640*5113495bSYour Name  *
641*5113495bSYour Name  * Return: None
642*5113495bSYour Name  */
643*5113495bSYour Name void csr_set_vdev_ies_per_band(mac_handle_t mac_handle, uint8_t vdev_id,
644*5113495bSYour Name 			       enum QDF_OPMODE device_mode);
645*5113495bSYour Name #endif
646