xref: /wlan-driver/qcacld-3.0/components/mlme/core/inc/wlan_mlme_vdev_mgr_interface.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1 /*
2  * Copyright (c) 2018-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
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 /**
20  * DOC: declare VDEV Manager interface APIs exposed by the mlme component
21  */
22 
23 #ifndef _WLAN_MLME_VDEV_MGR_INT_API_H_
24 #define _WLAN_MLME_VDEV_MGR_INT_API_H_
25 
26 #include <wlan_objmgr_vdev_obj.h>
27 #include "include/wlan_vdev_mlme.h"
28 #include "wlan_mlme_main.h"
29 #include "wma_if.h"
30 
31 /**
32  * mlme_register_mlme_ext_ops() - Register mlme ext ops
33  *
34  * This function is called to register mlme ext operations
35  *
36  * Return: QDF_STATUS
37  */
38 QDF_STATUS mlme_register_mlme_ext_ops(void);
39 
40 /**
41  * mlme_register_mlo_ext_ops() - Register mlme mlo ext ops
42  *
43  * This function is called to register mlme mlo ext operations
44  *
45  * Return: QDF_STATUS
46  */
47 QDF_STATUS mlme_register_mlo_ext_ops(void);
48 
49 /**
50  * mlme_unregister_mlo_ext_ops() - Unregister mlme mlo ext ops
51  *
52  * This function is called to unregister mlme mlo ext operations
53  *
54  * Return: QDF_STATUS
55  */
56 QDF_STATUS mlme_unregister_mlo_ext_ops(void);
57 
58 /**
59  * mlme_register_vdev_mgr_ops() - Register vdev mgr ops
60  * @vdev_mlme: vdev mlme object
61  *
62  * This function is called to register vdev manager operations
63  *
64  * Return: QDF_STATUS
65  */
66 QDF_STATUS mlme_register_vdev_mgr_ops(struct vdev_mlme_obj *vdev_mlme);
67 /**
68  * mlme_unregister_vdev_mgr_ops() - Unregister vdev mgr ops
69  * @vdev_mlme: vdev mlme object
70  *
71  * This function is called to unregister vdev manager operations
72  *
73  * Return: QDF_STATUS
74  */
75 QDF_STATUS mlme_unregister_vdev_mgr_ops(struct vdev_mlme_obj *vdev_mlme);
76 
77 /**
78  * mlme_set_chan_switch_in_progress() - set mlme priv restart in progress
79  * @vdev: vdev pointer
80  * @val: value to be set
81  *
82  * Return: QDF_STATUS
83  */
84 QDF_STATUS mlme_set_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev,
85 					       bool val);
86 
87 #ifdef WLAN_FEATURE_MSCS
88 /**
89  * mlme_set_is_mscs_req_sent() - set mscs frame req flag
90  * @vdev: vdev pointer
91  * @val: value to be set
92  *
93  * Return: QDF_STATUS
94  */
95 QDF_STATUS mlme_set_is_mscs_req_sent(struct wlan_objmgr_vdev *vdev, bool val);
96 
97 /**
98  * mlme_get_is_mscs_req_sent() - get mscs frame req flag
99  * @vdev: vdev pointer
100  *
101  * Return: value of mscs flag
102  */
103 bool mlme_get_is_mscs_req_sent(struct wlan_objmgr_vdev *vdev);
104 #else
105 static inline
mlme_set_is_mscs_req_sent(struct wlan_objmgr_vdev * vdev,bool val)106 QDF_STATUS mlme_set_is_mscs_req_sent(struct wlan_objmgr_vdev *vdev, bool val)
107 {
108 	return QDF_STATUS_E_FAILURE;
109 }
110 
111 static inline
mlme_get_is_mscs_req_sent(struct wlan_objmgr_vdev * vdev)112 bool mlme_get_is_mscs_req_sent(struct wlan_objmgr_vdev *vdev)
113 {
114 	return false;
115 }
116 #endif
117 
118 /**
119  * mlme_is_chan_switch_in_progress() - get mlme priv restart in progress
120  * @vdev: vdev pointer
121  *
122  * Return: value of mlme priv restart in progress
123  */
124 bool mlme_is_chan_switch_in_progress(struct wlan_objmgr_vdev *vdev);
125 
126 /**
127  * ap_mlme_set_hidden_ssid_restart_in_progress() - set mlme priv hidden ssid
128  * restart in progress
129  * @vdev: vdev pointer
130  * @val: value to be set
131  *
132  * Return: QDF_STATUS
133  */
134 QDF_STATUS
135 ap_mlme_set_hidden_ssid_restart_in_progress(struct wlan_objmgr_vdev *vdev,
136 					    bool val);
137 
138 /**
139  * ap_mlme_is_hidden_ssid_restart_in_progress() - get mlme priv hidden ssid
140  * restart in progress
141  * @vdev: vdev pointer
142  *
143  * Return: value of mlme priv hidden ssid restart in progress
144  */
145 bool ap_mlme_is_hidden_ssid_restart_in_progress(struct wlan_objmgr_vdev *vdev);
146 
147 /**
148  * mlme_set_vdev_start_failed() - set mlme priv vdev restart fail flag
149  * @vdev: vdev pointer
150  * @val: value to be set
151  *
152  * Return: QDF_STATUS
153  */
154 QDF_STATUS
155 mlme_set_vdev_start_failed(struct wlan_objmgr_vdev *vdev, bool val);
156 
157 /**
158  * mlme_is_connection_fail() - get connection fail flag
159  * @vdev: vdev pointer
160  *
161  * Return: value of vdev connection failure flag
162  */
163 bool mlme_is_connection_fail(struct wlan_objmgr_vdev *vdev);
164 
165 /**
166  * mlme_is_wapi_sta_active() - check sta with wapi security exists and is active
167  * @pdev: pdev pointer
168  *
169  * Return: true if sta with wapi security exists
170  */
171 #ifdef FEATURE_WLAN_WAPI
172 bool mlme_is_wapi_sta_active(struct wlan_objmgr_pdev *pdev);
173 #else
mlme_is_wapi_sta_active(struct wlan_objmgr_pdev * pdev)174 static inline bool mlme_is_wapi_sta_active(struct wlan_objmgr_pdev *pdev)
175 {
176 	return false;
177 }
178 #endif
179 
180 QDF_STATUS mlme_set_bigtk_support(struct wlan_objmgr_vdev *vdev, bool val);
181 
182 bool mlme_get_bigtk_support(struct wlan_objmgr_vdev *vdev);
183 
184 #ifdef FEATURE_WLAN_TDLS
185 /**
186  * mlme_set_tdls_chan_switch_prohibited() - set tdls chan switch prohibited
187  * @vdev: vdev pointer
188  * @val: value to be set
189  *
190  * Return: QDF_STATUS
191  */
192 QDF_STATUS
193 mlme_set_tdls_chan_switch_prohibited(struct wlan_objmgr_vdev *vdev, bool val);
194 
195 /**
196  * mlme_get_tdls_chan_switch_prohibited() - get tdls chan switch prohibited
197  * @vdev: vdev pointer
198  *
199  * Return: bool
200  */
201 bool mlme_get_tdls_chan_switch_prohibited(struct wlan_objmgr_vdev *vdev);
202 
203 /**
204  * mlme_set_tdls_prohibited() - set tdls prohibited
205  * @vdev: vdev pointer
206  * @val: value to be set
207  *
208  * Return: QDF_STATUS
209  */
210 QDF_STATUS
211 mlme_set_tdls_prohibited(struct wlan_objmgr_vdev *vdev, bool val);
212 
213 /**
214  * mlme_get_tdls_prohibited() - get tdls prohibited
215  * @vdev: vdev pointer
216  *
217  * Return: bool
218  */
219 bool mlme_get_tdls_prohibited(struct wlan_objmgr_vdev *vdev);
220 #else
221 static inline QDF_STATUS
mlme_set_tdls_chan_switch_prohibited(struct wlan_objmgr_vdev * vdev,bool val)222 mlme_set_tdls_chan_switch_prohibited(struct wlan_objmgr_vdev *vdev, bool val)
223 {
224 	return QDF_STATUS_SUCCESS;
225 }
226 
227 static inline
mlme_get_tdls_chan_switch_prohibited(struct wlan_objmgr_vdev * vdev)228 bool mlme_get_tdls_chan_switch_prohibited(struct wlan_objmgr_vdev *vdev)
229 {
230 	return false;
231 }
232 
233 static inline QDF_STATUS
mlme_set_tdls_prohibited(struct wlan_objmgr_vdev * vdev,bool val)234 mlme_set_tdls_prohibited(struct wlan_objmgr_vdev *vdev, bool val)
235 {
236 	return QDF_STATUS_SUCCESS;
237 }
238 
mlme_get_tdls_prohibited(struct wlan_objmgr_vdev * vdev)239 static inline bool mlme_get_tdls_prohibited(struct wlan_objmgr_vdev *vdev)
240 {
241 	return false;
242 }
243 #endif
244 /**
245  * mlme_set_roam_reason_better_ap() - set roam reason better AP
246  * @vdev: vdev pointer
247  * @val: value to be set
248  *
249  * Return: QDF_STATUS
250  */
251 QDF_STATUS
252 mlme_set_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev, bool val);
253 
254 /**
255  * mlme_get_roam_reason_better_ap() - get roam reason better AP
256  * @vdev: vdev pointer
257  *
258  * Return: bool
259  */
260 bool mlme_get_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev);
261 
262 /**
263  * mlme_set_hb_ap_rssi() - set hb ap RSSI
264  * @vdev: vdev pointer
265  * @val: value to be set
266  *
267  * Return: QDF_STATUS
268  */
269 QDF_STATUS mlme_set_hb_ap_rssi(struct wlan_objmgr_vdev *vdev, uint32_t val);
270 
271 /**
272  * mlme_get_hb_ap_rssi() - get HB AP RSSIc
273  * @vdev: vdev pointer
274  *
275  * Return: rssi value
276  */
277 uint32_t mlme_get_hb_ap_rssi(struct wlan_objmgr_vdev *vdev);
278 
279 /**
280  * mlme_set_connection_fail() - set connection failure flag
281  * @vdev: vdev pointer
282  * @val: value to be set
283  *
284  * Return: QDF_STATUS
285  */
286 QDF_STATUS
287 mlme_set_connection_fail(struct wlan_objmgr_vdev *vdev, bool val);
288 
289 /**
290  * mlme_get_vdev_start_failed() - get mlme priv vdev restart fail flag
291  * @vdev: vdev pointer
292  *
293  * Return: value of mlme priv vdev restart fail flag
294  */
295 bool mlme_get_vdev_start_failed(struct wlan_objmgr_vdev *vdev);
296 
297 /**
298  * mlme_get_cac_required() - get if cac is required for new channel
299  * @vdev: vdev pointer
300  *
301  * Return: if cac is required
302  */
303 bool mlme_get_cac_required(struct wlan_objmgr_vdev *vdev);
304 
305 /**
306  * mlme_set_cac_required() - set if cac is required for new channel
307  * @vdev: vdev pointer
308  * @val: value to be set
309  *
310  * Return: QDF_STATUS
311  */
312 QDF_STATUS
313 mlme_set_cac_required(struct wlan_objmgr_vdev *vdev, bool val);
314 
315 /**
316  * mlme_set_mbssid_info() - save mbssid info
317  * @vdev: vdev pointer
318  * @mbssid_info: mbssid info
319  * @freq: current operating frequency
320  *
321  * Return: QDF_STATUS
322  */
323 QDF_STATUS
324 mlme_set_mbssid_info(struct wlan_objmgr_vdev *vdev,
325 		     struct scan_mbssid_info *mbssid_info, qdf_freq_t freq);
326 
327 /**
328  * mlme_get_mbssid_info() - get mbssid info
329  * @vdev: vdev pointer
330  * @mbss_11ax: mbss 11ax info
331  *
332  * Return: None
333  */
334 void mlme_get_mbssid_info(struct wlan_objmgr_vdev *vdev,
335 			  struct vdev_mlme_mbss_11ax *mbss_11ax);
336 
337 /**
338  * mlme_set_tx_power() - set tx power
339  * @vdev: vdev pointer
340  * @tx_power: tx power to be set
341  *
342  * Return: QDF_STATUS
343  */
344 QDF_STATUS mlme_set_tx_power(struct wlan_objmgr_vdev *vdev,
345 			     int8_t tx_power);
346 
347 /**
348  * mlme_get_tx_power() - get tx power
349  * @vdev: vdev pointer
350  *
351  * Return: current tx power
352  */
353 int8_t mlme_get_tx_power(struct wlan_objmgr_vdev *vdev);
354 
355 /**
356  * mlme_get_max_reg_power() - get max reg power
357  * @vdev: vdev pointer
358  *
359  * Return: max reg power
360  */
361 int8_t mlme_get_max_reg_power(struct wlan_objmgr_vdev *vdev);
362 
363 /**
364  * mlme_set_max_reg_power() - set max reg power
365  * @vdev: vdev pointer
366  * @max_reg_power: max regulatory power to be set
367  *
368  * Return: QDF_STATUS
369  */
370 QDF_STATUS mlme_set_max_reg_power(struct wlan_objmgr_vdev *vdev,
371 				 int8_t max_reg_power);
372 
373 /**
374  * mlme_is_vdev_in_beaconning_mode() - check if vdev is beaconing mode
375  * @vdev_opmode: vdev opmode
376  *
377  * To check if vdev is operating in beaconing mode or not.
378  *
379  * Return: true or false
380  */
381 bool mlme_is_vdev_in_beaconning_mode(enum QDF_OPMODE vdev_opmode);
382 
383 /**
384  * mlme_set_assoc_type() - set associate type
385  * @vdev: vdev pointer
386  * @assoc_type: type to be set
387  *
388  * Return: QDF_STATUS
389  */
390 QDF_STATUS mlme_set_assoc_type(struct wlan_objmgr_vdev *vdev,
391 			       enum vdev_assoc_type assoc_type);
392 
393 /**
394  * mlme_get_vdev_stop_type() - to get vdev stop type
395  * @vdev: vdev pointer
396  * @vdev_stop_type: vdev stop type
397  *
398  * This API will get vdev stop type from mlme legacy priv.
399  *
400  * Return: QDF_STATUS
401  */
402 QDF_STATUS mlme_get_vdev_stop_type(struct wlan_objmgr_vdev *vdev,
403 				   uint32_t *vdev_stop_type);
404 
405 /**
406  * mlme_set_vdev_stop_type() - to set vdev stop type
407  * @vdev: vdev pointer
408  * @vdev_stop_type: vdev stop type
409  *
410  * This API will set vdev stop type from mlme legacy priv.
411  *
412  * Return: QDF_STATUS
413  */
414 QDF_STATUS mlme_set_vdev_stop_type(struct wlan_objmgr_vdev *vdev,
415 				   uint32_t vdev_stop_type);
416 
417 /**
418  * mlme_is_notify_co_located_ap_update_rnr() - Need co-located ap update rnr
419  * @vdev: vdev pointer
420  *
421  * Return: True if vdev need notify co-located ap to update rnr.
422  */
423 bool mlme_is_notify_co_located_ap_update_rnr(struct wlan_objmgr_vdev *vdev);
424 
425 /**
426  * mlme_set_notify_co_located_ap_update_rnr() - notify co-located ap to update
427  *                                              rnr
428  * @vdev: vdev pointer
429  * @update_rnr: whether to notify co-located ap to update rnr
430  *
431  * Return: Void
432  */
433 void mlme_set_notify_co_located_ap_update_rnr(struct wlan_objmgr_vdev *vdev,
434 					      bool update_rnr);
435 
436 /**
437  * wlan_is_vdev_traffic_ll_ht() - if vdev traffic type is low latency or high TP
438  * @vdev: vdev pointer
439  *
440  * Return: true is LL or HT is set.
441  */
442 bool wlan_is_vdev_traffic_ll_ht(struct wlan_objmgr_vdev *vdev);
443 
444 /**
445  * mlme_get_vdev_wifi_std() - get the wifi std version for the vdev
446  * @vdev: vdev pointer
447  *
448  * Return: WMI_HOST_WIFI_STANDARD
449  */
450 WMI_HOST_WIFI_STANDARD mlme_get_vdev_wifi_std(struct wlan_objmgr_vdev *vdev);
451 
452 /**
453  * mlme_get_assoc_type() - get associate type
454  * @vdev: vdev pointer
455  *
456  * Return: associate type
457  */
458 enum vdev_assoc_type  mlme_get_assoc_type(struct wlan_objmgr_vdev *vdev);
459 
460 /**
461  * mlme_vdev_self_peer_create() - function to send the vdev create self peer
462  * @vdev: vdev pointer
463  *
464  * Return: QDF_STATUS_SUCCESS when the self peer is successfully created
465  * to firmware or QDF_STATUS_E_** when there is a failure.
466  */
467 QDF_STATUS mlme_vdev_self_peer_create(struct wlan_objmgr_vdev *vdev);
468 
469 /**
470  * mlme_vdev_self_peer_delete() - function to delete vdev self peer
471  * @self_peer_del_msg: scheduler message containing the del_vdev_params
472  *
473  * Return: QDF_STATUS_SUCCESS when the self peer is successfully deleted
474  * to firmware or QDF_STATUS_E_** when there is a failure.
475  */
476 QDF_STATUS mlme_vdev_self_peer_delete(struct scheduler_msg *self_peer_del_msg);
477 
478 /**
479  * mlme_vdev_uses_self_peer() - does vdev use self peer?
480  * @vdev_type: vdev type
481  * @vdev_subtype: vdev subtype
482  *
483  * Return: true if the vdev type/subtype uses the self peer
484  */
485 bool mlme_vdev_uses_self_peer(uint32_t vdev_type, uint32_t vdev_subtype);
486 
487 /**
488  * mlme_vdev_self_peer_delete_resp() - send vdev self peer delete resp to Upper
489  * layer
490  * @param: params of del vdev response
491  *
492  * Return: none
493  */
494 void mlme_vdev_self_peer_delete_resp(struct del_vdev_params *param);
495 
496 /**
497  * mlme_vdev_del_resp() - send vdev delete resp to Upper layer
498  * @vdev_id: vdev id for which del vdev response is received
499  *
500  * Return: none
501  */
502 void mlme_vdev_del_resp(uint8_t vdev_id);
503 
504 #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
505 /**
506  * mlme_set_single_link_mlo_roaming() - to set single link mlo roaming
507  * @vdev: vdev pointer
508  * @val: single link mlo roaming value true/false
509  *
510  * This API will set single link mlo roaming value.
511  *
512  * Return: QDF_STATUS
513  */
514 QDF_STATUS
515 mlme_set_single_link_mlo_roaming(struct wlan_objmgr_vdev *vdev, bool val);
516 
517 /**
518  * mlme_get_single_link_mlo_roaming() - get single link mlo roaming
519  * @vdev: vdev pointer
520  *
521  * Return: single link mlo roaming boolean value true/false
522  */
523 bool mlme_get_single_link_mlo_roaming(struct wlan_objmgr_vdev *vdev);
524 #endif
525 /**
526  * wlan_sap_disconnect_all_p2p_client() - send SAP disconnect all P2P
527  *	client event to the SAP event handler
528  * @vdev_id: vdev id of SAP
529  *
530  * Return: QDF_STATUS
531  */
532 QDF_STATUS wlan_sap_disconnect_all_p2p_client(uint8_t vdev_id);
533 
534 /**
535  * wlan_sap_stop_bss() - send SAP stop bss event to the SAP event
536  *	handler
537  * @vdev_id: vdev id of SAP
538  *
539  * Return: QDF_STATUS
540  */
541 QDF_STATUS wlan_sap_stop_bss(uint8_t vdev_id);
542 
543 /**
544  * wlan_get_conc_freq() - get concurrent operation frequency
545  *
546  * Return: concurrent frequency
547  */
548 qdf_freq_t wlan_get_conc_freq(void);
549 
550 #ifdef WLAN_FEATURE_11BE_MLO
551 /**
552  * wlan_handle_emlsr_sta_concurrency() - Handle concurrency scenarios with
553  * EMLSR STA.
554  * @psoc: pointer to psoc
555  * @conc_con_coming_up: Carries true if any concurrent connection(STA/SAP/NAN)
556  *			is comng up
557  * @emlsr_sta_coming_up: Check if the new connection request is EMLSR STA
558  *
559  * The API handles concurrency scenarios with existing EMLSR connection when a
560  * new connection request is received OR with an existing legacy connection when
561  * an EMLSR sta comes up.
562  *
563  * Return: none
564  */
565 void
566 wlan_handle_emlsr_sta_concurrency(struct wlan_objmgr_psoc *psoc,
567 				  bool conc_con_coming_up,
568 				  bool emlsr_sta_coming_up);
569 #else
570 static inline void
wlan_handle_emlsr_sta_concurrency(struct wlan_objmgr_psoc * psoc,bool conc_con_coming_up,bool emlsr_sta_coming_up)571 wlan_handle_emlsr_sta_concurrency(struct wlan_objmgr_psoc *psoc,
572 				  bool conc_con_coming_up,
573 				  bool emlsr_sta_coming_up)
574 {
575 }
576 #endif
577 
578 #ifdef WLAN_FEATURE_LL_LT_SAP
579 /**
580  * wlan_ll_sap_sort_channel_list() - Sort channel list
581  * @vdev_id: Vdev Id
582  * @list: Pointer to list
583  * @ch_info: Pointer to ch_info
584  *
585  * Return: QDF_STATUS
586  */
587 QDF_STATUS
588 wlan_ll_sap_sort_channel_list(uint8_t vdev_id, qdf_list_t *list,
589 			      struct sap_sel_ch_info *ch_info);
590 
591 /**
592  * wlan_ll_sap_free_chan_info() - API to free allocated memory
593  * @ch_param: pointer to sap_sel_ch_info structure
594  *
595  * Return: None
596  */
597 void wlan_ll_sap_free_chan_info(struct sap_sel_ch_info *ch_param);
598 
599 /**
600  * wlan_ll_sap_freq_present_in_pcl() - API to check whether given
601  * frequency is present in PCL or not
602  * @pcl: pcl list
603  * @freq: Frequency to check in PCL list
604  *
605  * Return: True/False
606  */
607 bool wlan_ll_sap_freq_present_in_pcl(struct policy_mgr_pcl_list *pcl,
608 				     qdf_freq_t freq);
609 #endif
610 
611 /**
612  * wlan_sap_get_user_config_acs_ch_list: Get user configured channel list
613  * @vdev_id: Vdev Id
614  * @filter: Filter to apply to get scan result
615  *
616  * Return: None
617  *
618  */
619 void
620 wlan_sap_get_user_config_acs_ch_list(uint8_t vdev_id,
621 				     struct scan_filter *filter);
622 #endif
623