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