xref: /wlan-dirver/qca-wifi-host-cmn/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h (revision 11f5a63a6cbdda84849a730de22f0a71e635d58c)
1 /*
2  * Copyright (c) 2016-2019 The Linux Foundation. All rights reserved.
3  *
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 #ifndef _WLAN_LMAC_IF_DEF_H_
21 #define _WLAN_LMAC_IF_DEF_H_
22 
23 #include <qdf_time.h>
24 #include "qdf_status.h"
25 #include "wlan_objmgr_cmn.h"
26 #ifdef DFS_COMPONENT_ENABLE
27 #include <wlan_dfs_public_struct.h>
28 #endif
29 #include "wlan_mgmt_txrx_utils_api.h"
30 #include "wlan_scan_public_structs.h"
31 
32 #ifdef WLAN_ATF_ENABLE
33 #include "wlan_atf_utils_defs.h"
34 #endif
35 #ifdef QCA_SUPPORT_SON
36 #include <wlan_son_tgt_api.h>
37 #endif
38 #ifdef WLAN_SA_API_ENABLE
39 #include "wlan_sa_api_utils_defs.h"
40 #endif
41 #ifdef WLAN_CONV_SPECTRAL_ENABLE
42 #include "wlan_spectral_public_structs.h"
43 #endif
44 #include <reg_services_public_struct.h>
45 
46 #ifdef WLAN_CONV_CRYPTO_SUPPORTED
47 #include "wlan_crypto_global_def.h"
48 #endif
49 
50 #ifdef WLAN_CFR_ENABLE
51 #include "wlan_cfr_utils_api.h"
52 #endif
53 
54 #include <wlan_dfs_tgt_api.h>
55 #include <wlan_dfs_ioctl.h>
56 
57 /* Number of dev type: Direct attach and Offload */
58 #define MAX_DEV_TYPE 2
59 
60 #ifdef WIFI_POS_CONVERGED
61 /* forward declarations */
62 struct oem_data_req;
63 struct oem_data_rsp;
64 #endif /* WIFI_POS_CONVERGED */
65 
66 #ifdef DIRECT_BUF_RX_ENABLE
67 /* forward declarations for direct buf rx */
68 struct direct_buf_rx_data;
69 /* Forward declaration for module_ring_params */
70 struct module_ring_params;
71 /*Forward declaration for dbr_module_config */
72 struct dbr_module_config;
73 #endif
74 
75 #ifdef FEATURE_WLAN_TDLS
76 #include "wlan_tdls_public_structs.h"
77 #endif
78 
79 #ifdef QCA_SUPPORT_CP_STATS
80 #include <wlan_cp_stats_mc_defs.h>
81 #endif /* QCA_SUPPORT_CP_STATS */
82 
83 #include <wlan_vdev_mgr_tgt_if_tx_defs.h>
84 #include <wlan_vdev_mgr_tgt_if_rx_defs.h>
85 
86 #ifdef QCA_SUPPORT_CP_STATS
87 /**
88  * struct wlan_lmac_if_cp_stats_tx_ops - defines southbound tx callbacks for
89  * control plane statistics component
90  * @cp_stats_attach:	function pointer to register events from FW
91  * @cp_stats_detach:	function pointer to unregister events from FW
92  */
93 struct wlan_lmac_if_cp_stats_tx_ops {
94 	QDF_STATUS (*cp_stats_attach)(struct wlan_objmgr_psoc *psoc);
95 	QDF_STATUS (*cp_stats_detach)(struct wlan_objmgr_psoc *posc);
96 #ifdef CONFIG_MCL
97 	void (*inc_wake_lock_stats)(uint32_t reason,
98 				    struct wake_lock_stats *stats,
99 				    uint32_t *unspecified_wake_count);
100 	QDF_STATUS (*send_req_stats)(struct wlan_objmgr_psoc *psoc,
101 				     enum stats_req_type type,
102 				     struct request_info *req);
103 #endif
104 };
105 
106 /**
107  * struct wlan_lmac_if_cp_stats_rx_ops - defines southbound rx callbacks for
108  * control plane statistics component
109  * @cp_stats_rx_event_handler:	function pointer to rx FW events
110  */
111 struct wlan_lmac_if_cp_stats_rx_ops {
112 	QDF_STATUS (*cp_stats_rx_event_handler)(struct wlan_objmgr_vdev *vdev);
113 #ifdef CONFIG_MCL
114 	QDF_STATUS (*process_stats_event)(struct wlan_objmgr_psoc *psoc,
115 					  struct stats_event *ev);
116 #endif
117 };
118 #endif
119 
120 /**
121  * struct wlan_lmac_if_mgmt_txrx_tx_ops - structure of tx function
122  *                  pointers for mgmt txrx component
123  * @mgmt_tx_send: function pointer to transmit mgmt tx frame
124  * @beacon_send:  function pointer to transmit beacon frame
125  * @fd_action_frame_send: function pointer to transmit FD action frame
126  * @tx_drain_nbuf_op: function pointer for any umac nbuf realted ops for
127  *                    pending mgmt frames cleanup
128  */
129 struct wlan_lmac_if_mgmt_txrx_tx_ops {
130 	QDF_STATUS (*mgmt_tx_send)(struct wlan_objmgr_vdev *vdev,
131 			qdf_nbuf_t nbuf, u_int32_t desc_id,
132 			void *mgmt_tx_params);
133 	QDF_STATUS (*beacon_send)(struct wlan_objmgr_vdev *vdev,
134 			qdf_nbuf_t nbuf);
135 	QDF_STATUS (*fd_action_frame_send)(struct wlan_objmgr_vdev *vdev,
136 					   qdf_nbuf_t nbuf);
137 	void (*tx_drain_nbuf_op)(struct wlan_objmgr_pdev *pdev,
138 				 qdf_nbuf_t nbuf);
139 };
140 
141 /**
142  * struct wlan_lmac_if_scan_tx_ops - south bound tx function pointers for scan
143  * @scan_start: function to start scan
144  * @scan_cancel: function to cancel scan
145  * @pno_start: start pno scan
146  * @pno_stop: stop pno scan
147  * @scan_reg_ev_handler: function to register for scan events
148  * @scan_unreg_ev_handler: function to unregister for scan events
149  *
150  * scan module uses these functions to avail ol/da lmac services
151  */
152 struct wlan_lmac_if_scan_tx_ops {
153 	QDF_STATUS (*scan_start)(struct wlan_objmgr_pdev *pdev,
154 			struct scan_start_request *req);
155 	QDF_STATUS (*scan_cancel)(struct wlan_objmgr_pdev *pdev,
156 			struct scan_cancel_param *req);
157 	QDF_STATUS (*pno_start)(struct wlan_objmgr_psoc *psoc,
158 			struct pno_scan_req_params *req);
159 	QDF_STATUS (*pno_stop)(struct wlan_objmgr_psoc *psoc,
160 			uint8_t vdev_id);
161 	QDF_STATUS (*scan_reg_ev_handler)(struct wlan_objmgr_psoc *psoc,
162 			void *arg);
163 	QDF_STATUS (*scan_unreg_ev_handler)(struct wlan_objmgr_psoc *psoc,
164 			void *arg);
165 	QDF_STATUS (*set_chan_list)(struct wlan_objmgr_pdev *pdev, void *arg);
166 };
167 
168 /**
169  * struct wlan_lmac_if_ftm_tx_ops - south bound tx function pointers for ftm
170  * @ftm_attach: function to register event handlers with FW
171  * @ftm_detach: function to de-register event handlers with FW
172  * @ftm_cmd_send: function to send FTM commands to FW
173  *
174  * ftm module uses these functions to avail ol/da lmac services
175  */
176 struct wlan_lmac_if_ftm_tx_ops {
177 	QDF_STATUS (*ftm_attach)(struct wlan_objmgr_psoc *psoc);
178 	QDF_STATUS (*ftm_detach)(struct wlan_objmgr_psoc *psoc);
179 	QDF_STATUS (*ftm_cmd_send)(struct wlan_objmgr_pdev *pdev,
180 				uint8_t *buf, uint32_t len, uint8_t mac_id);
181 };
182 
183 enum wlan_mlme_cfg_id;
184 /**
185  * struct wlan_lmac_if_mlme_tx_ops - south bound tx function pointers for mlme
186  * @scan_sta_power_events: function to handle STA power events
187  * @scan_connection_lost: function to get scan connection lost
188  * @scan_end: function to end scan
189  * @get_wifi_iface_id: function to get wifi interface id
190  * @vdev_mlme_attach: function to register events
191  * @vdev_mlme_detach: function to unregister events
192  * @vdev_mgr_rsp_timer_init: function to initialize vdev response timer
193  * @vdev_mgr_rsp_timer_mod: function to timer_mod vdev response timer
194  * @vdev_create_send: function to send vdev create
195  * @vdev_start_send: function to send vdev start
196  * @vdev_up_send: function to send vdev up
197  * @vdev_delete_send: function to send vdev delete
198  * @vdev_stop_send: function to send vdev stop
199  * @vdev_down_send: function to send vdev down
200  * @vdev_set_param_send: function to send vdev parameter
201  * @vdev_set_tx_rx_decap_type: function to send vdev tx rx cap/decap type
202  * @vdev_set_nac_rssi_send: function to send nac rssi
203  * @vdev_set_neighbour_rx_cmd_send: function to send vdev neighbour rx cmd
204  * @vdev_sifs_trigger_send: function to send vdev sifs trigger
205  * @vdev_set_custom_aggr_size_cmd_send: function to send custom aggr size
206  * @vdev_config_ratemask_cmd_send: function to send ratemask
207  * @peer_flush_tids_send: function to flush peer tids
208  * @multiple_vdev_restart_req_cmd: function to send multiple vdev restart
209  * @beacon_send_cmd: function to send beacon
210  * @beacon_tmpl_send: function to send beacon template
211  * @vdev_bcn_miss_offload_send: function to send beacon miss offload
212  * @vdev_sta_ps_param_send: function to sent STA power save config
213  * @peer_delete_all_send: function to send vdev delete all peer request
214  */
215 struct wlan_lmac_if_mlme_tx_ops {
216 	void (*scan_sta_power_events)(struct wlan_objmgr_pdev *pdev,
217 			int event_type, int event_status);
218 	void (*scan_connection_lost)(struct wlan_objmgr_pdev *pdev);
219 	void (*scan_end)(struct wlan_objmgr_pdev *pdev);
220 	uint32_t (*get_wifi_iface_id) (struct wlan_objmgr_pdev *pdev);
221 	QDF_STATUS (*vdev_mlme_attach)(struct wlan_objmgr_psoc *psoc);
222 	QDF_STATUS (*vdev_mlme_detach)(struct wlan_objmgr_psoc *psoc);
223 	QDF_STATUS (*vdev_mgr_rsp_timer_init)(
224 					struct wlan_objmgr_vdev *vdev,
225 					qdf_timer_t *rsp_timer);
226 	QDF_STATUS (*vdev_mgr_rsp_timer_mod)(
227 					struct wlan_objmgr_vdev *vdev,
228 					struct vdev_response_timer *vdev_rsp,
229 					int mseconds);
230 	QDF_STATUS (*vdev_create_send)(struct wlan_objmgr_vdev *vdev,
231 				       struct vdev_create_params *param);
232 	QDF_STATUS (*vdev_start_send)(struct wlan_objmgr_vdev *vdev,
233 				      struct vdev_start_params *param);
234 	QDF_STATUS (*vdev_up_send)(struct wlan_objmgr_vdev *vdev,
235 				   struct vdev_up_params *param);
236 	QDF_STATUS (*vdev_delete_send)(struct wlan_objmgr_vdev *vdev,
237 				       struct vdev_delete_params *param);
238 	QDF_STATUS (*vdev_stop_send)(struct wlan_objmgr_vdev *vdev,
239 				     struct vdev_stop_params *param);
240 	QDF_STATUS (*vdev_down_send)(struct wlan_objmgr_vdev *vdev,
241 				     struct vdev_down_params *param);
242 	QDF_STATUS (*vdev_set_param_send)(struct wlan_objmgr_vdev *vdev,
243 					  struct vdev_set_params *param);
244 	QDF_STATUS (*vdev_set_tx_rx_decap_type)(struct wlan_objmgr_vdev *vdev,
245 						enum wlan_mlme_cfg_id param_id,
246 						uint32_t value);
247 	QDF_STATUS (*vdev_set_nac_rssi_send)(
248 				struct wlan_objmgr_vdev *vdev,
249 				struct vdev_scan_nac_rssi_params *param);
250 	QDF_STATUS (*vdev_set_neighbour_rx_cmd_send)(
251 					struct wlan_objmgr_vdev *vdev,
252 					struct set_neighbour_rx_params *param,
253 					uint8_t *mac);
254 	QDF_STATUS (*vdev_sifs_trigger_send)(
255 					struct wlan_objmgr_vdev *vdev,
256 					struct sifs_trigger_param *param);
257 	QDF_STATUS (*vdev_set_custom_aggr_size_cmd_send)(
258 				struct wlan_objmgr_vdev *vdev,
259 				struct set_custom_aggr_size_params *param);
260 	QDF_STATUS (*vdev_config_ratemask_cmd_send)(
261 					struct wlan_objmgr_vdev *vdev,
262 					struct config_ratemask_params *param);
263 	QDF_STATUS (*peer_flush_tids_send)(
264 					struct wlan_objmgr_vdev *vdev,
265 					struct peer_flush_params *param);
266 	QDF_STATUS (*multiple_vdev_restart_req_cmd)(
267 				struct wlan_objmgr_pdev *pdev,
268 				struct multiple_vdev_restart_params *param);
269 	QDF_STATUS (*beacon_cmd_send)(struct wlan_objmgr_vdev *vdev,
270 				      struct beacon_params *param);
271 	QDF_STATUS (*beacon_tmpl_send)(struct wlan_objmgr_vdev *vdev,
272 				       struct beacon_tmpl_params *param);
273 	QDF_STATUS (*vdev_bcn_miss_offload_send)(struct wlan_objmgr_vdev *vdev);
274 	QDF_STATUS (*vdev_sta_ps_param_send)(struct wlan_objmgr_vdev *vdev,
275 					     struct sta_ps_params *param);
276 	QDF_STATUS (*peer_delete_all_send)(
277 					struct wlan_objmgr_vdev *vdev,
278 					struct peer_delete_all_params *param);
279 };
280 
281 /**
282  * struct wlan_lmac_if_scan_rx_ops  - south bound rx function pointers for scan
283  * @scan_ev_handler: scan event handler
284  * @scan_set_max_active_scans: set max active scans allowed
285  *
286  * lmac modules uses this API to post scan events to scan module
287  */
288 struct wlan_lmac_if_scan_rx_ops {
289 	QDF_STATUS (*scan_ev_handler)(struct wlan_objmgr_psoc *psoc,
290 		struct scan_event_info *event_info);
291 	QDF_STATUS (*scan_set_max_active_scans)(struct wlan_objmgr_psoc *psoc,
292 			uint32_t max_active_scans);
293 };
294 
295 #ifdef CONVERGED_P2P_ENABLE
296 
297 /* forward declarations for p2p tx ops */
298 struct p2p_ps_config;
299 struct p2p_lo_start;
300 struct p2p_set_mac_filter;
301 
302 /**
303  * struct wlan_lmac_if_p2p_tx_ops - structure of tx function pointers
304  * for P2P component
305  * @set_ps:      function pointer to set power save
306  * @lo_start:    function pointer to start listen offload
307  * @lo_stop:     function pointer to stop listen offload
308  * @set_noa:     function pointer to disable/enable NOA
309  * @reg_lo_ev_handler:   function pointer to register lo event handler
310  * @reg_noa_ev_handler:  function pointer to register noa event handler
311  * @unreg_lo_ev_handler: function pointer to unregister lo event handler
312  * @unreg_noa_ev_handler:function pointer to unregister noa event handler
313  * @reg_mac_addr_rx_filter_handler: function pointer to register/unregister
314  *    set mac addr status event callback.
315  * @set_mac_addr_rx_filter_cmd: function pointer to set mac addr rx filter
316  */
317 struct wlan_lmac_if_p2p_tx_ops {
318 	QDF_STATUS (*set_ps)(struct wlan_objmgr_psoc *psoc,
319 		struct p2p_ps_config *ps_config);
320 #ifdef FEATURE_P2P_LISTEN_OFFLOAD
321 	QDF_STATUS (*lo_start)(struct wlan_objmgr_psoc *psoc,
322 		struct p2p_lo_start *lo_start);
323 	QDF_STATUS (*lo_stop)(struct wlan_objmgr_psoc *psoc,
324 		uint32_t vdev_id);
325 	QDF_STATUS (*reg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc,
326 			void *arg);
327 	QDF_STATUS (*unreg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc,
328 			void *arg);
329 #endif
330 	QDF_STATUS (*set_noa)(struct wlan_objmgr_psoc *psoc,
331 			      uint32_t vdev_id, bool disable_noa);
332 	QDF_STATUS (*reg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc,
333 					 void *arg);
334 	QDF_STATUS (*unreg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc,
335 			void *arg);
336 	QDF_STATUS (*reg_mac_addr_rx_filter_handler)(
337 			struct wlan_objmgr_psoc *psoc, bool reg);
338 	QDF_STATUS (*set_mac_addr_rx_filter_cmd)(
339 			struct wlan_objmgr_psoc *psoc,
340 			struct p2p_set_mac_filter *param);
341 };
342 #endif
343 
344 #ifdef WLAN_ATF_ENABLE
345 
346 /**
347  * struct wlan_lmac_if_atf_tx_ops - ATF specific tx function pointers
348  * @atf_node_unblock:             Resume node
349  * @atf_set_enable_disable:       Set atf enable/disable
350  * @atf_tokens_used:              Get used atf tokens
351  * @atf_get_unused_txtoken:       Get unused atf tokens
352  * @atf_peer_resume:              Resume peer
353  * @atf_tokens_unassigned:        Set unassigned atf tockens
354  * @atf_capable_peer:             Set atf state change
355  * @atf_airtime_estimate:         Get estimated airtime
356  * @atf_debug_peerstate:          Get peer state
357  * @atf_enable_disable:           Set atf peer stats enable/disable
358  * @atf_ssid_sched_policy:        Set ssid schedule policy
359  * @atf_set:                      Set atf
360  * @atf_set_grouping:             Set atf grouping
361  * @atf_set_group_ac:             Set atf Group AC
362  * @atf_send_peer_request:        Send peer requests
363  * @atf_set_bwf:                  Set bandwidth fairness
364  * @atf_peer_buf_held:            Get buffer held
365  * @atf_get_peer_airtime:         Get peer airtime
366  * @atf_get_chbusyper:            Get channel busy
367  * @atf_open:                     ATF open
368  * @atf_register_event_handler    ATF register wmi event handlers
369  * @atf_unregister_event_handler  ATF unregister wmi event handlers
370  */
371 struct wlan_lmac_if_atf_tx_ops {
372 	void (*atf_node_unblock)(struct wlan_objmgr_pdev *pdev,
373 				 struct wlan_objmgr_peer *peer);
374 	void (*atf_set_enable_disable)(struct wlan_objmgr_pdev *pdev,
375 				       uint8_t value);
376 	uint8_t (*atf_tokens_used)(struct wlan_objmgr_pdev *pdev,
377 				   struct wlan_objmgr_peer *peer);
378 	void (*atf_get_unused_txtoken)(struct wlan_objmgr_pdev *pdev,
379 				       struct wlan_objmgr_peer *peer,
380 				       int *unused_token);
381 	void (*atf_peer_resume)(struct wlan_objmgr_pdev *pdev,
382 				struct wlan_objmgr_peer *peer);
383 	void (*atf_tokens_unassigned)(struct wlan_objmgr_pdev *pdev,
384 				      uint32_t tokens_unassigned);
385 	void (*atf_capable_peer)(struct wlan_objmgr_pdev *pdev,
386 				 struct wlan_objmgr_peer *peer,
387 				 uint8_t val, uint8_t atfstate_change);
388 	uint32_t (*atf_airtime_estimate)(struct wlan_objmgr_pdev *pdev,
389 					 struct wlan_objmgr_peer *peer,
390 					 uint32_t tput,
391 					 uint32_t *possible_tput);
392 	uint32_t (*atf_debug_peerstate)(struct wlan_objmgr_pdev *pdev,
393 					struct wlan_objmgr_peer *peer,
394 					struct atf_peerstate *peerstate);
395 	int32_t (*atf_enable_disable)(struct wlan_objmgr_vdev *vdev,
396 				      uint8_t value);
397 	int32_t (*atf_ssid_sched_policy)(struct wlan_objmgr_vdev *vdev,
398 					 uint8_t value);
399 	int32_t (*atf_set)(struct wlan_objmgr_pdev *pdev,
400 			   struct pdev_atf_req *atf_req,
401 			   uint8_t atf_tput_based);
402 	int32_t (*atf_set_grouping)(struct wlan_objmgr_pdev *pdev,
403 				    struct pdev_atf_ssid_group_req *atf_grp_req,
404 				    uint8_t atf_tput_based);
405 	int32_t (*atf_set_group_ac)(struct wlan_objmgr_pdev *pdev,
406 				    struct pdev_atf_group_wmm_ac_req *atf_acreq,
407 				    uint8_t atf_tput_based);
408 	int32_t (*atf_send_peer_request)(struct wlan_objmgr_pdev *pdev,
409 					 struct pdev_atf_peer_ext_request *atfr,
410 					 uint8_t atf_tput_based);
411 	int32_t (*atf_set_bwf)(struct wlan_objmgr_pdev *pdev,
412 			       struct pdev_bwf_req *bwf_req);
413 	uint32_t (*atf_peer_buf_held)(struct wlan_objmgr_peer *peer);
414 	uint32_t (*atf_get_peer_airtime)(struct wlan_objmgr_peer *peer);
415 	uint32_t (*atf_get_chbusyper)(struct wlan_objmgr_pdev *pdev);
416 	void (*atf_open)(struct wlan_objmgr_psoc *psoc);
417 	void (*atf_register_event_handler)(struct wlan_objmgr_psoc *psoc);
418 	void (*atf_unregister_event_handler)(struct wlan_objmgr_psoc *psoc);
419 };
420 #endif
421 
422 #ifdef WLAN_SUPPORT_FILS
423 /**
424  * struct wlan_lmac_if_fd_tx_ops - FILS Discovery specific Tx function pointers
425  * @fd_vdev_config_fils:         Enable and configure FILS Discovery
426  * @fd_register_event_handler:   Register swfda WMI event handler
427  * @fd_unregister_event_handler: Un-register swfda WMI event handler
428  * @fd_offload_tmpl_send:        Send FD template to FW
429  */
430 struct wlan_lmac_if_fd_tx_ops {
431 	QDF_STATUS (*fd_vdev_config_fils)(struct wlan_objmgr_vdev *vdev,
432 					  uint32_t fd_period);
433 	void (*fd_register_event_handler)(struct wlan_objmgr_psoc *psoc);
434 	void (*fd_unregister_event_handler)(struct wlan_objmgr_psoc *psoc);
435 	QDF_STATUS (*fd_offload_tmpl_send)(struct wlan_objmgr_pdev *pdev,
436 			struct fils_discovery_tmpl_params *fd_tmpl_param);
437 };
438 #endif
439 
440 #ifdef WLAN_SA_API_ENABLE
441 
442 /**
443  * struct wlan_lmac_if_sa_api_tx_ops - SA API specific tx function pointers
444  */
445 
446 struct wlan_lmac_if_sa_api_tx_ops {
447 	void (*sa_api_register_event_handler)(struct wlan_objmgr_psoc *psoc);
448 	void (*sa_api_unregister_event_handler)(struct wlan_objmgr_psoc *posc);
449 	void (*sa_api_enable_sa) (struct wlan_objmgr_pdev *pdev,
450 			uint32_t enable, uint32_t mode, uint32_t rx_antenna);
451 	void (*sa_api_set_rx_antenna) (struct wlan_objmgr_pdev *pdev,
452 			uint32_t antenna);
453 	void (*sa_api_set_tx_antenna) (struct wlan_objmgr_peer *peer,
454 			uint32_t *antenna_array);
455 	void (*sa_api_set_tx_default_antenna) (struct wlan_objmgr_pdev *pdev,
456 			u_int32_t antenna);
457 	void (*sa_api_set_training_info) (struct wlan_objmgr_peer *peer,
458 			uint32_t *rate_array,
459 			uint32_t *antenna_array,
460 			uint32_t numpkts);
461 	void (*sa_api_prepare_rateset)(struct wlan_objmgr_pdev *pdev,
462 			struct wlan_objmgr_peer *peer,
463 			struct sa_rate_info *rate_info);
464 	void (*sa_api_set_node_config_ops) (struct wlan_objmgr_peer *peer,
465 			uint32_t cmd_id, uint16_t args_count,
466 			u_int32_t args_arr[]);
467 };
468 
469 #endif
470 
471 #ifdef WLAN_CFR_ENABLE
472 /**
473  * struct wlan_lmac_if_cfr_tx_ops - CFR specific tx function pointers
474  * @cfr_init_pdev: Initialize CFR
475  * @cfr_deinit_pdev: De-initialize CFR
476  * @cfr_enable_cfr_timer: Function to enable CFR timer
477  * @cfr_start_capture: Function to start CFR capture
478  * @cfr_stop_capture: Function to stop CFR capture
479  */
480 struct wlan_lmac_if_cfr_tx_ops {
481 	int (*cfr_init_pdev)(struct wlan_objmgr_psoc *psoc,
482 			     struct wlan_objmgr_pdev *pdev);
483 	int (*cfr_deinit_pdev)(struct wlan_objmgr_psoc *psoc,
484 			       struct wlan_objmgr_pdev *pdev);
485 	int (*cfr_enable_cfr_timer)(struct wlan_objmgr_pdev *pdev,
486 				    uint32_t cfr_timer);
487 	int (*cfr_start_capture)(struct wlan_objmgr_pdev *pdev,
488 				 struct wlan_objmgr_peer *peer,
489 				 struct cfr_capture_params *params);
490 	int (*cfr_stop_capture)(struct wlan_objmgr_pdev *pdev,
491 				struct wlan_objmgr_peer *peer);
492 };
493 #endif /* WLAN_CFR_ENABLE */
494 
495 #ifdef WLAN_CONV_SPECTRAL_ENABLE
496 struct wmi_spectral_cmd_ops;
497 /**
498  * struct wlan_lmac_if_sptrl_tx_ops - Spectral south bound Tx operations
499  * @sptrlto_spectral_init:          Initialize LMAC/target_if Spectral
500  * @sptrlto_spectral_deinit:        De-initialize LMAC/target_if Spectral
501  * @sptrlto_set_spectral_config:    Set Spectral configuration
502  * @sptrlto_get_spectral_config:    Get Spectral configuration
503  * @sptrlto_start_spectral_scan:    Start Spectral Scan
504  * @sptrlto_stop_spectral_scan:     Stop Spectral Scan
505  * @sptrlto_is_spectral_active:     Get whether Spectral is active
506  * @sptrlto_is_spectral_enabled:    Get whether Spectral is enabled
507  * @sptrlto_set_icm_active:         Set whether ICM is active or inactive
508  * @sptrlto_get_icm_active:         Get whether ICM is active or inactive
509  * @sptrlto_get_nominal_nf:         Get Nominal Noise Floor for the current
510  *                                  frequency band
511  * @sptrlto_set_debug_level:        Set Spectral debug level
512  * @sptrlto_get_debug_level:        Get Spectral debug level
513  * @sptrlto_get_chaninfo:           Get channel information
514  * @sptrlto_clear_chaninfo:         Clear channel information
515  * @sptrlto_get_spectral_capinfo:   Get Spectral capability information
516  * @sptrlto_get_spectral_diagstats: Get Spectral diagnostic statistics
517  * @sptrlto_register_netlink_cb: Register Spectral Netlink callbacks
518  * @sptrlto_use_nl_bcast: Get whether to use Netlink broadcast/unicast
519  * @sptrlto_deregister_netlink_cb: De-register Spectral Netlink callbacks
520  * @sptrlto_process_spectral_report: Process spectral report
521  **/
522 struct wlan_lmac_if_sptrl_tx_ops {
523 	void *(*sptrlto_pdev_spectral_init)(struct wlan_objmgr_pdev *pdev);
524 	void (*sptrlto_pdev_spectral_deinit)(struct wlan_objmgr_pdev *pdev);
525 	QDF_STATUS (*sptrlto_set_spectral_config)
526 					(struct wlan_objmgr_pdev *pdev,
527 					 const u_int32_t threshtype,
528 					 const u_int32_t value,
529 					 const enum spectral_scan_mode smode,
530 					 enum spectral_cp_error_code *err);
531 	QDF_STATUS (*sptrlto_get_spectral_config)
532 					(struct wlan_objmgr_pdev *pdev,
533 					 struct spectral_config *sptrl_config,
534 					 enum spectral_scan_mode smode);
535 	QDF_STATUS (*sptrlto_start_spectral_scan)
536 					(struct wlan_objmgr_pdev *pdev,
537 					 const enum spectral_scan_mode smode,
538 					 enum spectral_cp_error_code *err);
539 	QDF_STATUS (*sptrlto_stop_spectral_scan)
540 					(struct wlan_objmgr_pdev *pdev,
541 					 const enum spectral_scan_mode smode,
542 					 enum spectral_cp_error_code *err);
543 	bool (*sptrlto_is_spectral_active)(struct wlan_objmgr_pdev *pdev,
544 					   const enum spectral_scan_mode smode);
545 	bool (*sptrlto_is_spectral_enabled)(struct wlan_objmgr_pdev *pdev,
546 					    enum spectral_scan_mode smode);
547 	QDF_STATUS (*sptrlto_set_debug_level)(struct wlan_objmgr_pdev *pdev,
548 					      u_int32_t debug_level);
549 	u_int32_t (*sptrlto_get_debug_level)(struct wlan_objmgr_pdev *pdev);
550 	QDF_STATUS (*sptrlto_get_spectral_capinfo)
551 						(struct wlan_objmgr_pdev *pdev,
552 						 struct spectral_caps *scaps);
553 	QDF_STATUS (*sptrlto_get_spectral_diagstats)
554 					(struct wlan_objmgr_pdev *pdev,
555 					 struct spectral_diag_stats *stats);
556 	void (*sptrlto_register_wmi_spectral_cmd_ops)(
557 		struct wlan_objmgr_pdev *pdev,
558 		struct wmi_spectral_cmd_ops *cmd_ops);
559 	void (*sptrlto_register_netlink_cb)(
560 		struct wlan_objmgr_pdev *pdev,
561 		struct spectral_nl_cb *nl_cb);
562 	bool (*sptrlto_use_nl_bcast)(struct wlan_objmgr_pdev *pdev);
563 	void (*sptrlto_deregister_netlink_cb)(struct wlan_objmgr_pdev *pdev);
564 	int (*sptrlto_process_spectral_report)(
565 		struct wlan_objmgr_pdev *pdev,
566 		void *payload);
567 };
568 #endif /* WLAN_CONV_SPECTRAL_ENABLE */
569 
570 #ifdef WIFI_POS_CONVERGED
571 /*
572  * struct wlan_lmac_if_wifi_pos_tx_ops - structure of firmware tx function
573  * pointers for wifi_pos component
574  * @data_req_tx: function pointer to send wifi_pos req to firmware
575  * @wifi_pos_register_events: function pointer to register wifi_pos events
576  * @wifi_pos_deregister_events: function pointer to deregister wifi_pos events
577  */
578 struct wlan_lmac_if_wifi_pos_tx_ops {
579 	QDF_STATUS (*data_req_tx)(struct wlan_objmgr_pdev *pdev,
580 				  struct oem_data_req *req);
581 	QDF_STATUS (*wifi_pos_register_events)(struct wlan_objmgr_psoc *psoc);
582 	QDF_STATUS (*wifi_pos_deregister_events)(struct wlan_objmgr_psoc *psoc);
583 };
584 #endif
585 
586 #ifdef DIRECT_BUF_RX_ENABLE
587 /**
588  * struct wlan_lmac_if_direct_buf_rx_tx_ops - structire of direct buf rx txops
589  * @direct_buf_rx_module_register: Registration API callback for modules
590  *                                 to register with direct buf rx framework
591  * @direct_buf_rx_module_unregister: Unregistration API to clean up module
592  *                                   specific resources in DBR
593  * @direct_buf_rx_register_events: Registration of WMI events for direct
594  *                                 buffer rx framework
595  * @direct_buf_rx_unregister_events: Unregistraton of WMI events for direct
596  *                                   buffer rx framework
597  * @direct_buf_rx_print_ring_stat: Print ring status per module per pdev
598  *
599  * @direct_buf_rx_get_ring_params: Get ring parameters for module_id
600  */
601 struct wlan_lmac_if_direct_buf_rx_tx_ops {
602 	QDF_STATUS (*direct_buf_rx_module_register)(
603 			struct wlan_objmgr_pdev *pdev, uint8_t mod_id,
604 			struct dbr_module_config *dbr_config,
605 			bool (*dbr_rsp_handler)
606 			     (struct wlan_objmgr_pdev *pdev,
607 			      struct direct_buf_rx_data *dbr_data));
608 	QDF_STATUS (*direct_buf_rx_module_unregister)(
609 			struct wlan_objmgr_pdev *pdev, uint8_t mod_id);
610 	QDF_STATUS (*direct_buf_rx_register_events)(
611 			struct wlan_objmgr_psoc *psoc);
612 	QDF_STATUS (*direct_buf_rx_unregister_events)(
613 			struct wlan_objmgr_psoc *psoc);
614 	QDF_STATUS (*direct_buf_rx_print_ring_stat)(
615 			struct wlan_objmgr_pdev *pdev);
616 	QDF_STATUS (*direct_buf_rx_get_ring_params)
617 		(struct wlan_objmgr_pdev *pdev,
618 		 struct module_ring_params *param,
619 		 uint8_t module_id, uint8_t srng_id);
620 };
621 #endif
622 
623 #ifdef FEATURE_WLAN_TDLS
624 /* fwd declarations for tdls tx ops */
625 struct tdls_info;
626 struct tdls_peer_update_state;
627 struct tdls_channel_switch_params;
628 struct sta_uapsd_trig_params;
629 /**
630  * struct wlan_lmac_if_tdls_tx_ops - south bound tx function pointers for tdls
631  * @update_fw_state: function to update tdls firmware state
632  * @update_peer_state: function to update tdls peer state
633  * @set_offchan_mode: function to set tdls offchannel mode
634  * @tdls_reg_ev_handler: function to register for tdls events
635  * @tdls_unreg_ev_handler: function to unregister for tdls events
636  *
637  * tdls module uses these functions to avail ol/da lmac services
638  */
639 struct wlan_lmac_if_tdls_tx_ops {
640 	QDF_STATUS (*update_fw_state)(struct wlan_objmgr_psoc *psoc,
641 				     struct tdls_info *req);
642 	QDF_STATUS (*update_peer_state)(struct wlan_objmgr_psoc *psoc,
643 				       struct tdls_peer_update_state *param);
644 	QDF_STATUS (*set_offchan_mode)(struct wlan_objmgr_psoc *psoc,
645 				      struct tdls_channel_switch_params *param);
646 	QDF_STATUS (*tdls_reg_ev_handler)(struct wlan_objmgr_psoc *psoc,
647 					 void *arg);
648 	QDF_STATUS (*tdls_unreg_ev_handler) (struct wlan_objmgr_psoc *psoc,
649 					    void *arg);
650 };
651 
652 /* fwd declarations for tdls rx ops */
653 struct tdls_event_info;
654 /**
655  * struct wlan_lmac_if_tdls_rx_ops  - south bound rx function pointers for tdls
656  * @tdls_ev_handler: function to handler tdls event
657  *
658  * lmac modules uses this API to post scan events to tdls module
659  */
660 struct wlan_lmac_if_tdls_rx_ops {
661 	QDF_STATUS (*tdls_ev_handler)(struct wlan_objmgr_psoc *psoc,
662 				     struct tdls_event_info *info);
663 };
664 #endif
665 
666 /**
667  * struct wlan_lmac_if_ftm_rx_ops  - south bound rx function pointers for FTM
668  * @ftm_ev_handler: function to handle FTM event
669  *
670  * lmac modules uses this API to post FTM events to FTM module
671  */
672 struct wlan_lmac_if_ftm_rx_ops {
673 	QDF_STATUS (*ftm_ev_handler)(struct wlan_objmgr_pdev *pdev,
674 					uint8_t *event_buf, uint32_t len);
675 };
676 
677 /**
678  * struct wlan_lmac_reg_if_tx_ops - structure of tx function
679  *                  pointers for regulatory component
680  * @register_master_handler: pointer to register event handler
681  * @unregister_master_handler:  pointer to unregister event handler
682  * @register_11d_new_cc_handler: pointer to register 11d cc event handler
683  * @unregister_11d_new_cc_handler:  pointer to unregister 11d cc event handler
684  */
685 struct wlan_lmac_if_reg_tx_ops {
686 	QDF_STATUS (*register_master_handler)(struct wlan_objmgr_psoc *psoc,
687 					      void *arg);
688 	QDF_STATUS (*unregister_master_handler)(struct wlan_objmgr_psoc *psoc,
689 						void *arg);
690 
691 	QDF_STATUS (*set_country_code)(struct wlan_objmgr_psoc *psoc,
692 						void *arg);
693 	QDF_STATUS (*fill_umac_legacy_chanlist)(struct wlan_objmgr_pdev *pdev,
694 			struct regulatory_channel *cur_chan_list);
695 	QDF_STATUS (*register_11d_new_cc_handler)(
696 			struct wlan_objmgr_psoc *psoc, void *arg);
697 	QDF_STATUS (*unregister_11d_new_cc_handler)(
698 			struct wlan_objmgr_psoc *psoc, void *arg);
699 	QDF_STATUS (*start_11d_scan)(struct wlan_objmgr_psoc *psoc,
700 			struct reg_start_11d_scan_req *reg_start_11d_scan_req);
701 	QDF_STATUS (*stop_11d_scan)(struct wlan_objmgr_psoc *psoc,
702 			struct reg_stop_11d_scan_req *reg_stop_11d_scan_req);
703 	bool (*is_there_serv_ready_extn)(struct wlan_objmgr_psoc *psoc);
704 	QDF_STATUS (*set_user_country_code)(struct wlan_objmgr_psoc *psoc,
705 					    uint8_t pdev_id,
706 					    struct cc_regdmn_s *rd);
707 	QDF_STATUS (*set_country_failed)(struct wlan_objmgr_pdev *pdev);
708 	QDF_STATUS (*register_ch_avoid_event_handler)(
709 			struct wlan_objmgr_psoc *psoc, void *arg);
710 	QDF_STATUS (*unregister_ch_avoid_event_handler)(
711 			struct wlan_objmgr_psoc *psoc, void *arg);
712 };
713 
714 /**
715  * struct wlan_lmac_if_dfs_tx_ops - Function pointer to call offload/lmac
716  *                                  functions from DFS module.
717  * @dfs_enable:                         Enable DFS.
718  * @dfs_get_caps:                       Get DFS capabilities.
719  * @dfs_disable:                        Disable DFS
720  * @dfs_gettsf64:                       Get tsf64 value.
721  * @dfs_set_use_cac_prssi:              Set use_cac_prssi value.
722  * @dfs_get_dfsdomain:                  Get DFS domain.
723  * @dfs_is_countryCode_CHINA:           Check is country code CHINA.
724  * @dfs_get_thresholds:                 Get thresholds.
725  * @dfs_get_ext_busy:                   Get ext_busy.
726  * @dfs_get_target_type:                Get target type.
727  * @dfs_is_countryCode_KOREA_ROC3:      Check is county code Korea.
728  * @dfs_get_ah_devid:                   Get ah devid.
729  * @dfs_get_phymode_info:               Get phymode info.
730  * @dfs_reg_ev_handler:                 Register dfs event handler.
731  * @dfs_process_emulate_bang_radar_cmd: Process emulate bang radar test command.
732  * @dfs_agile_ch_cfg_cmd:               Send Agile Channel Configuration command
733  * @dfs_ocac_abort_cmd:                 Send Off-Channel CAC abort command.
734  * @dfs_is_pdev_5ghz:                   Check if the given pdev is 5GHz.
735  * @dfs_set_phyerr_filter_offload:      Config phyerr filter offload.
736  * @dfs_send_offload_enable_cmd:        Send dfs offload enable command to fw.
737  * @dfs_host_dfs_check_support:         To check Host DFS confirmation feature
738  *                                      support.
739  * @dfs_send_avg_radar_params_to_fw:    Send average radar parameters to FW.
740  * @dfs_send_usenol_pdev_param:         Send usenol pdev param to FW.
741  * @dfs_send_subchan_marking_pdev_param: Send subchan marking pdev param to FW.
742  */
743 
744 struct wlan_lmac_if_dfs_tx_ops {
745 	QDF_STATUS (*dfs_enable)(struct wlan_objmgr_pdev *pdev,
746 			int *is_fastclk,
747 			struct wlan_dfs_phyerr_param *param,
748 			uint32_t dfsdomain);
749 	QDF_STATUS (*dfs_get_caps)(struct wlan_objmgr_pdev *pdev,
750 			struct wlan_dfs_caps *dfs_caps);
751 	QDF_STATUS (*dfs_disable)(struct wlan_objmgr_pdev *pdev,
752 			int no_cac);
753 	QDF_STATUS (*dfs_gettsf64)(struct wlan_objmgr_pdev *pdev,
754 			uint64_t *tsf64);
755 	QDF_STATUS (*dfs_set_use_cac_prssi)(struct wlan_objmgr_pdev *pdev);
756 	QDF_STATUS (*dfs_get_thresholds)(struct wlan_objmgr_pdev *pdev,
757 			struct wlan_dfs_phyerr_param *param);
758 	QDF_STATUS (*dfs_get_ext_busy)(struct wlan_objmgr_pdev *pdev,
759 			int *dfs_ext_chan_busy);
760 	QDF_STATUS (*dfs_get_target_type)(struct wlan_objmgr_pdev *pdev,
761 			uint32_t *target_type);
762 	QDF_STATUS (*dfs_get_ah_devid)(struct wlan_objmgr_pdev *pdev,
763 			uint16_t *devid);
764 	QDF_STATUS (*dfs_get_phymode_info)(struct wlan_objmgr_pdev *pdev,
765 			uint32_t chan_mode,
766 			uint32_t *mode_info,
767 			bool is_2gvht_en);
768 	QDF_STATUS (*dfs_reg_ev_handler)(struct wlan_objmgr_psoc *psoc);
769 	QDF_STATUS (*dfs_process_emulate_bang_radar_cmd)(
770 			struct wlan_objmgr_pdev *pdev,
771 			struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test);
772 	QDF_STATUS (*dfs_agile_ch_cfg_cmd)(
773 			struct wlan_objmgr_pdev *pdev,
774 			struct dfs_agile_cac_params *adfs_params);
775 	QDF_STATUS (*dfs_ocac_abort_cmd)(struct wlan_objmgr_pdev *pdev);
776 	QDF_STATUS (*dfs_is_pdev_5ghz)(struct wlan_objmgr_pdev *pdev,
777 			bool *is_5ghz);
778 	QDF_STATUS (*dfs_set_phyerr_filter_offload)(
779 			struct wlan_objmgr_pdev *pdev,
780 			bool dfs_phyerr_filter_offload);
781 	bool (*dfs_is_tgt_offload)(struct wlan_objmgr_psoc *psoc);
782 	QDF_STATUS (*dfs_send_offload_enable_cmd)(
783 			struct wlan_objmgr_pdev *pdev,
784 			bool enable);
785 	QDF_STATUS (*dfs_host_dfs_check_support)(struct wlan_objmgr_pdev *pdev,
786 						 bool *enabled);
787 	QDF_STATUS (*dfs_send_avg_radar_params_to_fw)(
788 			struct wlan_objmgr_pdev *pdev,
789 			struct dfs_radar_found_params *params);
790 	QDF_STATUS (*dfs_send_usenol_pdev_param)(struct wlan_objmgr_pdev *pdev,
791 						 bool usenol);
792 	QDF_STATUS (*dfs_send_subchan_marking_pdev_param)(
793 			struct wlan_objmgr_pdev *pdev,
794 			bool subchanmark);
795 };
796 
797 /**
798  * struct wlan_lmac_if_target_tx_ops - Function pointers to call target
799  *                                     functions from other modules.
800  * @tgt_is_tgt_type_ar900b:  To check AR900B target type.
801  * @tgt_is_tgt_type_ipq4019: To check IPQ4019 target type.
802  * @tgt_is_tgt_type_qca9984: To check QCA9984 target type.
803  * @tgt_is_tgt_type_qca9888: To check QCA9888 target type.
804  * @tgt_is_tgt_type_adrastea: To check QCS40X target type.
805  * @tgt_get_tgt_type:        Get target type
806  * @tgt_get_tgt_version:     Get target version
807  * @tgt_get_tgt_revision:    Get target revision
808  */
809 struct wlan_lmac_if_target_tx_ops {
810 	bool (*tgt_is_tgt_type_ar900b)(uint32_t);
811 	bool (*tgt_is_tgt_type_ipq4019)(uint32_t);
812 	bool (*tgt_is_tgt_type_qca9984)(uint32_t);
813 	bool (*tgt_is_tgt_type_qca9888)(uint32_t);
814 	bool (*tgt_is_tgt_type_adrastea)(uint32_t);
815 	uint32_t (*tgt_get_tgt_type)(struct wlan_objmgr_psoc *psoc);
816 	uint32_t (*tgt_get_tgt_version)(struct wlan_objmgr_psoc *psoc);
817 	uint32_t (*tgt_get_tgt_revision)(struct wlan_objmgr_psoc *psoc);
818 };
819 
820 #ifdef WLAN_OFFCHAN_TXRX_ENABLE
821 /**
822  * struct wlan_lmac_if_offchan_txrx_ops - Function pointers to check target
823  *                                     capabilities related to offchan txrx.
824  * @offchan_data_tid_support: To check if target supports separate tid for
825  *                                     offchan data tx.
826  */
827 struct wlan_lmac_if_offchan_txrx_ops {
828 	bool (*offchan_data_tid_support)(struct wlan_objmgr_pdev *pdev);
829 };
830 #endif
831 
832 #ifdef WLAN_SUPPORT_GREEN_AP
833 struct wlan_green_ap_egap_params;
834 /**
835  * struct wlan_lmac_if_green_ap_tx_ops - structure of tx function
836  *                  pointers for green ap component
837  * @enable_egap: function pointer to send enable egap indication to fw
838  * @ps_on_off_send:  function pointer to send enable/disable green ap ps to fw
839  */
840 struct wlan_lmac_if_green_ap_tx_ops {
841 	QDF_STATUS (*enable_egap)(struct wlan_objmgr_pdev *pdev,
842 				struct wlan_green_ap_egap_params *egap_params);
843 	QDF_STATUS (*ps_on_off_send)(struct wlan_objmgr_pdev *pdev,
844 				     bool value, uint8_t pdev_id);
845 	QDF_STATUS (*reset_dev)(struct wlan_objmgr_pdev *pdev);
846 	uint16_t (*get_current_channel)(struct wlan_objmgr_pdev *pdev);
847 	uint64_t (*get_current_channel_flags)(struct wlan_objmgr_pdev *pdev);
848 	QDF_STATUS (*get_capab)(struct  wlan_objmgr_pdev *pdev);
849 };
850 #endif
851 
852 /**
853  * struct wlan_lmac_if_tx_ops - south bound tx function pointers
854  * @mgmt_txrx_tx_ops: mgmt txrx tx ops
855  * @scan: scan tx ops
856  * @dfs_tx_ops: dfs tx ops.
857  * @green_ap_tx_ops: green_ap tx_ops
858  * @cp_stats_tx_ops: cp stats tx_ops
859  *
860  * Callback function tabled to be registered with umac.
861  * umac will use the functional table to send events/frames to lmac/wmi
862  */
863 
864 struct wlan_lmac_if_tx_ops {
865 	/* Components to declare function pointers required by the module
866 	 * in component specific structure.
867 	 * The component specific ops structure can be declared in this file
868 	 * only
869 	 */
870 	 struct wlan_lmac_if_mgmt_txrx_tx_ops mgmt_txrx_tx_ops;
871 	 struct wlan_lmac_if_scan_tx_ops scan;
872 #ifdef CONVERGED_P2P_ENABLE
873 	struct wlan_lmac_if_p2p_tx_ops p2p;
874 #endif
875 #ifdef QCA_SUPPORT_SON
876 	struct wlan_lmac_if_son_tx_ops son_tx_ops;
877 #endif
878 
879 #ifdef WLAN_ATF_ENABLE
880 	struct wlan_lmac_if_atf_tx_ops atf_tx_ops;
881 #endif
882 #ifdef QCA_SUPPORT_CP_STATS
883 	struct wlan_lmac_if_cp_stats_tx_ops cp_stats_tx_ops;
884 #endif
885 #ifdef WLAN_SA_API_ENABLE
886 	struct wlan_lmac_if_sa_api_tx_ops sa_api_tx_ops;
887 #endif
888 
889 #ifdef WLAN_CFR_ENABLE
890 	struct wlan_lmac_if_cfr_tx_ops cfr_tx_ops;
891 #endif
892 
893 #ifdef WLAN_CONV_SPECTRAL_ENABLE
894 	struct wlan_lmac_if_sptrl_tx_ops sptrl_tx_ops;
895 #endif
896 
897 #ifdef WLAN_CONV_CRYPTO_SUPPORTED
898 	struct wlan_lmac_if_crypto_tx_ops crypto_tx_ops;
899 #endif
900 
901 #ifdef WIFI_POS_CONVERGED
902 	struct wlan_lmac_if_wifi_pos_tx_ops wifi_pos_tx_ops;
903 #endif
904 	struct wlan_lmac_if_reg_tx_ops reg_ops;
905 	struct wlan_lmac_if_dfs_tx_ops dfs_tx_ops;
906 
907 #ifdef FEATURE_WLAN_TDLS
908 	struct wlan_lmac_if_tdls_tx_ops tdls_tx_ops;
909 #endif
910 
911 #ifdef WLAN_SUPPORT_FILS
912 	struct wlan_lmac_if_fd_tx_ops fd_tx_ops;
913 #endif
914 	 struct wlan_lmac_if_mlme_tx_ops mops;
915 	 struct wlan_lmac_if_target_tx_ops target_tx_ops;
916 
917 #ifdef WLAN_OFFCHAN_TXRX_ENABLE
918 	struct wlan_lmac_if_offchan_txrx_ops offchan_txrx_ops;
919 #endif
920 
921 #ifdef DIRECT_BUF_RX_ENABLE
922 	struct wlan_lmac_if_direct_buf_rx_tx_ops dbr_tx_ops;
923 #endif
924 
925 #ifdef WLAN_SUPPORT_GREEN_AP
926 	 struct wlan_lmac_if_green_ap_tx_ops green_ap_tx_ops;
927 #endif
928 
929 	struct wlan_lmac_if_ftm_tx_ops ftm_tx_ops;
930 };
931 
932 /**
933  * struct wlan_lmac_if_mgmt_txrx_rx_ops - structure of rx function
934  *                  pointers for mgmt txrx component
935  * @mgmt_tx_completion_handler: function pointer to give tx completions
936  *                              to mgmt txrx comp.
937  * @mgmt_rx_frame_handler: function pointer to give rx frame to mgmt txrx comp.
938  * @mgmt_txrx_get_nbuf_from_desc_id: function pointer to get nbuf from desc id
939  * @mgmt_txrx_get_peer_from_desc_id: function pointer to get peer from desc id
940  * @mgmt_txrx_get_vdev_id_from_desc_id: function pointer to get vdev id from
941  *                                      desc id
942  */
943 struct wlan_lmac_if_mgmt_txrx_rx_ops {
944 	QDF_STATUS (*mgmt_tx_completion_handler)(
945 			struct wlan_objmgr_pdev *pdev,
946 			uint32_t desc_id, uint32_t status,
947 			void *tx_compl_params);
948 	QDF_STATUS (*mgmt_rx_frame_handler)(
949 			struct wlan_objmgr_psoc *psoc,
950 			qdf_nbuf_t buf,
951 			struct mgmt_rx_event_params *mgmt_rx_params);
952 	qdf_nbuf_t (*mgmt_txrx_get_nbuf_from_desc_id)(
953 			struct wlan_objmgr_pdev *pdev,
954 			uint32_t desc_id);
955 	struct wlan_objmgr_peer * (*mgmt_txrx_get_peer_from_desc_id)(
956 			struct wlan_objmgr_pdev *pdev, uint32_t desc_id);
957 	uint8_t (*mgmt_txrx_get_vdev_id_from_desc_id)(
958 			struct wlan_objmgr_pdev *pdev,
959 			uint32_t desc_id);
960 	uint32_t (*mgmt_txrx_get_free_desc_pool_count)(
961 			struct wlan_objmgr_pdev *pdev);
962 };
963 
964 struct wlan_lmac_if_reg_rx_ops {
965 	QDF_STATUS (*master_list_handler)(struct cur_regulatory_info
966 					  *reg_info);
967 	QDF_STATUS (*reg_11d_new_cc_handler)(struct wlan_objmgr_psoc *psoc,
968 			struct reg_11d_new_country *reg_11d_new_cc);
969 	QDF_STATUS (*reg_set_regdb_offloaded)(struct wlan_objmgr_psoc *psoc,
970 			bool val);
971 	QDF_STATUS (*reg_set_11d_offloaded)(struct wlan_objmgr_psoc *psoc,
972 			bool val);
973 	QDF_STATUS (*get_dfs_region)(struct wlan_objmgr_pdev *pdev,
974 			enum dfs_reg *dfs_reg);
975 	QDF_STATUS (*reg_ch_avoid_event_handler)(struct wlan_objmgr_psoc *psoc,
976 			struct ch_avoid_ind_type *ch_avoid_ind);
977 	uint32_t (*reg_freq_to_chan)(struct wlan_objmgr_pdev *pdev,
978 			uint32_t freq);
979 	QDF_STATUS (*reg_set_chan_144)(struct wlan_objmgr_pdev *pdev,
980 			bool enable_ch_144);
981 	bool (*reg_get_chan_144)(struct wlan_objmgr_pdev *pdev);
982 	QDF_STATUS (*reg_program_default_cc)(struct wlan_objmgr_pdev *pdev,
983 			uint16_t regdmn);
984 	QDF_STATUS (*reg_get_current_regdomain)(struct wlan_objmgr_pdev *pdev,
985 			struct cur_regdmn_info *cur_regdmn);
986 	QDF_STATUS (*reg_enable_dfs_channels)(struct wlan_objmgr_pdev *pdev,
987 					      bool dfs_enable);
988 	QDF_STATUS (*reg_modify_pdev_chan_range)(struct
989 						 wlan_objmgr_pdev *pdev);
990 	bool (*reg_ignore_fw_reg_offload_ind)(struct wlan_objmgr_psoc *psoc);
991 };
992 
993 #ifdef CONVERGED_P2P_ENABLE
994 
995 /* forward declarations for p2p rx ops */
996 struct p2p_noa_info;
997 struct p2p_lo_event;
998 struct p2p_set_mac_filter_evt;
999 
1000 /**
1001  * struct wlan_lmac_if_p2p_rx_ops - structure of rx function pointers
1002  * for P2P component
1003  * @lo_ev_handler:    function pointer to give listen offload event
1004  * @noa_ev_handler:   function pointer to give noa event
1005  * @add_mac_addr_filter_evt_handler: function pointer to process add mac addr
1006  *    rx filter event
1007  */
1008 struct wlan_lmac_if_p2p_rx_ops {
1009 #ifdef FEATURE_P2P_LISTEN_OFFLOAD
1010 	QDF_STATUS (*lo_ev_handler)(struct wlan_objmgr_psoc *psoc,
1011 		struct p2p_lo_event *event_info);
1012 #endif
1013 	QDF_STATUS (*noa_ev_handler)(struct wlan_objmgr_psoc *psoc,
1014 		struct p2p_noa_info *event_info);
1015 	QDF_STATUS (*add_mac_addr_filter_evt_handler)(
1016 		struct wlan_objmgr_psoc *psoc,
1017 		struct p2p_set_mac_filter_evt *event_info);
1018 
1019 };
1020 #endif
1021 
1022 #ifdef WLAN_ATF_ENABLE
1023 
1024 /**
1025  * struct wlan_lmac_if_atf_rx_ops - ATF south bound rx function pointers
1026  * @atf_get_atf_commit:                Get ATF commit state
1027  * @atf_get_fmcap:                     Get firmware capability for ATF
1028  * @atf_get_obss_scale:                Get OBSS scale
1029  * @atf_get_mode:                      Get mode of ATF
1030  * @atf_get_msdu_desc:                 Get msdu desc for ATF
1031  * @atf_get_max_vdevs:                 Get maximum vdevs for a Radio
1032  * @atf_get_peers:                     Get number of peers for a radio
1033  * @atf_get_tput_based:                Get throughput based enabled/disabled
1034  * @atf_get_logging:                   Get logging enabled/disabled
1035  * @atf_update_buf_held:               Set Num buf held by subgroup
1036  * @atf_get_ssidgroup:                 Get ssid group state
1037  * @atf_get_vdev_ac_blk_cnt:           Get AC block count for vdev
1038  * @atf_get_peer_blk_txbitmap:         Get peer tx traffic AC bitmap
1039  * @atf_get_vdev_blk_txtraffic:        Get vdev tx traffic block state
1040  * @atf_get_sched:                     Get ATF scheduled policy
1041  * @atf_get_tx_tokens:                 Get Tx tokens
1042  * @atf_buf_distribute:                Distribute Buffers
1043  * @atf_get_tx_tokens_common:          Get common tx tokens
1044  * @atf_get_shadow_alloted_tx_tokens:  Get shadow alloted tx tokens
1045  * @atf_get_peer_stats:                Get atf peer stats
1046  * @atf_adjust_subgroup_txtokens:      Adjust tokens based on actual duration
1047  * @atf_account_subgroup_txtokens:     Estimate tx time & update subgroup tokens
1048  * @atf_subgroup_free_buf:             On tx completion, update num buf held
1049  * @atf_update_subgroup_tidstate:      TID state (Paused/unpaused) of node
1050  * @atf_get_subgroup_airtime:          Get subgroup airtime
1051  * @atf_get_token_allocated:           Get atf token allocated
1052  * @atf_get_token_utilized:            Get atf token utilized
1053  * @atf_set_sched:                     Set ATF schedule policy
1054  * @atf_set_fmcap:                     Set firmware capability for ATF
1055  * @atf_set_obss_scale:                Set ATF obss scale
1056  * @atf_set_msdu_desc:                 Set msdu desc
1057  * @atf_set_max_vdevs:                 Set maximum vdevs number
1058  * @atf_set_peers:                     Set peers number
1059  * @atf_set_peer_stats:                Set peer stats
1060  * @atf_set_vdev_blk_txtraffic:        Set Block/unblock vdev tx traffic
1061  * @atf_peer_blk_txtraffic:            Block peer tx traffic
1062  * @atf_peer_unblk_txtraffic:          Unblock peer tx traffic
1063  * @atf_set_token_allocated:           Set atf token allocated
1064  * @atf_set_token_utilized:            Set atf token utilized
1065  */
1066 struct wlan_lmac_if_atf_rx_ops {
1067 	uint8_t (*atf_get_atf_commit)(struct wlan_objmgr_pdev *pdev);
1068 	uint32_t (*atf_get_fmcap)(struct wlan_objmgr_psoc *psoc);
1069 	uint32_t (*atf_get_obss_scale)(struct wlan_objmgr_pdev *pdev);
1070 	uint32_t (*atf_get_mode)(struct wlan_objmgr_psoc *psoc);
1071 	uint32_t (*atf_get_msdu_desc)(struct wlan_objmgr_psoc *psoc);
1072 	uint32_t (*atf_get_max_vdevs)(struct wlan_objmgr_psoc *psoc);
1073 	uint32_t (*atf_get_peers)(struct wlan_objmgr_psoc *psoc);
1074 	uint32_t (*atf_get_tput_based)(struct wlan_objmgr_pdev *pdev);
1075 	uint32_t (*atf_get_logging)(struct wlan_objmgr_pdev *pdev);
1076 	void*   (*atf_update_buf_held)(struct wlan_objmgr_peer *peer,
1077 				       int8_t ac);
1078 	uint32_t (*atf_get_ssidgroup)(struct wlan_objmgr_pdev *pdev);
1079 	uint32_t (*atf_get_vdev_ac_blk_cnt)(struct wlan_objmgr_vdev *vdev);
1080 	uint8_t (*atf_get_peer_blk_txbitmap)(struct wlan_objmgr_peer *peer);
1081 	uint8_t (*atf_get_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev);
1082 	uint32_t (*atf_get_sched)(struct wlan_objmgr_pdev *pdev);
1083 	uint32_t (*atf_get_tx_tokens)(struct wlan_objmgr_peer *peer);
1084 	uint32_t (*atf_buf_distribute)(struct wlan_objmgr_pdev *pdev,
1085 				       struct wlan_objmgr_peer *peer,
1086 				       int8_t ac);
1087 	uint32_t (*atf_get_txtokens_common)(struct wlan_objmgr_pdev *pdev);
1088 	uint32_t (*atf_get_shadow_alloted_tx_tokens)(
1089 						struct wlan_objmgr_pdev *pdev);
1090 	void (*atf_get_peer_stats)(struct wlan_objmgr_peer *peer,
1091 				   struct atf_stats *stats);
1092 	QDF_STATUS
1093 	(*atf_adjust_subgroup_txtokens)(struct wlan_objmgr_peer *pr,
1094 					uint8_t ac, uint32_t actual_duration,
1095 					uint32_t est_duration);
1096 	QDF_STATUS
1097 	(*atf_account_subgroup_txtokens)(struct wlan_objmgr_peer *pr,
1098 					 uint8_t ac,
1099 					 uint32_t duration);
1100 	QDF_STATUS
1101 	(*atf_subgroup_free_buf)(uint16_t buf_acc_size, void *bf_atf_sg);
1102 	QDF_STATUS
1103 	(*atf_update_subgroup_tidstate)(struct wlan_objmgr_peer *peer,
1104 					uint8_t atf_nodepaused);
1105 	uint8_t (*atf_get_subgroup_airtime)(struct wlan_objmgr_peer *peer,
1106 					    uint8_t ac);
1107 	uint16_t (*atf_get_token_allocated)(struct wlan_objmgr_peer *peer);
1108 	uint16_t (*atf_get_token_utilized)(struct wlan_objmgr_peer *peer);
1109 	void (*atf_set_sched)(struct wlan_objmgr_pdev *pdev, uint32_t value);
1110 	void (*atf_set_fmcap)(struct wlan_objmgr_psoc *psoc, uint32_t value);
1111 	void (*atf_set_obss_scale)(struct wlan_objmgr_pdev *pdev,
1112 				   uint32_t value);
1113 	void (*atf_set_msdu_desc)(struct wlan_objmgr_psoc *psoc,
1114 				  uint32_t value);
1115 	void (*atf_set_max_vdevs)(struct wlan_objmgr_psoc *psoc,
1116 				  uint32_t value);
1117 	void (*atf_set_peers)(struct wlan_objmgr_psoc *psoc, uint32_t value);
1118 	void (*atf_set_peer_stats)(struct wlan_objmgr_peer *peer,
1119 				   struct atf_stats *stats);
1120 	void (*atf_set_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev,
1121 					   uint8_t value);
1122 	void (*atf_peer_blk_txtraffic)(struct wlan_objmgr_peer *peer,
1123 				       int8_t ac_id);
1124 	void (*atf_peer_unblk_txtraffic)(struct wlan_objmgr_peer *peer,
1125 					 int8_t ac_id);
1126 	void (*atf_set_token_allocated)(struct wlan_objmgr_peer *peer,
1127 					uint16_t value);
1128 	void (*atf_set_token_utilized)(struct wlan_objmgr_peer *peer,
1129 					uint16_t value);
1130 };
1131 #endif
1132 
1133 #ifdef WLAN_SUPPORT_FILS
1134 /**
1135  * struct wlan_lmac_if_fd_rx_ops - FILS Discovery specific Rx function pointers
1136  * @fd_is_fils_enable:      FILS enabled or not
1137  * @fd_alloc:               Allocate FD buffer
1138  * @fd_stop:                Stop and free deferred FD buffer
1139  * @fd_free:                Free FD frame buffer
1140  * @fd_get_valid_fd_period: Get valid FD period
1141  * @fd_swfda_handler:       SWFDA event handler
1142  * @fd_offload:             Offload FD frame
1143  */
1144 struct wlan_lmac_if_fd_rx_ops {
1145 	uint8_t (*fd_is_fils_enable)(struct wlan_objmgr_vdev *vdev);
1146 	void (*fd_alloc)(struct wlan_objmgr_vdev *vdev);
1147 	void (*fd_stop)(struct wlan_objmgr_vdev *vdev);
1148 	void (*fd_free)(struct wlan_objmgr_vdev *vdev);
1149 	uint32_t (*fd_get_valid_fd_period)(struct wlan_objmgr_vdev *vdev,
1150 					   uint8_t *is_modified);
1151 	QDF_STATUS (*fd_swfda_handler)(struct wlan_objmgr_vdev *vdev);
1152 	QDF_STATUS (*fd_offload)(struct wlan_objmgr_vdev *vdev,
1153 				 uint32_t vdev_id);
1154 };
1155 #endif
1156 
1157 #ifdef WLAN_SA_API_ENABLE
1158 
1159 /**
1160  * struct wlan_lmac_if_sa_api_rx_ops - SA API south bound rx function pointers
1161  */
1162 struct wlan_lmac_if_sa_api_rx_ops {
1163 	uint32_t (*sa_api_get_sa_supported)(struct wlan_objmgr_psoc *psoc);
1164 	uint32_t (*sa_api_get_validate_sw)(struct wlan_objmgr_psoc *psoc);
1165 	void (*sa_api_enable_sa)(struct wlan_objmgr_psoc *psoc, uint32_t value);
1166 	uint32_t (*sa_api_get_sa_enable)(struct wlan_objmgr_psoc *psoc);
1167 	void (*sa_api_peer_assoc_hanldler)(struct wlan_objmgr_pdev *pdev,
1168 			struct wlan_objmgr_peer *peer, struct sa_rate_cap *);
1169 	uint32_t (*sa_api_update_tx_feedback)(struct wlan_objmgr_pdev *pdev,
1170 			struct wlan_objmgr_peer *peer,
1171 			struct sa_tx_feedback *feedback);
1172 	uint32_t (*sa_api_update_rx_feedback)(struct wlan_objmgr_pdev *pdev,
1173 			struct wlan_objmgr_peer *peer,
1174 			struct sa_rx_feedback *feedback);
1175 	uint32_t (*sa_api_ucfg_set_param)(struct wlan_objmgr_pdev *pdev,
1176 			char *val);
1177 	uint32_t (*sa_api_ucfg_get_param)(struct wlan_objmgr_pdev *pdev,
1178 			char *val);
1179 	uint32_t (*sa_api_is_tx_feedback_enabled)
1180 			(struct wlan_objmgr_pdev *pdev);
1181 	uint32_t (*sa_api_is_rx_feedback_enabled)
1182 			(struct wlan_objmgr_pdev *pdev);
1183 	uint32_t (*sa_api_convert_rate_2g)(uint32_t rate);
1184 	uint32_t (*sa_api_convert_rate_5g)(uint32_t rate);
1185 	uint32_t (*sa_api_get_sa_mode)(struct wlan_objmgr_pdev *pdev);
1186 	uint32_t (*sa_api_get_beacon_txantenna)(struct wlan_objmgr_pdev *pdev);
1187 	uint32_t (*sa_api_cwm_action)(struct wlan_objmgr_pdev *pdev);
1188 };
1189 #endif
1190 
1191 #ifdef WLAN_CFR_ENABLE
1192 
1193 /**
1194  * struct wlan_lmac_if_cfr_rx_ops - CFR south bound rx function pointers
1195  * @cfr_support_set: Set the CFR support based on FW advert
1196  * @cfr_info_send: Send cfr info to upper layers
1197  */
1198 struct wlan_lmac_if_cfr_rx_ops {
1199 	void (*cfr_support_set)(struct wlan_objmgr_psoc *psoc, uint32_t value);
1200 	uint32_t (*cfr_info_send)(struct wlan_objmgr_pdev *pdev, void *head,
1201 				  size_t hlen, void *data, size_t dlen,
1202 				  void *tail, size_t tlen);
1203 };
1204 #endif
1205 
1206 #ifdef WLAN_CONV_SPECTRAL_ENABLE
1207 /**
1208  * struct wlan_lmac_if_sptrl_rx_ops - Spectral south bound Rx operations
1209  *
1210  * @sptrlro_get_target_handle: Get Spectral handle for target/LMAC private data
1211  * @sptrlro_vdev_get_chan_freq_seg2: Get secondary 80 center frequency
1212  * @sptrlro_spectral_is_feature_disabled: Check if spectral feature is disabled
1213  */
1214 struct wlan_lmac_if_sptrl_rx_ops {
1215 	void * (*sptrlro_get_target_handle)(struct wlan_objmgr_pdev *pdev);
1216 	int16_t (*sptrlro_vdev_get_chan_freq)(struct wlan_objmgr_vdev *vdev);
1217 	int16_t (*sptrlro_vdev_get_chan_freq_seg2)
1218 					(struct wlan_objmgr_vdev *vdev);
1219 	enum phy_ch_width (*sptrlro_vdev_get_ch_width)(
1220 			struct wlan_objmgr_vdev *vdev);
1221 	int (*sptrlro_vdev_get_sec20chan_freq_mhz)(
1222 			struct wlan_objmgr_vdev *vdev,
1223 			uint16_t *sec20chan_freq);
1224 	bool (*sptrlro_spectral_is_feature_disabled)(
1225 			struct wlan_objmgr_psoc *psoc);
1226 };
1227 #endif /* WLAN_CONV_SPECTRAL_ENABLE */
1228 
1229 #ifdef WIFI_POS_CONVERGED
1230 /**
1231  * struct wlan_lmac_if_wifi_pos_rx_ops - structure of rx function
1232  * pointers for wifi_pos component
1233  * @oem_rsp_event_rx: callback for WMI_OEM_RESPONSE_EVENTID
1234  */
1235 struct wlan_lmac_if_wifi_pos_rx_ops {
1236 	int (*oem_rsp_event_rx)(struct wlan_objmgr_psoc *psoc,
1237 				struct oem_data_rsp *oem_rsp);
1238 };
1239 #endif
1240 
1241 /**
1242  * struct wlan_lmac_if_dfs_rx_ops - Function pointers to call dfs functions
1243  *                                  from lmac/offload.
1244  * @dfs_get_radars:                   Calls init radar table functions.
1245  * @dfs_process_phyerr:               Process phyerr.
1246  * @dfs_destroy_object:               Destroys the DFS object.
1247  * @dfs_radar_enable:                 Enables the radar.
1248  * @dfs_is_radar_enabled:             Check if the radar is enabled.
1249  * @dfs_control:                      Used to process ioctls related to DFS.
1250  * @dfs_is_precac_timer_running:      Check whether precac timer is running.
1251  * @dfs_find_vht80_chan_for_precac:   Find VHT80 channel for precac.
1252  * @dfs_cancel_precac_timer:          Cancel the precac timer.
1253  * @dfs_override_precac_timeout:      Override the default precac timeout.
1254  * @dfs_set_precac_enable:            Set precac enable flag.
1255  * @dfs_get_legacy_precac_enable:     Get the precac enable flag for
1256  *                                    partial offload (legacy) chipsets.
1257  * @dfs_set_precac_intermediate_chan: Set intermediate channel for precac.
1258  * @dfs_get_precac_intermediate_chan: Get intermediate channel for precac.
1259  * @dfs_precac_preferred_chan:        Configure preferred channel during
1260  *                                    precac.
1261  * dfs_get_precac_chan_state:         Get precac status for given channel.
1262  * dfs_start_precac_timer:            Start precac timer.
1263  * @dfs_get_override_precac_timeout:  Get precac timeout.
1264  * @dfs_set_current_channel:          Set DFS current channel.
1265  * @dfs_process_radar_ind:            Process radar found indication.
1266  * @dfs_dfs_cac_complete_ind:         Process cac complete indication.
1267  * @dfs_agile_precac_start:           Initiate Agile PreCAC run.
1268  * @dfs_set_agile_precac_state:       Set agile precac state.
1269  * @dfs_reset_adfs_config:            Reset agile dfs variables.
1270  * @dfs_dfs_ocac_complete_ind:        Process offchan cac complete indication.
1271  * @dfs_stop:                         Clear dfs timers.
1272  * @dfs_reinit_timers:                Reinitialize DFS timers.
1273  * @dfs_enable_stadfs:                Enable/Disable STADFS capability.
1274  * @dfs_is_stadfs_enabled:            Get STADFS capability value.
1275  * @dfs_process_phyerr_filter_offload:Process radar event.
1276  * @dfs_is_phyerr_filter_offload:     Check whether phyerr filter is offload.
1277  * @dfs_action_on_status:             Trigger the action to be taken based on
1278  *                                    on host dfs status received from fw.
1279  * @dfs_override_status_timeout:      Override the value of host dfs status
1280  *                                    wait timeout.
1281  * @dfs_get_override_status_timeout:  Get the value of host dfs status wait
1282  *                                    timeout.
1283  * @dfs_reset_spoof_test:             Checks if radar detection is enabled.
1284  * @dfs_is_disable_radar_marking_set: Check if dis_radar_marking param is set.
1285  * @dfs_allow_hw_pulses:              Set or unset dfs_allow_hw_pulses which
1286  *                                    allow or disallow HW pulses.
1287  * @dfs_is_hw_pulses_allowed:         Check if HW pulses are allowed or not.
1288  * @dfs_set_fw_adfs_support:          Set the agile DFS FW support in DFS.
1289  * @dfs_reset_dfs_prevchan:           Reset DFS previous channel structure.
1290  */
1291 struct wlan_lmac_if_dfs_rx_ops {
1292 	QDF_STATUS (*dfs_get_radars)(struct wlan_objmgr_pdev *pdev);
1293 	QDF_STATUS (*dfs_process_phyerr)(struct wlan_objmgr_pdev *pdev,
1294 			void *buf,
1295 			uint16_t datalen,
1296 			uint8_t r_rssi,
1297 			uint8_t r_ext_rssi,
1298 			uint32_t r_rs_tstamp,
1299 			uint64_t r_fulltsf);
1300 	QDF_STATUS (*dfs_destroy_object)(struct wlan_objmgr_pdev *pdev);
1301 	QDF_STATUS (*dfs_radar_enable)(struct wlan_objmgr_pdev *pdev,
1302 			int no_cac,
1303 			uint32_t opmode);
1304 	void (*dfs_is_radar_enabled)(struct wlan_objmgr_pdev *pdev,
1305 				     int *ignore_dfs);
1306 	QDF_STATUS (*dfs_control)(struct wlan_objmgr_pdev *pdev,
1307 				  u_int id,
1308 				  void *indata,
1309 				  uint32_t insize,
1310 				  void *outdata,
1311 				  uint32_t *outsize,
1312 				  int *error);
1313 	QDF_STATUS (*dfs_is_precac_timer_running)(struct wlan_objmgr_pdev *pdev,
1314 						  bool *is_precac_timer_running
1315 						  );
1316 #ifdef CONFIG_CHAN_NUM_API
1317 	QDF_STATUS
1318 	    (*dfs_find_vht80_chan_for_precac)(struct wlan_objmgr_pdev *pdev,
1319 					      uint32_t chan_mode,
1320 					      uint8_t ch_freq_seg1,
1321 					      uint32_t *cfreq1,
1322 					      uint32_t *cfreq2,
1323 					      uint32_t *phy_mode,
1324 					      bool *dfs_set_cfreq2,
1325 					      bool *set_agile);
1326 #endif
1327 #ifdef CONFIG_CHAN_FREQ_API
1328 	QDF_STATUS
1329 	    (*dfs_find_vht80_chan_for_precac_for_freq)(struct wlan_objmgr_pdev
1330 						       *pdev,
1331 						       uint32_t chan_mode,
1332 						       uint16_t ch_freq_seg1,
1333 						       uint32_t *cfreq1,
1334 						       uint32_t *cfreq2,
1335 						       uint32_t *phy_mode,
1336 						       bool *dfs_set_cfreq2,
1337 						       bool *set_agile);
1338 #endif
1339 	QDF_STATUS (*dfs_agile_precac_start)(struct wlan_objmgr_pdev *pdev);
1340 	QDF_STATUS (*dfs_set_agile_precac_state)(struct wlan_objmgr_pdev *pdev,
1341 						 int agile_precac_state);
1342 	QDF_STATUS (*dfs_reset_adfs_config)(struct wlan_objmgr_psoc *psoc);
1343 	QDF_STATUS
1344 	(*dfs_dfs_ocac_complete_ind)(struct wlan_objmgr_pdev *pdev,
1345 				     struct vdev_adfs_complete_status *ocac_st);
1346 	QDF_STATUS (*dfs_start_precac_timer)(struct wlan_objmgr_pdev *pdev);
1347 	QDF_STATUS (*dfs_cancel_precac_timer)(struct wlan_objmgr_pdev *pdev);
1348 	QDF_STATUS (*dfs_override_precac_timeout)(
1349 			struct wlan_objmgr_pdev *pdev,
1350 			int precac_timeout);
1351 	QDF_STATUS (*dfs_set_precac_enable)(struct wlan_objmgr_pdev *pdev,
1352 			uint32_t value);
1353 	QDF_STATUS
1354 	(*dfs_get_legacy_precac_enable)(struct wlan_objmgr_pdev *pdev,
1355 					bool *buff);
1356 	QDF_STATUS (*dfs_get_agile_precac_enable)(struct wlan_objmgr_pdev *pdev,
1357 						  bool *buff);
1358 #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT
1359 	QDF_STATUS (*dfs_set_precac_intermediate_chan)(struct wlan_objmgr_pdev *pdev,
1360 						       uint32_t value);
1361 	QDF_STATUS (*dfs_get_precac_intermediate_chan)(struct wlan_objmgr_pdev *pdev,
1362 						       int *buff);
1363 #ifdef CONFIG_CHAN_NUM_API
1364 	bool (*dfs_decide_precac_preferred_chan)(struct wlan_objmgr_pdev *pdev,
1365 						 uint8_t *pref_chan,
1366 						 enum wlan_phymode mode);
1367 #endif
1368 #ifdef CONFIG_CHAN_FREQ_API
1369 	bool (*dfs_decide_precac_preferred_chan_for_freq)(struct
1370 						    wlan_objmgr_pdev *pdev,
1371 						    uint16_t *pref_chan_freq,
1372 						    enum wlan_phymode mode);
1373 #endif
1374 
1375 #ifdef CONFIG_CHAN_NUM_API
1376 	enum precac_chan_state (*dfs_get_precac_chan_state)(struct wlan_objmgr_pdev *pdev,
1377 							    uint8_t precac_chan);
1378 #endif
1379 
1380 #ifdef CONFIG_CHAN_FREQ_API
1381 	enum precac_chan_state (*dfs_get_precac_chan_state_for_freq)(struct
1382 						      wlan_objmgr_pdev *pdev,
1383 						      uint16_t pcac_freq);
1384 #endif
1385 #endif
1386 	QDF_STATUS (*dfs_get_override_precac_timeout)(
1387 			struct wlan_objmgr_pdev *pdev,
1388 			int *precac_timeout);
1389 #ifdef CONFIG_CHAN_NUM_API
1390 	QDF_STATUS (*dfs_set_current_channel)(struct wlan_objmgr_pdev *pdev,
1391 			uint16_t ic_freq,
1392 			uint64_t ic_flags,
1393 			uint16_t ic_flagext,
1394 			uint8_t ic_ieee,
1395 			uint8_t ic_vhtop_ch_freq_seg1,
1396 			uint8_t ic_vhtop_ch_freq_seg2);
1397 #endif
1398 #ifdef CONFIG_CHAN_FREQ_API
1399 	QDF_STATUS
1400 	    (*dfs_set_current_channel_for_freq)(struct wlan_objmgr_pdev *pdev,
1401 						uint16_t ic_freq,
1402 						uint64_t ic_flags,
1403 						uint16_t ic_flagext,
1404 						uint8_t ic_ieee,
1405 						uint8_t ic_vhtop_ch_freq_seg1,
1406 						uint8_t ic_vhtop_ch_freq_seg2,
1407 						uint16_t dfs_ch_mhz_freq_seg1,
1408 						uint16_t dfs_ch_mhz_freq_seg2);
1409 #endif
1410 #ifdef DFS_COMPONENT_ENABLE
1411 	QDF_STATUS (*dfs_process_radar_ind)(struct wlan_objmgr_pdev *pdev,
1412 			struct radar_found_info *radar_found);
1413 	QDF_STATUS (*dfs_dfs_cac_complete_ind)(struct wlan_objmgr_pdev *pdev,
1414 			uint32_t vdev_id);
1415 #endif
1416 	QDF_STATUS (*dfs_stop)(struct wlan_objmgr_pdev *pdev);
1417 	QDF_STATUS (*dfs_reinit_timers)(struct wlan_objmgr_pdev *pdev);
1418 	void (*dfs_enable_stadfs)(struct wlan_objmgr_pdev *pdev, bool val);
1419 	bool (*dfs_is_stadfs_enabled)(struct wlan_objmgr_pdev *pdev);
1420 	QDF_STATUS (*dfs_process_phyerr_filter_offload)(
1421 			struct wlan_objmgr_pdev *pdev,
1422 			struct radar_event_info *wlan_radar_info);
1423 	QDF_STATUS (*dfs_is_phyerr_filter_offload)(
1424 			struct wlan_objmgr_psoc *psoc,
1425 			bool *is_phyerr_filter_offload);
1426 	QDF_STATUS (*dfs_action_on_status)(struct wlan_objmgr_pdev *pdev,
1427 			u_int32_t *dfs_status_check);
1428 	QDF_STATUS (*dfs_override_status_timeout)(
1429 			struct wlan_objmgr_pdev *pdev,
1430 			int status_timeout);
1431 	QDF_STATUS (*dfs_get_override_status_timeout)(
1432 			struct wlan_objmgr_pdev *pdev,
1433 			int *status_timeout);
1434 	QDF_STATUS (*dfs_reset_spoof_test)(struct wlan_objmgr_pdev *pdev);
1435 	QDF_STATUS (*dfs_is_disable_radar_marking_set)(struct wlan_objmgr_pdev
1436 						 *pdev,
1437 						 bool *disable_radar_marking);
1438 	QDF_STATUS (*dfs_set_nol_subchannel_marking)(
1439 			struct wlan_objmgr_pdev *pdev,
1440 			bool value);
1441 	QDF_STATUS (*dfs_get_nol_subchannel_marking)(
1442 			struct wlan_objmgr_pdev *pdev,
1443 			bool *value);
1444 	QDF_STATUS (*dfs_set_bw_reduction)(struct wlan_objmgr_pdev *pdev,
1445 			bool value);
1446 	QDF_STATUS (*dfs_is_bw_reduction_needed)(struct wlan_objmgr_pdev *pdev,
1447 			bool *bw_reduce);
1448 	void (*dfs_allow_hw_pulses)(struct wlan_objmgr_pdev *pdev,
1449 				    bool allow_hw_pulses);
1450 	bool (*dfs_is_hw_pulses_allowed)(struct wlan_objmgr_pdev *pdev);
1451 	void (*dfs_set_fw_adfs_support)(struct wlan_objmgr_pdev *pdev,
1452 					bool fw_adfs_support_160,
1453 					bool fw_adfs_support_non_160);
1454 	void (*dfs_reset_dfs_prevchan)(struct wlan_objmgr_pdev *pdev);
1455 };
1456 
1457 /**
1458  * struct wlan_lmac_if_mlme_rx_ops: Function pointer to call MLME functions
1459  * @wlan_mlme_scan_start: function to start scan
1460  * @wlan_mlme_register_pm_event_handler: function to register pm event
1461  * @wlan_mlme_unregister_pm_event_handler: function unregister for pm event
1462  * @wlan_mlme_register_vdev_event_handler: function to register for vdev event
1463  * @wlan_mlme_unregister_vdev_event_handler: functiont o unregister for vdev
1464  * event
1465  * @wlan_mlme_send_probe_request: function to send probe
1466  * @wlan_mlme_resmgr_request_bsschan: function to request bsschan
1467  * @wlan_mlme_resmgr_request_offchan: function to request offchan
1468  * @wlan_mlme_resmgr_active: function to check resmgr status
1469  * @wlan_mlme_get_cw_inter_found: function to get cw interference
1470  * @wlan_mlme_set_home_channel: function to set home channel
1471  * @wlan_mlme_set_channel: function to set channel
1472  * @wlan_mlme_start_record_stats: functiont to start record stats
1473  * @wlan_mlme_end_record_stats: function to end recording of stats
1474  * @wlan_mlme_get_enh_rpt_ind: function to get enhanced repeater index
1475  * @wlan_mlme_pause: function to pause mlme
1476  * @wlan_mlme_unpause: function to unpause mlme
1477  * @wlan_mlme_vdev_pause_control: function to set vdev pause control
1478  * @wlan_mlme_sta_power_pause: function to set sta power pause
1479  * @wlan_mlme_sta_power_unpause: function to set sta power pause
1480  * @wlan_mlme_set_vdev_sleep: function to sleep vdev sleep
1481  * @wlan_mlme_set_vdev_wakeup: function to set vdev wakeup
1482  * @wlan_mlme_get_traffic_indication_timestamp: function to get tid timestamp
1483  * @wlan_mlme_get_acs_in_progress: function to get ACS progress
1484  * @wlan_mlme_end_scan: function to end scan
1485  * @vdev_mgr_get_response_timer_info: function to get response timer info
1486  * @vdev_mgr_start_response: function to handle start response
1487  * @vdev_mgr_stop_response: function to handle stop response
1488  * @vdev_mgr_delete_response: function to handle delete response
1489  * @vdev_mgr_offload_bcn_tx_status_event_handle: function to handle offload
1490  * beacon tx
1491  * @vdev_mgr_tbttoffset_update_handle: function to handle tbtt offset event
1492  * @vdev_mgr_peer_delete_all_response: function to handle vdev delete all peer
1493  * event
1494  * @vdev_mgr_get_wakelock_info: function to get wakelock info
1495  */
1496 struct wlan_lmac_if_mlme_rx_ops {
1497 
1498 	void (*wlan_mlme_scan_start)(struct wlan_objmgr_pdev *pdev);
1499 	void (*wlan_mlme_register_pm_event_handler)(
1500 			struct wlan_objmgr_pdev *pdev,
1501 			uint8_t vdev_id);
1502 	void (*wlan_mlme_unregister_pm_event_handler)(
1503 			struct wlan_objmgr_pdev *pdev,
1504 			uint8_t vdev_id);
1505 	QDF_STATUS (*wlan_mlme_register_vdev_event_handler)(
1506 			struct wlan_objmgr_pdev *pdev,
1507 			uint8_t vdev_id);
1508 	QDF_STATUS (*wlan_mlme_unregister_vdev_event_handler)(
1509 			struct wlan_objmgr_pdev *pdev,
1510 			uint8_t vdev_id);
1511 	int (*wlan_mlme_send_probe_request)(struct wlan_objmgr_pdev *pdev,
1512 			uint8_t vdev_id,
1513 			u_int8_t  *destination,
1514 			u_int8_t  *bssid,
1515 			u_int8_t  *ssid,
1516 			u_int32_t  ssidlen,
1517 			u_int8_t  *ie,
1518 			size_t len);
1519 	int (*wlan_mlme_resmgr_request_bsschan)(struct wlan_objmgr_pdev *pdev);
1520 	int (*wlan_mlme_resmgr_request_offchan)(struct wlan_objmgr_pdev *pdev,
1521 			u_int32_t freq,
1522 			u_int32_t flags,
1523 			u_int32_t estimated_offchannel_time);
1524 	int (*wlan_mlme_resmgr_active)(struct wlan_objmgr_pdev *pdev);
1525 	int (*wlan_mlme_get_cw_inter_found)(struct wlan_objmgr_pdev *pdev);
1526 	int (*wlan_mlme_set_home_channel)(struct wlan_objmgr_pdev *pdev,
1527 			uint8_t vdev_id);
1528 	int (*wlan_mlme_set_channel)(struct wlan_objmgr_pdev *pdev,
1529 			u_int32_t freq,
1530 			u_int32_t flags);
1531 	void (*wlan_mlme_start_record_stats)(struct wlan_objmgr_pdev *pdev);
1532 	void (*wlan_mlme_end_record_stats)(struct wlan_objmgr_pdev *pdev);
1533 	int (*wlan_mlme_get_enh_rpt_ind)(struct wlan_objmgr_pdev *pdev);
1534 	int (*wlan_mlme_pause)(struct wlan_objmgr_pdev *pdev);
1535 	void (*wlan_mlme_unpause)(struct wlan_objmgr_pdev *pdev);
1536 	int (*wlan_mlme_vdev_pause_control)(struct wlan_objmgr_pdev *pdev,
1537 			uint8_t vdev_id);
1538 	int (*wlan_mlme_sta_power_pause)(
1539 			struct wlan_objmgr_pdev *pdev,
1540 			uint8_t vdev_id,
1541 			u_int32_t timeout);
1542 	int (*wlan_mlme_sta_power_unpause)(struct wlan_objmgr_pdev *pdev,
1543 			uint8_t vdev_id);
1544 	int (*wlan_mlme_set_vdev_sleep)(struct wlan_objmgr_pdev *pdev,
1545 			uint8_t vdev_id);
1546 	int (*wlan_mlme_set_vdev_wakeup)(struct wlan_objmgr_pdev *pdev,
1547 			uint8_t vdev_id);
1548 	qdf_time_t (*wlan_mlme_get_traffic_indication_timestamp)(
1549 			struct wlan_objmgr_pdev *pdev);
1550 	int (*wlan_mlme_get_acs_in_progress)(struct wlan_objmgr_pdev *pdev,
1551 			uint8_t vdev_id);
1552 	void (*wlan_mlme_end_scan)(struct wlan_objmgr_pdev *pdev);
1553 	struct vdev_response_timer *(*vdev_mgr_get_response_timer_info)(
1554 					struct wlan_objmgr_vdev *vdev);
1555 	QDF_STATUS (*vdev_mgr_start_response)(
1556 					struct wlan_objmgr_psoc *psoc,
1557 					struct vdev_start_response *rsp);
1558 	QDF_STATUS (*vdev_mgr_stop_response)(
1559 					struct wlan_objmgr_psoc *psoc,
1560 					struct vdev_stop_response *rsp);
1561 	QDF_STATUS (*vdev_mgr_delete_response)(
1562 					struct wlan_objmgr_psoc *psoc,
1563 					struct vdev_delete_response *rsp);
1564 	QDF_STATUS (*vdev_mgr_offload_bcn_tx_status_event_handle)(
1565 							uint32_t vdev_id,
1566 							uint32_t tx_status);
1567 	QDF_STATUS (*vdev_mgr_tbttoffset_update_handle)(
1568 						uint32_t num_vdevs,
1569 						bool is_ext);
1570 	QDF_STATUS (*vdev_mgr_peer_delete_all_response)(
1571 					struct wlan_objmgr_psoc *psoc,
1572 					struct peer_delete_all_response *rsp);
1573 #ifdef FEATURE_VDEV_RSP_WAKELOCK
1574 	struct vdev_mlme_wakelock *(*vdev_mgr_get_wakelock_info)(
1575 					struct wlan_objmgr_vdev *vdev);
1576 #endif
1577 };
1578 
1579 #ifdef WLAN_SUPPORT_GREEN_AP
1580 struct wlan_lmac_if_green_ap_rx_ops {
1581 	bool (*is_ps_enabled)(struct wlan_objmgr_pdev *pdev);
1582 	bool (*is_dbg_print_enabled)(struct wlan_objmgr_pdev *pdev);
1583 	QDF_STATUS (*ps_get)(struct wlan_objmgr_pdev *pdev, uint8_t *value);
1584 	QDF_STATUS (*ps_set)(struct wlan_objmgr_pdev *pdev, uint8_t value);
1585 	void (*suspend_handle)(struct wlan_objmgr_pdev *pdev);
1586 };
1587 #endif
1588 
1589 /**
1590  * struct wlan_lmac_if_rx_ops - south bound rx function pointers
1591  * @mgmt_txrx_tx_ops: mgmt txrx rx ops
1592  * @scan: scan rx ops
1593  * @dfs_rx_ops: dfs rx ops.
1594  * @cp_stats_rx_ops: cp stats rx ops
1595  * @cfr_rx_ops: cfr rx ops
1596  *
1597  * Callback function tabled to be registered with lmac/wmi.
1598  * lmac will use the functional table to send events/frames to umac
1599  */
1600 struct wlan_lmac_if_rx_ops {
1601 	/* Components to declare function pointers required by the module
1602 	 * in component specific structure.
1603 	 * The component specific ops structure can be declared in this file
1604 	 * only
1605 	 */
1606 	 struct wlan_lmac_if_mgmt_txrx_rx_ops mgmt_txrx_rx_ops;
1607 	 struct wlan_lmac_if_scan_rx_ops scan;
1608 #ifdef CONVERGED_P2P_ENABLE
1609 	struct wlan_lmac_if_p2p_rx_ops p2p;
1610 #endif
1611 
1612 #ifdef WLAN_ATF_ENABLE
1613 	struct wlan_lmac_if_atf_rx_ops atf_rx_ops;
1614 #endif
1615 #ifdef QCA_SUPPORT_CP_STATS
1616 	struct wlan_lmac_if_cp_stats_rx_ops cp_stats_rx_ops;
1617 #endif
1618 #ifdef WLAN_SA_API_ENABLE
1619 	struct wlan_lmac_if_sa_api_rx_ops sa_api_rx_ops;
1620 #endif
1621 
1622 #ifdef WLAN_CFR_ENABLE
1623 	struct wlan_lmac_if_cfr_rx_ops cfr_rx_ops;
1624 #endif
1625 
1626 #ifdef WLAN_CONV_SPECTRAL_ENABLE
1627 	struct wlan_lmac_if_sptrl_rx_ops sptrl_rx_ops;
1628 #endif
1629 
1630 #ifdef WLAN_CONV_CRYPTO_SUPPORTED
1631 	struct wlan_lmac_if_crypto_rx_ops crypto_rx_ops;
1632 #endif
1633 #ifdef WIFI_POS_CONVERGED
1634 	struct wlan_lmac_if_wifi_pos_rx_ops wifi_pos_rx_ops;
1635 #endif
1636 	struct wlan_lmac_if_reg_rx_ops reg_rx_ops;
1637 	struct wlan_lmac_if_dfs_rx_ops dfs_rx_ops;
1638 #ifdef FEATURE_WLAN_TDLS
1639 	struct wlan_lmac_if_tdls_rx_ops tdls_rx_ops;
1640 #endif
1641 
1642 #ifdef WLAN_SUPPORT_FILS
1643 	struct wlan_lmac_if_fd_rx_ops fd_rx_ops;
1644 #endif
1645 
1646 	struct wlan_lmac_if_mlme_rx_ops mops;
1647 
1648 #ifdef WLAN_SUPPORT_GREEN_AP
1649 	struct wlan_lmac_if_green_ap_rx_ops green_ap_rx_ops;
1650 #endif
1651 
1652 	struct wlan_lmac_if_ftm_rx_ops ftm_rx_ops;
1653 };
1654 
1655 /* Function pointer to call legacy tx_ops registration in OL/WMA.
1656  */
1657 extern QDF_STATUS (*wlan_lmac_if_umac_tx_ops_register)
1658 				(struct wlan_lmac_if_tx_ops *tx_ops);
1659 #endif /* _WLAN_LMAC_IF_DEF_H_ */
1660