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