xref: /wlan-driver/qca-wifi-host-cmn/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_api.c (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2012-2015, 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.c
20*5113495bSYour Name  *
21*5113495bSYour Name  * This file maintains definitaions public apis.
22*5113495bSYour Name  */
23*5113495bSYour Name 
24*5113495bSYour Name #include <wlan_cm_api.h>
25*5113495bSYour Name #include "connection_mgr/core/src/wlan_cm_main_api.h"
26*5113495bSYour Name #include "connection_mgr/core/src/wlan_cm_roam.h"
27*5113495bSYour Name #include <wlan_vdev_mgr_utils_api.h>
28*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
29*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
30*5113495bSYour Name #include "wlan_mlo_mgr_roam.h"
31*5113495bSYour Name #endif
32*5113495bSYour Name #endif
33*5113495bSYour Name 
wlan_cm_start_connect(struct wlan_objmgr_vdev * vdev,struct wlan_cm_connect_req * req)34*5113495bSYour Name QDF_STATUS wlan_cm_start_connect(struct wlan_objmgr_vdev *vdev,
35*5113495bSYour Name 				 struct wlan_cm_connect_req *req)
36*5113495bSYour Name {
37*5113495bSYour Name 	return cm_connect_start_req(vdev, req);
38*5113495bSYour Name }
39*5113495bSYour Name 
wlan_cm_disconnect(struct wlan_objmgr_vdev * vdev,enum wlan_cm_source source,enum wlan_reason_code reason_code,struct qdf_mac_addr * bssid)40*5113495bSYour Name QDF_STATUS wlan_cm_disconnect(struct wlan_objmgr_vdev *vdev,
41*5113495bSYour Name 			      enum wlan_cm_source source,
42*5113495bSYour Name 			      enum wlan_reason_code reason_code,
43*5113495bSYour Name 			      struct qdf_mac_addr *bssid)
44*5113495bSYour Name {
45*5113495bSYour Name 	struct wlan_cm_disconnect_req req = {0};
46*5113495bSYour Name 
47*5113495bSYour Name 	req.vdev_id = wlan_vdev_get_id(vdev);
48*5113495bSYour Name 	req.source = source;
49*5113495bSYour Name 	req.reason_code = reason_code;
50*5113495bSYour Name 	if (bssid)
51*5113495bSYour Name 		qdf_copy_macaddr(&req.bssid, bssid);
52*5113495bSYour Name 
53*5113495bSYour Name 	return cm_disconnect_start_req(vdev, &req);
54*5113495bSYour Name }
55*5113495bSYour Name 
wlan_cm_disconnect_sync(struct wlan_objmgr_vdev * vdev,enum wlan_cm_source source,enum wlan_reason_code reason_code)56*5113495bSYour Name QDF_STATUS wlan_cm_disconnect_sync(struct wlan_objmgr_vdev *vdev,
57*5113495bSYour Name 				   enum wlan_cm_source source,
58*5113495bSYour Name 				   enum wlan_reason_code reason_code)
59*5113495bSYour Name {
60*5113495bSYour Name 	struct wlan_cm_disconnect_req req = {0};
61*5113495bSYour Name 
62*5113495bSYour Name 	req.vdev_id = wlan_vdev_get_id(vdev);
63*5113495bSYour Name 	req.source = source;
64*5113495bSYour Name 	req.reason_code = reason_code;
65*5113495bSYour Name 
66*5113495bSYour Name 	return cm_disconnect_start_req_sync(vdev, &req);
67*5113495bSYour Name }
68*5113495bSYour Name 
wlan_cm_bss_select_ind_rsp(struct wlan_objmgr_vdev * vdev,QDF_STATUS status)69*5113495bSYour Name QDF_STATUS wlan_cm_bss_select_ind_rsp(struct wlan_objmgr_vdev *vdev,
70*5113495bSYour Name 				      QDF_STATUS status)
71*5113495bSYour Name {
72*5113495bSYour Name 	return cm_bss_select_ind_rsp(vdev, status);
73*5113495bSYour Name }
74*5113495bSYour Name 
wlan_cm_bss_peer_create_rsp(struct wlan_objmgr_vdev * vdev,QDF_STATUS status,struct qdf_mac_addr * peer_mac)75*5113495bSYour Name QDF_STATUS wlan_cm_bss_peer_create_rsp(struct wlan_objmgr_vdev *vdev,
76*5113495bSYour Name 				       QDF_STATUS status,
77*5113495bSYour Name 				       struct qdf_mac_addr *peer_mac)
78*5113495bSYour Name {
79*5113495bSYour Name 	uint32_t prefix;
80*5113495bSYour Name 	struct cnx_mgr *cm_ctx = cm_get_cm_ctx(vdev);
81*5113495bSYour Name 
82*5113495bSYour Name 	if (!cm_ctx)
83*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
84*5113495bSYour Name 
85*5113495bSYour Name 	prefix = CM_ID_GET_PREFIX(cm_ctx->active_cm_id);
86*5113495bSYour Name 	if (prefix == ROAM_REQ_PREFIX)
87*5113495bSYour Name 		return cm_roam_bss_peer_create_rsp(vdev, status, peer_mac);
88*5113495bSYour Name 	else
89*5113495bSYour Name 		return cm_bss_peer_create_rsp(vdev, status, peer_mac);
90*5113495bSYour Name }
91*5113495bSYour Name 
wlan_cm_update_scan_mlme_info(struct wlan_objmgr_vdev * vdev,struct wlan_cm_connect_resp * resp)92*5113495bSYour Name void wlan_cm_update_scan_mlme_info(struct wlan_objmgr_vdev *vdev,
93*5113495bSYour Name 				   struct wlan_cm_connect_resp *resp)
94*5113495bSYour Name {
95*5113495bSYour Name 	struct cnx_mgr *cm_ctx = cm_get_cm_ctx(vdev);
96*5113495bSYour Name 
97*5113495bSYour Name 	if (!cm_ctx)
98*5113495bSYour Name 		return;
99*5113495bSYour Name 
100*5113495bSYour Name 	return cm_update_scan_mlme_info(cm_ctx, resp);
101*5113495bSYour Name }
102*5113495bSYour Name 
wlan_cm_connect_rsp(struct wlan_objmgr_vdev * vdev,struct wlan_cm_connect_resp * resp)103*5113495bSYour Name QDF_STATUS wlan_cm_connect_rsp(struct wlan_objmgr_vdev *vdev,
104*5113495bSYour Name 			       struct wlan_cm_connect_resp *resp)
105*5113495bSYour Name {
106*5113495bSYour Name 	return cm_connect_rsp(vdev, resp);
107*5113495bSYour Name }
108*5113495bSYour Name 
wlan_cm_bss_peer_delete_ind(struct wlan_objmgr_vdev * vdev,struct qdf_mac_addr * peer_mac)109*5113495bSYour Name QDF_STATUS wlan_cm_bss_peer_delete_ind(struct wlan_objmgr_vdev *vdev,
110*5113495bSYour Name 				       struct qdf_mac_addr *peer_mac)
111*5113495bSYour Name {
112*5113495bSYour Name 	return cm_bss_peer_delete_req(vdev, peer_mac);
113*5113495bSYour Name }
114*5113495bSYour Name 
wlan_cm_bss_peer_delete_rsp(struct wlan_objmgr_vdev * vdev,uint32_t status)115*5113495bSYour Name QDF_STATUS wlan_cm_bss_peer_delete_rsp(struct wlan_objmgr_vdev *vdev,
116*5113495bSYour Name 				       uint32_t status)
117*5113495bSYour Name {
118*5113495bSYour Name 	return cm_vdev_down_req(vdev, status);
119*5113495bSYour Name }
120*5113495bSYour Name 
wlan_cm_disconnect_rsp(struct wlan_objmgr_vdev * vdev,struct wlan_cm_discon_rsp * resp)121*5113495bSYour Name QDF_STATUS wlan_cm_disconnect_rsp(struct wlan_objmgr_vdev *vdev,
122*5113495bSYour Name 				  struct wlan_cm_discon_rsp *resp)
123*5113495bSYour Name {
124*5113495bSYour Name 	uint32_t prefix;
125*5113495bSYour Name 	struct cnx_mgr *cm_ctx = cm_get_cm_ctx(vdev);
126*5113495bSYour Name 
127*5113495bSYour Name 	if (!cm_ctx)
128*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
129*5113495bSYour Name 
130*5113495bSYour Name 	prefix = CM_ID_GET_PREFIX(cm_ctx->active_cm_id);
131*5113495bSYour Name 	if (prefix == ROAM_REQ_PREFIX)
132*5113495bSYour Name 		return cm_roam_disconnect_rsp(vdev, resp);
133*5113495bSYour Name 	else
134*5113495bSYour Name 		return cm_disconnect_rsp(vdev, resp);
135*5113495bSYour Name }
136*5113495bSYour Name 
137*5113495bSYour Name #ifdef WLAN_FEATURE_HOST_ROAM
wlan_cm_reassoc_rsp(struct wlan_objmgr_vdev * vdev,struct wlan_cm_connect_resp * resp)138*5113495bSYour Name QDF_STATUS wlan_cm_reassoc_rsp(struct wlan_objmgr_vdev *vdev,
139*5113495bSYour Name 			       struct wlan_cm_connect_resp *resp)
140*5113495bSYour Name {
141*5113495bSYour Name 	return cm_reassoc_rsp(vdev, resp);
142*5113495bSYour Name }
143*5113495bSYour Name #endif
144*5113495bSYour Name 
wlan_cm_free_connect_req(struct wlan_cm_connect_req * connect_req)145*5113495bSYour Name void wlan_cm_free_connect_req(struct wlan_cm_connect_req *connect_req)
146*5113495bSYour Name {
147*5113495bSYour Name 	if (!connect_req)
148*5113495bSYour Name 		return;
149*5113495bSYour Name 
150*5113495bSYour Name 	cm_free_connect_req(connect_req);
151*5113495bSYour Name }
152*5113495bSYour Name 
wlan_cm_free_connect_resp(struct wlan_cm_connect_resp * connect_rsp)153*5113495bSYour Name void wlan_cm_free_connect_resp(struct wlan_cm_connect_resp *connect_rsp)
154*5113495bSYour Name {
155*5113495bSYour Name 	if (!connect_rsp)
156*5113495bSYour Name 		return;
157*5113495bSYour Name 
158*5113495bSYour Name 	cm_free_connect_rsp(connect_rsp);
159*5113495bSYour Name }
160*5113495bSYour Name 
wlan_cm_free_connect_req_param(struct wlan_cm_connect_req * req)161*5113495bSYour Name void wlan_cm_free_connect_req_param(struct wlan_cm_connect_req *req)
162*5113495bSYour Name {
163*5113495bSYour Name 	if (!req)
164*5113495bSYour Name 		return;
165*5113495bSYour Name 
166*5113495bSYour Name 	cm_free_connect_req_param(req);
167*5113495bSYour Name }
168*5113495bSYour Name 
wlan_cm_set_max_connect_attempts(struct wlan_objmgr_vdev * vdev,uint8_t max_connect_attempts)169*5113495bSYour Name void wlan_cm_set_max_connect_attempts(struct wlan_objmgr_vdev *vdev,
170*5113495bSYour Name 				      uint8_t max_connect_attempts)
171*5113495bSYour Name {
172*5113495bSYour Name 	cm_set_max_connect_attempts(vdev, max_connect_attempts);
173*5113495bSYour Name }
174*5113495bSYour Name 
wlan_cm_set_max_connect_timeout(struct wlan_objmgr_vdev * vdev,uint32_t max_connect_timeout)175*5113495bSYour Name void wlan_cm_set_max_connect_timeout(struct wlan_objmgr_vdev *vdev,
176*5113495bSYour Name 				     uint32_t max_connect_timeout)
177*5113495bSYour Name {
178*5113495bSYour Name 	cm_set_max_connect_timeout(vdev, max_connect_timeout);
179*5113495bSYour Name }
180*5113495bSYour Name 
wlan_cm_is_vdev_connecting(struct wlan_objmgr_vdev * vdev)181*5113495bSYour Name bool wlan_cm_is_vdev_connecting(struct wlan_objmgr_vdev *vdev)
182*5113495bSYour Name {
183*5113495bSYour Name 	return cm_is_vdev_connecting(vdev);
184*5113495bSYour Name }
185*5113495bSYour Name 
wlan_cm_is_vdev_connected(struct wlan_objmgr_vdev * vdev)186*5113495bSYour Name bool wlan_cm_is_vdev_connected(struct wlan_objmgr_vdev *vdev)
187*5113495bSYour Name {
188*5113495bSYour Name 	return cm_is_vdev_connected(vdev);
189*5113495bSYour Name }
190*5113495bSYour Name 
wlan_cm_is_vdev_active(struct wlan_objmgr_vdev * vdev)191*5113495bSYour Name bool wlan_cm_is_vdev_active(struct wlan_objmgr_vdev *vdev)
192*5113495bSYour Name {
193*5113495bSYour Name 	return cm_is_vdev_active(vdev);
194*5113495bSYour Name }
195*5113495bSYour Name 
wlan_cm_is_vdev_disconnecting(struct wlan_objmgr_vdev * vdev)196*5113495bSYour Name bool wlan_cm_is_vdev_disconnecting(struct wlan_objmgr_vdev *vdev)
197*5113495bSYour Name {
198*5113495bSYour Name 	return cm_is_vdev_disconnecting(vdev);
199*5113495bSYour Name }
200*5113495bSYour Name 
wlan_cm_is_vdev_disconnected(struct wlan_objmgr_vdev * vdev)201*5113495bSYour Name bool wlan_cm_is_vdev_disconnected(struct wlan_objmgr_vdev *vdev)
202*5113495bSYour Name {
203*5113495bSYour Name 	return cm_is_vdev_disconnected(vdev);
204*5113495bSYour Name }
205*5113495bSYour Name 
wlan_cm_is_vdev_idle_due_to_link_switch(struct wlan_objmgr_vdev * vdev)206*5113495bSYour Name bool wlan_cm_is_vdev_idle_due_to_link_switch(struct wlan_objmgr_vdev *vdev)
207*5113495bSYour Name {
208*5113495bSYour Name 	return cm_is_vdev_idle_due_to_link_switch(vdev);
209*5113495bSYour Name }
210*5113495bSYour Name 
wlan_cm_is_vdev_roaming(struct wlan_objmgr_vdev * vdev)211*5113495bSYour Name bool wlan_cm_is_vdev_roaming(struct wlan_objmgr_vdev *vdev)
212*5113495bSYour Name {
213*5113495bSYour Name 	return cm_is_vdev_roaming(vdev);
214*5113495bSYour Name }
215*5113495bSYour Name 
216*5113495bSYour Name #ifdef WLAN_FEATURE_ROAM_OFFLOAD
wlan_cm_is_vdev_roam_started(struct wlan_objmgr_vdev * vdev)217*5113495bSYour Name bool wlan_cm_is_vdev_roam_started(struct wlan_objmgr_vdev *vdev)
218*5113495bSYour Name {
219*5113495bSYour Name 	return cm_is_vdev_roam_started(vdev);
220*5113495bSYour Name }
221*5113495bSYour Name 
wlan_cm_is_vdev_roam_sync_inprogress(struct wlan_objmgr_vdev * vdev)222*5113495bSYour Name bool wlan_cm_is_vdev_roam_sync_inprogress(struct wlan_objmgr_vdev *vdev)
223*5113495bSYour Name {
224*5113495bSYour Name 	return cm_is_vdev_roam_sync_inprogress(vdev);
225*5113495bSYour Name }
226*5113495bSYour Name #endif
227*5113495bSYour Name 
228*5113495bSYour Name #ifdef WLAN_FEATURE_HOST_ROAM
wlan_cm_is_vdev_roam_preauth_state(struct wlan_objmgr_vdev * vdev)229*5113495bSYour Name bool wlan_cm_is_vdev_roam_preauth_state(struct wlan_objmgr_vdev *vdev)
230*5113495bSYour Name {
231*5113495bSYour Name 	return cm_is_vdev_roam_preauth_state(vdev);
232*5113495bSYour Name }
233*5113495bSYour Name 
wlan_cm_is_vdev_roam_reassoc_state(struct wlan_objmgr_vdev * vdev)234*5113495bSYour Name bool wlan_cm_is_vdev_roam_reassoc_state(struct wlan_objmgr_vdev *vdev)
235*5113495bSYour Name {
236*5113495bSYour Name 	return cm_is_vdev_roam_reassoc_state(vdev);
237*5113495bSYour Name }
238*5113495bSYour Name #endif
239*5113495bSYour Name 
240*5113495bSYour Name enum wlan_cm_active_request_type
wlan_cm_get_active_req_type(struct wlan_objmgr_vdev * vdev)241*5113495bSYour Name wlan_cm_get_active_req_type(struct wlan_objmgr_vdev *vdev)
242*5113495bSYour Name {
243*5113495bSYour Name 	return cm_get_active_req_type(vdev);
244*5113495bSYour Name }
245*5113495bSYour Name 
wlan_cm_get_active_connect_req(struct wlan_objmgr_vdev * vdev,struct wlan_cm_vdev_connect_req * req)246*5113495bSYour Name bool wlan_cm_get_active_connect_req(struct wlan_objmgr_vdev *vdev,
247*5113495bSYour Name 				    struct wlan_cm_vdev_connect_req *req)
248*5113495bSYour Name {
249*5113495bSYour Name 	return cm_get_active_connect_req(vdev, req);
250*5113495bSYour Name }
251*5113495bSYour Name 
252*5113495bSYour Name QDF_STATUS
wlan_cm_get_active_connect_req_param(struct wlan_objmgr_vdev * vdev,struct wlan_cm_connect_req * req)253*5113495bSYour Name wlan_cm_get_active_connect_req_param(struct wlan_objmgr_vdev *vdev,
254*5113495bSYour Name 				     struct wlan_cm_connect_req *req)
255*5113495bSYour Name {
256*5113495bSYour Name 	return cm_get_active_connect_req_param(vdev, req);
257*5113495bSYour Name }
258*5113495bSYour Name 
wlan_cm_get_ext_hdl(struct wlan_objmgr_vdev * vdev)259*5113495bSYour Name cm_ext_t *wlan_cm_get_ext_hdl(struct wlan_objmgr_vdev *vdev)
260*5113495bSYour Name {
261*5113495bSYour Name 	return cm_get_ext_hdl(vdev);
262*5113495bSYour Name }
263*5113495bSYour Name 
wlan_cm_is_first_candidate_connect_attempt(struct wlan_objmgr_vdev * vdev)264*5113495bSYour Name bool wlan_cm_is_first_candidate_connect_attempt(struct wlan_objmgr_vdev *vdev)
265*5113495bSYour Name {
266*5113495bSYour Name 	return cm_is_first_candidate_connect_attempt(vdev);
267*5113495bSYour Name }
268*5113495bSYour Name 
wlan_cm_is_link_switch_disconnect_resp(struct wlan_cm_discon_rsp * resp)269*5113495bSYour Name bool wlan_cm_is_link_switch_disconnect_resp(struct wlan_cm_discon_rsp *resp)
270*5113495bSYour Name {
271*5113495bSYour Name 	return cm_is_link_switch_disconnect_resp(resp);
272*5113495bSYour Name }
273*5113495bSYour Name 
wlan_cm_is_link_switch_connect_resp(struct wlan_cm_connect_resp * resp)274*5113495bSYour Name bool wlan_cm_is_link_switch_connect_resp(struct wlan_cm_connect_resp *resp)
275*5113495bSYour Name {
276*5113495bSYour Name 	return cm_is_link_switch_connect_resp(resp);
277*5113495bSYour Name }
278*5113495bSYour Name 
wlan_cm_trigger_panic_on_cmd_timeout(struct wlan_objmgr_vdev * vdev,enum qdf_hang_reason reason)279*5113495bSYour Name void wlan_cm_trigger_panic_on_cmd_timeout(struct wlan_objmgr_vdev *vdev,
280*5113495bSYour Name 					  enum qdf_hang_reason reason)
281*5113495bSYour Name {
282*5113495bSYour Name 	cm_trigger_panic_on_cmd_timeout(vdev, reason);
283*5113495bSYour Name }
284*5113495bSYour Name 
285*5113495bSYour Name #ifdef WLAN_FEATURE_HOST_ROAM
wlan_cm_get_active_reassoc_req(struct wlan_objmgr_vdev * vdev,struct wlan_cm_vdev_reassoc_req * req)286*5113495bSYour Name bool wlan_cm_get_active_reassoc_req(struct wlan_objmgr_vdev *vdev,
287*5113495bSYour Name 				    struct wlan_cm_vdev_reassoc_req *req)
288*5113495bSYour Name {
289*5113495bSYour Name 	return cm_get_active_reassoc_req(vdev, req);
290*5113495bSYour Name }
291*5113495bSYour Name #endif
292*5113495bSYour Name 
wlan_cm_get_active_disconnect_req(struct wlan_objmgr_vdev * vdev,struct wlan_cm_vdev_discon_req * req)293*5113495bSYour Name bool wlan_cm_get_active_disconnect_req(struct wlan_objmgr_vdev *vdev,
294*5113495bSYour Name 				       struct wlan_cm_vdev_discon_req *req)
295*5113495bSYour Name {
296*5113495bSYour Name 	return cm_get_active_disconnect_req(vdev, req);
297*5113495bSYour Name }
298*5113495bSYour Name 
wlan_cm_reason_code_to_str(enum wlan_reason_code reason)299*5113495bSYour Name const char *wlan_cm_reason_code_to_str(enum wlan_reason_code reason)
300*5113495bSYour Name {
301*5113495bSYour Name 	if (reason > REASON_PROP_START)
302*5113495bSYour Name 		return "";
303*5113495bSYour Name 
304*5113495bSYour Name 	switch (reason) {
305*5113495bSYour Name 	CASE_RETURN_STRING(REASON_UNSPEC_FAILURE);
306*5113495bSYour Name 	CASE_RETURN_STRING(REASON_PREV_AUTH_NOT_VALID);
307*5113495bSYour Name 	CASE_RETURN_STRING(REASON_DEAUTH_NETWORK_LEAVING);
308*5113495bSYour Name 	CASE_RETURN_STRING(REASON_DISASSOC_DUE_TO_INACTIVITY);
309*5113495bSYour Name 	CASE_RETURN_STRING(REASON_DISASSOC_AP_BUSY);
310*5113495bSYour Name 	CASE_RETURN_STRING(REASON_CLASS2_FRAME_FROM_NON_AUTH_STA);
311*5113495bSYour Name 	CASE_RETURN_STRING(REASON_CLASS3_FRAME_FROM_NON_ASSOC_STA);
312*5113495bSYour Name 	CASE_RETURN_STRING(REASON_DISASSOC_NETWORK_LEAVING);
313*5113495bSYour Name 	CASE_RETURN_STRING(REASON_STA_NOT_AUTHENTICATED);
314*5113495bSYour Name 	CASE_RETURN_STRING(REASON_BAD_PWR_CAPABILITY);
315*5113495bSYour Name 	CASE_RETURN_STRING(REASON_BAD_SUPPORTED_CHANNELS);
316*5113495bSYour Name 	CASE_RETURN_STRING(REASON_DISASSOC_BSS_TRANSITION);
317*5113495bSYour Name 	CASE_RETURN_STRING(REASON_INVALID_IE);
318*5113495bSYour Name 	CASE_RETURN_STRING(REASON_MIC_FAILURE);
319*5113495bSYour Name 	CASE_RETURN_STRING(REASON_4WAY_HANDSHAKE_TIMEOUT);
320*5113495bSYour Name 	CASE_RETURN_STRING(REASON_GROUP_KEY_UPDATE_TIMEOUT);
321*5113495bSYour Name 	CASE_RETURN_STRING(REASON_IN_4WAY_DIFFERS);
322*5113495bSYour Name 	CASE_RETURN_STRING(REASON_INVALID_GROUP_CIPHER);
323*5113495bSYour Name 	CASE_RETURN_STRING(REASON_INVALID_PAIRWISE_CIPHER);
324*5113495bSYour Name 	CASE_RETURN_STRING(REASON_INVALID_AKMP);
325*5113495bSYour Name 	CASE_RETURN_STRING(REASON_UNSUPPORTED_RSNE_VER);
326*5113495bSYour Name 	CASE_RETURN_STRING(REASON_INVALID_RSNE_CAPABILITIES);
327*5113495bSYour Name 	CASE_RETURN_STRING(REASON_1X_AUTH_FAILURE);
328*5113495bSYour Name 	CASE_RETURN_STRING(REASON_CIPHER_SUITE_REJECTED);
329*5113495bSYour Name 	CASE_RETURN_STRING(REASON_TDLS_PEER_UNREACHABLE);
330*5113495bSYour Name 	CASE_RETURN_STRING(REASON_TDLS_UNSPEC);
331*5113495bSYour Name 	CASE_RETURN_STRING(REASON_DISASSOC_SSP_REQUESTED);
332*5113495bSYour Name 	CASE_RETURN_STRING(REASON_NO_SSP_ROAMING_AGREEMENT);
333*5113495bSYour Name 	CASE_RETURN_STRING(REASON_BAD_CIPHER_OR_AKM);
334*5113495bSYour Name 	CASE_RETURN_STRING(REASON_LOCATION_NOT_AUTHORIZED);
335*5113495bSYour Name 	CASE_RETURN_STRING(REASON_SERVICE_CHANGE_PRECLUDES_TS);
336*5113495bSYour Name 	CASE_RETURN_STRING(REASON_QOS_UNSPECIFIED);
337*5113495bSYour Name 	CASE_RETURN_STRING(REASON_NO_BANDWIDTH);
338*5113495bSYour Name 	CASE_RETURN_STRING(REASON_XS_UNACKED_FRAMES);
339*5113495bSYour Name 	CASE_RETURN_STRING(REASON_EXCEEDED_TXOP);
340*5113495bSYour Name 	CASE_RETURN_STRING(REASON_STA_LEAVING);
341*5113495bSYour Name 	CASE_RETURN_STRING(REASON_END_TS_BA_DLS);
342*5113495bSYour Name 	CASE_RETURN_STRING(REASON_UNKNOWN_TS_BA);
343*5113495bSYour Name 	CASE_RETURN_STRING(REASON_TIMEDOUT);
344*5113495bSYour Name 	CASE_RETURN_STRING(REASON_PEERKEY_MISMATCH);
345*5113495bSYour Name 	CASE_RETURN_STRING(REASON_AUTHORIZED_ACCESS_LIMIT_REACHED);
346*5113495bSYour Name 	CASE_RETURN_STRING(REASON_EXTERNAL_SERVICE_REQUIREMENTS);
347*5113495bSYour Name 	CASE_RETURN_STRING(REASON_INVALID_FT_ACTION_FRAME_COUNT);
348*5113495bSYour Name 	CASE_RETURN_STRING(REASON_INVALID_PMKID);
349*5113495bSYour Name 	CASE_RETURN_STRING(REASON_INVALID_MDE);
350*5113495bSYour Name 	CASE_RETURN_STRING(REASON_INVALID_FTE);
351*5113495bSYour Name 	CASE_RETURN_STRING(REASON_MESH_PEERING_CANCELLED);
352*5113495bSYour Name 	CASE_RETURN_STRING(REASON_MESH_MAX_PEERS);
353*5113495bSYour Name 	CASE_RETURN_STRING(REASON_MESH_CONFIG_POLICY_VIOLATION);
354*5113495bSYour Name 	CASE_RETURN_STRING(REASON_MESH_CLOSE_RCVD);
355*5113495bSYour Name 	CASE_RETURN_STRING(REASON_MESH_MAX_RETRIES);
356*5113495bSYour Name 	CASE_RETURN_STRING(REASON_MESH_CONFIRM_TIMEOUT);
357*5113495bSYour Name 	CASE_RETURN_STRING(REASON_MESH_INVALID_GTK);
358*5113495bSYour Name 	CASE_RETURN_STRING(REASON_MESH_INCONSISTENT_PARAMS);
359*5113495bSYour Name 	CASE_RETURN_STRING(REASON_MESH_INVALID_SECURITY_CAP);
360*5113495bSYour Name 	CASE_RETURN_STRING(REASON_MESH_PATH_ERROR_NO_PROXY_INFO);
361*5113495bSYour Name 	CASE_RETURN_STRING(REASON_MESH_PATH_ERROR_NO_FORWARDING_INFO);
362*5113495bSYour Name 	CASE_RETURN_STRING(REASON_MESH_PATH_ERROR_DEST_UNREACHABLE);
363*5113495bSYour Name 	CASE_RETURN_STRING(REASON_MAC_ADDRESS_ALREADY_EXISTS_IN_MBSS);
364*5113495bSYour Name 	CASE_RETURN_STRING(REASON_MESH_CHANNEL_SWITCH_REGULATORY_REQ);
365*5113495bSYour Name 	CASE_RETURN_STRING(REASON_MESH_CHANNEL_SWITCH_UNSPECIFIED);
366*5113495bSYour Name 	CASE_RETURN_STRING(REASON_POOR_RSSI_CONDITIONS);
367*5113495bSYour Name 	default:
368*5113495bSYour Name 		return "Unknown";
369*5113495bSYour Name 	}
370*5113495bSYour Name }
371*5113495bSYour Name 
372*5113495bSYour Name #ifdef WLAN_POLICY_MGR_ENABLE
wlan_cm_hw_mode_change_resp(struct wlan_objmgr_pdev * pdev,uint8_t vdev_id,wlan_cm_id cm_id,QDF_STATUS status)373*5113495bSYour Name void wlan_cm_hw_mode_change_resp(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
374*5113495bSYour Name 				 wlan_cm_id cm_id, QDF_STATUS status)
375*5113495bSYour Name {
376*5113495bSYour Name 	uint32_t prefix;
377*5113495bSYour Name 
378*5113495bSYour Name 	prefix = CM_ID_GET_PREFIX(cm_id);
379*5113495bSYour Name 	if (prefix == ROAM_REQ_PREFIX)
380*5113495bSYour Name 		cm_reassoc_hw_mode_change_resp(pdev, vdev_id, cm_id, status);
381*5113495bSYour Name 	else
382*5113495bSYour Name 		cm_hw_mode_change_resp(pdev, vdev_id, cm_id, status);
383*5113495bSYour Name }
384*5113495bSYour Name #endif /* ifdef POLICY_MGR_ENABLE */
385*5113495bSYour Name 
386*5113495bSYour Name #ifdef WLAN_FEATURE_LL_LT_SAP
wlan_cm_bearer_switch_resp(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,wlan_cm_id cm_id,QDF_STATUS status)387*5113495bSYour Name void wlan_cm_bearer_switch_resp(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
388*5113495bSYour Name 				wlan_cm_id cm_id, QDF_STATUS status)
389*5113495bSYour Name {
390*5113495bSYour Name 	cm_bearer_switch_resp(psoc, vdev_id, cm_id, status);
391*5113495bSYour Name }
392*5113495bSYour Name #endif
393*5113495bSYour Name 
394*5113495bSYour Name #ifdef SM_ENG_HIST_ENABLE
wlan_cm_sm_history_print(struct wlan_objmgr_vdev * vdev)395*5113495bSYour Name void wlan_cm_sm_history_print(struct wlan_objmgr_vdev *vdev)
396*5113495bSYour Name {
397*5113495bSYour Name 	return cm_sm_history_print(vdev);
398*5113495bSYour Name }
399*5113495bSYour Name 
wlan_cm_req_history_print(struct wlan_objmgr_vdev * vdev)400*5113495bSYour Name void wlan_cm_req_history_print(struct wlan_objmgr_vdev *vdev)
401*5113495bSYour Name {
402*5113495bSYour Name 	struct cnx_mgr *cm_ctx = cm_get_cm_ctx(vdev);
403*5113495bSYour Name 
404*5113495bSYour Name 	if (!cm_ctx)
405*5113495bSYour Name 		return;
406*5113495bSYour Name 
407*5113495bSYour Name 	cm_req_history_print(cm_ctx);
408*5113495bSYour Name }
409*5113495bSYour Name #endif /* SM_ENG_HIST_ENABLE */
410*5113495bSYour Name 
411*5113495bSYour Name #ifndef CONN_MGR_ADV_FEATURE
wlan_cm_set_candidate_advance_filter_cb(struct wlan_objmgr_vdev * vdev,void (* filter_fun)(struct wlan_objmgr_vdev * vdev,struct scan_filter * filter))412*5113495bSYour Name void wlan_cm_set_candidate_advance_filter_cb(
413*5113495bSYour Name 		struct wlan_objmgr_vdev *vdev,
414*5113495bSYour Name 		void (*filter_fun)(struct wlan_objmgr_vdev *vdev,
415*5113495bSYour Name 				   struct scan_filter *filter))
416*5113495bSYour Name {
417*5113495bSYour Name 	cm_set_candidate_advance_filter_cb(vdev, filter_fun);
418*5113495bSYour Name }
419*5113495bSYour Name 
wlan_cm_set_candidate_custom_sort_cb(struct wlan_objmgr_vdev * vdev,void (* sort_fun)(struct wlan_objmgr_vdev * vdev,qdf_list_t * list))420*5113495bSYour Name void wlan_cm_set_candidate_custom_sort_cb(
421*5113495bSYour Name 		struct wlan_objmgr_vdev *vdev,
422*5113495bSYour Name 		void (*sort_fun)(struct wlan_objmgr_vdev *vdev,
423*5113495bSYour Name 				 qdf_list_t *list))
424*5113495bSYour Name {
425*5113495bSYour Name 	cm_set_candidate_custom_sort_cb(vdev, sort_fun);
426*5113495bSYour Name }
427*5113495bSYour Name 
428*5113495bSYour Name #endif
429*5113495bSYour Name 
wlan_cm_get_rnr(struct wlan_objmgr_vdev * vdev,wlan_cm_id cm_id,struct reduced_neighbor_report * rnr)430*5113495bSYour Name QDF_STATUS wlan_cm_get_rnr(struct wlan_objmgr_vdev *vdev, wlan_cm_id cm_id,
431*5113495bSYour Name 			   struct reduced_neighbor_report *rnr)
432*5113495bSYour Name {
433*5113495bSYour Name 	enum QDF_OPMODE op_mode = wlan_vdev_mlme_get_opmode(vdev);
434*5113495bSYour Name 
435*5113495bSYour Name 	if (op_mode != QDF_STA_MODE && op_mode != QDF_P2P_CLIENT_MODE) {
436*5113495bSYour Name 		mlme_err("vdev %d Invalid mode %d",
437*5113495bSYour Name 			 wlan_vdev_get_id(vdev), op_mode);
438*5113495bSYour Name 		return QDF_STATUS_E_NOSUPPORT;
439*5113495bSYour Name 	}
440*5113495bSYour Name 
441*5113495bSYour Name 	return cm_get_rnr(vdev, cm_id, rnr);
442*5113495bSYour Name }
443*5113495bSYour Name 
444*5113495bSYour Name struct scan_cache_entry *
wlan_cm_get_curr_candidate_entry(struct wlan_objmgr_vdev * vdev,wlan_cm_id cm_id)445*5113495bSYour Name wlan_cm_get_curr_candidate_entry(struct wlan_objmgr_vdev *vdev,
446*5113495bSYour Name 				 wlan_cm_id cm_id)
447*5113495bSYour Name {
448*5113495bSYour Name 	return cm_get_curr_candidate_entry(vdev, cm_id);
449*5113495bSYour Name }
450*5113495bSYour Name 
451*5113495bSYour Name void
wlan_cm_connect_resp_fill_mld_addr_from_cm_id(struct wlan_objmgr_vdev * vdev,wlan_cm_id cm_id,struct wlan_cm_connect_resp * rsp)452*5113495bSYour Name wlan_cm_connect_resp_fill_mld_addr_from_cm_id(struct wlan_objmgr_vdev *vdev,
453*5113495bSYour Name 					     wlan_cm_id cm_id,
454*5113495bSYour Name 					     struct wlan_cm_connect_resp *rsp)
455*5113495bSYour Name {
456*5113495bSYour Name 	return cm_connect_resp_fill_mld_addr_from_cm_id(vdev, cm_id, rsp);
457*5113495bSYour Name }
458*5113495bSYour Name 
459*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
460*5113495bSYour Name 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)461*5113495bSYour Name wlan_cm_connect_resp_fill_mld_addr_from_vdev_id(struct wlan_objmgr_psoc *psoc,
462*5113495bSYour Name 						uint8_t vdev_id,
463*5113495bSYour Name 						struct scan_cache_entry *entry,
464*5113495bSYour Name 						struct wlan_cm_connect_resp *rsp)
465*5113495bSYour Name {
466*5113495bSYour Name 	struct wlan_objmgr_vdev *vdev;
467*5113495bSYour Name 
468*5113495bSYour Name 	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
469*5113495bSYour Name 						    WLAN_MLME_CM_ID);
470*5113495bSYour Name 	if (!vdev)
471*5113495bSYour Name 		return;
472*5113495bSYour Name 
473*5113495bSYour Name 	cm_connect_resp_fill_mld_addr_from_candidate(vdev, entry, rsp);
474*5113495bSYour Name 	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
475*5113495bSYour Name }
476*5113495bSYour Name #endif
477*5113495bSYour Name 
478*5113495bSYour Name QDF_STATUS
wlan_cm_disc_cont_after_rso_stop(struct wlan_objmgr_vdev * vdev,struct wlan_cm_vdev_discon_req * req)479*5113495bSYour Name wlan_cm_disc_cont_after_rso_stop(struct wlan_objmgr_vdev *vdev,
480*5113495bSYour Name 				 struct wlan_cm_vdev_discon_req *req)
481*5113495bSYour Name {
482*5113495bSYour Name 	return cm_handle_rso_stop_rsp(vdev, req);
483*5113495bSYour Name }
484*5113495bSYour Name 
485*5113495bSYour Name #ifdef WLAN_FEATURE_11BE
wlan_cm_sta_set_chan_param(struct wlan_objmgr_vdev * vdev,qdf_freq_t ch_freq,enum phy_ch_width ori_bw,uint16_t ori_punc,uint8_t ccfs0,uint8_t ccfs1,struct ch_params * chan_param)486*5113495bSYour Name QDF_STATUS wlan_cm_sta_set_chan_param(struct wlan_objmgr_vdev *vdev,
487*5113495bSYour Name 				      qdf_freq_t ch_freq,
488*5113495bSYour Name 				      enum phy_ch_width ori_bw,
489*5113495bSYour Name 				      uint16_t ori_punc,
490*5113495bSYour Name 				      uint8_t ccfs0, uint8_t ccfs1,
491*5113495bSYour Name 				      struct ch_params *chan_param)
492*5113495bSYour Name {
493*5113495bSYour Name 	uint16_t primary_puncture_bitmap = 0;
494*5113495bSYour Name 	struct wlan_objmgr_pdev *pdev;
495*5113495bSYour Name 	struct reg_channel_list chan_list;
496*5113495bSYour Name 	qdf_freq_t sec_ch_2g_freq = 0;
497*5113495bSYour Name 	qdf_freq_t center_freq_320 = 0;
498*5113495bSYour Name 	qdf_freq_t center_freq_40 = 0;
499*5113495bSYour Name 	uint8_t band_mask;
500*5113495bSYour Name 	uint16_t new_punc = 0;
501*5113495bSYour Name 
502*5113495bSYour Name 	if (!vdev || !chan_param) {
503*5113495bSYour Name 		mlme_err("invalid input parameters");
504*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
505*5113495bSYour Name 	}
506*5113495bSYour Name 	pdev = wlan_vdev_get_pdev(vdev);
507*5113495bSYour Name 	if (!pdev) {
508*5113495bSYour Name 		mlme_err("invalid pdev");
509*5113495bSYour Name 		return QDF_STATUS_E_INVAL;
510*5113495bSYour Name 	}
511*5113495bSYour Name 	if (ori_bw == CH_WIDTH_320MHZ) {
512*5113495bSYour Name 		if (WLAN_REG_IS_6GHZ_CHAN_FREQ(ch_freq))
513*5113495bSYour Name 			band_mask = BIT(REG_BAND_6G);
514*5113495bSYour Name 		else
515*5113495bSYour Name 			band_mask = BIT(REG_BAND_5G);
516*5113495bSYour Name 		center_freq_320 = wlan_reg_chan_band_to_freq(pdev, ccfs1,
517*5113495bSYour Name 							     band_mask);
518*5113495bSYour Name 	} else if (ori_bw == CH_WIDTH_40MHZ) {
519*5113495bSYour Name 		if (WLAN_REG_IS_24GHZ_CH_FREQ(ch_freq)) {
520*5113495bSYour Name 			band_mask = BIT(REG_BAND_2G);
521*5113495bSYour Name 			center_freq_40 = wlan_reg_chan_band_to_freq(pdev,
522*5113495bSYour Name 								    ccfs0,
523*5113495bSYour Name 								    band_mask);
524*5113495bSYour Name 			if (center_freq_40 == ch_freq + BW_10_MHZ)
525*5113495bSYour Name 				sec_ch_2g_freq = ch_freq + BW_20_MHZ;
526*5113495bSYour Name 			if (center_freq_40 == ch_freq - BW_10_MHZ)
527*5113495bSYour Name 				sec_ch_2g_freq = ch_freq - BW_20_MHZ;
528*5113495bSYour Name 		}
529*5113495bSYour Name 	}
530*5113495bSYour Name 	wlan_reg_extract_puncture_by_bw(ori_bw, ori_punc,
531*5113495bSYour Name 					ch_freq,
532*5113495bSYour Name 					center_freq_320,
533*5113495bSYour Name 					CH_WIDTH_20MHZ,
534*5113495bSYour Name 					&primary_puncture_bitmap);
535*5113495bSYour Name 	if (primary_puncture_bitmap) {
536*5113495bSYour Name 		mlme_err("sta vdev %d freq %d RX bw %d puncture 0x%x primary chan is punctured",
537*5113495bSYour Name 			 wlan_vdev_get_id(vdev), ch_freq,
538*5113495bSYour Name 			 ori_bw, ori_punc);
539*5113495bSYour Name 		return QDF_STATUS_E_FAULT;
540*5113495bSYour Name 	}
541*5113495bSYour Name 	if (chan_param->ch_width != CH_WIDTH_320MHZ)
542*5113495bSYour Name 		center_freq_320 = 0;
543*5113495bSYour Name 	qdf_mem_zero(&chan_list, sizeof(chan_list));
544*5113495bSYour Name 	wlan_reg_fill_channel_list_for_pwrmode(pdev, ch_freq,
545*5113495bSYour Name 					       sec_ch_2g_freq,
546*5113495bSYour Name 					       chan_param->ch_width,
547*5113495bSYour Name 					       center_freq_320, &chan_list,
548*5113495bSYour Name 					       REG_CURRENT_PWR_MODE, true);
549*5113495bSYour Name 	*chan_param = chan_list.chan_param[0];
550*5113495bSYour Name 	if (chan_param->ch_width == ori_bw)
551*5113495bSYour Name 		new_punc = ori_punc;
552*5113495bSYour Name 	else
553*5113495bSYour Name 		wlan_reg_extract_puncture_by_bw(ori_bw, ori_punc,
554*5113495bSYour Name 						ch_freq,
555*5113495bSYour Name 						chan_param->mhz_freq_seg1,
556*5113495bSYour Name 						chan_param->ch_width,
557*5113495bSYour Name 						&new_punc);
558*5113495bSYour Name 
559*5113495bSYour Name 	chan_param->reg_punc_bitmap = new_punc;
560*5113495bSYour Name 
561*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
562*5113495bSYour Name }
563*5113495bSYour Name 
wlan_cm_sta_update_bw_puncture(struct wlan_objmgr_vdev * vdev,uint8_t * peer_mac,uint16_t ori_punc,enum phy_ch_width ori_bw,uint8_t ccfs0,uint8_t ccfs1,enum phy_ch_width new_bw)564*5113495bSYour Name QDF_STATUS wlan_cm_sta_update_bw_puncture(struct wlan_objmgr_vdev *vdev,
565*5113495bSYour Name 					  uint8_t *peer_mac,
566*5113495bSYour Name 					  uint16_t ori_punc,
567*5113495bSYour Name 					  enum phy_ch_width ori_bw,
568*5113495bSYour Name 					  uint8_t ccfs0, uint8_t ccfs1,
569*5113495bSYour Name 					  enum phy_ch_width new_bw)
570*5113495bSYour Name {
571*5113495bSYour Name 	struct wlan_channel *des_chan;
572*5113495bSYour Name 	struct ch_params ch_param;
573*5113495bSYour Name 	uint32_t bw_puncture = 0;
574*5113495bSYour Name 	QDF_STATUS status = QDF_STATUS_E_INVAL;
575*5113495bSYour Name 
576*5113495bSYour Name 	if (!vdev || !peer_mac) {
577*5113495bSYour Name 		mlme_err("invalid input parameters");
578*5113495bSYour Name 		return status;
579*5113495bSYour Name 	}
580*5113495bSYour Name 	des_chan = wlan_vdev_mlme_get_des_chan(vdev);
581*5113495bSYour Name 	if (!des_chan) {
582*5113495bSYour Name 		mlme_err("invalid des chan");
583*5113495bSYour Name 		return status;
584*5113495bSYour Name 	}
585*5113495bSYour Name 	qdf_mem_zero(&ch_param, sizeof(ch_param));
586*5113495bSYour Name 	ch_param.ch_width = new_bw;
587*5113495bSYour Name 	status = wlan_cm_sta_set_chan_param(vdev, des_chan->ch_freq,
588*5113495bSYour Name 					    ori_bw, ori_punc, ccfs0,
589*5113495bSYour Name 					    ccfs1, &ch_param);
590*5113495bSYour Name 	if (QDF_IS_STATUS_ERROR(status))
591*5113495bSYour Name 		return status;
592*5113495bSYour Name 
593*5113495bSYour Name 	if (des_chan->puncture_bitmap == ch_param.reg_punc_bitmap &&
594*5113495bSYour Name 	    des_chan->ch_width == ch_param.ch_width)
595*5113495bSYour Name 		return status;
596*5113495bSYour Name 
597*5113495bSYour Name 	des_chan->ch_freq_seg1 = ch_param.center_freq_seg0;
598*5113495bSYour Name 	des_chan->ch_freq_seg2 = ch_param.center_freq_seg1;
599*5113495bSYour Name 	des_chan->ch_cfreq1 = ch_param.mhz_freq_seg0;
600*5113495bSYour Name 	des_chan->ch_cfreq2 = ch_param.mhz_freq_seg1;
601*5113495bSYour Name 	des_chan->puncture_bitmap = ch_param.reg_punc_bitmap;
602*5113495bSYour Name 	des_chan->ch_width = ch_param.ch_width;
603*5113495bSYour Name 	mlme_debug("sta vdev %d freq %d bw %d puncture 0x%x ch_cfreq1 %d ch_cfreq2 %d",
604*5113495bSYour Name 		   wlan_vdev_get_id(vdev), des_chan->ch_freq,
605*5113495bSYour Name 		   des_chan->ch_width, des_chan->puncture_bitmap,
606*5113495bSYour Name 		   des_chan->ch_cfreq1, des_chan->ch_cfreq2);
607*5113495bSYour Name 	QDF_SET_BITS(bw_puncture, 0, 8, des_chan->ch_width);
608*5113495bSYour Name 	QDF_SET_BITS(bw_puncture, 8, 16, des_chan->puncture_bitmap);
609*5113495bSYour Name 	return wlan_util_vdev_peer_set_param_send(vdev, peer_mac,
610*5113495bSYour Name 						  WLAN_MLME_PEER_BW_PUNCTURE,
611*5113495bSYour Name 						  bw_puncture);
612*5113495bSYour Name }
613*5113495bSYour Name #endif /* WLAN_FEATURE_11BE */
614*5113495bSYour Name 
615*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
616*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
617*5113495bSYour Name bool
wlan_cm_check_mlo_roam_auth_status(struct wlan_objmgr_vdev * vdev)618*5113495bSYour Name wlan_cm_check_mlo_roam_auth_status(struct wlan_objmgr_vdev *vdev)
619*5113495bSYour Name {
620*5113495bSYour Name 	return mlo_roam_is_auth_status_connected(wlan_vdev_get_psoc(vdev),
621*5113495bSYour Name 					  wlan_vdev_get_id(vdev));
622*5113495bSYour Name }
623*5113495bSYour Name #endif
624*5113495bSYour Name #endif
625*5113495bSYour Name enum MLO_TYPE
wlan_cm_bss_mlo_type(struct wlan_objmgr_psoc * psoc,struct scan_cache_entry * entry,qdf_list_t * scan_list)626*5113495bSYour Name wlan_cm_bss_mlo_type(struct wlan_objmgr_psoc *psoc,
627*5113495bSYour Name 		     struct scan_cache_entry *entry,
628*5113495bSYour Name 		     qdf_list_t *scan_list)
629*5113495bSYour Name {
630*5113495bSYour Name 	return cm_bss_mlo_type(psoc, entry, scan_list);
631*5113495bSYour Name }
632