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