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