xref: /wlan-driver/qcacld-3.0/core/hdd/src/wlan_hdd_hostapd.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2013-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 #if !defined(WLAN_HDD_HOSTAPD_H)
21*5113495bSYour Name #define WLAN_HDD_HOSTAPD_H
22*5113495bSYour Name 
23*5113495bSYour Name /**
24*5113495bSYour Name  * DOC: wlan_hdd_hostapd.h
25*5113495bSYour Name  *
26*5113495bSYour Name  * WLAN Host Device driver hostapd header file
27*5113495bSYour Name  */
28*5113495bSYour Name 
29*5113495bSYour Name /* Include files */
30*5113495bSYour Name 
31*5113495bSYour Name #include <linux/netdevice.h>
32*5113495bSYour Name #include <linux/skbuff.h>
33*5113495bSYour Name #include <qdf_list.h>
34*5113495bSYour Name #include <qdf_types.h>
35*5113495bSYour Name #include <wlan_hdd_main.h>
36*5113495bSYour Name 
37*5113495bSYour Name /* Preprocessor definitions and constants */
38*5113495bSYour Name 
39*5113495bSYour Name struct hdd_adapter *hdd_wlan_create_ap_dev(struct hdd_context *hdd_ctx,
40*5113495bSYour Name 				      tSirMacAddr macAddr,
41*5113495bSYour Name 				      unsigned char name_assign_type,
42*5113495bSYour Name 				      uint8_t *name);
43*5113495bSYour Name 
44*5113495bSYour Name enum csr_akm_type
45*5113495bSYour Name hdd_translate_rsn_to_csr_auth_type(uint8_t auth_suite[4]);
46*5113495bSYour Name 
47*5113495bSYour Name /**
48*5113495bSYour Name  * hdd_filter_ft_info() -
49*5113495bSYour Name  * This function to filter fast BSS transition related IE
50*5113495bSYour Name  * @frame: pointer to the input frame.
51*5113495bSYour Name  * @len: input frame length.
52*5113495bSYour Name  * @ft_info_len: store the total length of FT related IE.
53*5113495bSYour Name  *
54*5113495bSYour Name  * Return: pointer to a buffer which stored the FT related IE
55*5113495bSYour Name  * This is a malloced memory that must be freed by the caller
56*5113495bSYour Name  */
57*5113495bSYour Name 
58*5113495bSYour Name void *hdd_filter_ft_info(const uint8_t *frame,
59*5113495bSYour Name 			 size_t len, uint32_t *ft_info_len);
60*5113495bSYour Name 
61*5113495bSYour Name /**
62*5113495bSYour Name  * hdd_softap_set_channel_change() -
63*5113495bSYour Name  * This function to support SAP channel change with CSA IE
64*5113495bSYour Name  * set in the beacons.
65*5113495bSYour Name  *
66*5113495bSYour Name  * @dev: pointer to the net device.
67*5113495bSYour Name  * @target_chan_freq: target channel frequency.
68*5113495bSYour Name  * @target_bw: Target bandwidth to move.
69*5113495bSYour Name  * If no bandwidth is specified, the value is CH_WIDTH_MAX
70*5113495bSYour Name  * @forced: Force to switch channel, ignore SCC/MCC check
71*5113495bSYour Name  *
72*5113495bSYour Name  * Return: 0 for success, non zero for failure
73*5113495bSYour Name  */
74*5113495bSYour Name int hdd_softap_set_channel_change(struct net_device *dev,
75*5113495bSYour Name 					int target_chan_freq,
76*5113495bSYour Name 					enum phy_ch_width target_bw,
77*5113495bSYour Name 					bool forced);
78*5113495bSYour Name /**
79*5113495bSYour Name  * hdd_stop_sap_set_tx_power() - Function to set tx power
80*5113495bSYour Name  * for unsafe channel if restriction bit mask is set else stop the SAP.
81*5113495bSYour Name  * @psoc: PSOC object information
82*5113495bSYour Name  * @adapter: AP/SAP adapter
83*5113495bSYour Name  *
84*5113495bSYour Name  * This function set tx power/stop the SAP interface
85*5113495bSYour Name  *
86*5113495bSYour Name  * Return:
87*5113495bSYour Name  *
88*5113495bSYour Name  */
89*5113495bSYour Name void hdd_stop_sap_set_tx_power(struct wlan_objmgr_psoc *psoc,
90*5113495bSYour Name 			       struct hdd_adapter *adapter);
91*5113495bSYour Name 
92*5113495bSYour Name #ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
93*5113495bSYour Name /**
94*5113495bSYour Name  * hdd_sap_restart_with_channel_switch() - SAP channel change with E/CSA
95*5113495bSYour Name  * @psoc: psoc common object
96*5113495bSYour Name  * @ap_adapter: HDD adapter
97*5113495bSYour Name  * @target_chan_freq: Channel frequency to which switch must happen
98*5113495bSYour Name  * @target_bw: Bandwidth of the target channel
99*5113495bSYour Name  * @forced: Force to switch channel, ignore SCC/MCC check
100*5113495bSYour Name  *
101*5113495bSYour Name  * Invokes the necessary API to perform channel switch for the SAP or GO
102*5113495bSYour Name  *
103*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS if successfully
104*5113495bSYour Name  */
105*5113495bSYour Name QDF_STATUS hdd_sap_restart_with_channel_switch(struct wlan_objmgr_psoc *psoc,
106*5113495bSYour Name 					       struct hdd_adapter *ap_adapter,
107*5113495bSYour Name 					       uint32_t target_chan_freq,
108*5113495bSYour Name 					       uint32_t target_bw,
109*5113495bSYour Name 					       bool forced);
110*5113495bSYour Name 
111*5113495bSYour Name /**
112*5113495bSYour Name  * hdd_sap_restart_chan_switch_cb() - Function to restart SAP with
113*5113495bSYour Name  * a different channel
114*5113495bSYour Name  * @psoc: PSOC object information
115*5113495bSYour Name  * @vdev_id: vdev id
116*5113495bSYour Name  * @ch_freq: channel to switch
117*5113495bSYour Name  * @channel_bw: channel bandwidth
118*5113495bSYour Name  * @forced: Force to switch channel, ignore SCC/MCC check
119*5113495bSYour Name  *
120*5113495bSYour Name  * This function restarts SAP with a different channel
121*5113495bSYour Name  *
122*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS if successfully
123*5113495bSYour Name  *
124*5113495bSYour Name  */
125*5113495bSYour Name QDF_STATUS hdd_sap_restart_chan_switch_cb(struct wlan_objmgr_psoc *psoc,
126*5113495bSYour Name 					  uint8_t vdev_id, uint32_t ch_freq,
127*5113495bSYour Name 					  uint32_t channel_bw, bool forced);
128*5113495bSYour Name 
129*5113495bSYour Name /**
130*5113495bSYour Name  * wlan_hdd_check_cc_intf_cb() - Check force SCC for vdev interface.
131*5113495bSYour Name  * @psoc: PSOC object information
132*5113495bSYour Name  * @vdev_id: vdev id
133*5113495bSYour Name  * @ch_freq: channel frequency to switch to
134*5113495bSYour Name  *
135*5113495bSYour Name  * This function will return a channel frequency to avoid MCC for SAP/GO.
136*5113495bSYour Name  *
137*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS if successfully
138*5113495bSYour Name  *
139*5113495bSYour Name  */
140*5113495bSYour Name QDF_STATUS wlan_hdd_check_cc_intf_cb(struct wlan_objmgr_psoc *psoc,
141*5113495bSYour Name 				     uint8_t vdev_id, uint32_t *ch_freq);
142*5113495bSYour Name 
143*5113495bSYour Name /**
144*5113495bSYour Name  * wlan_hdd_get_channel_for_sap_restart() - Function to get
145*5113495bSYour Name  * suitable channel and restart SAP
146*5113495bSYour Name  * @psoc: PSOC object information
147*5113495bSYour Name  * @vdev_id: vdev id
148*5113495bSYour Name  * @ch_freq: channel to be returned
149*5113495bSYour Name  *
150*5113495bSYour Name  * This function gets the channel parameters to restart SAP
151*5113495bSYour Name  *
152*5113495bSYour Name  * Return: None
153*5113495bSYour Name  *
154*5113495bSYour Name  */
155*5113495bSYour Name QDF_STATUS wlan_hdd_get_channel_for_sap_restart(
156*5113495bSYour Name 				struct wlan_objmgr_psoc *psoc,
157*5113495bSYour Name 				uint8_t vdev_id, uint32_t *ch_freq);
158*5113495bSYour Name 
159*5113495bSYour Name /**
160*5113495bSYour Name  * wlan_get_sap_acs_band() - Get  sap acs band
161*5113495bSYour Name  *
162*5113495bSYour Name  * @psoc: pointer to psoc
163*5113495bSYour Name  * @vdev_id: vdev id
164*5113495bSYour Name  * @acs_band: Pointer to acs_band
165*5113495bSYour Name  *
166*5113495bSYour Name  * This function is used to get sap acs band from sap config
167*5113495bSYour Name  *
168*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS if successful
169*5113495bSYour Name  */
170*5113495bSYour Name uint32_t
171*5113495bSYour Name wlan_get_sap_acs_band(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
172*5113495bSYour Name 		      uint32_t *acs_band);
173*5113495bSYour Name 
174*5113495bSYour Name /**
175*5113495bSYour Name  * wlan_get_ap_prefer_conc_ch_params() - Get prefer sap target channel
176*5113495bSYour Name  *  bw parameters
177*5113495bSYour Name  * @psoc: pointer to psoc
178*5113495bSYour Name  * @vdev_id: vdev id
179*5113495bSYour Name  * @chan_freq: sap channel
180*5113495bSYour Name  * @ch_params: output channel parameters
181*5113495bSYour Name  *
182*5113495bSYour Name  * This function is used to get prefer sap target channel bw during sap force
183*5113495bSYour Name  * scc CSA. The new bw will not exceed the original bw during start ap
184*5113495bSYour Name  * request.
185*5113495bSYour Name  *
186*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS if successfully
187*5113495bSYour Name  */
188*5113495bSYour Name QDF_STATUS
189*5113495bSYour Name wlan_get_ap_prefer_conc_ch_params(
190*5113495bSYour Name 		struct wlan_objmgr_psoc *psoc,
191*5113495bSYour Name 		uint8_t vdev_id, uint32_t chan_freq,
192*5113495bSYour Name 		struct ch_params *ch_params);
193*5113495bSYour Name 
194*5113495bSYour Name /**
195*5113495bSYour Name  * hdd_get_ap_6ghz_capable() - Get ap vdev 6ghz capable flags
196*5113495bSYour Name  * @psoc: PSOC object information
197*5113495bSYour Name  * @vdev_id: vdev id
198*5113495bSYour Name  *
199*5113495bSYour Name  * This function gets 6ghz capable information based on hdd ap adapter
200*5113495bSYour Name  * context.
201*5113495bSYour Name  *
202*5113495bSYour Name  * Return: uint32_t, vdev 6g capable flags from enum conn_6ghz_flag
203*5113495bSYour Name  */
204*5113495bSYour Name uint32_t hdd_get_ap_6ghz_capable(struct wlan_objmgr_psoc *psoc,
205*5113495bSYour Name 				 uint8_t vdev_id);
206*5113495bSYour Name #endif
207*5113495bSYour Name 
208*5113495bSYour Name /**
209*5113495bSYour Name  * wlan_hdd_set_sap_csa_reason() - Function to set
210*5113495bSYour Name  * sap csa reason
211*5113495bSYour Name  * @psoc: PSOC object information
212*5113495bSYour Name  * @vdev_id: vdev id
213*5113495bSYour Name  * @reason: reason to be updated
214*5113495bSYour Name  *
215*5113495bSYour Name  * This function sets the reason for SAP channel switch
216*5113495bSYour Name  *
217*5113495bSYour Name  * Return: None
218*5113495bSYour Name  *
219*5113495bSYour Name  */
220*5113495bSYour Name void wlan_hdd_set_sap_csa_reason(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
221*5113495bSYour Name 				 uint8_t reason);
222*5113495bSYour Name eCsrEncryptionType
223*5113495bSYour Name hdd_translate_rsn_to_csr_encryption_type(uint8_t cipher_suite[4]);
224*5113495bSYour Name 
225*5113495bSYour Name eCsrEncryptionType
226*5113495bSYour Name hdd_translate_rsn_to_csr_encryption_type(uint8_t cipher_suite[4]);
227*5113495bSYour Name 
228*5113495bSYour Name enum csr_akm_type
229*5113495bSYour Name hdd_translate_wpa_to_csr_auth_type(uint8_t auth_suite[4]);
230*5113495bSYour Name 
231*5113495bSYour Name eCsrEncryptionType
232*5113495bSYour Name hdd_translate_wpa_to_csr_encryption_type(uint8_t cipher_suite[4]);
233*5113495bSYour Name 
234*5113495bSYour Name QDF_STATUS hdd_softap_sta_deauth(struct hdd_adapter *adapter,
235*5113495bSYour Name 				 struct csr_del_sta_params *param);
236*5113495bSYour Name void hdd_softap_sta_disassoc(struct hdd_adapter *adapter,
237*5113495bSYour Name 			     struct csr_del_sta_params *param);
238*5113495bSYour Name 
239*5113495bSYour Name QDF_STATUS hdd_hostapd_sap_event_cb(struct sap_event *sap_event,
240*5113495bSYour Name 				    void *context);
241*5113495bSYour Name /**
242*5113495bSYour Name  * hdd_init_ap_mode() - to init the AP adaptor
243*5113495bSYour Name  * @adapter: SAP/GO adapter
244*5113495bSYour Name  * @reinit: true if re-init, otherwise initial init
245*5113495bSYour Name  * @rtnl_held: true if rtnl lock is taken, otherwise false
246*5113495bSYour Name  *
247*5113495bSYour Name  * This API can be called to open the SAP session as well as
248*5113495bSYour Name  * to create and store the vdev object. It also initializes necessary
249*5113495bSYour Name  * SAP adapter related params.
250*5113495bSYour Name  */
251*5113495bSYour Name QDF_STATUS hdd_init_ap_mode(struct hdd_adapter *adapter,
252*5113495bSYour Name 			    bool reinit,
253*5113495bSYour Name 			    bool rtnl_held);
254*5113495bSYour Name 
255*5113495bSYour Name /**
256*5113495bSYour Name  * hdd_deinit_ap_mode() - to deinit the AP adaptor
257*5113495bSYour Name  * @link_info: Link info pointer in HDD adapter
258*5113495bSYour Name  *
259*5113495bSYour Name  * This API can be called to close the SAP session as well as
260*5113495bSYour Name  * release the vdev object completely. It also deinitializes necessary
261*5113495bSYour Name  * SAP adapter related params.
262*5113495bSYour Name  */
263*5113495bSYour Name void hdd_deinit_ap_mode(struct wlan_hdd_link_info *link_info);
264*5113495bSYour Name 
265*5113495bSYour Name void hdd_set_ap_ops(struct net_device *dev);
266*5113495bSYour Name /**
267*5113495bSYour Name  * hdd_sap_create_ctx() - Wrapper API to create SAP context
268*5113495bSYour Name  * @adapter: pointer to adapter
269*5113495bSYour Name  *
270*5113495bSYour Name  * This wrapper API can be called to create the sap context. It will
271*5113495bSYour Name  * eventually calls SAP API to create the sap context
272*5113495bSYour Name  *
273*5113495bSYour Name  * Return: true or false based on overall success or failure
274*5113495bSYour Name  */
275*5113495bSYour Name bool hdd_sap_create_ctx(struct hdd_adapter *adapter);
276*5113495bSYour Name /**
277*5113495bSYour Name  * hdd_sap_destroy_ctx() - Wrapper API to destroy SAP context
278*5113495bSYour Name  * @link_info: Pointer of link_info in adapter
279*5113495bSYour Name  *
280*5113495bSYour Name  * This wrapper API can be called to destroy the sap context. It will
281*5113495bSYour Name  * eventually calls SAP API to destroy the sap context
282*5113495bSYour Name  *
283*5113495bSYour Name  * Return: true or false based on overall success or failure
284*5113495bSYour Name  */
285*5113495bSYour Name bool hdd_sap_destroy_ctx(struct wlan_hdd_link_info *link_info);
286*5113495bSYour Name /**
287*5113495bSYour Name  * hdd_sap_destroy_ctx_all() - Wrapper API to destroy all SAP context
288*5113495bSYour Name  * @hdd_ctx: pointer to HDD context
289*5113495bSYour Name  * @is_ssr: true if SSR is in progress
290*5113495bSYour Name  *
291*5113495bSYour Name  * This wrapper API can be called to destroy all the sap context.
292*5113495bSYour Name  * if is_ssr is true, it will return as sap_ctx will be used when
293*5113495bSYour Name  * restart sap.
294*5113495bSYour Name  *
295*5113495bSYour Name  * Return: none
296*5113495bSYour Name  */
297*5113495bSYour Name void hdd_sap_destroy_ctx_all(struct hdd_context *hdd_ctx, bool is_ssr);
298*5113495bSYour Name 
299*5113495bSYour Name /**
300*5113495bSYour Name  * hdd_hostapd_stop_no_trans() - hdd stop function for hostapd interface
301*5113495bSYour Name  * @dev: pointer to net_device structure
302*5113495bSYour Name  *
303*5113495bSYour Name  * This is called in response to ifconfig down. Vdev sync transaction
304*5113495bSYour Name  * should be started before calling this API.
305*5113495bSYour Name  *
306*5113495bSYour Name  * Return - 0 for success non-zero for failure
307*5113495bSYour Name  */
308*5113495bSYour Name int hdd_hostapd_stop_no_trans(struct net_device *dev);
309*5113495bSYour Name 
310*5113495bSYour Name int hdd_hostapd_stop(struct net_device *dev);
311*5113495bSYour Name int hdd_sap_context_init(struct hdd_context *hdd_ctx);
312*5113495bSYour Name void hdd_sap_context_destroy(struct hdd_context *hdd_ctx);
313*5113495bSYour Name #ifdef QCA_HT_2040_COEX
314*5113495bSYour Name QDF_STATUS hdd_set_sap_ht2040_mode(struct hdd_adapter *adapter,
315*5113495bSYour Name 				   uint8_t channel_type);
316*5113495bSYour Name 
317*5113495bSYour Name /**
318*5113495bSYour Name  * hdd_get_sap_ht2040_mode() - get ht2040 mode
319*5113495bSYour Name  * @adapter: pointer to adapter
320*5113495bSYour Name  * @channel_type: given channel type
321*5113495bSYour Name  *
322*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS if successfully
323*5113495bSYour Name  */
324*5113495bSYour Name QDF_STATUS hdd_get_sap_ht2040_mode(struct hdd_adapter *adapter,
325*5113495bSYour Name 				   enum eSirMacHTChannelType *channel_type);
326*5113495bSYour Name #else
hdd_set_sap_ht2040_mode(struct hdd_adapter * adapter,uint8_t channel_type)327*5113495bSYour Name static inline QDF_STATUS hdd_set_sap_ht2040_mode(struct hdd_adapter *adapter,
328*5113495bSYour Name 						 uint8_t channel_type)
329*5113495bSYour Name {
330*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
331*5113495bSYour Name }
332*5113495bSYour Name 
hdd_get_sap_ht2040_mode(struct hdd_adapter * adapter,enum eSirMacHTChannelType * channel_type)333*5113495bSYour Name static inline QDF_STATUS hdd_get_sap_ht2040_mode(
334*5113495bSYour Name 				struct hdd_adapter *adapter,
335*5113495bSYour Name 				enum eSirMacHTChannelType *channel_type)
336*5113495bSYour Name {
337*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
338*5113495bSYour Name }
339*5113495bSYour Name #endif
340*5113495bSYour Name 
341*5113495bSYour Name #ifdef CFG80211_SINGLE_NETDEV_MULTI_LINK_SUPPORT
342*5113495bSYour Name /**
343*5113495bSYour Name  * wlan_hdd_cfg80211_stop_ap() - stop sap
344*5113495bSYour Name  * @wiphy: Pointer to wiphy
345*5113495bSYour Name  * @dev: Pointer to netdev
346*5113495bSYour Name  * @link_id: Link id for which this stop_ap is received.
347*5113495bSYour Name  *
348*5113495bSYour Name  * Return: zero for success non-zero for failure
349*5113495bSYour Name  */
350*5113495bSYour Name int wlan_hdd_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *dev,
351*5113495bSYour Name 			      unsigned int link_id);
352*5113495bSYour Name #else
353*5113495bSYour Name int wlan_hdd_cfg80211_stop_ap(struct wiphy *wiphy,
354*5113495bSYour Name 			      struct net_device *dev);
355*5113495bSYour Name #endif
356*5113495bSYour Name 
357*5113495bSYour Name int wlan_hdd_cfg80211_start_ap(struct wiphy *wiphy,
358*5113495bSYour Name 			       struct net_device *dev,
359*5113495bSYour Name 			       struct cfg80211_ap_settings *params);
360*5113495bSYour Name 
361*5113495bSYour Name int wlan_hdd_cfg80211_change_beacon(struct wiphy *wiphy,
362*5113495bSYour Name 				    struct net_device *dev,
363*5113495bSYour Name 				    struct cfg80211_beacon_data *params);
364*5113495bSYour Name 
365*5113495bSYour Name /**
366*5113495bSYour Name  * hdd_is_peer_associated - is peer connected to softap
367*5113495bSYour Name  * @adapter: pointer to softap adapter
368*5113495bSYour Name  * @mac_addr: address to check in peer list
369*5113495bSYour Name  *
370*5113495bSYour Name  * This function has to be invoked only when bss is started and is used
371*5113495bSYour Name  * to check whether station with specified addr is peer or not
372*5113495bSYour Name  *
373*5113495bSYour Name  * Return: true if peer mac, else false
374*5113495bSYour Name  */
375*5113495bSYour Name bool hdd_is_peer_associated(struct hdd_adapter *adapter,
376*5113495bSYour Name 			    struct qdf_mac_addr *mac_addr);
377*5113495bSYour Name 
378*5113495bSYour Name int hdd_destroy_acs_timer(struct hdd_adapter *adapter);
379*5113495bSYour Name 
380*5113495bSYour Name QDF_STATUS wlan_hdd_config_acs(struct hdd_context *hdd_ctx,
381*5113495bSYour Name 			       struct hdd_adapter *adapter);
382*5113495bSYour Name 
383*5113495bSYour Name void hdd_sap_indicate_disconnect_for_sta(struct hdd_adapter *adapter);
384*5113495bSYour Name 
385*5113495bSYour Name /**
386*5113495bSYour Name  * hdd_handle_acs_2g_preferred_sap_conc() - Handle 2G pereferred SAP
387*5113495bSYour Name  * concurrency with GO
388*5113495bSYour Name  * @psoc: soc object
389*5113495bSYour Name  * @adapter: HDD adapter context
390*5113495bSYour Name  * @sap_config: sap config
391*5113495bSYour Name  *
392*5113495bSYour Name  * In SAP+GO concurrency, if GO is started on 2G and SAP is
393*5113495bSYour Name  * doing ACS with 2G preferred channel list, then we will
394*5113495bSYour Name  * move GO to 5G band. The purpose is to have more choice
395*5113495bSYour Name  * in SAP ACS instead of starting on GO home channel for SCC.
396*5113495bSYour Name  * This API is to check such condition and move GO to 5G.
397*5113495bSYour Name  *
398*5113495bSYour Name  * Return: void
399*5113495bSYour Name  */
400*5113495bSYour Name void
401*5113495bSYour Name hdd_handle_acs_2g_preferred_sap_conc(struct wlan_objmgr_psoc *psoc,
402*5113495bSYour Name 				     struct hdd_adapter *adapter,
403*5113495bSYour Name 				     struct sap_config *sap_config);
404*5113495bSYour Name 
405*5113495bSYour Name /**
406*5113495bSYour Name  * wlan_hdd_disable_channels() - Cache the channels
407*5113495bSYour Name  * and current state of the channels from the channel list
408*5113495bSYour Name  * received in the command and disable the channels on the
409*5113495bSYour Name  * wiphy and reg table.
410*5113495bSYour Name  * @hdd_ctx: Pointer to hdd context
411*5113495bSYour Name  *
412*5113495bSYour Name  * Return: 0 on success, Error code on failure
413*5113495bSYour Name  */
414*5113495bSYour Name int wlan_hdd_disable_channels(struct hdd_context *hdd_ctx);
415*5113495bSYour Name 
416*5113495bSYour Name /*
417*5113495bSYour Name  * hdd_check_and_disconnect_sta_on_invalid_channel() - Disconnect STA if it is
418*5113495bSYour Name  * on invalid channel
419*5113495bSYour Name  * @hdd_ctx: pointer to hdd context
420*5113495bSYour Name  * @reason: Mac Disconnect reason code as per @enum wlan_reason_code
421*5113495bSYour Name  *
422*5113495bSYour Name  * STA should be disconnected before starting the SAP if it is on indoor
423*5113495bSYour Name  * channel.
424*5113495bSYour Name  *
425*5113495bSYour Name  * Return: void
426*5113495bSYour Name  */
427*5113495bSYour Name void
428*5113495bSYour Name hdd_check_and_disconnect_sta_on_invalid_channel(struct hdd_context *hdd_ctx,
429*5113495bSYour Name 						enum wlan_reason_code reason);
430*5113495bSYour Name 
431*5113495bSYour Name /**
432*5113495bSYour Name  * hdd_convert_dot11mode_from_phymode() - get dot11 mode from phymode
433*5113495bSYour Name  * @phymode: phymode of sta associated to SAP
434*5113495bSYour Name  *
435*5113495bSYour Name  * The function is to convert the phymode to corresponding dot11 mode
436*5113495bSYour Name  *
437*5113495bSYour Name  * Return: dot11mode.
438*5113495bSYour Name  */
439*5113495bSYour Name enum qca_wlan_802_11_mode hdd_convert_dot11mode_from_phymode(int phymode);
440*5113495bSYour Name 
441*5113495bSYour Name /**
442*5113495bSYour Name  * hdd_stop_sap_due_to_invalid_channel() - to stop sap in case of invalid chnl
443*5113495bSYour Name  * @work: pointer to work structure
444*5113495bSYour Name  *
445*5113495bSYour Name  * Let's say SAP detected RADAR and trying to select the new channel and if no
446*5113495bSYour Name  * valid channel is found due to none of the channels are available or
447*5113495bSYour Name  * regulatory restriction then SAP needs to be stopped. so SAP state-machine
448*5113495bSYour Name  * will create a work to stop the bss
449*5113495bSYour Name  *
450*5113495bSYour Name  * stop bss has to happen through worker thread because radar indication comes
451*5113495bSYour Name  * from FW through mc thread or main host thread and if same thread is used to
452*5113495bSYour Name  * do stopbss then waiting for stopbss to finish operation will halt mc thread
453*5113495bSYour Name  * to freeze which will trigger stopbss timeout. Instead worker thread can do
454*5113495bSYour Name  * the stopbss operation while mc thread waits for stopbss to finish.
455*5113495bSYour Name  *
456*5113495bSYour Name  * Return: none
457*5113495bSYour Name  */
458*5113495bSYour Name void hdd_stop_sap_due_to_invalid_channel(struct work_struct *work);
459*5113495bSYour Name 
460*5113495bSYour Name /**
461*5113495bSYour Name  * hdd_is_any_sta_connecting() - check if any sta is connecting
462*5113495bSYour Name  * @hdd_ctx: hdd context
463*5113495bSYour Name  *
464*5113495bSYour Name  * Return: true if any sta is connecting
465*5113495bSYour Name  */
466*5113495bSYour Name bool hdd_is_any_sta_connecting(struct hdd_context *hdd_ctx);
467*5113495bSYour Name 
468*5113495bSYour Name /**
469*5113495bSYour Name  * wlan_hdd_configure_twt_responder() - configure twt responder in sap_config
470*5113495bSYour Name  * @hdd_ctx: Pointer to hdd context
471*5113495bSYour Name  * @twt_responder: twt responder configure value
472*5113495bSYour Name  *
473*5113495bSYour Name  * Return: none
474*5113495bSYour Name  */
475*5113495bSYour Name void
476*5113495bSYour Name wlan_hdd_configure_twt_responder(struct hdd_context *hdd_ctx,
477*5113495bSYour Name 				 bool twt_responder);
478*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
479*5113495bSYour Name /**
480*5113495bSYour Name  * wlan_hdd_mlo_reset() - reset mlo configuration if start bss fails
481*5113495bSYour Name  * @link_info: Pointer to link_info in hostapd adapter
482*5113495bSYour Name  *
483*5113495bSYour Name  * Return: void
484*5113495bSYour Name  */
485*5113495bSYour Name void wlan_hdd_mlo_reset(struct wlan_hdd_link_info *link_info);
486*5113495bSYour Name #else
wlan_hdd_mlo_reset(struct wlan_hdd_link_info * link_info)487*5113495bSYour Name static inline void wlan_hdd_mlo_reset(struct wlan_hdd_link_info *link_info)
488*5113495bSYour Name {
489*5113495bSYour Name }
490*5113495bSYour Name #endif /* end WLAN_FEATURE_11BE_MLO */
491*5113495bSYour Name 
492*5113495bSYour Name #ifdef WLAN_FEATURE_SAP_ACS_OPTIMIZE
493*5113495bSYour Name /**
494*5113495bSYour Name  * hdd_sap_is_acs_in_progress() - API to return if ACS is in progress
495*5113495bSYour Name  * @vdev: pointer t vdev object
496*5113495bSYour Name  *
497*5113495bSYour Name  * Return: bool
498*5113495bSYour Name  */
499*5113495bSYour Name bool hdd_sap_is_acs_in_progress(struct wlan_objmgr_vdev *vdev);
500*5113495bSYour Name #else
501*5113495bSYour Name static inline
hdd_sap_is_acs_in_progress(struct wlan_objmgr_vdev * vdev)502*5113495bSYour Name bool hdd_sap_is_acs_in_progress(struct wlan_objmgr_vdev *vdev)
503*5113495bSYour Name {
504*5113495bSYour Name 	return false;
505*5113495bSYour Name }
506*5113495bSYour Name #endif
507*5113495bSYour Name 
508*5113495bSYour Name #ifdef WLAN_CHIPSET_STATS
509*5113495bSYour Name /*
510*5113495bSYour Name  * hdd_cp_stats_cstats_sap_go_start_event() - chipset stats for sap/go start
511*5113495bSYour Name  * event
512*5113495bSYour Name  *
513*5113495bSYour Name  * @link_info: pointer to link_info object
514*5113495bSYour Name  * @sap_event: pointer to sap_event object
515*5113495bSYour Name  *
516*5113495bSYour Name  * Return : void
517*5113495bSYour Name  */
518*5113495bSYour Name void
519*5113495bSYour Name hdd_cp_stats_cstats_sap_go_start_event(struct wlan_hdd_link_info *link_info,
520*5113495bSYour Name 				       struct sap_event *sap_event);
521*5113495bSYour Name 
522*5113495bSYour Name /**
523*5113495bSYour Name  * hdd_cp_stats_cstats_sap_go_stop_event() - chipset stats for sap/go stop event
524*5113495bSYour Name  *
525*5113495bSYour Name  * @link_info: pointer to link_info object
526*5113495bSYour Name  * @sap_event: pointer to sap_event object
527*5113495bSYour Name  *
528*5113495bSYour Name  * Return : void
529*5113495bSYour Name  */
530*5113495bSYour Name void
531*5113495bSYour Name hdd_cp_stats_cstats_sap_go_stop_event(struct wlan_hdd_link_info *link_info,
532*5113495bSYour Name 				      struct sap_event *sap_event);
533*5113495bSYour Name 
534*5113495bSYour Name /**
535*5113495bSYour Name  * hdd_cp_stats_cstats_log_sap_go_sta_disassoc_event() - chipset stats for
536*5113495bSYour Name  * sap/go STA disconnect event
537*5113495bSYour Name  *
538*5113495bSYour Name  * @li: pointer to link_info object
539*5113495bSYour Name  * @sap_evt: pointer to sap_event object
540*5113495bSYour Name  *
541*5113495bSYour Name  * Return : void
542*5113495bSYour Name  */
543*5113495bSYour Name void
544*5113495bSYour Name hdd_cp_stats_cstats_log_sap_go_sta_disassoc_event(struct wlan_hdd_link_info *li,
545*5113495bSYour Name 						  struct sap_event *sap_evt);
546*5113495bSYour Name 
547*5113495bSYour Name /**
548*5113495bSYour Name  * hdd_cp_stats_cstats_log_sap_go_sta_assoc_reassoc_event() - chipset stats for
549*5113495bSYour Name  * sap/go STA assoc event
550*5113495bSYour Name  *
551*5113495bSYour Name  * @li: pointer to link_info object
552*5113495bSYour Name  * @sap_evt: pointer to sap_event object
553*5113495bSYour Name  *
554*5113495bSYour Name  * Return : void
555*5113495bSYour Name  */
556*5113495bSYour Name void
557*5113495bSYour Name hdd_cp_stats_cstats_log_sap_go_sta_assoc_reassoc_event
558*5113495bSYour Name 		     (struct wlan_hdd_link_info *li, struct sap_event *sap_evt);
559*5113495bSYour Name 
560*5113495bSYour Name /**
561*5113495bSYour Name  * hdd_cp_stats_cstats_log_sap_go_dfs_event() - chipset stats for
562*5113495bSYour Name  * sap/go dfs event
563*5113495bSYour Name  *
564*5113495bSYour Name  * @li: pointer to link_info object
565*5113495bSYour Name  * @event_id: eSapHddEvent event
566*5113495bSYour Name  *
567*5113495bSYour Name  * Return : void
568*5113495bSYour Name  */
569*5113495bSYour Name void hdd_cp_stats_cstats_log_sap_go_dfs_event(struct wlan_hdd_link_info *li,
570*5113495bSYour Name 					      eSapHddEvent event_id);
571*5113495bSYour Name #else
572*5113495bSYour Name static inline void
hdd_cp_stats_cstats_sap_go_start_event(struct wlan_hdd_link_info * link_info,struct sap_event * sap_event)573*5113495bSYour Name hdd_cp_stats_cstats_sap_go_start_event(struct wlan_hdd_link_info *link_info,
574*5113495bSYour Name 				       struct sap_event *sap_event)
575*5113495bSYour Name {
576*5113495bSYour Name }
577*5113495bSYour Name 
578*5113495bSYour Name static inline void
hdd_cp_stats_cstats_sap_go_stop_event(struct wlan_hdd_link_info * link_info,struct sap_event * sap_event)579*5113495bSYour Name hdd_cp_stats_cstats_sap_go_stop_event(struct wlan_hdd_link_info *link_info,
580*5113495bSYour Name 				      struct sap_event *sap_event)
581*5113495bSYour Name {
582*5113495bSYour Name }
583*5113495bSYour Name 
584*5113495bSYour Name static inline void
hdd_cp_stats_cstats_log_sap_go_sta_disassoc_event(struct wlan_hdd_link_info * li,struct sap_event * sap_evt)585*5113495bSYour Name hdd_cp_stats_cstats_log_sap_go_sta_disassoc_event(struct wlan_hdd_link_info *li,
586*5113495bSYour Name 						  struct sap_event *sap_evt)
587*5113495bSYour Name {
588*5113495bSYour Name }
589*5113495bSYour Name 
590*5113495bSYour Name static inline void
hdd_cp_stats_cstats_log_sap_go_sta_assoc_reassoc_event(struct wlan_hdd_link_info * li,struct sap_event * sap_evt)591*5113495bSYour Name hdd_cp_stats_cstats_log_sap_go_sta_assoc_reassoc_event
592*5113495bSYour Name 		     (struct wlan_hdd_link_info *li, struct sap_event *sap_evt)
593*5113495bSYour Name {
594*5113495bSYour Name }
595*5113495bSYour Name 
596*5113495bSYour Name static inline void
hdd_cp_stats_cstats_log_sap_go_dfs_event(struct wlan_hdd_link_info * li,eSapHddEvent event_id)597*5113495bSYour Name hdd_cp_stats_cstats_log_sap_go_dfs_event(struct wlan_hdd_link_info *li,
598*5113495bSYour Name 					 eSapHddEvent event_id)
599*5113495bSYour Name {
600*5113495bSYour Name }
601*5113495bSYour Name #endif /* WLAN_CHIPSET_STATS */
602*5113495bSYour Name #endif /* end #if !defined(WLAN_HDD_HOSTAPD_H) */
603