1 /*
2 * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
3 * Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
4 *
5 * Permission to use, copy, modify, and/or distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18 /*
19 * DOC: wlan_cm_roam_api.h
20 *
21 * Implementation for the Common Roaming interfaces.
22 */
23
24 #ifndef WLAN_CM_ROAM_API_H__
25 #define WLAN_CM_ROAM_API_H__
26
27 #include "wlan_mlme_dbg.h"
28 #include "../../core/src/wlan_cm_roam_offload.h"
29 #include "wlan_mlme_main.h"
30 #include "wlan_mlme_api.h"
31 #include "wlan_reg_ucfg_api.h"
32 #include "wlan_cm_tgt_if_tx_api.h"
33 #include "wlan_connectivity_logging.h"
34
35 #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
36 /**
37 * wlan_cm_enable_roaming_on_connected_sta() - Enable roaming on other connected
38 * sta vdev
39 * @pdev: pointer to pdev object
40 * @vdev_id: vdev id on which roaming should not be enabled
41 *
42 * Return: QDF_STATUS
43 */
44 QDF_STATUS
45 wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
46 uint8_t vdev_id);
47
48 /**
49 * wlan_cm_roam_send_rso_cmd() - send rso command
50 * @psoc: psoc pointer
51 * @vdev_id: vdev id
52 * @rso_command: roam command to send
53 * @reason: reason for changing roam state for the requested vdev id
54 *
55 * similar to csr_roam_offload_scan, will be used from many legacy
56 * process directly, generate a new function wlan_cm_roam_send_rso_cmd
57 * for external usage.
58 *
59 * Return: QDF_STATUS
60 */
61 QDF_STATUS wlan_cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
62 uint8_t vdev_id, uint8_t rso_command,
63 uint8_t reason);
64
65 /**
66 * wlan_cm_handle_sta_sta_roaming_enablement() - Handle roaming in case
67 * of STA + STA
68 * @psoc: psoc common object
69 * @vdev_id: Vdev id
70 *
71 * Wrapper function to cm_handle_sta_sta_roaming_enablement
72 *
73 * Return: none
74 */
75 void wlan_cm_handle_sta_sta_roaming_enablement(struct wlan_objmgr_psoc *psoc,
76 uint8_t vdev_id);
77
78 /**
79 * wlan_cm_roam_state_change() - Post roam state change to roam state machine
80 * @pdev: pdev pointer
81 * @vdev_id: vdev id
82 * @requested_state: roam state to be set
83 * @reason: reason for changing roam state for the requested vdev id
84 *
85 * This function posts roam state change to roam state machine handling
86 *
87 * Return: QDF_STATUS
88 */
89 QDF_STATUS wlan_cm_roam_state_change(struct wlan_objmgr_pdev *pdev,
90 uint8_t vdev_id,
91 enum roam_offload_state requested_state,
92 uint8_t reason);
93
94 /**
95 * wlan_roam_update_cfg() - Process RSO update cfg request
96 * @psoc: psoc context
97 * @vdev_id: vdev id
98 * @reason: reason for requesting RSO update cfg
99 *
100 * Return: QDF_STATUS
101 */
102 QDF_STATUS
103 wlan_roam_update_cfg(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
104 uint8_t reason);
105
106 /**
107 * wlan_cm_send_beacon_miss() - initiate beacon miss
108 * @vdev_id: vdev id
109 * @rssi: AP rssi
110 *
111 * Return: void
112 */
113 void wlan_cm_send_beacon_miss(uint8_t vdev_id, int32_t rssi);
114
115 #else
116 static inline
wlan_cm_roam_send_rso_cmd(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,uint8_t rso_command,uint8_t reason)117 QDF_STATUS wlan_cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
118 uint8_t vdev_id, uint8_t rso_command,
119 uint8_t reason)
120 {
121 return QDF_STATUS_E_NOSUPPORT;
122 }
123
124 static inline void
wlan_cm_handle_sta_sta_roaming_enablement(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id)125 wlan_cm_handle_sta_sta_roaming_enablement(struct wlan_objmgr_psoc *psoc,
126 uint8_t vdev_id)
127 {
128 }
129
130 static inline QDF_STATUS
wlan_roam_update_cfg(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,uint8_t reason)131 wlan_roam_update_cfg(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
132 uint8_t reason)
133 {
134 return QDF_STATUS_E_NOSUPPORT;
135 }
136
137 static inline
wlan_cm_roam_state_change(struct wlan_objmgr_pdev * pdev,uint8_t vdev_id,enum roam_offload_state requested_state,uint8_t reason)138 QDF_STATUS wlan_cm_roam_state_change(struct wlan_objmgr_pdev *pdev,
139 uint8_t vdev_id,
140 enum roam_offload_state requested_state,
141 uint8_t reason)
142 {
143 return QDF_STATUS_E_NOSUPPORT;
144 }
145
146 static inline QDF_STATUS
wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev * pdev,uint8_t vdev_id)147 wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
148 uint8_t vdev_id)
149 {
150 return QDF_STATUS_E_NOSUPPORT;
151 }
152 #endif
153
154 /**
155 * cm_update_associated_ch_info() - to save channel info in mlme priv obj at
156 * the time of initial connection
157 * @vdev: Pointer to vdev
158 * @is_update: to distinguish whether update is during connection or
159 * disconnection
160 *
161 * Return: none
162 */
163 void
164 cm_update_associated_ch_info(struct wlan_objmgr_vdev *vdev, bool is_update);
165
166 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
167 #define wlan_is_roam_offload_enabled(lfr) \
168 (lfr.lfr3_roaming_offload)
169 #else
170 #define wlan_is_roam_offload_enabled(lfr) false
171 #endif
172
173 /**
174 * wlan_cm_host_roam_in_progress() -Check if STA is in the middle of
175 * roaming states
176 * @psoc: psoc
177 * @vdev_id: vdev id
178 *
179 * Return: True or False
180 */
181 bool wlan_cm_host_roam_in_progress(struct wlan_objmgr_psoc *psoc,
182 uint8_t vdev_id);
183
184 /**
185 * cm_roam_acquire_lock() - Wrapper for rso lock.
186 * @vdev: Pointer to vdev
187 *
188 * Return: QDF_STATUS
189 */
190 QDF_STATUS cm_roam_acquire_lock(struct wlan_objmgr_vdev *vdev);
191
192 /**
193 * cm_roam_release_lock() - Wrapper for rso lock
194 * @vdev: Pointer to vdev
195 *
196 * Return: QDF_STATUS
197 */
198 QDF_STATUS cm_roam_release_lock(struct wlan_objmgr_vdev *vdev);
199
200 /**
201 * cm_roam_get_requestor_string() - RSO control requestor to string api
202 * @requestor: Requestor of type enum wlan_cm_rso_control_requestor
203 *
204 * Return: Pointer to converted string
205 */
206 char
207 *cm_roam_get_requestor_string(enum wlan_cm_rso_control_requestor requestor);
208
209 /**
210 * wlan_cm_rso_set_roam_trigger() - Send roam trigger bitmap firmware
211 * @pdev: Pointer to pdev
212 * @vdev_id: vdev id
213 * @trigger_data: Carries pointer of the object containing vdev id and
214 * roam_trigger_bitmap.
215 *
216 * Return: QDF_STATUS
217 */
218 QDF_STATUS
219 wlan_cm_rso_set_roam_trigger(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
220 struct wlan_roam_triggers *trigger_data);
221
222 /**
223 * wlan_cm_disable_rso() - Disable roam scan offload to firmware
224 * @pdev: Pointer to pdev
225 * @vdev_id: vdev id
226 * @requestor: RSO disable requestor
227 * @reason: Reason for RSO disable
228 *
229 * Return: QDF_STATUS
230 */
231 QDF_STATUS wlan_cm_disable_rso(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
232 enum wlan_cm_rso_control_requestor requestor,
233 uint8_t reason);
234
235 /**
236 * wlan_cm_enable_rso() - Enable roam scan offload to firmware
237 * @pdev: Pointer to pdev
238 * @vdev_id: vdev id
239 * @requestor: RSO disable requestor
240 * @reason: Reason for RSO disable
241 *
242 * Return: QDF_STATUS
243 */
244 QDF_STATUS wlan_cm_enable_rso(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
245 enum wlan_cm_rso_control_requestor requestor,
246 uint8_t reason);
247
248 /**
249 * wlan_cm_roaming_in_progress() - check if roaming is in progress
250 * @pdev: Pointer to pdev
251 * @vdev_id: vdev id
252 *
253 * Return: true or false
254 */
255 bool
256 wlan_cm_roaming_in_progress(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id);
257
258 /**
259 * wlan_cm_roam_stop_req() - roam stop request handling
260 * @psoc: psoc pointer
261 * @vdev_id: vdev id
262 * @reason: reason for changing roam state for the requested vdev id
263 *
264 * Return: QDF_STATUS
265 */
266 QDF_STATUS wlan_cm_roam_stop_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
267 uint8_t reason);
268
269 /**
270 * wlan_cm_roam_cfg_get_value - Get RSO config value from mlme vdev private
271 * object
272 * @psoc: psoc pointer
273 * @vdev_id: vdev id
274 * @roam_cfg_type: Value needed
275 * @dst_config: Destination config
276 *
277 * Return: QDF_STATUS
278 */
279 QDF_STATUS wlan_cm_roam_cfg_get_value(struct wlan_objmgr_psoc *psoc,
280 uint8_t vdev_id,
281 enum roam_cfg_param roam_cfg_type,
282 struct cm_roam_values_copy *dst_config);
283
284 static inline void
wlan_cm_flush_roam_channel_list(struct rso_chan_info * channel_info)285 wlan_cm_flush_roam_channel_list(struct rso_chan_info *channel_info)
286 {
287 cm_flush_roam_channel_list(channel_info);
288 }
289
290 /**
291 * wlan_cm_roam_cfg_set_value - Set RSO config value
292 * @psoc: psoc pointer
293 * @vdev_id: vdev id
294 * @roam_cfg_type: Roam configuration type to set
295 * @src_config: Source config
296 *
297 * Return: QDF_STATUS
298 */
299 QDF_STATUS
300 wlan_cm_roam_cfg_set_value(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
301 enum roam_cfg_param roam_cfg_type,
302 struct cm_roam_values_copy *src_config);
303
304
305 struct rso_config *wlan_cm_get_rso_config_fl(struct wlan_objmgr_vdev *vdev,
306 const char *func, uint32_t line);
307
308 struct rso_user_config *
309 wlan_cm_get_rso_user_config_fl(struct wlan_objmgr_vdev *vdev,
310 const char *func, uint32_t line);
311 /**
312 * wlan_cm_get_rso_config - get per vdev RSO config
313 * @vdev: vdev pointer
314 *
315 * Return: rso config pointer
316 */
317 #define wlan_cm_get_rso_config(vdev) \
318 wlan_cm_get_rso_config_fl(vdev, __func__, __LINE__)
319
320 /**
321 * wlan_cm_get_rso_user_config - get per vdev RSO userspace config
322 * @vdev: vdev pointer
323 *
324 * Return: rso user space config pointer
325 */
326 #define wlan_cm_get_rso_user_config(vdev) \
327 wlan_cm_get_rso_user_config_fl(vdev, __func__, __LINE__)
328 /**
329 * wlan_cm_set_disable_hi_rssi - set disable hi rssi config
330 * @pdev: pdev pointer
331 * @vdev_id: vdev id
332 * @value: value to set
333 *
334 * Return: void
335 */
336 void wlan_cm_set_disable_hi_rssi(struct wlan_objmgr_pdev *pdev,
337 uint8_t vdev_id, bool value);
338
339 /**
340 * wlan_cm_set_country_code - set country code to vdev rso config
341 * @pdev: pdev pointer
342 * @vdev_id: vdev id
343 * @cc: country code
344 *
345 * Return: void
346 */
347 void wlan_cm_set_country_code(struct wlan_objmgr_pdev *pdev,
348 uint8_t vdev_id, uint8_t *cc);
349
350 /**
351 * wlan_cm_get_country_code - get country code from vdev rso config
352 * @pdev: pdev pointer
353 * @vdev_id: vdev id
354 * @cc: country code
355 *
356 * Return: qdf status
357 */
358 QDF_STATUS wlan_cm_get_country_code(struct wlan_objmgr_pdev *pdev,
359 uint8_t vdev_id, uint8_t *cc);
360
361 #ifdef FEATURE_WLAN_ESE
362 /**
363 * wlan_cm_set_ese_assoc - set ese assoc
364 * @pdev: pdev pointer
365 * @vdev_id: vdev
366 * @value: value to set
367 *
368 * Return: void
369 */
370 void wlan_cm_set_ese_assoc(struct wlan_objmgr_pdev *pdev,
371 uint8_t vdev_id, bool value);
372
373 /**
374 * wlan_cm_get_ese_assoc - get ese assoc
375 * @pdev: pdev pointer
376 * @vdev_id: vdev
377 *
378 * Return: value
379 */
380 bool wlan_cm_get_ese_assoc(struct wlan_objmgr_pdev *pdev,
381 uint8_t vdev_id);
382 void wlan_cm_ese_populate_additional_ies(struct wlan_objmgr_pdev *pdev,
383 struct wlan_mlme_psoc_ext_obj *mlme_obj,
384 uint8_t vdev_id,
385 struct wlan_roam_scan_offload_params *rso_mode_cfg);
386 #else
wlan_cm_set_ese_assoc(struct wlan_objmgr_pdev * pdev,uint8_t vdev_id,bool value)387 static inline void wlan_cm_set_ese_assoc(struct wlan_objmgr_pdev *pdev,
388 uint8_t vdev_id, bool value) {}
389 static inline
wlan_cm_get_ese_assoc(struct wlan_objmgr_pdev * pdev,uint8_t vdev_id)390 bool wlan_cm_get_ese_assoc(struct wlan_objmgr_pdev *pdev,
391 uint8_t vdev_id)
392 {
393 return false;
394 }
wlan_cm_ese_populate_additional_ies(struct wlan_objmgr_pdev * pdev,struct wlan_mlme_psoc_ext_obj * mlme_obj,uint8_t vdev_id,struct wlan_roam_scan_offload_params * rso_mode_cfg)395 static inline void wlan_cm_ese_populate_additional_ies(
396 struct wlan_objmgr_pdev *pdev,
397 struct wlan_mlme_psoc_ext_obj *mlme_obj,
398 uint8_t vdev_id,
399 struct wlan_roam_scan_offload_params *rso_mode_cfg)
400 {}
401 #endif
402
403 /**
404 * wlan_roam_reset_roam_params - reset_roam params
405 * @vdev: vdev pointer
406 *
407 * Return: void
408 */
409 void wlan_roam_reset_roam_params(struct wlan_objmgr_vdev *vdev);
410
411 /**
412 * wlan_cm_rso_config_init - initialize RSO config
413 * @vdev: vdev pointer
414 * @rso_cfg: rso config to init
415 *
416 * Return: QDF_STATUS
417 */
418 QDF_STATUS wlan_cm_rso_config_init(struct wlan_objmgr_vdev *vdev,
419 struct rso_config *rso_cfg);
420
421 /**
422 * wlan_cm_rso_config_deinit - deinit RSO config
423 * @vdev: vdev pointer
424 * @rso_cfg: rso config to deinit
425 *
426 * Return: void
427 */
428 void wlan_cm_rso_config_deinit(struct wlan_objmgr_vdev *vdev,
429 struct rso_config *rso_cfg);
430
431 /**
432 * wlan_cm_fill_crypto_filter_from_vdev() - fill scan filter crypto from vdev
433 * given vdev id
434 * @vdev: vdev
435 * @filter: filetr to fill
436 *
437 * Return: void
438 */
439 void wlan_cm_fill_crypto_filter_from_vdev(struct wlan_objmgr_vdev *vdev,
440 struct scan_filter *filter);
441
442 /**
443 * wlan_cm_init_occupied_ch_freq_list - init occupied chan freq list
444 * @pdev: pdev pointer
445 * @psoc: psoc
446 * @vdev_id: vdev_id of vdev for which init is required
447 *
448 * Return: void
449 */
450 void wlan_cm_init_occupied_ch_freq_list(struct wlan_objmgr_pdev *pdev,
451 struct wlan_objmgr_psoc *psoc,
452 uint8_t vdev_id);
453
454 uint32_t cm_crypto_authmode_to_wmi_authmode(int32_t authmodeset,
455 int32_t akm,
456 int32_t ucastcipherset);
457 uint8_t *wlan_cm_get_rrm_cap_ie_data(void);
458
459 /**
460 * wlan_cm_append_assoc_ies() - Append specific IE to assoc IE's buffer
461 * @rso_mode_cfg: Pointer to Roam offload scan request
462 * @ie_id: IE ID to be appended
463 * @ie_len: IE length to be appended
464 * @ie_data: IE data to be appended
465 *
466 * Return: None
467 */
468 void wlan_cm_append_assoc_ies(struct wlan_roam_scan_offload_params *rso_mode_cfg,
469 uint8_t ie_id, uint8_t ie_len,
470 const uint8_t *ie_data);
471 /**
472 * wlan_add_supported_5Ghz_channels()- Add valid 5Ghz channels
473 * in Join req.
474 * @psoc: psoc ptr
475 * @pdev: pdev
476 * @chan_list: Pointer to channel list buffer to populate
477 * @num_chnl: Pointer to number of channels value to update
478 * @supp_chan_ie: Boolean to check if we need to populate as IE
479 *
480 * This function is called to update valid 5Ghz channels
481 * in Join req. If @supp_chan_ie is true, supported channels IE
482 * format[chan num 1, num of channels 1, chan num 2, num of
483 * channels 2, ..] is populated. Else, @chan_list would be a list
484 * of supported channels[chan num 1, chan num 2..]
485 *
486 * Return: void
487 */
488 void wlan_add_supported_5Ghz_channels(struct wlan_objmgr_psoc *psoc,
489 struct wlan_objmgr_pdev *pdev,
490 uint8_t *chan_list,
491 uint8_t *num_chnl,
492 bool supp_chan_ie);
493 #ifdef WLAN_ADAPTIVE_11R
494 /**
495 * wlan_get_adaptive_11r_enabled() - Function to check if adaptive 11r
496 * ini is enabled or disabled
497 * @lfr_cfg: LFR configuration
498 *
499 * Return: true if adaptive 11r is enabled
500 */
501 static inline bool
wlan_get_adaptive_11r_enabled(struct wlan_mlme_lfr_cfg * lfr_cfg)502 wlan_get_adaptive_11r_enabled(struct wlan_mlme_lfr_cfg *lfr_cfg)
503 {
504 return lfr_cfg->enable_adaptive_11r;
505 }
506 #else
507 static inline bool
wlan_get_adaptive_11r_enabled(struct wlan_mlme_lfr_cfg * lfr_cfg)508 wlan_get_adaptive_11r_enabled(struct wlan_mlme_lfr_cfg *lfr_cfg)
509 {
510 return false;
511 }
512 #endif
513
514 #ifdef WLAN_FEATURE_FILS_SK
515 /**
516 * wlan_cm_get_fils_connection_info - Copy fils connection information from
517 * mlme vdev private object
518 * @psoc: Pointer to psoc object
519 * @vdev_id: vdev id
520 *
521 * Return: QDF_STATUS
522 */
523 struct wlan_fils_connection_info *wlan_cm_get_fils_connection_info(
524 struct wlan_objmgr_psoc *psoc,
525 uint8_t vdev_id);
526
527 /**
528 * wlan_cm_update_mlme_fils_info - Update FILS connection info
529 * to mlme vdev private object
530 * @vdev: Pointer to pdev object
531 * @src_fils_info: Current profile FILS connection information
532 *
533 * Return: QDF_STATUS
534 */
535 QDF_STATUS
536 wlan_cm_update_mlme_fils_info(struct wlan_objmgr_vdev *vdev,
537 struct wlan_fils_con_info *src_fils_info);
538
539 /**
540 * wlan_cm_update_fils_ft - Update the FILS FT derived to mlme
541 * @psoc: Psoc pointer
542 * @vdev_id: vdev id
543 * @fils_ft: Pointer to FILS FT
544 * @fils_ft_len: FILS FT length
545 *
546 * Return: QDF_STATUS
547 */
548 QDF_STATUS wlan_cm_update_fils_ft(struct wlan_objmgr_psoc *psoc,
549 uint8_t vdev_id, uint8_t *fils_ft,
550 uint8_t fils_ft_len);
551
552 /**
553 * wlan_cm_update_hlp_info - API to save HLP IE
554 * @psoc: Pointer to psoc
555 * @gen_ie: IE buffer to store
556 * @len: length of the IE buffer @gen_ie
557 * @vdev_id: vdev id
558 * @flush: Flush the older saved HLP if any
559 *
560 * Return: None
561 */
562 void wlan_cm_update_hlp_info(struct wlan_objmgr_psoc *psoc,
563 const uint8_t *gen_ie, uint16_t len,
564 uint8_t vdev_id, bool flush);
565 #else
566 static inline
wlan_cm_get_fils_connection_info(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id)567 struct wlan_fils_connection_info *wlan_cm_get_fils_connection_info(
568 struct wlan_objmgr_psoc *psoc,
569 uint8_t vdev_id)
570 {
571 return NULL;
572 }
573
wlan_cm_update_hlp_info(struct wlan_objmgr_psoc * psoc,const uint8_t * gen_ie,uint16_t len,uint8_t vdev_id,bool flush)574 static inline void wlan_cm_update_hlp_info(struct wlan_objmgr_psoc *psoc,
575 const uint8_t *gen_ie, uint16_t len,
576 uint8_t vdev_id, bool flush)
577 {}
578 #endif
579
580 static inline
wlan_cm_is_auth_type_11r(struct wlan_mlme_psoc_ext_obj * mlme_obj,struct wlan_objmgr_vdev * vdev,bool mdie_present)581 bool wlan_cm_is_auth_type_11r(struct wlan_mlme_psoc_ext_obj *mlme_obj,
582 struct wlan_objmgr_vdev *vdev,
583 bool mdie_present)
584 {
585 return cm_is_auth_type_11r(mlme_obj, vdev, mdie_present);
586 }
587
cm_is_open_mode(struct wlan_objmgr_vdev * vdev)588 static inline bool cm_is_open_mode(struct wlan_objmgr_vdev *vdev)
589 {
590 return wlan_vdev_is_open_mode(vdev);
591 }
592
593 #ifdef WLAN_FEATURE_SAE
594 /**
595 * cm_is_auth_type_sae() - is vdev SAE auth type
596 * @vdev: pointer to vdev
597 *
598 * Return: true if vdev is SAE auth type
599 */
cm_is_auth_type_sae(struct wlan_objmgr_vdev * vdev)600 static inline bool cm_is_auth_type_sae(struct wlan_objmgr_vdev *vdev)
601 {
602 return wlan_vdev_is_sae_auth_type(vdev);
603 }
604 #else
cm_is_auth_type_sae(struct wlan_objmgr_vdev * vdev)605 static inline bool cm_is_auth_type_sae(struct wlan_objmgr_vdev *vdev)
606 {
607 return false;
608 }
609 #endif
610
611 #ifdef FEATURE_WLAN_ESE
612 bool
613 cm_ese_open_present(struct wlan_objmgr_vdev *vdev,
614 struct wlan_mlme_psoc_ext_obj *mlme_obj,
615 bool ese_version_present);
616 bool
617 cm_is_ese_connection(struct wlan_objmgr_vdev *vdev, bool ese_version_present);
618 #else
619 static inline bool
cm_ese_open_present(struct wlan_objmgr_vdev * vdev,struct wlan_mlme_psoc_ext_obj * mlme_obj,bool ese_version_present)620 cm_ese_open_present(struct wlan_objmgr_vdev *vdev,
621 struct wlan_mlme_psoc_ext_obj *mlme_obj,
622 bool ese_version_present)
623 {
624 return false;
625 }
626 static inline bool
cm_is_ese_connection(struct wlan_objmgr_vdev * vdev,bool ese_version_present)627 cm_is_ese_connection(struct wlan_objmgr_vdev *vdev, bool ese_version_present)
628 {
629 return false;
630 }
631 #endif
632
633 /**
634 * cm_roam_start_init_on_connect() - init roaming
635 * @pdev: pdev pointer
636 * @vdev_id: vdev_id
637 *
638 * Return: void
639 */
640 void cm_roam_start_init_on_connect(struct wlan_objmgr_pdev *pdev,
641 uint8_t vdev_id);
642
643 void cm_update_session_assoc_ie(struct wlan_objmgr_psoc *psoc,
644 uint8_t vdev_id,
645 struct element_info *assoc_ie);
646
647 /**
648 * wlan_cm_roam_invoke() - Validate and send Roam invoke req to CM
649 * @pdev: Pdev pointer
650 * @vdev_id: vdev_id
651 * @bssid: Target bssid
652 * @chan_freq: channel frequency on which reassoc should be send
653 * @source: source of roam
654 *
655 * Return: QDF_STATUS
656 */
657 QDF_STATUS
658 wlan_cm_roam_invoke(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
659 struct qdf_mac_addr *bssid, qdf_freq_t chan_freq,
660 enum wlan_cm_source source);
661
662 /**
663 * cm_is_fast_roam_enabled() - check fast roam enabled or not
664 * @psoc: psoc pointer
665 *
666 * Return: true or false
667 */
668 bool cm_is_fast_roam_enabled(struct wlan_objmgr_psoc *psoc);
669
670 /**
671 * cm_is_rsn_or_8021x_sha256_auth_type() - check whether auth type is rsn
672 * or 8021x_sha256 or not
673 * @vdev: vdev object pointer
674 *
675 * Return: true, if auth type is rsn/8021x_sha256, false otherwise
676 */
677 bool cm_is_rsn_or_8021x_sha256_auth_type(struct wlan_objmgr_vdev *vdev);
678
679 #ifdef WLAN_FEATURE_HOST_ROAM
680 /**
681 * wlan_cm_host_roam_start() - fw host roam start handler
682 * @msg: msg pointer
683 *
684 * Return: QDF_STATUS
685 */
686 QDF_STATUS wlan_cm_host_roam_start(struct scheduler_msg *msg);
687
688 /**
689 * cm_mlme_roam_preauth_fail() - roam preauth fail
690 * @vdev: VDEV object
691 * @req: Connection manager roam request
692 * @reason: connection manager connect fail reason
693 *
694 * Return: QDF_STATUS
695 */
696 QDF_STATUS
697 cm_mlme_roam_preauth_fail(struct wlan_objmgr_vdev *vdev,
698 struct wlan_cm_roam_req *req,
699 enum wlan_cm_connect_fail_reason reason);
700
701 /**
702 * cm_free_preauth_req() - free preauth request related memory
703 * @preauth_req: preauth request
704 *
705 * Return: void
706 */
707 void cm_free_preauth_req(struct wlan_preauth_req *preauth_req);
708
709 /**
710 * cm_handle_preauth_rsp() - Process vdev preauth rsp and send to CM
711 * @msg: scheduler message
712 *
713 * Process preauth rsp and send it to CM SM.
714 *
715 * Return: QDF_STATUS
716 */
717 QDF_STATUS cm_handle_preauth_rsp(struct scheduler_msg *msg);
718
719 /**
720 * cm_reassoc_timer_callback() - reassoc timer callback, gets called at time out
721 * @context: context
722 *
723 * Timer callback for the timer that is started between the preauth completion
724 * and reassoc request. In this interval, it is expected that the
725 * pre-auth response and RIC IEs are passed up to the WPA supplicant and
726 * received back the necessary FTIEs required to be sent in the reassoc request
727 *
728 * Return: None
729 */
730 void cm_reassoc_timer_callback(void *context);
731 #else
wlan_cm_host_roam_start(struct scheduler_msg * msg)732 static inline QDF_STATUS wlan_cm_host_roam_start(struct scheduler_msg *msg)
733 {
734 if (msg && msg->bodyptr)
735 qdf_mem_free(msg->bodyptr);
736
737 return QDF_STATUS_SUCCESS;
738 }
739 #endif
740
741 /**
742 * wlan_cm_get_associated_ch_info() - get associated channel info
743 * @psoc: psoc pointer
744 * @vdev_id: vdev id
745 * @scanned_ch_width: channel width as per scan response
746 * @assoc_chan_info: channel info to get
747 *
748 * Return: none
749 */
750 void wlan_cm_get_associated_ch_info(struct wlan_objmgr_psoc *psoc,
751 uint8_t vdev_id,
752 enum phy_ch_width scanned_ch_width,
753 struct assoc_channel_info *assoc_chan_info);
754
755 #ifdef WLAN_FEATURE_ROAM_OFFLOAD
756 /**
757 * wlan_cm_fw_roam_abort_req() - roam abort request handling
758 * @psoc: psoc pointer
759 * @vdev_id: vdev id
760 *
761 * Return: QDF_STATUS
762 */
763 QDF_STATUS
764 wlan_cm_fw_roam_abort_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id);
765
766 /**
767 * wlan_cm_get_roam_band_value - Get roam band value from RSO config
768 * @psoc: psoc pointer
769 * @vdev: Pointer to vdev
770 *
771 * Return: Roam Band
772 */
773 uint32_t wlan_cm_get_roam_band_value(struct wlan_objmgr_psoc *psoc,
774 struct wlan_objmgr_vdev *vdev);
775
776 /**
777 * wlan_cm_roam_activate_pcl_per_vdev() - Set the PCL command to be sent per
778 * vdev instead of pdev.
779 * @psoc: PSOC pointer
780 * @vdev_id: VDEV id
781 * @pcl_per_vdev: Activate vdev PCL type. 1- VDEV PCL, 0- PDEV PCL
782 *
783 * pcl_per_vdev will be set when:
784 * STA + STA is connected in DBS mode and roaming init is done on
785 * the 2nd STA.
786 *
787 * pcl_per_vdev will be false when only 1 sta connection exists or
788 * when 2nd sta gets disconnected
789 *
790 * Return: None
791 */
792 void wlan_cm_roam_activate_pcl_per_vdev(struct wlan_objmgr_psoc *psoc,
793 uint8_t vdev_id,
794 bool pcl_per_vdev);
795
796 /**
797 * wlan_cm_roam_is_pcl_per_vdev_active() - API to know if the pcl command needs
798 * to be sent per vdev or not
799 * @psoc: PSOC pointer
800 * @vdev_id: VDEV id
801 *
802 * Return: PCL level
803 */
804 bool wlan_cm_roam_is_pcl_per_vdev_active(struct wlan_objmgr_psoc *psoc,
805 uint8_t vdev_id);
806
807 /**
808 * wlan_cm_dual_sta_roam_update_connect_channels() - Fill the allowed channels
809 * for connection of the 2nd STA based on the 1st STA connected band if dual
810 * sta roaming is enabled.
811 * @psoc: Pointer to PSOC object
812 * @filter: Pointer to scan filter
813 *
814 * Return: None
815 */
816 void
817 wlan_cm_dual_sta_roam_update_connect_channels(struct wlan_objmgr_psoc *psoc,
818 struct scan_filter *filter);
819 /**
820 * wlan_cm_roam_set_vendor_btm_params() - API to set vendor btm params
821 * @psoc: PSOC pointer
822 * @param: vendor configured roam trigger param
823 *
824 * Return: none
825 */
826 void
827 wlan_cm_roam_set_vendor_btm_params(struct wlan_objmgr_psoc *psoc,
828 struct wlan_cm_roam_vendor_btm_params
829 *param);
830 /**
831 * wlan_cm_roam_get_vendor_btm_params() - API to get vendor btm param
832 * @psoc: PSOC pointer
833 * @param: vendor configured roam trigger param
834 *
835 * Return: none
836 */
837 void wlan_cm_roam_get_vendor_btm_params(
838 struct wlan_objmgr_psoc *psoc,
839 struct wlan_cm_roam_vendor_btm_params *param);
840
841 /**
842 * wlan_cm_roam_get_score_delta_params() - API to get roam score delta param
843 * @psoc: PSOC pointer
844 * @params: roam trigger param
845 *
846 * Return: none
847 */
848 void
849 wlan_cm_roam_get_score_delta_params(struct wlan_objmgr_psoc *psoc,
850 struct wlan_roam_triggers *params);
851
852 /**
853 * wlan_cm_roam_get_min_rssi_params() - API to get roam trigger min rssi param
854 * @psoc: PSOC pointer
855 * @params: roam trigger param
856 *
857 * Return: none
858 */
859 void
860 wlan_cm_roam_get_min_rssi_params(struct wlan_objmgr_psoc *psoc,
861 struct wlan_roam_triggers *params);
862
863 /**
864 * wlan_cm_update_roam_scan_scheme_bitmap() - Set roam scan scheme bitmap for
865 * each vdev
866 * @psoc: PSOC pointer
867 * @vdev_id: VDEV id
868 * @roam_scan_scheme_bitmap: bitmap of roam triggers for which partial roam
869 * scan needs to be enabled
870 *
871 * Return: QDF_STATUS
872 */
873 QDF_STATUS
874 wlan_cm_update_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc,
875 uint8_t vdev_id,
876 uint32_t roam_scan_scheme_bitmap);
877
878 /**
879 * wlan_cm_set_roam_band_bitmask() - Set roam band bitmask for vdev
880 * @psoc: psoc pointer
881 * @vdev_id: vdev id
882 * @roam_band_bitmask: bitmask of roam band for which roam scan needs to be
883 * enabled in fw
884 *
885 * Return: QDF_STATUS
886 */
887 QDF_STATUS wlan_cm_set_roam_band_bitmask(struct wlan_objmgr_psoc *psoc,
888 uint8_t vdev_id,
889 uint32_t roam_band_bitmask);
890
891 /**
892 * wlan_cm_set_btm_config() - Set btm roaming disable flag for vdev
893 * @psoc: psoc pointer
894 * @vdev_id: vdev id
895 * @is_disable_btm: to check whether btm roaming is disabled or not
896 *
897 * Return: QDF_STATUS
898 */
899 QDF_STATUS wlan_cm_set_btm_config(struct wlan_objmgr_psoc *psoc,
900 uint8_t vdev_id, bool is_disable_btm);
901
902 #ifdef FEATURE_RX_LINKSPEED_ROAM_TRIGGER
903 /**
904 * struct roam_link_speed_cfg - link speed state config
905 * @psoc: pointer to psoc
906 * @vdev_id: vdev id
907 * @is_link_speed_good: true means link speed good, false means bad
908 */
909 struct roam_link_speed_cfg {
910 struct wlan_objmgr_psoc *psoc;
911 uint8_t vdev_id;
912 uint8_t is_link_speed_good;
913 };
914
915 /**
916 * wlan_cm_send_roam_linkspeed_state() - Send link speed state to target
917 * @msg: Pointer to schedule message
918 *
919 * Return: QDF_STATUS
920 */
921 QDF_STATUS wlan_cm_send_roam_linkspeed_state(struct scheduler_msg *msg);
922
923 /**
924 * wlan_cm_roam_link_speed_update() - Update link speed state for roaming
925 * @psoc: psoc pointer
926 * @vdev_id: vdev id
927 * @is_link_speed_good: true means link speed good, false means bad
928 *
929 * Return: None
930 */
931 void wlan_cm_roam_link_speed_update(struct wlan_objmgr_psoc *psoc,
932 uint8_t vdev_id,
933 bool is_link_speed_good);
934
935 /**
936 * wlan_cm_is_linkspeed_roam_trigger_supported() - Get roam linkspeed check
937 * @psoc: pointer to psoc object
938 *
939 * Return: bool, true: Linkspeed check for low rssi roaming supported
940 */
941 bool wlan_cm_is_linkspeed_roam_trigger_supported(struct wlan_objmgr_psoc *psoc);
942 #endif
943
944 /**
945 * wlan_cm_set_roam_band_update() - send rso update on set band
946 * @psoc: psoc pointer
947 * @vdev_id: vdev id
948 *
949 * Return: QDF_STATUS
950 */
951 QDF_STATUS wlan_cm_set_roam_band_update(struct wlan_objmgr_psoc *psoc,
952 uint8_t vdev_id);
953
954 /**
955 * wlan_cm_get_roam_scan_scheme_bitmap() - Get roam scan scheme bitmap value
956 * @psoc: PSOC pointer
957 * @vdev_id: VDEV id
958 *
959 * Return: Roam scan scheme bitmap value
960 */
961 uint32_t wlan_cm_get_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc,
962 uint8_t vdev_id);
963
964 /**
965 * wlan_cm_update_roam_states() - Set roam states for the vdev
966 * @psoc: PSOC pointer
967 * @vdev_id: VDEV id
968 * @value: Value to update
969 * @states: type of value to update
970 *
971 * Return: QDF_STATUS
972 */
973 QDF_STATUS
974 wlan_cm_update_roam_states(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
975 uint32_t value, enum roam_fail_params states);
976
977 /**
978 * wlan_cm_get_roam_states() - Get roam states value
979 * @psoc: PSOC pointer
980 * @vdev_id: VDEV id
981 * @states: For which action get roam states
982 *
983 * Return: Roam fail reason value
984 */
985 uint32_t
986 wlan_cm_get_roam_states(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
987 enum roam_fail_params states);
988
989 void wlan_cm_set_psk_pmk(struct wlan_objmgr_pdev *pdev,
990 uint8_t vdev_id, uint8_t *psk_pmk,
991 uint8_t pmk_len);
992
993 void wlan_cm_get_psk_pmk(struct wlan_objmgr_pdev *pdev,
994 uint8_t vdev_id, uint8_t *psk_pmk,
995 uint8_t *pmk_len);
996
997 /**
998 * cm_akm_roam_allowed() - check if roam allowed for some akm type
999 * roaming using single pmk
1000 * with same pmk or not
1001 * @psoc: psoc
1002 * @vdev: vdev pointer
1003 *
1004 * Return: QDF_STATUS: QDF_STATUS_SUCCESS is allowed
1005 */
1006 QDF_STATUS
1007 cm_akm_roam_allowed(struct wlan_objmgr_psoc *psoc,
1008 struct wlan_objmgr_vdev *vdev);
1009
1010 /**
1011 * cm_invalid_roam_reason_handler() - Handler for invalid roam reason
1012 * @vdev_id: vdev id
1013 * @notif: roam notification of type enum cm_roam_notif
1014 * @reason: Notif param value from the roam event that carries trigger reason
1015 *
1016 * Return: QDF_STATUS
1017 */
1018 void cm_invalid_roam_reason_handler(uint32_t vdev_id, enum cm_roam_notif notif,
1019 uint32_t reason);
1020
1021 /**
1022 * cm_handle_roam_reason_ho_failed() - Handler for roam due to ho failure
1023 * @vdev_id: vdev id
1024 * @bssid: carries the BSSID mac address
1025 * @hw_mode_trans_ind: hw_mode transition indication
1026 *
1027 * Return: None
1028 */
1029 void
1030 cm_handle_roam_reason_ho_failed(uint8_t vdev_id, struct qdf_mac_addr bssid,
1031 struct cm_hw_mode_trans_ind *hw_mode_trans_ind);
1032
1033 /**
1034 * cm_handle_scan_ch_list_data() - Roam scan ch evt wrapper for wma
1035 * @data: roam scan channel event data
1036 *
1037 * Return: QDF_STATUS
1038 */
1039 QDF_STATUS
1040 cm_handle_scan_ch_list_data(struct cm_roam_scan_ch_resp *data);
1041
1042 /**
1043 * wlan_cm_free_roam_synch_frame_ind() - Free the bcn_probe_rsp, reassoc_req,
1044 * reassoc_rsp received as part of the ROAM_SYNC_FRAME event
1045 *
1046 * @rso_cfg: RSO configuration to be freed
1047 *
1048 * This API is used to free the buffer allocated during the ROAM_SYNC_FRAME
1049 * event
1050 *
1051 * Return: QDF_STATUS
1052 */
1053 QDF_STATUS wlan_cm_free_roam_synch_frame_ind(struct rso_config *rso_cfg);
1054
1055 /**
1056 * cm_roam_sync_event_handler() - CM handler for roam sync event
1057 *
1058 * @psoc: psoc objmgr ptr
1059 * @event: event ptr
1060 * @len: event buff length
1061 * @sync_ind: sync indication data
1062 *
1063 * This API is used to handle the buffer allocated during the ROAM_SYNC_EVENT
1064 * event
1065 *
1066 * Return: QDF_STATUS
1067 */
1068 QDF_STATUS cm_roam_sync_event_handler(struct wlan_objmgr_psoc *psoc,
1069 uint8_t *event,
1070 uint32_t len,
1071 struct roam_offload_synch_ind *sync_ind);
1072
1073 /**
1074 * cm_roam_sync_frame_event_handler() - CM handler for roam sync frame event
1075 *
1076 * @psoc: psoc objmgr ptr
1077 * @frame_ind: ptr to roam sync frame struct
1078 *
1079 * This API is used to handle the buffer allocated during the ROAM_SYNC_FRAME
1080 * event
1081 *
1082 * Return: QDF_STATUS
1083 */
1084 QDF_STATUS
1085 cm_roam_sync_frame_event_handler(struct wlan_objmgr_psoc *psoc,
1086 struct roam_synch_frame_ind *frame_ind);
1087
1088 /**
1089 * cm_roam_sync_event_handler_cb() - CM callback handler for roam
1090 * sync event
1091 *
1092 * @vdev: vdev objmgr ptr
1093 * @event: event ptr
1094 * @len: event data len
1095 *
1096 * This API is used to handle the buffer allocated during the ROAM_SYNC
1097 * event
1098 *
1099 * Return: QDF_STATUS
1100 */
1101 QDF_STATUS cm_roam_sync_event_handler_cb(struct wlan_objmgr_vdev *vdev,
1102 uint8_t *event,
1103 uint32_t len);
1104
1105 /**
1106 * wlan_cm_update_roam_rt_stats() - Store roam event stats command params
1107 * @psoc: PSOC pointer
1108 * @value: Value to update
1109 * @stats: type of value to update
1110 *
1111 * Return: QDF_STATUS
1112 */
1113 QDF_STATUS
1114 wlan_cm_update_roam_rt_stats(struct wlan_objmgr_psoc *psoc,
1115 uint8_t value, enum roam_rt_stats_params stats);
1116
1117 /**
1118 * wlan_cm_get_roam_rt_stats() - Get roam event stats value
1119 * @psoc: PSOC pointer
1120 * @stats: Get roam event command param for specific attribute
1121 *
1122 * Return: Roam events stats param value
1123 */
1124 uint8_t
1125 wlan_cm_get_roam_rt_stats(struct wlan_objmgr_psoc *psoc,
1126 enum roam_rt_stats_params stats);
1127
1128 /**
1129 * cm_report_roam_rt_stats - Gathers/Sends the roam events stats
1130 * @psoc: Pointer to psoc structure
1131 * @vdev_id: Vdev ID
1132 * @events: Event/Notif type from roam event/roam stats event
1133 * @roam_info: Roam stats from the roam stats event
1134 * @value: Notif param value from the roam event
1135 * @idx: TLV index in roam stats event
1136 * @reason: Notif param value from the roam event that carries trigger reason
1137 *
1138 * Gathers the roam stats from the roam event and the roam stats event and
1139 * sends them to hdd for filling the vendor attributes.
1140 *
1141 * Return: none
1142 */
1143 void cm_report_roam_rt_stats(struct wlan_objmgr_psoc *psoc,
1144 uint8_t vdev_id,
1145 enum roam_rt_stats_type events,
1146 struct roam_stats_event *roam_info,
1147 uint32_t value, uint8_t idx, uint32_t reason);
1148 /**
1149 * cm_roam_candidate_event_handler() - CM callback to save roam
1150 * candidate entry in scan db
1151 *
1152 * @psoc: psoc objmgr ptr
1153 * @candidate: roam scan candidate info
1154 */
1155 QDF_STATUS
1156 cm_roam_candidate_event_handler(struct wlan_objmgr_psoc *psoc,
1157 struct roam_scan_candidate_frame *candidate);
1158
1159 /**
1160 * wlan_cm_is_roam_sync_in_progress() - Check if the vdev is in roam sync
1161 * substate
1162 * @psoc: psoc pointer
1163 * @vdev_id: vdev_id
1164 *
1165 * Return: bool
1166 */
1167 bool wlan_cm_is_roam_sync_in_progress(struct wlan_objmgr_psoc *psoc,
1168 uint8_t vdev_id);
1169
1170 /**
1171 * wlan_cm_set_roam_offload_bssid() - Set the roam offload bssid of the sae
1172 * roam candidate
1173 * @vdev: pointer to vdev
1174 * @bssid: bssid
1175 *
1176 * Return: None
1177 */
1178 void
1179 wlan_cm_set_roam_offload_bssid(struct wlan_objmgr_vdev *vdev,
1180 struct qdf_mac_addr *bssid);
1181
1182 /**
1183 * wlan_cm_get_roam_offload_bssid() - Get the roam offload bssid of the sae
1184 * roam candidate
1185 * @vdev: pointer to vdev
1186 * @bssid: bssid
1187 *
1188 * Return: None
1189 */
1190 void
1191 wlan_cm_get_roam_offload_bssid(struct wlan_objmgr_vdev *vdev,
1192 struct qdf_mac_addr *bssid);
1193
1194 /**
1195 * wlan_cm_set_roam_offload_ssid() - Set the roam offload candidate ssid
1196 *
1197 * @vdev: pointer to vdev
1198 * @ssid: ssid of candidate
1199 * @len: length of ssid
1200 *
1201 * Return: None
1202 */
1203 void
1204 wlan_cm_set_roam_offload_ssid(struct wlan_objmgr_vdev *vdev,
1205 uint8_t *ssid, uint8_t len);
1206
1207 /**
1208 * wlan_cm_get_roam_offload_ssid() - Get the roam offload candidate ssid
1209 *
1210 * @psoc: pointer to psoc
1211 * @vdev_id: vdev id
1212 * @ssid: ssid of the candidate
1213 * @len: length of the ssid
1214 *
1215 * Return: None
1216 */
1217 void
1218 wlan_cm_get_roam_offload_ssid(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
1219 uint8_t *ssid, uint8_t *len);
1220
1221 /**
1222 * wlan_cm_roam_set_ho_delay_config() - Set roam hand-off delay
1223 * @psoc: PSOC pointer
1224 * @roam_ho_delay: vendor configured roam HO delay value
1225 *
1226 * Return: none
1227 */
1228 void
1229 wlan_cm_roam_set_ho_delay_config(struct wlan_objmgr_psoc *psoc,
1230 uint16_t roam_ho_delay);
1231
1232 /**
1233 * wlan_cm_roam_get_ho_delay_config() - Get roam hand-off delay
1234 * @psoc: PSOC pointer
1235 *
1236 * Return: Roam HO delay value
1237 */
1238 uint16_t
1239 wlan_cm_roam_get_ho_delay_config(struct wlan_objmgr_psoc *psoc);
1240
1241 /**
1242 * wlan_cm_set_exclude_rm_partial_scan_freq() - set value to include/exclude
1243 * the partial scan channels in roam full scan.
1244 * @psoc: PSOC pointer
1245 * @exclude_rm_partial_scan_freq: Include/exclude the channels in roam full scan
1246 * that are already scanned as part of partial scan.
1247 *
1248 * Return: none
1249 */
1250 void
1251 wlan_cm_set_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc *psoc,
1252 uint8_t exclude_rm_partial_scan_freq);
1253
1254 /**
1255 * wlan_cm_get_exclude_rm_partial_scan_freq() - Get value to include/exclude
1256 * the partial scan channels in roam full scan.
1257 * @psoc: PSOC pointer
1258 *
1259 * Return: value to include/exclude the partial scan channels in roam full scan
1260 */
1261 uint8_t
1262 wlan_cm_get_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc *psoc);
1263
1264 /**
1265 * wlan_cm_roam_set_full_scan_6ghz_on_disc() - set value to include the 6 GHz
1266 * channels in roam full scan only on prior discovery of any 6 GHz support in
1267 * the environment.
1268 * @psoc: PSOC pointer
1269 * @roam_full_scan_6ghz_on_disc: Include the 6 GHz channels in roam full scan:
1270 * 1 - Include only on prior discovery of any 6 GHz support in the environment
1271 * 0 - Include all the supported 6 GHz channels by default
1272 *
1273 * Return: none
1274 */
1275 void
1276 wlan_cm_roam_set_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc *psoc,
1277 uint8_t roam_full_scan_6ghz_on_disc);
1278
1279 /**
1280 * wlan_cm_roam_get_full_scan_6ghz_on_disc() - Get value to include the 6 GHz
1281 * channels in roam full scan only on prior discovery of any 6 GHz support in
1282 * the environment.
1283 * @psoc: PSOC pointer
1284 *
1285 * Return:
1286 * 1 - Include only on prior discovery of any 6 GHz support in the environment
1287 * 0 - Include all the supported 6 GHz channels by default
1288 */
1289 uint8_t wlan_cm_roam_get_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc *psoc);
1290
1291 /**
1292 * wlan_cm_set_roam_scan_high_rssi_offset() - Set the delta change in high RSSI
1293 * at which roam scan is triggered in 2.4/5 GHz.
1294 * @psoc: PSOC pointer
1295 * @roam_high_rssi_delta: Set the High RSSI delta for roam scan trigger
1296 * * 1-16 - Set an offset value in this range
1297 * * 0 - Disable
1298 *
1299 * Return: none
1300 */
1301 void
1302 wlan_cm_set_roam_scan_high_rssi_offset(struct wlan_objmgr_psoc *psoc,
1303 uint8_t roam_high_rssi_delta);
1304
1305 /**
1306 * wlan_cm_get_roam_scan_high_rssi_offset() - Get the delta change in high RSSI
1307 * at which roam scan is triggered in 2.4/5 GHz.
1308 * @psoc: PSOC pointer
1309 *
1310 * Return: High RSSI delta for roam scan trigger
1311 */
1312 uint8_t wlan_cm_get_roam_scan_high_rssi_offset(struct wlan_objmgr_psoc *psoc);
1313
1314 #ifdef WLAN_FEATURE_ROAM_INFO_STATS
1315 /**
1316 * mlme_cm_alloc_roam_stats_info() - alloc roam stats info buffer
1317 * @vdev_mlme: MLME-private vdev context
1318 *
1319 * Return: None
1320 */
1321 void mlme_cm_alloc_roam_stats_info(struct vdev_mlme_obj *vdev_mlme);
1322
1323 /**
1324 * mlme_cm_free_roam_stats_info() - free roam stats info buffer in
1325 * struct mlme_legacy_priv
1326 * @ext_hdl: mlme_legacy_priv pointer
1327 *
1328 * Return: None
1329 */
1330 void mlme_cm_free_roam_stats_info(mlme_vdev_ext_t *ext_hdl);
1331
1332 /**
1333 * wlan_cm_roam_stats_info_get() - get vdev roam stats info
1334 *
1335 * @vdev: pointer to vdev
1336 * @roam_info: pointer to buffer to copy roam stats info
1337 * @roam_num: pointer to valid roam stats num
1338 *
1339 * Return: QDF_STATUS
1340 */
1341
1342 QDF_STATUS
1343 wlan_cm_roam_stats_info_get(struct wlan_objmgr_vdev *vdev,
1344 struct enhance_roam_info **roam_info,
1345 uint32_t *roam_num);
1346
1347 /**
1348 * wlan_cm_roam_info_get() - get vdev roam info
1349 *
1350 * @vdev: pointer to vdev
1351 * @roam_info: pointer to buffer to copy roam stats info
1352 * @idx: index of roam stats cache buffer
1353 *
1354 * Return: QDF_STATUS
1355 */
1356
1357 QDF_STATUS
1358 wlan_cm_roam_info_get(struct wlan_objmgr_vdev *vdev,
1359 struct enhance_roam_info **roam_info,
1360 uint8_t idx);
1361
1362 #else
1363 static inline
mlme_cm_alloc_roam_stats_info(struct vdev_mlme_obj * vdev_mlme)1364 void mlme_cm_alloc_roam_stats_info(struct vdev_mlme_obj *vdev_mlme)
1365 {
1366 }
1367
1368 static inline
mlme_cm_free_roam_stats_info(mlme_vdev_ext_t * ext_hdl)1369 void mlme_cm_free_roam_stats_info(mlme_vdev_ext_t *ext_hdl)
1370 {
1371 }
1372 #endif
1373
1374 /**
1375 * wlan_cm_update_offload_ssid_from_candidate() - Set the roam offload ssid of
1376 * the roam candidate into the mlme priv
1377 *
1378 * @pdev: pointer to pdev
1379 * @vdev_id: vdev id
1380 * @ap_bssid: roam candidate bssid
1381 *
1382 * Get the scan entry corresponding to the bssid and save the ssid
1383 * in the mlme priv of the STA vdev
1384 *
1385 * Return: QDF_STATUS
1386 */
1387 QDF_STATUS
1388 wlan_cm_update_offload_ssid_from_candidate(struct wlan_objmgr_pdev *pdev,
1389 uint8_t vdev_id,
1390 struct qdf_mac_addr *ap_bssid);
1391
1392 /**
1393 * wlan_cm_add_frame_to_scan_db() - Add the frame to scan db
1394 *
1395 * @psoc: PSOC pointer
1396 * @frame: frame to be added to scan db
1397 *
1398 * Fetch the channel from frame and add the frame to scan db
1399 *
1400 * Return: QDF_STATUS
1401 */
1402 QDF_STATUS
1403 wlan_cm_add_frame_to_scan_db(struct wlan_objmgr_psoc *psoc,
1404 struct roam_scan_candidate_frame *frame);
1405
1406 /**
1407 * wlan_cm_add_all_link_probe_rsp_to_scan_db() - Parse and generate
1408 * probe responses for each of the per-sta profile
1409 *
1410 * @psoc: psoc objmgr ptr
1411 * @candidate: roam scan candidate info
1412 */
1413 QDF_STATUS
1414 wlan_cm_add_all_link_probe_rsp_to_scan_db(struct wlan_objmgr_psoc *psoc,
1415 struct roam_scan_candidate_frame *candidate);
1416
1417 /**
1418 * wlan_cm_is_mbo_ap_without_pmf() - Check if the connected AP is MBO without
1419 * PMF
1420 * @psoc: PSOC pointer
1421 * @vdev_id: vdev id
1422 *
1423 * Return: True if connected AP is MBO capable without PMF
1424 */
1425 bool wlan_cm_is_mbo_ap_without_pmf(struct wlan_objmgr_psoc *psoc,
1426 uint8_t vdev_id);
1427
1428 /**
1429 * wlan_cm_roam_btm_block_event() - Send BTM block/drop logging event
1430 * @vdev_id: vdev id
1431 * @token: BTM token
1432 * @reason: Reason for dropping the BTM frame
1433 *
1434 * This is wrapper for cm_roam_btm_block_event()
1435 *
1436 * Return: QDF_STATUS
1437 */
1438 QDF_STATUS
1439 wlan_cm_roam_btm_block_event(uint8_t vdev_id, uint8_t token,
1440 enum wlan_diag_btm_block_reason reason);
1441 #else
1442 static inline
wlan_cm_roam_activate_pcl_per_vdev(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,bool pcl_per_vdev)1443 void wlan_cm_roam_activate_pcl_per_vdev(struct wlan_objmgr_psoc *psoc,
1444 uint8_t vdev_id,
1445 bool pcl_per_vdev)
1446 {}
1447
1448 static inline
wlan_cm_get_roam_band_value(struct wlan_objmgr_psoc * psoc,struct wlan_objmgr_vdev * vdev)1449 uint32_t wlan_cm_get_roam_band_value(struct wlan_objmgr_psoc *psoc,
1450 struct wlan_objmgr_vdev *vdev)
1451 {
1452 uint32_t current_band;
1453
1454 ucfg_reg_get_band(wlan_vdev_get_pdev(vdev), ¤t_band);
1455
1456 return current_band;
1457 }
1458
1459 static inline
wlan_cm_roam_is_pcl_per_vdev_active(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id)1460 bool wlan_cm_roam_is_pcl_per_vdev_active(struct wlan_objmgr_psoc *psoc,
1461 uint8_t vdev_id)
1462 {
1463 return false;
1464 }
1465
1466 static inline void
wlan_cm_dual_sta_roam_update_connect_channels(struct wlan_objmgr_psoc * psoc,struct scan_filter * filter)1467 wlan_cm_dual_sta_roam_update_connect_channels(struct wlan_objmgr_psoc *psoc,
1468 struct scan_filter *filter)
1469 {}
1470
1471 static inline QDF_STATUS
wlan_cm_roam_extract_btm_response(wmi_unified_t wmi,void * evt_buf,struct roam_btm_response_data * dst,uint8_t idx)1472 wlan_cm_roam_extract_btm_response(wmi_unified_t wmi, void *evt_buf,
1473 struct roam_btm_response_data *dst,
1474 uint8_t idx)
1475 {
1476 return QDF_STATUS_E_NOSUPPORT;
1477 }
1478
1479 static inline QDF_STATUS
wlan_cm_roam_extract_frame_info(wmi_unified_t wmi,void * evt_buf,struct roam_frame_info * dst,uint8_t idx)1480 wlan_cm_roam_extract_frame_info(wmi_unified_t wmi, void *evt_buf,
1481 struct roam_frame_info *dst, uint8_t idx)
1482 {
1483 return QDF_STATUS_E_NOSUPPORT;
1484 }
1485
1486 static inline QDF_STATUS
wlan_cm_roam_extract_roam_initial_info(wmi_unified_t wmi,void * evt_buf,struct roam_initial_data * dst,uint8_t idx)1487 wlan_cm_roam_extract_roam_initial_info(wmi_unified_t wmi, void *evt_buf,
1488 struct roam_initial_data *dst,
1489 uint8_t idx)
1490 {
1491 return QDF_STATUS_E_NOSUPPORT;
1492 }
1493
1494 static inline QDF_STATUS
wlan_cm_roam_extract_roam_msg_info(wmi_unified_t wmi,void * evt_buf,struct roam_msg_info * dst,uint8_t idx)1495 wlan_cm_roam_extract_roam_msg_info(wmi_unified_t wmi, void *evt_buf,
1496 struct roam_msg_info *dst, uint8_t idx)
1497 {
1498 return QDF_STATUS_E_NOSUPPORT;
1499 }
1500
1501 static inline void
wlan_cm_roam_disable_vendor_btm(struct wlan_objmgr_psoc * psoc)1502 wlan_cm_roam_disable_vendor_btm(struct wlan_objmgr_psoc *psoc)
1503 {}
1504
1505 static inline void
wlan_cm_roam_set_vendor_btm_params(struct wlan_objmgr_psoc * psoc,struct wlan_cm_roam_vendor_btm_params * param)1506 wlan_cm_roam_set_vendor_btm_params(struct wlan_objmgr_psoc *psoc,
1507 struct wlan_cm_roam_vendor_btm_params *param)
1508 {}
1509
1510 static inline void
wlan_cm_roam_get_score_delta_params(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,struct roam_trigger_score_delta * param)1511 wlan_cm_roam_get_score_delta_params(struct wlan_objmgr_psoc *psoc,
1512 uint8_t vdev_id,
1513 struct roam_trigger_score_delta *param)
1514 {}
1515
1516 static inline void
wlan_cm_roam_get_min_rssi_params(struct wlan_objmgr_psoc * psoc,struct wlan_roam_triggers * params)1517 wlan_cm_roam_get_min_rssi_params(struct wlan_objmgr_psoc *psoc,
1518 struct wlan_roam_triggers *params)
1519 {}
1520
1521 static inline QDF_STATUS
wlan_cm_update_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,uint32_t roam_scan_scheme_bitmap)1522 wlan_cm_update_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc,
1523 uint8_t vdev_id,
1524 uint32_t roam_scan_scheme_bitmap)
1525 {
1526 return QDF_STATUS_E_NOSUPPORT;
1527 }
1528
1529 static inline QDF_STATUS
wlan_cm_set_roam_band_bitmask(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,uint32_t roam_band_bitmask)1530 wlan_cm_set_roam_band_bitmask(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
1531 uint32_t roam_band_bitmask)
1532 {
1533 return QDF_STATUS_E_NOSUPPORT;
1534 }
1535
wlan_cm_set_btm_config(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,bool is_disable_btm)1536 static inline QDF_STATUS wlan_cm_set_btm_config(struct wlan_objmgr_psoc *psoc,
1537 uint8_t vdev_id,
1538 bool is_disable_btm)
1539 {
1540 return QDF_STATUS_SUCCESS;
1541 }
1542
1543 static inline
wlan_cm_get_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id)1544 uint32_t wlan_cm_get_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc,
1545 uint8_t vdev_id)
1546 {
1547 return 0;
1548 }
1549
1550 static inline QDF_STATUS
wlan_cm_update_roam_states(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,uint32_t value,enum roam_fail_params states)1551 wlan_cm_update_roam_states(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
1552 uint32_t value, enum roam_fail_params states)
1553 {
1554 return QDF_STATUS_SUCCESS;
1555 }
1556
1557 static inline uint32_t
wlan_cm_get_roam_states(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,enum roam_fail_params states)1558 wlan_cm_get_roam_states(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
1559 enum roam_fail_params states)
1560 {
1561 return 0;
1562 }
1563
wlan_cm_set_psk_pmk(struct wlan_objmgr_pdev * pdev,uint8_t vdev_id,uint8_t * psk_pmk,uint8_t pmk_len)1564 static inline void wlan_cm_set_psk_pmk(struct wlan_objmgr_pdev *pdev,
1565 uint8_t vdev_id, uint8_t *psk_pmk,
1566 uint8_t pmk_len)
1567 {}
1568
1569 static inline QDF_STATUS
cm_akm_roam_allowed(struct wlan_objmgr_psoc * psoc,struct wlan_objmgr_vdev * vdev)1570 cm_akm_roam_allowed(struct wlan_objmgr_psoc *psoc,
1571 struct wlan_objmgr_vdev *vdev)
1572 {
1573 return false;
1574 }
1575
1576 static inline void
cm_handle_roam_reason_ho_failed(uint8_t vdev_id,struct qdf_mac_addr bssid,struct cm_hw_mode_trans_ind * hw_mode_trans_ind)1577 cm_handle_roam_reason_ho_failed(uint8_t vdev_id, struct qdf_mac_addr bssid,
1578 struct cm_hw_mode_trans_ind *hw_mode_trans_ind)
1579 {}
1580
1581 static inline QDF_STATUS
cm_handle_scan_ch_list_data(struct cm_roam_scan_ch_resp * data)1582 cm_handle_scan_ch_list_data(struct cm_roam_scan_ch_resp *data)
1583 {
1584 return QDF_STATUS_E_NOSUPPORT;
1585 }
1586
1587 static inline QDF_STATUS
wlan_cm_update_roam_rt_stats(struct wlan_objmgr_psoc * psoc,uint8_t value,enum roam_rt_stats_params stats)1588 wlan_cm_update_roam_rt_stats(struct wlan_objmgr_psoc *psoc,
1589 uint8_t value, enum roam_rt_stats_params stats)
1590 {
1591 return QDF_STATUS_SUCCESS;
1592 }
1593
1594 static inline uint8_t
wlan_cm_get_roam_rt_stats(struct wlan_objmgr_psoc * psoc,enum roam_rt_stats_params stats)1595 wlan_cm_get_roam_rt_stats(struct wlan_objmgr_psoc *psoc,
1596 enum roam_rt_stats_params stats)
1597 {
1598 return 0;
1599 }
1600
1601 static inline void
cm_report_roam_rt_stats(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,enum roam_rt_stats_type events,struct roam_stats_event * roam_info,uint32_t value,uint8_t idx,uint32_t reason)1602 cm_report_roam_rt_stats(struct wlan_objmgr_psoc *psoc,
1603 uint8_t vdev_id, enum roam_rt_stats_type events,
1604 struct roam_stats_event *roam_info,
1605 uint32_t value, uint8_t idx, uint32_t reason)
1606 {}
1607
1608 static inline QDF_STATUS
cm_roam_candidate_event_handler(struct wlan_objmgr_psoc * psoc,struct roam_scan_candidate_frame * candidate)1609 cm_roam_candidate_event_handler(struct wlan_objmgr_psoc *psoc,
1610 struct roam_scan_candidate_frame *candidate)
1611 {
1612 return QDF_STATUS_SUCCESS;
1613 }
1614
1615 static inline QDF_STATUS
cm_roam_sync_event_handler(struct wlan_objmgr_psoc * psoc,uint8_t * event,uint32_t len,struct roam_offload_synch_ind * sync_ind)1616 cm_roam_sync_event_handler(struct wlan_objmgr_psoc *psoc,
1617 uint8_t *event, uint32_t len,
1618 struct roam_offload_synch_ind *sync_ind)
1619 {
1620 return QDF_STATUS_SUCCESS;
1621 }
1622
1623 static inline QDF_STATUS
cm_roam_sync_frame_event_handler(struct wlan_objmgr_psoc * psoc,struct roam_synch_frame_ind * frame_ind)1624 cm_roam_sync_frame_event_handler(struct wlan_objmgr_psoc *psoc,
1625 struct roam_synch_frame_ind *frame_ind)
1626 {
1627 return QDF_STATUS_SUCCESS;
1628 }
1629
1630 static inline bool
wlan_cm_is_roam_sync_in_progress(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id)1631 wlan_cm_is_roam_sync_in_progress(struct wlan_objmgr_psoc *psoc,
1632 uint8_t vdev_id)
1633 {
1634 return false;
1635 }
1636
1637 static inline void
wlan_cm_set_roam_offload_bssid(struct wlan_objmgr_vdev * vdev,struct qdf_mac_addr * bssid)1638 wlan_cm_set_roam_offload_bssid(struct wlan_objmgr_vdev *vdev,
1639 struct qdf_mac_addr *bssid)
1640 {
1641 }
1642
1643 static inline void
wlan_cm_get_roam_offload_bssid(struct wlan_objmgr_vdev * vdev,struct qdf_mac_addr * bssid)1644 wlan_cm_get_roam_offload_bssid(struct wlan_objmgr_vdev *vdev,
1645 struct qdf_mac_addr *bssid)
1646 {
1647 }
1648
1649 static inline void
wlan_cm_set_roam_offload_ssid(struct wlan_objmgr_vdev * vdev,uint8_t * ssid,uint8_t len)1650 wlan_cm_set_roam_offload_ssid(struct wlan_objmgr_vdev *vdev,
1651 uint8_t *ssid, uint8_t len)
1652 {
1653 }
1654
1655 static inline void
wlan_cm_get_roam_offload_ssid(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,uint8_t * ssid,uint8_t * len)1656 wlan_cm_get_roam_offload_ssid(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
1657 uint8_t *ssid, uint8_t *len)
1658 {
1659 }
1660
1661 static inline uint16_t
wlan_cm_roam_get_ho_delay_config(struct wlan_objmgr_psoc * psoc)1662 wlan_cm_roam_get_ho_delay_config(struct wlan_objmgr_psoc *psoc)
1663 {
1664 return 0;
1665 }
1666
1667 static inline uint8_t
wlan_cm_get_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc * psoc)1668 wlan_cm_get_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc *psoc)
1669 {
1670 return 0;
1671 }
1672
1673 static inline uint8_t
wlan_cm_roam_get_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc * psoc)1674 wlan_cm_roam_get_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc *psoc)
1675 {
1676 return 0;
1677 }
1678
1679 static inline
mlme_cm_alloc_roam_stats_info(struct vdev_mlme_obj * vdev_mlme)1680 void mlme_cm_alloc_roam_stats_info(struct vdev_mlme_obj *vdev_mlme)
1681 {
1682 }
1683
1684 static inline
mlme_cm_free_roam_stats_info(mlme_vdev_ext_t * ext_hdl)1685 void mlme_cm_free_roam_stats_info(mlme_vdev_ext_t *ext_hdl)
1686 {
1687 }
1688
1689 static inline QDF_STATUS
wlan_cm_update_offload_ssid_from_candidate(struct wlan_objmgr_pdev * pdev,uint8_t vdev_id,struct qdf_mac_addr * ap_bssid)1690 wlan_cm_update_offload_ssid_from_candidate(struct wlan_objmgr_pdev *pdev,
1691 uint8_t vdev_id,
1692 struct qdf_mac_addr *ap_bssid)
1693 {
1694 return QDF_STATUS_SUCCESS;
1695 }
1696
1697 static inline QDF_STATUS
wlan_cm_add_frame_to_scan_db(struct wlan_objmgr_psoc * psoc,struct roam_scan_candidate_frame * frame)1698 wlan_cm_add_frame_to_scan_db(struct wlan_objmgr_psoc *psoc,
1699 struct roam_scan_candidate_frame *frame)
1700 {
1701 return QDF_STATUS_SUCCESS;
1702 }
1703
1704 static inline QDF_STATUS
wlan_cm_add_all_link_probe_rsp_to_scan_db(struct wlan_objmgr_psoc * psoc,struct roam_scan_candidate_frame * candidate)1705 wlan_cm_add_all_link_probe_rsp_to_scan_db(struct wlan_objmgr_psoc *psoc,
1706 struct roam_scan_candidate_frame *candidate)
1707 {
1708 return QDF_STATUS_SUCCESS;
1709 }
1710
1711 static inline uint8_t
wlan_cm_get_roam_scan_high_rssi_offset(struct wlan_objmgr_psoc * psoc)1712 wlan_cm_get_roam_scan_high_rssi_offset(struct wlan_objmgr_psoc *psoc)
1713 {
1714 return 0;
1715 }
1716
1717 static inline
wlan_cm_is_mbo_ap_without_pmf(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id)1718 bool wlan_cm_is_mbo_ap_without_pmf(struct wlan_objmgr_psoc *psoc,
1719 uint8_t vdev_id)
1720 {
1721 return false;
1722 }
1723
1724 static inline QDF_STATUS
wlan_cm_roam_btm_block_event(uint8_t vdev_id,uint8_t token,enum wlan_diag_btm_block_reason reason)1725 wlan_cm_roam_btm_block_event(uint8_t vdev_id, uint8_t token,
1726 enum wlan_diag_btm_block_reason reason)
1727 {
1728 return QDF_STATUS_E_NOSUPPORT;
1729 }
1730 #endif /* WLAN_FEATURE_ROAM_OFFLOAD */
1731
1732 #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
1733 /**
1734 * cm_roam_sync_key_event_handler() - Handle roam sync key event and
1735 * store the keys in crypto module
1736 * @psoc: Pointer to psoc object
1737 * @keys: Pointer to the keys
1738 * @num_keys: Number of links for which keys entries are available
1739 *
1740 * Return: QDF_STATUS
1741 */
1742 QDF_STATUS cm_roam_sync_key_event_handler(struct wlan_objmgr_psoc *psoc,
1743 struct wlan_crypto_key_entry *keys,
1744 uint8_t num_keys);
1745 #else
1746 static inline
cm_roam_sync_key_event_handler(struct wlan_objmgr_psoc * psoc,struct wlan_crypto_key_entry * keys,uint8_t num_keys)1747 QDF_STATUS cm_roam_sync_key_event_handler(struct wlan_objmgr_psoc *psoc,
1748 struct wlan_crypto_key_entry *keys,
1749 uint8_t num_keys)
1750 {
1751 return QDF_STATUS_E_NOSUPPORT;
1752 }
1753 #endif
1754
1755 #ifdef WLAN_FEATURE_FIPS
1756 /**
1757 * cm_roam_pmkid_req_ind() - Function to handle
1758 * roam event from firmware for pmkid generation.
1759 * @psoc: psoc pointer
1760 * @vdev_id: Vdev id
1761 * @bss_list: candidate AP bssid list
1762 */
1763 QDF_STATUS
1764 cm_roam_pmkid_req_ind(struct wlan_objmgr_psoc *psoc,
1765 uint8_t vdev_id, struct roam_pmkid_req_event *bss_list);
1766 #else /* WLAN_FEATURE_FIPS */
1767 static inline QDF_STATUS
cm_roam_pmkid_req_ind(struct wlan_objmgr_psoc * psoc,uint8_t vdev_id,struct roam_pmkid_req_event * bss_list)1768 cm_roam_pmkid_req_ind(struct wlan_objmgr_psoc *psoc,
1769 uint8_t vdev_id, struct roam_pmkid_req_event *bss_list)
1770 {
1771 return QDF_STATUS_SUCCESS;
1772 }
1773 #endif /* WLAN_FEATURE_FIPS */
1774
1775 /**
1776 * wlan_get_chan_by_bssid_from_rnr: get chan from rnr through bssid
1777 * @vdev: vdev
1778 * @cm_id: connect manager id
1779 * @link_addr: bssid of given link
1780 * @chan: chan to get
1781 * @op_class: operation class
1782 *
1783 * Return: QDF_STATUS
1784 */
1785 QDF_STATUS wlan_get_chan_by_bssid_from_rnr(struct wlan_objmgr_vdev *vdev,
1786 wlan_cm_id cm_id,
1787 struct qdf_mac_addr *link_addr,
1788 uint8_t *chan, uint8_t *op_class);
1789
1790 /**
1791 * wlan_get_chan_by_link_id_from_rnr: get chan from rnr through link id
1792 * @vdev: vdev
1793 * @cm_id: connect manager id
1794 * @link_id: link id of given link
1795 * @chan: chan to get
1796 * @op_class: operation class
1797 *
1798 * Return: QDF_STATUS
1799 */
1800 #ifdef WLAN_FEATURE_11BE_MLO
1801 QDF_STATUS wlan_get_chan_by_link_id_from_rnr(struct wlan_objmgr_vdev *vdev,
1802 wlan_cm_id cm_id,
1803 uint8_t link_id,
1804 uint8_t *chan, uint8_t *op_class);
1805 #endif
1806
1807 /**
1808 * cm_rso_cmd_status_event_handler() - Handler for rso cmd status
1809 * @vdev_id: vdev id
1810 * @notif: roam notification of type enum cm_roam_notif
1811 *
1812 * Return: QDF_STATUS
1813 */
1814 int cm_rso_cmd_status_event_handler(uint8_t vdev_id, enum cm_roam_notif notif);
1815
1816 /**
1817 * cm_handle_roam_reason_invoke_roam_fail() - Handler for roam invoke fail event
1818 * @vdev_id: vdev id
1819 * @notif_params: contains roam invoke fail reason from wmi_roam_invoke_error_t
1820 * @trans_ind: hw_mode transition indication
1821 *
1822 * Return: None
1823 */
1824 void
1825 cm_handle_roam_reason_invoke_roam_fail(uint8_t vdev_id, uint32_t notif_params,
1826 struct cm_hw_mode_trans_ind *trans_ind);
1827
1828 /**
1829 * cm_handle_roam_sync_update_hw_mode() - Handler for roam sync hw mode update
1830 * @trans_ind: hw_mode transition indication
1831 *
1832 * Return: None
1833 */
1834 void
1835 cm_handle_roam_sync_update_hw_mode(struct cm_hw_mode_trans_ind *trans_ind);
1836
1837 /**
1838 * cm_handle_roam_reason_deauth() - Handler for roam due to deauth from AP
1839 * @vdev_id: vdev id
1840 * @notif_params: contains roam invoke fail reason from wmi_roam_invoke_error_t
1841 * @deauth_disassoc_frame: Disassoc or deauth frame
1842 * @frame_len: Contains the length of @deauth_disassoc_frame
1843 *
1844 * Return: None
1845 */
1846 void cm_handle_roam_reason_deauth(uint8_t vdev_id, uint32_t notif_params,
1847 uint8_t *deauth_disassoc_frame,
1848 uint32_t frame_len);
1849
1850 /**
1851 * cm_handle_roam_reason_btm() - Handler for roam due to btm from AP
1852 * @vdev_id: vdev id
1853 *
1854 * Return: None
1855 */
1856 void cm_handle_roam_reason_btm(uint8_t vdev_id);
1857
1858 /**
1859 * cm_handle_roam_reason_bmiss() - Handler for roam due to bmiss
1860 * @vdev_id: vdev id
1861 * @rssi: RSSI value
1862 *
1863 * Return: None
1864 */
1865 void cm_handle_roam_reason_bmiss(uint8_t vdev_id, uint32_t rssi);
1866
1867 /**
1868 * cm_handle_roam_reason_better_ap() - Handler for roam due to better AP
1869 * @vdev_id: vdev id
1870 * @rssi: RSSI value
1871 *
1872 * Return: None
1873 */
1874 void cm_handle_roam_reason_better_ap(uint8_t vdev_id, uint32_t rssi);
1875
1876 /**
1877 * cm_handle_roam_reason_suitable_ap() - Handler for roam due to suitable AP
1878 * @vdev_id: vdev id
1879 * @rssi: RSSI value
1880 *
1881 * Return: None
1882 */
1883 void cm_handle_roam_reason_suitable_ap(uint8_t vdev_id, uint32_t rssi);
1884
1885 /**
1886 * cm_roam_event_handler() - Carries extracted roam info
1887 * @roam_event: data carried by roam event
1888 *
1889 * Return: QDF_STATUS
1890 */
1891 QDF_STATUS
1892 cm_roam_event_handler(struct roam_offload_roam_event *roam_event);
1893
1894 /**
1895 * cm_btm_denylist_event_handler() - Deny list the given BSSID due to btm
1896 * @psoc: PSOC pointer
1897 * @list: Roam denylist info
1898 *
1899 * Return: QDF_STATUS
1900 */
1901 QDF_STATUS
1902 cm_btm_denylist_event_handler(struct wlan_objmgr_psoc *psoc,
1903 struct roam_denylist_event *list);
1904
1905 /**
1906 * cm_vdev_disconnect_event_handler() - disconnect evt handler for target_if
1907 * @data: disconnect event data
1908 *
1909 * Return: QDF_STATUS
1910 */
1911 QDF_STATUS
1912 cm_vdev_disconnect_event_handler(struct vdev_disconnect_event_data *data);
1913
1914 /**
1915 * cm_handle_disconnect_reason() - disconnect reason evt wrapper for wma
1916 * @data: disconnect event data
1917 *
1918 * Return: QDF_STATUS
1919 */
1920 QDF_STATUS
1921 cm_handle_disconnect_reason(struct vdev_disconnect_event_data *data);
1922
1923 /**
1924 * cm_roam_scan_ch_list_event_handler() - Roam scan ch evt handler for target_if
1925 * @data: roam scan channel event data
1926 *
1927 * Return: QDF_STATUS
1928 */
1929 QDF_STATUS
1930 cm_roam_scan_ch_list_event_handler(struct cm_roam_scan_ch_resp *data);
1931
1932 /**
1933 * cm_roam_stats_event_handler() - Carries extracted roam stats info
1934 * @psoc: PSOC pointer
1935 * @stats_info: stats data carried by roam_stats_event
1936 *
1937 * Return: QDF_STATUS
1938 */
1939 QDF_STATUS
1940 cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
1941 struct roam_stats_event *stats_info);
1942
1943 /**
1944 * cm_handle_auth_offload() - auth offload evt wrapper for wma
1945 * @auth_event: auth offload event data
1946 *
1947 * Return: QDF_STATUS
1948 */
1949 QDF_STATUS
1950 cm_handle_auth_offload(struct auth_offload_event *auth_event);
1951
1952 /**
1953 * cm_roam_auth_offload_event_handler() - Handler for auth offload event
1954 * @auth_event: Authentication event
1955 *
1956 * Return: QDF_STATUS
1957 */
1958 QDF_STATUS
1959 cm_roam_auth_offload_event_handler(struct auth_offload_event *auth_event);
1960
1961 /*
1962 * cm_roam_pmkid_request_handler() - Carries extracted pmkid list info
1963 * @data: Pmkid event with entries
1964 *
1965 * Return: QDF_STATUS
1966 */
1967 QDF_STATUS
1968 cm_roam_pmkid_request_handler(struct roam_pmkid_req_event *data);
1969
1970 #ifdef WLAN_VENDOR_HANDOFF_CONTROL
1971 /**
1972 * cm_roam_vendor_handoff_event_handler() - vendor handoff event handler
1973 * @psoc: psoc object
1974 * @data: vendor handoff params
1975 *
1976 * Return: None
1977 */
1978 void
1979 cm_roam_vendor_handoff_event_handler(struct wlan_objmgr_psoc *psoc,
1980 struct roam_vendor_handoff_params *data);
1981 #endif
1982
1983 /**
1984 * cm_roam_update_vdev() - Update the STA and BSS
1985 * @vdev: Pointer to the vdev object
1986 * @sync_ind: Information needed for roam sync propagation
1987 *
1988 * This function will perform all the vdev related operations with
1989 * respect to the self sta and the peer after roaming and completes
1990 * the roam synch propagation with respect to WMA layer.
1991 *
1992 * Return: QDF_STATUS
1993 */
1994 QDF_STATUS cm_roam_update_vdev(struct wlan_objmgr_vdev *vdev,
1995 struct roam_offload_synch_ind *sync_ind);
1996
1997 /**
1998 * cm_roam_pe_sync_callback() - Callback registered at pe, gets invoked when
1999 * ROAM SYNCH event is received from firmware
2000 * @sync_ind: Structure with roam synch parameters
2001 * @vdev_id: vdev id
2002 * @len: length for bss_description
2003 *
2004 * This is a PE level callback called from CM to complete the roam synch
2005 * propagation at PE level and also fill the BSS descriptor which will be
2006 * helpful further to complete the roam synch propagation.
2007 *
2008 * Return: QDF_STATUS
2009 */
2010 QDF_STATUS
2011 cm_roam_pe_sync_callback(struct roam_offload_synch_ind *sync_ind,
2012 uint8_t vdev_id, uint16_t len);
2013
2014 /**
2015 * cm_update_phymode_on_roam() - Update new phymode after
2016 * ROAM SYNCH event is received from firmware
2017 * @vdev_id: roamed vdev id
2018 * @sync_ind: Structure with roam synch parameters
2019 *
2020 * This api will update the phy mode after roam sync is received.
2021 *
2022 * Return: none
2023 */
2024 void
2025 cm_update_phymode_on_roam(uint8_t vdev_id,
2026 struct roam_offload_synch_ind *sync_ind);
2027
2028 /**
2029 * wlan_cm_fw_to_host_phymode() - Convert fw phymode to host
2030 * @phymode: wmi phymode
2031 *
2032 * This api will convert the phy mode from fw to host type.
2033 *
2034 * Return: wlan phymode
2035 */
2036 enum wlan_phymode
2037 wlan_cm_fw_to_host_phymode(WMI_HOST_WLAN_PHY_MODE phymode);
2038
2039 /**
2040 * wlan_cm_sta_mlme_vdev_roam_notify() - STA mlme vdev roam notify
2041 * @vdev_mlme: MLME-private vdev context
2042 * @data_len: Length of @data
2043 * @data: Roam data
2044 *
2045 * This function will handle the roam notify event
2046 *
2047 * Return: QDF_STATUS
2048 */
2049 QDF_STATUS
2050 wlan_cm_sta_mlme_vdev_roam_notify(struct vdev_mlme_obj *vdev_mlme,
2051 uint16_t data_len, void *data);
2052
2053 /**
2054 * wlan_cm_same_band_sta_allowed() - check if same band STA +STA is allowed
2055 *
2056 * @psoc: psoc ptr
2057 *
2058 * Return: true if same band STA+STA is allowed
2059 */
2060 bool wlan_cm_same_band_sta_allowed(struct wlan_objmgr_psoc *psoc);
2061
2062 /**
2063 * cm_cleanup_mlo_link() - Cleanup the MLO link
2064 *
2065 * @vdev: MLO link vdev
2066 *
2067 * This posts the event WLAN_CM_SM_EV_ROAM_LINK_DOWN to CM to cleanup the
2068 * resources allocated for MLO link e.g. vdev, pe_session, etc..
2069 * This gets called when MLO to non-MLO roaming happens
2070 *
2071 * Return: qdf_status
2072 */
2073 QDF_STATUS cm_cleanup_mlo_link(struct wlan_objmgr_vdev *vdev);
2074
2075 /**
2076 * wlan_is_roaming_enabled() - Check if Roaming is enabled
2077 *
2078 * @pdev: pointer to pdev object
2079 * @vdev_id : Vdev id
2080 *
2081 * Check if the ROAM enable vdev param (WMI_VDEV_PARAM_ROAM_FW_OFFLOAD)
2082 * is sent to firmware or not.
2083 *
2084 * Return: True if RSO state is not DEINIT, which indicates that vdev param
2085 * WMI_VDEV_PARAM_ROAM_FW_OFFLOAD is sent to firmware.
2086 */
2087 bool wlan_is_roaming_enabled(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id);
2088
2089 /**
2090 * wlan_is_rso_enabled() - Check if RSO state is enabled
2091 *
2092 * @pdev: pointer to pdev object
2093 * @vdev_id : Vdev id
2094 *
2095 * Check if the ROAM SCAN OFFLOAD enable is sent to firmware. Host driver tracks
2096 * this through RSO state machine and the states can be WLAN_ROAM_RSO_ENABLED/
2097 * WLAN_ROAMING_IN_PROG/WLAN_ROAM_SYNCH_IN_PROG/WLAN_MLO_ROAM_SYNCH_IN_PROG.
2098 *
2099 * Return: True if RSO state is any of the above mentioned states.
2100 */
2101 bool wlan_is_rso_enabled(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id);
2102
2103 /**
2104 * wlan_cm_set_sae_auth_ta() - Set SAE auth tx address
2105 * @pdev: pdev object
2106 * @vdev_id : Vdev id
2107 * @sae_auth_ta: SAE auth tx address
2108 *
2109 * Return: QDF_STATUS
2110 */
2111 QDF_STATUS
2112 wlan_cm_set_sae_auth_ta(struct wlan_objmgr_pdev *pdev,
2113 uint8_t vdev_id,
2114 struct qdf_mac_addr sae_auth_ta);
2115
2116 /**
2117 * wlan_cm_get_sae_auth_ta() - Get SAE auth tx address
2118 * @pdev: pdev object
2119 * @vdev_id: Vdev id
2120 * @sae_auth_ta: SAE auth tx address
2121 *
2122 * Return: QDF_STATUS
2123 */
2124 QDF_STATUS
2125 wlan_cm_get_sae_auth_ta(struct wlan_objmgr_pdev *pdev,
2126 uint8_t vdev_id,
2127 struct qdf_mac_addr *sae_auth_ta);
2128
2129 /**
2130 * wlan_cm_set_assoc_btm_cap() - Set the assoc BTM capability
2131 * @vdev: pointer to vdev
2132 * @val: BTM cap
2133 *
2134 * Return: None
2135 */
2136 void
2137 wlan_cm_set_assoc_btm_cap(struct wlan_objmgr_vdev *vdev, bool val);
2138
2139 /**
2140 * wlan_cm_get_assoc_btm_cap() - Get the assoc BTM capability
2141 * @psoc: pointer to psoc
2142 * @vdev_id: vdev id
2143 *
2144 * Return: BTM cap
2145 */
2146 bool wlan_cm_get_assoc_btm_cap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id);
2147
2148 /**
2149 * wlan_cm_is_self_mld_roam_supported() - Is self mld roam supported
2150 * @psoc: pointer to psoc object
2151 *
2152 * Return: bool, true: self mld roam supported
2153 */
2154 bool wlan_cm_is_self_mld_roam_supported(struct wlan_objmgr_psoc *psoc);
2155
2156 /**
2157 * wlan_cm_set_force_20mhz_in_24ghz() - Sets the config to (dis)allow
2158 * the 40 MHz connection in 2.4 GHz
2159 *
2160 * @vdev: pointer to vdev
2161 * @is_40mhz_cap: is 40 MHz supported
2162 *
2163 * Return: None
2164 */
2165 void
2166 wlan_cm_set_force_20mhz_in_24ghz(struct wlan_objmgr_vdev *vdev,
2167 bool is_40mhz_cap);
2168
2169 /**
2170 * wlan_cm_get_force_20mhz_in_24ghz - Gets the 40 MHz (dis)allowed on 2.4 GHz
2171 * config
2172 * @vdev: pointer to vdev
2173 *
2174 * Return: 40 MHz allowed on 2.4 GHz
2175 */
2176 bool
2177 wlan_cm_get_force_20mhz_in_24ghz(struct wlan_objmgr_vdev *vdev);
2178
2179 /**
2180 * cm_send_ies_for_roam_invoke - Send IEs to firmware based on the reassoc
2181 * req received from the userspace
2182 * @vdev: vdev
2183 * @dot11_mode: dot11 mode
2184 *
2185 * Return: QDF_STATUS
2186 */
2187 QDF_STATUS
2188 cm_send_ies_for_roam_invoke(struct wlan_objmgr_vdev *vdev, uint16_t dot11_mode);
2189
2190 #ifdef WLAN_FEATURE_11BE_MLO
2191 /**
2192 * wlan_cm_is_sae_auth_addr_conversion_required() - check whether address
2193 * conversion is required or not.
2194 * @vdev: pointer to vdev
2195 *
2196 * This API checks the address conversion (mld to link and vice-versa) for sae
2197 * auth frames for below listed scenarios when mlo sae auth external conversion
2198 * is true.
2199 *
2200 * Connected AP Roam AP Connection Conversion
2201 * (MLO vdev)
2202 * non-ML non-ML initial FALSE
2203 * non-ML ML initial FALSE
2204 * non-ML non-ML roam FALSE
2205 * non-ML ML roam TRUE
2206 * ML non-ML initial TRUE
2207 * ML ML initial TRUE
2208 * ML non-ML roam FALSE
2209 * ML ML roam TRUE
2210 *
2211 * Return: true if address conversion required, otherwise false.
2212 */
2213 bool
2214 wlan_cm_is_sae_auth_addr_conversion_required(struct wlan_objmgr_vdev *vdev);
2215 #else
2216 static inline bool
wlan_cm_is_sae_auth_addr_conversion_required(struct wlan_objmgr_vdev * vdev)2217 wlan_cm_is_sae_auth_addr_conversion_required(struct wlan_objmgr_vdev *vdev)
2218 {
2219 return false;
2220 }
2221 #endif /* WLAN_FEATURE_11BE_MLO */
2222
2223 #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
2224 /**
2225 * wlan_cm_store_mlo_roam_peer_address() - cache peer mld and link address
2226 * while roaming
2227 * @pdev: pdev object
2228 * @auth_event: auth offload event data
2229 *
2230 * Return: void
2231 */
2232 void
2233 wlan_cm_store_mlo_roam_peer_address(struct wlan_objmgr_pdev *pdev,
2234 struct auth_offload_event *auth_event);
2235
2236 /**
2237 * wlan_cm_roaming_get_peer_mld_addr() - retrieve the peer mld address for
2238 * roaming.
2239 * @vdev: vdev pointer
2240 *
2241 * Return: pointer to struct qdf_mac_addr
2242 */
2243 struct qdf_mac_addr *
2244 wlan_cm_roaming_get_peer_mld_addr(struct wlan_objmgr_vdev *vdev);
2245
2246 /**
2247 * wlan_cm_roaming_get_peer_link_addr() - get peer link address for roaming
2248 * @vdev: vdev pointer
2249 *
2250 * Return: pointer to struct qdf_mac_addr
2251 */
2252 struct qdf_mac_addr *
2253 wlan_cm_roaming_get_peer_link_addr(struct wlan_objmgr_vdev *vdev);
2254
2255 /**
2256 * wlan_cm_roam_is_mlo_ap() - to check whether vdev will be roam to ml ap
2257 * @vdev: object manager vdev
2258 *
2259 * this function check whether roaming vdev will be connected to ml ap or not.
2260 *
2261 * Return: true if roam ap is ml capable otherwise false
2262 */
2263 bool
2264 wlan_cm_roam_is_mlo_ap(struct wlan_objmgr_vdev *vdev);
2265
2266 /**
2267 * wlan_cm_link_switch_notif_cb() - MLME CM link switch notifier callback
2268 * @vdev: object manager vdev
2269 * @req: Link switch request
2270 * @notify_reason: Notify reason
2271 *
2272 * Return: QDF_STATUS
2273 */
2274 QDF_STATUS wlan_cm_link_switch_notif_cb(struct wlan_objmgr_vdev *vdev,
2275 struct wlan_mlo_link_switch_req *req,
2276 enum wlan_mlo_link_switch_notify_reason notify_reason);
2277 #else
2278 static inline void
wlan_cm_store_mlo_roam_peer_address(struct wlan_objmgr_pdev * pdev,struct auth_offload_event * auth_event)2279 wlan_cm_store_mlo_roam_peer_address(struct wlan_objmgr_pdev *pdev,
2280 struct auth_offload_event *auth_event)
2281 {
2282 }
2283
2284 static inline struct qdf_mac_addr *
wlan_cm_roaming_get_mld_addr(struct wlan_objmgr_vdev * vdev)2285 wlan_cm_roaming_get_mld_addr(struct wlan_objmgr_vdev *vdev)
2286 {
2287 return NULL;
2288 }
2289
2290 static inline struct qdf_mac_addr *
wlan_cm_roaming_get_peer_link_addr(struct wlan_objmgr_vdev * vdev)2291 wlan_cm_roaming_get_peer_link_addr(struct wlan_objmgr_vdev *vdev)
2292 {
2293 return NULL;
2294 }
2295
2296 static inline bool
wlan_cm_roam_is_mlo_ap(struct wlan_objmgr_vdev * vdev)2297 wlan_cm_roam_is_mlo_ap(struct wlan_objmgr_vdev *vdev)
2298 {
2299 return false;
2300 }
2301
2302 static inline
wlan_cm_link_switch_notif_cb(struct wlan_objmgr_vdev * vdev,struct wlan_mlo_link_switch_req * req,enum wlan_mlo_link_switch_notify_reason notify_reason)2303 QDF_STATUS wlan_cm_link_switch_notif_cb(struct wlan_objmgr_vdev *vdev,
2304 struct wlan_mlo_link_switch_req *req,
2305 enum wlan_mlo_link_switch_notify_reason notify_reason)
2306 {
2307 return QDF_STATUS_E_NOSUPPORT;
2308 }
2309 #endif /* WLAN_FEATURE_11BE_MLO && WLAN_FEATURE_ROAM_OFFLOAD */
2310
2311 /**
2312 * wlan_update_peer_phy_mode() - update phymode in peer object
2313 * @des_chan: wlan_channel pointer contain new ch_freq
2314 * @vdev: vdev pointer
2315 *
2316 * Return: QDF_STATUS_SUCCESS if peer object phymode is set otherwise
2317 * QDF_STATUS_E_INVAL
2318 */
2319 QDF_STATUS
2320 wlan_update_peer_phy_mode(struct wlan_channel *des_chan,
2321 struct wlan_objmgr_vdev *vdev);
2322
2323 #endif /* WLAN_CM_ROAM_API_H__ */
2324