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