xref: /wlan-dirver/qca-wifi-host-cmn/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h (revision 06d0b5348967845f004ebe7c2348bf8f467ad2f9)
1 /*
2  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  *
6  * Permission to use, copy, modify, and/or distribute this software for
7  * any purpose with or without fee is hereby granted, provided that the
8  * above copyright notice and this permission notice appear in all
9  * copies.
10  *
11  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
12  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
13  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
14  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
15  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
16  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
17  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
18  * PERFORMANCE OF THIS SOFTWARE.
19  */
20 
21 #ifndef _WLAN_LMAC_IF_DEF_H_
22 #define _WLAN_LMAC_IF_DEF_H_
23 
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 WLAN_SA_API_ENABLE
36 #include "wlan_sa_api_utils_defs.h"
37 #endif
38 #ifdef WLAN_CONV_SPECTRAL_ENABLE
39 #include "wlan_spectral_public_structs.h"
40 #endif
41 #include <reg_services_public_struct.h>
42 
43 #include "wlan_crypto_global_def.h"
44 #include "wifi_pos_public_struct.h"
45 
46 #ifdef WLAN_CFR_ENABLE
47 #include "wlan_cfr_utils_api.h"
48 #endif
49 
50 #include <wlan_dfs_tgt_api.h>
51 #include <wlan_dfs_ioctl.h>
52 
53 #ifdef WLAN_IOT_SIM_SUPPORT
54 #include <wlan_iot_sim_public_structs.h>
55 #endif
56 #include <wlan_mgmt_txrx_rx_reo_public_structs.h>
57 
58 #ifdef IPA_OFFLOAD
59 #include <wlan_ipa_public_struct.h>
60 #endif
61 
62 /* Number of dev type: Direct attach and Offload */
63 #define MAX_DEV_TYPE 2
64 
65 #ifdef WIFI_POS_CONVERGED
66 /* forward declarations */
67 struct oem_data_req;
68 struct oem_data_rsp;
69 #endif /* WIFI_POS_CONVERGED */
70 
71 #ifdef DIRECT_BUF_RX_ENABLE
72 /* forward declarations for direct buf rx */
73 struct direct_buf_rx_data;
74 /* Forward declaration for module_ring_params */
75 struct module_ring_params;
76 /*Forward declaration for dbr_module_config */
77 struct dbr_module_config;
78 #endif
79 
80 #ifdef FEATURE_WLAN_TDLS
81 #include "wlan_tdls_public_structs.h"
82 #endif
83 
84 #include <wlan_vdev_mgr_tgt_if_tx_defs.h>
85 #include <wlan_vdev_mgr_tgt_if_rx_defs.h>
86 
87 #ifdef DCS_INTERFERENCE_DETECTION
88 #include <wlan_dcs_tgt_api.h>
89 #endif
90 
91 #ifdef WLAN_FEATURE_11BE_MLO
92 #include "wlan_mlo_mgr_public_structs.h"
93 #endif
94 #if defined(WLAN_SUPPORT_TWT) && defined(WLAN_TWT_CONV_SUPPORTED)
95 #include "wlan_twt_public_structs.h"
96 #endif
97 
98 #ifdef QCA_SUPPORT_CP_STATS
99 #include <wlan_cp_stats_public_structs.h>
100 
101 #ifdef WLAN_FEATURE_DBAM_CONFIG
102 #include "wlan_coex_public_structs.h"
103 #endif
104 
105 #ifdef WLAN_FEATURE_COAP
106 #include "wlan_coap_public_structs.h"
107 #endif
108 
109 /**
110  * typedef cp_stats_event - Definition of cp stats event
111  * Define stats_event from external cp stats component to cp_stats_event
112  */
113 typedef struct stats_event cp_stats_event;
114 /**
115  * typedef stats_request_type - Definition of stats_req_type enum
116  * Define stats_req_type from external cp stats component to stats_request_type
117  */
118 typedef enum stats_req_type stats_request_type;
119 /**
120  * typedef stats_req_info - Definition of cp stats req info
121  * Define request_info from external cp stats component to stats_req_info
122  */
123 typedef struct request_info stats_req_info;
124 /**
125  * typedef stats_wake_lock - Definition of cp stats wake lock
126  * Define wake_lock_stats from external cp stats component to stats_wake_lock
127  */
128 typedef struct wake_lock_stats stats_wake_lock;
129 
130 /**
131  * typedef struct big_data_stats_event - Definition of big data cp stats
132  * Define big_data_stats_event from external cp stats component to
133  * big_data_stats_event
134  */
135 typedef struct big_data_stats_event stats_big_data_stats_event;
136 
137 /**
138  * struct wlan_lmac_if_cp_stats_tx_ops - defines southbound tx callbacks for
139  * control plane statistics component
140  * @cp_stats_attach: function pointer to register events from FW
141  * @cp_stats_detach: function pointer to unregister events from FW
142  * @cp_stats_legacy_attach: function pointer to register legacy stats events
143  *                          from FW
144  * @cp_stats_legacy_detach: function pointer to unregister legacy stats events
145  *                          from FW
146  * @inc_wake_lock_stats: function pointer to increase wake lock stats
147  * @send_req_stats: function pointer to send request stats command to FW
148  * @send_req_peer_stats: function pointer to send request peer stats command
149  *                       to FW
150  * @set_pdev_stats_update_period: function pointer to set pdev stats update
151  *                                period to FW
152  * @send_req_infra_cp_stats: function pointer to send infra cp stats request
153  *                           command to FW
154  * @send_req_big_data_stats: Function pointer to send big data stats
155  */
156 struct wlan_lmac_if_cp_stats_tx_ops {
157 	QDF_STATUS (*cp_stats_attach)(struct wlan_objmgr_psoc *psoc);
158 	QDF_STATUS (*cp_stats_detach)(struct wlan_objmgr_psoc *posc);
159 	QDF_STATUS (*cp_stats_legacy_attach)(struct wlan_objmgr_psoc *psoc);
160 	QDF_STATUS (*cp_stats_legacy_detach)(struct wlan_objmgr_psoc *psoc);
161 	void (*inc_wake_lock_stats)(uint32_t reason,
162 				    stats_wake_lock *stats,
163 				    uint32_t *unspecified_wake_count);
164 	QDF_STATUS (*send_req_stats)(struct wlan_objmgr_psoc *psoc,
165 				     enum stats_req_type type,
166 				     stats_req_info *req);
167 	QDF_STATUS (*send_req_peer_stats)(struct wlan_objmgr_psoc *psoc,
168 					  stats_req_info *req);
169 	QDF_STATUS (*set_pdev_stats_update_period)(
170 					struct wlan_objmgr_psoc *psoc,
171 					uint8_t pdev_id, uint32_t val);
172 #ifdef WLAN_SUPPORT_INFRA_CTRL_PATH_STATS
173 	QDF_STATUS (*send_req_infra_cp_stats)(
174 					struct wlan_objmgr_psoc *psoc,
175 					struct infra_cp_stats_cmd_info *req);
176 #endif
177 #ifdef WLAN_FEATURE_BIG_DATA_STATS
178 	QDF_STATUS (*send_req_big_data_stats)(
179 					struct wlan_objmgr_psoc *psoc,
180 					stats_req_info *req);
181 #endif
182 };
183 
184 /**
185  * struct wlan_lmac_if_cp_stats_rx_ops - defines southbound rx callbacks for
186  * control plane statistics component
187  * @cp_stats_rx_event_handler:	function pointer to rx FW events
188  * @process_stats_event: function pointer to process stats event
189  */
190 struct wlan_lmac_if_cp_stats_rx_ops {
191 	QDF_STATUS (*cp_stats_rx_event_handler)(struct wlan_objmgr_vdev *vdev);
192 	QDF_STATUS (*process_stats_event)(struct wlan_objmgr_psoc *psoc,
193 					  struct stats_event *ev);
194 #ifdef WLAN_SUPPORT_INFRA_CTRL_PATH_STATS
195 	QDF_STATUS
196 	(*process_infra_stats_event)(struct wlan_objmgr_psoc *psoc,
197 				     struct infra_cp_stats_event *infra_event);
198 #endif /* WLAN_SUPPORT_INFRA_CTRL_PATH_STATS */
199 #ifdef WLAN_FEATURE_BIG_DATA_STATS
200 	QDF_STATUS (*process_big_data_stats_event)(
201 					struct wlan_objmgr_psoc *psoc,
202 					stats_big_data_stats_event *ev);
203 #endif
204 #if defined(WLAN_SUPPORT_TWT) && defined(WLAN_TWT_CONV_SUPPORTED)
205 	QDF_STATUS (*twt_get_session_param_resp)(struct wlan_objmgr_psoc *psoc,
206 					struct twt_session_stats_info *params);
207 #endif
208 };
209 #endif
210 
211 #ifdef DCS_INTERFERENCE_DETECTION
212 /**
213  * struct wlan_target_if_dcs_tx_ops - south bound tx function pointers for dcs
214  * @dcs_attach: function to register event handlers with FW
215  * @dcs_detach: function to de-register event handlers with FW
216  * @dcs_cmd_send: function to send dcs commands to FW
217  */
218 struct wlan_target_if_dcs_tx_ops {
219 	QDF_STATUS (*dcs_attach)(struct wlan_objmgr_psoc *psoc);
220 	QDF_STATUS (*dcs_detach)(struct wlan_objmgr_psoc *psoc);
221 	QDF_STATUS (*dcs_cmd_send)(struct wlan_objmgr_psoc *psoc,
222 				   uint32_t pdev_id,
223 				   bool is_host_pdev_id,
224 				   uint32_t dcs_enable);
225 };
226 
227 /**
228  * struct wlan_target_if_dcs_rx_ops - defines southbound rx callbacks for
229  * dcs component
230  * @process_dcs_event:  function pointer to rx FW events
231  */
232 struct wlan_target_if_dcs_rx_ops {
233 	QDF_STATUS (*process_dcs_event)(struct wlan_objmgr_psoc *psoc,
234 					struct wlan_host_dcs_event *event);
235 };
236 #endif
237 
238 #ifdef WLAN_MLO_GLOBAL_SHMEM_SUPPORT
239 /**
240  * struct wlan_lmac_if_global_shmem_local_ops - local ops function pointer
241  * table of local shared mem arena
242  * @implemented: Whether functions pointers are implemented
243  * @init_shmem_arena_ctx: Initialize shmem arena context
244  * @deinit_shmem_arena_ctx: De-initialize shmem arena context
245  * @get_crash_reason_address: Get the address of the crash reason associated
246  * with chip_id
247  * @get_no_of_chips_from_crash_info: Get the number of chips participated in the
248  * mlo from global shmem crash info
249  */
250 struct wlan_lmac_if_global_shmem_local_ops {
251 	bool implemented;
252 
253 	QDF_STATUS (*init_shmem_arena_ctx)(void *arena_vaddr,
254 					   size_t arena_len,
255 					   uint8_t grp_id);
256 	QDF_STATUS (*deinit_shmem_arena_ctx)(uint8_t grp_id);
257 	void *(*get_crash_reason_address)(uint8_t grp_id,
258 					  uint8_t chip_id);
259 	uint8_t (*get_no_of_chips_from_crash_info)(uint8_t grp_id);
260 };
261 #endif
262 
263 #ifdef WLAN_MGMT_RX_REO_SUPPORT
264 /**
265  * struct wlan_lmac_if_mgmt_rx_reo_low_level_ops - Low level function pointer
266  * table of MGMT Rx REO module
267  * @implemented: Whether functions pointers are implemented
268  * @get_num_links: Get number of links to be used by MGMT Rx REO module
269  * @get_valid_link_bitmap: Get valid link bitmap to be used by MGMT Rx
270  * REO module
271  * @get_snapshot_address: Get address of an MGMT Rx REO snapshot
272  * @get_snapshot_version: Get version of MGMT Rx REO snapshot
273  * @snapshot_is_valid: Check if a snapshot is valid
274  * @snapshot_get_mgmt_pkt_ctr: Get management packet counter from snapshot
275  * @snapshot_get_redundant_mgmt_pkt_ctr: Get redundant management packet counter
276  * from snapshot
277  * @snapshot_is_consistent: Check if a snapshot is consistent
278  * @snapshot_get_global_timestamp: Get global timestamp from snapshot
279  */
280 struct wlan_lmac_if_mgmt_rx_reo_low_level_ops {
281 	bool implemented;
282 	int (*get_num_links)(uint8_t grp_id);
283 	uint16_t (*get_valid_link_bitmap)(uint8_t grp_id);
284 	void* (*get_snapshot_address)
285 			(uint8_t grp_id, uint8_t link_id,
286 			 enum mgmt_rx_reo_shared_snapshot_id snapshot_id);
287 	int8_t (*get_snapshot_version)
288 			(uint8_t grp_id,
289 			 enum mgmt_rx_reo_shared_snapshot_id snapshot_id);
290 	bool (*snapshot_is_valid)(uint32_t snapshot_low,
291 				  uint8_t snapshot_version);
292 	uint16_t (*snapshot_get_mgmt_pkt_ctr)(uint32_t snapshot_low,
293 					      uint8_t snapshot_version);
294 	uint16_t (*snapshot_get_redundant_mgmt_pkt_ctr)(uint32_t snapshot_high);
295 	bool (*snapshot_is_consistent)(uint32_t snapshot_low,
296 				       uint32_t snapshot_high,
297 				       uint8_t snapshot_version);
298 	uint32_t (*snapshot_get_global_timestamp)(uint32_t snapshot_low,
299 						  uint32_t snapshot_high,
300 						  uint8_t snapshot_version);
301 };
302 
303 /**
304  * struct wlan_lmac_if_mgmt_txrx_tx_ops - structure of tx function
305  * pointers for mgmt rx reo
306  * @get_num_active_hw_links: Get number of active MLO HW links
307  * @get_valid_hw_link_bitmap: Get valid MLO HW link bitmap
308  * @read_mgmt_rx_reo_snapshot: Read rx-reorder snapshots
309  * @get_mgmt_rx_reo_snapshot_info: Get rx-reorder snapshot info
310  * @mgmt_rx_reo_filter_config:  Configure MGMT Rx REO filter
311  * @low_level_ops:  Low level operations of MGMT Rx REO module
312  */
313 struct wlan_lmac_if_mgmt_rx_reo_tx_ops {
314 	QDF_STATUS (*get_num_active_hw_links)(struct wlan_objmgr_psoc *psoc,
315 					      int8_t *num_active_hw_links);
316 	QDF_STATUS (*get_valid_hw_link_bitmap)(struct wlan_objmgr_psoc *psoc,
317 					       uint16_t *valid_hw_link_bitmap);
318 	QDF_STATUS (*read_mgmt_rx_reo_snapshot)
319 			(struct wlan_objmgr_pdev *pdev,
320 			 struct mgmt_rx_reo_snapshot_info *snapshot_info,
321 			 enum mgmt_rx_reo_shared_snapshot_id id,
322 			 struct mgmt_rx_reo_snapshot_params *value,
323 			 struct mgmt_rx_reo_shared_snapshot (*raw_snapshot)
324 			 [MGMT_RX_REO_SNAPSHOT_B2B_READ_SWAR_RETRY_LIMIT]);
325 	QDF_STATUS (*get_mgmt_rx_reo_snapshot_info)
326 			(struct wlan_objmgr_pdev *pdev,
327 			 enum mgmt_rx_reo_shared_snapshot_id id,
328 			 struct mgmt_rx_reo_snapshot_info *snapshot_info);
329 	QDF_STATUS (*mgmt_rx_reo_filter_config)(
330 					struct wlan_objmgr_pdev *pdev,
331 					struct mgmt_rx_reo_filter *filter);
332 	struct wlan_lmac_if_mgmt_rx_reo_low_level_ops low_level_ops;
333 };
334 
335 /**
336  * struct wlan_lmac_if_mgmt_txrx_rx_ops - structure of rx function
337  * pointers for mgmt rx reo module
338  * @fw_consumed_event_handler: FW consumed event handler
339  * @host_drop_handler: Handler for the frames that gets dropped in Host before
340  * entering REO algorithm
341  */
342 struct wlan_lmac_if_mgmt_rx_reo_rx_ops {
343 	QDF_STATUS (*fw_consumed_event_handler)(
344 			struct wlan_objmgr_pdev *pdev,
345 			struct mgmt_rx_reo_params *params);
346 	QDF_STATUS (*host_drop_handler)(
347 			struct wlan_objmgr_pdev *pdev,
348 			struct mgmt_rx_reo_params *params);
349 };
350 #endif
351 
352 /**
353  * struct wlan_lmac_if_mgmt_txrx_tx_ops - structure of tx function
354  *                  pointers for mgmt txrx component
355  * @mgmt_tx_send: function pointer to transmit mgmt tx frame
356  * @beacon_send:  function pointer to transmit beacon frame
357  * @fd_action_frame_send: function pointer to transmit FD action frame
358  * @tx_drain_nbuf_op: function pointer for any umac nbuf related ops for
359  *                    pending mgmt frames cleanup
360  * @reg_ev_handler: function pointer to register event handlers
361  * @unreg_ev_handler: function pointer to unregister event handlers
362  * @mgmt_rx_reo_tx_ops: management rx-reorder txops
363  * @rx_frame_legacy_handler: Legacy handler for Rx frames
364  */
365 struct wlan_lmac_if_mgmt_txrx_tx_ops {
366 	QDF_STATUS (*mgmt_tx_send)(struct wlan_objmgr_vdev *vdev,
367 			qdf_nbuf_t nbuf, u_int32_t desc_id,
368 			void *mgmt_tx_params);
369 	QDF_STATUS (*beacon_send)(struct wlan_objmgr_vdev *vdev,
370 			qdf_nbuf_t nbuf);
371 	QDF_STATUS (*fd_action_frame_send)(struct wlan_objmgr_vdev *vdev,
372 					   qdf_nbuf_t nbuf);
373 	void (*tx_drain_nbuf_op)(struct wlan_objmgr_pdev *pdev,
374 				 qdf_nbuf_t nbuf);
375 	QDF_STATUS (*reg_ev_handler)(struct wlan_objmgr_psoc *psoc);
376 	QDF_STATUS (*unreg_ev_handler)(struct wlan_objmgr_psoc *psoc);
377 	QDF_STATUS (*rx_frame_legacy_handler)(
378 			struct wlan_objmgr_pdev *pdev,
379 			qdf_nbuf_t buf,
380 			struct mgmt_rx_event_params *mgmt_rx_params);
381 #ifdef WLAN_MGMT_RX_REO_SUPPORT
382 	struct wlan_lmac_if_mgmt_rx_reo_tx_ops mgmt_rx_reo_tx_ops;
383 #endif
384 };
385 
386 /**
387  * struct wlan_lmac_if_scan_tx_ops - south bound tx function pointers for scan
388  * @scan_start: function to start scan
389  * @scan_cancel: function to cancel scan
390  * @pno_start: start pno scan
391  * @pno_stop: stop pno scan
392  * @obss_disable: disable obss scan
393  * @scan_reg_ev_handler: function to register for scan events
394  * @scan_unreg_ev_handler: function to unregister for scan events
395  *
396  * scan module uses these functions to avail ol/da lmac services
397  */
398 struct wlan_lmac_if_scan_tx_ops {
399 	QDF_STATUS (*scan_start)(struct wlan_objmgr_pdev *pdev,
400 			struct scan_start_request *req);
401 	QDF_STATUS (*scan_cancel)(struct wlan_objmgr_pdev *pdev,
402 			struct scan_cancel_param *req);
403 	QDF_STATUS (*pno_start)(struct wlan_objmgr_psoc *psoc,
404 			struct pno_scan_req_params *req);
405 	QDF_STATUS (*pno_stop)(struct wlan_objmgr_psoc *psoc,
406 			uint8_t vdev_id);
407 	QDF_STATUS (*obss_disable)(struct wlan_objmgr_psoc *psoc,
408 				   uint8_t vdev_id);
409 	QDF_STATUS (*scan_reg_ev_handler)(struct wlan_objmgr_psoc *psoc,
410 			void *arg);
411 	QDF_STATUS (*scan_unreg_ev_handler)(struct wlan_objmgr_psoc *psoc,
412 			void *arg);
413 	QDF_STATUS (*set_chan_list)(struct wlan_objmgr_pdev *pdev, void *arg);
414 	bool (*is_platform_eht_capable)(struct wlan_objmgr_psoc *psoc,
415 					uint8_t pdev_id);
416 };
417 
418 /**
419  * struct wlan_lmac_if_ftm_tx_ops - south bound tx function pointers for ftm
420  * @ftm_attach: function to register event handlers with FW
421  * @ftm_detach: function to de-register event handlers with FW
422  * @ftm_cmd_send: function to send FTM commands to FW
423  *
424  * ftm module uses these functions to avail ol/da lmac services
425  */
426 struct wlan_lmac_if_ftm_tx_ops {
427 	QDF_STATUS (*ftm_attach)(struct wlan_objmgr_psoc *psoc);
428 	QDF_STATUS (*ftm_detach)(struct wlan_objmgr_psoc *psoc);
429 	QDF_STATUS (*ftm_cmd_send)(struct wlan_objmgr_pdev *pdev,
430 				uint8_t *buf, uint32_t len, uint8_t mac_id);
431 };
432 
433 enum wlan_mlme_cfg_id;
434 /**
435  * struct wlan_lmac_if_mlme_tx_ops - south bound tx function pointers for mlme
436  * @get_wifi_iface_id: function to get wifi interface id
437  * @vdev_mlme_attach: function to register events
438  * @vdev_mlme_detach: function to unregister events
439  * @vdev_create_send: function to send vdev create
440  * @vdev_start_send: function to send vdev start
441  * @vdev_up_send: function to send vdev up
442  * @vdev_delete_send: function to send vdev delete
443  * @vdev_stop_send: function to send vdev stop
444  * @vdev_down_send: function to send vdev down
445  * @vdev_set_param_send: function to send vdev parameter
446  * @vdev_set_tx_rx_decap_type: function to send vdev tx rx cap/decap type
447  * @vdev_set_nac_rssi_send: function to send nac rssi
448  * @vdev_set_neighbour_rx_cmd_send: function to send vdev neighbour rx cmd
449  * @vdev_sifs_trigger_send: function to send vdev sifs trigger
450  * @vdev_set_custom_aggr_size_cmd_send: function to send custom aggr size
451  * @vdev_config_ratemask_cmd_send: function to send ratemask
452  * @peer_flush_tids_send: function to flush peer tids
453  * @multiple_vdev_restart_req_cmd: function to send multiple vdev restart
454  * @multiple_vdev_set_param_cmd: function to send multiple vdev param
455  * @beacon_send_cmd: function to send beacon
456  * @beacon_tmpl_send: function to send beacon template
457  * @vdev_bcn_miss_offload_send: function to send beacon miss offload
458  * @vdev_sta_ps_param_send: function to sent STA power save config
459  * @peer_delete_all_send: function to send vdev delete all peer request
460  * @psoc_vdev_rsp_timer_init: function to initialize psoc vdev response timer
461  * @psoc_vdev_rsp_timer_deinit: function to deinitialize psoc vdev rsp timer
462  * @psoc_vdev_rsp_timer_inuse: function to determine whether the vdev rsp
463  * timer is inuse or not
464  * @psoc_vdev_rsp_timer_mod: function to modify the time of vdev rsp timer
465  * @psoc_wake_lock_init: Initialize psoc wake lock for vdev response timer
466  * @psoc_wake_lock_deinit: De-Initialize psoc wake lock for vdev response timer
467  * @get_psoc_mlo_group_id: Get MLO Group ID for the psoc
468  * @get_hw_link_id: Get hw_link_id for pdev
469  * @vdev_send_set_mac_addr: API to send set MAC address request to FW
470  * @vdev_peer_set_param_send: API to send peer param to FW
471  */
472 struct wlan_lmac_if_mlme_tx_ops {
473 	uint32_t (*get_wifi_iface_id) (struct wlan_objmgr_pdev *pdev);
474 	QDF_STATUS (*vdev_mlme_attach)(struct wlan_objmgr_psoc *psoc);
475 	QDF_STATUS (*vdev_mlme_detach)(struct wlan_objmgr_psoc *psoc);
476 	QDF_STATUS (*vdev_create_send)(struct wlan_objmgr_vdev *vdev,
477 				       struct vdev_create_params *param);
478 	QDF_STATUS (*vdev_start_send)(struct wlan_objmgr_vdev *vdev,
479 				      struct vdev_start_params *param);
480 	QDF_STATUS (*vdev_up_send)(struct wlan_objmgr_vdev *vdev,
481 				   struct vdev_up_params *param);
482 	QDF_STATUS (*vdev_delete_send)(struct wlan_objmgr_vdev *vdev,
483 				       struct vdev_delete_params *param);
484 	QDF_STATUS (*vdev_stop_send)(struct wlan_objmgr_vdev *vdev,
485 				     struct vdev_stop_params *param);
486 	QDF_STATUS (*vdev_down_send)(struct wlan_objmgr_vdev *vdev,
487 				     struct vdev_down_params *param);
488 	QDF_STATUS (*vdev_set_param_send)(struct wlan_objmgr_vdev *vdev,
489 					  struct vdev_set_params *param);
490 	QDF_STATUS (*vdev_set_tx_rx_decap_type)(struct wlan_objmgr_vdev *vdev,
491 						enum wlan_mlme_cfg_id param_id,
492 						uint32_t value);
493 	QDF_STATUS (*vdev_set_nac_rssi_send)(
494 				struct wlan_objmgr_vdev *vdev,
495 				struct vdev_scan_nac_rssi_params *param);
496 	QDF_STATUS (*vdev_set_neighbour_rx_cmd_send)(
497 					struct wlan_objmgr_vdev *vdev,
498 					struct set_neighbour_rx_params *param,
499 					uint8_t *mac);
500 	QDF_STATUS (*vdev_sifs_trigger_send)(
501 					struct wlan_objmgr_vdev *vdev,
502 					struct sifs_trigger_param *param);
503 	QDF_STATUS (*vdev_set_custom_aggr_size_cmd_send)(
504 				struct wlan_objmgr_vdev *vdev,
505 				struct set_custom_aggr_size_params *param);
506 	QDF_STATUS (*vdev_config_ratemask_cmd_send)(
507 					struct wlan_objmgr_vdev *vdev,
508 					struct config_ratemask_params *param);
509 	QDF_STATUS (*peer_flush_tids_send)(
510 					struct wlan_objmgr_vdev *vdev,
511 					struct peer_flush_params *param);
512 	QDF_STATUS (*multiple_vdev_restart_req_cmd)(
513 				struct wlan_objmgr_pdev *pdev,
514 				struct multiple_vdev_restart_params *param);
515 	QDF_STATUS (*multiple_vdev_set_param_cmd)(
516 				struct wlan_objmgr_pdev *pdev,
517 				struct multiple_vdev_set_param *param);
518 	QDF_STATUS (*beacon_cmd_send)(struct wlan_objmgr_vdev *vdev,
519 				      struct beacon_params *param);
520 	QDF_STATUS (*beacon_tmpl_send)(struct wlan_objmgr_vdev *vdev,
521 				       struct beacon_tmpl_params *param);
522 #if defined(WLAN_SUPPORT_FILS) || defined(CONFIG_BAND_6GHZ)
523 	QDF_STATUS (*vdev_fils_enable_send)(struct wlan_objmgr_vdev *vdev,
524 					    struct config_fils_params *param);
525 #endif
526 	QDF_STATUS (*vdev_bcn_miss_offload_send)(struct wlan_objmgr_vdev *vdev);
527 	QDF_STATUS (*vdev_sta_ps_param_send)(struct wlan_objmgr_vdev *vdev,
528 					     struct sta_ps_params *param);
529 	QDF_STATUS (*peer_delete_all_send)(
530 					struct wlan_objmgr_vdev *vdev,
531 					struct peer_delete_all_params *param);
532 	QDF_STATUS (*psoc_vdev_rsp_timer_init)(
533 				struct wlan_objmgr_psoc *psoc,
534 				uint8_t vdev_id);
535 	void (*psoc_vdev_rsp_timer_deinit)(
536 				struct wlan_objmgr_psoc *psoc,
537 				uint8_t vdev_id);
538 	QDF_STATUS (*psoc_vdev_rsp_timer_inuse)(
539 				struct wlan_objmgr_psoc *psoc,
540 				uint8_t vdev_id);
541 	QDF_STATUS (*psoc_vdev_rsp_timer_mod)(
542 					struct wlan_objmgr_psoc *psoc,
543 					uint8_t vdev_id,
544 					int mseconds);
545 	void (*psoc_wake_lock_init)(
546 				struct wlan_objmgr_psoc *psoc);
547 	void (*psoc_wake_lock_deinit)(
548 				struct wlan_objmgr_psoc *psoc);
549 	QDF_STATUS (*vdev_mgr_rsp_timer_stop)(
550 				struct wlan_objmgr_psoc *psoc,
551 				struct vdev_response_timer *vdev_rsp,
552 				enum wlan_vdev_mgr_tgt_if_rsp_bit clear_bit);
553 #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
554 	uint16_t (*get_hw_link_id)(struct wlan_objmgr_pdev *pdev);
555 	uint8_t (*get_psoc_mlo_group_id)(struct wlan_objmgr_psoc *psoc);
556 	QDF_STATUS (*target_if_mlo_setup_req)(struct wlan_objmgr_pdev **pdev,
557 					      uint8_t num_pdevs,
558 					      uint8_t grp_id);
559 	QDF_STATUS (*target_if_mlo_ready)(struct wlan_objmgr_pdev **pdev,
560 					  uint8_t num_pdevs);
561 	QDF_STATUS (*target_if_mlo_teardown_req)(struct wlan_objmgr_pdev **pdev,
562 						 uint8_t num_pdevs,
563 						 uint32_t grp_id);
564 #endif
565 #ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
566 QDF_STATUS (*vdev_send_set_mac_addr)(struct qdf_mac_addr mac_addr,
567 				     struct qdf_mac_addr mld_addr,
568 				     struct wlan_objmgr_vdev *vdev);
569 #endif
570 	QDF_STATUS (*vdev_peer_set_param_send)(struct wlan_objmgr_vdev *vdev,
571 					       uint8_t *peer_mac_addr,
572 					       uint32_t param_id,
573 					       uint32_t param_value);
574 };
575 
576 /**
577  * struct wlan_lmac_if_scan_rx_ops  - south bound rx function pointers for scan
578  * @scan_ev_handler: scan event handler
579  * @scan_set_max_active_scans: set max active scans allowed
580  *
581  * lmac modules uses this API to post scan events to scan module
582  */
583 struct wlan_lmac_if_scan_rx_ops {
584 	QDF_STATUS (*scan_ev_handler)(struct wlan_objmgr_psoc *psoc,
585 		struct scan_event_info *event_info);
586 	QDF_STATUS (*scan_set_max_active_scans)(struct wlan_objmgr_psoc *psoc,
587 			uint32_t max_active_scans);
588 };
589 
590 #ifdef CONVERGED_P2P_ENABLE
591 
592 /* forward declarations for p2p tx ops */
593 struct p2p_ps_config;
594 struct p2p_lo_start;
595 
596 /**
597  * struct wlan_lmac_if_p2p_tx_ops - structure of tx function pointers
598  * for P2P component
599  * @set_ps:      function pointer to set power save
600  * @lo_start:    function pointer to start listen offload
601  * @lo_stop:     function pointer to stop listen offload
602  * @set_noa:     function pointer to disable/enable NOA
603  * @reg_lo_ev_handler:   function pointer to register lo event handler
604  * @reg_noa_ev_handler:  function pointer to register noa event handler
605  * @unreg_lo_ev_handler: function pointer to unregister lo event handler
606  * @unreg_noa_ev_handler:function pointer to unregister noa event handler
607  * @reg_mac_addr_rx_filter_handler: function pointer to register/unregister
608  *    set mac addr status event callback.
609  * @set_mac_addr_rx_filter_cmd: function pointer to set mac addr rx filter
610  * @reg_mcc_quota_ev_handler: function to register mcc_quota event handler
611  */
612 struct wlan_lmac_if_p2p_tx_ops {
613 	QDF_STATUS (*set_ps)(struct wlan_objmgr_psoc *psoc,
614 		struct p2p_ps_config *ps_config);
615 #ifdef FEATURE_P2P_LISTEN_OFFLOAD
616 	QDF_STATUS (*lo_start)(struct wlan_objmgr_psoc *psoc,
617 		struct p2p_lo_start *lo_start);
618 	QDF_STATUS (*lo_stop)(struct wlan_objmgr_psoc *psoc,
619 		uint32_t vdev_id);
620 	QDF_STATUS (*reg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc,
621 			void *arg);
622 	QDF_STATUS (*unreg_lo_ev_handler)(struct wlan_objmgr_psoc *psoc,
623 			void *arg);
624 #endif
625 	QDF_STATUS (*set_noa)(struct wlan_objmgr_psoc *psoc,
626 			      uint32_t vdev_id, bool disable_noa);
627 	QDF_STATUS (*reg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc,
628 					 void *arg);
629 	QDF_STATUS (*unreg_noa_ev_handler)(struct wlan_objmgr_psoc *psoc,
630 			void *arg);
631 	QDF_STATUS (*reg_mac_addr_rx_filter_handler)(
632 			struct wlan_objmgr_psoc *psoc, bool reg);
633 	QDF_STATUS (*set_mac_addr_rx_filter_cmd)(
634 			struct wlan_objmgr_psoc *psoc,
635 			struct set_rx_mac_filter *param);
636 #ifdef WLAN_FEATURE_MCC_QUOTA
637 	QDF_STATUS (*reg_mcc_quota_ev_handler)(struct wlan_objmgr_psoc *psoc,
638 					       bool reg);
639 #endif
640 };
641 #endif
642 
643 #ifdef WLAN_ATF_ENABLE
644 
645 /**
646  * struct wlan_lmac_if_atf_tx_ops - ATF specific tx function pointers
647  * @atf_enable_disable:           Set atf peer stats enable/disable
648  * @atf_ssid_sched_policy:        Set ssid schedule policy
649  * @atf_set:                      Set atf
650  * @atf_set_grouping:             Set atf grouping
651  * @atf_set_group_ac:             Set atf Group AC
652  * @atf_send_peer_request:        Send peer requests
653  * @atf_set_bwf:                  Set bandwidth fairness
654  * @atf_get_peer_airtime:         Get peer airtime
655  * @atf_open:                     ATF open
656  * @atf_register_event_handler:   ATF register wmi event handlers
657  * @atf_unregister_event_handler: ATF unregister wmi event handlers
658  * @atf_set_ppdu_stats:           ATF set ppdu stats to get ATF stats
659  */
660 struct wlan_lmac_if_atf_tx_ops {
661 	int32_t (*atf_enable_disable)(struct wlan_objmgr_vdev *vdev,
662 				      uint8_t value);
663 	int32_t (*atf_ssid_sched_policy)(struct wlan_objmgr_vdev *vdev,
664 					 uint8_t value);
665 	int32_t (*atf_set)(struct wlan_objmgr_pdev *pdev,
666 			   struct pdev_atf_req *atf_req,
667 			   uint8_t atf_tput_based);
668 	int32_t (*atf_set_grouping)(struct wlan_objmgr_pdev *pdev,
669 				    struct pdev_atf_ssid_group_req *atf_grp_req,
670 				    uint8_t atf_tput_based);
671 	int32_t (*atf_set_group_ac)(struct wlan_objmgr_pdev *pdev,
672 				    struct pdev_atf_group_wmm_ac_req *atf_acreq,
673 				    uint8_t atf_tput_based);
674 	int32_t (*atf_send_peer_request)(struct wlan_objmgr_pdev *pdev,
675 					 struct pdev_atf_peer_ext_request *atfr,
676 					 uint8_t atf_tput_based);
677 	int32_t (*atf_set_bwf)(struct wlan_objmgr_pdev *pdev,
678 			       struct pdev_bwf_req *bwf_req);
679 	uint32_t (*atf_get_peer_airtime)(struct wlan_objmgr_peer *peer);
680 	void (*atf_open)(struct wlan_objmgr_psoc *psoc);
681 	void (*atf_register_event_handler)(struct wlan_objmgr_psoc *psoc);
682 	void (*atf_unregister_event_handler)(struct wlan_objmgr_psoc *psoc);
683 	void (*atf_set_ppdu_stats)(struct wlan_objmgr_pdev *pdev,
684 				   uint8_t value);
685 };
686 #endif
687 
688 #ifdef WLAN_SUPPORT_FILS
689 /**
690  * struct wlan_lmac_if_fd_tx_ops - FILS Discovery specific Tx function pointers
691  * @fd_vdev_config_fils:         Enable and configure FILS Discovery
692  * @fd_register_event_handler:   Register swfda WMI event handler
693  * @fd_unregister_event_handler: Un-register swfda WMI event handler
694  * @fd_offload_tmpl_send:        Send FD template to FW
695  */
696 struct wlan_lmac_if_fd_tx_ops {
697 	QDF_STATUS (*fd_vdev_config_fils)(struct wlan_objmgr_vdev *vdev,
698 					  uint32_t fd_period);
699 	void (*fd_register_event_handler)(struct wlan_objmgr_psoc *psoc);
700 	void (*fd_unregister_event_handler)(struct wlan_objmgr_psoc *psoc);
701 	QDF_STATUS (*fd_offload_tmpl_send)(struct wlan_objmgr_pdev *pdev,
702 			struct fils_discovery_tmpl_params *fd_tmpl_param);
703 };
704 #endif
705 
706 #ifdef WLAN_SA_API_ENABLE
707 
708 /**
709  * struct wlan_lmac_if_sa_api_tx_ops - SA API specific tx function pointers
710  */
711 
712 struct wlan_lmac_if_sa_api_tx_ops {
713 	void (*sa_api_register_event_handler)(struct wlan_objmgr_psoc *psoc);
714 	void (*sa_api_unregister_event_handler)(struct wlan_objmgr_psoc *posc);
715 	void (*sa_api_enable_sa) (struct wlan_objmgr_pdev *pdev,
716 			uint32_t enable, uint32_t mode, uint32_t rx_antenna);
717 	void (*sa_api_set_rx_antenna) (struct wlan_objmgr_pdev *pdev,
718 			uint32_t antenna);
719 	void (*sa_api_set_tx_antenna) (struct wlan_objmgr_peer *peer,
720 			uint32_t *antenna_array);
721 	void (*sa_api_set_tx_default_antenna) (struct wlan_objmgr_pdev *pdev,
722 			u_int32_t antenna);
723 	void (*sa_api_set_training_info) (struct wlan_objmgr_peer *peer,
724 			uint32_t *rate_array,
725 			uint32_t *antenna_array,
726 			uint32_t numpkts);
727 	void (*sa_api_prepare_rateset)(struct wlan_objmgr_pdev *pdev,
728 			struct wlan_objmgr_peer *peer,
729 			struct sa_rate_info *rate_info);
730 	void (*sa_api_set_node_config_ops) (struct wlan_objmgr_peer *peer,
731 			uint32_t cmd_id, uint16_t args_count,
732 			u_int32_t args_arr[]);
733 };
734 
735 #endif
736 
737 #ifdef WLAN_CFR_ENABLE
738 /**
739  * struct wlan_lmac_if_cfr_tx_ops - CFR specific tx function pointers
740  * @cfr_init_pdev: Initialize CFR
741  * @cfr_deinit_pdev: De-initialize CFR
742  * @cfr_enable_cfr_timer: Function to enable CFR timer
743  * @cfr_start_capture: Function to start CFR capture
744  * @cfr_stop_capture: Function to stop CFR capture
745  * @cfr_config_rcc: Function to set the Repetitive channel capture params
746  * @cfr_start_lut_timer: Function to start timer to flush aged-out LUT entries
747  * @cfr_stop_lut_timer: Function to stop timer to flush aged-out LUT entries
748  * @cfr_default_ta_ra_cfg: Function to configure default values for TA_RA mode
749  * @cfr_dump_lut_enh: Function to dump LUT entries
750  * @cfr_rx_tlv_process: Function to process PPDU status TLVs
751  * @cfr_update_global_cfg: Function to update the global config for
752  * a successful commit session.
753  */
754 struct wlan_lmac_if_cfr_tx_ops {
755 	QDF_STATUS (*cfr_init_pdev)(struct wlan_objmgr_psoc *psoc,
756 				    struct wlan_objmgr_pdev *pdev);
757 	QDF_STATUS (*cfr_deinit_pdev)(struct wlan_objmgr_psoc *psoc,
758 				      struct wlan_objmgr_pdev *pdev);
759 	int (*cfr_enable_cfr_timer)(struct wlan_objmgr_pdev *pdev,
760 				    uint32_t cfr_timer);
761 	int (*cfr_start_capture)(struct wlan_objmgr_pdev *pdev,
762 				 struct wlan_objmgr_peer *peer,
763 				 struct cfr_capture_params *params);
764 	int (*cfr_stop_capture)(struct wlan_objmgr_pdev *pdev,
765 				struct wlan_objmgr_peer *peer);
766 #ifdef WLAN_ENH_CFR_ENABLE
767 	QDF_STATUS (*cfr_config_rcc)(struct wlan_objmgr_pdev *pdev,
768 				     struct cfr_rcc_param *params);
769 	void (*cfr_start_lut_timer)(struct wlan_objmgr_pdev *pdev);
770 	void (*cfr_stop_lut_timer)(struct wlan_objmgr_pdev *pdev);
771 	void (*cfr_default_ta_ra_cfg)(struct cfr_rcc_param *params,
772 				      bool allvalid, uint16_t reset_cfg);
773 	void (*cfr_dump_lut_enh)(struct wlan_objmgr_pdev *pdev);
774 	void (*cfr_rx_tlv_process)(struct wlan_objmgr_pdev *pdev, void *nbuf);
775 	void (*cfr_update_global_cfg)(struct wlan_objmgr_pdev *pdev);
776 	QDF_STATUS (*cfr_subscribe_ppdu_desc)(struct wlan_objmgr_pdev *pdev,
777 					      bool is_subscribe);
778 #endif
779 };
780 #endif /* WLAN_CFR_ENABLE */
781 
782 #ifdef WLAN_CONV_SPECTRAL_ENABLE
783 struct spectral_wmi_ops;
784 struct spectral_tgt_ops;
785 /**
786  * struct wlan_lmac_if_sptrl_tx_ops - Spectral south bound Tx operations
787  * @sptrlto_pdev_spectral_init: Initialize target_if pdev Spectral object
788  * @sptrlto_pdev_spectral_deinit: De-initialize target_if pdev Spectral object
789  * @sptrlto_psoc_spectral_init: Initialize target_if psoc Spectral object
790  * @sptrlto_psoc_spectral_deinit: De-initialize target_if psoc Spectral object
791  * @sptrlto_set_spectral_config:    Set Spectral configuration
792  * @sptrlto_get_spectral_config:    Get Spectral configuration
793  * @sptrlto_start_spectral_scan:    Start Spectral Scan
794  * @sptrlto_stop_spectral_scan:     Stop Spectral Scan
795  * @sptrlto_is_spectral_active:     Get whether Spectral is active
796  * @sptrlto_is_spectral_enabled:    Get whether Spectral is enabled
797  * @sptrlto_set_icm_active:         Set whether ICM is active or inactive
798  * @sptrlto_get_icm_active:         Get whether ICM is active or inactive
799  * @sptrlto_get_nominal_nf:         Get Nominal Noise Floor for the current
800  *                                  frequency band
801  * @sptrlto_set_debug_level:        Set Spectral debug level
802  * @sptrlto_get_debug_level:        Get Spectral debug level
803  * @sptrlto_get_chaninfo:           Get channel information
804  * @sptrlto_clear_chaninfo:         Clear channel information
805  * @sptrlto_get_spectral_capinfo:   Get Spectral capability information
806  * @sptrlto_get_spectral_diagstats: Get Spectral diagnostic statistics
807  * @sptrlto_register_spectral_wmi_ops: Register Spectral WMI operations
808  * @sptrlto_register_spectral_tgt_ops: Register Spectral target operations
809  * @sptrlto_register_netlink_cb: Register Spectral Netlink callbacks
810  * @sptrlto_use_nl_bcast: Get whether to use Netlink broadcast/unicast
811  * @sptrlto_deregister_netlink_cb: De-register Spectral Netlink callbacks
812  * @sptrlto_process_spectral_report: Process spectral report
813  * @sptrlto_set_dma_debug: Set DMA debug for Spectral
814  * @sptrlto_direct_dma_support: Whether Direct-DMA is supported on this radio
815  * @sptrlto_check_and_do_dbr_ring_debug: Start/Stop Spectral ring debug based
816  *                                       on the previous state
817  * @sptrlto_check_and_do_dbr_buff_debug: Start/Stop Spectral buffer debug based
818  *                                       on the previous state
819  * @sptrlto_register_events: Registration of WMI events for Spectral
820  * @sptrlto_unregister_events: Unregistration of WMI events for Spectral
821  * @sptrlto_init_pdev_feature_caps: Initialize spectral feature capabilities
822  **/
823 struct wlan_lmac_if_sptrl_tx_ops {
824 	void *(*sptrlto_pdev_spectral_init)(struct wlan_objmgr_pdev *pdev);
825 	void (*sptrlto_pdev_spectral_deinit)(struct wlan_objmgr_pdev *pdev);
826 	void *(*sptrlto_psoc_spectral_init)(struct wlan_objmgr_psoc *psoc);
827 	void (*sptrlto_psoc_spectral_deinit)(struct wlan_objmgr_psoc *psoc);
828 	QDF_STATUS (*sptrlto_set_spectral_config)
829 					(struct wlan_objmgr_pdev *pdev,
830 					 const struct spectral_cp_param *param,
831 					 const enum spectral_scan_mode smode,
832 					 enum spectral_cp_error_code *err);
833 	QDF_STATUS (*sptrlto_get_spectral_config)
834 					(struct wlan_objmgr_pdev *pdev,
835 					 struct spectral_config *sptrl_config,
836 					 enum spectral_scan_mode smode);
837 	QDF_STATUS (*sptrlto_start_spectral_scan)
838 					(struct wlan_objmgr_pdev *pdev,
839 					 uint8_t vdev_id,
840 					 const enum spectral_scan_mode smode,
841 					 enum spectral_cp_error_code *err);
842 	QDF_STATUS (*sptrlto_stop_spectral_scan)
843 					(struct wlan_objmgr_pdev *pdev,
844 					 const enum spectral_scan_mode smode,
845 					 enum spectral_cp_error_code *err);
846 	bool (*sptrlto_is_spectral_active)(struct wlan_objmgr_pdev *pdev,
847 					   const enum spectral_scan_mode smode);
848 	bool (*sptrlto_is_spectral_enabled)(struct wlan_objmgr_pdev *pdev,
849 					    enum spectral_scan_mode smode);
850 	QDF_STATUS (*sptrlto_set_debug_level)(struct wlan_objmgr_pdev *pdev,
851 					      u_int32_t debug_level);
852 	u_int32_t (*sptrlto_get_debug_level)(struct wlan_objmgr_pdev *pdev);
853 	QDF_STATUS (*sptrlto_get_spectral_capinfo)
854 						(struct wlan_objmgr_pdev *pdev,
855 						 struct spectral_caps *scaps);
856 	QDF_STATUS (*sptrlto_get_spectral_diagstats)
857 					(struct wlan_objmgr_pdev *pdev,
858 					 struct spectral_diag_stats *stats);
859 	QDF_STATUS (*sptrlto_register_spectral_wmi_ops)(
860 					struct wlan_objmgr_psoc *psoc,
861 					struct spectral_wmi_ops *wmi_ops);
862 	QDF_STATUS (*sptrlto_register_spectral_tgt_ops)(
863 					struct wlan_objmgr_psoc *psoc,
864 					struct spectral_tgt_ops *tgt_ops);
865 	void (*sptrlto_register_netlink_cb)(
866 		struct wlan_objmgr_pdev *pdev,
867 		struct spectral_nl_cb *nl_cb);
868 	bool (*sptrlto_use_nl_bcast)(struct wlan_objmgr_pdev *pdev);
869 	void (*sptrlto_deregister_netlink_cb)(struct wlan_objmgr_pdev *pdev);
870 	int (*sptrlto_process_spectral_report)(
871 		struct wlan_objmgr_pdev *pdev,
872 		void *payload);
873 	QDF_STATUS (*sptrlto_set_dma_debug)(
874 		struct wlan_objmgr_pdev *pdev,
875 		enum spectral_dma_debug dma_debug_type,
876 		bool dma_debug_enable);
877 	bool (*sptrlto_direct_dma_support)(struct wlan_objmgr_pdev *pdev);
878 	QDF_STATUS (*sptrlto_check_and_do_dbr_ring_debug)(
879 		struct wlan_objmgr_pdev *pdev);
880 	QDF_STATUS (*sptrlto_check_and_do_dbr_buff_debug)(
881 		struct wlan_objmgr_pdev *pdev);
882 	QDF_STATUS (*sptrlto_register_events)(struct wlan_objmgr_psoc *psoc);
883 	QDF_STATUS (*sptrlto_unregister_events)(struct wlan_objmgr_psoc *psoc);
884 	QDF_STATUS (*sptrlto_init_pdev_feature_caps)(
885 		struct wlan_objmgr_pdev *pdev);
886 };
887 #endif /* WLAN_CONV_SPECTRAL_ENABLE */
888 
889 #ifdef WLAN_IOT_SIM_SUPPORT
890 /**
891  * struct wlan_lmac_if_iot_sim_tx_ops - iot_sim south bound Tx operations
892  * @iot_sim_send_cmd: To send wmi simulation command
893  **/
894 struct wlan_lmac_if_iot_sim_tx_ops {
895 	QDF_STATUS (*iot_sim_send_cmd)(struct wlan_objmgr_pdev *pdev,
896 				       struct simulation_test_params *param);
897 };
898 #endif
899 
900 #ifdef WIFI_POS_CONVERGED
901 /*
902  * struct wlan_lmac_if_wifi_pos_tx_ops - structure of firmware tx function
903  * pointers for wifi_pos component
904  * @wifi_pos_register_events: function pointer to register wifi_pos events
905  * @wifi_pos_deregister_events: function pointer to deregister wifi_pos events
906  * @data_req_tx: function pointer to send wifi_pos req to firmware
907  * @wifi_pos_convert_pdev_id_host_to_target: function pointer to get target
908  * pdev_id from host pdev_id.
909  * @wifi_pos_convert_pdev_id_target_to_host: function pointer to get host
910  * pdev_id from target pdev_id.
911  * @wifi_pos_get_vht_ch_width: Function pointer to get max supported bw by FW
912  * @wifi_pos_parse_measreq_chan_info: Parse channel info from LOWI measurement
913  *                                    request buffer.
914  * @send_rtt_pasn_auth_status: Send PASN peers authentication status
915  * @send_rtt_pasn_deauth: Send PASN peer deauth command
916  */
917 struct wlan_lmac_if_wifi_pos_tx_ops {
918 	QDF_STATUS (*wifi_pos_register_events)(struct wlan_objmgr_psoc *psoc);
919 	QDF_STATUS (*wifi_pos_deregister_events)(struct wlan_objmgr_psoc *psoc);
920 	QDF_STATUS (*data_req_tx)(struct wlan_objmgr_pdev *pdev,
921 				  struct oem_data_req *req);
922 	QDF_STATUS (*wifi_pos_convert_pdev_id_host_to_target)(
923 			struct wlan_objmgr_psoc *psoc, uint32_t host_pdev_id,
924 			uint32_t *target_pdev_id);
925 	QDF_STATUS (*wifi_pos_convert_pdev_id_target_to_host)(
926 			struct wlan_objmgr_psoc *psoc, uint32_t target_pdev_id,
927 			uint32_t *host_pdev_id);
928 	QDF_STATUS (*wifi_pos_get_vht_ch_width)(struct wlan_objmgr_psoc *psoc,
929 						enum phy_ch_width *ch_width);
930 	QDF_STATUS (*wifi_pos_parse_measreq_chan_info)(
931 			struct wlan_objmgr_pdev *pdev, uint32_t data_len,
932 			uint8_t *data, struct rtt_channel_info *chinfo);
933 	QDF_STATUS (*send_rtt_pasn_auth_status)
934 			(struct wlan_objmgr_psoc *psoc,
935 			 struct wlan_pasn_auth_status *data);
936 	QDF_STATUS (*send_rtt_pasn_deauth)(struct wlan_objmgr_psoc *psoc,
937 					   struct qdf_mac_addr *peer_mac);
938 };
939 #endif
940 
941 #ifdef DIRECT_BUF_RX_ENABLE
942 /**
943  * struct wlan_lmac_if_direct_buf_rx_tx_ops - structure of direct buf rx txops
944  * @direct_buf_rx_module_register: Registration API callback for modules
945  *                                 to register with direct buf rx framework
946  * @direct_buf_rx_module_unregister: Unregistration API to clean up module
947  *                                   specific resources in DBR
948  * @direct_buf_rx_register_events: Registration of WMI events for direct
949  *                                 buffer rx framework
950  * @direct_buf_rx_unregister_events: Unregistraton of WMI events for direct
951  *                                   buffer rx framework
952  * @direct_buf_rx_print_ring_stat: Print ring status per module per pdev
953  *
954  * @direct_buf_rx_get_ring_params: Get ring parameters for module_id
955  * @direct_buf_rx_start_ring_debug: Start DBR ring debug
956  * @direct_buf_rx_stop_ring_debug: Stop DBR ring debug
957  * @direct_buf_rx_start_buffer_poisoning: Start DBR buffer poisoning
958  * @direct_buf_rx_stop_buffer_poisoning: Stop DBR buffer poisoning
959  */
960 struct wlan_lmac_if_direct_buf_rx_tx_ops {
961 	QDF_STATUS (*direct_buf_rx_module_register)(
962 			struct wlan_objmgr_pdev *pdev, uint8_t mod_id,
963 			struct dbr_module_config *dbr_config,
964 			bool (*dbr_rsp_handler)
965 			     (struct wlan_objmgr_pdev *pdev,
966 			      struct direct_buf_rx_data *dbr_data));
967 	QDF_STATUS (*direct_buf_rx_module_unregister)(
968 			struct wlan_objmgr_pdev *pdev, uint8_t mod_id);
969 	QDF_STATUS (*direct_buf_rx_register_events)(
970 			struct wlan_objmgr_psoc *psoc);
971 	QDF_STATUS (*direct_buf_rx_unregister_events)(
972 			struct wlan_objmgr_psoc *psoc);
973 	QDF_STATUS (*direct_buf_rx_print_ring_stat)(
974 			struct wlan_objmgr_pdev *pdev);
975 	QDF_STATUS (*direct_buf_rx_get_ring_params)
976 		(struct wlan_objmgr_pdev *pdev,
977 		 struct module_ring_params *param,
978 		 uint8_t module_id, uint8_t srng_id);
979 	QDF_STATUS (*direct_buf_rx_start_ring_debug)(
980 		struct wlan_objmgr_pdev *pdev, uint8_t mod_id,
981 		uint32_t num_ring_debug_entries);
982 	QDF_STATUS (*direct_buf_rx_stop_ring_debug)(
983 		struct wlan_objmgr_pdev *pdev, uint8_t mod_id);
984 	QDF_STATUS (*direct_buf_rx_start_buffer_poisoning)(
985 		struct wlan_objmgr_pdev *pdev, uint8_t mod_id, uint32_t value);
986 	QDF_STATUS (*direct_buf_rx_stop_buffer_poisoning)(
987 		struct wlan_objmgr_pdev *pdev, uint8_t mod_id);
988 };
989 #endif /* DIRECT_BUF_RX_ENABLE */
990 
991 #ifdef FEATURE_WLAN_TDLS
992 /* fwd declarations for tdls tx ops */
993 struct tdls_info;
994 struct tdls_peer_update_state;
995 struct tdls_channel_switch_params;
996 struct sta_uapsd_trig_params;
997 /**
998  * struct wlan_lmac_if_tdls_tx_ops - south bound tx function pointers for tdls
999  * @update_fw_state: function to update tdls firmware state
1000  * @update_peer_state: function to update tdls peer state
1001  * @set_offchan_mode: function to set tdls offchannel mode
1002  * @tdls_reg_ev_handler: function to register for tdls events
1003  * @tdls_unreg_ev_handler: function to unregister for tdls events
1004  *
1005  * tdls module uses these functions to avail ol/da lmac services
1006  */
1007 struct wlan_lmac_if_tdls_tx_ops {
1008 	QDF_STATUS (*update_fw_state)(struct wlan_objmgr_psoc *psoc,
1009 				     struct tdls_info *req);
1010 	QDF_STATUS (*update_peer_state)(struct wlan_objmgr_psoc *psoc,
1011 				       struct tdls_peer_update_state *param);
1012 	QDF_STATUS (*set_offchan_mode)(struct wlan_objmgr_psoc *psoc,
1013 				      struct tdls_channel_switch_params *param);
1014 	QDF_STATUS (*tdls_reg_ev_handler)(struct wlan_objmgr_psoc *psoc,
1015 					 void *arg);
1016 	QDF_STATUS (*tdls_unreg_ev_handler) (struct wlan_objmgr_psoc *psoc,
1017 					    void *arg);
1018 };
1019 
1020 /* fwd declarations for tdls rx ops */
1021 struct tdls_event_info;
1022 /**
1023  * struct wlan_lmac_if_tdls_rx_ops  - south bound rx function pointers for tdls
1024  * @tdls_ev_handler: function to handler tdls event
1025  *
1026  * lmac modules uses this API to post scan events to tdls module
1027  */
1028 struct wlan_lmac_if_tdls_rx_ops {
1029 	QDF_STATUS (*tdls_ev_handler)(struct wlan_objmgr_psoc *psoc,
1030 				     struct tdls_event_info *info);
1031 };
1032 #endif
1033 
1034 /**
1035  * struct wlan_lmac_if_ftm_rx_ops  - south bound rx function pointers for FTM
1036  * @ftm_ev_handler: function to handle FTM event
1037  *
1038  * lmac modules uses this API to post FTM events to FTM module
1039  */
1040 struct wlan_lmac_if_ftm_rx_ops {
1041 	QDF_STATUS (*ftm_ev_handler)(struct wlan_objmgr_pdev *pdev,
1042 					uint8_t *event_buf, uint32_t len);
1043 };
1044 
1045 /**
1046  * struct wlan_lmac_reg_if_tx_ops - structure of tx function
1047  *                  pointers for regulatory component
1048  * @register_master_handler: pointer to register event handler
1049  * @unregister_master_handler:  pointer to unregister event handler
1050  * @register_master_ext_handler: pointer to register ext event handler
1051  * @unregister_master_ext_handler: pointer to unregister ext event handler
1052  * @register_11d_new_cc_handler: pointer to register 11d cc event handler
1053  * @unregister_11d_new_cc_handler:  pointer to unregister 11d cc event handler
1054  * @send_ctl_info: call-back function to send CTL info to firmware
1055  * @set_tpc_power: send transmit power control info to firmware
1056  * @get_opclass_tbl_idx: Get opclass table index value
1057  * @send_afc_ind: send AFC indication info to firmware.
1058  * @register_afc_event_handler: pointer to register afc event handler
1059  * @unregister_afc_event_handler: pointer to unregister afc event handler
1060  * @trigger_acs_for_afc: pointer to trigger acs for afc
1061  */
1062 struct wlan_lmac_if_reg_tx_ops {
1063 	QDF_STATUS (*register_master_handler)(struct wlan_objmgr_psoc *psoc,
1064 					      void *arg);
1065 	QDF_STATUS (*unregister_master_handler)(struct wlan_objmgr_psoc *psoc,
1066 						void *arg);
1067 	QDF_STATUS (*register_master_ext_handler)(struct wlan_objmgr_psoc *psoc,
1068 						  void *arg);
1069 	QDF_STATUS (*unregister_master_ext_handler)
1070 				(struct wlan_objmgr_psoc *psoc, void *arg);
1071 	QDF_STATUS (*set_country_code)(struct wlan_objmgr_psoc *psoc,
1072 						void *arg);
1073 	QDF_STATUS (*fill_umac_legacy_chanlist)(struct wlan_objmgr_pdev *pdev,
1074 			struct regulatory_channel *cur_chan_list);
1075 	QDF_STATUS (*register_11d_new_cc_handler)(
1076 			struct wlan_objmgr_psoc *psoc, void *arg);
1077 	QDF_STATUS (*unregister_11d_new_cc_handler)(
1078 			struct wlan_objmgr_psoc *psoc, void *arg);
1079 	QDF_STATUS (*start_11d_scan)(struct wlan_objmgr_psoc *psoc,
1080 			struct reg_start_11d_scan_req *reg_start_11d_scan_req);
1081 	QDF_STATUS (*stop_11d_scan)(struct wlan_objmgr_psoc *psoc,
1082 			struct reg_stop_11d_scan_req *reg_stop_11d_scan_req);
1083 	bool (*is_there_serv_ready_extn)(struct wlan_objmgr_psoc *psoc);
1084 	QDF_STATUS (*set_user_country_code)(struct wlan_objmgr_psoc *psoc,
1085 					    uint8_t pdev_id,
1086 					    struct cc_regdmn_s *rd);
1087 	QDF_STATUS (*set_country_failed)(struct wlan_objmgr_pdev *pdev);
1088 	QDF_STATUS (*register_ch_avoid_event_handler)(
1089 			struct wlan_objmgr_psoc *psoc, void *arg);
1090 	QDF_STATUS (*unregister_ch_avoid_event_handler)(
1091 			struct wlan_objmgr_psoc *psoc, void *arg);
1092 	QDF_STATUS (*send_ctl_info)(struct wlan_objmgr_psoc *psoc,
1093 				    struct reg_ctl_params *params);
1094 	QDF_STATUS (*get_phy_id_from_pdev_id)(struct wlan_objmgr_psoc *psoc,
1095 					      uint8_t pdev_id, uint8_t *phy_id);
1096 	QDF_STATUS (*get_pdev_id_from_phy_id)(struct wlan_objmgr_psoc *psoc,
1097 					      uint8_t phy_id, uint8_t *pdev_id);
1098 	QDF_STATUS (*set_tpc_power)(struct wlan_objmgr_psoc *psoc,
1099 				    uint8_t vdev_id,
1100 				    struct reg_tpc_power_info *param);
1101 	QDF_STATUS (*get_opclass_tbl_idx)(struct wlan_objmgr_pdev *pdev,
1102 					  uint8_t *opclass_tbl_idx);
1103 #ifdef CONFIG_AFC_SUPPORT
1104 	QDF_STATUS (*send_afc_ind)(struct wlan_objmgr_psoc *psoc,
1105 				   uint8_t pdev_id,
1106 				   struct reg_afc_resp_rx_ind_info *param);
1107 	QDF_STATUS (*register_afc_event_handler)(struct wlan_objmgr_psoc *psoc,
1108 						 void *arg);
1109 	QDF_STATUS (*unregister_afc_event_handler)
1110 				(struct wlan_objmgr_psoc *psoc, void *arg);
1111 	QDF_STATUS (*trigger_acs_for_afc)(struct wlan_objmgr_pdev *pdev);
1112 
1113 	QDF_STATUS (*reg_get_min_psd) (struct wlan_objmgr_pdev *pdev,
1114 				       qdf_freq_t primary_freq,
1115 				       qdf_freq_t cen320,
1116 				       uint16_t punc_pattern, uint16_t bw,
1117 				       int16_t *min_psd);
1118 #endif
1119 	bool (*is_chip_11be)(struct wlan_objmgr_psoc *psoc,
1120 			     uint16_t phy_id);
1121 };
1122 
1123 /**
1124  * struct wlan_lmac_if_dfs_tx_ops - Function pointer to call offload/lmac
1125  *                                  functions from DFS module.
1126  * @dfs_enable:                         Enable DFS.
1127  * @dfs_get_caps:                       Get DFS capabilities.
1128  * @dfs_disable:                        Disable DFS
1129  * @dfs_gettsf64:                       Get tsf64 value.
1130  * @dfs_set_use_cac_prssi:              Set use_cac_prssi value.
1131  * @dfs_get_dfsdomain:                  Get DFS domain.
1132  * @dfs_is_countryCode_CHINA:           Check is country code CHINA.
1133  * @dfs_get_thresholds:                 Get thresholds.
1134  * @dfs_get_ext_busy:                   Get ext_busy.
1135  * @dfs_get_target_type:                Get target type.
1136  * @dfs_is_countryCode_KOREA_ROC3:      Check is county code Korea.
1137  * @dfs_get_ah_devid:                   Get ah devid.
1138  * @dfs_get_phymode_info:               Get phymode info.
1139  * @dfs_reg_ev_handler:                 Register dfs event handler.
1140  * @dfs_process_emulate_bang_radar_cmd: Process emulate bang radar test command.
1141  * @dfs_agile_ch_cfg_cmd:               Send Agile Channel Configuration command
1142  * @dfs_ocac_abort_cmd:                 Send Off-Channel CAC abort command.
1143  * @dfs_is_pdev_5ghz:                   Check if the given pdev is 5GHz.
1144  * @dfs_set_phyerr_filter_offload:      Config phyerr filter offload.
1145  * @dfs_is_tgt_bangradar_320_supp:      To check host DFS 320MHZ support or not
1146  * @dfs_is_tgt_radar_found_chan_freq_eq_center_freq:
1147  *                                      Check if chan_freq parameter of the
1148  *                                      radar found wmi event points to channel
1149  *                                      center.
1150  * @dfs_send_offload_enable_cmd:        Send dfs offload enable command to fw.
1151  * @dfs_host_dfs_check_support:         To check Host DFS confirmation feature
1152  *                                      support.
1153  * @dfs_send_avg_radar_params_to_fw:    Send average radar parameters to FW.
1154  * @dfs_send_usenol_pdev_param:         Send usenol pdev param to FW.
1155  * @dfs_send_subchan_marking_pdev_param: Send subchan marking pdev param to FW.
1156  * @dfs_check_mode_switch_state:        Find if HW mode switch is in progress.
1157  */
1158 
1159 struct wlan_lmac_if_dfs_tx_ops {
1160 	QDF_STATUS (*dfs_enable)(struct wlan_objmgr_pdev *pdev,
1161 			int *is_fastclk,
1162 			struct wlan_dfs_phyerr_param *param,
1163 			uint32_t dfsdomain);
1164 	QDF_STATUS (*dfs_get_caps)(struct wlan_objmgr_pdev *pdev,
1165 			struct wlan_dfs_caps *dfs_caps);
1166 	QDF_STATUS (*dfs_disable)(struct wlan_objmgr_pdev *pdev,
1167 			int no_cac);
1168 	QDF_STATUS (*dfs_gettsf64)(struct wlan_objmgr_pdev *pdev,
1169 			uint64_t *tsf64);
1170 	QDF_STATUS (*dfs_set_use_cac_prssi)(struct wlan_objmgr_pdev *pdev);
1171 	QDF_STATUS (*dfs_get_thresholds)(struct wlan_objmgr_pdev *pdev,
1172 			struct wlan_dfs_phyerr_param *param);
1173 	QDF_STATUS (*dfs_get_ext_busy)(struct wlan_objmgr_pdev *pdev,
1174 			int *dfs_ext_chan_busy);
1175 	QDF_STATUS (*dfs_get_target_type)(struct wlan_objmgr_pdev *pdev,
1176 			uint32_t *target_type);
1177 	QDF_STATUS (*dfs_get_ah_devid)(struct wlan_objmgr_pdev *pdev,
1178 			uint16_t *devid);
1179 	QDF_STATUS (*dfs_get_phymode_info)(struct wlan_objmgr_pdev *pdev,
1180 			uint32_t chan_mode,
1181 			uint32_t *mode_info,
1182 			bool is_2gvht_en);
1183 	QDF_STATUS (*dfs_reg_ev_handler)(struct wlan_objmgr_psoc *psoc);
1184 	QDF_STATUS (*dfs_process_emulate_bang_radar_cmd)(
1185 			struct wlan_objmgr_pdev *pdev,
1186 			struct dfs_emulate_bang_radar_test_cmd *dfs_unit_test);
1187 	QDF_STATUS (*dfs_agile_ch_cfg_cmd)(
1188 			struct wlan_objmgr_pdev *pdev,
1189 			struct dfs_agile_cac_params *adfs_params);
1190 	QDF_STATUS (*dfs_ocac_abort_cmd)(struct wlan_objmgr_pdev *pdev);
1191 	QDF_STATUS (*dfs_is_pdev_5ghz)(struct wlan_objmgr_pdev *pdev,
1192 			bool *is_5ghz);
1193 	QDF_STATUS (*dfs_set_phyerr_filter_offload)(
1194 			struct wlan_objmgr_pdev *pdev,
1195 			bool dfs_phyerr_filter_offload);
1196 	bool (*dfs_is_tgt_offload)(struct wlan_objmgr_psoc *psoc);
1197 	bool (*dfs_is_tgt_bangradar_320_supp)(struct wlan_objmgr_psoc *psoc);
1198 	bool (*dfs_is_tgt_radar_found_chan_freq_eq_center_freq)
1199 		 (struct wlan_objmgr_psoc *psoc);
1200 	QDF_STATUS (*dfs_send_offload_enable_cmd)(
1201 			struct wlan_objmgr_pdev *pdev,
1202 			bool enable);
1203 	QDF_STATUS (*dfs_host_dfs_check_support)(struct wlan_objmgr_pdev *pdev,
1204 						 bool *enabled);
1205 	QDF_STATUS (*dfs_send_avg_radar_params_to_fw)(
1206 			struct wlan_objmgr_pdev *pdev,
1207 			struct dfs_radar_found_params *params);
1208 	QDF_STATUS (*dfs_send_usenol_pdev_param)(struct wlan_objmgr_pdev *pdev,
1209 						 bool usenol);
1210 	QDF_STATUS (*dfs_send_subchan_marking_pdev_param)(
1211 			struct wlan_objmgr_pdev *pdev,
1212 			bool subchanmark);
1213 	QDF_STATUS (*dfs_check_mode_switch_state)(
1214 			struct wlan_objmgr_pdev *pdev,
1215 			bool *is_hw_mode_switch_in_progress);
1216 };
1217 
1218 /**
1219  * struct wlan_lmac_if_target_tx_ops - Function pointers to call target
1220  *                                     functions from other modules.
1221  * @tgt_is_tgt_type_ar900b:  To check AR900B target type.
1222  * @tgt_is_tgt_type_qca9984: To check QCA9984 target type.
1223  * @tgt_is_tgt_type_qca9888: To check QCA9888 target type.
1224  * @tgt_is_tgt_type_adrastea: To check QCS40X target type.
1225  * @tgt_is_tgt_type_qcn9000: To check QCN9000 (Pine) target type.
1226  * @tgt_is_tgt_type_qcn6122: To check QCN6122 (Spruce) target type.
1227  * @tgt_is_tgt_type_qcn7605: To check QCN7605 target type.
1228  * @tgt_get_tgt_type:        Get target type
1229  * @tgt_get_tgt_version:     Get target version
1230  * @tgt_get_tgt_revision:    Get target revision
1231  */
1232 struct wlan_lmac_if_target_tx_ops {
1233 	bool (*tgt_is_tgt_type_ar900b)(uint32_t);
1234 	bool (*tgt_is_tgt_type_qca9984)(uint32_t);
1235 	bool (*tgt_is_tgt_type_qca9888)(uint32_t);
1236 	bool (*tgt_is_tgt_type_adrastea)(uint32_t);
1237 	bool (*tgt_is_tgt_type_qcn9000)(uint32_t);
1238 	bool (*tgt_is_tgt_type_qcn6122)(uint32_t);
1239 	bool (*tgt_is_tgt_type_qcn9160)(uint32_t);
1240 	bool (*tgt_is_tgt_type_qcn7605)(uint32_t);
1241 	uint32_t (*tgt_get_tgt_type)(struct wlan_objmgr_psoc *psoc);
1242 	uint32_t (*tgt_get_tgt_version)(struct wlan_objmgr_psoc *psoc);
1243 	uint32_t (*tgt_get_tgt_revision)(struct wlan_objmgr_psoc *psoc);
1244 };
1245 
1246 #ifdef WLAN_OFFCHAN_TXRX_ENABLE
1247 /**
1248  * struct wlan_lmac_if_offchan_txrx_ops - Function pointers to check target
1249  *                                     capabilities related to offchan txrx.
1250  * @offchan_data_tid_support: To check if target supports separate tid for
1251  *                                     offchan data tx.
1252  */
1253 struct wlan_lmac_if_offchan_txrx_ops {
1254 	bool (*offchan_data_tid_support)(struct wlan_objmgr_pdev *pdev);
1255 };
1256 #endif
1257 
1258 struct wlan_green_ap_egap_params;
1259 
1260 #ifdef WLAN_SUPPORT_GAP_LL_PS_MODE
1261 /**
1262  * struct green_ap_ll_ps_cmd_param - structure of the parameter of
1263  * green AP low latency power save mode command
1264  * @state: SAP low power state.(0 = disable, 1 = enable)
1265  * @bcn_interval: beacon interval (in ms)
1266  * @cookie: Cookie ID. Unique identifier to track power save command.
1267  * The value is generated by wlan_green_ap_get_cookie_id().
1268  */
1269 
1270 struct green_ap_ll_ps_cmd_param {
1271 	uint8_t state;
1272 	uint16_t bcn_interval;
1273 	uint32_t cookie;
1274 };
1275 
1276 /**
1277  * struct wlan_green_ap_ll_ps_event_param - Green AP low latency Power Save
1278  * event parameter structure
1279  * @bcn_mult: Beacon multiplier
1280  * @dialog_token: Dialog token
1281  * @next_rsf: Next TSF
1282  */
1283 struct wlan_green_ap_ll_ps_event_param {
1284 	uint16_t bcn_mult;
1285 	uint32_t dialog_token;
1286 	uint64_t next_tsf;
1287 };
1288 #endif
1289 
1290 /**
1291  * struct wlan_lmac_if_green_ap_tx_ops - structure of tx function
1292  *                  pointers for green ap component
1293  * @enable_egap: function pointer to send enable egap indication to fw
1294  * @ps_on_off_send:  function pointer to send enable/disable green ap ps to fw
1295  * @reset_dev: Function pointer to reset device
1296  * @get_current_channel: function pointer to get current channel
1297  * @get_current_channel_flag: function pointer to get current channel flag
1298  * @get_capab: function pointer to get green ap capabilities
1299  * @ll_ps: function pointer to send low latency power save command
1300  */
1301 struct wlan_lmac_if_green_ap_tx_ops {
1302 	QDF_STATUS (*enable_egap)(struct wlan_objmgr_pdev *pdev,
1303 				struct wlan_green_ap_egap_params *egap_params);
1304 	QDF_STATUS (*ps_on_off_send)(struct wlan_objmgr_pdev *pdev,
1305 				     bool value, uint8_t pdev_id);
1306 	QDF_STATUS (*reset_dev)(struct wlan_objmgr_pdev *pdev);
1307 	uint16_t (*get_current_channel)(struct wlan_objmgr_pdev *pdev);
1308 	uint64_t (*get_current_channel_flags)(struct wlan_objmgr_pdev *pdev);
1309 	QDF_STATUS (*get_capab)(struct  wlan_objmgr_pdev *pdev);
1310 #ifdef WLAN_SUPPORT_GAP_LL_PS_MODE
1311 	QDF_STATUS (*ll_ps)(struct wlan_objmgr_vdev *vdev,
1312 			    struct green_ap_ll_ps_cmd_param *ll_ps_params);
1313 #endif
1314 };
1315 
1316 #ifdef FEATURE_COEX
1317 struct coex_config_params;
1318 
1319 /**
1320  * struct wlan_lmac_if_coex_tx_ops - south bound tx function pointers for coex
1321  * @coex_config_send: function pointer to send coex config to fw
1322  */
1323 struct wlan_lmac_if_coex_tx_ops {
1324 	QDF_STATUS (*coex_config_send)(struct wlan_objmgr_pdev *pdev,
1325 				       struct coex_config_params *param);
1326 };
1327 #endif
1328 
1329 #ifdef WLAN_FEATURE_DBAM_CONFIG
1330 /**
1331  * struct wlan_lmac_if_dbam_tx_ops - south bound tx function pointers for dbam
1332  * @set_dbam_config: function pointer to send dbam config to fw
1333  */
1334 struct wlan_lmac_if_dbam_tx_ops {
1335 	QDF_STATUS (*set_dbam_config)(struct wlan_objmgr_psoc *psoc,
1336 				      struct coex_dbam_config_params *param);
1337 	QDF_STATUS (*dbam_event_attach)(struct wlan_objmgr_psoc *psoc);
1338 	QDF_STATUS (*dbam_event_detach)(struct wlan_objmgr_psoc *psoc);
1339 };
1340 
1341 /**
1342  * struct wlan_lmac_if_dbam_rx_ops - defines southbound rx callback for dbam
1343  * @dbam_resp_event: function pointer to rx dbam response event from FW
1344  */
1345 struct wlan_lmac_if_dbam_rx_ops {
1346 	QDF_STATUS (*dbam_resp_event)(struct wlan_objmgr_psoc *psoc,
1347 				      enum coex_dbam_comp_status dbam_resp);
1348 };
1349 #endif
1350 
1351 #ifdef WLAN_FEATURE_GPIO_CFG
1352 struct gpio_config_params;
1353 struct gpio_output_params;
1354 
1355 /**
1356  * struct wlan_lmac_if_gpio_tx_ops - south bound tx function pointers for gpio
1357  * @set_gpio_config: function pointert to send gpio config to fw
1358  * @set_gpio_output: function pointert to send gpio output to fw
1359  */
1360 struct wlan_lmac_if_gpio_tx_ops {
1361 	QDF_STATUS (*set_gpio_config)(struct wlan_objmgr_psoc *psoc,
1362 				      struct gpio_config_params *param);
1363 	QDF_STATUS (*set_gpio_output)(struct wlan_objmgr_psoc *psoc,
1364 				      struct gpio_output_params *param);
1365 };
1366 #endif
1367 
1368 #ifdef IPA_OFFLOAD
1369 struct wlan_lmac_if_ipa_tx_ops {
1370 	QDF_STATUS (*ipa_uc_offload_control_req)(
1371 				struct wlan_objmgr_psoc *psoc,
1372 				struct ipa_uc_offload_control_params *req);
1373 	QDF_STATUS (*ipa_intrabss_control_req)(
1374 				struct wlan_objmgr_psoc *psoc,
1375 				struct ipa_intrabss_control_params *req);
1376 };
1377 #endif
1378 /**
1379  * wlan_lmac_if_son_tx_ops: son tx operations
1380  * son_send_null: send null packet
1381  * get_peer_rate: get peer rate
1382  * peer_ext_stats_enable: Enable peer ext stats
1383  */
1384 struct wlan_lmac_if_son_tx_ops {
1385 	/* Function pointer to enable/disable band steering */
1386 	QDF_STATUS (*son_send_null)(struct wlan_objmgr_pdev *pdev,
1387 				    u_int8_t *macaddr,
1388 				    struct wlan_objmgr_vdev *vdev);
1389 
1390 	u_int32_t  (*get_peer_rate)(struct wlan_objmgr_peer *peer,
1391 				    u_int8_t type);
1392 
1393 	QDF_STATUS (*peer_ext_stats_enable)(struct wlan_objmgr_pdev *pdev,
1394 					    u_int8_t *peer_addr,
1395 					    struct wlan_objmgr_vdev *vdev,
1396 					    u_int32_t stats_count,
1397 					    u_int32_t enable);
1398 };
1399 
1400 /**
1401  * wlan_lmac_if_son_rx_ops: son rx operations
1402  * deliver_event: deliver mlme and other mac events
1403  * process_mgmt_frame: process mgmt frames
1404  * config_set: route son config from cfg80211
1405  * config_get: route son config from cfg80211
1406  * config_ext_set_get: route extended configs from cfg80211
1407  */
1408 struct wlan_lmac_if_son_rx_ops {
1409 	int (*deliver_event)(struct wlan_objmgr_vdev *vdev,
1410 			     struct wlan_objmgr_peer *peer,
1411 			     uint32_t event,
1412 			     void *event_data);
1413 	int (*process_mgmt_frame)(struct wlan_objmgr_vdev *vdev,
1414 				  struct wlan_objmgr_peer *peer,
1415 				  int subtype, u_int8_t *frame,
1416 				  u_int16_t frame_len,
1417 				  void *meta_data);
1418 	int (*config_set)(struct wlan_objmgr_vdev *vdev,
1419 			  void *params);
1420 	int (*config_get)(struct wlan_objmgr_vdev *vdev,
1421 			  void *params);
1422 	int (*config_ext_set_get)(struct wlan_objmgr_vdev *vdev,
1423 				  void *params,
1424 				  void *wri);
1425 };
1426 
1427 #ifdef WLAN_FEATURE_11BE_MLO
1428 /**
1429  * struct wlan_lmac_if_mlo_tx_ops - south bound tx function pointers for mlo
1430  * @register_events: function to register event handlers with FW
1431  * @unregister_events: function to de-register event handlers with FW
1432  * @link_set_active: function to send mlo link set active command to FW
1433  * @send_tid_to_link_mapping: function to send T2LM command to FW
1434  * @send_link_removal_cmd: function to send MLO link removal command to FW
1435  */
1436 struct wlan_lmac_if_mlo_tx_ops {
1437 	QDF_STATUS (*register_events)(struct wlan_objmgr_psoc *psoc);
1438 	QDF_STATUS (*unregister_events)(struct wlan_objmgr_psoc *psoc);
1439 	QDF_STATUS (*link_set_active)(struct wlan_objmgr_psoc *psoc,
1440 		struct mlo_link_set_active_param *param);
1441 #ifdef WLAN_MLO_GLOBAL_SHMEM_SUPPORT
1442 	struct wlan_lmac_if_global_shmem_local_ops shmem_local_ops;
1443 #endif
1444 	QDF_STATUS (*send_tid_to_link_mapping)(struct wlan_objmgr_vdev *vdev,
1445 					       struct wlan_t2lm_info *t2lm);
1446 	QDF_STATUS (*send_link_removal_cmd)(
1447 		struct wlan_objmgr_psoc *psoc,
1448 		const struct mlo_link_removal_cmd_params *param);
1449 };
1450 
1451 /**
1452  * struct wlan_lmac_if_mlo_rx_ops - defines southbound rx callbacks for mlo
1453  * @process_link_set_active_resp: function pointer to rx FW events
1454  * @process_mlo_vdev_tid_to_link_map_event:  function pointer to rx T2LM event
1455  * @mlo_link_removal_handler: function pointer for MLO link removal handler
1456  */
1457 struct wlan_lmac_if_mlo_rx_ops {
1458 	QDF_STATUS
1459 	(*process_link_set_active_resp)(struct wlan_objmgr_psoc *psoc,
1460 		struct mlo_link_set_active_resp *event);
1461 	QDF_STATUS (*process_mlo_vdev_tid_to_link_map_event)(
1462 			struct wlan_objmgr_psoc *psoc,
1463 			struct mlo_vdev_host_tid_to_link_map_resp *event);
1464 	QDF_STATUS (*mlo_link_removal_handler)(
1465 			struct wlan_objmgr_psoc *psoc,
1466 			struct mlo_link_removal_evt_params *evt_params);
1467 };
1468 #endif
1469 
1470 #if defined(WLAN_SUPPORT_TWT) && defined(WLAN_TWT_CONV_SUPPORTED)
1471 /**
1472  * struct wlan_lmac_if_twt_tx_ops - defines southbound tx callbacks for
1473  * TWT (Target Wake Time) component
1474  * @enable_req: function pointer to send TWT enable command to FW
1475  * @disable_req: function pointer to send TWT disable command to FW
1476  * @setup_req: function pointer to send TWT add dialog command to FW
1477  * @teardown_req: function pointer to send TWT delete dialog command to FW
1478  * @pause_req: function pointer to send TWT pause dialog command to FW
1479  * @resume_req: function pointer to send TWT resume dialog command to FW
1480  * @nudge_req: function pointer to send TWT nudge dialog command to FW
1481  * @set_ac_param: function pointer to send TWT access category param to FW
1482  * @register_events: function pointer to register events from FW
1483  * @deregister_events: function pointer to deregister events from FW
1484  */
1485 struct wlan_lmac_if_twt_tx_ops {
1486 	QDF_STATUS (*enable_req)(struct wlan_objmgr_psoc *psoc,
1487 				 struct twt_enable_param *params);
1488 	QDF_STATUS (*disable_req)(struct wlan_objmgr_psoc *psoc,
1489 				 struct twt_disable_param *params);
1490 	QDF_STATUS (*setup_req)(struct wlan_objmgr_psoc *psoc,
1491 				 struct twt_add_dialog_param *params);
1492 	QDF_STATUS (*teardown_req)(struct wlan_objmgr_psoc *psoc,
1493 				 struct twt_del_dialog_param *params);
1494 	QDF_STATUS (*pause_req)(struct wlan_objmgr_psoc *psoc,
1495 				 struct twt_pause_dialog_cmd_param *params);
1496 	QDF_STATUS (*resume_req)(struct wlan_objmgr_psoc *psoc,
1497 				 struct twt_resume_dialog_cmd_param *params);
1498 	QDF_STATUS (*nudge_req)(struct wlan_objmgr_psoc *psoc,
1499 				 struct twt_nudge_dialog_cmd_param *params);
1500 	QDF_STATUS (*set_ac_param)(struct wlan_objmgr_psoc *psoc,
1501 				   enum twt_traffic_ac twt_ac, uint8_t mac_id);
1502 	QDF_STATUS (*register_events)(struct wlan_objmgr_psoc *psoc);
1503 	QDF_STATUS (*deregister_events)(struct wlan_objmgr_psoc *psoc);
1504 };
1505 
1506 /**
1507  * struct wlan_lmac_if_twt_rx_ops - defines southbound xx callbacks for
1508  * TWT (Target Wake Time) component
1509  * @twt_enable_comp_cb: function pointer to process TWT enable event
1510  * @twt_disable_comp_cb: function pointer to process TWT disable event
1511  * @twt_setup_comp_cb: function pointer to process TWT add dialog event
1512  * @twt_teardown_comp_cb: function pointer to process TWT del dialog event
1513  * @twt_pause_comp_cb: function pointer to process TWT pause dialog event
1514  * @twt_resume_comp_cb: function pointer to process TWT resume dialog
1515  * event
1516  * @twt_nudge_comp_cb: function pointer to process TWT nudge dialog event
1517  * @twt_notify_comp_cb: function pointer to process TWT notify event
1518  * @twt_ack_comp_cb: function pointer to process TWT ack event
1519  */
1520 struct wlan_lmac_if_twt_rx_ops {
1521 	QDF_STATUS (*twt_enable_comp_cb)(struct wlan_objmgr_psoc *psoc,
1522 			struct twt_enable_complete_event_param *event);
1523 	QDF_STATUS (*twt_disable_comp_cb)(struct wlan_objmgr_psoc *psoc,
1524 			struct twt_disable_complete_event_param *event);
1525 	QDF_STATUS (*twt_setup_comp_cb)(struct wlan_objmgr_psoc *psoc,
1526 			struct twt_add_dialog_complete_event *event);
1527 	QDF_STATUS (*twt_teardown_comp_cb)(struct wlan_objmgr_psoc *psoc,
1528 			struct twt_del_dialog_complete_event_param *event);
1529 	QDF_STATUS (*twt_pause_comp_cb)(struct wlan_objmgr_psoc *psoc,
1530 			struct twt_pause_dialog_complete_event_param *event);
1531 	QDF_STATUS (*twt_resume_comp_cb)(struct wlan_objmgr_psoc *psoc,
1532 			struct twt_resume_dialog_complete_event_param *event);
1533 	QDF_STATUS (*twt_nudge_comp_cb)(struct wlan_objmgr_psoc *psoc,
1534 			struct twt_nudge_dialog_complete_event_param *event);
1535 	QDF_STATUS (*twt_notify_comp_cb)(struct wlan_objmgr_psoc *psoc,
1536 			struct twt_notify_event_param *event);
1537 	QDF_STATUS (*twt_ack_comp_cb)(struct wlan_objmgr_psoc *psoc,
1538 			struct twt_ack_complete_event_param *params);
1539 };
1540 #endif
1541 
1542 #if defined WLAN_FEATURE_SR
1543 struct wlan_lmac_if_spatial_reuse_tx_ops {
1544 	QDF_STATUS (*send_cfg)(struct wlan_objmgr_vdev *vdev, uint8_t sr_ctrl,
1545 			       uint8_t non_srg_max_pd_offset);
1546 	QDF_STATUS (*send_sr_prohibit_cfg)(struct wlan_objmgr_vdev *vdev,
1547 					   bool he_siga_val15_allowed);
1548 	QDF_STATUS(*target_if_set_sr_enable_disable)(
1549 				struct wlan_objmgr_vdev *vdev,
1550 				struct wlan_objmgr_pdev *pdev,
1551 				bool is_sr_enable, int32_t srg_pd_threshold,
1552 				int32_t non_srg_pd_threshold);
1553 };
1554 #endif
1555 
1556 #ifdef WLAN_FEATURE_COAP
1557 /**
1558  * struct wlan_lmac_if_coap_tx_ops - south bound tx function pointers for CoAP
1559  * @attach: function pointer to attach CoAP component
1560  * @detach: function pointer to detach CoAP component
1561  * @offload_reply_enable: function pointer to enable CoAP offload reply
1562  * @offload_reply_disable: function pointer to disable CoAP offload reply
1563  * @offload_periodic_tx_enable: function pointer to enable CoAP offload
1564  * periodic transmitting
1565  * @offload_periodic_tx_disable: function pointer to disable CoAP offload
1566  * periodic transmitting
1567  * @offload_cache_get: function pointer to get cached CoAP messages
1568  */
1569 struct wlan_lmac_if_coap_tx_ops {
1570 	QDF_STATUS (*attach)(struct wlan_objmgr_psoc *psoc);
1571 	QDF_STATUS (*detach)(struct wlan_objmgr_psoc *psoc);
1572 	QDF_STATUS (*offload_reply_enable)(struct wlan_objmgr_vdev *vdev,
1573 			struct coap_offload_reply_param *param);
1574 	QDF_STATUS (*offload_reply_disable)(struct wlan_objmgr_vdev *vdev,
1575 					    uint32_t req_id);
1576 	QDF_STATUS (*offload_periodic_tx_enable)(struct wlan_objmgr_vdev *vdev,
1577 			struct coap_offload_periodic_tx_param *param);
1578 	QDF_STATUS (*offload_periodic_tx_disable)(struct wlan_objmgr_vdev *vdev,
1579 						  uint32_t req_id);
1580 	QDF_STATUS (*offload_cache_get)(struct wlan_objmgr_vdev *vdev,
1581 					uint32_t req_id);
1582 };
1583 #endif
1584 
1585 /**
1586  * struct wlan_lmac_if_tx_ops - south bound tx function pointers
1587  * @mgmt_txrx_tx_ops: mgmt txrx tx ops
1588  * @scan: scan tx ops
1589  * @dfs_tx_ops: dfs tx ops.
1590  * @green_ap_tx_ops: green_ap tx_ops
1591  * @cp_stats_tx_ops: cp stats tx_ops
1592  * @coex_ops: coex tx_ops
1593  * @gpio_ops: gpio tx_ops
1594  * @dbam_tx_ops: coex dbam tx_ops
1595  *
1596  * Callback function tabled to be registered with umac.
1597  * umac will use the functional table to send events/frames to wmi
1598  */
1599 
1600 struct wlan_lmac_if_tx_ops {
1601 	/* Components to declare function pointers required by the module
1602 	 * in component specific structure.
1603 	 * The component specific ops structure can be declared in this file
1604 	 * only
1605 	 */
1606 	 struct wlan_lmac_if_mgmt_txrx_tx_ops mgmt_txrx_tx_ops;
1607 	 struct wlan_lmac_if_scan_tx_ops scan;
1608 #ifdef CONVERGED_P2P_ENABLE
1609 	struct wlan_lmac_if_p2p_tx_ops p2p;
1610 #endif
1611 #ifdef WLAN_IOT_SIM_SUPPORT
1612 	struct wlan_lmac_if_iot_sim_tx_ops iot_sim_tx_ops;
1613 #endif
1614 #if defined(QCA_SUPPORT_SON) || defined(WLAN_FEATURE_SON)
1615 	struct wlan_lmac_if_son_tx_ops son_tx_ops;
1616 #endif
1617 #ifdef WLAN_ATF_ENABLE
1618 	struct wlan_lmac_if_atf_tx_ops atf_tx_ops;
1619 #endif
1620 #ifdef QCA_SUPPORT_CP_STATS
1621 	struct wlan_lmac_if_cp_stats_tx_ops cp_stats_tx_ops;
1622 #endif
1623 #ifdef DCS_INTERFERENCE_DETECTION
1624 	struct wlan_target_if_dcs_tx_ops dcs_tx_ops;
1625 #endif
1626 #ifdef WLAN_SA_API_ENABLE
1627 	struct wlan_lmac_if_sa_api_tx_ops sa_api_tx_ops;
1628 #endif
1629 
1630 #ifdef WLAN_CFR_ENABLE
1631 	struct wlan_lmac_if_cfr_tx_ops cfr_tx_ops;
1632 #endif
1633 
1634 #ifdef WLAN_CONV_SPECTRAL_ENABLE
1635 	struct wlan_lmac_if_sptrl_tx_ops sptrl_tx_ops;
1636 #endif
1637 
1638 	struct wlan_lmac_if_crypto_tx_ops crypto_tx_ops;
1639 
1640 #ifdef WIFI_POS_CONVERGED
1641 	struct wlan_lmac_if_wifi_pos_tx_ops wifi_pos_tx_ops;
1642 #endif
1643 	struct wlan_lmac_if_reg_tx_ops reg_ops;
1644 	struct wlan_lmac_if_dfs_tx_ops dfs_tx_ops;
1645 
1646 #ifdef FEATURE_WLAN_TDLS
1647 	struct wlan_lmac_if_tdls_tx_ops tdls_tx_ops;
1648 #endif
1649 
1650 #ifdef WLAN_SUPPORT_FILS
1651 	struct wlan_lmac_if_fd_tx_ops fd_tx_ops;
1652 #endif
1653 	 struct wlan_lmac_if_mlme_tx_ops mops;
1654 	 struct wlan_lmac_if_target_tx_ops target_tx_ops;
1655 
1656 #ifdef WLAN_OFFCHAN_TXRX_ENABLE
1657 	struct wlan_lmac_if_offchan_txrx_ops offchan_txrx_ops;
1658 #endif
1659 
1660 #ifdef DIRECT_BUF_RX_ENABLE
1661 	struct wlan_lmac_if_direct_buf_rx_tx_ops dbr_tx_ops;
1662 #endif
1663 
1664 #ifdef WLAN_SUPPORT_GREEN_AP
1665 	 struct wlan_lmac_if_green_ap_tx_ops green_ap_tx_ops;
1666 #endif
1667 
1668 	struct wlan_lmac_if_ftm_tx_ops ftm_tx_ops;
1669 
1670 #ifdef FEATURE_COEX
1671 	struct wlan_lmac_if_coex_tx_ops coex_ops;
1672 #endif
1673 
1674 #ifdef WLAN_FEATURE_DBAM_CONFIG
1675 	struct wlan_lmac_if_dbam_tx_ops dbam_tx_ops;
1676 #endif
1677 
1678 #ifdef WLAN_FEATURE_GPIO_CFG
1679 	struct wlan_lmac_if_gpio_tx_ops gpio_ops;
1680 #endif
1681 
1682 #ifdef WLAN_FEATURE_11BE_MLO
1683 	struct wlan_lmac_if_mlo_tx_ops mlo_ops;
1684 #endif
1685 
1686 #ifdef IPA_OFFLOAD
1687 	struct wlan_lmac_if_ipa_tx_ops ipa_ops;
1688 #endif
1689 
1690 #if defined(WLAN_SUPPORT_TWT) && defined(WLAN_TWT_CONV_SUPPORTED)
1691 	struct wlan_lmac_if_twt_tx_ops twt_tx_ops;
1692 #endif
1693 
1694 #if defined WLAN_FEATURE_SR
1695 	struct wlan_lmac_if_spatial_reuse_tx_ops spatial_reuse_tx_ops;
1696 #endif
1697 
1698 #ifdef WLAN_FEATURE_COAP
1699 	struct wlan_lmac_if_coap_tx_ops coap_ops;
1700 #endif
1701 };
1702 
1703 /**
1704  * struct wlan_lmac_if_mgmt_txrx_rx_ops - structure of rx function
1705  *                  pointers for mgmt txrx component
1706  * @mgmt_tx_completion_handler: function pointer to give tx completions
1707  *                              to mgmt txrx comp.
1708  * @mgmt_rx_frame_handler: function pointer to give rx frame to mgmt txrx comp.
1709  * @mgmt_txrx_get_nbuf_from_desc_id: function pointer to get nbuf from desc id
1710  * @mgmt_txrx_get_peer_from_desc_id: function pointer to get peer from desc id
1711  * @mgmt_txrx_get_vdev_id_from_desc_id: function pointer to get vdev id from
1712  *                                      desc id
1713  * @mgmt_rx_frame_entry: Entry point for Rx frames into MGMT TxRx component
1714  * @mgmt_rx_reo_rx_ops: rxops of MGMT Rx REO module
1715  */
1716 struct wlan_lmac_if_mgmt_txrx_rx_ops {
1717 	QDF_STATUS (*mgmt_tx_completion_handler)(
1718 			struct wlan_objmgr_pdev *pdev,
1719 			uint32_t desc_id, uint32_t status,
1720 			void *tx_compl_params);
1721 	QDF_STATUS (*mgmt_rx_frame_handler)(
1722 			struct wlan_objmgr_psoc *psoc,
1723 			qdf_nbuf_t buf,
1724 			struct mgmt_rx_event_params *mgmt_rx_params);
1725 	qdf_nbuf_t (*mgmt_txrx_get_nbuf_from_desc_id)(
1726 			struct wlan_objmgr_pdev *pdev,
1727 			uint32_t desc_id);
1728 	struct wlan_objmgr_peer * (*mgmt_txrx_get_peer_from_desc_id)(
1729 			struct wlan_objmgr_pdev *pdev, uint32_t desc_id);
1730 	uint8_t (*mgmt_txrx_get_vdev_id_from_desc_id)(
1731 			struct wlan_objmgr_pdev *pdev,
1732 			uint32_t desc_id);
1733 	uint32_t (*mgmt_txrx_get_free_desc_pool_count)(
1734 			struct wlan_objmgr_pdev *pdev);
1735 	QDF_STATUS (*mgmt_rx_frame_entry)(
1736 			struct wlan_objmgr_pdev *pdev,
1737 			qdf_nbuf_t buf,
1738 			struct mgmt_rx_event_params *mgmt_rx_params);
1739 #ifdef WLAN_MGMT_RX_REO_SUPPORT
1740 	struct wlan_lmac_if_mgmt_rx_reo_rx_ops mgmt_rx_reo_rx_ops;
1741 #endif
1742 };
1743 
1744 /**
1745  * struct wlan_lmac_if_reg_rx_ops - structure of rx function pointers
1746  * @reg_display_super_chan_list: function pointer to print super channel list
1747  */
1748 struct wlan_lmac_if_reg_rx_ops {
1749 	QDF_STATUS (*master_list_handler)(struct cur_regulatory_info
1750 					  *reg_info);
1751 #ifdef CONFIG_BAND_6GHZ
1752 	QDF_STATUS (*master_list_ext_handler)(struct cur_regulatory_info
1753 					      *reg_info);
1754 #ifdef CONFIG_AFC_SUPPORT
1755 	QDF_STATUS (*afc_event_handler)(struct afc_regulatory_info *afc_info);
1756 #endif
1757 #endif
1758 	QDF_STATUS (*reg_11d_new_cc_handler)(struct wlan_objmgr_psoc *psoc,
1759 			struct reg_11d_new_country *reg_11d_new_cc);
1760 	QDF_STATUS (*reg_set_regdb_offloaded)(struct wlan_objmgr_psoc *psoc,
1761 			bool val);
1762 	QDF_STATUS (*reg_set_11d_offloaded)(struct wlan_objmgr_psoc *psoc,
1763 			bool val);
1764 	QDF_STATUS (*reg_set_6ghz_supported)(struct wlan_objmgr_psoc *psoc,
1765 					     bool val);
1766 	QDF_STATUS (*reg_set_5dot9_ghz_supported)(struct wlan_objmgr_psoc
1767 						  *psoc, bool val);
1768 	QDF_STATUS (*get_dfs_region)(struct wlan_objmgr_pdev *pdev,
1769 			enum dfs_reg *dfs_reg);
1770 	QDF_STATUS (*reg_ch_avoid_event_handler)(struct wlan_objmgr_psoc *psoc,
1771 			struct ch_avoid_ind_type *ch_avoid_ind);
1772 	uint8_t (*reg_freq_to_chan)(struct wlan_objmgr_pdev *pdev,
1773 				    qdf_freq_t freq);
1774 	QDF_STATUS (*reg_set_chan_144)(struct wlan_objmgr_pdev *pdev,
1775 			bool enable_ch_144);
1776 	bool (*reg_get_chan_144)(struct wlan_objmgr_pdev *pdev);
1777 #ifdef WLAN_REG_PARTIAL_OFFLOAD
1778 	QDF_STATUS (*reg_program_default_cc)(struct wlan_objmgr_pdev *pdev,
1779 			uint16_t regdmn);
1780 	QDF_STATUS (*reg_get_current_regdomain)(struct wlan_objmgr_pdev *pdev,
1781 			struct cur_regdmn_info *cur_regdmn);
1782 #endif
1783 	QDF_STATUS (*reg_enable_dfs_channels)(struct wlan_objmgr_pdev *pdev,
1784 					      bool dfs_enable);
1785 	QDF_STATUS (*reg_modify_pdev_chan_range)(struct
1786 						 wlan_objmgr_pdev *pdev);
1787 	QDF_STATUS
1788 	(*reg_update_pdev_wireless_modes)(struct wlan_objmgr_pdev *pdev,
1789 					  uint64_t wireless_modes);
1790 	bool
1791 	(*reg_is_range_only6g)(qdf_freq_t low_freq, qdf_freq_t high_freq);
1792 	bool
1793 	(*reg_is_range_overlap_6g)(qdf_freq_t low_freq, qdf_freq_t high_freq);
1794 	QDF_STATUS (*reg_disable_chan_coex)(struct wlan_objmgr_pdev *pdev,
1795 					    uint8_t unii_5g_bitmap);
1796 	bool (*reg_ignore_fw_reg_offload_ind)(struct wlan_objmgr_psoc *psoc);
1797 	QDF_STATUS (*reg_get_unii_5g_bitmap)(struct wlan_objmgr_pdev *pdev,
1798 					     uint8_t *bitmap);
1799 	QDF_STATUS (*reg_set_ext_tpc_supported)(struct wlan_objmgr_psoc *psoc,
1800 						bool val);
1801 #if defined(CONFIG_BAND_6GHZ)
1802 	QDF_STATUS
1803 	(*reg_set_lower_6g_edge_ch_supp)(struct wlan_objmgr_psoc *psoc,
1804 					 bool val);
1805 	QDF_STATUS
1806 	(*reg_set_disable_upper_6g_edge_ch_supp)(struct wlan_objmgr_psoc *psoc,
1807 						 bool val);
1808 	QDF_STATUS
1809 	(*reg_display_super_chan_list)(struct wlan_objmgr_pdev *pdev);
1810 #endif
1811 
1812 #ifdef CONFIG_AFC_SUPPORT
1813 	QDF_STATUS
1814 	(*reg_set_afc_dev_type)(struct wlan_objmgr_psoc *psoc,
1815 				enum reg_afc_dev_deploy_type
1816 				reg_afc_dev_type);
1817 	QDF_STATUS
1818 	(*reg_get_afc_dev_type)(struct wlan_objmgr_psoc *psoc,
1819 				enum reg_afc_dev_deploy_type
1820 				*reg_afc_dev_type);
1821 	QDF_STATUS
1822 	(*reg_set_eirp_preferred_support)(
1823 				struct wlan_objmgr_psoc *psoc,
1824 				bool reg_is_eirp_support_preferred);
1825 	QDF_STATUS
1826 	(*reg_get_eirp_preferred_support)(
1827 				struct wlan_objmgr_psoc *psoc,
1828 				bool *reg_is_eirp_support_preferred);
1829 #endif
1830 };
1831 
1832 #ifdef CONVERGED_P2P_ENABLE
1833 
1834 /* forward declarations for p2p rx ops */
1835 struct p2p_noa_info;
1836 struct p2p_lo_event;
1837 struct p2p_set_mac_filter_evt;
1838 struct mcc_quota_info;
1839 
1840 /**
1841  * struct wlan_lmac_if_p2p_rx_ops - structure of rx function pointers
1842  * for P2P component
1843  * @lo_ev_handler:    function pointer to give listen offload event
1844  * @noa_ev_handler:   function pointer to give noa event
1845  * @add_mac_addr_filter_evt_handler: function pointer to process add mac addr
1846  *    rx filter event
1847  * @mcc_quota_ev_handler:   function pointer to receive mcc quota event
1848  */
1849 struct wlan_lmac_if_p2p_rx_ops {
1850 #ifdef FEATURE_P2P_LISTEN_OFFLOAD
1851 	QDF_STATUS (*lo_ev_handler)(struct wlan_objmgr_psoc *psoc,
1852 		struct p2p_lo_event *event_info);
1853 #endif
1854 	QDF_STATUS (*noa_ev_handler)(struct wlan_objmgr_psoc *psoc,
1855 		struct p2p_noa_info *event_info);
1856 	QDF_STATUS (*add_mac_addr_filter_evt_handler)(
1857 		struct wlan_objmgr_psoc *psoc,
1858 		struct p2p_set_mac_filter_evt *event_info);
1859 #ifdef WLAN_FEATURE_MCC_QUOTA
1860 	QDF_STATUS (*mcc_quota_ev_handler)(struct wlan_objmgr_psoc *psoc,
1861 					   struct mcc_quota_info *event_info);
1862 #endif
1863 };
1864 #endif
1865 
1866 #ifdef WLAN_ATF_ENABLE
1867 
1868 /**
1869  * struct wlan_lmac_if_atf_rx_ops - ATF south bound rx function pointers
1870  * @atf_get_fmcap:                     Get firmware capability for ATF
1871  * @atf_get_mode:                      Get mode of ATF
1872  * @atf_get_msdu_desc:                 Get msdu desc for ATF
1873  * @atf_get_max_vdevs:                 Get maximum vdevs for a Radio
1874  * @atf_get_peers:                     Get number of peers for a radio
1875  * @atf_get_tput_based:                Get throughput based enabled/disabled
1876  * @atf_get_logging:                   Get logging enabled/disabled
1877  * @atf_get_ssidgroup:                 Get ssid group state
1878  * @atf_get_vdev_ac_blk_cnt:           Get AC block count for vdev
1879  * @atf_get_peer_blk_txbitmap:         Get peer tx traffic AC bitmap
1880  * @atf_get_vdev_blk_txtraffic:        Get vdev tx traffic block state
1881  * @atf_get_sched:                     Get ATF scheduled policy
1882  * @atf_get_peer_stats:                Get atf peer stats
1883  * @atf_get_token_allocated:           Get atf token allocated
1884  * @atf_get_token_utilized:            Get atf token utilized
1885  * @atf_set_sched:                     Set ATF schedule policy
1886  * @atf_set_fmcap:                     Set firmware capability for ATF
1887  * @atf_set_msdu_desc:                 Set msdu desc
1888  * @atf_set_max_vdevs:                 Set maximum vdevs number
1889  * @atf_set_peers:                     Set peers number
1890  * @atf_set_peer_stats:                Set peer stats
1891  * @atf_set_vdev_blk_txtraffic:        Set Block/unblock vdev tx traffic
1892  * @atf_peer_blk_txtraffic:            Block peer tx traffic
1893  * @atf_peer_unblk_txtraffic:          Unblock peer tx traffic
1894  * @atf_set_token_allocated:           Set atf token allocated
1895  * @atf_set_token_utilized:            Set atf token utilized
1896  * @atf_process_tx_ppdu_stats:         Process Tx PPDU stats to get ATF stats
1897  * @atf_process_rx_ppdu_stats:         Process Rx PPDU stats to get ATF stats
1898  * @atf_is_stats_enabled:              Check ATF stats enabled or not
1899  */
1900 struct wlan_lmac_if_atf_rx_ops {
1901 	uint32_t (*atf_get_fmcap)(struct wlan_objmgr_psoc *psoc);
1902 	uint32_t (*atf_get_mode)(struct wlan_objmgr_psoc *psoc);
1903 	uint32_t (*atf_get_msdu_desc)(struct wlan_objmgr_psoc *psoc);
1904 	uint32_t (*atf_get_max_vdevs)(struct wlan_objmgr_psoc *psoc);
1905 	uint32_t (*atf_get_peers)(struct wlan_objmgr_psoc *psoc);
1906 	uint32_t (*atf_get_tput_based)(struct wlan_objmgr_pdev *pdev);
1907 	uint32_t (*atf_get_logging)(struct wlan_objmgr_pdev *pdev);
1908 	uint32_t (*atf_get_ssidgroup)(struct wlan_objmgr_pdev *pdev);
1909 	uint32_t (*atf_get_vdev_ac_blk_cnt)(struct wlan_objmgr_vdev *vdev);
1910 	uint8_t (*atf_get_peer_blk_txbitmap)(struct wlan_objmgr_peer *peer);
1911 	uint8_t (*atf_get_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev);
1912 	uint32_t (*atf_get_sched)(struct wlan_objmgr_pdev *pdev);
1913 	void (*atf_get_peer_stats)(struct wlan_objmgr_peer *peer,
1914 				   struct atf_stats *stats);
1915 	uint16_t (*atf_get_token_allocated)(struct wlan_objmgr_peer *peer);
1916 	uint16_t (*atf_get_token_utilized)(struct wlan_objmgr_peer *peer);
1917 	void (*atf_set_sched)(struct wlan_objmgr_pdev *pdev, uint32_t value);
1918 	void (*atf_set_fmcap)(struct wlan_objmgr_psoc *psoc, uint32_t value);
1919 	void (*atf_set_msdu_desc)(struct wlan_objmgr_psoc *psoc,
1920 				  uint32_t value);
1921 	void (*atf_set_max_vdevs)(struct wlan_objmgr_psoc *psoc,
1922 				  uint32_t value);
1923 	void (*atf_set_peers)(struct wlan_objmgr_psoc *psoc, uint32_t value);
1924 	void (*atf_set_peer_stats)(struct wlan_objmgr_peer *peer,
1925 				   struct atf_stats *stats);
1926 	void (*atf_set_vdev_blk_txtraffic)(struct wlan_objmgr_vdev *vdev,
1927 					   uint8_t value);
1928 	void (*atf_peer_blk_txtraffic)(struct wlan_objmgr_peer *peer,
1929 				       int8_t ac_id);
1930 	void (*atf_peer_unblk_txtraffic)(struct wlan_objmgr_peer *peer,
1931 					 int8_t ac_id);
1932 	void (*atf_set_token_allocated)(struct wlan_objmgr_peer *peer,
1933 					uint16_t value);
1934 	void (*atf_set_token_utilized)(struct wlan_objmgr_peer *peer,
1935 				       uint16_t value);
1936 	void (*atf_process_tx_ppdu_stats)(struct wlan_objmgr_pdev *pdev,
1937 					  qdf_nbuf_t msg);
1938 	void (*atf_process_rx_ppdu_stats)(struct wlan_objmgr_pdev *pdev,
1939 					  qdf_nbuf_t msg);
1940 	uint8_t (*atf_is_stats_enabled)(struct wlan_objmgr_pdev *pdev);
1941 };
1942 #endif
1943 
1944 #ifdef WLAN_SUPPORT_FILS
1945 /**
1946  * struct wlan_lmac_if_fd_rx_ops - FILS Discovery specific Rx function pointers
1947  * @fd_is_fils_enable:      FILS enabled or not
1948  * @fd_alloc:               Allocate FD buffer
1949  * @fd_stop:                Stop and free deferred FD buffer
1950  * @fd_free:                Free FD frame buffer
1951  * @fd_get_valid_fd_period: Get valid FD period
1952  * @fd_swfda_handler:       SWFDA event handler
1953  * @fd_offload:             Offload FD frame
1954  * @fd_tmpl_update:         Update the FD frame template
1955  */
1956 struct wlan_lmac_if_fd_rx_ops {
1957 	uint8_t (*fd_is_fils_enable)(struct wlan_objmgr_vdev *vdev);
1958 	void (*fd_alloc)(struct wlan_objmgr_vdev *vdev);
1959 	void (*fd_stop)(struct wlan_objmgr_vdev *vdev);
1960 	void (*fd_free)(struct wlan_objmgr_vdev *vdev);
1961 	uint32_t (*fd_get_valid_fd_period)(struct wlan_objmgr_vdev *vdev,
1962 					   uint8_t *is_modified);
1963 	QDF_STATUS (*fd_swfda_handler)(struct wlan_objmgr_vdev *vdev);
1964 	QDF_STATUS (*fd_offload)(struct wlan_objmgr_vdev *vdev,
1965 				 uint32_t vdev_id);
1966 	QDF_STATUS (*fd_tmpl_update)(struct wlan_objmgr_vdev *vdev);
1967 };
1968 #endif
1969 
1970 #ifdef WLAN_SA_API_ENABLE
1971 
1972 /**
1973  * struct wlan_lmac_if_sa_api_rx_ops - SA API south bound rx function pointers
1974  */
1975 struct wlan_lmac_if_sa_api_rx_ops {
1976 	uint32_t (*sa_api_get_sa_supported)(struct wlan_objmgr_psoc *psoc);
1977 	uint32_t (*sa_api_get_validate_sw)(struct wlan_objmgr_psoc *psoc);
1978 	void (*sa_api_enable_sa)(struct wlan_objmgr_psoc *psoc, uint32_t value);
1979 	uint32_t (*sa_api_get_sa_enable)(struct wlan_objmgr_psoc *psoc);
1980 	void (*sa_api_peer_assoc_hanldler)(struct wlan_objmgr_pdev *pdev,
1981 			struct wlan_objmgr_peer *peer, struct sa_rate_cap *);
1982 	uint32_t (*sa_api_update_tx_feedback)(struct wlan_objmgr_pdev *pdev,
1983 			struct wlan_objmgr_peer *peer,
1984 			struct sa_tx_feedback *feedback);
1985 	uint32_t (*sa_api_update_rx_feedback)(struct wlan_objmgr_pdev *pdev,
1986 			struct wlan_objmgr_peer *peer,
1987 			struct sa_rx_feedback *feedback);
1988 	uint32_t (*sa_api_ucfg_set_param)(struct wlan_objmgr_pdev *pdev,
1989 			char *val);
1990 	uint32_t (*sa_api_ucfg_get_param)(struct wlan_objmgr_pdev *pdev,
1991 			char *val);
1992 	uint32_t (*sa_api_is_tx_feedback_enabled)
1993 			(struct wlan_objmgr_pdev *pdev);
1994 	uint32_t (*sa_api_is_rx_feedback_enabled)
1995 			(struct wlan_objmgr_pdev *pdev);
1996 	uint32_t (*sa_api_convert_rate_2g)(uint32_t rate);
1997 	uint32_t (*sa_api_convert_rate_5g)(uint32_t rate);
1998 	uint32_t (*sa_api_get_sa_mode)(struct wlan_objmgr_pdev *pdev);
1999 	uint32_t (*sa_api_get_beacon_txantenna)(struct wlan_objmgr_pdev *pdev);
2000 	uint32_t (*sa_api_cwm_action)(struct wlan_objmgr_pdev *pdev);
2001 };
2002 #endif
2003 
2004 #ifdef WLAN_CFR_ENABLE
2005 
2006 /**
2007  * struct wlan_lmac_if_cfr_rx_ops - CFR south bound rx function pointers
2008  * @cfr_support_set: Set the CFR support based on FW advert
2009  * @cfr_info_send: Send cfr info to upper layers
2010  * @cfr_capture_count_support_set: Set the capture_count support based on FW
2011  * advert
2012  * @cfr_mo_marking_support_set: Set MO marking supported based on FW advert
2013  * @cfr_aoa_for_rcc_support_set: Set AoA for RCC support based on FW advert
2014  */
2015 struct wlan_lmac_if_cfr_rx_ops {
2016 	void (*cfr_support_set)(struct wlan_objmgr_psoc *psoc, uint32_t value);
2017 	uint32_t (*cfr_info_send)(struct wlan_objmgr_pdev *pdev, void *head,
2018 				  size_t hlen, void *data, size_t dlen,
2019 				  void *tail, size_t tlen);
2020 	QDF_STATUS (*cfr_capture_count_support_set)(
2021 			struct wlan_objmgr_psoc *psoc, uint32_t value);
2022 	QDF_STATUS (*cfr_mo_marking_support_set)(struct wlan_objmgr_psoc *psoc,
2023 						 uint32_t value);
2024 	QDF_STATUS (*cfr_aoa_for_rcc_support_set)(
2025 			struct wlan_objmgr_psoc *psoc, uint32_t value);
2026 };
2027 #endif
2028 
2029 #ifdef WLAN_CONV_SPECTRAL_ENABLE
2030 /**
2031  * struct wlan_lmac_if_sptrl_rx_ops - Spectral south bound Rx operations
2032  *
2033  * @sptrlro_get_pdev_target_handle: Get Spectral handle for pdev target
2034  * private data
2035  * @sptrlro_get_psoc_target_handle: Get Spectral handle for psoc target
2036  * private data
2037  * @sptrlro_vdev_get_chan_freq_seg2: Get secondary 80 center frequency
2038  * @sptrlro_spectral_is_feature_disabled_pdev: Check if spectral feature is
2039  * disabled for a given pdev
2040  * @sptrlro_spectral_is_feature_disabled_psoc: Check if spectral feature is
2041  * disabled for a given psoc
2042  */
2043 struct wlan_lmac_if_sptrl_rx_ops {
2044 	void * (*sptrlro_get_pdev_target_handle)(struct wlan_objmgr_pdev *pdev);
2045 	void * (*sptrlro_get_psoc_target_handle)(struct wlan_objmgr_psoc *psoc);
2046 	int16_t (*sptrlro_vdev_get_chan_freq)(struct wlan_objmgr_vdev *vdev);
2047 	int16_t (*sptrlro_vdev_get_chan_freq_seg2)
2048 					(struct wlan_objmgr_vdev *vdev);
2049 	enum phy_ch_width (*sptrlro_vdev_get_ch_width)(
2050 			struct wlan_objmgr_vdev *vdev);
2051 	int (*sptrlro_vdev_get_sec20chan_freq_mhz)(
2052 			struct wlan_objmgr_vdev *vdev,
2053 			uint16_t *sec20chan_freq);
2054 	bool (*sptrlro_spectral_is_feature_disabled_pdev)(
2055 			struct wlan_objmgr_pdev *pdev);
2056 	bool (*sptrlro_spectral_is_feature_disabled_psoc)(
2057 			struct wlan_objmgr_psoc *psoc);
2058 };
2059 #endif /* WLAN_CONV_SPECTRAL_ENABLE */
2060 
2061 #ifdef WLAN_IOT_SIM_SUPPORT
2062 struct iot_sim_cbacks;
2063 /**
2064  * wlan_lmac_if_iot_sim_rx_ops: iot_sim rx operations
2065  * iot_sim_cmd_handler: Applies iot_sim rule in outgoing and incoming frames
2066  * iot_sim_register_cb: callback registration with iot_sim
2067  **/
2068 struct wlan_lmac_if_iot_sim_rx_ops {
2069 	QDF_STATUS (*iot_sim_cmd_handler)(struct wlan_objmgr_vdev *vdev,
2070 					  qdf_nbuf_t n_buf,
2071 					  struct beacon_tmpl_params *bcn_param,
2072 					  bool tx,
2073 					  struct mgmt_rx_event_params *param);
2074 	QDF_STATUS (*iot_sim_register_cb)(struct wlan_objmgr_pdev *pdev,
2075 					  struct iot_sim_cbacks *cb);
2076 };
2077 #endif
2078 
2079 #ifdef WIFI_POS_CONVERGED
2080 /**
2081  * struct wlan_lmac_if_wifi_pos_rx_ops - structure of rx function
2082  * pointers for wifi_pos component
2083  * @oem_rsp_event_rx: callback for WMI_OEM_RESPONSE_EVENTID
2084  * @wifi_pos_ranging_peer_create_cb: Function pointer to handle PASN peer create
2085  * request
2086  * @wifi_pos_ranging_peer_create_rsp_cb: Function pointer to handle peer create
2087  * confirm event for PASN Peer.
2088  * @wifi_pos_ranging_peer_delete_cb: Ranging peer delete handle function
2089  * pointer.
2090  * @wifi_pos_vdev_delete_all_ranging_peers_rsp_cb: Callback to handle vdev
2091  * delete all ranging peers response
2092  * @wifi_pos_vdev_delete_all_ranging_peers_cb: Delete all ranging peers for
2093  * given vdev. This is called before vdev delete to cleanup all the ranging
2094  * peers of that vdev.
2095  */
2096 struct wlan_lmac_if_wifi_pos_rx_ops {
2097 	int (*oem_rsp_event_rx)(struct wlan_objmgr_psoc *psoc,
2098 				struct oem_data_rsp *oem_rsp);
2099 	QDF_STATUS (*wifi_pos_ranging_peer_create_cb)
2100 			(struct wlan_objmgr_psoc *psoc,
2101 			 struct wlan_pasn_request *req,
2102 			 uint8_t vdev_id,
2103 			 uint8_t total_entries);
2104 	QDF_STATUS (*wifi_pos_ranging_peer_create_rsp_cb)
2105 			(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
2106 			 struct qdf_mac_addr *peer_mac,
2107 			 uint8_t status);
2108 	QDF_STATUS (*wifi_pos_ranging_peer_delete_cb)
2109 			(struct wlan_objmgr_psoc *psoc,
2110 			 struct wlan_pasn_request *info,
2111 			 uint8_t vdev_id, uint8_t num_peers);
2112 	QDF_STATUS (*wifi_pos_vdev_delete_all_ranging_peers_rsp_cb)
2113 			(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id);
2114 	QDF_STATUS (*wifi_pos_vdev_delete_all_ranging_peers_cb)
2115 					(struct wlan_objmgr_vdev *vdev);
2116 };
2117 #endif
2118 
2119 /**
2120  * struct wlan_lmac_if_dfs_rx_ops - Function pointers to call dfs functions
2121  *                                  from lmac/offload.
2122  * @dfs_get_radars:                   Calls init radar table functions.
2123  * @dfs_process_phyerr:               Process phyerr.
2124  * @dfs_destroy_object:               Destroys the DFS object.
2125  * @dfs_radar_enable:                 Enables the radar.
2126  * @dfs_is_radar_enabled:             Check if the radar is enabled.
2127  * @dfs_control:                      Used to process ioctls related to DFS.
2128  * @dfs_is_precac_timer_running:      Check whether precac timer is running.
2129  * @dfs_cancel_precac_timer:          Cancel the precac timer.
2130  * @dfs_override_precac_timeout:      Override the default precac timeout.
2131  * @dfs_set_precac_enable:            Set precac enable flag.
2132  * @dfs_get_legacy_precac_enable:     Get the precac enable flag for
2133  *                                    partial offload (legacy) chipsets.
2134  * @dfs_set_precac_intermediate_chan: Set intermediate channel for precac.
2135  * @dfs_get_precac_intermediate_chan: Get intermediate channel for precac.
2136  * @dfs_precac_preferred_chan:        Configure preferred channel during
2137  *                                    precac.
2138  * dfs_get_precac_chan_state_for_freq:Get precac status for given channel.
2139  * dfs_start_precac_timer:            Start precac timer.
2140  * @dfs_get_override_precac_timeout:  Get precac timeout.
2141  * @dfs_process_radar_ind:            Process radar found indication.
2142  * @dfs_dfs_cac_complete_ind:         Process cac complete indication.
2143  * @dfs_agile_precac_start:           Initiate Agile PreCAC run.
2144  * @dfs_set_agile_precac_state:       Set agile precac state.
2145  * @dfs_reset_adfs_config:            Reset agile dfs variables.
2146  * @dfs_dfs_ocac_complete_ind:        Process offchan cac complete indication.
2147  * dfs_start_precac_timer:            Start precac timer.
2148  * @dfs_stop:                         Clear dfs timers.
2149  * @dfs_reinit_timers:                Reinitialize DFS timers.
2150  * @dfs_enable_stadfs:                Enable/Disable STADFS capability.
2151  * @dfs_is_stadfs_enabled:            Get STADFS capability value.
2152  * @dfs_process_phyerr_filter_offload:Process radar event.
2153  * @dfs_is_phyerr_filter_offload:     Check whether phyerr filter is offload.
2154  * @dfs_action_on_status:             Trigger the action to be taken based on
2155  *                                    on host dfs status received from fw.
2156  * @dfs_override_status_timeout:      Override the value of host dfs status
2157  *                                    wait timeout.
2158  * @dfs_get_override_status_timeout:  Get the value of host dfs status wait
2159  *                                    timeout.
2160  * @dfs_reset_spoof_test:             Checks if radar detection is enabled.
2161  * @dfs_is_disable_radar_marking_set: Check if dis_radar_marking param is set.
2162  * @dfs_allow_hw_pulses:              Set or unset dfs_allow_hw_pulses which
2163  *                                    allow or disallow HW pulses.
2164  * @dfs_is_hw_pulses_allowed:         Check if HW pulses are allowed or not.
2165  * @dfs_set_fw_adfs_support:          Set the agile DFS FW support in DFS.
2166  * @dfs_reset_dfs_prevchan:           Reset DFS previous channel structure.
2167  * @dfs_init_tmp_psoc_nol:            Init temporary PSOC NOL structure.
2168  * @dfs_deinit_tmp_psoc_nol:          Deinit temporary PSOC NOL structure.
2169  * @dfs_save_dfs_nol_in_psoc:         Copy DFS NOL data to the PSOC copy.
2170  * @dfs_reinit_nol_from_psoc_copy:    Reinit DFS NOL from the PSOC NOL copy.
2171  * @dfs_reinit_precac_lists:          Reinit precac lists from other pdev.
2172  * @dfs_complete_deferred_tasks:      Process mode switch completion in DFS.
2173  * @dfs_is_agile_rcac_enabled:        Checks if Agile RCAC is enabled.
2174  * @dfs_agile_sm_deliver_evt:         API to post events to DFS Agile  SM.
2175  * @dfs_set_postnol_freq:             API to set frequency to switch, post NOL.
2176  * @dfs_set_postnol_mode:             API to set phymode to switch to, post NOL.
2177  * @dfs_set_postnol_cfreq2            API to set secondary center frequency to
2178  *                                    switch to, post NOL.
2179  * @dfs_get_postnol_freq:             API to get frequency to switch, post NOL.
2180  * @dfs_get_postnol_mode:             API to get phymode to switch to, post NOL.
2181  * @dfs_get_postnol_cfreq2:           API to get secondary center frequency to
2182  *                                    switch to, post NOL.
2183  * @dfs_set_bw_expand:                API to set BW Expansion feature.
2184  * @dfs_get_bw_expand:                API to get the status of BW Expansion
2185  *                                    feature.
2186  * @dfs_set_dfs_puncture:             API to set DFS puncturing feature.
2187  * @dfs_get_dfs_puncture:             API to get the status of DFS puncturing
2188  *                                    feature.
2189  */
2190 struct wlan_lmac_if_dfs_rx_ops {
2191 	QDF_STATUS (*dfs_get_radars)(struct wlan_objmgr_pdev *pdev);
2192 	QDF_STATUS (*dfs_process_phyerr)(struct wlan_objmgr_pdev *pdev,
2193 			void *buf,
2194 			uint16_t datalen,
2195 			uint8_t r_rssi,
2196 			uint8_t r_ext_rssi,
2197 			uint32_t r_rs_tstamp,
2198 			uint64_t r_fulltsf);
2199 	QDF_STATUS (*dfs_destroy_object)(struct wlan_objmgr_pdev *pdev);
2200 	QDF_STATUS (*dfs_radar_enable)(
2201 			struct wlan_objmgr_pdev *pdev,
2202 			int no_cac,
2203 			uint32_t opmode,
2204 			bool enable);
2205 	void (*dfs_is_radar_enabled)(struct wlan_objmgr_pdev *pdev,
2206 				     int *ignore_dfs);
2207 	QDF_STATUS (*dfs_control)(struct wlan_objmgr_pdev *pdev,
2208 				  u_int id,
2209 				  void *indata,
2210 				  uint32_t insize,
2211 				  void *outdata,
2212 				  uint32_t *outsize,
2213 				  int *error);
2214 	QDF_STATUS (*dfs_is_precac_timer_running)(struct wlan_objmgr_pdev *pdev,
2215 						  bool *is_precac_timer_running
2216 						  );
2217 	QDF_STATUS (*dfs_agile_precac_start)(struct wlan_objmgr_pdev *pdev);
2218 	QDF_STATUS (*dfs_set_agile_precac_state)(struct wlan_objmgr_pdev *pdev,
2219 						 int agile_precac_state);
2220 	QDF_STATUS (*dfs_reset_adfs_config)(struct wlan_objmgr_psoc *psoc);
2221 	QDF_STATUS
2222 	(*dfs_dfs_ocac_complete_ind)(struct wlan_objmgr_pdev *pdev,
2223 				     struct vdev_adfs_complete_status *ocac_st);
2224 	QDF_STATUS (*dfs_start_precac_timer)(struct wlan_objmgr_pdev *pdev);
2225 	QDF_STATUS (*dfs_cancel_precac_timer)(struct wlan_objmgr_pdev *pdev);
2226 	QDF_STATUS (*dfs_override_precac_timeout)(
2227 			struct wlan_objmgr_pdev *pdev,
2228 			int precac_timeout);
2229 	QDF_STATUS (*dfs_set_precac_enable)(struct wlan_objmgr_pdev *pdev,
2230 			uint32_t value);
2231 	QDF_STATUS (*dfs_get_agile_precac_enable)(struct wlan_objmgr_pdev *pdev,
2232 						  bool *buff);
2233 #ifdef WLAN_DFS_PRECAC_AUTO_CHAN_SUPPORT
2234 	QDF_STATUS (*dfs_set_precac_intermediate_chan)(struct wlan_objmgr_pdev *pdev,
2235 						       uint32_t value);
2236 	QDF_STATUS (*dfs_get_precac_intermediate_chan)(struct wlan_objmgr_pdev *pdev,
2237 						       int *buff);
2238 #ifdef CONFIG_CHAN_FREQ_API
2239 	bool (*dfs_decide_precac_preferred_chan_for_freq)(struct
2240 						    wlan_objmgr_pdev *pdev,
2241 						    uint16_t *pref_chan_freq,
2242 						    enum wlan_phymode mode);
2243 
2244 	enum precac_chan_state (*dfs_get_precac_chan_state_for_freq)(struct
2245 						      wlan_objmgr_pdev *pdev,
2246 						      uint16_t pcac_freq);
2247 #endif
2248 #endif
2249 	QDF_STATUS (*dfs_get_override_precac_timeout)(
2250 			struct wlan_objmgr_pdev *pdev,
2251 			int *precac_timeout);
2252 #ifdef CONFIG_CHAN_FREQ_API
2253 	QDF_STATUS
2254 	    (*dfs_set_current_channel_for_freq)(struct wlan_objmgr_pdev *pdev,
2255 						uint16_t ic_freq,
2256 						uint64_t ic_flags,
2257 						uint16_t ic_flagext,
2258 						uint8_t ic_ieee,
2259 						uint8_t ic_vhtop_ch_freq_seg1,
2260 						uint8_t ic_vhtop_ch_freq_seg2,
2261 						uint16_t dfs_ch_mhz_freq_seg1,
2262 						uint16_t dfs_ch_mhz_freq_seg2,
2263 						uint16_t dfs_ch_punc_pattern,
2264 						bool *is_channel_updated);
2265 #endif
2266 #ifdef DFS_COMPONENT_ENABLE
2267 	QDF_STATUS (*dfs_process_radar_ind)(struct wlan_objmgr_pdev *pdev,
2268 			struct radar_found_info *radar_found);
2269 	QDF_STATUS (*dfs_dfs_cac_complete_ind)(struct wlan_objmgr_pdev *pdev,
2270 			uint32_t vdev_id);
2271 #endif
2272 	QDF_STATUS (*dfs_stop)(struct wlan_objmgr_pdev *pdev);
2273 	QDF_STATUS (*dfs_reinit_timers)(struct wlan_objmgr_pdev *pdev);
2274 	void (*dfs_enable_stadfs)(struct wlan_objmgr_pdev *pdev, bool val);
2275 	bool (*dfs_is_stadfs_enabled)(struct wlan_objmgr_pdev *pdev);
2276 	QDF_STATUS (*dfs_process_phyerr_filter_offload)(
2277 			struct wlan_objmgr_pdev *pdev,
2278 			struct radar_event_info *wlan_radar_info);
2279 	QDF_STATUS (*dfs_is_phyerr_filter_offload)(
2280 			struct wlan_objmgr_psoc *psoc,
2281 			bool *is_phyerr_filter_offload);
2282 #if defined(WLAN_DFS_PARTIAL_OFFLOAD) && defined(HOST_DFS_SPOOF_TEST)
2283 	QDF_STATUS (*dfs_action_on_status)(struct wlan_objmgr_pdev *pdev,
2284 			u_int32_t *dfs_status_check);
2285 #endif
2286 	QDF_STATUS (*dfs_override_status_timeout)(
2287 			struct wlan_objmgr_pdev *pdev,
2288 			int status_timeout);
2289 	QDF_STATUS (*dfs_get_override_status_timeout)(
2290 			struct wlan_objmgr_pdev *pdev,
2291 			int *status_timeout);
2292 	QDF_STATUS (*dfs_reset_spoof_test)(struct wlan_objmgr_pdev *pdev);
2293 	QDF_STATUS (*dfs_is_disable_radar_marking_set)(struct wlan_objmgr_pdev
2294 						 *pdev,
2295 						 bool *disable_radar_marking);
2296 	QDF_STATUS (*dfs_set_nol_subchannel_marking)(
2297 			struct wlan_objmgr_pdev *pdev,
2298 			bool value);
2299 	QDF_STATUS (*dfs_get_nol_subchannel_marking)(
2300 			struct wlan_objmgr_pdev *pdev,
2301 			bool *value);
2302 	QDF_STATUS (*dfs_set_bw_expand)(
2303 			struct wlan_objmgr_pdev *pdev,
2304 			bool value);
2305 	QDF_STATUS (*dfs_get_bw_expand)(
2306 			struct wlan_objmgr_pdev *pdev,
2307 			bool *value);
2308 #ifdef QCA_DFS_BW_PUNCTURE
2309 	QDF_STATUS (*dfs_set_dfs_puncture)(
2310 			struct wlan_objmgr_pdev *pdev,
2311 			bool value);
2312 	QDF_STATUS (*dfs_get_dfs_puncture)(
2313 			struct wlan_objmgr_pdev *pdev,
2314 			bool *value);
2315 #endif
2316 	QDF_STATUS (*dfs_set_bw_reduction)(struct wlan_objmgr_pdev *pdev,
2317 			bool value);
2318 	QDF_STATUS (*dfs_is_bw_reduction_needed)(struct wlan_objmgr_pdev *pdev,
2319 			bool *bw_reduce);
2320 	void (*dfs_allow_hw_pulses)(struct wlan_objmgr_pdev *pdev,
2321 				    bool allow_hw_pulses);
2322 	bool (*dfs_is_hw_pulses_allowed)(struct wlan_objmgr_pdev *pdev);
2323 	void (*dfs_set_fw_adfs_support)(struct wlan_objmgr_pdev *pdev,
2324 					bool fw_adfs_support_160,
2325 					bool fw_adfs_support_non_160,
2326 					bool fw_adfs_support_320);
2327 	void (*dfs_reset_dfs_prevchan)(struct wlan_objmgr_pdev *pdev);
2328 	void (*dfs_init_tmp_psoc_nol)(struct wlan_objmgr_pdev *pdev,
2329 				      uint8_t num_radios);
2330 	void (*dfs_deinit_tmp_psoc_nol)(struct wlan_objmgr_pdev *pdev);
2331 	void (*dfs_save_dfs_nol_in_psoc)(struct wlan_objmgr_pdev *pdev,
2332 					 uint8_t pdev_id);
2333 	void (*dfs_reinit_nol_from_psoc_copy)(struct wlan_objmgr_pdev *pdev,
2334 					      uint8_t pdev_id,
2335 					      uint16_t low_5ghz_freq,
2336 					      uint16_t high_5ghz_freq);
2337 	void (*dfs_reinit_precac_lists)(struct wlan_objmgr_pdev *src_pdev,
2338 					struct wlan_objmgr_pdev *dest_pdev,
2339 					uint16_t low_5g_freq,
2340 					uint16_t high_5g_freq);
2341 	void (*dfs_complete_deferred_tasks)(struct wlan_objmgr_pdev *pdev);
2342 #ifdef QCA_SUPPORT_ADFS_RCAC
2343 	QDF_STATUS (*dfs_set_rcac_enable)(struct wlan_objmgr_pdev *pdev,
2344 					  bool rcac_en);
2345 	QDF_STATUS (*dfs_get_rcac_enable)(struct wlan_objmgr_pdev *pdev,
2346 					  bool *rcac_en);
2347 	QDF_STATUS (*dfs_set_rcac_freq)(struct wlan_objmgr_pdev *pdev,
2348 					qdf_freq_t rcac_freq);
2349 	QDF_STATUS (*dfs_get_rcac_freq)(struct wlan_objmgr_pdev *pdev,
2350 					qdf_freq_t *rcac_freq);
2351 	bool (*dfs_is_agile_rcac_enabled)(struct wlan_objmgr_pdev *pdev);
2352 #endif
2353 #ifdef QCA_SUPPORT_AGILE_DFS
2354 	void (*dfs_agile_sm_deliver_evt)(struct wlan_objmgr_pdev *pdev,
2355 					 enum dfs_agile_sm_evt event);
2356 #endif
2357 #ifdef QCA_SUPPORT_DFS_CHAN_POSTNOL
2358 	QDF_STATUS (*dfs_set_postnol_freq)(struct wlan_objmgr_pdev *pdev,
2359 					   qdf_freq_t postnol_freq);
2360 	QDF_STATUS (*dfs_set_postnol_mode)(struct wlan_objmgr_pdev *pdev,
2361 					   uint16_t postnol_mode);
2362 	QDF_STATUS (*dfs_set_postnol_cfreq2)(struct wlan_objmgr_pdev *pdev,
2363 					     qdf_freq_t postnol_cfreq2);
2364 	QDF_STATUS (*dfs_get_postnol_freq)(struct wlan_objmgr_pdev *pdev,
2365 					   qdf_freq_t *postnol_freq);
2366 	QDF_STATUS (*dfs_get_postnol_mode)(struct wlan_objmgr_pdev *pdev,
2367 					   uint8_t *postnol_mode);
2368 	QDF_STATUS (*dfs_get_postnol_cfreq2)(struct wlan_objmgr_pdev *pdev,
2369 					     qdf_freq_t *postnol_cfreq2);
2370 #endif
2371 };
2372 
2373 /**
2374  * struct wlan_lmac_if_mlme_rx_ops: Function pointer to call MLME functions
2375  * @vdev_mgr_start_response: function to handle start response
2376  * @vdev_mgr_stop_response: function to handle stop response
2377  * @vdev_mgr_delete_response: function to handle delete response
2378  * @vdev_mgr_offload_bcn_tx_status_event_handle: function to handle offload
2379  * beacon tx
2380  * @vdev_mgr_tbttoffset_update_handle: function to handle tbtt offset event
2381  * @vdev_mgr_peer_delete_all_response: function to handle vdev delete all peer
2382  * event
2383  * @psoc_get_wakelock_info: function to get wakelock info
2384  * @psoc_get_vdev_response_timer_info: function to get vdev response timer
2385  * structure for a specific vdev id
2386  * @vdev_mgr_multi_vdev_restart_resp: function to handle mvr response
2387  * @vdev_mgr_set_mac_addr_response: Callback to get response for set MAC address
2388  *                                  command
2389  * @vdev_mgr_set_max_channel_switch_time: Set max channel switch time for the
2390  * given vdev list.
2391  * @vdev_mgr_quiet_offload: handle quiet status for given link mac addr or
2392  * mld addr and link id.
2393  */
2394 struct wlan_lmac_if_mlme_rx_ops {
2395 	QDF_STATUS (*vdev_mgr_start_response)(
2396 					struct wlan_objmgr_psoc *psoc,
2397 					struct vdev_start_response *rsp);
2398 	QDF_STATUS (*vdev_mgr_stop_response)(
2399 					struct wlan_objmgr_psoc *psoc,
2400 					struct vdev_stop_response *rsp);
2401 	QDF_STATUS (*vdev_mgr_delete_response)(
2402 					struct wlan_objmgr_psoc *psoc,
2403 					struct vdev_delete_response *rsp);
2404 	QDF_STATUS (*vdev_mgr_offload_bcn_tx_status_event_handle)(
2405 							uint32_t vdev_id,
2406 							uint32_t tx_status);
2407 	QDF_STATUS (*vdev_mgr_tbttoffset_update_handle)(
2408 						uint32_t num_vdevs,
2409 						bool is_ext);
2410 	QDF_STATUS (*vdev_mgr_peer_delete_all_response)(
2411 					struct wlan_objmgr_psoc *psoc,
2412 					struct peer_delete_all_response *rsp);
2413 	QDF_STATUS (*vdev_mgr_multi_vdev_restart_resp)(
2414 					struct wlan_objmgr_psoc *psoc,
2415 					struct multi_vdev_restart_resp *rsp);
2416 #ifdef FEATURE_VDEV_OPS_WAKELOCK
2417 	struct psoc_mlme_wakelock *(*psoc_get_wakelock_info)(
2418 				    struct wlan_objmgr_psoc *psoc);
2419 #endif
2420 	struct vdev_response_timer *(*psoc_get_vdev_response_timer_info)(
2421 						struct wlan_objmgr_psoc *psoc,
2422 						uint8_t vdev_id);
2423 #ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
2424 	void (*vdev_mgr_set_mac_addr_response)(uint8_t vdev_id, uint8_t status);
2425 #endif
2426 	void (*vdev_mgr_set_max_channel_switch_time)
2427 		(struct wlan_objmgr_psoc *psoc,
2428 		 uint32_t *vdev_ids, uint32_t num_vdevs);
2429 #ifdef WLAN_FEATURE_11BE_MLO
2430 	QDF_STATUS (*vdev_mgr_quiet_offload)(
2431 			struct wlan_objmgr_psoc *psoc,
2432 			struct vdev_sta_quiet_event *quiet_event);
2433 #endif
2434 };
2435 
2436 #ifdef WLAN_SUPPORT_GREEN_AP
2437 struct wlan_lmac_if_green_ap_rx_ops {
2438 	bool (*is_ps_enabled)(struct wlan_objmgr_pdev *pdev);
2439 	bool (*is_dbg_print_enabled)(struct wlan_objmgr_pdev *pdev);
2440 	QDF_STATUS (*ps_get)(struct wlan_objmgr_pdev *pdev, uint8_t *value);
2441 	QDF_STATUS (*ps_set)(struct wlan_objmgr_pdev *pdev, uint8_t value);
2442 	void (*suspend_handle)(struct wlan_objmgr_pdev *pdev);
2443 #if defined(WLAN_SUPPORT_GAP_LL_PS_MODE)
2444 	QDF_STATUS (*ll_ps_cb)(struct wlan_green_ap_ll_ps_event_param
2445 			       *ll_ps_event_param);
2446 #endif
2447 };
2448 #endif
2449 
2450 /**
2451  * struct wlan_lmac_if_rx_ops - south bound rx function pointers
2452  * @mgmt_txrx_tx_ops: mgmt txrx rx ops
2453  * @scan: scan rx ops
2454  * @son_rx_ops: son rx ops
2455  * @p2p: p2p rx ops
2456  * @iot_sim_rx_ops: iot simulation rx ops
2457  * @atf_rx_ops: air time fairness rx ops
2458  * @cp_stats_rx_ops: cp stats rx ops
2459  * @dfs_rx_ops: dfs rx ops.
2460  * @dcs_rx_ops: dcs rx ops
2461  * @sa_api_rx_ops: sa api rx ops
2462  * @cfr_rx_ops: cfr rx ops
2463  * @sptrl_rx_ops: spectral rx ops
2464  * @crypto_rx_ops: crypto rx ops
2465  * @wifi_pos_rx_ops: wifi positioning rx ops
2466  * @reg_rx_ops: regulatory rx ops
2467  * @dfs_rx_ops: dfs rx ops
2468  * @tdls_rx_ops: tdls rx ops
2469  * @fd_rx_ops: fils rx ops
2470  * @mops: mlme rx ops
2471  * @green_ap_rx_ops: green ap rx ops
2472  * @ftm_rx_ops: ftm rx ops
2473  * @mlo_rx_ops: mlo rx ops
2474  * @dbam_rx_ops: dbam rx ops
2475  *
2476  * Callback function tabled to be registered with lmac/wmi.
2477  * lmac will use the functional table to send events/frames to umac
2478  */
2479 struct wlan_lmac_if_rx_ops {
2480 	/**
2481 	 * Components to declare function pointers required by the module
2482 	 * in component specific structure.
2483 	 * The component specific ops structure can be declared in this file
2484 	 * only
2485 	 */
2486 	struct wlan_lmac_if_mgmt_txrx_rx_ops mgmt_txrx_rx_ops;
2487 	struct wlan_lmac_if_scan_rx_ops scan;
2488 	struct wlan_lmac_if_son_rx_ops son_rx_ops;
2489 
2490 #ifdef CONVERGED_P2P_ENABLE
2491 	struct wlan_lmac_if_p2p_rx_ops p2p;
2492 #endif
2493 #ifdef WLAN_IOT_SIM_SUPPORT
2494 	struct wlan_lmac_if_iot_sim_rx_ops iot_sim_rx_ops;
2495 #endif
2496 #ifdef WLAN_ATF_ENABLE
2497 	struct wlan_lmac_if_atf_rx_ops atf_rx_ops;
2498 #endif
2499 #ifdef QCA_SUPPORT_CP_STATS
2500 	struct wlan_lmac_if_cp_stats_rx_ops cp_stats_rx_ops;
2501 #endif
2502 #ifdef DCS_INTERFERENCE_DETECTION
2503 	struct wlan_target_if_dcs_rx_ops dcs_rx_ops;
2504 #endif
2505 #ifdef WLAN_SA_API_ENABLE
2506 	struct wlan_lmac_if_sa_api_rx_ops sa_api_rx_ops;
2507 #endif
2508 
2509 #ifdef WLAN_CFR_ENABLE
2510 	struct wlan_lmac_if_cfr_rx_ops cfr_rx_ops;
2511 #endif
2512 
2513 #ifdef WLAN_CONV_SPECTRAL_ENABLE
2514 	struct wlan_lmac_if_sptrl_rx_ops sptrl_rx_ops;
2515 #endif
2516 
2517 	struct wlan_lmac_if_crypto_rx_ops crypto_rx_ops;
2518 #ifdef WIFI_POS_CONVERGED
2519 	struct wlan_lmac_if_wifi_pos_rx_ops wifi_pos_rx_ops;
2520 #endif
2521 	struct wlan_lmac_if_reg_rx_ops reg_rx_ops;
2522 	struct wlan_lmac_if_dfs_rx_ops dfs_rx_ops;
2523 #ifdef FEATURE_WLAN_TDLS
2524 	struct wlan_lmac_if_tdls_rx_ops tdls_rx_ops;
2525 #endif
2526 
2527 #ifdef WLAN_SUPPORT_FILS
2528 	struct wlan_lmac_if_fd_rx_ops fd_rx_ops;
2529 #endif
2530 
2531 	struct wlan_lmac_if_mlme_rx_ops mops;
2532 
2533 #ifdef WLAN_SUPPORT_GREEN_AP
2534 	struct wlan_lmac_if_green_ap_rx_ops green_ap_rx_ops;
2535 #endif
2536 
2537 	struct wlan_lmac_if_ftm_rx_ops ftm_rx_ops;
2538 #ifdef WLAN_FEATURE_11BE_MLO
2539 	struct wlan_lmac_if_mlo_rx_ops mlo_rx_ops;
2540 #endif
2541 #if defined(WLAN_SUPPORT_TWT) && defined(WLAN_TWT_CONV_SUPPORTED)
2542 	struct wlan_lmac_if_twt_rx_ops twt_rx_ops;
2543 #endif
2544 #ifdef WLAN_FEATURE_DBAM_CONFIG
2545 	struct wlan_lmac_if_dbam_rx_ops dbam_rx_ops;
2546 #endif
2547 };
2548 
2549 /* Function pointer to call legacy tx_ops registration in OL/WMA.
2550  */
2551 extern QDF_STATUS (*wlan_lmac_if_umac_tx_ops_register)
2552 				(struct wlan_lmac_if_tx_ops *tx_ops);
2553 
2554 /* Function pointer to call legacy crypto rxpn registration in OL */
2555 extern QDF_STATUS (*wlan_lmac_if_umac_crypto_rxpn_ops_register)
2556 				(struct wlan_lmac_if_rx_ops *rx_ops);
2557 #ifdef WLAN_FEATURE_SON
2558 /**
2559  * wlan_lmac_if_son_mod_register_rx_ops() - SON Module lmac_if rx_ops
2560  *                                          registration API
2561  * @rx_ops: lmac_if rx_ops function pointer table
2562  *
2563  * Function to register SON rx_ops with lmac_if.
2564  *
2565  * Return: void
2566  */
2567 void wlan_lmac_if_son_mod_register_rx_ops(struct wlan_lmac_if_rx_ops *rx_ops);
2568 #endif
2569 
2570 #endif /* _WLAN_LMAC_IF_DEF_H_ */
2571