xref: /wlan-dirver/qca-wifi-host-cmn/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h (revision d78dedc9dd8c4ee677ac1649d1d42f2a7c3cc1b7)
1 /*
2  * Copyright (c) 2016-2018 The Linux Foundation. All rights reserved.
3  *
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 #ifndef _WLAN_LMAC_IF_DEF_H_
21 #define _WLAN_LMAC_IF_DEF_H_
22 
23 #include <qdf_time.h>
24 #include "qdf_status.h"
25 #include "wlan_objmgr_cmn.h"
26 #ifdef DFS_COMPONENT_ENABLE
27 #include <wlan_dfs_public_struct.h>
28 #endif
29 #include "wlan_mgmt_txrx_utils_api.h"
30 #include "wlan_scan_public_structs.h"
31 
32 #ifdef WLAN_ATF_ENABLE
33 #include "wlan_atf_utils_defs.h"
34 #endif
35 #ifdef QCA_SUPPORT_SON
36 #include <wlan_son_tgt_api.h>
37 #endif
38 #ifdef WLAN_SA_API_ENABLE
39 #include "wlan_sa_api_utils_defs.h"
40 #endif
41 #ifdef WLAN_CONV_SPECTRAL_ENABLE
42 #include "wlan_spectral_public_structs.h"
43 #endif
44 #include <reg_services_public_struct.h>
45 
46 #ifdef WLAN_CONV_CRYPTO_SUPPORTED
47 #include "wlan_crypto_global_def.h"
48 #endif
49 
50 #include <wlan_dfs_tgt_api.h>
51 #include <wlan_dfs_ioctl.h>
52 
53 /* Number of dev type: Direct attach and Offload */
54 #define MAX_DEV_TYPE 2
55 
56 #ifdef WIFI_POS_CONVERGED
57 /* forward declarations */
58 struct oem_data_req;
59 struct oem_data_rsp;
60 #endif /* WIFI_POS_CONVERGED */
61 
62 #ifdef DIRECT_BUF_RX_ENABLE
63 /* forward declarations for direct buf rx */
64 struct direct_buf_rx_data;
65 #endif
66 
67 #ifdef WLAN_FEATURE_NAN_CONVERGENCE
68 struct scheduler_msg;
69 #endif
70 
71 #ifdef CONVERGED_TDLS_ENABLE
72 #include "wlan_tdls_public_structs.h"
73 #endif
74 
75 #ifdef QCA_SUPPORT_CP_STATS
76 #include <wlan_cp_stats_mc_defs.h>
77 #endif /* QCA_SUPPORT_CP_STATS */
78 
79 #ifdef QCA_SUPPORT_CP_STATS
80 /**
81  * struct wlan_lmac_if_cp_stats_tx_ops - defines southbound tx callbacks for
82  * control plane statistics component
83  * @cp_stats_attach:	function pointer to register events from FW
84  * @cp_stats_detach:	function pointer to unregister events from FW
85  */
86 struct wlan_lmac_if_cp_stats_tx_ops {
87 	QDF_STATUS (*cp_stats_attach)(struct wlan_objmgr_psoc *psoc);
88 	QDF_STATUS (*cp_stats_detach)(struct wlan_objmgr_psoc *posc);
89 #ifdef CONFIG_MCL
90 	void (*inc_wake_lock_stats)(uint32_t reason,
91 				    struct wake_lock_stats *stats,
92 				    uint32_t *unspecified_wake_count);
93 	QDF_STATUS (*send_req_stats)(struct wlan_objmgr_psoc *psoc,
94 				     enum stats_req_type type,
95 				     struct request_info *req);
96 #endif
97 };
98 
99 /**
100  * struct wlan_lmac_if_cp_stats_rx_ops - defines southbound rx callbacks for
101  * control plane statistics component
102  * @cp_stats_rx_event_handler:	function pointer to rx FW events
103  */
104 struct wlan_lmac_if_cp_stats_rx_ops {
105 	QDF_STATUS (*cp_stats_rx_event_handler)(struct wlan_objmgr_vdev *vdev);
106 #ifdef CONFIG_MCL
107 	QDF_STATUS (*process_stats_event)(struct wlan_objmgr_psoc *psoc,
108 					  struct stats_event *ev);
109 #endif
110 };
111 #endif
112 
113 /**
114  * struct wlan_lmac_if_mgmt_txrx_tx_ops - structure of tx function
115  *                  pointers for mgmt txrx component
116  * @mgmt_tx_send: function pointer to transmit mgmt tx frame
117  * @beacon_send:  function pointer to transmit beacon frame
118  * @fd_action_frame_send: function pointer to transmit FD action frame
119  */
120 struct wlan_lmac_if_mgmt_txrx_tx_ops {
121 	QDF_STATUS (*mgmt_tx_send)(struct wlan_objmgr_vdev *vdev,
122 			qdf_nbuf_t nbuf, u_int32_t desc_id,
123 			void *mgmt_tx_params);
124 	QDF_STATUS (*beacon_send)(struct wlan_objmgr_vdev *vdev,
125 			qdf_nbuf_t nbuf);
126 	QDF_STATUS (*fd_action_frame_send)(struct wlan_objmgr_vdev *vdev,
127 					   qdf_nbuf_t nbuf);
128 };
129 
130 /**
131  * struct wlan_lmac_if_scan_tx_ops - south bound tx function pointers for scan
132  * @scan_start: function to start scan
133  * @scan_cancel: function to cancel scan
134  * @pno_start: start pno scan
135  * @pno_stop: stop pno scan
136  * @scan_reg_ev_handler: function to register for scan events
137  * @scan_unreg_ev_handler: function to unregister for scan events
138  *
139  * scan module uses these functions to avail ol/da lmac services
140  */
141 struct wlan_lmac_if_scan_tx_ops {
142 	QDF_STATUS (*scan_start)(struct wlan_objmgr_pdev *pdev,
143 			struct scan_start_request *req);
144 	QDF_STATUS (*scan_cancel)(struct wlan_objmgr_pdev *pdev,
145 			struct scan_cancel_param *req);
146 	QDF_STATUS (*pno_start)(struct wlan_objmgr_psoc *psoc,
147 			struct pno_scan_req_params *req);
148 	QDF_STATUS (*pno_stop)(struct wlan_objmgr_psoc *psoc,
149 			uint8_t vdev_id);
150 	QDF_STATUS (*scan_reg_ev_handler)(struct wlan_objmgr_psoc *psoc,
151 			void *arg);
152 	QDF_STATUS (*scan_unreg_ev_handler)(struct wlan_objmgr_psoc *psoc,
153 			void *arg);
154 	QDF_STATUS (*set_chan_list)(struct wlan_objmgr_pdev *pdev, void *arg);
155 };
156 
157 /**
158  * struct wlan_lmac_if_ftm_tx_ops - south bound tx function pointers for ftm
159  * @ftm_attach: function to register event handlers with FW
160  * @ftm_detach: function to de-register event handlers with FW
161  * @ftm_cmd_send: function to send FTM commands to FW
162  *
163  * ftm module uses these functions to avail ol/da lmac services
164  */
165 struct wlan_lmac_if_ftm_tx_ops {
166 	QDF_STATUS (*ftm_attach)(struct wlan_objmgr_psoc *psoc);
167 	QDF_STATUS (*ftm_detach)(struct wlan_objmgr_psoc *psoc);
168 	QDF_STATUS (*ftm_cmd_send)(struct wlan_objmgr_pdev *pdev,
169 				uint8_t *buf, uint32_t len, uint8_t mac_id);
170 };
171 
172 
173 struct wlan_lmac_if_mlme_tx_ops {
174 	void (*scan_sta_power_events)(struct wlan_objmgr_pdev *pdev,
175 			int event_type, int event_status);
176 	void (*scan_connection_lost)(struct wlan_objmgr_pdev *pdev);
177 	void (*scan_end)(struct wlan_objmgr_pdev *pdev);
178 	uint32_t (*get_wifi_iface_id) (struct wlan_objmgr_pdev *pdev);
179 };
180 
181 /**
182  * struct wlan_lmac_if_scan_rx_ops  - south bound rx function pointers for scan
183  * @scan_ev_handler: scan event handler
184  * @scan_set_max_active_scans: set max active scans allowed
185  *
186  * lmac modules uses this API to post scan events to scan module
187  */
188 struct wlan_lmac_if_scan_rx_ops {
189 	QDF_STATUS (*scan_ev_handler)(struct wlan_objmgr_psoc *psoc,
190 		struct scan_event_info *event_info);
191 	QDF_STATUS (*scan_set_max_active_scans)(struct wlan_objmgr_psoc *psoc,
192 			uint32_t max_active_scans);
193 };
194 
195 #ifdef CONVERGED_P2P_ENABLE
196 
197 /* forward declarations for p2p tx ops */
198 struct p2p_ps_config;
199 struct p2p_lo_start;
200 
201 /**
202  * struct wlan_lmac_if_p2p_tx_ops - structure of tx function pointers
203  * for P2P component
204  * @set_ps:      function pointer to set power save
205  * @lo_start:    function pointer to start listen offload
206  * @lo_stop:     function pointer to stop listen offload
207  * @set_noa:     function pointer to disable/enable NOA
208  * @reg_lo_ev_handler:   function pointer to register lo event handler
209  * @reg_noa_ev_handler:  function pointer to register noa event handler
210  * @unreg_lo_ev_handler: function pointer to unregister lo event handler
211  * @unreg_noa_ev_handler:function pointer to unregister noa event handler
212  */
213 struct wlan_lmac_if_p2p_tx_ops {
214 	QDF_STATUS (*set_ps)(struct wlan_objmgr_psoc *psoc,
215 		struct p2p_ps_config *ps_config);
216 	QDF_STATUS (*lo_start)(struct wlan_objmgr_psoc *psoc,
217 		struct p2p_lo_start *lo_start);
218 	QDF_STATUS (*lo_stop)(struct wlan_objmgr_psoc *psoc,
219 		uint32_t vdev_id);
220 	QDF_STATUS (*set_noa)(struct wlan_objmgr_psoc *psoc,
221 		uint32_t vdev_id, bool disable_noa);
222 	QDF_STATUS (*reg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc,
223 			void *arg);
224 	QDF_STATUS (*reg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc,
225 			void *arg);
226 	QDF_STATUS (*unreg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc,
227 			void *arg);
228 	QDF_STATUS (*unreg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc,
229 			void *arg);
230 };
231 #endif
232 
233 #ifdef WLAN_ATF_ENABLE
234 
235 /**
236  * struct wlan_lmac_if_atf_tx_ops - ATF specific tx function pointers
237  * @atf_update_peer_txtoken:      Update peer Tx token
238  * @atf_set_enable_disable:       Set atf enable/disable
239  * @atf_tokens_used:              Get used atf tokens
240  * @atf_get_unused_txtoken:       Get unused atf tokens
241  * @atf_peer_resume:              Resume peer
242  * @atf_tokens_unassigned:        Set unassigned atf tockens
243  * @atf_capable_peer:             Set atf state change
244  * @atf_airtime_estimate:         Get estimated airtime
245  * @atf_debug_peerstate:          Get peer state
246  * @atf_enable_disable:           Set atf peer stats enable/disable
247  * @atf_ssid_sched_policy:        Set ssid schedule policy
248  * @atf_set:                      Set atf
249  * @atf_set_grouping:             Set atf grouping
250  * @atf_send_peer_request:        Send peer requests
251  * @atf_set_bwf:                  Set bandwidth fairness
252  * @atf_peer_buf_held:            Get buffer held
253  * @atf_get_peer_airtime:         Get peer airtime
254  * @atf_get_chbusyper:            Get channel busy
255  * @atf_open:                     ATF open
256  * @atf_register_event_handler    ATF register wmi event handlers
257  * @atf_unregister_event_handler  ATF unregister wmi event handlers
258  */
259 struct wlan_lmac_if_atf_tx_ops {
260 	void (*atf_update_peer_txtoken)(struct wlan_objmgr_pdev *pdev,
261 					struct wlan_objmgr_peer *peer,
262 					struct atf_stats *stats);
263 	void (*atf_set_enable_disable)(struct wlan_objmgr_pdev *pdev,
264 				       uint8_t value);
265 	uint8_t (*atf_tokens_used)(struct wlan_objmgr_pdev *pdev,
266 				   struct wlan_objmgr_peer *peer);
267 	void (*atf_get_unused_txtoken)(struct wlan_objmgr_pdev *pdev,
268 				       struct wlan_objmgr_peer *peer,
269 				       int *unused_token);
270 	void (*atf_peer_resume)(struct wlan_objmgr_pdev *pdev,
271 				struct wlan_objmgr_peer *peer);
272 	void (*atf_tokens_unassigned)(struct wlan_objmgr_pdev *pdev,
273 				      uint32_t tokens_unassigned);
274 	void (*atf_capable_peer)(struct wlan_objmgr_pdev *pdev,
275 				 struct wlan_objmgr_peer *peer,
276 				 uint8_t val, uint8_t atfstate_change);
277 	uint32_t (*atf_airtime_estimate)(struct wlan_objmgr_pdev *pdev,
278 					 struct wlan_objmgr_peer *peer,
279 					 uint32_t tput,
280 					 uint32_t *possible_tput);
281 	uint32_t (*atf_debug_peerstate)(struct wlan_objmgr_pdev *pdev,
282 					struct wlan_objmgr_peer *peer);
283 
284 	int32_t (*atf_enable_disable)(struct wlan_objmgr_vdev *vdev,
285 				      uint8_t value);
286 	int32_t (*atf_ssid_sched_policy)(struct wlan_objmgr_vdev *vdev,
287 					 uint8_t value);
288 	int32_t (*atf_set)(struct wlan_objmgr_pdev *pdev,
289 			   struct pdev_atf_req *atf_req,
290 			   uint8_t atf_tput_based);
291 	int32_t (*atf_set_grouping)(struct wlan_objmgr_pdev *pdev,
292 				    struct pdev_atf_ssid_group_req *atf_grp_req,
293 				    uint8_t atf_tput_based);
294 	int32_t (*atf_send_peer_request)(struct wlan_objmgr_pdev *pdev,
295 					 struct pdev_atf_peer_ext_request *atfr,
296 					 uint8_t atf_tput_based);
297 	int32_t (*atf_set_bwf)(struct wlan_objmgr_pdev *pdev,
298 			       struct pdev_bwf_req *bwf_req);
299 	uint32_t (*atf_peer_buf_held)(struct wlan_objmgr_peer *peer);
300 	uint32_t (*atf_get_peer_airtime)(struct wlan_objmgr_peer *peer);
301 	uint32_t (*atf_get_chbusyper)(struct wlan_objmgr_pdev *pdev);
302 	void (*atf_open)(struct wlan_objmgr_psoc *psoc);
303 	void (*atf_register_event_handler)(struct wlan_objmgr_psoc *psoc);
304 	void (*atf_unregister_event_handler)(struct wlan_objmgr_psoc *psoc);
305 };
306 #endif
307 
308 #ifdef WLAN_SUPPORT_FILS
309 /**
310  * struct wlan_lmac_if_fd_tx_ops - FILS Discovery specific Tx function pointers
311  * @fd_vdev_config_fils:         Enable and configure FILS Discovery
312  * @fd_register_event_handler:   Register swfda WMI event handler
313  * @fd_unregister_event_handler: Un-register swfda WMI event handler
314  */
315 struct wlan_lmac_if_fd_tx_ops {
316 	QDF_STATUS (*fd_vdev_config_fils)(struct wlan_objmgr_vdev *vdev,
317 					  uint32_t fd_period);
318 	void (*fd_register_event_handler)(struct wlan_objmgr_psoc *psoc);
319 	void (*fd_unregister_event_handler)(struct wlan_objmgr_psoc *psoc);
320 };
321 #endif
322 
323 #ifdef WLAN_SA_API_ENABLE
324 
325 /**
326  * struct wlan_lmac_if_sa_api_tx_ops - SA API specific tx function pointers
327  */
328 
329 struct wlan_lmac_if_sa_api_tx_ops {
330 	void (*sa_api_register_event_handler)(struct wlan_objmgr_psoc *psoc);
331 	void (*sa_api_unregister_event_handler)(struct wlan_objmgr_psoc *posc);
332 	void (*sa_api_enable_sa) (struct wlan_objmgr_pdev *pdev,
333 			uint32_t enable, uint32_t mode, uint32_t rx_antenna);
334 	void (*sa_api_set_rx_antenna) (struct wlan_objmgr_pdev *pdev,
335 			uint32_t antenna);
336 	void (*sa_api_set_tx_antenna) (struct wlan_objmgr_peer *peer,
337 			uint32_t *antenna_array);
338 	void (*sa_api_set_tx_default_antenna) (struct wlan_objmgr_pdev *pdev,
339 			u_int32_t antenna);
340 	void (*sa_api_set_training_info) (struct wlan_objmgr_peer *peer,
341 			uint32_t *rate_array,
342 			uint32_t *antenna_array,
343 			uint32_t numpkts);
344 	void (*sa_api_prepare_rateset)(struct wlan_objmgr_pdev *pdev,
345 			struct wlan_objmgr_peer *peer,
346 			struct sa_rate_info *rate_info);
347 	void (*sa_api_set_node_config_ops) (struct wlan_objmgr_peer *peer,
348 			uint32_t cmd_id, uint16_t args_count,
349 			u_int32_t args_arr[]);
350 };
351 
352 #endif
353 
354 #ifdef WLAN_CONV_SPECTRAL_ENABLE
355 struct wmi_spectral_cmd_ops;
356 /**
357  * struct wlan_lmac_if_sptrl_tx_ops - Spectral south bound Tx operations
358  * @sptrlto_spectral_init:          Initialize LMAC/target_if Spectral
359  * @sptrlto_spectral_deinit:        De-initialize LMAC/target_if Spectral
360  * @sptrlto_set_spectral_config:    Set Spectral configuration
361  * @sptrlto_get_spectral_config:    Get Spectral configuration
362  * @sptrlto_start_spectral_scan:    Start Spectral Scan
363  * @sptrlto_stop_spectral_scan:     Stop Spectral Scan
364  * @sptrlto_is_spectral_active:     Get whether Spectral is active
365  * @sptrlto_is_spectral_enabled:    Get whether Spectral is enabled
366  * @sptrlto_set_icm_active:         Set whether ICM is active or inactive
367  * @sptrlto_get_icm_active:         Get whether ICM is active or inactive
368  * @sptrlto_get_nominal_nf:         Get Nominal Noise Floor for the current
369  *                                  frequency band
370  * @sptrlto_set_debug_level:        Set Spectral debug level
371  * @sptrlto_get_debug_level:        Get Spectral debug level
372  * @sptrlto_get_chaninfo:           Get channel information
373  * @sptrlto_clear_chaninfo:         Clear channel information
374  * @sptrlto_get_spectral_capinfo:   Get Spectral capability information
375  * @sptrlto_get_spectral_diagstats: Get Spectral diagnostic statistics
376  * @sptrlto_register_netlink_cb: Register Spectral Netlink callbacks
377  * @sptrlto_use_nl_bcast: Get whether to use Netlink broadcast/unicast
378  * @sptrlto_deregister_netlink_cb: De-register Spectral Netlink callbacks
379  * @sptrlto_process_spectral_report: Process spectral report
380  **/
381 struct wlan_lmac_if_sptrl_tx_ops {
382 	void *(*sptrlto_pdev_spectral_init)(struct wlan_objmgr_pdev *pdev);
383 	void (*sptrlto_pdev_spectral_deinit)(struct wlan_objmgr_pdev *pdev);
384 	int (*sptrlto_set_spectral_config)(struct wlan_objmgr_pdev *pdev,
385 					   const u_int32_t threshtype,
386 					   const u_int32_t value);
387 	void (*sptrlto_get_spectral_config)(struct wlan_objmgr_pdev *pdev,
388 					    struct spectral_config *sptrl_config
389 					    );
390 	int (*sptrlto_start_spectral_scan)(struct wlan_objmgr_pdev *pdev);
391 	void (*sptrlto_stop_spectral_scan)(struct wlan_objmgr_pdev *pdev);
392 	bool (*sptrlto_is_spectral_active)(struct wlan_objmgr_pdev *pdev);
393 	bool (*sptrlto_is_spectral_enabled)(struct wlan_objmgr_pdev *pdev);
394 	int (*sptrlto_set_debug_level)(struct wlan_objmgr_pdev *pdev,
395 				       u_int32_t debug_level);
396 	u_int32_t (*sptrlto_get_debug_level)(struct wlan_objmgr_pdev *pdev);
397 	void (*sptrlto_get_spectral_capinfo)(struct wlan_objmgr_pdev *pdev,
398 					     void *outdata);
399 	void (*sptrlto_get_spectral_diagstats)(struct wlan_objmgr_pdev *pdev,
400 					       void *outdata);
401 	void (*sptrlto_register_wmi_spectral_cmd_ops)(
402 		struct wlan_objmgr_pdev *pdev,
403 		struct wmi_spectral_cmd_ops *cmd_ops);
404 	void (*sptrlto_register_netlink_cb)(
405 		struct wlan_objmgr_pdev *pdev,
406 		struct spectral_nl_cb *nl_cb);
407 	bool (*sptrlto_use_nl_bcast)(struct wlan_objmgr_pdev *pdev);
408 	void (*sptrlto_deregister_netlink_cb)(struct wlan_objmgr_pdev *pdev);
409 	int (*sptrlto_process_spectral_report)(
410 		struct wlan_objmgr_pdev *pdev,
411 		void *payload);
412 };
413 #endif /* WLAN_CONV_SPECTRAL_ENABLE */
414 
415 #ifdef WIFI_POS_CONVERGED
416 /*
417  * struct wlan_lmac_if_wifi_pos_tx_ops - structure of firmware tx function
418  * pointers for wifi_pos component
419  * @data_req_tx: function pointer to send wifi_pos req to firmware
420  */
421 struct wlan_lmac_if_wifi_pos_tx_ops {
422 	QDF_STATUS (*data_req_tx)(struct wlan_objmgr_psoc *psoc,
423 				  struct oem_data_req *req);
424 };
425 #endif
426 
427 #ifdef DIRECT_BUF_RX_ENABLE
428 /**
429  * struct wlan_lmac_if_direct_buf_rx_tx_ops - structire of direct buf rx txops
430  * @direct_buf_rx_module_register: Registration API callback for modules
431  *                                 to register with direct buf rx framework
432  * @direct_buf_rx_register_events: Registration of WMI events for direct
433  *                                 buffer rx framework
434  * @direct_buf_rx_unregister_events: Unregistraton of WMI events for direct
435  *                                   buffer rx framework
436  */
437 struct wlan_lmac_if_direct_buf_rx_tx_ops {
438 	QDF_STATUS (*direct_buf_rx_module_register)(
439 			struct wlan_objmgr_pdev *pdev, uint8_t mod_id,
440 			int (*dbr_rsp_handler)(struct wlan_objmgr_pdev *pdev,
441 				struct direct_buf_rx_data *dbr_data));
442 	QDF_STATUS (*direct_buf_rx_register_events)(
443 			struct wlan_objmgr_psoc *psoc);
444 	QDF_STATUS (*direct_buf_rx_unregister_events)(
445 			struct wlan_objmgr_psoc *psoc);
446 };
447 #endif
448 
449 #ifdef CONVERGED_TDLS_ENABLE
450 /* fwd declarations for tdls tx ops */
451 struct tdls_info;
452 struct tdls_peer_update_state;
453 struct tdls_channel_switch_params;
454 struct sta_uapsd_trig_params;
455 /**
456  * struct wlan_lmac_if_tdls_tx_ops - south bound tx function pointers for tdls
457  * @update_fw_state: function to update tdls firmware state
458  * @update_peer_state: function to update tdls peer state
459  * @set_offchan_mode: function to set tdls offchannel mode
460  * @tdls_reg_ev_handler: function to register for tdls events
461  * @tdls_unreg_ev_handler: function to unregister for tdls events
462  * @tdls_set_uapsd: function to set upasdt trigger command
463  *
464  * tdls module uses these functions to avail ol/da lmac services
465  */
466 struct wlan_lmac_if_tdls_tx_ops {
467 	QDF_STATUS (*update_fw_state)(struct wlan_objmgr_psoc *psoc,
468 				     struct tdls_info *req);
469 	QDF_STATUS (*update_peer_state)(struct wlan_objmgr_psoc *psoc,
470 				       struct tdls_peer_update_state *param);
471 	QDF_STATUS (*set_offchan_mode)(struct wlan_objmgr_psoc *psoc,
472 				      struct tdls_channel_switch_params *param);
473 	QDF_STATUS (*tdls_reg_ev_handler)(struct wlan_objmgr_psoc *psoc,
474 					 void *arg);
475 	QDF_STATUS (*tdls_unreg_ev_handler) (struct wlan_objmgr_psoc *psoc,
476 					    void *arg);
477 	QDF_STATUS (*tdls_set_uapsd)(struct wlan_objmgr_psoc *psoc,
478 				    struct sta_uapsd_trig_params *params);
479 };
480 
481 /* fwd declarations for tdls rx ops */
482 struct tdls_event_info;
483 /**
484  * struct wlan_lmac_if_tdls_rx_ops  - south bound rx function pointers for tdls
485  * @tdls_ev_handler: function to handler tdls event
486  *
487  * lmac modules uses this API to post scan events to tdls module
488  */
489 struct wlan_lmac_if_tdls_rx_ops {
490 	QDF_STATUS (*tdls_ev_handler)(struct wlan_objmgr_psoc *psoc,
491 				     struct tdls_event_info *info);
492 };
493 #endif
494 
495 #ifdef WLAN_FEATURE_NAN_CONVERGENCE
496 /**
497  * struct wlan_lmac_if_nan_tx_ops - structure of firwware tx function
498  * pointers for nan component
499  * @data_req_tx: function pointer to send nan req to firmware
500  */
501 struct wlan_lmac_if_nan_tx_ops {
502 	QDF_STATUS (*nan_req_tx)(void *req, uint32_t req_id);
503 };
504 #endif
505 
506 /**
507  * struct wlan_lmac_if_ftm_rx_ops  - south bound rx function pointers for FTM
508  * @ftm_ev_handler: function to handle FTM event
509  *
510  * lmac modules uses this API to post FTM events to FTM module
511  */
512 struct wlan_lmac_if_ftm_rx_ops {
513 	QDF_STATUS (*ftm_ev_handler)(struct wlan_objmgr_pdev *pdev,
514 					uint8_t *event_buf, uint32_t len);
515 };
516 
517 /**
518  * struct wlan_lmac_reg_if_tx_ops - structure of tx function
519  *                  pointers for regulatory component
520  * @register_master_handler: pointer to register event handler
521  * @unregister_master_handler:  pointer to unregister event handler
522  * @register_11d_new_cc_handler: pointer to register 11d cc event handler
523  * @unregister_11d_new_cc_handler:  pointer to unregister 11d cc event handler
524  */
525 struct wlan_lmac_if_reg_tx_ops {
526 	QDF_STATUS (*register_master_handler)(struct wlan_objmgr_psoc *psoc,
527 					      void *arg);
528 	QDF_STATUS (*unregister_master_handler)(struct wlan_objmgr_psoc *psoc,
529 						void *arg);
530 
531 	QDF_STATUS (*set_country_code)(struct wlan_objmgr_psoc *psoc,
532 						void *arg);
533 	QDF_STATUS (*fill_umac_legacy_chanlist)(struct wlan_objmgr_pdev *pdev,
534 			struct regulatory_channel *cur_chan_list);
535 	QDF_STATUS (*register_11d_new_cc_handler)(
536 			struct wlan_objmgr_psoc *psoc, void *arg);
537 	QDF_STATUS (*unregister_11d_new_cc_handler)(
538 			struct wlan_objmgr_psoc *psoc, void *arg);
539 	QDF_STATUS (*start_11d_scan)(struct wlan_objmgr_psoc *psoc,
540 			struct reg_start_11d_scan_req *reg_start_11d_scan_req);
541 	QDF_STATUS (*stop_11d_scan)(struct wlan_objmgr_psoc *psoc,
542 			struct reg_stop_11d_scan_req *reg_stop_11d_scan_req);
543 	bool (*is_there_serv_ready_extn)(struct wlan_objmgr_psoc *psoc);
544 	QDF_STATUS (*set_user_country_code)(struct wlan_objmgr_psoc *psoc,
545 					    uint8_t pdev_id,
546 					    struct cc_regdmn_s *rd);
547 	QDF_STATUS (*set_country_failed)(struct wlan_objmgr_pdev *pdev);
548 	QDF_STATUS (*register_ch_avoid_event_handler)(
549 			struct wlan_objmgr_psoc *psoc, void *arg);
550 	QDF_STATUS (*unregister_ch_avoid_event_handler)(
551 			struct wlan_objmgr_psoc *psoc, void *arg);
552 };
553 
554 /**
555  * struct wlan_lmac_if_dfs_tx_ops - Function pointer to call offload/lmac
556  *                                  functions from DFS module.
557  * @dfs_enable:                         Enable DFS.
558  * @dfs_get_caps:                       Get DFS capabilities.
559  * @dfs_disable:                        Disable DFS
560  * @dfs_gettsf64:                       Get tsf64 value.
561  * @dfs_set_use_cac_prssi:              Set use_cac_prssi value.
562  * @dfs_get_dfsdomain:                  Get DFS domain.
563  * @dfs_is_countryCode_CHINA:           Check is country code CHINA.
564  * @dfs_get_thresholds:                 Get thresholds.
565  * @dfs_get_ext_busy:                   Get ext_busy.
566  * @dfs_get_target_type:                Get target type.
567  * @dfs_is_countryCode_KOREA_ROC3:      Check is county code Korea.
568  * @dfs_is_mode_offload:                Check the radio for offload.
569  * @dfs_get_ah_devid:                   Get ah devid.
570  * @dfs_get_phymode_info:               Get phymode info.
571  * @dfs_reg_ev_handler:                 Register dfs event handler.
572  * @dfs_process_emulate_bang_radar_cmd: Process emulate bang radar test command.
573  * @dfs_is_pdev_5ghz:                   Check if the given pdev is 5GHz.
574  * @dfs_set_phyerr_filter_offload:      Config phyerr filter offload.
575  * @dfs_send_offload_enable_cmd:        Send dfs offload enable command to fw.
576  * @dfs_host_dfs_check_support:         To check Host DFS confirmation feature
577  *                                      support.
578  * @dfs_send_avg_radar_params_to_fw:    Send average radar parameters to FW.
579  */
580 
581 struct wlan_lmac_if_dfs_tx_ops {
582 	QDF_STATUS (*dfs_enable)(struct wlan_objmgr_pdev *pdev,
583 			int *is_fastclk,
584 			struct wlan_dfs_phyerr_param *param,
585 			uint32_t dfsdomain);
586 	QDF_STATUS (*dfs_get_caps)(struct wlan_objmgr_pdev *pdev,
587 			struct wlan_dfs_caps *dfs_caps);
588 	QDF_STATUS (*dfs_disable)(struct wlan_objmgr_pdev *pdev,
589 			int no_cac);
590 	QDF_STATUS (*dfs_gettsf64)(struct wlan_objmgr_pdev *pdev,
591 			uint64_t *tsf64);
592 	QDF_STATUS (*dfs_set_use_cac_prssi)(struct wlan_objmgr_pdev *pdev);
593 	QDF_STATUS (*dfs_get_thresholds)(struct wlan_objmgr_pdev *pdev,
594 			struct wlan_dfs_phyerr_param *param);
595 	QDF_STATUS (*dfs_get_ext_busy)(struct wlan_objmgr_pdev *pdev,
596 			int *dfs_ext_chan_busy);
597 	QDF_STATUS (*dfs_get_target_type)(struct wlan_objmgr_pdev *pdev,
598 			uint32_t *target_type);
599 	QDF_STATUS (*dfs_is_mode_offload)(struct wlan_objmgr_pdev *pdev,
600 			bool *is_offload);
601 	QDF_STATUS (*dfs_get_ah_devid)(struct wlan_objmgr_pdev *pdev,
602 			uint16_t *devid);
603 	QDF_STATUS (*dfs_get_phymode_info)(struct wlan_objmgr_pdev *pdev,
604 			uint32_t chan_mode,
605 			uint32_t *mode_info,
606 			bool is_2gvht_en);
607 	QDF_STATUS (*dfs_reg_ev_handler)(struct wlan_objmgr_psoc *psoc,
608 			bool dfs_offload);
609 	QDF_STATUS (*dfs_process_emulate_bang_radar_cmd)(
610 			struct wlan_objmgr_pdev *pdev,
611 			struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test);
612 	QDF_STATUS (*dfs_is_pdev_5ghz)(struct wlan_objmgr_pdev *pdev,
613 			bool *is_5ghz);
614 	QDF_STATUS (*dfs_set_phyerr_filter_offload)(
615 			struct wlan_objmgr_pdev *pdev,
616 			bool dfs_phyerr_filter_offload);
617 	QDF_STATUS (*dfs_is_tgt_offload)(struct wlan_objmgr_psoc *psoc,
618 			bool *is_tgt_offload);
619 	QDF_STATUS (*dfs_send_offload_enable_cmd)(
620 			struct wlan_objmgr_pdev *pdev,
621 			bool enable);
622 	QDF_STATUS (*dfs_host_dfs_check_support)(struct wlan_objmgr_pdev *pdev,
623 						 bool *enabled);
624 	QDF_STATUS (*dfs_send_avg_radar_params_to_fw)(
625 			struct wlan_objmgr_pdev *pdev,
626 			struct dfs_radar_found_params *params);
627 };
628 
629 /**
630  * struct wlan_lmac_if_target_tx_ops - Function pointers to call target
631  *                                     functions from other modules.
632  * @tgt_is_tgt_type_ar900b:  To check AR900B target type.
633  * @tgt_is_tgt_type_ipq4019: To check IPQ4019 target type.
634  * @tgt_is_tgt_type_qca9984: To check QCA9984 target type.
635  * @tgt_is_tgt_type_qca9888: To check QCA9888 target type.
636  * @tgt_get_tgt_type:        Get target type
637  * @tgt_get_tgt_version:     Get target version
638  * @tgt_get_tgt_revision:    Get target revision
639  */
640 struct wlan_lmac_if_target_tx_ops {
641 	bool (*tgt_is_tgt_type_ar900b)(uint32_t);
642 	bool (*tgt_is_tgt_type_ipq4019)(uint32_t);
643 	bool (*tgt_is_tgt_type_qca9984)(uint32_t);
644 	bool (*tgt_is_tgt_type_qca9888)(uint32_t);
645 	uint32_t (*tgt_get_tgt_type)(struct wlan_objmgr_psoc *psoc);
646 	uint32_t (*tgt_get_tgt_version)(struct wlan_objmgr_psoc *psoc);
647 	uint32_t (*tgt_get_tgt_revision)(struct wlan_objmgr_psoc *psoc);
648 };
649 
650 #ifdef WLAN_OFFCHAN_TXRX_ENABLE
651 /**
652  * struct wlan_lmac_if_offchan_txrx_ops - Function pointers to check target
653  *                                     capabilities related to offchan txrx.
654  * @offchan_data_tid_support: To check if target supports separate tid for
655  *                                     offchan data tx.
656  */
657 struct wlan_lmac_if_offchan_txrx_ops {
658 	bool (*offchan_data_tid_support)(struct wlan_objmgr_pdev *pdev);
659 };
660 #endif
661 
662 #ifdef WLAN_SUPPORT_GREEN_AP
663 struct wlan_green_ap_egap_params;
664 /**
665  * struct wlan_lmac_if_green_ap_tx_ops - structure of tx function
666  *                  pointers for green ap component
667  * @enable_egap: function pointer to send enable egap indication to fw
668  * @ps_on_off_send:  function pointer to send enable/disable green ap ps to fw
669  */
670 struct wlan_lmac_if_green_ap_tx_ops {
671 	QDF_STATUS (*enable_egap)(struct wlan_objmgr_pdev *pdev,
672 				struct wlan_green_ap_egap_params *egap_params);
673 	QDF_STATUS (*ps_on_off_send)(struct wlan_objmgr_pdev *pdev,
674 				     bool value, uint8_t pdev_id);
675 	QDF_STATUS (*reset_dev)(struct wlan_objmgr_pdev *pdev);
676 	uint16_t (*get_current_channel)(struct wlan_objmgr_pdev *pdev);
677 	uint64_t (*get_current_channel_flags)(struct wlan_objmgr_pdev *pdev);
678 	QDF_STATUS (*get_capab)(struct  wlan_objmgr_pdev *pdev);
679 };
680 #endif
681 
682 /**
683  * struct wlan_lmac_if_tx_ops - south bound tx function pointers
684  * @mgmt_txrx_tx_ops: mgmt txrx tx ops
685  * @scan: scan tx ops
686  * @dfs_tx_ops: dfs tx ops.
687  * @green_ap_tx_ops: green_ap tx_ops
688  * @cp_stats_tx_ops: cp stats tx_ops
689  *
690  * Callback function tabled to be registered with umac.
691  * umac will use the functional table to send events/frames to lmac/wmi
692  */
693 
694 struct wlan_lmac_if_tx_ops {
695 	/* Components to declare function pointers required by the module
696 	 * in component specific structure.
697 	 * The component specific ops structure can be declared in this file
698 	 * only
699 	 */
700 	 struct wlan_lmac_if_mgmt_txrx_tx_ops mgmt_txrx_tx_ops;
701 	 struct wlan_lmac_if_scan_tx_ops scan;
702 #ifdef CONVERGED_P2P_ENABLE
703 	struct wlan_lmac_if_p2p_tx_ops p2p;
704 #endif
705 #ifdef QCA_SUPPORT_SON
706 	struct wlan_lmac_if_son_tx_ops son_tx_ops;
707 #endif
708 
709 #ifdef WLAN_ATF_ENABLE
710 	struct wlan_lmac_if_atf_tx_ops atf_tx_ops;
711 #endif
712 #ifdef QCA_SUPPORT_CP_STATS
713 	struct wlan_lmac_if_cp_stats_tx_ops cp_stats_tx_ops;
714 #endif
715 #ifdef WLAN_SA_API_ENABLE
716 	struct wlan_lmac_if_sa_api_tx_ops sa_api_tx_ops;
717 #endif
718 
719 #ifdef WLAN_CONV_SPECTRAL_ENABLE
720 	struct wlan_lmac_if_sptrl_tx_ops sptrl_tx_ops;
721 #endif
722 
723 #ifdef WLAN_CONV_CRYPTO_SUPPORTED
724 	struct wlan_lmac_if_crypto_tx_ops crypto_tx_ops;
725 #endif
726 
727 #ifdef WIFI_POS_CONVERGED
728 	struct wlan_lmac_if_wifi_pos_tx_ops wifi_pos_tx_ops;
729 #endif
730 #ifdef WLAN_FEATURE_NAN_CONVERGENCE
731 	struct wlan_lmac_if_nan_tx_ops nan_tx_ops;
732 #endif
733 	struct wlan_lmac_if_reg_tx_ops reg_ops;
734 	struct wlan_lmac_if_dfs_tx_ops dfs_tx_ops;
735 
736 #ifdef CONVERGED_TDLS_ENABLE
737 	struct wlan_lmac_if_tdls_tx_ops tdls_tx_ops;
738 #endif
739 
740 #ifdef WLAN_SUPPORT_FILS
741 	struct wlan_lmac_if_fd_tx_ops fd_tx_ops;
742 #endif
743 	 struct wlan_lmac_if_mlme_tx_ops mops;
744 	 struct wlan_lmac_if_target_tx_ops target_tx_ops;
745 
746 #ifdef WLAN_OFFCHAN_TXRX_ENABLE
747 	struct wlan_lmac_if_offchan_txrx_ops offchan_txrx_ops;
748 #endif
749 
750 #ifdef DIRECT_BUF_RX_ENABLE
751 	struct wlan_lmac_if_direct_buf_rx_tx_ops dbr_tx_ops;
752 #endif
753 
754 #ifdef WLAN_SUPPORT_GREEN_AP
755 	 struct wlan_lmac_if_green_ap_tx_ops green_ap_tx_ops;
756 #endif
757 
758 	struct wlan_lmac_if_ftm_tx_ops ftm_tx_ops;
759 };
760 
761 /**
762  * struct wlan_lmac_if_mgmt_txrx_rx_ops - structure of rx function
763  *                  pointers for mgmt txrx component
764  * @mgmt_tx_completion_handler: function pointer to give tx completions
765  *                              to mgmt txrx comp.
766  * @mgmt_rx_frame_handler: function pointer to give rx frame to mgmt txrx comp.
767  * @mgmt_txrx_get_nbuf_from_desc_id: function pointer to get nbuf from desc id
768  * @mgmt_txrx_get_peer_from_desc_id: function pointer to get peer from desc id
769  * @mgmt_txrx_get_vdev_id_from_desc_id: function pointer to get vdev id from
770  *                                      desc id
771  */
772 struct wlan_lmac_if_mgmt_txrx_rx_ops {
773 	QDF_STATUS (*mgmt_tx_completion_handler)(
774 			struct wlan_objmgr_pdev *pdev,
775 			uint32_t desc_id, uint32_t status,
776 			void *tx_compl_params);
777 	QDF_STATUS (*mgmt_rx_frame_handler)(
778 			struct wlan_objmgr_psoc *psoc,
779 			qdf_nbuf_t buf,
780 			struct mgmt_rx_event_params *mgmt_rx_params);
781 	qdf_nbuf_t (*mgmt_txrx_get_nbuf_from_desc_id)(
782 			struct wlan_objmgr_pdev *pdev,
783 			uint32_t desc_id);
784 	struct wlan_objmgr_peer * (*mgmt_txrx_get_peer_from_desc_id)(
785 			struct wlan_objmgr_pdev *pdev, uint32_t desc_id);
786 	uint8_t (*mgmt_txrx_get_vdev_id_from_desc_id)(
787 			struct wlan_objmgr_pdev *pdev,
788 			uint32_t desc_id);
789 	uint32_t (*mgmt_txrx_get_free_desc_pool_count)(
790 			struct wlan_objmgr_pdev *pdev);
791 };
792 
793 struct wlan_lmac_if_reg_rx_ops {
794 	QDF_STATUS (*master_list_handler)(struct cur_regulatory_info
795 					  *reg_info);
796 	QDF_STATUS (*reg_11d_new_cc_handler)(struct wlan_objmgr_psoc *psoc,
797 			struct reg_11d_new_country *reg_11d_new_cc);
798 	QDF_STATUS (*reg_set_regdb_offloaded)(struct wlan_objmgr_psoc *psoc,
799 			bool val);
800 	QDF_STATUS (*reg_set_11d_offloaded)(struct wlan_objmgr_psoc *psoc,
801 			bool val);
802 	QDF_STATUS (*get_dfs_region)(struct wlan_objmgr_pdev *pdev,
803 			enum dfs_reg *dfs_reg);
804 	QDF_STATUS (*reg_ch_avoid_event_handler)(struct wlan_objmgr_psoc *psoc,
805 			struct ch_avoid_ind_type *ch_avoid_ind);
806 	uint32_t (*reg_freq_to_chan)(struct wlan_objmgr_pdev *pdev,
807 			uint32_t freq);
808 	QDF_STATUS (*reg_set_chan_144)(struct wlan_objmgr_pdev *pdev,
809 			bool enable_ch_144);
810 	bool (*reg_get_chan_144)(struct wlan_objmgr_pdev *pdev);
811 	QDF_STATUS (*reg_program_default_cc)(struct wlan_objmgr_pdev *pdev,
812 			uint16_t regdmn);
813 	QDF_STATUS (*reg_get_current_regdomain)(struct wlan_objmgr_pdev *pdev,
814 			struct cur_regdmn_info *cur_regdmn);
815 };
816 
817 #ifdef CONVERGED_P2P_ENABLE
818 
819 /* forward declarations for p2p rx ops */
820 struct p2p_noa_info;
821 struct p2p_lo_event;
822 
823 /**
824  * struct wlan_lmac_if_p2p_rx_ops - structure of rx function pointers
825  * for P2P component
826  * @lo_ev_handler:    function pointer to give listen offload event
827  * @noa_ev_handler:   function pointer to give noa event
828  */
829 struct wlan_lmac_if_p2p_rx_ops {
830 	QDF_STATUS (*lo_ev_handler)(struct wlan_objmgr_psoc *psoc,
831 		struct p2p_lo_event *event_info);
832 	QDF_STATUS (*noa_ev_handler)(struct wlan_objmgr_psoc *psoc,
833 		struct p2p_noa_info *event_info);
834 };
835 #endif
836 
837 #ifdef WLAN_ATF_ENABLE
838 
839 /**
840  * struct wlan_lmac_if_atf_rx_ops - ATF south bound rx function pointers
841  * @atf_get_atf_commit:                Get ATF commit state
842  * @atf_get_fmcap:                     Get firmware capability for ATF
843  * @atf_get_obss_scale:                Get OBSS scale
844  * @atf_get_mode:                      Get mode of ATF
845  * @atf_get_msdu_desc:                 Get msdu desc for ATF
846  * @atf_get_max_vdevs:                 Get maximum vdevs for a Radio
847  * @atf_get_peers:                     Get number of peers for a radio
848  * @atf_get_tput_based:                Get throughput based enabled/disabled
849  * @atf_get_logging:                   Get logging enabled/disabled
850  * @atf_get_txbuf_share:               Get TxBuff share state
851  * @atf_get_txbuf_max:                 Get TxBuff MAX number
852  * @atf_get_txbuf_min:                 Get TxBuff MIN number
853  * @atf_get_ssidgroup:                 Get ssid group state
854  * @atf_get_tx_block_count:            Get tx block count
855  * @atf_get_peer_blk_txtraffic:        Get peer tx traffic block state
856  * @atf_get_vdev_blk_txtraffic:        Get vdev tx traffic block state
857  * @atf_get_sched:                     Get ATF scheduled policy
858  * @atf_get_tx_tokens:                 Get Tx tokens
859  * @atf_get_shadow_tx_tokens:          Get shadow tx tokens
860  * @atf_get_tx_tokens_common:          Get common tx tokens
861  * @atf_get_shadow_alloted_tx_tokens:  Get shadow alloted tx tokens
862  * @atf_get_peer_stats:                Get atf peer stats
863  * @atf_get_token_allocated:           Get atf token allocated
864  * @atf_get_token_utilized:            Get atf token utilized
865  * @atf_set_sched:                     Set ATF schedule policy
866  * @atf_set_fmcap:                     Set firmware capability for ATF
867  * @atf_set_obss_scale:                Set ATF obss scale
868  * @atf_set_mode:                      Set ATF mode
869  * @atf_set_msdu_desc:                 Set msdu desc
870  * @atf_set_max_vdevs:                 Set maximum vdevs number
871  * @atf_set_peers:                     Set peers number
872  * @atf_set_peer_stats:                Set peer stats
873  * @atf_set_vdev_blk_txtraffic:        Set Block/unblock vdev tx traffic
874  * @atf_set_peer_blk_txtraffic:        Set Block/unblock peer tx traffic
875  * @atf_set_tx_block_count:            Set tx block count
876  * @atf_set_token_allocated:           Set atf token allocated
877  * @atf_set_token_utilized:            Set atf token utilized
878  */
879 struct wlan_lmac_if_atf_rx_ops {
880 	uint8_t (*atf_get_atf_commit)(struct wlan_objmgr_pdev *pdev);
881 	uint32_t (*atf_get_fmcap)(struct wlan_objmgr_psoc *psoc);
882 	uint32_t (*atf_get_obss_scale)(struct wlan_objmgr_pdev *pdev);
883 	uint32_t (*atf_get_mode)(struct wlan_objmgr_psoc *psoc);
884 	uint32_t (*atf_get_msdu_desc)(struct wlan_objmgr_psoc *psoc);
885 	uint32_t (*atf_get_max_vdevs)(struct wlan_objmgr_psoc *psoc);
886 	uint32_t (*atf_get_peers)(struct wlan_objmgr_psoc *psoc);
887 	uint32_t (*atf_get_tput_based)(struct wlan_objmgr_pdev *pdev);
888 	uint32_t (*atf_get_logging)(struct wlan_objmgr_pdev *pdev);
889 	uint8_t (*atf_get_txbuf_share)(struct wlan_objmgr_pdev *pdev);
890 	uint16_t (*atf_get_txbuf_max)(struct wlan_objmgr_pdev *pdev);
891 	uint16_t (*atf_get_txbuf_min)(struct wlan_objmgr_pdev *pdev);
892 	uint32_t (*atf_get_ssidgroup)(struct wlan_objmgr_pdev *pdev);
893 	uint32_t (*atf_get_tx_block_count)(struct wlan_objmgr_vdev *vdev);
894 	uint8_t (*atf_get_peer_blk_txtraffic)(struct wlan_objmgr_peer *peer);
895 	uint8_t (*atf_get_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev);
896 	uint32_t (*atf_get_sched)(struct wlan_objmgr_pdev *pdev);
897 	uint32_t (*atf_get_tx_tokens)(struct wlan_objmgr_peer *peer);
898 	uint32_t (*atf_get_shadow_tx_tokens)(struct wlan_objmgr_peer *peer);
899 	uint32_t (*atf_get_txtokens_common)(struct wlan_objmgr_pdev *pdev);
900 	uint32_t (*atf_get_shadow_alloted_tx_tokens)(
901 						struct wlan_objmgr_pdev *pdev);
902 	void (*atf_get_peer_stats)(struct wlan_objmgr_peer *peer,
903 				   struct atf_stats *stats);
904 	uint16_t (*atf_get_token_allocated)(struct wlan_objmgr_peer *peer);
905 	uint16_t (*atf_get_token_utilized)(struct wlan_objmgr_peer *peer);
906 
907 	void (*atf_set_sched)(struct wlan_objmgr_pdev *pdev, uint32_t value);
908 	void (*atf_set_fmcap)(struct wlan_objmgr_psoc *psoc, uint32_t value);
909 	void (*atf_set_obss_scale)(struct wlan_objmgr_pdev *pdev,
910 				   uint32_t value);
911 	void (*atf_set_mode)(struct wlan_objmgr_psoc *psoc, uint8_t value);
912 	void (*atf_set_msdu_desc)(struct wlan_objmgr_psoc *psoc,
913 				  uint32_t value);
914 	void (*atf_set_max_vdevs)(struct wlan_objmgr_psoc *psoc,
915 				  uint32_t value);
916 	void (*atf_set_peers)(struct wlan_objmgr_psoc *psoc, uint32_t value);
917 	void (*atf_set_peer_stats)(struct wlan_objmgr_peer *peer,
918 				   struct atf_stats *stats);
919 	void (*atf_set_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev,
920 					   uint8_t value);
921 	void (*atf_set_peer_blk_txtraffic)(struct wlan_objmgr_peer *peer,
922 					   uint8_t value);
923 	void (*atf_set_tx_block_count)(struct wlan_objmgr_vdev *vdev,
924 					uint32_t count);
925 	void (*atf_set_token_allocated)(struct wlan_objmgr_peer *peer,
926 					uint16_t value);
927 	void (*atf_set_token_utilized)(struct wlan_objmgr_peer *peer,
928 					uint16_t value);
929 };
930 #endif
931 
932 #ifdef WLAN_SUPPORT_FILS
933 /**
934  * struct wlan_lmac_if_fd_rx_ops - FILS Discovery specific Rx function pointers
935  * @fd_is_fils_enable:      FILS enabled or not
936  * @fd_alloc:               Allocate FD buffer
937  * @fd_stop:                Stop and free deferred FD buffer
938  * @fd_free:                Free FD frame buffer
939  * @fd_get_valid_fd_period: Get valid FD period
940  * @fd_swfda_handler:       SWFDA event handler
941  */
942 struct wlan_lmac_if_fd_rx_ops {
943 	uint8_t (*fd_is_fils_enable)(struct wlan_objmgr_vdev *vdev);
944 	void (*fd_alloc)(struct wlan_objmgr_vdev *vdev);
945 	void (*fd_stop)(struct wlan_objmgr_vdev *vdev);
946 	void (*fd_free)(struct wlan_objmgr_vdev *vdev);
947 	uint32_t (*fd_get_valid_fd_period)(struct wlan_objmgr_vdev *vdev,
948 					   uint8_t *is_modified);
949 	QDF_STATUS (*fd_swfda_handler)(struct wlan_objmgr_vdev *vdev);
950 };
951 #endif
952 
953 #ifdef WLAN_SA_API_ENABLE
954 
955 /**
956  * struct wlan_lmac_if_sa_api_rx_ops - SA API south bound rx function pointers
957  */
958 struct wlan_lmac_if_sa_api_rx_ops {
959 	uint32_t (*sa_api_get_sa_supported)(struct wlan_objmgr_psoc *psoc);
960 	uint32_t (*sa_api_get_validate_sw)(struct wlan_objmgr_psoc *psoc);
961 	void (*sa_api_enable_sa)(struct wlan_objmgr_psoc *psoc, uint32_t value);
962 	uint32_t (*sa_api_get_sa_enable)(struct wlan_objmgr_psoc *psoc);
963 	void (*sa_api_peer_assoc_hanldler)(struct wlan_objmgr_pdev *pdev,
964 			struct wlan_objmgr_peer *peer, struct sa_rate_cap *);
965 	uint32_t (*sa_api_update_tx_feedback)(struct wlan_objmgr_pdev *pdev,
966 			struct wlan_objmgr_peer *peer,
967 			struct sa_tx_feedback *feedback);
968 	uint32_t (*sa_api_update_rx_feedback)(struct wlan_objmgr_pdev *pdev,
969 			struct wlan_objmgr_peer *peer,
970 			struct sa_rx_feedback *feedback);
971 	uint32_t (*sa_api_ucfg_set_param)(struct wlan_objmgr_pdev *pdev,
972 			char *val);
973 	uint32_t (*sa_api_ucfg_get_param)(struct wlan_objmgr_pdev *pdev,
974 			char *val);
975 	uint32_t (*sa_api_is_tx_feedback_enabled)
976 			(struct wlan_objmgr_pdev *pdev);
977 	uint32_t (*sa_api_is_rx_feedback_enabled)
978 			(struct wlan_objmgr_pdev *pdev);
979 	uint32_t (*sa_api_convert_rate_2g)(uint32_t rate);
980 	uint32_t (*sa_api_convert_rate_5g)(uint32_t rate);
981 	uint32_t (*sa_api_get_sa_mode)(struct wlan_objmgr_pdev *pdev);
982 	uint32_t (*sa_api_get_beacon_txantenna)(struct wlan_objmgr_pdev *pdev);
983 	uint32_t (*sa_api_cwm_action)(struct wlan_objmgr_pdev *pdev);
984 };
985 #endif
986 
987 #ifdef WLAN_CONV_SPECTRAL_ENABLE
988 /**
989  * struct wlan_lmac_if_sptrl_rx_ops - Spectral south bound Rx operations
990  *
991  * @sptrlro_get_target_handle: Get Spectral handle for target/LMAC private data
992  */
993 struct wlan_lmac_if_sptrl_rx_ops {
994 	void * (*sptrlro_get_target_handle)(struct wlan_objmgr_pdev *pdev);
995 	int16_t (*sptrlro_vdev_get_chan_freq)(struct wlan_objmgr_vdev *vdev);
996 	enum phy_ch_width (*sptrlro_vdev_get_ch_width)(
997 			struct wlan_objmgr_vdev *vdev);
998 	int (*sptrlro_vdev_get_sec20chan_freq_mhz)(
999 			struct wlan_objmgr_vdev *vdev,
1000 			uint16_t *sec20chan_freq);
1001 };
1002 #endif /* WLAN_CONV_SPECTRAL_ENABLE */
1003 
1004 #ifdef WIFI_POS_CONVERGED
1005 /**
1006  * struct wlan_lmac_if_wifi_pos_rx_ops - structure of rx function
1007  * pointers for wifi_pos component
1008  * @oem_rsp_event_rx: callback for WMI_OEM_RESPONSE_EVENTID
1009  */
1010 struct wlan_lmac_if_wifi_pos_rx_ops {
1011 	int (*oem_rsp_event_rx)(struct wlan_objmgr_psoc *psoc,
1012 				struct oem_data_rsp *oem_rsp);
1013 };
1014 #endif
1015 
1016 #ifdef WLAN_FEATURE_NAN_CONVERGENCE
1017 /**
1018  * struct wlan_lmac_if_nan_rx_ops - structure of rx function
1019  * pointers for nan component
1020  * @oem_rsp_event_rx: callback for WMI_OEM_RESPONSE_EVENTID
1021  */
1022 struct wlan_lmac_if_nan_rx_ops {
1023 	QDF_STATUS (*nan_event_rx)(struct scheduler_msg *event);
1024 };
1025 #endif
1026 
1027 /**
1028  * struct wlan_lmac_if_dfs_rx_ops - Function pointers to call dfs functions
1029  *                                  from lmac/offload.
1030  * @dfs_get_radars:                   Calls init radar table functions.
1031  * @dfs_process_phyerr:               Process phyerr.
1032  * @dfs_destroy_object:               Destroys the DFS object.
1033  * @dfs_radar_enable:                 Enables the radar.
1034  * @dfs_is_radar_enabled:             Check if the radar is enabled.
1035  * @dfs_control:                      Used to process ioctls related to DFS.
1036  * @dfs_is_precac_timer_running:      Check whether precac timer is running.
1037  * @dfs_find_vht80_chan_for_precac:   Find VHT80 channel for precac.
1038  * @dfs_cancel_precac_timer:          Cancel the precac timer.
1039  * @dfs_override_precac_timeout:      Override the default precac timeout.
1040  * @dfs_set_precac_enable:            Set precac enable flag.
1041  * @dfs_get_precac_enable:            Get precac enable flag.
1042  * @dfs_get_override_precac_timeout:  Get precac timeout.
1043  * @dfs_set_current_channel:          Set DFS current channel.
1044  * @dfs_process_radar_ind:            Process radar found indication.
1045  * @dfs_dfs_cac_complete_ind:         Process cac complete indication.
1046  * @dfs_stop:                         Clear dfs timers.
1047  * @dfs_process_phyerr_filter_offload:Process radar event.
1048  * @dfs_is_phyerr_filter_offload:     Check whether phyerr filter is offload.
1049  * @dfs_action_on_status:             Trigger the action to be taken based on
1050  *                                    on host dfs status received from fw.
1051  * @dfs_override_status_timeout:      Override the value of host dfs status
1052  *                                    wait timeout.
1053  * @dfs_get_override_status_timeout:  Get the value of host dfs status wait
1054  *                                    timeout.
1055  * @dfs_reset_spoof_test:             Checks if radar detection is enabled.
1056  */
1057 struct wlan_lmac_if_dfs_rx_ops {
1058 	QDF_STATUS (*dfs_get_radars)(struct wlan_objmgr_pdev *pdev);
1059 	QDF_STATUS (*dfs_process_phyerr)(struct wlan_objmgr_pdev *pdev,
1060 			void *buf,
1061 			uint16_t datalen,
1062 			uint8_t r_rssi,
1063 			uint8_t r_ext_rssi,
1064 			uint32_t r_rs_tstamp,
1065 			uint64_t r_fulltsf);
1066 	QDF_STATUS (*dfs_destroy_object)(struct wlan_objmgr_pdev *pdev);
1067 	QDF_STATUS (*dfs_radar_enable)(struct wlan_objmgr_pdev *pdev,
1068 			int no_cac,
1069 			uint32_t opmode);
1070 	void (*dfs_is_radar_enabled)(struct wlan_objmgr_pdev *pdev,
1071 				     int *ignore_dfs);
1072 	QDF_STATUS (*dfs_control)(struct wlan_objmgr_pdev *pdev,
1073 				  u_int id,
1074 				  void *indata,
1075 				  uint32_t insize,
1076 				  void *outdata,
1077 				  uint32_t *outsize,
1078 				  int *error);
1079 	QDF_STATUS (*dfs_is_precac_timer_running)(struct wlan_objmgr_pdev *pdev,
1080 						  bool *is_precac_timer_running
1081 						  );
1082 	QDF_STATUS
1083 	    (*dfs_find_vht80_chan_for_precac)(struct wlan_objmgr_pdev *pdev,
1084 					      uint32_t chan_mode,
1085 					      uint8_t ch_freq_seg1,
1086 					      uint32_t *cfreq1,
1087 					      uint32_t *cfreq2,
1088 					      uint32_t *phy_mode,
1089 					      bool *dfs_set_cfreq2,
1090 					      bool *set_agile);
1091 	QDF_STATUS (*dfs_cancel_precac_timer)(struct wlan_objmgr_pdev *pdev);
1092 	QDF_STATUS (*dfs_override_precac_timeout)(
1093 			struct wlan_objmgr_pdev *pdev,
1094 			int precac_timeout);
1095 	QDF_STATUS (*dfs_set_precac_enable)(struct wlan_objmgr_pdev *pdev,
1096 			uint32_t value);
1097 	QDF_STATUS (*dfs_get_precac_enable)(struct wlan_objmgr_pdev *pdev,
1098 			int *buff);
1099 	QDF_STATUS (*dfs_get_override_precac_timeout)(
1100 			struct wlan_objmgr_pdev *pdev,
1101 			int *precac_timeout);
1102 	QDF_STATUS (*dfs_set_current_channel)(struct wlan_objmgr_pdev *pdev,
1103 			uint16_t ic_freq,
1104 			uint64_t ic_flags,
1105 			uint16_t ic_flagext,
1106 			uint8_t ic_ieee,
1107 			uint8_t ic_vhtop_ch_freq_seg1,
1108 			uint8_t ic_vhtop_ch_freq_seg2);
1109 #ifdef DFS_COMPONENT_ENABLE
1110 	QDF_STATUS (*dfs_process_radar_ind)(struct wlan_objmgr_pdev *pdev,
1111 			struct radar_found_info *radar_found);
1112 	QDF_STATUS (*dfs_dfs_cac_complete_ind)(struct wlan_objmgr_pdev *pdev,
1113 			uint32_t vdev_id);
1114 #endif
1115 	QDF_STATUS (*dfs_stop)(struct wlan_objmgr_pdev *pdev);
1116 	QDF_STATUS (*dfs_process_phyerr_filter_offload)(
1117 			struct wlan_objmgr_pdev *pdev,
1118 			struct radar_event_info *wlan_radar_info);
1119 	QDF_STATUS (*dfs_is_phyerr_filter_offload)(
1120 			struct wlan_objmgr_psoc *psoc,
1121 			bool *is_phyerr_filter_offload);
1122 	QDF_STATUS (*dfs_action_on_status)(struct wlan_objmgr_pdev *pdev,
1123 			u_int32_t *dfs_status_check);
1124 	QDF_STATUS (*dfs_override_status_timeout)(
1125 			struct wlan_objmgr_pdev *pdev,
1126 			int status_timeout);
1127 	QDF_STATUS (*dfs_get_override_status_timeout)(
1128 			struct wlan_objmgr_pdev *pdev,
1129 			int *status_timeout);
1130 	QDF_STATUS (*dfs_reset_spoof_test)(struct wlan_objmgr_pdev *pdev);
1131 };
1132 
1133 struct wlan_lmac_if_mlme_rx_ops {
1134 
1135 	void (*wlan_mlme_scan_start)(struct wlan_objmgr_pdev *pdev);
1136 	void (*wlan_mlme_register_pm_event_handler)(
1137 			struct wlan_objmgr_pdev *pdev,
1138 			uint8_t vdev_id);
1139 	void (*wlan_mlme_unregister_pm_event_handler)(
1140 			struct wlan_objmgr_pdev *pdev,
1141 			uint8_t vdev_id);
1142 	QDF_STATUS (*wlan_mlme_register_vdev_event_handler)(
1143 			struct wlan_objmgr_pdev *pdev,
1144 			uint8_t vdev_id);
1145 	QDF_STATUS (*wlan_mlme_unregister_vdev_event_handler)(
1146 			struct wlan_objmgr_pdev *pdev,
1147 			uint8_t vdev_id);
1148 	int (*wlan_mlme_send_probe_request)(struct wlan_objmgr_pdev *pdev,
1149 			uint8_t vdev_id,
1150 			u_int8_t  *destination,
1151 			u_int8_t  *bssid,
1152 			u_int8_t  *ssid,
1153 			u_int32_t  ssidlen,
1154 			u_int8_t  *ie,
1155 			size_t len);
1156 	int (*wlan_mlme_resmgr_request_bsschan)(struct wlan_objmgr_pdev *pdev);
1157 	int (*wlan_mlme_resmgr_request_offchan)(struct wlan_objmgr_pdev *pdev,
1158 			u_int32_t freq,
1159 			u_int32_t flags,
1160 			u_int32_t estimated_offchannel_time);
1161 	int (*wlan_mlme_resmgr_active)(struct wlan_objmgr_pdev *pdev);
1162 	int (*wlan_mlme_get_cw_inter_found)(struct wlan_objmgr_pdev *pdev);
1163 	int (*wlan_mlme_set_home_channel)(struct wlan_objmgr_pdev *pdev,
1164 			uint8_t vdev_id);
1165 	int (*wlan_mlme_set_channel)(struct wlan_objmgr_pdev *pdev,
1166 			u_int32_t freq,
1167 			u_int32_t flags);
1168 	void (*wlan_mlme_start_record_stats)(struct wlan_objmgr_pdev *pdev);
1169 	void (*wlan_mlme_end_record_stats)(struct wlan_objmgr_pdev *pdev);
1170 	int (*wlan_mlme_get_enh_rpt_ind)(struct wlan_objmgr_pdev *pdev);
1171 	int (*wlan_mlme_pause)(struct wlan_objmgr_pdev *pdev);
1172 	void (*wlan_mlme_unpause)(struct wlan_objmgr_pdev *pdev);
1173 	int (*wlan_mlme_vdev_pause_control)(struct wlan_objmgr_pdev *pdev,
1174 			uint8_t vdev_id);
1175 	int (*wlan_mlme_sta_power_pause)(
1176 			struct wlan_objmgr_pdev *pdev,
1177 			uint8_t vdev_id,
1178 			u_int32_t timeout);
1179 	int (*wlan_mlme_sta_power_unpause)(struct wlan_objmgr_pdev *pdev,
1180 			uint8_t vdev_id);
1181 	int (*wlan_mlme_set_vdev_sleep)(struct wlan_objmgr_pdev *pdev,
1182 			uint8_t vdev_id);
1183 	int (*wlan_mlme_set_vdev_wakeup)(struct wlan_objmgr_pdev *pdev,
1184 			uint8_t vdev_id);
1185 	qdf_time_t (*wlan_mlme_get_traffic_indication_timestamp)(
1186 			struct wlan_objmgr_pdev *pdev);
1187 	int (*wlan_mlme_get_acs_in_progress)(struct wlan_objmgr_pdev *pdev,
1188 			uint8_t vdev_id);
1189 	void (*wlan_mlme_end_scan)(struct wlan_objmgr_pdev *pdev);
1190 };
1191 
1192 #ifdef WLAN_SUPPORT_GREEN_AP
1193 struct wlan_lmac_if_green_ap_rx_ops {
1194 	bool (*is_ps_enabled)(struct wlan_objmgr_pdev *pdev);
1195 	bool (*is_dbg_print_enabled)(struct wlan_objmgr_pdev *pdev);
1196 	QDF_STATUS (*ps_get)(struct wlan_objmgr_pdev *pdev, uint8_t *value);
1197 	QDF_STATUS (*ps_set)(struct wlan_objmgr_pdev *pdev, uint8_t value);
1198 	void (*suspend_handle)(struct wlan_objmgr_pdev *pdev);
1199 };
1200 #endif
1201 
1202 /**
1203  * struct wlan_lmac_if_rx_ops - south bound rx function pointers
1204  * @mgmt_txrx_tx_ops: mgmt txrx rx ops
1205  * @scan: scan rx ops
1206  * @dfs_rx_ops: dfs rx ops.
1207  * @cp_stats_rx_ops: cp stats rx ops
1208  *
1209  * Callback function tabled to be registered with lmac/wmi.
1210  * lmac will use the functional table to send events/frames to umac
1211  */
1212 struct wlan_lmac_if_rx_ops {
1213 	/* Components to declare function pointers required by the module
1214 	 * in component specific structure.
1215 	 * The component specific ops structure can be declared in this file
1216 	 * only
1217 	 */
1218 	 struct wlan_lmac_if_mgmt_txrx_rx_ops mgmt_txrx_rx_ops;
1219 	 struct wlan_lmac_if_scan_rx_ops scan;
1220 #ifdef CONVERGED_P2P_ENABLE
1221 	struct wlan_lmac_if_p2p_rx_ops p2p;
1222 #endif
1223 
1224 #ifdef WLAN_ATF_ENABLE
1225 	struct wlan_lmac_if_atf_rx_ops atf_rx_ops;
1226 #endif
1227 #ifdef QCA_SUPPORT_CP_STATS
1228 	struct wlan_lmac_if_cp_stats_rx_ops cp_stats_rx_ops;
1229 #endif
1230 #ifdef WLAN_SA_API_ENABLE
1231 	struct wlan_lmac_if_sa_api_rx_ops sa_api_rx_ops;
1232 #endif
1233 
1234 #ifdef WLAN_CONV_SPECTRAL_ENABLE
1235 	struct wlan_lmac_if_sptrl_rx_ops sptrl_rx_ops;
1236 #endif
1237 
1238 #ifdef WLAN_CONV_CRYPTO_SUPPORTED
1239 	struct wlan_lmac_if_crypto_rx_ops crypto_rx_ops;
1240 #endif
1241 #ifdef WIFI_POS_CONVERGED
1242 	struct wlan_lmac_if_wifi_pos_rx_ops wifi_pos_rx_ops;
1243 #endif
1244 #ifdef WLAN_FEATURE_NAN_CONVERGENCE
1245 	struct wlan_lmac_if_nan_rx_ops nan_rx_ops;
1246 #endif
1247 	struct wlan_lmac_if_reg_rx_ops reg_rx_ops;
1248 	struct wlan_lmac_if_dfs_rx_ops dfs_rx_ops;
1249 #ifdef CONVERGED_TDLS_ENABLE
1250 	struct wlan_lmac_if_tdls_rx_ops tdls_rx_ops;
1251 #endif
1252 
1253 #ifdef WLAN_SUPPORT_FILS
1254 	struct wlan_lmac_if_fd_rx_ops fd_rx_ops;
1255 #endif
1256 
1257 	struct wlan_lmac_if_mlme_rx_ops mops;
1258 
1259 #ifdef WLAN_SUPPORT_GREEN_AP
1260 	struct wlan_lmac_if_green_ap_rx_ops green_ap_rx_ops;
1261 #endif
1262 
1263 	struct wlan_lmac_if_ftm_rx_ops ftm_rx_ops;
1264 };
1265 
1266 /* Function pointer to call legacy tx_ops registration in OL/WMA.
1267  */
1268 extern QDF_STATUS (*wlan_lmac_if_umac_tx_ops_register)
1269 				(struct wlan_lmac_if_tx_ops *tx_ops);
1270 #endif /* _WLAN_LMAC_IF_DEF_H_ */
1271