xref: /wlan-driver/qca-wifi-host-cmn/umac/mlme/connection_mgr/dispatcher/inc/wlan_cm_api.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2020-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 any
6*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
7*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
8*5113495bSYour Name  *
9*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*5113495bSYour Name  */
17*5113495bSYour Name 
18*5113495bSYour Name /**
19*5113495bSYour Name  * DOC: wlan_cm_api.h
20*5113495bSYour Name  *
21*5113495bSYour Name  * This file maintains declarations of public apis
22*5113495bSYour Name  */
23*5113495bSYour Name 
24*5113495bSYour Name #ifndef __WLAN_CM_API_H
25*5113495bSYour Name #define __WLAN_CM_API_H
26*5113495bSYour Name 
27*5113495bSYour Name #include "wlan_cm_public_struct.h"
28*5113495bSYour Name #include "wlan_ext_mlme_obj_types.h"
29*5113495bSYour Name 
30*5113495bSYour Name /**
31*5113495bSYour Name  * wlan_cm_start_connect() - connect start request
32*5113495bSYour Name  * @vdev: vdev pointer
33*5113495bSYour Name  * @req: connect req
34*5113495bSYour Name  *
35*5113495bSYour Name  * Return: QDF_STATUS
36*5113495bSYour Name  */
37*5113495bSYour Name QDF_STATUS wlan_cm_start_connect(struct wlan_objmgr_vdev *vdev,
38*5113495bSYour Name 				 struct wlan_cm_connect_req *req);
39*5113495bSYour Name 
40*5113495bSYour Name /**
41*5113495bSYour Name  * wlan_cm_disconnect() - disconnect start request
42*5113495bSYour Name  * @vdev: vdev pointer
43*5113495bSYour Name  * @source: disconnect source
44*5113495bSYour Name  * @reason_code: disconnect reason
45*5113495bSYour Name  * @bssid: bssid of AP to disconnect, can be null if not known
46*5113495bSYour Name  *
47*5113495bSYour Name  * Context: can be called from any context
48*5113495bSYour Name  *
49*5113495bSYour Name  * Return: QDF_STATUS
50*5113495bSYour Name  */
51*5113495bSYour Name QDF_STATUS wlan_cm_disconnect(struct wlan_objmgr_vdev *vdev,
52*5113495bSYour Name 			      enum wlan_cm_source source,
53*5113495bSYour Name 			      enum wlan_reason_code reason_code,
54*5113495bSYour Name 			      struct qdf_mac_addr *bssid);
55*5113495bSYour Name 
56*5113495bSYour Name /**
57*5113495bSYour Name  * wlan_cm_disconnect_sync() - disconnect request with wait till
58*5113495bSYour Name  * completed
59*5113495bSYour Name  * @vdev: vdev pointer
60*5113495bSYour Name  * @source: disconnect source
61*5113495bSYour Name  * @reason_code: disconnect reason
62*5113495bSYour Name  *
63*5113495bSYour Name  * Context: Only call for north bound disconnect req, if wait till complete
64*5113495bSYour Name  * is required, e.g. during vdev delete. Do not call from scheduler context.
65*5113495bSYour Name  *
66*5113495bSYour Name  * Return: QDF_STATUS
67*5113495bSYour Name  */
68*5113495bSYour Name QDF_STATUS wlan_cm_disconnect_sync(struct wlan_objmgr_vdev *vdev,
69*5113495bSYour Name 				   enum wlan_cm_source source,
70*5113495bSYour Name 				   enum wlan_reason_code reason_code);
71*5113495bSYour Name 
72*5113495bSYour Name /**
73*5113495bSYour Name  * wlan_cm_bss_select_ind_rsp() - Connection manager resp for bss
74*5113495bSYour Name  * select indication
75*5113495bSYour Name  * @vdev: vdev pointer
76*5113495bSYour Name  * @status: Status
77*5113495bSYour Name  *
78*5113495bSYour Name  * Return: QDF_STATUS
79*5113495bSYour Name  */
80*5113495bSYour Name QDF_STATUS wlan_cm_bss_select_ind_rsp(struct wlan_objmgr_vdev *vdev,
81*5113495bSYour Name 				      QDF_STATUS status);
82*5113495bSYour Name 
83*5113495bSYour Name /**
84*5113495bSYour Name  * wlan_cm_bss_peer_create_rsp() - Connection manager bss peer create response
85*5113495bSYour Name  * @vdev: vdev pointer
86*5113495bSYour Name  * @status: Status
87*5113495bSYour Name  * @peer_mac: Peer mac address
88*5113495bSYour Name  *
89*5113495bSYour Name  * Return: QDF_STATUS
90*5113495bSYour Name  */
91*5113495bSYour Name QDF_STATUS wlan_cm_bss_peer_create_rsp(struct wlan_objmgr_vdev *vdev,
92*5113495bSYour Name 				       QDF_STATUS status,
93*5113495bSYour Name 				       struct qdf_mac_addr *peer_mac);
94*5113495bSYour Name 
95*5113495bSYour Name /**
96*5113495bSYour Name  * wlan_cm_update_scan_mlme_info() - Called after connect/roam complete
97*5113495bSYour Name  * to update the scan cache with assoc state
98*5113495bSYour Name  * @vdev: vdev object pointer
99*5113495bSYour Name  * @resp: Connect response
100*5113495bSYour Name  *
101*5113495bSYour Name  * Return: QDF_STATUS
102*5113495bSYour Name  */
103*5113495bSYour Name void wlan_cm_update_scan_mlme_info(struct wlan_objmgr_vdev *vdev,
104*5113495bSYour Name 				   struct wlan_cm_connect_resp *resp);
105*5113495bSYour Name 
106*5113495bSYour Name /**
107*5113495bSYour Name  * wlan_cm_connect_rsp() - Connection manager connect response
108*5113495bSYour Name  * @vdev: vdev pointer
109*5113495bSYour Name  * @resp: Connect response
110*5113495bSYour Name  *
111*5113495bSYour Name  * Return: QDF_STATUS
112*5113495bSYour Name  */
113*5113495bSYour Name QDF_STATUS wlan_cm_connect_rsp(struct wlan_objmgr_vdev *vdev,
114*5113495bSYour Name 			       struct wlan_cm_connect_resp *resp);
115*5113495bSYour Name 
116*5113495bSYour Name /**
117*5113495bSYour Name  * wlan_cm_bss_peer_delete_ind() - Connection manager peer delete indication
118*5113495bSYour Name  * @vdev: vdev pointer
119*5113495bSYour Name  * @peer_mac: Peer mac address
120*5113495bSYour Name  *
121*5113495bSYour Name  * Return: QDF_STATUS
122*5113495bSYour Name  */
123*5113495bSYour Name QDF_STATUS wlan_cm_bss_peer_delete_ind(struct wlan_objmgr_vdev *vdev,
124*5113495bSYour Name 				       struct qdf_mac_addr *peer_mac);
125*5113495bSYour Name 
126*5113495bSYour Name /**
127*5113495bSYour Name  * wlan_cm_bss_peer_delete_rsp() - Connection manager peer delete response
128*5113495bSYour Name  * @vdev: vdev pointer
129*5113495bSYour Name  * @status: status
130*5113495bSYour Name  *
131*5113495bSYour Name  * Return: QDF_STATUS
132*5113495bSYour Name  */
133*5113495bSYour Name QDF_STATUS wlan_cm_bss_peer_delete_rsp(struct wlan_objmgr_vdev *vdev,
134*5113495bSYour Name 				       uint32_t status);
135*5113495bSYour Name 
136*5113495bSYour Name /**
137*5113495bSYour Name  * wlan_cm_disconnect_rsp() - Connection manager disconnect response
138*5113495bSYour Name  * @vdev: vdev pointer
139*5113495bSYour Name  * @resp: disconnect response
140*5113495bSYour Name  *
141*5113495bSYour Name  * Return: QDF_STATUS
142*5113495bSYour Name  */
143*5113495bSYour Name QDF_STATUS wlan_cm_disconnect_rsp(struct wlan_objmgr_vdev *vdev,
144*5113495bSYour Name 				  struct wlan_cm_discon_rsp *resp);
145*5113495bSYour Name 
146*5113495bSYour Name /**
147*5113495bSYour Name  * wlan_cm_set_max_connect_attempts() - Set max connect attempts
148*5113495bSYour Name  * @vdev: vdev pointer
149*5113495bSYour Name  * @max_connect_attempts: max connect attempts to be set.
150*5113495bSYour Name  *
151*5113495bSYour Name  * Set max connect attempts. Max value is limited to CM_MAX_CONNECT_ATTEMPTS.
152*5113495bSYour Name  *
153*5113495bSYour Name  * Return: void
154*5113495bSYour Name  */
155*5113495bSYour Name void wlan_cm_set_max_connect_attempts(struct wlan_objmgr_vdev *vdev,
156*5113495bSYour Name 				      uint8_t max_connect_attempts);
157*5113495bSYour Name 
158*5113495bSYour Name /**
159*5113495bSYour Name  * wlan_cm_set_max_connect_timeout() - Set max connect timeout
160*5113495bSYour Name  * @vdev: vdev pointer
161*5113495bSYour Name  * @max_connect_timeout: max connect timeout to be set.
162*5113495bSYour Name  *
163*5113495bSYour Name  * Set max connect timeout.
164*5113495bSYour Name  *
165*5113495bSYour Name  * Return: void
166*5113495bSYour Name  */
167*5113495bSYour Name void wlan_cm_set_max_connect_timeout(struct wlan_objmgr_vdev *vdev,
168*5113495bSYour Name 				     uint32_t max_connect_timeout);
169*5113495bSYour Name 
170*5113495bSYour Name /**
171*5113495bSYour Name  * wlan_cm_is_vdev_connecting() - check if vdev is in connecting state
172*5113495bSYour Name  * @vdev: vdev pointer
173*5113495bSYour Name  *
174*5113495bSYour Name  * Return: bool
175*5113495bSYour Name  */
176*5113495bSYour Name bool wlan_cm_is_vdev_connecting(struct wlan_objmgr_vdev *vdev);
177*5113495bSYour Name 
178*5113495bSYour Name /**
179*5113495bSYour Name  * wlan_cm_is_vdev_connected() - check if vdev is in connected state
180*5113495bSYour Name  * @vdev: vdev pointer
181*5113495bSYour Name  *
182*5113495bSYour Name  * Return: bool
183*5113495bSYour Name  */
184*5113495bSYour Name bool wlan_cm_is_vdev_connected(struct wlan_objmgr_vdev *vdev);
185*5113495bSYour Name 
186*5113495bSYour Name /**
187*5113495bSYour Name  * wlan_cm_is_vdev_active() - check if vdev is in active state ie connected or
188*5113495bSYour Name  * roaming state
189*5113495bSYour Name  * @vdev: vdev pointer
190*5113495bSYour Name  *
191*5113495bSYour Name  * Return: bool
192*5113495bSYour Name  */
193*5113495bSYour Name bool wlan_cm_is_vdev_active(struct wlan_objmgr_vdev *vdev);
194*5113495bSYour Name 
195*5113495bSYour Name /**
196*5113495bSYour Name  * wlan_cm_is_vdev_disconnecting() - check if vdev is in disconnecting state
197*5113495bSYour Name  * @vdev: vdev pointer
198*5113495bSYour Name  *
199*5113495bSYour Name  * Return: bool
200*5113495bSYour Name  */
201*5113495bSYour Name bool wlan_cm_is_vdev_disconnecting(struct wlan_objmgr_vdev *vdev);
202*5113495bSYour Name 
203*5113495bSYour Name /**
204*5113495bSYour Name  * wlan_cm_is_vdev_disconnected() - check if vdev is disconnected/init state
205*5113495bSYour Name  * @vdev: vdev pointer
206*5113495bSYour Name  *
207*5113495bSYour Name  * Return: bool
208*5113495bSYour Name  */
209*5113495bSYour Name bool wlan_cm_is_vdev_disconnected(struct wlan_objmgr_vdev *vdev);
210*5113495bSYour Name 
211*5113495bSYour Name /**
212*5113495bSYour Name  * wlan_cm_is_vdev_idle_due_to_link_switch() - Check if VDEV is in IDLE
213*5113495bSYour Name  * due to link switch sub-state.
214*5113495bSYour Name  * @vdev: VDEV objmgr pointer
215*5113495bSYour Name  *
216*5113495bSYour Name  * Return: bool
217*5113495bSYour Name  */
218*5113495bSYour Name bool wlan_cm_is_vdev_idle_due_to_link_switch(struct wlan_objmgr_vdev *vdev);
219*5113495bSYour Name 
220*5113495bSYour Name /**
221*5113495bSYour Name  * wlan_cm_is_vdev_roaming() - check if vdev is in roaming state
222*5113495bSYour Name  * @vdev: vdev pointer
223*5113495bSYour Name  *
224*5113495bSYour Name  * Return: bool
225*5113495bSYour Name  */
226*5113495bSYour Name bool wlan_cm_is_vdev_roaming(struct wlan_objmgr_vdev *vdev);
227*5113495bSYour Name 
228*5113495bSYour Name /**
229*5113495bSYour Name  * wlan_cm_free_connect_req() - free up connect request and its sub memory
230*5113495bSYour Name  * @connect_req: Connect request
231*5113495bSYour Name  *
232*5113495bSYour Name  * Return: void
233*5113495bSYour Name  */
234*5113495bSYour Name void wlan_cm_free_connect_req(struct wlan_cm_connect_req *connect_req);
235*5113495bSYour Name 
236*5113495bSYour Name /**
237*5113495bSYour Name  * wlan_cm_free_connect_resp() - free up connect response and its sub memory
238*5113495bSYour Name  * @connect_rsp: Connect response
239*5113495bSYour Name  *
240*5113495bSYour Name  * Return: void
241*5113495bSYour Name  */
242*5113495bSYour Name void wlan_cm_free_connect_resp(struct wlan_cm_connect_resp *connect_rsp);
243*5113495bSYour Name 
244*5113495bSYour Name /**
245*5113495bSYour Name  * wlan_cm_free_connect_req_param() - free up connect request sub memory
246*5113495bSYour Name  * @req: Connect request
247*5113495bSYour Name  *
248*5113495bSYour Name  * Return: void
249*5113495bSYour Name  */
250*5113495bSYour Name void wlan_cm_free_connect_req_param(struct wlan_cm_connect_req *req);
251*5113495bSYour Name 
252*5113495bSYour Name /**
253*5113495bSYour Name  * wlan_cm_is_link_switch_disconnect_resp() - Check if the disconnect response
254*5113495bSYour Name  * is for link switch request.
255*5113495bSYour Name  * @resp: Connection manager disconnect response.
256*5113495bSYour Name  *
257*5113495bSYour Name  * Return: bool
258*5113495bSYour Name  */
259*5113495bSYour Name bool wlan_cm_is_link_switch_disconnect_resp(struct wlan_cm_discon_rsp *resp);
260*5113495bSYour Name 
261*5113495bSYour Name /**
262*5113495bSYour Name  * wlan_cm_is_link_switch_connect_resp() - Check if the connect response if for
263*5113495bSYour Name  * link switch request.
264*5113495bSYour Name  * @resp: Connection manager connect response.
265*5113495bSYour Name  *
266*5113495bSYour Name  * Return: bool
267*5113495bSYour Name  */
268*5113495bSYour Name bool wlan_cm_is_link_switch_connect_resp(struct wlan_cm_connect_resp *resp);
269*5113495bSYour Name 
270*5113495bSYour Name /**
271*5113495bSYour Name  * wlan_cm_trigger_panic_on_cmd_timeout() - Trigger recovery on CM command
272*5113495bSYour Name  * timeout.
273*5113495bSYour Name  * @vdev: VDEV object manager
274*5113495bSYour Name  * @reason: Hang reason code
275*5113495bSYour Name  *
276*5113495bSYour Name  * Return: void
277*5113495bSYour Name  */
278*5113495bSYour Name void wlan_cm_trigger_panic_on_cmd_timeout(struct wlan_objmgr_vdev *vdev,
279*5113495bSYour Name 					  enum qdf_hang_reason reason);
280*5113495bSYour Name #ifdef WLAN_FEATURE_ROAM_OFFLOAD
281*5113495bSYour Name /**
282*5113495bSYour Name  * wlan_cm_is_vdev_roam_started() - check if vdev is in roaming state and
283*5113495bSYour Name  * roam started sub stated
284*5113495bSYour Name  * @vdev: vdev pointer
285*5113495bSYour Name  *
286*5113495bSYour Name  * Return: bool
287*5113495bSYour Name  */
288*5113495bSYour Name bool wlan_cm_is_vdev_roam_started(struct wlan_objmgr_vdev *vdev);
289*5113495bSYour Name 
290*5113495bSYour Name /**
291*5113495bSYour Name  * wlan_cm_is_vdev_roam_sync_inprogress() - check if vdev is in roaming state
292*5113495bSYour Name  * and roam sync substate
293*5113495bSYour Name  * @vdev: vdev pointer
294*5113495bSYour Name  *
295*5113495bSYour Name  * Return: bool
296*5113495bSYour Name  */
297*5113495bSYour Name bool wlan_cm_is_vdev_roam_sync_inprogress(struct wlan_objmgr_vdev *vdev);
298*5113495bSYour Name #else
wlan_cm_is_vdev_roam_started(struct wlan_objmgr_vdev * vdev)299*5113495bSYour Name static inline bool wlan_cm_is_vdev_roam_started(struct wlan_objmgr_vdev *vdev)
300*5113495bSYour Name {
301*5113495bSYour Name 	return false;
302*5113495bSYour Name }
303*5113495bSYour Name 
304*5113495bSYour Name static inline
wlan_cm_is_vdev_roam_sync_inprogress(struct wlan_objmgr_vdev * vdev)305*5113495bSYour Name bool wlan_cm_is_vdev_roam_sync_inprogress(struct wlan_objmgr_vdev *vdev)
306*5113495bSYour Name {
307*5113495bSYour Name 	return false;
308*5113495bSYour Name }
309*5113495bSYour Name #endif
310*5113495bSYour Name 
311*5113495bSYour Name #ifdef WLAN_FEATURE_HOST_ROAM
312*5113495bSYour Name /**
313*5113495bSYour Name  * wlan_cm_is_vdev_roam_preauth_state() - check if vdev is in roaming state and
314*5113495bSYour Name  * preauth is in progress
315*5113495bSYour Name  * @vdev: vdev pointer
316*5113495bSYour Name  *
317*5113495bSYour Name  * Return: bool
318*5113495bSYour Name  */
319*5113495bSYour Name bool wlan_cm_is_vdev_roam_preauth_state(struct wlan_objmgr_vdev *vdev);
320*5113495bSYour Name 
321*5113495bSYour Name /**
322*5113495bSYour Name  * wlan_cm_is_vdev_roam_reassoc_state() - check if vdev is in roaming state
323*5113495bSYour Name  * and reassoc is in progress
324*5113495bSYour Name  * @vdev: vdev pointer
325*5113495bSYour Name  *
326*5113495bSYour Name  * Return: bool
327*5113495bSYour Name  */
328*5113495bSYour Name bool wlan_cm_is_vdev_roam_reassoc_state(struct wlan_objmgr_vdev *vdev);
329*5113495bSYour Name #else
330*5113495bSYour Name static inline
wlan_cm_is_vdev_roam_preauth_state(struct wlan_objmgr_vdev * vdev)331*5113495bSYour Name bool wlan_cm_is_vdev_roam_preauth_state(struct wlan_objmgr_vdev *vdev)
332*5113495bSYour Name {
333*5113495bSYour Name 	return false;
334*5113495bSYour Name }
335*5113495bSYour Name 
336*5113495bSYour Name static inline
wlan_cm_is_vdev_roam_reassoc_state(struct wlan_objmgr_vdev * vdev)337*5113495bSYour Name bool wlan_cm_is_vdev_roam_reassoc_state(struct wlan_objmgr_vdev *vdev)
338*5113495bSYour Name {
339*5113495bSYour Name 	return false;
340*5113495bSYour Name }
341*5113495bSYour Name #endif
342*5113495bSYour Name 
343*5113495bSYour Name /**
344*5113495bSYour Name  * wlan_cm_connect_resp_fill_mld_addr_from_cm_id() - API to get MLD of
345*5113495bSYour Name  * current candidate from connect request ID.
346*5113495bSYour Name  * @vdev: VDEV objmgr pointer.
347*5113495bSYour Name  * @cm_id: connect request ID.
348*5113495bSYour Name  * @rsp: connect resp pointer.
349*5113495bSYour Name  *
350*5113495bSYour Name  * This wrapper API fills MLD address in @rsp from connect request ID.
351*5113495bSYour Name  *
352*5113495bSYour Name  * Return: void
353*5113495bSYour Name  */
354*5113495bSYour Name void
355*5113495bSYour Name wlan_cm_connect_resp_fill_mld_addr_from_cm_id(struct wlan_objmgr_vdev *vdev,
356*5113495bSYour Name 					      wlan_cm_id cm_id,
357*5113495bSYour Name 					      struct wlan_cm_connect_resp *rsp);
358*5113495bSYour Name 
359*5113495bSYour Name /**
360*5113495bSYour Name  * wlan_cm_connect_resp_fill_mld_addr_from_vdev_id() - API to get MLD
361*5113495bSYour Name  * from scan entry in join request.
362*5113495bSYour Name  * @psoc: PSOC objmgr pointer.
363*5113495bSYour Name  * @vdev_id: session ID.
364*5113495bSYour Name  * @entry: Scan entry of the candidate.
365*5113495bSYour Name  * @rsp: connect response pointer.
366*5113495bSYour Name  *
367*5113495bSYour Name  * This wrapper API gets VDEV from join request and fills MLD address
368*5113495bSYour Name  * in @rsp from the scan entry in join request.
369*5113495bSYour Name  *
370*5113495bSYour Name  * Return: void
371*5113495bSYour Name  */
372*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
373*5113495bSYour Name void
374*5113495bSYour Name wlan_cm_connect_resp_fill_mld_addr_from_vdev_id(struct wlan_objmgr_psoc *psoc,
375*5113495bSYour Name 						uint8_t vdev_id,
376*5113495bSYour Name 						struct scan_cache_entry *entry,
377*5113495bSYour Name 						struct wlan_cm_connect_resp *rsp);
378*5113495bSYour Name #else
379*5113495bSYour Name static inline void
wlan_cm_connect_resp_fill_mld_addr_from_vdev_id(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,struct scan_cache_entry * entry,struct wlan_cm_connect_resp * rsp)380*5113495bSYour Name wlan_cm_connect_resp_fill_mld_addr_from_vdev_id(struct wlan_objmgr_psoc *psoc,
381*5113495bSYour Name 						uint8_t vdev_id,
382*5113495bSYour Name 						struct scan_cache_entry *entry,
383*5113495bSYour Name 						struct wlan_cm_connect_resp *rsp)
384*5113495bSYour Name {
385*5113495bSYour Name }
386*5113495bSYour Name #endif
387*5113495bSYour Name 
388*5113495bSYour Name /**
389*5113495bSYour Name  * wlan_cm_get_active_connect_req() - Get copy of active connect request
390*5113495bSYour Name  * @vdev: vdev pointer
391*5113495bSYour Name  * @req: pointer to the copy of the active connect request
392*5113495bSYour Name  * *
393*5113495bSYour Name  * Context: Should be called only in the context of the
394*5113495bSYour Name  * cm request activation
395*5113495bSYour Name  *
396*5113495bSYour Name  * Return: true and connect req if any request is active
397*5113495bSYour Name  */
398*5113495bSYour Name bool wlan_cm_get_active_connect_req(struct wlan_objmgr_vdev *vdev,
399*5113495bSYour Name 				    struct wlan_cm_vdev_connect_req *req);
400*5113495bSYour Name 
401*5113495bSYour Name /**
402*5113495bSYour Name  * wlan_cm_is_first_candidate_connect_attempt() - Check whether it is
403*5113495bSYour Name  * the first attempt for the current AP after receiving connect request
404*5113495bSYour Name  * @vdev: vdev pointer
405*5113495bSYour Name  *
406*5113495bSYour Name  * Return: True if it is the first connecting attempt on a candidate.
407*5113495bSYour Name  * Otherwise return false
408*5113495bSYour Name  */
409*5113495bSYour Name bool wlan_cm_is_first_candidate_connect_attempt(struct wlan_objmgr_vdev *vdev);
410*5113495bSYour Name 
411*5113495bSYour Name /**
412*5113495bSYour Name  * wlan_cm_get_active_connect_req_param() - API to fetch connect request
413*5113495bSYour Name  * parameter.
414*5113495bSYour Name  * @vdev: vdev pointer
415*5113495bSYour Name  * @req: Connection request parameter buffer to be filled
416*5113495bSYour Name  *
417*5113495bSYour Name  * Return: QDF_STATUS
418*5113495bSYour Name  */
419*5113495bSYour Name QDF_STATUS
420*5113495bSYour Name wlan_cm_get_active_connect_req_param(struct wlan_objmgr_vdev *vdev,
421*5113495bSYour Name 				     struct wlan_cm_connect_req *req);
422*5113495bSYour Name 
423*5113495bSYour Name #ifdef WLAN_FEATURE_HOST_ROAM
424*5113495bSYour Name /**
425*5113495bSYour Name  * wlan_cm_get_active_reassoc_req() - Get copy of active reassoc request
426*5113495bSYour Name  * @vdev: vdev pointer
427*5113495bSYour Name  * @req: pointer to the copy of the active reassoc request
428*5113495bSYour Name  * *
429*5113495bSYour Name  * Context: Should be called only in the context of the
430*5113495bSYour Name  * cm request activation
431*5113495bSYour Name  *
432*5113495bSYour Name  * Return: true and reassoc req if any request is active
433*5113495bSYour Name  */
434*5113495bSYour Name bool wlan_cm_get_active_reassoc_req(struct wlan_objmgr_vdev *vdev,
435*5113495bSYour Name 				    struct wlan_cm_vdev_reassoc_req *req);
436*5113495bSYour Name #else
437*5113495bSYour Name static inline
wlan_cm_get_active_reassoc_req(struct wlan_objmgr_vdev * vdev,struct wlan_cm_vdev_reassoc_req * req)438*5113495bSYour Name bool wlan_cm_get_active_reassoc_req(struct wlan_objmgr_vdev *vdev,
439*5113495bSYour Name 				    struct wlan_cm_vdev_reassoc_req *req)
440*5113495bSYour Name {
441*5113495bSYour Name 	return false;
442*5113495bSYour Name }
443*5113495bSYour Name #endif
444*5113495bSYour Name 
445*5113495bSYour Name /**
446*5113495bSYour Name  * wlan_cm_get_active_disconnect_req() - Get copy of active disconnect request
447*5113495bSYour Name  * @vdev: vdev pointer
448*5113495bSYour Name  * @req: pointer to the copy of the active disconnect request
449*5113495bSYour Name  * *
450*5113495bSYour Name  * Context: Should be called only in the context of the
451*5113495bSYour Name  * cm request activation
452*5113495bSYour Name  *
453*5113495bSYour Name  * Return: true and disconnect req if any request is active
454*5113495bSYour Name  */
455*5113495bSYour Name bool wlan_cm_get_active_disconnect_req(struct wlan_objmgr_vdev *vdev,
456*5113495bSYour Name 				       struct wlan_cm_vdev_discon_req *req);
457*5113495bSYour Name 
458*5113495bSYour Name /**
459*5113495bSYour Name  * wlan_cm_reason_code_to_str() - return string conversion of reason code
460*5113495bSYour Name  * @reason: reason code.
461*5113495bSYour Name  *
462*5113495bSYour Name  * This utility function helps log string conversion of reason code.
463*5113495bSYour Name  *
464*5113495bSYour Name  * Return: string conversion of reason code, if match found;
465*5113495bSYour Name  *         "Unknown" otherwise.
466*5113495bSYour Name  */
467*5113495bSYour Name const char *wlan_cm_reason_code_to_str(enum wlan_reason_code reason);
468*5113495bSYour Name 
469*5113495bSYour Name /**
470*5113495bSYour Name  * wlan_cm_get_active_req_type() - return cm  active request type
471*5113495bSYour Name  * @vdev: vdev pointer
472*5113495bSYour Name  *
473*5113495bSYour Name  * This function returns the cm active request type
474*5113495bSYour Name  *
475*5113495bSYour Name  * Return: active request type if any, otherwise return 0
476*5113495bSYour Name  */
477*5113495bSYour Name enum wlan_cm_active_request_type
478*5113495bSYour Name wlan_cm_get_active_req_type(struct wlan_objmgr_vdev *vdev);
479*5113495bSYour Name 
480*5113495bSYour Name /**
481*5113495bSYour Name  * wlan_cm_get_ext_hdl() - Get connection manager ext context from vdev
482*5113495bSYour Name  * @vdev: vdev pointer
483*5113495bSYour Name  *
484*5113495bSYour Name  * Return: pointer to connection manager ext context
485*5113495bSYour Name  */
486*5113495bSYour Name cm_ext_t *wlan_cm_get_ext_hdl(struct wlan_objmgr_vdev *vdev);
487*5113495bSYour Name 
488*5113495bSYour Name #ifdef WLAN_FEATURE_HOST_ROAM
489*5113495bSYour Name /**
490*5113495bSYour Name  * wlan_cm_reassoc_rsp() - Connection manager reassoc response
491*5113495bSYour Name  * @vdev: vdev pointer
492*5113495bSYour Name  * @resp: Connect response
493*5113495bSYour Name  *
494*5113495bSYour Name  * Return: QDF_STATUS
495*5113495bSYour Name  */
496*5113495bSYour Name QDF_STATUS wlan_cm_reassoc_rsp(struct wlan_objmgr_vdev *vdev,
497*5113495bSYour Name 			       struct wlan_cm_connect_resp *resp);
498*5113495bSYour Name #else
499*5113495bSYour Name static inline
wlan_cm_reassoc_rsp(struct wlan_objmgr_vdev * vdev,struct wlan_cm_connect_resp * resp)500*5113495bSYour Name QDF_STATUS wlan_cm_reassoc_rsp(struct wlan_objmgr_vdev *vdev,
501*5113495bSYour Name 			       struct wlan_cm_connect_resp *resp)
502*5113495bSYour Name {
503*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
504*5113495bSYour Name }
505*5113495bSYour Name #endif
506*5113495bSYour Name 
507*5113495bSYour Name /**
508*5113495bSYour Name  * wlan_cm_hw_mode_change_resp() - HW mode change response
509*5113495bSYour Name  * @pdev: pdev pointer
510*5113495bSYour Name  * @vdev_id: vdev id
511*5113495bSYour Name  * @cm_id: connection ID which gave the hw mode change request
512*5113495bSYour Name  * @status: status of the HW mode change.
513*5113495bSYour Name  *
514*5113495bSYour Name  * Return: void
515*5113495bSYour Name  */
516*5113495bSYour Name #ifdef WLAN_POLICY_MGR_ENABLE
517*5113495bSYour Name void wlan_cm_hw_mode_change_resp(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
518*5113495bSYour Name 				 wlan_cm_id cm_id, QDF_STATUS status);
519*5113495bSYour Name #endif /* ifdef POLICY_MGR_ENABLE */
520*5113495bSYour Name 
521*5113495bSYour Name #ifdef SM_ENG_HIST_ENABLE
522*5113495bSYour Name /**
523*5113495bSYour Name  * wlan_cm_sm_history_print() - Prints SM history
524*5113495bSYour Name  * @vdev: Objmgr vdev
525*5113495bSYour Name  *
526*5113495bSYour Name  * API to print CM SM history
527*5113495bSYour Name  *
528*5113495bSYour Name  * Return: void
529*5113495bSYour Name  */
530*5113495bSYour Name void wlan_cm_sm_history_print(struct wlan_objmgr_vdev *vdev);
531*5113495bSYour Name 
532*5113495bSYour Name /**
533*5113495bSYour Name  * wlan_cm_req_history_print() - Prints CM request history
534*5113495bSYour Name  * @vdev: Objmgr vdev
535*5113495bSYour Name  *
536*5113495bSYour Name  * API to print CM request history
537*5113495bSYour Name  *
538*5113495bSYour Name  * Return: void
539*5113495bSYour Name  */
540*5113495bSYour Name void wlan_cm_req_history_print(struct wlan_objmgr_vdev *vdev);
541*5113495bSYour Name #else
wlan_cm_sm_history_print(struct wlan_objmgr_vdev * vdev)542*5113495bSYour Name static inline void wlan_cm_sm_history_print(struct wlan_objmgr_vdev *vdev)
543*5113495bSYour Name {
544*5113495bSYour Name }
545*5113495bSYour Name 
wlan_cm_req_history_print(struct wlan_objmgr_vdev * vdev)546*5113495bSYour Name static inline void wlan_cm_req_history_print(struct wlan_objmgr_vdev *vdev)
547*5113495bSYour Name {}
548*5113495bSYour Name #endif
549*5113495bSYour Name 
550*5113495bSYour Name #ifdef CONN_MGR_ADV_FEATURE
551*5113495bSYour Name /**
552*5113495bSYour Name  * wlan_cm_set_candidate_advance_filter_cb() - Set CM candidate advance
553*5113495bSYour Name  * filter cb
554*5113495bSYour Name  * @vdev: Objmgr vdev
555*5113495bSYour Name  * @filter_fun: CM candidate advance filter cb
556*5113495bSYour Name  *
557*5113495bSYour Name  * Return: void
558*5113495bSYour Name  */
559*5113495bSYour Name static inline
wlan_cm_set_candidate_advance_filter_cb(struct wlan_objmgr_vdev * vdev,void (* filter_fun)(struct wlan_objmgr_vdev * vdev,struct scan_filter * filter))560*5113495bSYour Name void wlan_cm_set_candidate_advance_filter_cb(
561*5113495bSYour Name 		struct wlan_objmgr_vdev *vdev,
562*5113495bSYour Name 		void (*filter_fun)(struct wlan_objmgr_vdev *vdev,
563*5113495bSYour Name 				   struct scan_filter *filter))
564*5113495bSYour Name {
565*5113495bSYour Name }
566*5113495bSYour Name 
567*5113495bSYour Name /**
568*5113495bSYour Name  * wlan_cm_set_candidate_custom_sort_cb() - Set CM candidate custom sort cb
569*5113495bSYour Name  * @vdev: Objmgr vdev
570*5113495bSYour Name  * @sort_fun: CM candidate custom sort cb
571*5113495bSYour Name  *
572*5113495bSYour Name  * Return: void
573*5113495bSYour Name  */
574*5113495bSYour Name static inline
wlan_cm_set_candidate_custom_sort_cb(struct wlan_objmgr_vdev * vdev,void (* sort_fun)(struct wlan_objmgr_vdev * vdev,qdf_list_t * list))575*5113495bSYour Name void wlan_cm_set_candidate_custom_sort_cb(
576*5113495bSYour Name 		struct wlan_objmgr_vdev *vdev,
577*5113495bSYour Name 		void (*sort_fun)(struct wlan_objmgr_vdev *vdev,
578*5113495bSYour Name 				 qdf_list_t *list))
579*5113495bSYour Name {
580*5113495bSYour Name }
581*5113495bSYour Name #else
582*5113495bSYour Name void wlan_cm_set_candidate_advance_filter_cb(
583*5113495bSYour Name 		struct wlan_objmgr_vdev *vdev,
584*5113495bSYour Name 		void (*filter_fun)(struct wlan_objmgr_vdev *vdev,
585*5113495bSYour Name 				   struct scan_filter *filter));
586*5113495bSYour Name 
587*5113495bSYour Name void wlan_cm_set_candidate_custom_sort_cb(
588*5113495bSYour Name 		struct wlan_objmgr_vdev *vdev,
589*5113495bSYour Name 		void (*sort_fun)(struct wlan_objmgr_vdev *vdev,
590*5113495bSYour Name 				 qdf_list_t *list));
591*5113495bSYour Name #endif
592*5113495bSYour Name 
593*5113495bSYour Name /**
594*5113495bSYour Name  * wlan_cm_get_rnr() - get rnr
595*5113495bSYour Name  * @vdev:vdev
596*5113495bSYour Name  * @cm_id: connect mgr id
597*5113495bSYour Name  * @rnr: pointer to copy rnr info
598*5113495bSYour Name  *
599*5113495bSYour Name  * Return: QDF_STATUS
600*5113495bSYour Name  */
601*5113495bSYour Name QDF_STATUS wlan_cm_get_rnr(struct wlan_objmgr_vdev *vdev, wlan_cm_id cm_id,
602*5113495bSYour Name 			   struct reduced_neighbor_report *rnr);
603*5113495bSYour Name 
604*5113495bSYour Name /**
605*5113495bSYour Name  * wlan_cm_get_curr_candidate_entry() - Get current candidate from cnx mgr
606*5113495bSYour Name  * @vdev: VDEV object manager
607*5113495bSYour Name  * @cm_id: cnx mgr ID
608*5113495bSYour Name  *
609*5113495bSYour Name  * Get the current candidate for connection from cnx mgr.
610*5113495bSYour Name  *
611*5113495bSYour Name  * Return: Scan entry
612*5113495bSYour Name  */
613*5113495bSYour Name struct scan_cache_entry *
614*5113495bSYour Name wlan_cm_get_curr_candidate_entry(struct wlan_objmgr_vdev *vdev,
615*5113495bSYour Name 				 wlan_cm_id cm_id);
616*5113495bSYour Name 
617*5113495bSYour Name /**
618*5113495bSYour Name  * wlan_cm_disc_cont_after_rso_stop() - Continue disconnect after RSO stop
619*5113495bSYour Name  * @vdev: Objmgr vdev
620*5113495bSYour Name  * @req: pointer to cm vdev disconnect req
621*5113495bSYour Name  *
622*5113495bSYour Name  * Continue disconnect after RSO stop response is receive from south bound.
623*5113495bSYour Name  * This is a wrapper to call core API cm_disconnect_continue_after_rso_stop
624*5113495bSYour Name  * by acquiring cm_lock through cm_sm_deliver_event.
625*5113495bSYour Name  *
626*5113495bSYour Name  * Return: QDF_STATUS
627*5113495bSYour Name  */
628*5113495bSYour Name QDF_STATUS
629*5113495bSYour Name wlan_cm_disc_cont_after_rso_stop(struct wlan_objmgr_vdev *vdev,
630*5113495bSYour Name 				 struct wlan_cm_vdev_discon_req *req);
631*5113495bSYour Name 
632*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
633*5113495bSYour Name /**
634*5113495bSYour Name  * wlan_cm_sta_set_chan_param() - set channel parameters for 802.11be sta
635*5113495bSYour Name  *
636*5113495bSYour Name  * @vdev: vdev
637*5113495bSYour Name  * @ch_freq: operating channel frequency
638*5113495bSYour Name  * @ori_bw: bandwidth information according to EHT operation IE
639*5113495bSYour Name  * @ori_punc: original puncture bitmap from EHT operation IE
640*5113495bSYour Name  * @ccfs0: EHT channel center frequency segment0 information
641*5113495bSYour Name  * @ccfs1: EHT channel center frequency segment1 information
642*5113495bSYour Name  * @chan_param: chan_param to be set
643*5113495bSYour Name  *
644*5113495bSYour Name  * ori_bw, ori_punc, ccfs0, ccfs1 are information from AP EHT operation IE
645*5113495bSYour Name  * chan_param->ch_width is the intersected channel width based on STA's
646*5113495bSYour Name  * capability. Complete chan_param including puncture will be set if
647*5113495bSYour Name  * it returns success.
648*5113495bSYour Name  *
649*5113495bSYour Name  * Return: QDF_STATUS
650*5113495bSYour Name  */
651*5113495bSYour Name QDF_STATUS wlan_cm_sta_set_chan_param(struct wlan_objmgr_vdev *vdev,
652*5113495bSYour Name 				      qdf_freq_t ch_freq,
653*5113495bSYour Name 				      enum phy_ch_width ori_bw,
654*5113495bSYour Name 				      uint16_t ori_punc,
655*5113495bSYour Name 				      uint8_t ccfs0, uint8_t ccfs1,
656*5113495bSYour Name 				      struct ch_params *chan_param);
657*5113495bSYour Name 
658*5113495bSYour Name /**
659*5113495bSYour Name  * wlan_cm_sta_update_bw_puncture() - update puncture and channel width for sta
660*5113495bSYour Name  * @vdev: vdev
661*5113495bSYour Name  * @peer_mac: peer mac address
662*5113495bSYour Name  * @ori_punc: original puncture bitmap from EHT operation IE
663*5113495bSYour Name  * @ori_bw: bandwidth information according to EHT operation IE
664*5113495bSYour Name  * @ccfs0: EHT Channel Centre Frequency Segment0 information
665*5113495bSYour Name  * @ccfs1: EHT Channel Centre Frequency Segment1 information
666*5113495bSYour Name  * @new_bw: bandwidth to be set
667*5113495bSYour Name  */
668*5113495bSYour Name QDF_STATUS wlan_cm_sta_update_bw_puncture(struct wlan_objmgr_vdev *vdev,
669*5113495bSYour Name 					  uint8_t *peer_mac,
670*5113495bSYour Name 					  uint16_t ori_punc,
671*5113495bSYour Name 					  enum phy_ch_width ori_bw,
672*5113495bSYour Name 					  uint8_t ccfs0, uint8_t ccfs1,
673*5113495bSYour Name 					  enum phy_ch_width new_bw);
674*5113495bSYour Name #endif /* WLAN_FEATURE_11BE */
675*5113495bSYour Name 
676*5113495bSYour Name #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_FEATURE_11BE_MLO_ADV_FEATURE)
677*5113495bSYour Name 
678*5113495bSYour Name /**
679*5113495bSYour Name  * wlan_cm_check_mlo_roam_auth_status - api to check roam auth status on link
680*5113495bSYour Name  * @vdev: vdev corresponds to given link
681*5113495bSYour Name  *
682*5113495bSYour Name  * This api will be called to check if roam auth status is connected
683*5113495bSYour Name  *
684*5113495bSYour Name  * Return: boolean true or false
685*5113495bSYour Name  */
686*5113495bSYour Name bool
687*5113495bSYour Name wlan_cm_check_mlo_roam_auth_status(struct wlan_objmgr_vdev *vdev);
688*5113495bSYour Name #else
689*5113495bSYour Name static inline bool
wlan_cm_check_mlo_roam_auth_status(struct wlan_objmgr_vdev * vdev)690*5113495bSYour Name wlan_cm_check_mlo_roam_auth_status(struct wlan_objmgr_vdev *vdev)
691*5113495bSYour Name {
692*5113495bSYour Name 	return false;
693*5113495bSYour Name }
694*5113495bSYour Name #endif
695*5113495bSYour Name 
696*5113495bSYour Name /**
697*5113495bSYour Name  * wlan_cm_bss_mlo_type() - Check if the scan entry is of MLO type
698*5113495bSYour Name  * @psoc: Pointer to psoc
699*5113495bSYour Name  * @entry: scan cache entry
700*5113495bSYour Name  * @scan_list: list of scan entries to look for if @entry is of ML type
701*5113495bSYour Name  *
702*5113495bSYour Name  * Return: MLO AP type: SLO, MLMR or EMLSR.
703*5113495bSYour Name  */
704*5113495bSYour Name enum MLO_TYPE
705*5113495bSYour Name wlan_cm_bss_mlo_type(struct wlan_objmgr_psoc *psoc,
706*5113495bSYour Name 		     struct scan_cache_entry *entry,
707*5113495bSYour Name 		     qdf_list_t *scan_list);
708*5113495bSYour Name 
709*5113495bSYour Name #ifdef WLAN_FEATURE_LL_LT_SAP
710*5113495bSYour Name /**
711*5113495bSYour Name  * wlan_cm_bearer_switch_resp() - Bearer switch response
712*5113495bSYour Name  * @psoc: psoc pointer
713*5113495bSYour Name  * @vdev_id: vdev id
714*5113495bSYour Name  * @cm_id: connection ID which gave the hw mode change request
715*5113495bSYour Name  * @status: status of the Bearer switch
716*5113495bSYour Name  *
717*5113495bSYour Name  * Return: void
718*5113495bSYour Name  */
719*5113495bSYour Name void wlan_cm_bearer_switch_resp(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
720*5113495bSYour Name 				wlan_cm_id cm_id, QDF_STATUS status);
721*5113495bSYour Name #endif /* WLAN_FEATURE_LL_LT_SAP */
722*5113495bSYour Name #endif /* __WLAN_CM_UCFG_API_H */
723