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