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