xref: /wlan-dirver/qca-wifi-host-cmn/dp/inc/cdp_txrx_ops.h (revision 8cfe6b10058a04cafb17eed051f2ddf11bee8931)
1 /*
2  * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 /**
20  * @file cdp_txrx_ops.h
21  * @brief Define the host data path converged API functions
22  * called by the host control SW and the OS interface module
23  */
24 #ifndef _CDP_TXRX_CMN_OPS_H_
25 #define _CDP_TXRX_CMN_OPS_H_
26 
27 #include <cdp_txrx_cmn_struct.h>
28 #include <cdp_txrx_stats_struct.h>
29 #include "cdp_txrx_handle.h"
30 #include <cdp_txrx_mon_struct.h>
31 #include "wlan_objmgr_psoc_obj.h"
32 #include <wmi_unified_api.h>
33 #include <wdi_event_api.h>
34 
35 #ifdef IPA_OFFLOAD
36 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0)) || \
37 	defined(CONFIG_IPA_WDI_UNIFIED_API)
38 #include <qdf_ipa_wdi3.h>
39 #else
40 #include <qdf_ipa.h>
41 #endif
42 #endif
43 
44 /**
45  * bitmap values to indicate special handling of peer_delete
46  */
47 #define CDP_PEER_DELETE_NO_SPECIAL             0
48 #define CDP_PEER_DO_NOT_START_UNMAP_TIMER      1
49 
50 struct hif_opaque_softc;
51 /**
52  * cdp_ctrl_mlo_mgr - opaque handle for mlo manager context
53  */
54 struct cdp_ctrl_mlo_mgr;
55 
56 
57 /* same as ieee80211_nac_param */
58 enum cdp_nac_param_cmd {
59 	/* IEEE80211_NAC_PARAM_ADD */
60 	CDP_NAC_PARAM_ADD = 1,
61 	/* IEEE80211_NAC_PARAM_DEL */
62 	CDP_NAC_PARAM_DEL,
63 	/* IEEE80211_NAC_PARAM_LIST */
64 	CDP_NAC_PARAM_LIST,
65 };
66 
67 /**
68  * enum cdp_tx_filter_action - TX peer filtering action
69  * @CDP_TX_FILTER_ACTION_ADD: add peer
70  * @CDP_TX_FILTER_ACTION_DEL: delete peer
71  *
72  * whether add or delete
73  */
74 enum cdp_tx_filter_action {
75 	/* add peer mac address*/
76 	CDP_TX_FILTER_ACTION_ADD = 1,
77 	/* delete peer mac address */
78 	CDP_TX_FILTER_ACTION_DEL,
79 	/* Enable Tx peer filtering */
80 	CDP_TX_FILTER_ACTION_ENABLE_FILTERING,
81 	/* Clear Tx peer filtering */
82 	CDP_TX_FILTER_ACTION_CLEAR_FILTERING,
83 };
84 
85 #define CDP_DELBA_INTERVAL_MS 3000
86 /**
87  * enum cdp_delba_rcode - CDP reason code for sending DELBA
88  * @CDP_DELBA_REASON_NONE: None
89  * @CDP_DELBA_2K_JUMP: Sending DELBA from 2k_jump_handle
90  */
91 enum cdp_delba_rcode {
92 	CDP_DELBA_REASON_NONE = 0,
93 	CDP_DELBA_2K_JUMP,
94 };
95 
96 /**
97  * enum vdev_peer_protocol_enter_exit - whether ingress or egress
98  * @CDP_VDEV_PEER_PROTOCOL_IS_INGRESS: ingress
99  * @CDP_VDEV_PEER_PROTOCOL_IS_EGRESS: egress
100  *
101  * whether ingress or egress
102  */
103 enum vdev_peer_protocol_enter_exit {
104 	CDP_VDEV_PEER_PROTOCOL_IS_INGRESS,
105 	CDP_VDEV_PEER_PROTOCOL_IS_EGRESS
106 };
107 
108 /**
109  * enum vdev_peer_protocol_tx_rx - whether tx or rx
110  * @CDP_VDEV_PEER_PROTOCOL_IS_TX: tx
111  * @CDP_VDEV_PEER_PROTOCOL_IS_RX: rx
112  *
113  * whether tx or rx
114  */
115 enum vdev_peer_protocol_tx_rx {
116 	CDP_VDEV_PEER_PROTOCOL_IS_TX,
117 	CDP_VDEV_PEER_PROTOCOL_IS_RX
118 };
119 
120 /**
121  * enum vdev_ll_conn_actions - Actions to informvdev about
122  *			       low latency connection.
123  * @CDP_VDEV_LL_CONN_ADD: Add Low latency connection
124  * @CDP_VDEV_LL_CONN_DEL: Delete Low latency connection
125  */
126 enum vdev_ll_conn_actions {
127 	CDP_VDEV_LL_CONN_ADD,
128 	CDP_VDEV_LL_CONN_DEL
129 };
130 
131 /**
132  * enum cdp_peer_txq_flush_policy: Values for peer TX TID queues flush policy
133  * @CDP_PEER_TXQ_FLUSH_POLICY_NONE: No flush policy configured
134  * @CDP_PEER_TXQ_FLUSH_POLICY_IMMEDIATE: Flush peer TX TID queue(s) immediately
135  * @CDP_PEER_TXQ_FLUSH_POLICY_TWT_SP_END: Flush peer TX TID queue(s) at SP end
136  *
137  * This is used to map the 'flush_policy' in WMI_PEER_FLUSH_POLICY_CMDID
138  */
139 enum cdp_peer_txq_flush_policy {
140 	CDP_PEER_TXQ_FLUSH_POLICY_NONE = 0,
141 	CDP_PEER_TXQ_FLUSH_POLICY_IMMEDIATE = 1,
142 	CDP_PEER_TXQ_FLUSH_POLICY_TWT_SP_END = 2,
143 
144 	/* keep last */
145 	CDP_PEER_TXQ_FLUSH_POLICY_INVALID,
146 };
147 
148 /**
149  * struct cdp_mlo_ops - MLO ops for multichip
150  * @mlo_soc_setup: setup DP mlo for SOC
151  * @mlo_soc_teardown: teardown DP mlo for SOC
152  * @mlo_setup_complete: indication to DP that all SOCs mlo is setup
153  * @mlo_update_delta_tsf2: update delta tsf2 for link
154  * @mlo_update_delta_tqm: update delta tqm for SOC
155  * @mlo_update_mlo_ts_offset: update MLO timestamp offset for SOC
156  * @mlo_ctxt_attach: Attach DP MLO context
157  * @mlo_ctxt_detach: Detach DP MLO context
158  */
159 #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
160 struct cdp_mlo_ops {
161 	void (*mlo_soc_setup)(struct cdp_soc_t *cdp_soc,
162 			      struct cdp_mlo_ctxt *mlo_ctxt);
163 	void (*mlo_soc_teardown)(struct cdp_soc_t *cdp_soc,
164 				 struct cdp_mlo_ctxt *mlo_ctxt,
165 				 bool is_force_down);
166 	QDF_STATUS (*update_mlo_ptnr_list)(struct cdp_soc_t *soc_hdl,
167 					   int8_t *vdev_ids, uint8_t num_vdevs,
168 					   uint8_t vdev_id);
169 	QDF_STATUS (*clear_mlo_ptnr_list)(struct cdp_soc_t *soc_hdl,
170 					  uint8_t vdev_id);
171 	void (*mlo_setup_complete)(struct cdp_mlo_ctxt *mlo_ctxt);
172 	struct cdp_mlo_ctxt *(*mlo_ctxt_attach)(struct cdp_ctrl_mlo_mgr *m_ctx);
173 	void (*mlo_ctxt_detach)(struct cdp_mlo_ctxt *mlo_ctxt);
174 	void (*mlo_update_delta_tsf2)(struct cdp_soc_t *soc_hdl,
175 				      uint8_t pdev_id,
176 				      uint64_t delta_tsf2);
177 	void (*mlo_update_delta_tqm)(struct cdp_soc_t *soc_hdl,
178 				     uint64_t delta_tqm);
179 	void (*mlo_update_mlo_ts_offset)(struct cdp_soc_t *soc_hdl,
180 					 uint64_t offset);
181 };
182 #endif
183 
184 /******************************************************************************
185  *
186  * Control Interface (A Interface)
187  *
188  *****************************************************************************/
189 
190 struct cdp_cmn_ops {
191 
192 	QDF_STATUS (*txrx_soc_attach_target)(ol_txrx_soc_handle soc);
193 
194 	int (*txrx_pdev_attach_target)(ol_txrx_soc_handle soc, uint8_t pdev_id);
195 
196 	QDF_STATUS (*txrx_vdev_attach)
197 		(struct cdp_soc_t *soc, uint8_t pdev_id,
198 		 struct cdp_vdev_info *vdev_info);
199 
200 	QDF_STATUS
201 	(*txrx_vdev_detach)(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
202 			    ol_txrx_vdev_delete_cb callback,
203 			    void *cb_context);
204 
205 	QDF_STATUS (*txrx_pdev_attach)
206 		(ol_txrx_soc_handle soc,
207 		 struct cdp_pdev_attach_params *params);
208 
209 	int (*txrx_pdev_post_attach)(struct cdp_soc_t *soc, uint8_t pdev_id);
210 
211 	void
212 	(*txrx_pdev_pre_detach)(struct cdp_soc_t *soc, uint8_t pdev_id,
213 				int force);
214 
215 	QDF_STATUS
216 	(*txrx_pdev_detach)(struct cdp_soc_t *psoc, uint8_t pdev_id,
217 			    int force);
218 
219 	/**
220 	 * txrx_pdev_deinit() - Deinitialize pdev and dp ring memory
221 	 * @soc: soc dp handle
222 	 * @pdev_id: id of Dp pdev handle
223 	 * @force: Force deinit or not
224 	 *
225 	 * Return: QDF_STATUS
226 	 */
227 	QDF_STATUS
228 	(*txrx_pdev_deinit)(struct cdp_soc_t *soc, uint8_t pdev_id,
229 			    int force);
230 
231 	QDF_STATUS
232 	(*txrx_peer_create)
233 		(ol_txrx_soc_handle soc, uint8_t vdev_id,
234 		 uint8_t *peer_mac_addr, enum cdp_peer_type peer_type);
235 
236 	QDF_STATUS
237 	(*txrx_peer_setup)(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
238 			   uint8_t *peer_mac,
239 			   struct cdp_peer_setup_info *setup_info);
240 
241 	QDF_STATUS
242 	(*txrx_cp_peer_del_response)
243 		(ol_txrx_soc_handle soc, uint8_t vdev_id,
244 		 uint8_t *peer_mac_addr);
245 
246 	QDF_STATUS
247 	(*txrx_peer_teardown)
248 		(struct cdp_soc_t *soc, uint8_t vdev_id, uint8_t *peer_mac);
249 
250 	int (*txrx_peer_add_ast)
251 		(ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *peer_mac,
252 		uint8_t *mac_addr, enum  cdp_txrx_ast_entry_type type,
253 		uint32_t flags);
254 
255 	int (*txrx_peer_update_ast)
256 		(ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *peer_mac,
257 		uint8_t *mac_addr, uint32_t flags);
258 
259 	bool (*txrx_peer_get_ast_info_by_soc)
260 		(ol_txrx_soc_handle soc, uint8_t *ast_mac_addr,
261 		 struct cdp_ast_entry_info *ast_entry_info);
262 
263 	bool (*txrx_peer_get_ast_info_by_pdev)
264 		(ol_txrx_soc_handle soc, uint8_t *ast_mac_addr,
265 		 uint8_t pdev_id,
266 		 struct cdp_ast_entry_info *ast_entry_info);
267 
268 	QDF_STATUS (*txrx_peer_ast_delete_by_soc)
269 		(ol_txrx_soc_handle soc, uint8_t *ast_mac_addr,
270 		txrx_ast_free_cb callback,
271 		void *cookie);
272 
273 	QDF_STATUS (*txrx_peer_ast_delete_by_pdev)
274 		(ol_txrx_soc_handle soc, uint8_t *ast_mac_addr,
275 		 uint8_t pdev_id,
276 		txrx_ast_free_cb callback,
277 		void *cookie);
278 
279 	QDF_STATUS
280 	(*txrx_peer_delete)(struct cdp_soc_t *soc, uint8_t vdev_id,
281 			    uint8_t *peer_mac, uint32_t bitmap,
282 			    enum cdp_peer_type peer_type);
283 
284 	QDF_STATUS (*txrx_set_monitor_mode)(struct cdp_soc_t *soc,
285 					    uint8_t vdev_id,
286 					    uint8_t smart_monitor);
287 	void (*txrx_peer_delete_sync)(struct cdp_soc_t *soc, uint8_t vdev_id,
288 				      uint8_t *peer_mac,
289 				      QDF_STATUS(*delete_cb)(
290 						uint8_t vdev_id,
291 						uint32_t peerid_cnt,
292 						uint16_t *peerid_list),
293 				      uint32_t bitmap);
294 
295 	void (*txrx_peer_unmap_sync_cb_set)(struct cdp_soc_t *soc_hdl,
296 					    uint8_t pdev_id,
297 					    ol_txrx_peer_unmap_sync_cb
298 					    peer_unmap_sync);
299 
300 	QDF_STATUS
301 	(*txrx_get_peer_mac_from_peer_id)
302 		(struct cdp_soc_t *cdp_soc,
303 		 uint32_t peer_id, uint8_t *peer_mac);
304 
305 	void
306 	(*txrx_vdev_tx_lock)(struct cdp_soc_t *soc, uint8_t vdev_id);
307 
308 	void
309 	(*txrx_vdev_tx_unlock)(struct cdp_soc_t *soc, uint8_t vdev_id);
310 
311 	QDF_STATUS
312 	(*txrx_ath_getstats)(struct cdp_soc_t *soc, uint8_t id,
313 			     struct cdp_dev_stats *stats, uint8_t type);
314 
315 	QDF_STATUS
316 	(*txrx_set_gid_flag)(struct cdp_soc_t *soc, uint8_t pdev_id,
317 			     u_int8_t *mem_status,
318 			     u_int8_t *user_position);
319 
320 	uint32_t (*txrx_fw_supported_enh_stats_version)(struct cdp_soc_t *soc,
321 							uint8_t pdev_id);
322 
323 	QDF_STATUS
324 	(*txrx_if_mgmt_drain)(struct cdp_soc_t *soc, uint8_t pdev_id,
325 			      int force);
326 
327 	QDF_STATUS
328 	(*txrx_set_curchan)(struct cdp_soc_t *soc, uint8_t pdev_id,
329 			    uint32_t chan_mhz);
330 
331 	QDF_STATUS
332 	(*txrx_set_privacy_filters)
333 		(struct cdp_soc_t *soc, uint8_t vdev_id, void *filter,
334 		 uint32_t num);
335 
336 	uint32_t (*txrx_get_cfg)(struct cdp_soc_t *soc, enum cdp_dp_cfg cfg);
337 
338 	/********************************************************************
339 	 * Data Interface (B Interface)
340 	 ********************************************************************/
341 
342 	QDF_STATUS
343 	(*txrx_vdev_register)(struct cdp_soc_t *soc, uint8_t vdev_id,
344 			      ol_osif_vdev_handle osif_vdev,
345 			      struct ol_txrx_ops *txrx_ops);
346 
347 	int (*txrx_mgmt_send)(struct cdp_soc_t *soc, uint8_t vdev_id,
348 			      qdf_nbuf_t tx_mgmt_frm, uint8_t type);
349 
350 	int (*txrx_mgmt_send_ext)(struct cdp_soc_t *soc, uint8_t vdev_id,
351 				  qdf_nbuf_t tx_mgmt_frm, uint8_t type,
352 				  uint8_t use_6mbps, uint16_t chanfreq);
353 
354 	/**
355 	 * ol_txrx_mgmt_tx_cb - tx management delivery notification
356 	 * callback function
357 	 */
358 
359 	QDF_STATUS
360 	(*txrx_mgmt_tx_cb_set)(struct cdp_soc_t *soc, uint8_t pdev_id,
361 			       uint8_t type,
362 			       ol_txrx_mgmt_tx_cb download_cb,
363 			       ol_txrx_mgmt_tx_cb ota_ack_cb,
364 			       void *ctxt);
365 
366 	/**
367 	 * ol_txrx_data_tx_cb - Function registered with the data path
368 	 * that is called when tx frames marked as "no free" are
369 	 * done being transmitted
370 	 */
371 
372 	void (*txrx_data_tx_cb_set)(struct cdp_soc_t *soc, uint8_t vdev_id,
373 				    ol_txrx_data_tx_cb callback, void *ctxt);
374 
375 	qdf_nbuf_t (*tx_send_exc)
376 		(ol_txrx_soc_handle soc, uint8_t vdev_id, qdf_nbuf_t msdu_list,
377 		 struct cdp_tx_exception_metadata *tx_exc_metadata);
378 
379 	/*******************************************************************
380 	 * Statistics and Debugging Interface (C Interface)
381 	 ********************************************************************/
382 
383 	int (*txrx_aggr_cfg)(struct cdp_soc_t *soc, uint8_t vdev_id,
384 			     int max_subfrms_ampdu,
385 			     int max_subfrms_amsdu);
386 
387 	A_STATUS
388 	(*txrx_fw_stats_get)(struct cdp_soc_t *soc, uint8_t vdev_id,
389 			     struct ol_txrx_stats_req *req,
390 			     bool per_vdev, bool response_expected);
391 
392 	int (*txrx_debug)(struct cdp_soc_t *soc, uint8_t vdev_id,
393 			  int debug_specs);
394 
395 	QDF_STATUS
396 	(*txrx_fw_stats_cfg)(struct cdp_soc_t *soc, uint8_t vdev_id,
397 			     uint8_t cfg_stats_type, uint32_t cfg_val);
398 
399 	void (*txrx_print_level_set)(unsigned level);
400 
401 	/**
402 	 * ol_txrx_get_vdev_mac_addr() - Return mac addr of vdev
403 	 * @soc: datapath soc handle
404 	 * @vdev_id: vdev id
405 	 *
406 	 * Return: vdev mac address
407 	 */
408 	uint8_t * (*txrx_get_vdev_mac_addr)(struct cdp_soc_t *soc,
409 					    uint8_t vdev_id);
410 
411 	/**
412 	 * ol_txrx_get_ctrl_pdev_from_vdev() - Return control pdev of vdev
413 	 * @soc: datapath soc handle
414 	 * @vdev_id: vdev id
415 	 *
416 	 * Return: Handle to control pdev
417 	 */
418 	struct cdp_cfg *(*txrx_get_ctrl_pdev_from_vdev)(struct cdp_soc_t *soc,
419 							uint8_t vdev_id);
420 
421 	/**
422 	 * txrx_get_mon_vdev_from_pdev() - Return monitor mode vdev
423 	 * @soc: datapath soc handle
424 	 * @pdev: pdev id
425 	 *
426 	 * Return: vdev_id
427 	 */
428 	uint8_t (*txrx_get_mon_vdev_from_pdev)(struct cdp_soc_t *soc,
429 					       uint8_t pdev_id);
430 
431 	void (*txrx_soc_detach)(struct cdp_soc_t *soc);
432 
433 	/**
434 	 * txrx_soc_deinit() - Deinitialize dp soc and dp ring memory
435 	 * @soc: Opaque Dp handle
436 	 *
437 	 * Return None
438 	 */
439 	void (*txrx_soc_deinit)(struct cdp_soc_t *soc);
440 
441 	/**
442 	 * txrx_soc_init() - Initialize dp soc and dp ring memory
443 	 * @soc: Opaque Dp handle
444 	 * @ctrl_psoc: Opaque Cp handle
445 	 * @htchdl: Opaque htc handle
446 	 * @hifhdl: Opaque hif handle
447 	 *
448 	 * Return: None
449 	 */
450 	void *(*txrx_soc_init)(struct cdp_soc_t *soc,
451 			       struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
452 			       struct hif_opaque_softc *hif_handle,
453 			       HTC_HANDLE htc_handle, qdf_device_t qdf_osdev,
454 			       struct ol_if_ops *ol_ops, uint16_t device_id);
455 
456 	QDF_STATUS (*txrx_pdev_init)(ol_txrx_soc_handle soc,
457 				     HTC_HANDLE htc_handle,
458 				     qdf_device_t qdf_osdev,
459 				     uint8_t pdev_id);
460 
461 	/**
462 	 * txrx_tso_soc_attach() - TSO attach handler triggered during
463 	 * dynamic tso activation
464 	 * @soc: Opaque Dp handle
465 	 *
466 	 * Return: QDF status
467 	 */
468 	QDF_STATUS (*txrx_tso_soc_attach)(struct cdp_soc_t *soc);
469 
470 	/**
471 	 * txrx_tso_soc_detach() - TSO detach handler triggered during
472 	 * dynamic tso de-activation
473 	 * @soc: Opaque Dp handle
474 	 *
475 	 * Return: QDF status
476 	 */
477 	QDF_STATUS (*txrx_tso_soc_detach)(struct cdp_soc_t *soc);
478 	int (*addba_resp_tx_completion)(struct cdp_soc_t *cdp_soc,
479 					uint8_t *peer_mac,
480 					uint16_t vdev_id, uint8_t tid,
481 					int status);
482 
483 	int (*addba_requestprocess)(struct cdp_soc_t *cdp_soc,
484 				    uint8_t *peer_mac,
485 				    uint16_t vdev_id,
486 				    uint8_t dialogtoken,
487 				    uint16_t tid, uint16_t batimeout,
488 				    uint16_t buffersize,
489 				    uint16_t startseqnum);
490 
491 	QDF_STATUS
492 	(*addba_responsesetup)(struct cdp_soc_t *cdp_soc,
493 			       uint8_t *peer_mac,
494 			       uint16_t vdev_id, uint8_t tid,
495 			       uint8_t *dialogtoken, uint16_t *statuscode,
496 			       uint16_t *buffersize, uint16_t *batimeout);
497 
498 	int (*delba_process)(struct cdp_soc_t *cdp_soc, uint8_t *peer_mac,
499 			     uint16_t vdev_id, int tid, uint16_t reasoncode);
500 
501 	QDF_STATUS (*tid_update_ba_win_size)(ol_txrx_soc_handle soc,
502 					     uint8_t *peer_mac,
503 					     uint16_t vdev_id, uint8_t tid,
504 					     uint16_t buffersize);
505 	/**
506 	 * delba_tx_completion() - Indicate delba tx status
507 	 * @cdp_soc: soc handle
508 	 * @peer_mac: Peer mac address
509 	 * @vdev_id: vdev id
510 	 * @tid: Tid number
511 	 * @status: Tx completion status
512 	 *
513 	 * Return: 0 on Success, 1 on failure
514 	 */
515 	int (*delba_tx_completion)(struct cdp_soc_t *cdp_soc, uint8_t *peer_mac,
516 				   uint16_t vdev_id,
517 				   uint8_t tid, int status);
518 
519 	QDF_STATUS
520 	(*set_addba_response)(struct cdp_soc_t *cdp_soc, uint8_t *peer_mac,
521 			      uint16_t vdev_id, uint8_t tid,
522 			      uint16_t statuscode);
523 
524 	QDF_STATUS
525 	(*set_vdev_dscp_tid_map)(struct cdp_soc_t *soc_handle,
526 				 uint8_t vdev_id, uint8_t map_id);
527 	int (*txrx_get_total_per)(struct cdp_soc_t *soc, uint8_t pdev_id);
528 
529 	void (*flush_cache_rx_queue)(void);
530 
531 	QDF_STATUS (*set_pdev_dscp_tid_map)(struct cdp_soc_t *soc_handle,
532 					    uint8_t pdev_id,
533 					    uint8_t map_id,
534 					    uint8_t tos, uint8_t tid);
535 
536 	QDF_STATUS (*txrx_stats_request)(struct cdp_soc_t *soc_handle,
537 					 uint8_t vdev_id,
538 					 struct cdp_txrx_stats_req *req);
539 
540 	QDF_STATUS (*display_stats)(struct cdp_soc_t *psoc, uint16_t value,
541 				    enum qdf_stats_verbosity_level level);
542 
543 	QDF_STATUS (*txrx_intr_attach)(struct cdp_soc_t *soc_handle);
544 	void (*txrx_intr_detach)(struct cdp_soc_t *soc_handle);
545 	void (*txrx_ppeds_stop)(struct cdp_soc_t *soc_handle);
546 	QDF_STATUS  (*set_pn_check)(struct cdp_soc_t *soc_handle,
547 				    uint8_t vdev_id, uint8_t *peermac,
548 				    enum cdp_sec_type sec_type,
549 				    uint32_t *rx_pn);
550 
551 	QDF_STATUS(*set_key_sec_type)(struct cdp_soc_t *soc_handle,
552 				      uint8_t vdev_id, uint8_t *peermac,
553 				      enum cdp_sec_type sec_type,
554 				      bool is_unicast);
555 
556 	QDF_STATUS (*update_config_parameters)(struct cdp_soc *psoc,
557 			struct cdp_config_params *params);
558 
559 	void *(*get_dp_txrx_handle)(ol_txrx_soc_handle soc, uint8_t pdev_id);
560 	void (*set_dp_txrx_handle)(ol_txrx_soc_handle soc, uint8_t pdev_id,
561 				   void *dp_hdl);
562 
563 	void *(*get_vdev_dp_ext_txrx_handle)(struct cdp_soc_t *soc,
564 					     uint8_t vdev_id);
565 	QDF_STATUS (*set_vdev_dp_ext_txrx_handle)(struct cdp_soc_t *soc,
566 						  uint8_t vdev_id,
567 						  uint16_t size);
568 
569 	void *(*get_soc_dp_txrx_handle)(struct cdp_soc *soc_handle);
570 	void (*set_soc_dp_txrx_handle)(struct cdp_soc *soc_handle,
571 			void *dp_txrx_handle);
572 
573 	QDF_STATUS (*map_pdev_to_lmac)(ol_txrx_soc_handle soc, uint8_t pdev_id,
574 				       uint32_t lmac_id);
575 
576 	QDF_STATUS (*handle_mode_change)(ol_txrx_soc_handle soc,
577 					 uint8_t pdev_id, uint32_t lmac_id);
578 
579 	QDF_STATUS (*set_pdev_status_down)(struct cdp_soc_t *soc_handle,
580 					   uint8_t pdev_id, bool is_pdev_down);
581 
582 	QDF_STATUS (*txrx_peer_reset_ast)
583 		(ol_txrx_soc_handle soc, uint8_t *ast_macaddr,
584 		 uint8_t *peer_macaddr, uint8_t vdev_id);
585 
586 	QDF_STATUS (*txrx_peer_reset_ast_table)(ol_txrx_soc_handle soc,
587 						uint8_t vdev_id);
588 
589 	void (*txrx_peer_flush_ast_table)(ol_txrx_soc_handle soc);
590 	void (*txrx_set_ba_aging_timeout)(struct cdp_soc_t *soc_handle,
591 					  uint8_t ac, uint32_t value);
592 	void (*txrx_get_ba_aging_timeout)(struct cdp_soc_t *soc_handle,
593 					  uint8_t ac, uint32_t *value);
594 
595 	QDF_STATUS (*txrx_peer_map_attach)(ol_txrx_soc_handle soc,
596 					   uint32_t num_peers,
597 					   uint32_t max_ast_index,
598 					   uint8_t peer_map_unmap_v);
599 
600 	QDF_STATUS (*set_soc_param)(ol_txrx_soc_handle soc,
601 				    enum cdp_soc_param_t param,
602 				    uint32_t value);
603 
604 	ol_txrx_tx_fp tx_send;
605 
606 	/* tx_fast_send will be called only in AP mode when all the
607 	 * transmit path features are disabled including extended stats
608 	 */
609 	ol_txrx_tx_fast_fp tx_fast_send;
610 
611 	void (*set_tx_pause)(ol_txrx_soc_handle soc, bool flag);
612 
613 	/**
614 	 * txrx_get_os_rx_handles_from_vdev() - Return function, osif vdev
615 	 *					to deliver pkt to stack.
616 	 * @soc: datapath soc handle
617 	 * @vdev: vdev id
618 	 * @stack_fn: pointer to - function pointer to deliver RX pkt to stack
619 	 * @osif_vdev: pointer to - osif vdev to deliver RX packet to.
620 	 */
621 	void (*txrx_get_os_rx_handles_from_vdev)
622 					(ol_txrx_soc_handle soc,
623 					 uint8_t vdev_id,
624 					 ol_txrx_rx_fp *stack_fn,
625 					 ol_osif_vdev_handle *osif_vdev);
626 
627 	void (*set_rate_stats_ctx)(struct cdp_soc_t *soc,
628 				   void *ctx);
629 
630 	int (*txrx_classify_update)
631 		(struct cdp_soc_t *soc, uint8_t vdev_id, qdf_nbuf_t skb,
632 		 enum txrx_direction, struct ol_txrx_nbuf_classify *nbuf_class);
633 
634 	bool (*get_dp_capabilities)(struct cdp_soc_t *soc,
635 				    enum cdp_capabilities dp_caps);
636 	void* (*get_rate_stats_ctx)(struct cdp_soc_t *soc);
637 	QDF_STATUS (*txrx_peer_flush_rate_stats)(struct cdp_soc_t *soc,
638 						 uint8_t pdev_id,
639 						 void *buf);
640 	void* (*txrx_peer_get_peerstats_ctx)(struct cdp_soc_t *soc,
641 					     uint8_t vdev_id,
642 					     uint8_t *mac_addr);
643 
644 	QDF_STATUS (*txrx_flush_rate_stats_request)(struct cdp_soc_t *soc,
645 						    uint8_t pdev_id);
646 	QDF_STATUS (*set_pdev_pcp_tid_map)(struct cdp_soc_t *soc,
647 					   uint8_t pdev_id,
648 					   uint8_t pcp, uint8_t tid);
649 	QDF_STATUS (*set_vdev_pcp_tid_map)(struct cdp_soc_t *soc,
650 					   uint8_t vdev_id,
651 					   uint8_t pcp, uint8_t tid);
652 #ifdef DP_RX_UDP_OVER_PEER_ROAM
653 	QDF_STATUS (*txrx_update_roaming_peer)(struct cdp_soc_t *soc,
654 					       uint8_t vdev_id,
655 					       uint8_t *peer_mac,
656 					       uint32_t auth_status);
657 #endif
658 
659 #ifdef QCA_MULTIPASS_SUPPORT
660 	QDF_STATUS (*set_vlan_groupkey)(struct cdp_soc_t *soc, uint8_t vdev_id,
661 					uint16_t vlan_id, uint16_t group_key);
662 #endif
663 
664 	uint16_t (*get_peer_mac_list)
665 		 (ol_txrx_soc_handle soc, uint8_t vdev_id,
666 		  u_int8_t newmac[][QDF_MAC_ADDR_SIZE], uint16_t mac_cnt,
667 		  bool limit);
668 	uint16_t (*get_peer_id)(ol_txrx_soc_handle soc,
669 				uint8_t vdev_id,
670 				uint8_t *mac);
671 #ifdef QCA_SUPPORT_WDS_EXTENDED
672 	QDF_STATUS (*set_wds_ext_peer_rx)(ol_txrx_soc_handle soc,
673 					  uint8_t vdev_id,
674 					  uint8_t *mac,
675 					  ol_txrx_rx_fp rx,
676 					  ol_osif_peer_handle osif_peer);
677 #endif /* QCA_SUPPORT_WDS_EXTENDED */
678 	void (*txrx_drain)(ol_txrx_soc_handle soc);
679 	int (*get_free_desc_poolsize)(struct cdp_soc_t *soc);
680 #ifdef WLAN_SYSFS_DP_STATS
681 	QDF_STATUS (*txrx_sysfs_fill_stats)(ol_txrx_soc_handle soc,
682 					    char *buf, uint32_t buf_size);
683 	QDF_STATUS (*txrx_sysfs_set_stat_type)(ol_txrx_soc_handle soc,
684 					       uint32_t stat_type,
685 					       uint32_t mac_id);
686 #endif /* WLAN_SYSFS_DP_STATS */
687 #ifdef WLAN_FEATURE_PKT_CAPTURE_V2
688 	void (*set_pkt_capture_mode)(struct cdp_soc_t *soc, bool val);
689 #endif
690 
691 #ifdef FEATURE_RUNTIME_PM
692 	void (*set_rtpm_tput_policy)(struct cdp_soc_t *soc, bool val);
693 #endif
694 
695 #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
696 	void (*txrx_recovery_vdev_flush_peers)(struct cdp_soc_t *soc,
697 					       uint8_t vdev_id,
698 					       bool mlo_peers_only);
699 #endif
700 	QDF_STATUS (*txrx_umac_reset_deinit)(ol_txrx_soc_handle soc);
701 	void (*txrx_get_tsf_time)(struct cdp_soc_t *soc_hdl, uint32_t tsf_id,
702 				  uint32_t mac_id, uint64_t *tsf,
703 				  uint64_t *tsf_sync_soc_time);
704 
705 	void (*txrx_get_tsf2_offset)(struct cdp_soc_t *soc_hdl, uint8_t mac_id,
706 				     uint64_t *value);
707 	void (*txrx_get_tqm_offset)(struct cdp_soc_t *soc_hdl, uint64_t *value);
708 };
709 
710 struct cdp_ctrl_ops {
711 
712 	int
713 		(*txrx_mempools_attach)(ol_txrx_soc_handle dp_soc);
714 	int
715 		(*txrx_update_filter_neighbour_peers)(
716 				struct cdp_soc_t *soc, uint8_t vdev_id,
717 				uint32_t cmd, uint8_t *macaddr);
718 
719 	/* Is this similar to ol_txrx_peer_state_update() in MCL */
720 	/**
721 	 * @brief Update the authorize peer object at association time
722 	 * @details
723 	 * For the host-based implementation of rate-control, it
724 	 * updates the peer/node-related parameters within rate-control
725 	 * context of the peer at association.
726 	 *
727 	 * @param soc_hdl - pointer to the soc object
728 	 * @param vdev_id - id of the virtual object
729 	 * @param peer_mac - mac address of the node's object
730 	 * @authorize - either to authorize or unauthorize peer
731 	 *
732 	 * @return QDF_STATUS
733 	 */
734 	QDF_STATUS
735 		(*txrx_peer_authorize)(struct cdp_soc_t *soc_hdl,
736 				       uint8_t vdev_id,
737 				       uint8_t *peer_mac,
738 				       u_int32_t authorize);
739 	bool
740 		(*txrx_peer_get_authorize)(struct cdp_soc_t *soc_hdl,
741 					   uint8_t vdev_id,
742 					   uint8_t *peer_mac);
743 
744 	void (*tx_flush_buffers)(struct cdp_soc_t *soc, uint8_t vdev_id);
745 
746 	int (*txrx_is_target_ar900b)(struct cdp_soc_t *soc_hdl);
747 
748 	QDF_STATUS
749 	(*txrx_set_vdev_param)(struct cdp_soc_t *soc, uint8_t vdev_id,
750 			       enum cdp_vdev_param_type param,
751 			       cdp_config_param_type val);
752 
753 	/**
754 	 * @brief Set the reo dest ring num of the radio
755 	 * @details
756 	 *  Set the reo destination ring no on which we will receive
757 	 *  pkts for this radio.
758 	 *
759 	 * @txrx_soc - soc handle
760 	 * @param pdev_id - id of physical device
761 	 * @return the reo destination ring number
762 	 * @param reo_dest_ring_num - value ranges between 1 - 4
763 	 */
764 	QDF_STATUS (*txrx_set_pdev_reo_dest)(
765 			struct cdp_soc_t *txrx_soc,
766 			uint8_t pdev_id,
767 			enum cdp_host_reo_dest_ring reo_dest_ring_num);
768 
769 	/**
770 	 * @brief Get the reo dest ring num of the radio
771 	 * @details
772 	 *  Get the reo destination ring no on which we will receive
773 	 *  pkts for this radio.
774 	 *
775 	 * @txrx_soc - soc handle
776 	 * @param pdev_id - id of physical device
777 	 * @return the reo destination ring number
778 	 */
779 	enum cdp_host_reo_dest_ring (*txrx_get_pdev_reo_dest)(
780 				     struct cdp_soc_t *txrx_soc,
781 				     uint8_t pdev_id);
782 
783 	int (*txrx_wdi_event_sub)(struct cdp_soc_t *soc, uint8_t pdev_id,
784 				  wdi_event_subscribe *event_cb_sub,
785 				  uint32_t event);
786 
787 	int (*txrx_wdi_event_unsub)(struct cdp_soc_t *soc, uint8_t pdev_id,
788 				    wdi_event_subscribe *event_cb_sub,
789 				    uint32_t event);
790 
791 	int (*txrx_get_sec_type)(ol_txrx_soc_handle soc, uint8_t vdev_id,
792 				 uint8_t *peer_mac, uint8_t sec_idx);
793 
794 	QDF_STATUS
795 	(*txrx_update_mgmt_txpow_vdev)(struct cdp_soc_t *soc,
796 				       uint8_t vdev_id,
797 				       uint8_t subtype, uint8_t tx_power);
798 
799 	/**
800 	 * txrx_set_pdev_param() - callback to set pdev parameter
801 	 * @soc: opaque soc handle
802 	 * @pdev_id:id of data path pdev handle
803 	 * @val: value of pdev_tx_capture
804 	 *
805 	 * Return: status: 0 - Success, non-zero: Failure
806 	 */
807 	QDF_STATUS (*txrx_set_pdev_param)(struct cdp_soc_t *soc,
808 					  uint8_t pdev_id,
809 					  enum cdp_pdev_param_type type,
810 					  cdp_config_param_type val);
811 
812 	QDF_STATUS (*txrx_get_pdev_param)(struct cdp_soc_t *soc,
813 					  uint8_t pdev_id,
814 					  enum cdp_pdev_param_type type,
815 					  cdp_config_param_type *val);
816 
817 	QDF_STATUS (*txrx_set_peer_param)(struct cdp_soc_t *soc,
818 					  uint8_t vdev_id, uint8_t *peer_mac,
819 					  enum cdp_peer_param_type param,
820 					  cdp_config_param_type val);
821 
822 	QDF_STATUS (*txrx_get_peer_param)(struct cdp_soc_t *soc,
823 					  uint8_t vdev_id, uint8_t *peer_mac,
824 					  enum cdp_peer_param_type param,
825 					  cdp_config_param_type *val);
826 
827 	void * (*txrx_get_pldev)(struct cdp_soc_t *soc, uint8_t pdev_id);
828 	void (*txrx_peer_flush_frags)(struct cdp_soc_t *soc, uint8_t vdev_id,
829 				      uint8_t *peer_mac);
830 
831 #ifdef VDEV_PEER_PROTOCOL_COUNT
832 	void (*txrx_peer_protocol_cnt)(struct cdp_soc_t *soc,
833 				       int8_t vdev_id,
834 				       qdf_nbuf_t nbuf,
835 				       bool is_egress,
836 				       bool is_rx);
837 #endif
838 #ifdef ATH_SUPPORT_NAC_RSSI
839 	QDF_STATUS (*txrx_vdev_config_for_nac_rssi)(struct cdp_soc_t *cdp_soc,
840 						    uint8_t vdev_id,
841 						    enum cdp_nac_param_cmd cmd,
842 						    char *bssid,
843 						    char *client_macaddr,
844 						    uint8_t chan_num);
845 
846 	QDF_STATUS (*txrx_vdev_get_neighbour_rssi)(struct cdp_soc_t *cdp_soc,
847 						   uint8_t vdev_id,
848 						   char *macaddr,
849 						   uint8_t *rssi);
850 #endif
851 
852 #ifdef WLAN_SUPPORT_MSCS
853 	QDF_STATUS
854 		(*txrx_record_mscs_params) (
855 				struct cdp_soc_t *soc, uint8_t *macaddr,
856 				uint8_t vdev_id,
857 				struct cdp_mscs_params *mscs_params,
858 				bool active);
859 #endif
860 
861 	QDF_STATUS
862 	(*set_key)(struct cdp_soc_t *soc, uint8_t vdev_id, uint8_t *mac,
863 		   bool is_unicast, uint32_t *key);
864 
865 	QDF_STATUS (*txrx_get_vdev_param)(struct cdp_soc_t *soc,
866 					  uint8_t vdev_id,
867 					  enum cdp_vdev_param_type param,
868 					  cdp_config_param_type *val);
869 	int (*enable_peer_based_pktlog)(struct cdp_soc_t *cdp_soc,
870 					uint8_t pdev_id,
871 					uint8_t *macaddr, uint8_t enb_dsb);
872 
873 	QDF_STATUS
874 	(*calculate_delay_stats)(struct cdp_soc_t *cdp_soc,
875 				 uint8_t vdev_id, qdf_nbuf_t nbuf);
876 #ifdef WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG
877 	QDF_STATUS (*txrx_update_pdev_rx_protocol_tag)(
878 			struct cdp_soc_t  *soc, uint8_t pdev_id,
879 			uint32_t protocol_mask, uint16_t protocol_type,
880 			uint16_t tag);
881 #ifdef WLAN_SUPPORT_RX_TAG_STATISTICS
882 	void (*txrx_dump_pdev_rx_protocol_tag_stats)(
883 				struct cdp_soc_t  *soc, uint8_t pdev_id,
884 				uint16_t protocol_type);
885 #endif /* WLAN_SUPPORT_RX_TAG_STATISTICS */
886 #endif /* WLAN_SUPPORT_RX_PROTOCOL_TYPE_TAG */
887 #ifdef WLAN_SUPPORT_RX_FLOW_TAG
888 	QDF_STATUS (*txrx_set_rx_flow_tag)(
889 		struct cdp_soc_t *cdp_soc, uint8_t pdev_id,
890 		struct cdp_rx_flow_info *flow_info);
891 	QDF_STATUS (*txrx_dump_rx_flow_tag_stats)(
892 		struct cdp_soc_t *cdp_soc, uint8_t pdev_id,
893 		struct cdp_rx_flow_info *flow_info);
894 #endif /* WLAN_SUPPORT_RX_FLOW_TAG */
895 #ifdef QCA_MULTIPASS_SUPPORT
896 	void (*txrx_peer_set_vlan_id)(struct cdp_soc_t *cdp_soc,
897 				      uint8_t vdev_id, uint8_t *peer_mac,
898 				      uint16_t vlan_id);
899 #endif
900 #if defined(WLAN_TX_PKT_CAPTURE_ENH) || defined(WLAN_RX_PKT_CAPTURE_ENH)
901 	QDF_STATUS (*txrx_update_peer_pkt_capture_params)(
902 			ol_txrx_soc_handle soc, uint8_t pdev_id,
903 			bool is_rx_pkt_cap_enable, uint8_t is_tx_pkt_cap_enable,
904 			uint8_t *peer_mac);
905 #endif /* WLAN_TX_PKT_CAPTURE_ENH || WLAN_RX_PKT_CAPTURE_ENH */
906 	QDF_STATUS
907 	(*txrx_set_psoc_param)(struct cdp_soc_t *soc,
908 			       enum cdp_psoc_param_type param,
909 			       cdp_config_param_type val);
910 
911 	QDF_STATUS (*txrx_get_psoc_param)(ol_txrx_soc_handle soc,
912 					  enum cdp_psoc_param_type type,
913 					  cdp_config_param_type *val);
914 #ifdef VDEV_PEER_PROTOCOL_COUNT
915 	/*
916 	 * Enable per-peer protocol counters
917 	 */
918 	void (*txrx_enable_peer_protocol_count)(struct cdp_soc_t *soc,
919 						int8_t vdev_id, bool enable);
920 	void (*txrx_set_peer_protocol_drop_mask)(struct cdp_soc_t *soc,
921 						 int8_t vdev_id, int mask);
922 	int (*txrx_is_peer_protocol_count_enabled)(struct cdp_soc_t *soc,
923 						   int8_t vdev_id);
924 	int (*txrx_get_peer_protocol_drop_mask)(struct cdp_soc_t *soc,
925 						int8_t vdev_id);
926 
927 #endif
928 
929 #if defined(WLAN_FEATURE_TSF_UPLINK_DELAY) || defined(WLAN_CONFIG_TX_DELAY)
930 	void (*txrx_set_delta_tsf)(struct cdp_soc_t *soc, uint8_t vdev_id,
931 				   uint32_t delta_tsf);
932 #endif
933 #ifdef WLAN_FEATURE_TSF_UPLINK_DELAY
934 	QDF_STATUS (*txrx_set_tsf_ul_delay_report)(struct cdp_soc_t *soc,
935 						   uint8_t vdev_id,
936 						   bool enable);
937 	QDF_STATUS (*txrx_get_uplink_delay)(struct cdp_soc_t *soc,
938 					    uint8_t vdev_id,
939 					    uint32_t *val);
940 #endif
941 #ifdef QCA_UNDECODED_METADATA_SUPPORT
942 	QDF_STATUS (*txrx_set_pdev_phyrx_error_mask)(struct cdp_soc_t *soc,
943 						     uint8_t pdev_id,
944 						     uint32_t mask,
945 						     uint32_t mask_cont);
946 	QDF_STATUS (*txrx_get_pdev_phyrx_error_mask)(struct cdp_soc_t *soc,
947 						     uint8_t pdev_id,
948 						     uint32_t *mask,
949 						     uint32_t *mask_cont);
950 #endif
951 	QDF_STATUS (*txrx_update_mon_mac_filter)(struct cdp_soc_t *soc,
952 						 uint8_t vdev_id,
953 						 uint32_t cmd);
954 };
955 
956 struct cdp_me_ops {
957 
958 	void (*tx_me_alloc_descriptor)(struct cdp_soc_t *soc,
959 				       uint8_t pdev_id);
960 
961 	void (*tx_me_free_descriptor)(struct cdp_soc_t *soc, uint8_t pdev_id);
962 
963 	uint16_t (*tx_me_convert_ucast)(struct cdp_soc_t *soc, uint8_t vdev_id,
964 					qdf_nbuf_t wbuf, u_int8_t newmac[][6],
965 					uint8_t newmaccnt, uint8_t tid,
966 					bool is_igmp, bool is_dms_pkt);
967 };
968 
969 /**
970  * struct cdp_mon_ops - host mon ops
971  * @txrx_reset_monitor_mode: Handler to reset monitor mode
972  * @txrx_deliver_tx_mgmt: deliver mgmt tx frame
973  * @txrx_set_advance_monitor_filter: set advanced monitor mode
974  * @config_full_mon_mode: configure full monitor mode
975  * @txrx_enable_mon_reap_timer: Enable/Disable reap timer of monitor status ring
976  * @txrx_get_lite_mon_legacy_feature_enabled: returns the legacy filter enabled
977  * @txrx_update_pdev_mon_telemetry_airtime_stats: update telemetry airtime
978  * stats in monitor pdev
979  */
980 struct cdp_mon_ops {
981 
982 	QDF_STATUS (*txrx_reset_monitor_mode)
983 		(ol_txrx_soc_handle soc, uint8_t pdev_id, u_int8_t smart_monitor);
984 
985 	QDF_STATUS (*txrx_deliver_tx_mgmt)
986 		(struct cdp_soc_t *cdp_soc, uint8_t pdev_id, qdf_nbuf_t nbuf);
987 
988 	/* HK advance monitor filter support */
989 	QDF_STATUS (*txrx_set_advance_monitor_filter)
990 		(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
991 		 struct cdp_monitor_filter *filter_val);
992 
993 	/* Configure full monitor mode */
994 	QDF_STATUS
995 		(*config_full_mon_mode)(struct cdp_soc_t *soc, uint8_t val);
996 	QDF_STATUS (*soc_config_full_mon_mode)(struct cdp_pdev *cdp_pdev,
997 					       uint8_t val);
998 
999 	/* Get monitor mode pdev stats */
1000 	QDF_STATUS
1001 		(*get_mon_pdev_rx_stats)(struct cdp_soc_t *soc, uint8_t pdev_id,
1002 					 struct cdp_pdev_mon_stats *stats);
1003 
1004 	/* Configure monitor status srng reap timer */
1005 	bool (*txrx_enable_mon_reap_timer)(struct cdp_soc_t *soc_hdl,
1006 					   enum cdp_mon_reap_source source,
1007 					   bool enable);
1008 
1009 #ifdef QCA_SUPPORT_LITE_MONITOR
1010 	/* set lite monitor config */
1011 	QDF_STATUS
1012 	(*txrx_set_lite_mon_config)(
1013 			struct cdp_soc_t *soc,
1014 			struct cdp_lite_mon_filter_config *mon_config,
1015 			uint8_t pdev_id);
1016 
1017 	/* get lite monitor config */
1018 	QDF_STATUS
1019 	(*txrx_get_lite_mon_config)(
1020 			struct cdp_soc_t *soc,
1021 			struct cdp_lite_mon_filter_config *mon_config,
1022 			uint8_t pdev_id);
1023 
1024 	/* set lite monitor peer config */
1025 	QDF_STATUS
1026 	(*txrx_set_lite_mon_peer_config)(
1027 			struct cdp_soc_t *soc,
1028 			struct cdp_lite_mon_peer_config *peer_config,
1029 			uint8_t pdev_id);
1030 
1031 	/* get lite monitor peer list */
1032 	QDF_STATUS
1033 	(*txrx_get_lite_mon_peer_config)(
1034 			struct cdp_soc_t *soc,
1035 			struct cdp_lite_mon_peer_info *info,
1036 			uint8_t pdev_id);
1037 
1038 	/* get lite monitor enable/disable status */
1039 	int
1040 	(*txrx_is_lite_mon_enabled)(struct cdp_soc_t *soc,
1041 				    uint8_t pdev_id,
1042 				    uint8_t direction);
1043 
1044 	/* get the legacy feature enabled */
1045 	int
1046 	(*txrx_get_lite_mon_legacy_feature_enabled)(struct cdp_soc_t *soc,
1047 						    uint8_t pdev_id,
1048 						    uint8_t direction);
1049 #endif
1050 	/*To set RSSI dbm conversion params in monitor pdev */
1051 	QDF_STATUS (*txrx_set_mon_pdev_params_rssi_dbm_conv)
1052 		(struct cdp_soc_t *soc,
1053 		 struct cdp_rssi_db2dbm_param_dp *params);
1054 
1055 #ifdef WLAN_TELEMETRY_STATS_SUPPORT
1056 	/*To update telemetry airtime stats in monitor pdev */
1057 	QDF_STATUS (*txrx_update_pdev_mon_telemetry_airtime_stats)
1058 		(struct cdp_soc_t *soc,
1059 		 uint8_t pdev_id);
1060 #endif
1061 };
1062 
1063 struct cdp_host_stats_ops {
1064 	int (*txrx_host_stats_get)(struct cdp_soc_t *soc, uint8_t vdev_id,
1065 				   struct ol_txrx_stats_req *req);
1066 
1067 	QDF_STATUS (*txrx_host_stats_clr)(struct cdp_soc_t *soc,
1068 					  uint8_t vdev_id);
1069 
1070 	QDF_STATUS
1071 	(*txrx_host_ce_stats)(struct cdp_soc_t *soc, uint8_t vdev_id);
1072 
1073 	int (*txrx_stats_publish)(struct cdp_soc_t *soc, uint8_t pdev_id,
1074 				  struct cdp_stats_extd *buf);
1075 	/**
1076 	 * @brief Enable enhanced stats functionality.
1077 	 *
1078 	 * @param soc - the soc handle
1079 	 * @param pdev_id - pdev_id of pdev
1080 	 * @return - QDF_STATUS
1081 	 */
1082 	QDF_STATUS (*txrx_enable_enhanced_stats)(struct cdp_soc_t *soc,
1083 						 uint8_t pdev_id);
1084 
1085 	/**
1086 	 * @brief Disable enhanced stats functionality.
1087 	 *
1088 	 * @param soc - the soc handle
1089 	 * @param pdev_id - pdev_id of pdev
1090 	 * @return - QDF_STATUS
1091 	 */
1092 	QDF_STATUS (*txrx_disable_enhanced_stats)(struct cdp_soc_t *soc,
1093 						  uint8_t pdev_id);
1094 
1095 	QDF_STATUS
1096 		(*tx_print_tso_stats)(struct cdp_soc_t *soc, uint8_t vdev_id);
1097 
1098 	QDF_STATUS
1099 		(*tx_rst_tso_stats)(struct cdp_soc_t *soc, uint8_t vdev_id);
1100 
1101 	QDF_STATUS
1102 		(*tx_print_sg_stats)(struct cdp_soc_t *soc, uint8_t vdev_id);
1103 
1104 	QDF_STATUS
1105 		(*tx_rst_sg_stats)(struct cdp_soc_t *soc, uint8_t vdev_id);
1106 
1107 	QDF_STATUS
1108 		(*print_rx_cksum_stats)(struct cdp_soc_t *soc, uint8_t vdev_id);
1109 
1110 	QDF_STATUS
1111 		(*rst_rx_cksum_stats)(struct cdp_soc_t *soc, uint8_t vdev_id);
1112 
1113 	QDF_STATUS
1114 		(*txrx_host_me_stats)(struct cdp_soc_t *soc, uint8_t vdev_id);
1115 
1116 	QDF_STATUS
1117 		(*txrx_per_peer_stats)(struct cdp_soc_t *soc, uint8_t *addr);
1118 
1119 	int (*txrx_host_msdu_ttl_stats)(struct cdp_soc_t *soc, uint8_t vdev_id,
1120 					struct ol_txrx_stats_req *req);
1121 
1122 	int (*ol_txrx_update_peer_stats)(struct cdp_soc_t *soc,
1123 					 uint8_t pdev_id,
1124 					 uint8_t *addr, void *stats,
1125 					 uint32_t last_tx_rate_mcs,
1126 					 uint32_t stats_id);
1127 
1128 	QDF_STATUS
1129 		(*get_fw_peer_stats)(struct cdp_soc_t *soc, uint8_t pdev_id,
1130 				     uint8_t *addr,
1131 				     uint32_t cap, uint32_t copy_stats);
1132 
1133 	QDF_STATUS
1134 		(*get_htt_stats)(struct cdp_soc_t *soc, uint8_t pdev_id,
1135 				 void *data,
1136 				 uint32_t data_len);
1137 	QDF_STATUS
1138 		(*txrx_update_pdev_stats)(struct cdp_soc_t *soc,
1139 					  uint8_t pdev_id, void *data,
1140 					  uint16_t stats_id);
1141 	QDF_STATUS
1142 		(*txrx_get_peer_stats_param)(struct cdp_soc_t *soc,
1143 					     uint8_t vdev_id,
1144 					     uint8_t *peer_mac,
1145 					     enum cdp_peer_stats_type type,
1146 					     cdp_peer_stats_param_t *buf);
1147 	QDF_STATUS
1148 		(*txrx_get_peer_stats)(struct cdp_soc_t *soc, uint8_t vdev_id,
1149 				       uint8_t *peer_mac,
1150 				       struct cdp_peer_stats *peer_stats);
1151 	QDF_STATUS
1152 		(*txrx_get_soc_stats)(struct cdp_soc_t *soc,
1153 				      struct cdp_soc_stats *soc_stats);
1154 	QDF_STATUS
1155 		(*txrx_reset_peer_ald_stats)(struct cdp_soc_t *soc,
1156 					     uint8_t vdev_id,
1157 					     uint8_t *peer_mac);
1158 	QDF_STATUS
1159 		(*txrx_reset_peer_stats)(struct cdp_soc_t *soc,
1160 					 uint8_t vdev_id, uint8_t *peer_mac);
1161 	int
1162 		(*txrx_get_vdev_stats)(struct cdp_soc_t *soc, uint8_t vdev_id,
1163 				       void *buf, bool is_aggregate);
1164 	int
1165 		(*txrx_process_wmi_host_vdev_stats)(ol_txrx_soc_handle soc,
1166 						    void *data, uint32_t len,
1167 						    uint32_t stats_id);
1168 	int
1169 		(*txrx_get_vdev_extd_stats)(struct cdp_soc_t *soc,
1170 					    uint8_t vdev_id,
1171 					    wmi_host_vdev_extd_stats *buffer);
1172 	QDF_STATUS
1173 		(*txrx_update_vdev_stats)(struct cdp_soc_t *soc,
1174 					  uint8_t vdev_id, void *buf,
1175 					  uint16_t stats_id);
1176 	int
1177 		(*txrx_get_radio_stats)(struct cdp_soc_t *soc, uint8_t pdev_id,
1178 					void *buf);
1179 	QDF_STATUS
1180 		(*txrx_get_pdev_stats)(struct cdp_soc_t *soc, uint8_t pdev_id,
1181 				       struct cdp_pdev_stats *buf);
1182 	int
1183 		(*txrx_get_ratekbps)(int preamb, int mcs,
1184 				     int htflag, int gintval);
1185 
1186 	QDF_STATUS
1187 	(*txrx_update_peer_stats)(struct cdp_soc_t *soc, uint8_t vdev_id,
1188 				  uint8_t *peer_mac, void *stats,
1189 				  uint32_t last_tx_rate_mcs,
1190 				  uint32_t stats_id);
1191 
1192 #ifdef QCA_SUPPORT_SCAN_SPCL_VAP_STATS
1193 	QDF_STATUS
1194 	(*txrx_get_scan_spcl_vap_stats)(struct cdp_soc_t *soc, uint8_t vdev_id,
1195 					struct cdp_scan_spcl_vap_stats *stats);
1196 #endif
1197 
1198 	QDF_STATUS
1199 	(*txrx_get_peer_delay_stats)(struct cdp_soc_t *soc, uint8_t vdev_id,
1200 				     uint8_t *peer_mac,
1201 				     struct cdp_delay_tid_stats *delay_stats);
1202 
1203 	QDF_STATUS
1204 	(*txrx_get_peer_jitter_stats)(struct cdp_soc_t *soc, uint8_t pdev_id,
1205 				      uint8_t vdev_id, uint8_t *peer_mac,
1206 				      struct cdp_peer_tid_stats *tid_stats);
1207 
1208 	QDF_STATUS
1209 	(*txrx_alloc_vdev_stats_id)(struct cdp_soc_t *soc,
1210 				    uint8_t *vdev_stats_id);
1211 
1212 	void (*txrx_reset_vdev_stats_id)(struct cdp_soc_t *soc,
1213 					 uint8_t vdev_stats_id);
1214 
1215 #ifdef WLAN_TX_PKT_CAPTURE_ENH
1216 	QDF_STATUS
1217 	(*get_peer_tx_capture_stats)(struct cdp_soc_t *soc, uint8_t vdev_id,
1218 				     uint8_t *peer_mac,
1219 				     struct cdp_peer_tx_capture_stats *stats);
1220 
1221 	QDF_STATUS
1222 	(*get_pdev_tx_capture_stats)(struct cdp_soc_t *soc, uint8_t pdev_id,
1223 				     struct cdp_pdev_tx_capture_stats *stats);
1224 #endif /* WLAN_TX_PKT_CAPTURE_ENH */
1225 #ifdef HW_TX_DELAY_STATS_ENABLE
1226 	void
1227 	(*enable_disable_vdev_tx_delay_stats)(struct cdp_soc_t *soc,
1228 					      uint8_t vdev_id,
1229 					      uint8_t value);
1230 	uint8_t (*is_tx_delay_stats_enabled)(struct cdp_soc_t *soc_hdl,
1231 					     uint8_t vdev_id);
1232 #endif
1233 	QDF_STATUS
1234 	(*txrx_get_pdev_tid_stats)(struct cdp_soc_t *soc, uint8_t pdev_id,
1235 				   struct cdp_tid_stats_intf *tid_stats);
1236 #ifdef WLAN_TELEMETRY_STATS_SUPPORT
1237 	QDF_STATUS
1238 		(*txrx_pdev_telemetry_stats)(
1239 				struct cdp_soc_t *soc,
1240 				uint8_t pdev_id,
1241 				struct cdp_pdev_telemetry_stats *stats);
1242 	QDF_STATUS
1243 		(*txrx_peer_telemetry_stats)(
1244 				struct cdp_soc_t *soc,
1245 				uint8_t *addr,
1246 				struct cdp_peer_telemetry_stats *stats);
1247 	QDF_STATUS
1248 		(*txrx_pdev_deter_stats)(
1249 				struct cdp_soc_t *soc,
1250 				uint8_t pdev_id,
1251 				struct cdp_pdev_deter_stats *stats);
1252 	QDF_STATUS
1253 		(*txrx_peer_deter_stats)(
1254 				struct cdp_soc_t *soc,
1255 				uint8_t vdev_id,
1256 				uint8_t *addr,
1257 				struct cdp_peer_deter_stats *stats);
1258 	QDF_STATUS
1259 		(*txrx_update_pdev_chan_util_stats)(
1260 				struct cdp_soc_t *soc,
1261 				uint8_t pdev_id,
1262 				struct cdp_pdev_chan_util_stats *ch_util);
1263 #endif
1264 	QDF_STATUS
1265 		(*txrx_get_peer_extd_rate_link_stats)
1266 				(struct cdp_soc_t *soc, uint8_t *mac_addr);
1267 	QDF_STATUS
1268 		(*get_pdev_obss_stats)(struct cdp_soc_t *soc, uint8_t pdev_id,
1269 				       struct cdp_pdev_obss_pd_stats_tlv *buf,
1270 				       struct cdp_txrx_stats_req *req);
1271 	QDF_STATUS (*clear_pdev_obss_pd_stats)(struct cdp_soc_t *soc,
1272 					       uint8_t pdev_id,
1273 					       struct cdp_txrx_stats_req *req);
1274 };
1275 
1276 struct cdp_wds_ops {
1277 	QDF_STATUS
1278 	(*txrx_set_wds_rx_policy)(struct cdp_soc_t *soc, uint8_t vdev_id,
1279 				  u_int32_t val);
1280 	QDF_STATUS
1281 	(*txrx_wds_peer_tx_policy_update)(struct cdp_soc_t *soc,
1282 					  uint8_t vdev_id, uint8_t *peer_mac,
1283 					  int wds_tx_ucast, int wds_tx_mcast);
1284 	int (*vdev_set_wds)(struct cdp_soc_t *soc, uint8_t vdev_id,
1285 			    uint32_t val);
1286 };
1287 
1288 struct cdp_raw_ops {
1289 	QDF_STATUS
1290 	(*rsim_get_astentry)(struct cdp_soc_t *soc, uint8_t vdev_id,
1291 			     qdf_nbuf_t *pnbuf, struct cdp_raw_ast *raw_ast);
1292 };
1293 
1294 #ifdef PEER_FLOW_CONTROL
1295 struct cdp_pflow_ops {
1296 	uint32_t (*pflow_update_pdev_params)(struct cdp_soc_t *soc,
1297 					     uint8_t pdev_id,
1298 					     enum _dp_param_t,
1299 					     uint32_t, void *);
1300 };
1301 #endif /* PEER_FLOW_CONTROL */
1302 
1303 #define LRO_IPV4_SEED_ARR_SZ 5
1304 #define LRO_IPV6_SEED_ARR_SZ 11
1305 
1306 /**
1307  * struct cdp_lro_hash_config - set rx_offld(LRO/GRO) init parameters
1308  * @lro_enable: indicates whether rx_offld is enabled
1309  * @tcp_flag: If the TCP flags from the packet do not match
1310  * the values in this field after masking with TCP flags mask
1311  * below, packet is not rx_offld eligible
1312  * @tcp_flag_mask: field for comparing the TCP values provided
1313  * above with the TCP flags field in the received packet
1314  * @toeplitz_hash_ipv4: contains seed needed to compute the flow id
1315  * 5-tuple toeplitz hash for ipv4 packets
1316  * @toeplitz_hash_ipv6: contains seed needed to compute the flow id
1317  * 5-tuple toeplitz hash for ipv6 packets
1318  */
1319 struct cdp_lro_hash_config {
1320 	uint32_t lro_enable;
1321 	uint32_t tcp_flag:9,
1322 		tcp_flag_mask:9;
1323 	uint32_t toeplitz_hash_ipv4[LRO_IPV4_SEED_ARR_SZ];
1324 	uint32_t toeplitz_hash_ipv6[LRO_IPV6_SEED_ARR_SZ];
1325 };
1326 
1327 struct ol_if_ops {
1328 	void
1329 	(*peer_set_default_routing)(struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
1330 				    uint8_t pdev_id, uint8_t *peer_macaddr,
1331 				    uint8_t vdev_id,
1332 				    bool hash_based, uint8_t ring_num,
1333 				    uint8_t lmac_peer_id_msb);
1334 	QDF_STATUS
1335 	(*peer_rx_reorder_queue_setup)(struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
1336 				       uint8_t pdev_id,
1337 				       uint8_t vdev_id, uint8_t *peer_mac,
1338 				       qdf_dma_addr_t hw_qdesc, int tid,
1339 				       uint16_t queue_num,
1340 				       uint8_t ba_window_size_valid,
1341 				       uint16_t ba_window_size);
1342 	QDF_STATUS
1343 	(*peer_rx_reorder_queue_remove)(struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
1344 					uint8_t pdev_id,
1345 					uint8_t vdev_id, uint8_t *peer_macaddr,
1346 					uint32_t tid_mask);
1347 	int (*peer_unref_delete)(struct cdp_ctrl_objmgr_psoc *psoc,
1348 				 uint8_t pdev_id,
1349 				 uint8_t *peer_mac,
1350 				 uint8_t *vdev_mac, enum wlan_op_mode opmode);
1351 	bool (*is_hw_dbs_capable)(struct wlan_objmgr_psoc *psoc);
1352 	int (*peer_add_wds_entry)(struct cdp_ctrl_objmgr_psoc *soc,
1353 				  uint8_t vdev_id,
1354 				  uint8_t *peer_macaddr,
1355 				  uint16_t peer_id,
1356 				  const uint8_t *dest_macaddr,
1357 				  uint8_t *next_node_mac,
1358 				  uint32_t flags,
1359 				  uint8_t type);
1360 	int (*peer_update_wds_entry)(struct cdp_ctrl_objmgr_psoc *soc,
1361 				     uint8_t vdev_id,
1362 				     uint8_t *dest_macaddr,
1363 				     uint8_t *peer_macaddr,
1364 				     uint32_t flags);
1365 	void (*peer_del_wds_entry)(struct cdp_ctrl_objmgr_psoc *soc,
1366 				   uint8_t vdev_id,
1367 				   uint8_t *wds_macaddr,
1368 				   uint8_t type,
1369 				   uint8_t delete_in_fw);
1370 #ifdef WLAN_FEATURE_MULTI_AST_DEL
1371 	void (*peer_del_multi_wds_entry)(
1372 			struct cdp_ctrl_objmgr_psoc *soc,
1373 			uint8_t vdev_id,
1374 			struct peer_del_multi_wds_entries *wds_list);
1375 #endif
1376 	QDF_STATUS
1377 	(*lro_hash_config)(struct cdp_ctrl_objmgr_psoc *psoc, uint8_t pdev_id,
1378 			   struct cdp_lro_hash_config *rx_offld_hash);
1379 
1380 	void (*update_dp_stats)(void *soc, void *stats, uint16_t id,
1381 			uint8_t type);
1382 #ifdef RX_PEER_INVALID_ENH
1383 	uint8_t (*rx_invalid_peer)(struct cdp_ctrl_objmgr_psoc *soc,
1384 				   uint8_t pdev_id, void *msg);
1385 #else
1386 	uint8_t (*rx_invalid_peer)(uint8_t vdev_id, void *wh);
1387 #endif
1388 
1389 	int  (*peer_map_event)(struct cdp_ctrl_objmgr_psoc *psoc,
1390 			       uint16_t peer_id, uint16_t hw_peer_id,
1391 			       uint8_t vdev_id, uint8_t *peer_mac_addr,
1392 			       enum cdp_txrx_ast_entry_type peer_type,
1393 			       uint32_t tx_ast_hashidx);
1394 
1395 	int (*peer_unmap_event)(struct cdp_ctrl_objmgr_psoc *psoc,
1396 				uint16_t peer_id,
1397 				uint8_t vdev_id, uint8_t *mac_addr);
1398 
1399 	int (*get_dp_cfg_param)(struct cdp_ctrl_objmgr_psoc *psoc,
1400 				enum cdp_cfg_param_type param_num);
1401 
1402 	void (*rx_mic_error)(struct cdp_ctrl_objmgr_psoc *psoc,
1403 			     uint8_t pdev_id,
1404 			     struct cdp_rx_mic_err_info *info);
1405 
1406 	bool (*rx_frag_tkip_demic)(struct cdp_ctrl_objmgr_psoc *psoc,
1407 				   uint8_t vdev_id, uint8_t *peer_mac_addr,
1408 				   qdf_nbuf_t nbuf,
1409 				   uint16_t hdr_space);
1410 
1411 	uint8_t (*freq_to_channel)(struct cdp_ctrl_objmgr_psoc *psoc,
1412 				   uint8_t pdev_id, uint16_t freq);
1413 
1414 	uint8_t (*freq_to_band)(struct cdp_ctrl_objmgr_psoc *psoc,
1415 				uint8_t pdev_id, uint16_t freq);
1416 
1417 	QDF_STATUS(*set_mec_timer)(struct cdp_ctrl_objmgr_psoc *psoc,
1418 				   uint8_t vdev_id, uint16_t mec_timer_val);
1419 
1420 #ifdef INTRA_BSS_FWD_OFFLOAD
1421 	void (*vdev_set_intra_bss)(struct cdp_ctrl_objmgr_psoc *psoc,
1422 				   uint16_t vdev_id, bool enable);
1423 #endif
1424 #ifdef ATH_SUPPORT_NAC_RSSI
1425 	int (*config_fw_for_nac_rssi)(struct cdp_ctrl_objmgr_psoc *psoc,
1426 				      uint8_t pdev_id,
1427 				      u_int8_t vdev_id,
1428 				      enum cdp_nac_param_cmd cmd, char *bssid,
1429 				      char *client_macaddr, uint8_t chan_num);
1430 
1431 	int
1432 	(*config_bssid_in_fw_for_nac_rssi)(struct cdp_ctrl_objmgr_psoc *psoc,
1433 					   uint8_t pdev_id, u_int8_t vdev_id,
1434 					   enum cdp_nac_param_cmd cmd,
1435 					   char *bssid, char *client_mac);
1436 #endif
1437 	int (*peer_sta_kickout)(struct cdp_ctrl_objmgr_psoc *psoc,
1438 				uint16_t pdev_id, uint8_t *peer_macaddr);
1439 
1440 	/**
1441 	 * send_delba() - Send delba to peer
1442 	 * @psoc: Objmgr soc handle
1443 	 * @vdev_id: dp vdev id
1444 	 * @peer_macaddr: Peer mac addr
1445 	 * @tid: Tid number
1446 	 * @reason_code: Reason code
1447 	 * @cdp_rcode: CDP reason code for sending DELBA
1448 	 *
1449 	 * Return: 0 for success, non-zero for failure
1450 	 */
1451 	int (*send_delba)(struct cdp_ctrl_objmgr_psoc *psoc, uint8_t vdev_id,
1452 			  uint8_t *peer_macaddr, uint8_t tid,
1453 			  uint8_t reason_code, uint8_t cdp_rcode);
1454 
1455 	int
1456 	(*peer_delete_multiple_wds_entries)(struct cdp_ctrl_objmgr_psoc *psoc,
1457 					    uint8_t vdev_id,
1458 					    uint8_t *dest_macaddr,
1459 					    uint8_t *peer_macaddr,
1460 					    uint32_t flags);
1461 	int
1462 	(*pdev_update_lmac_n_target_pdev_id)(struct cdp_ctrl_objmgr_psoc *psoc,
1463 					    uint8_t *pdev_id,
1464 					    uint8_t *lmac_id,
1465 					    uint8_t *target_pdev_id);
1466 	bool (*is_roam_inprogress)(uint32_t vdev_id);
1467 	enum QDF_GLOBAL_MODE (*get_con_mode)(void);
1468 #ifdef QCA_PEER_MULTIQ_SUPPORT
1469 	int (*peer_ast_flowid_map)(struct cdp_ctrl_objmgr_psoc *ol_soc_handle,
1470 				   uint16_t peer_id, uint8_t vdev_id,
1471 				   uint8_t *peer_mac_addr);
1472 #endif
1473 #ifdef DP_MEM_PRE_ALLOC
1474 	void *(*dp_prealloc_get_context)(uint32_t ctxt_type, size_t ctxt_size);
1475 
1476 	QDF_STATUS(*dp_prealloc_put_context)(uint32_t ctxt_type, void *vaddr);
1477 	void *(*dp_prealloc_get_consistent)(uint32_t *size,
1478 					    void **base_vaddr_unaligned,
1479 					    qdf_dma_addr_t *paddr_unaligned,
1480 					    qdf_dma_addr_t *paddr_aligned,
1481 					    uint32_t align,
1482 					    uint32_t ring_type);
1483 	void (*dp_prealloc_put_consistent)(qdf_size_t size,
1484 					   void *vaddr_unligned,
1485 					   qdf_dma_addr_t paddr);
1486 	void (*dp_get_multi_pages)(uint32_t desc_type,
1487 				   size_t element_size,
1488 				   uint16_t element_num,
1489 				   struct qdf_mem_multi_page_t *pages,
1490 				   bool cacheable);
1491 	void (*dp_put_multi_pages)(uint32_t desc_type,
1492 				   struct qdf_mem_multi_page_t *pages);
1493 #endif
1494 	int (*get_soc_nss_cfg)(struct cdp_ctrl_objmgr_psoc *ol_soc_handle);
1495 
1496 	char *(*get_device_name)(struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
1497 				 uint8_t pdev_id);
1498 	QDF_STATUS(*nss_stats_clr)(struct cdp_ctrl_objmgr_psoc *psoc,
1499 				   uint8_t vdev_id);
1500 	int (*dp_rx_get_pending)(ol_txrx_soc_handle soc);
1501 	void (*dp_rx_sched_refill_thread)(ol_txrx_soc_handle soc);
1502 	/* TODO: Add any other control path calls required to OL_IF/WMA layer */
1503 #ifdef QCA_SUPPORT_WDS_EXTENDED
1504 	void (*rx_wds_ext_peer_learn)(struct cdp_ctrl_objmgr_psoc *ctrl_psoc,
1505 				      uint16_t peer_id, uint8_t vdev_id,
1506 				      uint8_t *peer_macaddr);
1507 #endif /* QCA_SUPPORT_WDS_EXTENDED */
1508 #ifdef WLAN_SUPPORT_MESH_LATENCY
1509 	QDF_STATUS(*peer_update_mesh_latency_params)(
1510 			     struct cdp_ctrl_objmgr_psoc *psoc,
1511 				   uint8_t vdev_id, uint8_t *peer_mac, uint8_t tid,
1512 				   uint32_t service_interval_dl, uint32_t burst_size_dl,
1513 				   uint32_t service_interval_ul, uint32_t burst_size_ul,
1514 				   uint8_t add_or_sub, uint8_t ac);
1515 #endif
1516 #ifdef CONFIG_SAWF
1517 	QDF_STATUS
1518 	(*peer_update_sawf_ul_params)(struct cdp_ctrl_objmgr_psoc *soc,
1519 				      uint8_t vdev_id, uint8_t *peer_mac,
1520 				      uint8_t tid, uint8_t ac,
1521 				      uint32_t service_interval,
1522 				      uint32_t burst_size,
1523 				      uint8_t add_sub);
1524 #endif
1525 	uint32_t (*dp_get_tx_inqueue)(ol_txrx_soc_handle soc);
1526 	QDF_STATUS(*dp_send_unit_test_cmd)(uint32_t vdev_id,
1527 					   uint32_t module_id,
1528 					   uint32_t arg_count, uint32_t *arg);
1529 
1530 #ifdef QCA_SUPPORT_LITE_MONITOR
1531 	int (*config_lite_mon_peer)(struct cdp_ctrl_objmgr_psoc *psoc,
1532 				    uint8_t pdev_id,
1533 				    uint8_t vdev_id,
1534 				    enum cdp_nac_param_cmd cmd,
1535 				    uint8_t *peer_mac);
1536 	int (*config_lite_mon_tx_peer)(struct cdp_ctrl_objmgr_psoc *psoc,
1537 				       uint8_t pdev_id, uint8_t vdev_id,
1538 				       enum cdp_tx_filter_action cmd,
1539 				       uint8_t *peer_mac);
1540 #endif
1541 #ifdef WLAN_SUPPORT_SCS
1542 	bool (*peer_scs_rule_match)(struct cdp_ctrl_objmgr_psoc *psoc,
1543 				    uint8_t vdev_id, uint32_t rule_id,
1544 				    uint8_t *peer_mac);
1545 #endif
1546 #ifdef DP_UMAC_HW_RESET_SUPPORT
1547 	void (*dp_update_tx_hardstart)(struct cdp_ctrl_objmgr_psoc *psoc,
1548 				       uint8_t vdev_id,
1549 				       struct ol_txrx_hardtart_ctxt *ctxt);
1550 #endif
1551 #if defined(IPA_WDS_EASYMESH_FEATURE) && defined(FEATURE_AST)
1552 void (*peer_send_wds_disconnect)(struct cdp_ctrl_objmgr_psoc *psoc,
1553 				 uint8_t *mac_addr, uint8_t vdev_id);
1554 #endif
1555 #ifdef WLAN_SUPPORT_PPEDS
1556 	QDF_STATUS
1557 	(*peer_set_ppeds_default_routing)(struct cdp_ctrl_objmgr_psoc *psoc,
1558 					  uint8_t *peer_macaddr,
1559 					  uint16_t service_code,
1560 					  uint8_t priority_valid,
1561 					  uint16_t src_info,
1562 					  uint8_t vdev_id, uint8_t use_ppe,
1563 					  uint8_t routing_enabled);
1564 #endif /* WLAN_SUPPORT_PPEDS */
1565 #ifdef CONFIG_SAWF_DEF_QUEUES
1566 	int (*disable_sawf_svc)(uint8_t svc_id);
1567 #endif
1568 };
1569 
1570 #ifdef DP_PEER_EXTENDED_API
1571 /**
1572  * struct cdp_misc_ops - mcl ops not classified
1573  * @set_ibss_vdev_heart_beat_timer: Update ibss vdev heart beat timer
1574  * @set_wmm_param: set wmm parameters
1575  * @bad_peer_txctl_set_setting: configure bad peer tx limit setting
1576  * @bad_peer_txctl_update_threshold: configure bad peer tx threshold limit
1577  * @hl_tdls_flag_reset: reset tdls flag for vdev
1578  * @tx_non_std: Allow the control-path SW to send data frames
1579  * @get_vdev_id: get vdev id
1580  * @set_wisa_mode: set wisa mode for a vdev
1581  * @txrx_data_stall_cb_register: register data stall callback
1582  * @txrx_data_stall_cb_deregister: deregister data stall callback
1583  * @txrx_post_data_stall_event: post data stall event
1584  * @runtime_suspend: ensure TXRX is ready to runtime suspend
1585  * @runtime_resume: ensure TXRX is ready to runtime resume
1586  * @get_opmode: get operation mode of vdev
1587  * @mark_first_wakeup_packet: set flag to indicate that fw is compatible for
1588 			      marking first packet after wow wakeup
1589  * @update_mac_id: update mac_id for vdev
1590  * @flush_rx_frames: flush rx frames on the queue
1591  * @get_intra_bss_fwd_pkts_count: to get the total tx and rx packets that
1592 				  has been forwarded from txrx layer
1593 				  without going to upper layers
1594  * @pkt_log_init: handler to initialize packet log
1595  * @pkt_log_con_service: handler to connect packet log service
1596  * @get_num_rx_contexts: handler to get number of RX contexts
1597  * @register_packetdump_cb: register callback for different pktlog
1598  * @unregister_packetdump_cb: unregister callback for different pktlog
1599  * @pdev_reset_driver_del_ack: reset driver delayed ack enabled flag
1600  * @vdev_set_driver_del_ack_enable: set driver delayed ack enabled flag
1601  *
1602  * @vdev_inform_ll_conn: inform DP to add/delete a latency critical connection
1603  *			 for this particular vdev.
1604  * @set_swlm_enable: Enable or Disable Software Latency Manager.
1605  * @is_swlm_enabled: Check if Software latency manager is enabled or not.
1606  * @display_txrx_hw_info: Dump the DP rings info
1607  * @set_tx_flush_pending: Configures the ac/tid to be flushed and policy
1608  *			  to flush.
1609  *
1610  * set_bus_vote_lvl_high: The bus lvl is set to high or low based on tput
1611  * get_bus_vote_lvl_high: Get bus lvl to determine whether or not get
1612  *                        rx rate stats
1613  *
1614  * Function pointers for miscellaneous soc/pdev/vdev related operations.
1615  */
1616 struct cdp_misc_ops {
1617 	uint16_t (*set_ibss_vdev_heart_beat_timer)(struct cdp_soc_t *soc_hdl,
1618 						   uint8_t vdev_id,
1619 						   uint16_t timer_value_sec);
1620 	void (*set_wmm_param)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
1621 			      struct ol_tx_wmm_param_t wmm_param);
1622 	void (*bad_peer_txctl_set_setting)(struct cdp_soc_t *soc_hdl,
1623 					   uint8_t pdev_id, int enable,
1624 					   int period, int txq_limit);
1625 	void (*bad_peer_txctl_update_threshold)(struct cdp_soc_t *soc_hdl,
1626 						uint8_t pdev_id,
1627 						int level, int tput_thresh,
1628 						int tx_limit);
1629 	void (*hl_tdls_flag_reset)(struct cdp_soc_t *soc_hdl,
1630 				   uint8_t vdev_id, bool flag);
1631 	qdf_nbuf_t (*tx_non_std)(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
1632 				 enum ol_tx_spec tx_spec, qdf_nbuf_t msdu_list);
1633 	uint16_t (*get_vdev_id)(struct cdp_vdev *vdev);
1634 	uint32_t (*get_tx_ack_stats)(struct cdp_soc_t *soc_hdl,
1635 				     uint8_t vdev_id);
1636 	QDF_STATUS (*set_wisa_mode)(struct cdp_soc_t *soc_hdl,
1637 				    uint8_t vdev_id, bool enable);
1638 	QDF_STATUS (*txrx_data_stall_cb_register)(struct cdp_soc_t *soc_hdl,
1639 						  uint8_t pdev_id,
1640 						  data_stall_detect_cb cb);
1641 	QDF_STATUS (*txrx_data_stall_cb_deregister)(struct cdp_soc_t *soc_hdl,
1642 						    uint8_t pdev_id,
1643 						    data_stall_detect_cb cb);
1644 	void (*txrx_post_data_stall_event)(
1645 			struct cdp_soc_t *soc_hdl,
1646 			enum data_stall_log_event_indicator indicator,
1647 			enum data_stall_log_event_type data_stall_type,
1648 			uint32_t pdev_id, uint32_t vdev_id_bitmap,
1649 			enum data_stall_log_recovery_type recovery_type);
1650 	QDF_STATUS (*runtime_suspend)(struct cdp_soc_t *soc_hdl,
1651 				      uint8_t pdev_id);
1652 	QDF_STATUS (*runtime_resume)(struct cdp_soc_t *soc_hdl,
1653 				     uint8_t pdev_id);
1654 	int (*get_opmode)(struct cdp_soc_t *soc_hdl, uint8_t vdev_id);
1655 	void (*mark_first_wakeup_packet)(struct cdp_soc_t *soc_hdl,
1656 					 uint8_t pdev_id, uint8_t value);
1657 	void (*update_mac_id)(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
1658 			      uint8_t mac_id);
1659 	void (*flush_rx_frames)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
1660 				void *peer, bool drop);
1661 	A_STATUS(*get_intra_bss_fwd_pkts_count)(struct cdp_soc_t *soc_hdl,
1662 						uint8_t vdev_id,
1663 						uint64_t *fwd_tx_packets,
1664 						uint64_t *fwd_rx_packets);
1665 	void (*pkt_log_init)(struct cdp_soc_t *soc_hdl, uint8_t pdev,
1666 			     void *scn);
1667 	void (*pkt_log_con_service)(struct cdp_soc_t *soc_hdl,
1668 				    uint8_t pdev_id, void *scn);
1669 	void (*pkt_log_exit)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id);
1670 	int (*get_num_rx_contexts)(struct cdp_soc_t *soc_hdl);
1671 	void (*register_pktdump_cb)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
1672 				    ol_txrx_pktdump_cb tx_cb,
1673 				    ol_txrx_pktdump_cb rx_cb);
1674 	void (*unregister_pktdump_cb)(struct cdp_soc_t *soc_hdl,
1675 				      uint8_t pdev_id);
1676 	void (*pdev_reset_driver_del_ack)(struct cdp_soc_t *soc_hdl,
1677 					  uint8_t pdev_id);
1678 	void (*vdev_set_driver_del_ack_enable)(struct cdp_soc_t *soc_hdl,
1679 					       uint8_t vdev_id,
1680 					       unsigned long rx_packets,
1681 					       uint32_t time_in_ms,
1682 					       uint32_t high_th,
1683 					       uint32_t low_th);
1684 	void (*vdev_set_bundle_require_flag)(uint8_t vdev_id,
1685 					     unsigned long tx_bytes,
1686 					     uint32_t time_in_ms,
1687 					     uint32_t high_th,
1688 					     uint32_t low_th);
1689 	void (*pdev_reset_bundle_require_flag)(struct cdp_soc_t *soc_hdl,
1690 					       uint8_t pdev_id);
1691 	QDF_STATUS (*txrx_ext_stats_request)(struct cdp_soc_t *soc_hdl,
1692 					     uint8_t pdev_id,
1693 					     struct cdp_txrx_ext_stats *req);
1694 	QDF_STATUS (*request_rx_hw_stats)(struct cdp_soc_t *soc_hdl,
1695 					  uint8_t vdev_id);
1696 	void (*reset_rx_hw_ext_stats)(struct cdp_soc_t *soc_hdl);
1697 	QDF_STATUS (*vdev_inform_ll_conn)(struct cdp_soc_t *soc_hdl,
1698 					  uint8_t vdev_id,
1699 					  enum vdev_ll_conn_actions action);
1700 	QDF_STATUS (*set_swlm_enable)(struct cdp_soc_t *soc_hdl,
1701 				      uint8_t val);
1702 	uint8_t (*is_swlm_enabled)(struct cdp_soc_t *soc_hdl);
1703 	void (*display_txrx_hw_info)(struct cdp_soc_t *soc_hdl);
1704 	uint32_t (*get_tx_rings_grp_bitmap)(struct cdp_soc_t *soc_hdl);
1705 #ifdef WLAN_FEATURE_PEER_TXQ_FLUSH_CONF
1706 	int (*set_peer_txq_flush_config)(struct cdp_soc_t *soc_hdl,
1707 					 uint8_t vdev_id, uint8_t *addr,
1708 					 uint8_t ac, uint32_t tid,
1709 					 enum cdp_peer_txq_flush_policy policy);
1710 #endif
1711 #ifdef FEATURE_RX_LINKSPEED_ROAM_TRIGGER
1712 	void (*set_bus_vote_lvl_high)(struct cdp_soc_t *soc_hdl, bool high);
1713 	bool (*get_bus_vote_lvl_high)(struct cdp_soc_t *soc_hdl);
1714 #endif
1715 };
1716 
1717 /**
1718  * struct cdp_ocb_ops - mcl ocb ops
1719  * @set_ocb_chan_info: set OCB channel info
1720  * @get_ocb_chan_info: get OCB channel info
1721  *
1722  * Function pointers for operations related to OCB.
1723  */
1724 struct cdp_ocb_ops {
1725 	void (*set_ocb_chan_info)(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
1726 				  struct ol_txrx_ocb_set_chan ocb_set_chan);
1727 	struct ol_txrx_ocb_chan_info *(*get_ocb_chan_info)(
1728 				struct cdp_soc_t *soc_hdl, uint8_t vdev_id);
1729 };
1730 
1731 /**
1732  * struct cdp_peer_ops - mcl peer related ops
1733  * @register_peer:
1734  * @clear_peer:
1735  * @find_peer_exist
1736  * @find_peer_exist_on_vdev
1737  * @find_peer_exist_on_other_vdev
1738  * @peer_state_update:
1739  * @get_vdevid:
1740  * @register_ocb_peer:
1741  * @peer_get_peer_mac_addr:
1742  * @get_peer_state:
1743  * @update_ibss_add_peer_num_of_vdev:
1744  * @copy_mac_addr_raw:
1745  * @add_last_real_peer:
1746  * @is_vdev_restore_last_peer:
1747  * @update_last_real_peer:
1748  */
1749 struct cdp_peer_ops {
1750 	QDF_STATUS (*register_peer)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
1751 				    struct ol_txrx_desc_type *sta_desc);
1752 	QDF_STATUS (*clear_peer)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
1753 				 struct qdf_mac_addr peer_addr);
1754 	bool (*find_peer_exist)(struct cdp_soc_t *soc, uint8_t pdev_id,
1755 				uint8_t *peer_addr);
1756 	bool (*find_peer_exist_on_vdev)(struct cdp_soc_t *soc, uint8_t vdev_id,
1757 					uint8_t *peer_addr);
1758 	bool (*find_peer_exist_on_other_vdev)(struct cdp_soc_t *soc,
1759 					      uint8_t vdev_id,
1760 					      uint8_t *peer_addr,
1761 					      uint16_t max_bssid);
1762 	QDF_STATUS (*peer_state_update)(struct cdp_soc_t *soc,
1763 					uint8_t *peer_addr,
1764 					enum ol_txrx_peer_state state);
1765 	QDF_STATUS (*get_vdevid)(struct cdp_soc_t *soc_hdl, uint8_t *peer_mac,
1766 				 uint8_t *vdev_id);
1767 	struct cdp_vdev * (*get_vdev_by_peer_addr)(struct cdp_pdev *pdev,
1768 			struct qdf_mac_addr peer_addr);
1769 	QDF_STATUS (*register_ocb_peer)(uint8_t *mac_addr);
1770 	uint8_t * (*peer_get_peer_mac_addr)(void *peer);
1771 	int (*get_peer_state)(struct cdp_soc_t *soc, uint8_t vdev_id,
1772 			      uint8_t *peer_mac);
1773 	struct cdp_vdev * (*get_vdev_for_peer)(void *peer);
1774 	int16_t (*update_ibss_add_peer_num_of_vdev)(struct cdp_soc_t *soc,
1775 						    uint8_t vdev_id,
1776 						    int16_t peer_num_delta);
1777 	void (*remove_peers_for_vdev)(struct cdp_vdev *vdev,
1778 			ol_txrx_vdev_peer_remove_cb callback,
1779 			void *callback_context, bool remove_last_peer);
1780 	void (*remove_peers_for_vdev_no_lock)(struct cdp_vdev *vdev,
1781 			ol_txrx_vdev_peer_remove_cb callback,
1782 			void *callback_context);
1783 	void (*copy_mac_addr_raw)(struct cdp_soc_t *soc, uint8_t vdev_id,
1784 				  uint8_t *bss_addr);
1785 	void (*add_last_real_peer)(struct cdp_soc_t *soc, uint8_t pdev_id,
1786 				   uint8_t vdev_id);
1787 	bool (*is_vdev_restore_last_peer)(struct cdp_soc_t *soc,
1788 					  uint8_t vdev_id,
1789 					  uint8_t *peer_mac);
1790 	void (*update_last_real_peer)(struct cdp_soc_t *soc, uint8_t pdev_id,
1791 				      uint8_t vdev_id, bool restore_last_peer);
1792 	void (*peer_detach_force_delete)(struct cdp_soc_t *soc_hdl,
1793 					 uint8_t vdev_id, uint8_t *peer_addr);
1794 	void (*set_tdls_offchan_enabled)(struct cdp_soc_t *soc, uint8_t vdev_id,
1795 					 uint8_t *peer_mac, bool val);
1796 	void (*set_peer_as_tdls_peer)(struct cdp_soc_t *soc, uint8_t vdev_id,
1797 				      uint8_t *peer_mac, bool val);
1798 	void (*peer_flush_frags)(struct cdp_soc_t *soc_hdl,
1799 				 uint8_t vdev_id, uint8_t *peer_mac);
1800 };
1801 
1802 /**
1803  * struct cdp_mob_stats_ops - mcl mob stats ops
1804  * @clear_stats: handler to clear ol txrx stats
1805  * @stats: handler to update ol txrx stats
1806  */
1807 struct cdp_mob_stats_ops {
1808 	QDF_STATUS(*clear_stats)(struct cdp_soc_t *soc_hdl,
1809 				 uint8_t pdev_id, uint8_t bitmap);
1810 	int (*stats)(uint8_t vdev_id, char *buffer, unsigned buf_len);
1811 };
1812 
1813 /**
1814  * struct cdp_pmf_ops - mcl protected management frame ops
1815  * @get_pn_info: handler to get pn info from peer
1816  *
1817  * Function pointers for pmf related operations.
1818  */
1819 struct cdp_pmf_ops {
1820 	void (*get_pn_info)(struct cdp_soc_t *soc, uint8_t *peer_mac,
1821 			    uint8_t vdev_id, uint8_t **last_pn_valid,
1822 			    uint64_t **last_pn, uint32_t **rmf_pn_replays);
1823 };
1824 #endif
1825 
1826 
1827 #ifdef DP_FLOW_CTL
1828 /**
1829  * struct cdp_cfg_ops - mcl configuration ops
1830  * @set_cfg_rx_fwd_disabled: set rx_fwd_disabled flag
1831  * @set_cfg_packet_log_enabled: set is_packet_log_enabled flag
1832  * @cfg_attach: hardcode the configuration parameters
1833  * @vdev_rx_set_intrabss_fwd: set disable_intrabss_fwd flag
1834  * @is_rx_fwd_disabled: get the rx_fwd_disabled flag,
1835  *                      1 enabled, 0 disabled.
1836  * @tx_set_is_mgmt_over_wmi_enabled: set is_mgmt_over_wmi_enabled flag to
1837  *                                   indicate that mgmt over wmi is enabled
1838  *                                   or not,
1839  *                                   1 for enabled, 0 for disable
1840  * @is_high_latency: get device is high or low latency device,
1841  *                   1 high latency bus, 0 low latency bus
1842  * @set_flow_control_parameters: set flow control parameters
1843  * @set_flow_steering: set flow_steering_enabled flag
1844  * @set_ptp_rx_opt_enabled: set is_ptp_rx_opt_enabled flag
1845  * @set_new_htt_msg_format: set new_htt_msg_format flag
1846  * @set_peer_unmap_conf_support: set enable_peer_unmap_conf_support flag
1847  * @get_peer_unmap_conf_support: get enable_peer_unmap_conf_support flag
1848  * @set_tx_compl_tsf64: set enable_tx_compl_tsf64 flag,
1849  *                      1 enabled, 0 disabled.
1850  * @get_tx_compl_tsf64: get enable_tx_compl_tsf64 flag,
1851  *                      1 enabled, 0 disabled.
1852  */
1853 struct cdp_cfg_ops {
1854 	void (*set_cfg_rx_fwd_disabled)(struct cdp_cfg *cfg_pdev,
1855 		uint8_t disable_rx_fwd);
1856 	void (*set_cfg_packet_log_enabled)(struct cdp_cfg *cfg_pdev,
1857 		uint8_t val);
1858 	struct cdp_cfg * (*cfg_attach)(qdf_device_t osdev, void *cfg_param);
1859 	void (*vdev_rx_set_intrabss_fwd)(struct cdp_soc_t *soc_hdl,
1860 					 uint8_t vdev_id, bool val);
1861 	uint8_t (*is_rx_fwd_disabled)(struct cdp_vdev *vdev);
1862 	void (*tx_set_is_mgmt_over_wmi_enabled)(uint8_t value);
1863 	int (*is_high_latency)(struct cdp_cfg *cfg_pdev);
1864 	void (*set_flow_control_parameters)(struct cdp_cfg *cfg_pdev,
1865 		void *param);
1866 	void (*set_flow_steering)(struct cdp_cfg *cfg_pdev, uint8_t val);
1867 	void (*set_ptp_rx_opt_enabled)(struct cdp_cfg *cfg_pdev, uint8_t val);
1868 	void (*set_new_htt_msg_format)(uint8_t val);
1869 	void (*set_peer_unmap_conf_support)(bool val);
1870 	bool (*get_peer_unmap_conf_support)(void);
1871 	void (*set_tx_compl_tsf64)(bool val);
1872 	bool (*get_tx_compl_tsf64)(void);
1873 };
1874 
1875 /**
1876  * struct cdp_flowctl_ops - mcl flow control
1877  * @flow_pool_map_handler: handler to map flow_id and pool descriptors
1878  * @flow_pool_unmap_handler: handler to unmap flow_id and pool descriptors
1879  * @register_pause_cb: handler to register tx pause callback
1880  * @set_desc_global_pool_size: handler to set global pool size
1881  * @dump_flow_pool_info: handler to dump global and flow pool info
1882  * @tx_desc_thresh_reached: handler to set tx desc threshold
1883  *
1884  * Function pointers for operations related to flow control
1885  */
1886 struct cdp_flowctl_ops {
1887 	QDF_STATUS (*flow_pool_map_handler)(struct cdp_soc_t *soc,
1888 					    uint8_t pdev_id,
1889 					    uint8_t vdev_id);
1890 	void (*flow_pool_unmap_handler)(struct cdp_soc_t *soc,
1891 					uint8_t pdev_id,
1892 					uint8_t vdev_id);
1893 	QDF_STATUS (*register_pause_cb)(struct cdp_soc_t *soc,
1894 					tx_pause_callback);
1895 	void (*set_desc_global_pool_size)(uint32_t num_msdu_desc);
1896 
1897 	void (*dump_flow_pool_info)(struct cdp_soc_t *soc_hdl);
1898 
1899 	bool (*tx_desc_thresh_reached)(struct cdp_soc_t *soc_hdl,
1900 				       uint8_t vdev_id);
1901 };
1902 
1903 /**
1904  * struct cdp_lflowctl_ops - mcl legacy flow control ops
1905  * @register_tx_flow_control: Register tx flow control callback
1906  * @set_vdev_tx_desc_limit:  Set tx descriptor limit for a vdev
1907  * @set_vdev_os_queue_status: Set vdev queue status
1908  * @deregister_tx_flow_control_cb: Deregister tx flow control callback
1909  * @flow_control_cb: Call osif flow control callback
1910  * @get_tx_resource: Get tx resources and compare with watermark
1911  * @ll_set_tx_pause_q_depth: set pause queue depth
1912  * @vdev_flush: Flush all packets on a particular vdev
1913  * @vdev_pause: Pause a particular vdev
1914  * @vdev_unpause: Unpause a particular vdev
1915  *
1916  * Function pointers for operations related to flow control
1917  */
1918 struct cdp_lflowctl_ops {
1919 #ifdef QCA_HL_NETDEV_FLOW_CONTROL
1920 	int (*register_tx_flow_control)(struct cdp_soc_t *soc_hdl,
1921 					uint8_t pdev_id,
1922 					tx_pause_callback flowcontrol);
1923 	int (*set_vdev_tx_desc_limit)(struct cdp_soc_t *soc_hdl,
1924 				      uint8_t vdev_id, uint32_t chan_freq);
1925 	int (*set_vdev_os_queue_status)(struct cdp_soc_t *soc_hdl,
1926 					uint8_t vdev_id,
1927 					enum netif_action_type action);
1928 #else
1929 	int (*register_tx_flow_control)(
1930 		struct cdp_soc_t *soc_hdl,
1931 		uint8_t vdev_id,
1932 		ol_txrx_tx_flow_control_fp flowControl, void *osif_fc_ctx,
1933 		ol_txrx_tx_flow_control_is_pause_fp flow_control_is_pause);
1934 #endif /* QCA_HL_NETDEV_FLOW_CONTROL */
1935 	int (*deregister_tx_flow_control_cb)(struct cdp_soc_t *soc_hdl,
1936 					     uint8_t vdev_id);
1937 	void (*flow_control_cb)(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
1938 				bool tx_resume);
1939 	bool (*get_tx_resource)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
1940 				struct qdf_mac_addr peer_addr,
1941 				unsigned int low_watermark,
1942 				unsigned int high_watermark_offset);
1943 	int (*ll_set_tx_pause_q_depth)(struct cdp_soc_t *soc, uint8_t vdev_id,
1944 				       int pause_q_depth);
1945 	void (*vdev_flush)(struct cdp_soc_t *soc_hdl, uint8_t vdev_id);
1946 	void (*vdev_pause)(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
1947 			   uint32_t reason, uint32_t pause_type);
1948 	void (*vdev_unpause)(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
1949 			     uint32_t reason, uint32_t pause_type);
1950 };
1951 
1952 /**
1953  * struct cdp_throttle_ops - mcl throttle ops
1954  * @throttle_init_period: handler to initialize tx throttle time
1955  * @throttle_set_level: handler to set tx throttle level
1956  */
1957 struct cdp_throttle_ops {
1958 	void (*throttle_init_period)(struct cdp_soc_t *soc_hdl,
1959 				     uint8_t pdev_id, int period,
1960 				     uint8_t *dutycycle_level);
1961 	void (*throttle_set_level)(struct cdp_soc_t *soc_hdl,
1962 				   uint8_t pdev_id, int level);
1963 };
1964 #endif
1965 
1966 #ifdef IPA_OFFLOAD
1967 /**
1968  * struct cdp_ipa_ops - mcl ipa data path ops
1969  * @ipa_get_resource:
1970  * @ipa_set_doorbell_paddr:
1971  * @ipa_iounmap_doorbell_vaddr: I/O unmap ipa doorbell vaddr
1972  * @ipa_set_active:
1973  * @ipa_op_response:
1974  * @ipa_register_op_cb:
1975  * @ipa_get_stat:
1976  * @ipa_tx_data_frame:
1977  * @ipa_tx_buf_smmu_mapping: Create SMMU mappings for Tx
1978  * @ipa_tx_buf_smmu_unmapping: Release SMMU mappings for Tx
1979  * buffers to IPA
1980  * @ipa_ast_create: Create/Update ast entry
1981  */
1982 struct cdp_ipa_ops {
1983 	QDF_STATUS (*ipa_get_resource)(struct cdp_soc_t *soc_hdl,
1984 				       uint8_t pdev_id);
1985 	QDF_STATUS (*ipa_set_doorbell_paddr)(struct cdp_soc_t *soc_hdl,
1986 					     uint8_t pdev_id);
1987 	QDF_STATUS (*ipa_iounmap_doorbell_vaddr)(struct cdp_soc_t *soc_hdl,
1988 						 uint8_t pdev_id);
1989 	QDF_STATUS (*ipa_set_active)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
1990 				     bool uc_active, bool is_tx);
1991 	QDF_STATUS (*ipa_op_response)(struct cdp_soc_t *soc_hdl,
1992 				      uint8_t pdev_id, uint8_t *op_msg);
1993 	QDF_STATUS (*ipa_register_op_cb)(struct cdp_soc_t *soc_hdl,
1994 					 uint8_t pdev_id,
1995 					 void (*ipa_uc_op_cb_type)
1996 					 (uint8_t *op_msg, void *osif_ctxt),
1997 					 void *usr_ctxt);
1998 	void (*ipa_deregister_op_cb)(struct cdp_soc_t *soc_hdl,
1999 				     uint8_t pdev_id);
2000 	QDF_STATUS (*ipa_get_stat)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id);
2001 	qdf_nbuf_t (*ipa_tx_data_frame)(struct cdp_soc_t *soc_hdl,
2002 					uint8_t vdev_id, qdf_nbuf_t skb);
2003 	void (*ipa_set_uc_tx_partition_base)(struct cdp_cfg *pdev,
2004 		uint32_t value);
2005 	QDF_STATUS (*ipa_update_peer_rx_stats)(struct cdp_soc_t *soc_hdl,
2006 					       uint8_t vdev_id,
2007 					       uint8_t *peer_mac,
2008 					       qdf_nbuf_t nbuf);
2009 #ifdef FEATURE_METERING
2010 	QDF_STATUS (*ipa_uc_get_share_stats)(struct cdp_soc_t *soc_hdl,
2011 					     uint8_t pdev_id,
2012 					     uint8_t reset_stats);
2013 	QDF_STATUS (*ipa_uc_set_quota)(struct cdp_soc_t *soc_hdl,
2014 				       uint8_t pdev_id, uint64_t quota_bytes);
2015 #endif
2016 	QDF_STATUS (*ipa_enable_autonomy)(struct cdp_soc_t *soc_hdl,
2017 					  uint8_t pdev_id);
2018 	QDF_STATUS (*ipa_disable_autonomy)(struct cdp_soc_t *soc_hdl,
2019 					   uint8_t pdev_id);
2020 
2021 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0)) || \
2022 	defined(CONFIG_IPA_WDI_UNIFIED_API)
2023 	QDF_STATUS (*ipa_setup)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
2024 				void *ipa_i2w_cb, void *ipa_w2i_cb,
2025 				void *ipa_wdi_meter_notifier_cb,
2026 				uint32_t ipa_desc_size, void *ipa_priv,
2027 				bool is_rm_enabled, uint32_t *tx_pipe_handle,
2028 				uint32_t *rx_pipe_handle, bool is_smmu_enabled,
2029 				qdf_ipa_sys_connect_params_t *sys_in,
2030 				bool over_gsi, qdf_ipa_wdi_hdl_t hdl,
2031 				qdf_ipa_wdi_hdl_t id,
2032 				void *ipa_ast_notify_cb);
2033 #else /* CONFIG_IPA_WDI_UNIFIED_API */
2034 	QDF_STATUS (*ipa_setup)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
2035 				void *ipa_i2w_cb, void *ipa_w2i_cb,
2036 				void *ipa_wdi_meter_notifier_cb,
2037 				uint32_t ipa_desc_size, void *ipa_priv,
2038 				bool is_rm_enabled, uint32_t *tx_pipe_handle,
2039 				uint32_t *rx_pipe_handle);
2040 #endif /* CONFIG_IPA_WDI_UNIFIED_API */
2041 	QDF_STATUS (*ipa_cleanup)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
2042 				  uint32_t tx_pipe_handle,
2043 				  uint32_t rx_pipe_handle,
2044 				  qdf_ipa_wdi_hdl_t hdl);
2045 	QDF_STATUS (*ipa_setup_iface)(char *ifname, uint8_t *mac_addr,
2046 				      qdf_ipa_client_type_t prod_client,
2047 				      qdf_ipa_client_type_t cons_client,
2048 				      uint8_t session_id, bool is_ipv6_enabled,
2049 				      qdf_ipa_wdi_hdl_t hdl);
2050 	QDF_STATUS (*ipa_cleanup_iface)(char *ifname, bool is_ipv6_enabled,
2051 					qdf_ipa_wdi_hdl_t hdl);
2052 	QDF_STATUS (*ipa_enable_pipes)(struct cdp_soc_t *soc_hdl,
2053 				       uint8_t pdev_id, qdf_ipa_wdi_hdl_t hdl);
2054 	QDF_STATUS (*ipa_disable_pipes)(struct cdp_soc_t *soc_hdl,
2055 					uint8_t pdev_id, qdf_ipa_wdi_hdl_t hdl);
2056 	QDF_STATUS (*ipa_set_perf_level)(int client,
2057 					 uint32_t max_supported_bw_mbps,
2058 					 qdf_ipa_wdi_hdl_t hdl);
2059 	bool (*ipa_rx_intrabss_fwd)(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
2060 				    qdf_nbuf_t nbuf, bool *fwd_success);
2061 	QDF_STATUS (*ipa_tx_buf_smmu_mapping)(struct cdp_soc_t *soc_hdl,
2062 					      uint8_t pdev_id,
2063 					      const char *func,
2064 					      uint32_t line);
2065 	QDF_STATUS (*ipa_tx_buf_smmu_unmapping)(struct cdp_soc_t *soc_hdl,
2066 						uint8_t pdev_id,
2067 						const char *func,
2068 						uint32_t line);
2069 #ifdef IPA_WDS_EASYMESH_FEATURE
2070 	QDF_STATUS (*ipa_ast_create)(struct cdp_soc_t *soc_hdl,
2071 				     qdf_ipa_ast_info_type_t *data);
2072 #endif
2073 };
2074 #endif
2075 
2076 #ifdef DP_POWER_SAVE
2077 /**
2078  * struct cdp_tx_delay_ops - mcl tx delay ops
2079  * @tx_delay: handler to get tx packet delay
2080  * @tx_delay_hist: handler to get tx packet delay histogram
2081  * @tx_packet_count: handler to get tx packet count
2082  * @tx_set_compute_interval: update compute interval period for TSM stats
2083  *
2084  * Function pointer for operations related to tx delay.
2085  */
2086 struct cdp_tx_delay_ops {
2087 	void (*tx_delay)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
2088 			 uint32_t *queue_delay_microsec,
2089 			 uint32_t *tx_delay_microsec, int category);
2090 	void (*tx_delay_hist)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
2091 			      uint16_t *bin_values, int category);
2092 	void (*tx_packet_count)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id,
2093 				uint16_t *out_packet_count,
2094 				uint16_t *out_packet_loss_count, int category);
2095 	void (*tx_set_compute_interval)(struct cdp_soc_t *soc_hdl,
2096 					uint8_t pdev_id, uint32_t interval);
2097 };
2098 
2099 /**
2100  * struct cdp_bus_ops - mcl bus suspend/resume ops
2101  * @bus_suspend: handler for bus suspend
2102  * @bus_resume: handler for bus resume
2103  * @process_wow_ack_rsp: handler for wow ack response
2104  * @process_target_suspend_req: handler for target suspend request
2105  */
2106 struct cdp_bus_ops {
2107 	QDF_STATUS (*bus_suspend)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id);
2108 	QDF_STATUS (*bus_resume)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id);
2109 	void (*process_wow_ack_rsp)(struct cdp_soc_t *soc_hdl, uint8_t pdev_id);
2110 	void (*process_target_suspend_req)(struct cdp_soc_t *soc_hdl,
2111 					   uint8_t pdev_id);
2112 };
2113 #endif
2114 
2115 #ifdef RECEIVE_OFFLOAD
2116 /**
2117  * struct cdp_rx_offld_ops - mcl host receive offload ops
2118  * @register_rx_offld_flush_cb:
2119  * @deregister_rx_offld_flush_cb:
2120  */
2121 struct cdp_rx_offld_ops {
2122 	void (*register_rx_offld_flush_cb)(void (rx_offld_flush_cb)(void *));
2123 	void (*deregister_rx_offld_flush_cb)(void);
2124 };
2125 #endif
2126 
2127 #if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
2128 /**
2129  * struct cdp_cfr_ops - host cfr ops
2130  * @txrx_cfr_filter: Handler to configure host rx monitor status ring
2131  * @txrx_get_cfr_rcc: Handler to get CFR mode
2132  * @txrx_set_cfr_rcc: Handler to enable/disable CFR mode
2133  * @txrx_get_cfr_dbg_stats: Handler to get debug statistics for CFR mode
2134  * @txrx_clear_cfr_dbg_stats: Handler to clear debug statistics for CFR mode
2135  */
2136 struct cdp_cfr_ops {
2137 	void (*txrx_cfr_filter)(struct cdp_soc_t *soc_hdl,
2138 				uint8_t pdev_id,
2139 				bool enable,
2140 				struct cdp_monitor_filter *filter_val,
2141 				bool cfr_enable_monitor_mode);
2142 	bool (*txrx_get_cfr_rcc)(struct cdp_soc_t *soc_hdl,
2143 				 uint8_t pdev_id);
2144 	void (*txrx_set_cfr_rcc)(struct cdp_soc_t *soc_hdl,
2145 				 uint8_t pdev_id,
2146 				 bool enable);
2147 	void (*txrx_get_cfr_dbg_stats)(struct cdp_soc_t *soc_hdl,
2148 				       uint8_t pdev_id,
2149 				       struct cdp_cfr_rcc_stats *buf);
2150 	void (*txrx_clear_cfr_dbg_stats)(struct cdp_soc_t *soc_hdl,
2151 					 uint8_t pdev_id);
2152 };
2153 #endif
2154 
2155 #ifdef WLAN_SUPPORT_MSCS
2156 /**
2157  * struct cdp_mscs_ops - data path ops for MSCS
2158  * @mscs_peer_lookup_n_get_priority:
2159  */
2160 struct cdp_mscs_ops {
2161 	int (*mscs_peer_lookup_n_get_priority)(struct cdp_soc_t *soc,
2162 			uint8_t *src_mac,
2163 			uint8_t *dst_mac,
2164 			qdf_nbuf_t nbuf);
2165 };
2166 #endif
2167 
2168 #ifdef WLAN_SUPPORT_MESH_LATENCY
2169 /**
2170  * struct cdp_mesh_latency_ops - data path ops for Mesh latency
2171  * @mesh_latency_update_peer_parameter:
2172  */
2173 struct cdp_mesh_latency_ops {
2174 	QDF_STATUS (*mesh_latency_update_peer_parameter)(
2175 			struct cdp_soc_t *soc,
2176 			uint8_t *dest_mac, uint32_t service_interval_dl,
2177 			uint32_t burst_size_dl, uint32_t service_interval_ul,
2178 			uint32_t burst_size_ul, uint16_t priority,
2179 			uint8_t add_or_sub);
2180 };
2181 #endif
2182 
2183 #ifdef WLAN_SUPPORT_SCS
2184 /**
2185  * struct cdp_scs_ops - data path ops for SCS
2186  * @scs_peer_lookup_n_rule_match : Handler for peer lookup and scs rule match
2187  */
2188 struct cdp_scs_ops {
2189 	bool (*scs_peer_lookup_n_rule_match)(struct cdp_soc_t *soc,
2190 					     uint32_t rule_id,
2191 					     uint8_t *dst_mac_addr);
2192 };
2193 #endif
2194 
2195 #ifdef CONFIG_SAWF_DEF_QUEUES
2196 struct cdp_sawf_ops {
2197 	QDF_STATUS
2198 	(*sawf_def_queues_map_req)(struct cdp_soc_t *soc, uint8_t *mac_addr,
2199 				   uint8_t svc_class_id);
2200 	QDF_STATUS
2201 	(*sawf_def_queues_unmap_req)(struct cdp_soc_t *soc, uint8_t *mac_addr,
2202 				     uint8_t svc_class_id);
2203 	QDF_STATUS
2204 	(*sawf_def_queues_get_map_report)(struct cdp_soc_t *soc,
2205 					  uint8_t *mac_addr);
2206 #ifdef CONFIG_SAWF
2207 	QDF_STATUS
2208 	(*txrx_get_peer_sawf_delay_stats)(struct cdp_soc_t *soc,
2209 					  uint32_t svc_id, uint8_t *mac,
2210 					  void *data);
2211 	QDF_STATUS
2212 	(*txrx_get_peer_sawf_tx_stats)(struct cdp_soc_t *soc,
2213 				       uint32_t svc_id, uint8_t *mac,
2214 				       void *data);
2215 	QDF_STATUS
2216 	(*sawf_mpdu_stats_req)(struct cdp_soc_t *soc, uint8_t enable);
2217 	QDF_STATUS
2218 	(*sawf_mpdu_details_stats_req)(struct cdp_soc_t *soc, uint8_t enable);
2219 	QDF_STATUS
2220 	(*txrx_sawf_set_mov_avg_params)(uint32_t num_pkt, uint32_t num_win);
2221 	QDF_STATUS
2222 	(*txrx_sawf_set_sla_params)(uint32_t num_pkt, uint32_t time_secs);
2223 	QDF_STATUS
2224 	(*txrx_sawf_init_telemtery_params)(void);
2225 	QDF_STATUS
2226 	(*telemetry_get_throughput_stats)(void *arg, uint64_t *in_bytes,
2227 					  uint64_t *in_cnt, uint64_t *tx_bytes,
2228 					  uint64_t *tx_cnt, uint8_t tid,
2229 					  uint8_t msduq);
2230 	QDF_STATUS
2231 	(*telemetry_get_mpdu_stats)(void *arg, uint64_t *svc_int_pass,
2232 				    uint64_t *svc_int_fail,
2233 				    uint64_t *burst_pass, uint64_t *burst_fail,
2234 				    uint8_t tid, uint8_t msduq);
2235 	QDF_STATUS
2236 	(*telemetry_get_drop_stats)(void *arg, uint64_t *pass, uint64_t *drop,
2237 				    uint64_t *drop_ttl, uint8_t tid,
2238 				    uint8_t msduq);
2239 	QDF_STATUS
2240 	(*peer_config_ul)(struct cdp_soc_t *hdl, uint8_t *mac_addr, uint8_t tid,
2241 			  uint32_t service_interval, uint32_t burst_size,
2242 			  uint8_t add_or_sub);
2243 	bool
2244 	(*swaf_peer_is_sla_configured)(struct cdp_soc_t *soc,
2245 				       uint8_t *mac_addr);
2246 
2247 #endif
2248 };
2249 #endif
2250 
2251 #ifdef WLAN_SUPPORT_PPEDS
2252 struct cdp_ppeds_txrx_ops {
2253 	QDF_STATUS
2254 	(*ppeds_entry_attach)(struct cdp_soc_t *soc,
2255 			      uint8_t vdev_id, void *vpai,
2256 			      int32_t *ppe_vp_num);
2257 	QDF_STATUS
2258 	(*ppeds_enable_pri2tid)(struct cdp_soc_t *soc,
2259 				uint8_t vdev_id, bool val);
2260 	void (*ppeds_entry_detach)(struct cdp_soc_t *soc,
2261 				   uint8_t vdev_id);
2262 	void (*ppeds_set_int_pri2tid)(struct cdp_soc_t *soc,
2263 				      uint8_t *pri2tid);
2264 	void (*ppeds_update_int_pri2tid)(struct cdp_soc_t *soc,
2265 					 uint8_t pri, uint8_t tid);
2266 	void (*ppeds_entry_dump)(struct cdp_soc_t *soc);
2267 };
2268 #endif /* WLAN_SUPPORT_PPEDS */
2269 
2270 struct cdp_ops {
2271 	struct cdp_cmn_ops          *cmn_drv_ops;
2272 	struct cdp_ctrl_ops         *ctrl_ops;
2273 	struct cdp_me_ops           *me_ops;
2274 	struct cdp_mon_ops          *mon_ops;
2275 	struct cdp_host_stats_ops   *host_stats_ops;
2276 	struct cdp_wds_ops          *wds_ops;
2277 	struct cdp_raw_ops          *raw_ops;
2278 	struct cdp_pflow_ops        *pflow_ops;
2279 #ifdef DP_PEER_EXTENDED_API
2280 	struct cdp_misc_ops         *misc_ops;
2281 	struct cdp_peer_ops         *peer_ops;
2282 	struct cdp_ocb_ops          *ocb_ops;
2283 	struct cdp_mob_stats_ops    *mob_stats_ops;
2284 	struct cdp_pmf_ops          *pmf_ops;
2285 #endif
2286 #ifdef DP_FLOW_CTL
2287 	struct cdp_cfg_ops          *cfg_ops;
2288 	struct cdp_flowctl_ops      *flowctl_ops;
2289 	struct cdp_lflowctl_ops     *l_flowctl_ops;
2290 	struct cdp_throttle_ops     *throttle_ops;
2291 #endif
2292 #ifdef DP_POWER_SAVE
2293 	struct cdp_bus_ops          *bus_ops;
2294 	struct cdp_tx_delay_ops     *delay_ops;
2295 #endif
2296 #ifdef IPA_OFFLOAD
2297 	struct cdp_ipa_ops          *ipa_ops;
2298 #endif
2299 #ifdef RECEIVE_OFFLOAD
2300 	struct cdp_rx_offld_ops     *rx_offld_ops;
2301 #endif
2302 #if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
2303 	struct cdp_cfr_ops          *cfr_ops;
2304 #endif
2305 #ifdef WLAN_SUPPORT_MSCS
2306 	struct cdp_mscs_ops         *mscs_ops;
2307 #endif
2308 #ifdef WLAN_SUPPORT_MESH_LATENCY
2309 	struct cdp_mesh_latency_ops         *mesh_latency_ops;
2310 #endif
2311 #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
2312 	struct cdp_mlo_ops  *mlo_ops;
2313 #endif
2314 #ifdef CONFIG_SAWF_DEF_QUEUES
2315 	struct cdp_sawf_ops  *sawf_ops;
2316 #endif
2317 #ifdef WLAN_SUPPORT_SCS
2318 	struct cdp_scs_ops   *scs_ops;
2319 #endif
2320 #ifdef WLAN_SUPPORT_PPEDS
2321 	struct cdp_ppeds_txrx_ops *ppeds_ops;
2322 #endif
2323 };
2324 #endif
2325