xref: /wlan-driver/qcacld-3.0/core/sap/src/sap_internal.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-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 #ifndef WLAN_QCT_WLANSAP_INTERNAL_H
21*5113495bSYour Name #define WLAN_QCT_WLANSAP_INTERNAL_H
22*5113495bSYour Name 
23*5113495bSYour Name /*
24*5113495bSYour Name  * This file contains the internal API exposed by the wlan SAP PAL layer
25*5113495bSYour Name  * module.
26*5113495bSYour Name  */
27*5113495bSYour Name 
28*5113495bSYour Name #include "cds_api.h"
29*5113495bSYour Name #include "cds_packet.h"
30*5113495bSYour Name 
31*5113495bSYour Name /* Pick up the CSR API definitions */
32*5113495bSYour Name #include "csr_api.h"
33*5113495bSYour Name #include "sap_api.h"
34*5113495bSYour Name #include "sap_fsm_ext.h"
35*5113495bSYour Name #include "sap_ch_select.h"
36*5113495bSYour Name #include <wlan_scan_public_structs.h>
37*5113495bSYour Name #include <wlan_objmgr_pdev_obj.h>
38*5113495bSYour Name #include "wlan_vdev_mlme_main.h"
39*5113495bSYour Name #include "wlan_vdev_mlme_api.h"
40*5113495bSYour Name 
41*5113495bSYour Name /* DFS Non Occupancy Period =30 minutes, in microseconds */
42*5113495bSYour Name #define SAP_DFS_NON_OCCUPANCY_PERIOD      (30 * 60 * 1000 * 1000)
43*5113495bSYour Name 
44*5113495bSYour Name #define SAP_DEBUG
45*5113495bSYour Name 
46*5113495bSYour Name #define IS_ETSI_WEATHER_FREQ(_freq)   ((_freq >= 5600) && (_freq <= 5650))
47*5113495bSYour Name #define IS_CH_BONDING_WITH_WEATHER_CH(_ch)   (_ch == 116)
48*5113495bSYour Name #define IS_CHAN_JAPAN_INDOOR(_ch) ((_ch >= 36)  && (_ch <= 64))
49*5113495bSYour Name #define IS_CHAN_JAPAN_OUTDOOR(_ch)((_ch >= 100) && (_ch <= 140))
50*5113495bSYour Name #define DEFAULT_CAC_TIMEOUT (60 * 1000) /* msecs - 1 min */
51*5113495bSYour Name #define ETSI_WEATHER_CH_CAC_TIMEOUT (10 * 60 * 1000)    /* msecs - 10 min */
52*5113495bSYour Name #define SAP_CHAN_PREFERRED_INDOOR  1
53*5113495bSYour Name #define SAP_CHAN_PREFERRED_OUTDOOR 2
54*5113495bSYour Name 
55*5113495bSYour Name /*SAP Specific logging*/
56*5113495bSYour Name 
57*5113495bSYour Name #define sap_alert(params...) QDF_TRACE_FATAL(QDF_MODULE_ID_SAP, params)
58*5113495bSYour Name #define sap_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_SAP, params)
59*5113495bSYour Name #define sap_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_SAP, params)
60*5113495bSYour Name #define sap_info(params...) QDF_TRACE_INFO(QDF_MODULE_ID_SAP, params)
61*5113495bSYour Name #define sap_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_SAP, params)
62*5113495bSYour Name 
63*5113495bSYour Name #define sap_nofl_alert(params...) \
64*5113495bSYour Name 	QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_SAP, params)
65*5113495bSYour Name #define sap_nofl_err(params...) \
66*5113495bSYour Name 	QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_SAP, params)
67*5113495bSYour Name #define sap_nofl_warn(params...) \
68*5113495bSYour Name 	QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_SAP, params)
69*5113495bSYour Name #define sap_nofl_info(params...) \
70*5113495bSYour Name 	QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_SAP, params)
71*5113495bSYour Name #define sap_nofl_debug(params...) \
72*5113495bSYour Name 	QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_SAP, params)
73*5113495bSYour Name 
74*5113495bSYour Name #define sap_alert_rl(params...) QDF_TRACE_FATAL_RL(QDF_MODULE_ID_SAP, params)
75*5113495bSYour Name #define sap_err_rl(params...) QDF_TRACE_ERROR_RL(QDF_MODULE_ID_SAP, params)
76*5113495bSYour Name #define sap_warn_rl(params...) QDF_TRACE_WARN_RL(QDF_MODULE_ID_SAP, params)
77*5113495bSYour Name #define sap_info_rl(params...) QDF_TRACE_INFO_RL(QDF_MODULE_ID_SAP, params)
78*5113495bSYour Name #define sap_debug_rl(params...) QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_SAP, params)
79*5113495bSYour Name 
80*5113495bSYour Name /*----------------------------------------------------------------------------
81*5113495bSYour Name  *  Typedefs
82*5113495bSYour Name  * -------------------------------------------------------------------------*/
83*5113495bSYour Name /*----------------------------------------------------------------------------
84*5113495bSYour Name  *  Type Declarations - For internal SAP context information
85*5113495bSYour Name  * -------------------------------------------------------------------------*/
86*5113495bSYour Name /*----------------------------------------------------------------------------
87*5113495bSYour Name  *  Opaque SAP context Type Declaration
88*5113495bSYour Name  * -------------------------------------------------------------------------*/
89*5113495bSYour Name /* We were only using this syntax, when this was truly opaque. */
90*5113495bSYour Name /* (I.E., it was defined in a different file.) */
91*5113495bSYour Name 
92*5113495bSYour Name /**
93*5113495bSYour Name  * enum sap_fsm_state - SAP FSM states for Access Point role
94*5113495bSYour Name  * @SAP_INIT: init state
95*5113495bSYour Name  * @SAP_STARTING: starting phase
96*5113495bSYour Name  * @SAP_STARTED: up and running
97*5113495bSYour Name  * @SAP_STOPPING: about to stop and transitions to init
98*5113495bSYour Name  */
99*5113495bSYour Name enum sap_fsm_state {
100*5113495bSYour Name 	SAP_INIT,
101*5113495bSYour Name 	SAP_STARTING,
102*5113495bSYour Name 	SAP_STARTED,
103*5113495bSYour Name 	SAP_STOPPING
104*5113495bSYour Name };
105*5113495bSYour Name 
106*5113495bSYour Name #ifdef FEATURE_AP_MCC_CH_AVOIDANCE
107*5113495bSYour Name /*
108*5113495bSYour Name  * In a setup having two MDM both operating in AP+AP MCC scenario
109*5113495bSYour Name  * if both the AP decides to use same or close channel set, CTS to
110*5113495bSYour Name  * self, mechanism is causing issues with connectivity. For this, its
111*5113495bSYour Name  * proposed that 2nd MDM devices which comes up later should detect
112*5113495bSYour Name  * presence of first MDM device via special Q2Q IE present in becon
113*5113495bSYour Name  * and avoid those channels mentioned in IE.
114*5113495bSYour Name  *
115*5113495bSYour Name  * Following struct will keep this info in sapCtx struct, and will be used
116*5113495bSYour Name  * to avoid such channels in Random Channel Select in case of radar ind.
117*5113495bSYour Name  */
118*5113495bSYour Name struct sap_avoid_channels_info {
119*5113495bSYour Name 	bool       present;
120*5113495bSYour Name 	uint8_t    channels[CFG_VALID_CHANNEL_LIST_LEN];
121*5113495bSYour Name };
122*5113495bSYour Name #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
123*5113495bSYour Name 
124*5113495bSYour Name #define MAX_VLAN 4
125*5113495bSYour Name struct sap_context {
126*5113495bSYour Name 
127*5113495bSYour Name 	/* Include the current channel frequency of AP */
128*5113495bSYour Name 	uint32_t chan_freq;
129*5113495bSYour Name 	uint32_t sec_ch_freq;
130*5113495bSYour Name 
131*5113495bSYour Name #ifdef DCS_INTERFERENCE_DETECTION
132*5113495bSYour Name 	qdf_freq_t dcs_ch_freq;
133*5113495bSYour Name #endif
134*5113495bSYour Name 	union {
135*5113495bSYour Name 		uint8_t sessionId;
136*5113495bSYour Name 		uint8_t vdev_id;
137*5113495bSYour Name 	};
138*5113495bSYour Name 	uint8_t sap_radar_found_status;
139*5113495bSYour Name 
140*5113495bSYour Name 	/* vdev object corresponding to sessionId */
141*5113495bSYour Name 	struct wlan_objmgr_vdev *vdev;
142*5113495bSYour Name 
143*5113495bSYour Name 	/* Include the associations MAC addresses */
144*5113495bSYour Name 	uint8_t self_mac_addr[CDS_MAC_ADDRESS_LEN];
145*5113495bSYour Name 	struct start_bss_config sap_bss_cfg;
146*5113495bSYour Name 
147*5113495bSYour Name 	/* SAP event Callback to hdd */
148*5113495bSYour Name 	sap_event_cb sap_event_cb;
149*5113495bSYour Name 
150*5113495bSYour Name 	/*
151*5113495bSYour Name 	 * Include the state machine structure here, state var that keeps
152*5113495bSYour Name 	 * track of state machine
153*5113495bSYour Name 	 */
154*5113495bSYour Name 	enum sap_fsm_state fsm_state;
155*5113495bSYour Name 	enum sap_csa_reason_code csa_reason;
156*5113495bSYour Name 
157*5113495bSYour Name 	/* Actual storage for AP and self (STA) SSID */
158*5113495bSYour Name 	tCsrSSIDInfo SSIDList[2];
159*5113495bSYour Name 
160*5113495bSYour Name 	/* Actual storage for AP bssid */
161*5113495bSYour Name 	struct qdf_mac_addr bssid;
162*5113495bSYour Name 
163*5113495bSYour Name 	/* Mac filtering settings */
164*5113495bSYour Name 	eSapMacAddrACL eSapMacAddrAclMode;
165*5113495bSYour Name 	struct qdf_mac_addr acceptMacList[MAX_ACL_MAC_ADDRESS];
166*5113495bSYour Name 	uint16_t nAcceptMac;
167*5113495bSYour Name 	struct qdf_mac_addr denyMacList[MAX_ACL_MAC_ADDRESS];
168*5113495bSYour Name 	uint16_t nDenyMac;
169*5113495bSYour Name 
170*5113495bSYour Name 	void *user_context;
171*5113495bSYour Name 
172*5113495bSYour Name 	uint32_t nStaWPARSnReqIeLength;
173*5113495bSYour Name 	uint8_t pStaWpaRsnReqIE[MAX_ASSOC_IND_IE_LEN];
174*5113495bSYour Name 
175*5113495bSYour Name 	eCsrPhyMode phyMode;
176*5113495bSYour Name 	uint32_t *freq_list;
177*5113495bSYour Name 	uint8_t num_of_channel;
178*5113495bSYour Name 	uint16_t ch_width_orig;
179*5113495bSYour Name 	struct ch_params ch_params;
180*5113495bSYour Name 	uint32_t chan_freq_before_switch_band;
181*5113495bSYour Name 	enum phy_ch_width chan_width_before_switch_band;
182*5113495bSYour Name 	uint32_t auto_channel_select_weight;
183*5113495bSYour Name 	bool enableOverLapCh;
184*5113495bSYour Name 	struct sap_acs_cfg *acs_cfg;
185*5113495bSYour Name 
186*5113495bSYour Name 	qdf_time_t acs_req_timestamp;
187*5113495bSYour Name 
188*5113495bSYour Name #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
189*5113495bSYour Name 	uint8_t cc_switch_mode;
190*5113495bSYour Name #endif
191*5113495bSYour Name 
192*5113495bSYour Name #if defined(FEATURE_WLAN_STA_AP_MODE_DFS_DISABLE)
193*5113495bSYour Name 	bool dfs_ch_disable;
194*5113495bSYour Name #endif
195*5113495bSYour Name 	bool isCacEndNotified;
196*5113495bSYour Name 	bool isCacStartNotified;
197*5113495bSYour Name 	bool is_sap_ready_for_chnl_chng;
198*5113495bSYour Name #ifdef FEATURE_RADAR_HISTORY
199*5113495bSYour Name 	struct prev_cac_result cac_result;
200*5113495bSYour Name #endif
201*5113495bSYour Name #ifdef FEATURE_AP_MCC_CH_AVOIDANCE
202*5113495bSYour Name 	/*
203*5113495bSYour Name 	 * In a setup having two MDM both operating in AP+AP MCC scenario
204*5113495bSYour Name 	 * if both the AP decides to use same or close channel set, CTS to
205*5113495bSYour Name 	 * self, mechanism is causing issues with connectivity. For this, its
206*5113495bSYour Name 	 * proposed that 2nd MDM devices which comes up later should detect
207*5113495bSYour Name 	 * presence of first MDM device via special Q2Q IE present in becon
208*5113495bSYour Name 	 * and avoid those channels mentioned in IE.
209*5113495bSYour Name 	 *
210*5113495bSYour Name 	 * this struct contains the list of channels on which another MDM AP
211*5113495bSYour Name 	 * in MCC mode were detected.
212*5113495bSYour Name 	 */
213*5113495bSYour Name 	struct sap_avoid_channels_info sap_detected_avoid_ch_ie;
214*5113495bSYour Name #endif /* FEATURE_AP_MCC_CH_AVOIDANCE */
215*5113495bSYour Name 	/*
216*5113495bSYour Name 	 * sap_state, sap_status are created
217*5113495bSYour Name 	 * to inform upper layers about ACS scan status.
218*5113495bSYour Name 	 * Don't use these members for any other purposes.
219*5113495bSYour Name 	 */
220*5113495bSYour Name 	eSapHddEvent sap_state;
221*5113495bSYour Name 	eSapStatus sap_status;
222*5113495bSYour Name 	uint32_t roc_ind_scan_id;
223*5113495bSYour Name 	bool vendor_acs_dfs_lte_enabled;
224*5113495bSYour Name 	uint8_t dfs_vendor_channel;
225*5113495bSYour Name 	uint8_t dfs_vendor_chan_bw;
226*5113495bSYour Name 	uint16_t beacon_tx_rate;
227*5113495bSYour Name 	enum sap_acs_dfs_mode dfs_mode;
228*5113495bSYour Name 	wlan_scan_requester req_id;
229*5113495bSYour Name 	uint8_t sap_sta_id;
230*5113495bSYour Name 	bool dfs_cac_offload;
231*5113495bSYour Name 	bool is_chan_change_inprogress;
232*5113495bSYour Name 	/* Disabled mcs13 by sap or not */
233*5113495bSYour Name 	bool disabled_mcs13;
234*5113495bSYour Name 	qdf_list_t owe_pending_assoc_ind_list;
235*5113495bSYour Name 	qdf_list_t ft_pending_assoc_ind_list;
236*5113495bSYour Name 	qdf_event_t ft_pending_event;
237*5113495bSYour Name 	uint32_t freq_before_ch_switch;
238*5113495bSYour Name 	struct ch_params ch_params_before_ch_switch;
239*5113495bSYour Name #ifdef WLAN_FEATURE_P2P_P2P_STA
240*5113495bSYour Name /*
241*5113495bSYour Name  *This param is used for GO+GO force scc logic where after
242*5113495bSYour Name  *setkey first GO will move to latest GO's channel
243*5113495bSYour Name  */
244*5113495bSYour Name 	bool is_forcescc_restart_required;
245*5113495bSYour Name #endif
246*5113495bSYour Name 	qdf_freq_t candidate_freq;
247*5113495bSYour Name #ifdef FEATURE_WLAN_CH_AVOID_EXT
248*5113495bSYour Name 	uint32_t restriction_mask;
249*5113495bSYour Name #endif
250*5113495bSYour Name 	bool require_h2e;
251*5113495bSYour Name 	bool partial_acs_scan;
252*5113495bSYour Name 	bool optimize_acs_chan_selected;
253*5113495bSYour Name #ifdef WLAN_FEATURE_SAP_ACS_OPTIMIZE
254*5113495bSYour Name /*
255*5113495bSYour Name  * This param is used to track clean channels where there
256*5113495bSYour Name  * is no AP found on these channels
257*5113495bSYour Name  */
258*5113495bSYour Name 	bool clean_channel_array[NUM_CHANNELS];
259*5113495bSYour Name #endif
260*5113495bSYour Name #ifdef QCA_MULTIPASS_SUPPORT
261*5113495bSYour Name 	uint16_t vlan_map[2 * MAX_VLAN];
262*5113495bSYour Name #endif
263*5113495bSYour Name };
264*5113495bSYour Name 
265*5113495bSYour Name /*----------------------------------------------------------------------------
266*5113495bSYour Name  *  External declarations for global context
267*5113495bSYour Name  * -------------------------------------------------------------------------*/
268*5113495bSYour Name 
269*5113495bSYour Name /**
270*5113495bSYour Name  * struct sap_sm_event - SAP state machine event definition
271*5113495bSYour Name  * @params: A VOID pointer type for all possible inputs
272*5113495bSYour Name  * @event: State machine input event message
273*5113495bSYour Name  * @u1: Introduced to handle csr_roam_complete_cb roamStatus
274*5113495bSYour Name  * @u2: Introduced to handle csr_roam_complete_cb roamResult
275*5113495bSYour Name  */
276*5113495bSYour Name struct sap_sm_event {
277*5113495bSYour Name 	void *params;
278*5113495bSYour Name 	uint32_t event;
279*5113495bSYour Name 	uint32_t u1;
280*5113495bSYour Name 	uint32_t u2;
281*5113495bSYour Name };
282*5113495bSYour Name 
283*5113495bSYour Name /*----------------------------------------------------------------------------
284*5113495bSYour Name  * Function Declarations and Documentation
285*5113495bSYour Name  * -------------------------------------------------------------------------*/
286*5113495bSYour Name 
287*5113495bSYour Name /**
288*5113495bSYour Name  * sap_get_mac_context() - Get a pointer to the global MAC context
289*5113495bSYour Name  *
290*5113495bSYour Name  * Return: pointer to the global MAC context, or NULL if the MAC
291*5113495bSYour Name  *         context is no longer registered
292*5113495bSYour Name  */
sap_get_mac_context(void)293*5113495bSYour Name static inline struct mac_context *sap_get_mac_context(void)
294*5113495bSYour Name {
295*5113495bSYour Name 	return cds_get_context(QDF_MODULE_ID_PE);
296*5113495bSYour Name }
297*5113495bSYour Name 
298*5113495bSYour Name QDF_STATUS wlansap_context_get(struct sap_context *ctx);
299*5113495bSYour Name void wlansap_context_put(struct sap_context *ctx);
300*5113495bSYour Name 
301*5113495bSYour Name /**
302*5113495bSYour Name  * wlansap_pre_start_bss_acs_scan_callback() - callback for scan results
303*5113495bSYour Name  * @mac_handle:    the mac_handle passed in with the scan request
304*5113495bSYour Name  * @sap_ctx:       the SAP context pointer.
305*5113495bSYour Name  * @scanid:        scan id passed
306*5113495bSYour Name  * @sessionid:     session identifier
307*5113495bSYour Name  * @scan_status:        status of scan -success, failure or abort
308*5113495bSYour Name  *
309*5113495bSYour Name  * Api for scan callback. This function is invoked as a result of scan
310*5113495bSYour Name  * completion and reports the scan results.
311*5113495bSYour Name  *
312*5113495bSYour Name  * Return: The QDF_STATUS code associated with performing the operation
313*5113495bSYour Name  */
314*5113495bSYour Name QDF_STATUS wlansap_pre_start_bss_acs_scan_callback(mac_handle_t mac_handle,
315*5113495bSYour Name 						   struct sap_context *sap_ctx,
316*5113495bSYour Name 						   uint8_t sessionid,
317*5113495bSYour Name 						   uint32_t scanid,
318*5113495bSYour Name 						   eCsrScanStatus scan_status);
319*5113495bSYour Name 
320*5113495bSYour Name /**
321*5113495bSYour Name  * sap_chan_sel_exit() - Exit function for free out the allocated memory,
322*5113495bSYour Name  * @ch_info_params: Pointer to sap_sel_ch_info structure
323*5113495bSYour Name  *
324*5113495bSYour Name  * Return: None
325*5113495bSYour Name  */
326*5113495bSYour Name void sap_chan_sel_exit(struct sap_sel_ch_info *ch_info_params);
327*5113495bSYour Name 
328*5113495bSYour Name /**
329*5113495bSYour Name  * sap_sort_channel_list() - Sort channel list based on channel weight
330*5113495bSYour Name  * @mac_ctx: Pointer to mac_context
331*5113495bSYour Name  * @vdev_id: Vdev ID
332*5113495bSYour Name  * @ch_list: Pointer to qdf_list_t
333*5113495bSYour Name  * @ch_info: Pointer to sap_sel_ch_info structure
334*5113495bSYour Name  * @domain: Regulatory Domain
335*5113495bSYour Name  * @operating_band: Operating band
336*5113495bSYour Name  *
337*5113495bSYour Name  * Return: None
338*5113495bSYour Name  *
339*5113495bSYour Name  */
340*5113495bSYour Name void
341*5113495bSYour Name sap_sort_channel_list(struct mac_context *mac_ctx, uint8_t vdev_id,
342*5113495bSYour Name 		      qdf_list_t *ch_list, struct sap_sel_ch_info *ch_info,
343*5113495bSYour Name 		      v_REGDOMAIN_t *domain, uint32_t *operating_band);
344*5113495bSYour Name 
345*5113495bSYour Name /**
346*5113495bSYour Name  * sap_select_channel() - select SAP channel
347*5113495bSYour Name  * @mac_handle: Opaque handle to the global MAC context
348*5113495bSYour Name  * @sap_ctx: Sap context
349*5113495bSYour Name  * @scan_list: scan entry list
350*5113495bSYour Name  *
351*5113495bSYour Name  * Runs a algorithm to select the best channel to operate in based on BSS
352*5113495bSYour Name  * rssi and bss count on each channel
353*5113495bSYour Name  *
354*5113495bSYour Name  * Returns: channel frequency if success, 0 otherwise
355*5113495bSYour Name  */
356*5113495bSYour Name uint32_t sap_select_channel(mac_handle_t mac_handle, struct sap_context *sap_ctx,
357*5113495bSYour Name 			   qdf_list_t *scan_list);
358*5113495bSYour Name 
359*5113495bSYour Name QDF_STATUS
360*5113495bSYour Name sap_signal_hdd_event(struct sap_context *sap_ctx,
361*5113495bSYour Name 		  struct csr_roam_info *pCsrRoamInfo,
362*5113495bSYour Name 		  eSapHddEvent sapHddevent, void *);
363*5113495bSYour Name 
364*5113495bSYour Name QDF_STATUS sap_fsm(struct sap_context *sap_ctx, struct sap_sm_event *sap_event);
365*5113495bSYour Name 
366*5113495bSYour Name QDF_STATUS
367*5113495bSYour Name sap_is_peer_mac_allowed(struct sap_context *sap_ctx, uint8_t *peerMac);
368*5113495bSYour Name 
369*5113495bSYour Name void
370*5113495bSYour Name sap_sort_mac_list(struct qdf_mac_addr *macList, uint16_t size);
371*5113495bSYour Name 
372*5113495bSYour Name void
373*5113495bSYour Name sap_add_mac_to_acl(struct qdf_mac_addr *macList, uint16_t *size,
374*5113495bSYour Name 		   uint8_t *peerMac);
375*5113495bSYour Name 
376*5113495bSYour Name void
377*5113495bSYour Name sap_remove_mac_from_acl(struct qdf_mac_addr *macList, uint16_t *size,
378*5113495bSYour Name 			uint16_t index);
379*5113495bSYour Name 
380*5113495bSYour Name void
381*5113495bSYour Name sap_print_acl(struct qdf_mac_addr *macList, uint16_t size);
382*5113495bSYour Name 
383*5113495bSYour Name bool
384*5113495bSYour Name sap_search_mac_list(struct qdf_mac_addr *macList, uint16_t num_mac,
385*5113495bSYour Name 		    uint8_t *peerMac, uint16_t *index);
386*5113495bSYour Name 
387*5113495bSYour Name QDF_STATUS sap_init_dfs_channel_nol_list(struct sap_context *sap_ctx);
388*5113495bSYour Name 
389*5113495bSYour Name bool sap_dfs_is_channel_in_nol_list(struct sap_context *sap_ctx,
390*5113495bSYour Name 				    qdf_freq_t chan_freq,
391*5113495bSYour Name 				    ePhyChanBondState chanBondState);
392*5113495bSYour Name void sap_dfs_cac_timer_callback(void *data);
393*5113495bSYour Name 
394*5113495bSYour Name /**
395*5113495bSYour Name  * sap_cac_reset_notify() - BSS cleanup notification handler
396*5113495bSYour Name  * @mac_handle: Opaque handle to the global MAC context
397*5113495bSYour Name  *
398*5113495bSYour Name  * This function should be called upon stop bss indication to clean up
399*5113495bSYour Name  * DFS global structure.
400*5113495bSYour Name  */
401*5113495bSYour Name void sap_cac_reset_notify(mac_handle_t mac_handle);
402*5113495bSYour Name 
403*5113495bSYour Name bool is_concurrent_sap_ready_for_channel_change(mac_handle_t mac_handle,
404*5113495bSYour Name 						struct sap_context *sap_ctx);
405*5113495bSYour Name 
406*5113495bSYour Name bool sap_is_conc_sap_doing_scc_dfs(mac_handle_t mac_handle,
407*5113495bSYour Name 				   struct sap_context *given_sapctx);
408*5113495bSYour Name 
409*5113495bSYour Name uint8_t sap_get_total_number_sap_intf(mac_handle_t mac_handle);
410*5113495bSYour Name 
411*5113495bSYour Name /**
412*5113495bSYour Name  * sap_channel_sel - Function for initiating scan request for ACS
413*5113495bSYour Name  * @sap_context: Sap Context value.
414*5113495bSYour Name  *
415*5113495bSYour Name  * Initiates Scan for ACS to pick a channel.
416*5113495bSYour Name  *
417*5113495bSYour Name  * Return: The QDF_STATUS code associated with performing the operation.
418*5113495bSYour Name  */
419*5113495bSYour Name QDF_STATUS sap_channel_sel(struct sap_context *sap_context);
420*5113495bSYour Name 
421*5113495bSYour Name /**
422*5113495bSYour Name  * sap_validate_chan - Function validate the channel and forces SCC
423*5113495bSYour Name  * @sap_context: Sap Context value.
424*5113495bSYour Name  * @pre_start_bss: if its called pre start BSS with valid channel.
425*5113495bSYour Name  * @check_for_connection_update: true, check and wait for connection update
426*5113495bSYour Name  *				 false, do not perform connection update
427*5113495bSYour Name  *
428*5113495bSYour Name  * validate and update the channel in case of force SCC.
429*5113495bSYour Name  *
430*5113495bSYour Name  * Return: The QDF_STATUS code associated with performing the operation.
431*5113495bSYour Name  */
432*5113495bSYour Name QDF_STATUS
433*5113495bSYour Name sap_validate_chan(struct sap_context *sap_context,
434*5113495bSYour Name 		  bool pre_start_bss,
435*5113495bSYour Name 		  bool check_for_connection_update);
436*5113495bSYour Name 
437*5113495bSYour Name /**
438*5113495bSYour Name  * sap_check_in_avoid_ch_list() - checks if given channel present is channel
439*5113495bSYour Name  * avoidance list
440*5113495bSYour Name  * avoid_channels_info struct
441*5113495bSYour Name  * @sap_ctx:        sap context.
442*5113495bSYour Name  * @channel:        channel to be checked in sap_ctx's avoid ch list
443*5113495bSYour Name  *
444*5113495bSYour Name  * sap_ctx contains sap_avoid_ch_info strcut containing the list of channels on
445*5113495bSYour Name  * which MDM device's AP with MCC was detected. This function checks if given
446*5113495bSYour Name  * channel is present in that list.
447*5113495bSYour Name  *
448*5113495bSYour Name  * Return: true, if channel was present, false othersie.
449*5113495bSYour Name  */
450*5113495bSYour Name bool
451*5113495bSYour Name sap_check_in_avoid_ch_list(struct sap_context *sap_ctx, uint8_t channel);
452*5113495bSYour Name 
453*5113495bSYour Name /**
454*5113495bSYour Name  * sap_set_session_param() - set sap related param to sap context and global var
455*5113495bSYour Name  * @mac_handle: Opaque handle to the global MAC context
456*5113495bSYour Name  * @sapctx: pointer to sapctx
457*5113495bSYour Name  * @session_id: session id for sap
458*5113495bSYour Name  *
459*5113495bSYour Name  * This API will set appropriate softap parameters to sap context
460*5113495bSYour Name  *
461*5113495bSYour Name  * Return: QDF_STATUS
462*5113495bSYour Name  */
463*5113495bSYour Name QDF_STATUS sap_set_session_param(mac_handle_t mac_handle,
464*5113495bSYour Name 				 struct sap_context *sapctx,
465*5113495bSYour Name 				 uint32_t session_id);
466*5113495bSYour Name 
467*5113495bSYour Name /**
468*5113495bSYour Name  * sap_clear_session_param() - clear sap related param from sap context
469*5113495bSYour Name  * @mac_handle: Opaque handle to the global MAC context
470*5113495bSYour Name  * @sapctx: pointer to sapctx
471*5113495bSYour Name  * @session_id: session id for sap
472*5113495bSYour Name  *
473*5113495bSYour Name  * This API will clear appropriate softap parameters from sap context
474*5113495bSYour Name  *
475*5113495bSYour Name  * Return: QDF_STATUS
476*5113495bSYour Name  */
477*5113495bSYour Name QDF_STATUS sap_clear_session_param(mac_handle_t mac_handle,
478*5113495bSYour Name 				   struct sap_context *sapctx,
479*5113495bSYour Name 				   uint32_t session_id);
480*5113495bSYour Name 
481*5113495bSYour Name void sap_scan_event_callback(struct wlan_objmgr_vdev *vdev,
482*5113495bSYour Name 			struct scan_event *event, void *arg);
483*5113495bSYour Name 
484*5113495bSYour Name #ifdef DFS_COMPONENT_ENABLE
485*5113495bSYour Name /**
486*5113495bSYour Name  * sap_indicate_radar() - Process radar indication
487*5113495bSYour Name  * @sap_ctx: pointer to sap context
488*5113495bSYour Name  *
489*5113495bSYour Name  * process radar indication.
490*5113495bSYour Name  *
491*5113495bSYour Name  * Return: frequency to which sap wishes to switch.
492*5113495bSYour Name  */
493*5113495bSYour Name qdf_freq_t sap_indicate_radar(struct sap_context *sap_ctx);
494*5113495bSYour Name #else
sap_indicate_radar(struct sap_context * sap_ctx)495*5113495bSYour Name static inline qdf_freq_t sap_indicate_radar(struct sap_context *sap_ctx)
496*5113495bSYour Name {
497*5113495bSYour Name 	return 0;
498*5113495bSYour Name }
499*5113495bSYour Name #endif
500*5113495bSYour Name 
501*5113495bSYour Name /**
502*5113495bSYour Name  * sap_select_default_oper_chan() - Select AP mode default operating channel
503*5113495bSYour Name  * @mac_ctx: mac context
504*5113495bSYour Name  * @acs_cfg: pointer to ACS config info
505*5113495bSYour Name  *
506*5113495bSYour Name  * Select AP mode default operating channel based on ACS hw mode and channel
507*5113495bSYour Name  * range configuration when ACS scan fails due to some reasons, such as scan
508*5113495bSYour Name  * timeout, etc.
509*5113495bSYour Name  *
510*5113495bSYour Name  * Return: Selected operating channel frequency
511*5113495bSYour Name  */
512*5113495bSYour Name uint32_t sap_select_default_oper_chan(struct mac_context *mac_ctx,
513*5113495bSYour Name 				      struct sap_acs_cfg *acs_cfg);
514*5113495bSYour Name 
515*5113495bSYour Name /*
516*5113495bSYour Name  * sap_is_dfs_cac_wait_state() - check if sap is in cac wait state
517*5113495bSYour Name  * @sap_ctx: sap context to check
518*5113495bSYour Name  *
519*5113495bSYour Name  * Return: true if sap is in cac wait state
520*5113495bSYour Name  */
521*5113495bSYour Name bool sap_is_dfs_cac_wait_state(struct sap_context *sap_ctx);
522*5113495bSYour Name 
523*5113495bSYour Name /**
524*5113495bSYour Name  * sap_chan_bond_dfs_sub_chan - check bonded channel includes dfs sub chan
525*5113495bSYour Name  * @sap_context: Handle to SAP context.
526*5113495bSYour Name  * @channel_freq: chan whose bonded chan will be checked
527*5113495bSYour Name  * @bond_state: The channel bonding mode of the passed channel.
528*5113495bSYour Name  *
529*5113495bSYour Name  * This function checks if a given bonded channel includes dfs sub chan.
530*5113495bSYour Name  *
531*5113495bSYour Name  * Return: true if at least one dfs sub chan is bonded, otherwise false
532*5113495bSYour Name  */
533*5113495bSYour Name bool
534*5113495bSYour Name sap_chan_bond_dfs_sub_chan(struct sap_context *sap_context,
535*5113495bSYour Name 			   qdf_freq_t channel_freq,
536*5113495bSYour Name 			   ePhyChanBondState bond_state);
537*5113495bSYour Name 
538*5113495bSYour Name /**
539*5113495bSYour Name  * sap_plus_sap_cac_skip() - Check current sap can skip CAC or not
540*5113495bSYour Name  *  in SAP+SAP concurrency
541*5113495bSYour Name  * @mac: mac ctx
542*5113495bSYour Name  * @sap_ctx: SAP context
543*5113495bSYour Name  * @chan_freq: SAP channel frequency
544*5113495bSYour Name  *
545*5113495bSYour Name  * All APs are done with CAC timer, all APs should start beaconing.
546*5113495bSYour Name  * Lets assume AP1 and AP2 started beaconing on DFS channel, Now lets
547*5113495bSYour Name  * say AP1 goes down and comes back on same DFS channel. In this case
548*5113495bSYour Name  * AP1 shouldn't start CAC timer and start beacon immediately because
549*5113495bSYour Name  * AP2 is already beaconing on this channel. This case will be handled
550*5113495bSYour Name  * by checking CAC completion on AP2.
551*5113495bSYour Name  *
552*5113495bSYour Name  * Return: true if current SAP can skip CAC
553*5113495bSYour Name  */
554*5113495bSYour Name bool sap_plus_sap_cac_skip(struct mac_context *mac,
555*5113495bSYour Name 			   struct sap_context *sap_ctx,
556*5113495bSYour Name 			   qdf_freq_t chan_freq);
557*5113495bSYour Name 
558*5113495bSYour Name void
559*5113495bSYour Name sap_build_start_bss_config(struct start_bss_config *sap_bss_cfg,
560*5113495bSYour Name 			   struct sap_config *config);
561*5113495bSYour Name #endif
562