1  /*
2   * Copyright (c) 2011-2021 The Linux Foundation. All rights reserved.
3   * Copyright (c) 2021-2024 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  /**
21   * DOC: cdp_txrx_cmn.h
22   * Define the host data path converged API functions
23   * called by the host control SW and the OS interface module
24   */
25  #ifndef _CDP_TXRX_CMN_H_
26  #define _CDP_TXRX_CMN_H_
27  
28  #include "qdf_types.h"
29  #include "qdf_nbuf.h"
30  #include "cdp_txrx_ops.h"
31  #include "cdp_txrx_handle.h"
32  #include "cdp_txrx_cmn_struct.h"
33  #include "wlan_objmgr_global_obj.h"
34  
35  #ifdef WLAN_SUPPORT_DPDK
36  #include <cfgmgr_api_if.h>
37  #include <dpdk_wlan_msg_types.h>
38  #endif
39  
40  #ifdef ENABLE_VERBOSE_DEBUG
41  extern bool is_dp_verbose_debug_enabled;
42  #endif
43  
44  /******************************************************************************
45   *
46   * Common Data Path Header File
47   *
48   *****************************************************************************/
49  #define dp_alert(params...) QDF_TRACE_FATAL(QDF_MODULE_ID_DP, params)
50  #define dp_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_DP, params)
51  #define dp_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_DP, params)
52  #define dp_info(params...) \
53  	__QDF_TRACE_FL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_DP, ## params)
54  #define dp_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_DP, params)
55  
56  #ifdef DP_PRINT_NO_CONSOLE
57  #define dp_err_log(params...) \
58  	__QDF_TRACE_FL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_DP, ## params)
59  #define dp_info_rl(params...) \
60  	__QDF_TRACE_RL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_DP, ## params)
61  #else
62  #define dp_err_log(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_DP, params)
63  #define dp_info_rl(params...) QDF_TRACE_INFO_RL(QDF_MODULE_ID_DP, params)
64  #endif /* DP_PRINT_NO_CONSOLE */
65  
66  #ifdef ENABLE_VERBOSE_DEBUG
67  /**
68   * enum verbose_debug_module -
69   * if INI "enable_verbose_debug" has to set following bit positions to enable
70   * respective module's excessive logging,
71   *
72   * @hif_verbose_debug_mask: 1st bit [0th index] is  for HIF module
73   * @hal_verbose_debug_mask: 2nd bit [1st index] is for HAL module
74   * @dp_verbose_debug_mask:  3rd bit [2nd index] is for DP module
75   */
76  enum verbose_debug_module {
77  	hif_verbose_debug_mask   = 1 << 0,
78  	hal_verbose_debug_mask   = 1 << 1,
79  	dp_verbose_debug_mask    = 1 << 2,
80  };
81  
82  /* legacy misspelled enumerator */
83  #define hif_vebose_debug_mask hif_verbose_debug_mask
84  
85  #define dp_verbose_debug(params...) \
86  		if (unlikely(is_dp_verbose_debug_enabled)) \
87  			do {\
88  				QDF_TRACE_DEBUG(QDF_MODULE_ID_DP, params); \
89  			} while (0)
90  #else
91  #define dp_verbose_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_DP, params)
92  #endif
93  
94  #define dp_nofl_alert(params...) \
95  	QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_DP, params)
96  #define dp_nofl_err(params...) \
97  	QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_DP, params)
98  #define dp_nofl_warn(params...) \
99  	QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_DP, params)
100  #define dp_nofl_info(params...) \
101  	QDF_TRACE_INFO_NO_FL(QDF_MODULE_ID_DP, params)
102  #define dp_nofl_debug(params...) \
103  	QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_DP, params)
104  
105  #define dp_alert_rl(params...) QDF_TRACE_FATAL_RL(QDF_MODULE_ID_DP, params)
106  #define dp_err_rl(params...) QDF_TRACE_ERROR_RL(QDF_MODULE_ID_DP, params)
107  #define dp_warn_rl(params...) QDF_TRACE_WARN_RL(QDF_MODULE_ID_DP, params)
108  #define dp_debug_rl(params...) QDF_TRACE_DEBUG_RL(QDF_MODULE_ID_DP, params)
109  
110  #define dp_cdp_alert(params...) QDF_TRACE_FATAL(QDF_MODULE_ID_DP_CDP, params)
111  #define dp_cdp_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_DP_CDP, params)
112  #define dp_cdp_warn(params...) QDF_TRACE_WARN(QDF_MODULE_ID_DP_CDP, params)
113  #define dp_cdp_info(params...) \
114  	__QDF_TRACE_FL(QDF_TRACE_LEVEL_INFO_HIGH, QDF_MODULE_ID_DP_CDP, ## params)
115  #define dp_cdp_debug(params...) QDF_TRACE_DEBUG(QDF_MODULE_ID_DP_CDP, params)
116  
117  #define dp_cdp_nofl_alert(params...) \
118  	QDF_TRACE_FATAL_NO_FL(QDF_MODULE_ID_DP_CDP, params)
119  #define dp_cdp_nofl_err(params...) \
120  	QDF_TRACE_ERROR_NO_FL(QDF_MODULE_ID_DP_CDP, params)
121  #define dp_cdp_nofl_warn(params...) \
122  	QDF_TRACE_WARN_NO_FL(QDF_MODULE_ID_DP_CDP, params)
123  #define dp_cdp_nofl_info(params...) \
124  	QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_DP_CDP, params)
125  #define dp_cdp_nofl_debug(params...) \
126  	QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_DP_CDP, params)
127  
128  #define DP_PEER_INFO_PARAMS_INIT(peer_info, _vdev_id, \
129  				_peer_mac, _addr_align, _peer_type) \
130  ({	typeof(peer_info) _peer_info = (peer_info); \
131  	do {								\
132  		(_peer_info)->vdev_id = (_vdev_id);			\
133  		(_peer_info)->mac_addr = (_peer_mac);			\
134  		(_peer_info)->mac_addr_is_aligned = (_addr_align);	\
135  		(_peer_info)->peer_type = (_peer_type);			\
136  	} while (0); })
137  
138  #ifdef WLAN_FEATURE_11BE_MLO
139  #define CDP_RX_ML_PEER_VALID_MASK  (0x00002000)
140  #define CDP_RX_ML_PEER_VALID_SHIFT (13)
141  #define CDP_RX_GET_ML_PEER_VALID(skb) \
142  	((QDF_NBUF_CB_RX_PEER_ID(skb) & \
143  	  CDP_RX_ML_PEER_VALID_MASK) >> CDP_RX_ML_PEER_VALID_SHIFT)
144  #endif
145  
146  /**
147   * enum vdev_host_stats_id -
148   * host stats update from CDP have to set one of the following stats ID
149   *
150   * @DP_VDEV_STATS_PKT_CNT_ONLY: update Tx packet count only
151   * @DP_VDEV_STATS_TX_ME: update Tx ingress stats
152   */
153  enum vdev_host_stats_id {
154  	DP_VDEV_STATS_PKT_CNT_ONLY,
155  	DP_VDEV_STATS_TX_ME,
156  };
157  
158  /*
159   * BW types used for RX PPDU
160   */
161  enum rx_tlv_bw {
162  	RX_TLV_BW_20MHZ,
163  	RX_TLV_BW_40MHZ,
164  	RX_TLV_BW_80MHZ,
165  	RX_TLV_BW_160MHZ,
166  	RX_TLV_BW_320MHZ,
167  	RX_TLV_BW_240MHZ,
168  	RX_TLV_BW_CNT,
169  };
170  
171  /**
172   * typedef ipa_uc_op_cb_type() - Register OP handler function
173   * @op_msg: message
174   * @osif_ctxt: OSIF context
175   */
176  typedef void (*ipa_uc_op_cb_type)(uint8_t *op_msg,
177  				  void *osif_ctxt);
178  
179  #ifdef QCA_SUPPORT_DP_GLOBAL_CTX
180  /* Global level structure for win contexts */
181  struct dp_global_context {
182  	struct dp_rx_fst *fst_ctx;
183  	struct dp_tx_desc_pool_s *tx_desc[2][4];
184  	struct dp_hw_cookie_conversion_t *tx_cc_ctx[4];
185  	struct dp_tx_desc_pool_s *spcl_tx_desc[2][4];
186  	struct dp_hw_cookie_conversion_t *spcl_tx_cc_ctx[4];
187  	qdf_atomic_t rx_fst_ref_cnt;
188  	qdf_atomic_t global_descriptor_in_use;
189  	int tx_cookie_ctx_alloc_cnt;
190  	int tx_desc_pool_alloc_cnt[2];
191  	int tx_desc_pool_init_cnt[2];
192  	int spcl_tx_cookie_ctx_alloc_cnt;
193  	int spcl_tx_desc_pool_alloc_cnt[2];
194  	int spcl_tx_desc_pool_init_cnt[2];
195  };
196  
197  /**
198   * cdp_global_ctx_init() - to initialise global context for tx descriptors
199   *
200   * Return: QDF_STATUS on success
201   */
cdp_global_ctx_init(void)202  static inline QDF_STATUS cdp_global_ctx_init(void)
203  {
204  	struct dp_global_context *dp_global;
205  	QDF_STATUS status = QDF_STATUS_SUCCESS;
206  
207  	if (wlan_objmgr_get_global_ctx()) {
208  		dp_err("Global object is already created");
209  		return QDF_STATUS_SUCCESS;
210  	}
211  
212  	dp_global =  (struct dp_global_context *)
213  			qdf_mem_malloc(sizeof(*dp_global));
214  
215  	if (!dp_global)
216  		return QDF_STATUS_E_FAILURE;
217  
218  	qdf_mem_zero(dp_global, sizeof(*dp_global));
219  	wlan_objmgr_set_global_ctx(dp_global);
220  	qdf_atomic_set(&dp_global->global_descriptor_in_use, 0);
221  	dp_global->fst_ctx = NULL;
222  	qdf_atomic_set(&dp_global->rx_fst_ref_cnt, 0);
223  
224  	return status;
225  }
226  
227  /**
228   * cdp_global_ctx_deinit() - to deinitialise global context for tx descriptors
229   *
230   * Return: SUCCESS status on success
231   */
cdp_global_ctx_deinit(void)232  static inline QDF_STATUS cdp_global_ctx_deinit(void)
233  {
234  	struct dp_global_context *dp_global = wlan_objmgr_get_global_ctx();
235  	QDF_STATUS status = QDF_STATUS_SUCCESS;
236  
237  	if (!dp_global)
238  		return QDF_STATUS_SUCCESS;
239  
240  	qdf_mem_free(dp_global);
241  	wlan_objmgr_set_global_ctx(NULL);
242  
243  	return status;
244  }
245  #else
cdp_global_ctx_init(void)246  static inline QDF_STATUS cdp_global_ctx_init(void)
247  {
248  	return QDF_STATUS_SUCCESS;
249  }
250  
cdp_global_ctx_deinit(void)251  static inline QDF_STATUS cdp_global_ctx_deinit(void)
252  {
253  	return QDF_STATUS_SUCCESS;
254  }
255  #endif
256  
257  static inline QDF_STATUS
cdp_soc_attach_target(ol_txrx_soc_handle soc)258  cdp_soc_attach_target(ol_txrx_soc_handle soc)
259  {
260  	if (!soc || !soc->ops) {
261  		dp_cdp_debug("Invalid Instance:");
262  		QDF_BUG(0);
263  		return QDF_STATUS_E_INVAL;
264  	}
265  
266  	if (!soc->ops->cmn_drv_ops ||
267  	    !soc->ops->cmn_drv_ops->txrx_soc_attach_target)
268  		return QDF_STATUS_SUCCESS;
269  
270  	return soc->ops->cmn_drv_ops->txrx_soc_attach_target(soc);
271  
272  }
273  
274  static inline QDF_STATUS
cdp_vdev_attach(ol_txrx_soc_handle soc,uint8_t pdev_id,struct cdp_vdev_info * vdev_info)275  cdp_vdev_attach(ol_txrx_soc_handle soc, uint8_t pdev_id,
276  		struct cdp_vdev_info *vdev_info)
277  {
278  	if (!soc || !soc->ops) {
279  		dp_cdp_debug("Invalid Instance:");
280  		QDF_BUG(0);
281  		return QDF_STATUS_E_FAILURE;
282  	}
283  
284  	if (!soc->ops->cmn_drv_ops ||
285  	    !soc->ops->cmn_drv_ops->txrx_vdev_attach)
286  		return QDF_STATUS_E_FAILURE;
287  
288  	return soc->ops->cmn_drv_ops->txrx_vdev_attach(soc, pdev_id, vdev_info);
289  }
290  
291  #ifdef DP_FLOW_CTL
292  /**
293   * cdp_flow_pool_map() - Create flow pool for vdev
294   * @soc: data path soc handle
295   * @pdev_id: id of dp pdev handle
296   * @vdev_id: vdev_id corresponding to vdev start
297   *
298   * Create per vdev flow pool.
299   *
300   * Return: QDF_STATUS
301   */
cdp_flow_pool_map(ol_txrx_soc_handle soc,uint8_t pdev_id,uint8_t vdev_id)302  static inline QDF_STATUS cdp_flow_pool_map(ol_txrx_soc_handle soc,
303  					   uint8_t pdev_id, uint8_t vdev_id)
304  {
305  	if (!soc || !soc->ops) {
306  		dp_cdp_debug("Invalid Instance:");
307  		QDF_BUG(0);
308  		return QDF_STATUS_E_INVAL;
309  	}
310  
311  	if (!soc->ops->flowctl_ops ||
312  	    !soc->ops->flowctl_ops->flow_pool_map_handler)
313  		return QDF_STATUS_E_INVAL;
314  
315  	return soc->ops->flowctl_ops->flow_pool_map_handler(soc, pdev_id,
316  							    vdev_id);
317  }
318  
319  /**
320   * cdp_flow_pool_unmap() - Delete flow pool
321   * @soc: data path soc handle
322   * @pdev_id: id of dp pdev handle
323   * @vdev_id: vdev_id corresponding to vdev start
324   *
325   * Delete flow pool
326   *
327   * Return: none
328   */
cdp_flow_pool_unmap(ol_txrx_soc_handle soc,uint8_t pdev_id,uint8_t vdev_id)329  static inline void cdp_flow_pool_unmap(ol_txrx_soc_handle soc,
330  				       uint8_t pdev_id, uint8_t vdev_id)
331  {
332  	if (!soc || !soc->ops) {
333  		dp_cdp_debug("Invalid Instance:");
334  		QDF_BUG(0);
335  		return;
336  	}
337  
338  	if (!soc->ops->flowctl_ops ||
339  	    !soc->ops->flowctl_ops->flow_pool_unmap_handler)
340  		return;
341  
342  	return soc->ops->flowctl_ops->flow_pool_unmap_handler(soc, pdev_id,
343  							vdev_id);
344  }
345  #endif
346  
347  static inline QDF_STATUS
cdp_vdev_detach(ol_txrx_soc_handle soc,uint8_t vdev_id,ol_txrx_vdev_delete_cb callback,void * cb_context)348  cdp_vdev_detach(ol_txrx_soc_handle soc, uint8_t vdev_id,
349  		ol_txrx_vdev_delete_cb callback, void *cb_context)
350  {
351  	if (!soc || !soc->ops) {
352  		dp_cdp_debug("Invalid Instance:");
353  		QDF_BUG(0);
354  		return QDF_STATUS_E_FAILURE;
355  	}
356  
357  	if (!soc->ops->cmn_drv_ops ||
358  	    !soc->ops->cmn_drv_ops->txrx_vdev_detach)
359  		return QDF_STATUS_E_FAILURE;
360  
361  	return soc->ops->cmn_drv_ops->txrx_vdev_detach(soc, vdev_id,
362  						       callback, cb_context);
363  }
364  
365  #if defined(WLAN_FEATURE_11BE_MLO) && defined(WLAN_MLO_MULTI_CHIP)
366  static inline void
cdp_vdev_recovery_flush_peers(ol_txrx_soc_handle soc,uint8_t vdev_id,bool mlo_peers_only)367  cdp_vdev_recovery_flush_peers(ol_txrx_soc_handle soc,
368  			      uint8_t vdev_id,
369  			      bool mlo_peers_only)
370  {
371  	if (!soc || !soc->ops) {
372  		dp_cdp_debug("Invalid Instance:");
373  		QDF_BUG(0);
374  		return;
375  	}
376  
377  	if (!soc->ops->cmn_drv_ops ||
378  	    !soc->ops->cmn_drv_ops->txrx_recovery_vdev_flush_peers)
379  		return;
380  
381  	soc->ops->cmn_drv_ops->txrx_recovery_vdev_flush_peers(soc,
382  							      vdev_id,
383  							      mlo_peers_only);
384  }
385  #endif
386  
387  static inline int
cdp_pdev_attach_target(ol_txrx_soc_handle soc,uint8_t pdev_id)388  cdp_pdev_attach_target(ol_txrx_soc_handle soc, uint8_t pdev_id)
389  {
390  	if (!soc || !soc->ops) {
391  		dp_cdp_debug("Invalid Instance:");
392  		QDF_BUG(0);
393  		return 0;
394  	}
395  
396  	if (!soc->ops->cmn_drv_ops ||
397  	    !soc->ops->cmn_drv_ops->txrx_pdev_attach_target)
398  		return 0;
399  
400  	return soc->ops->cmn_drv_ops->txrx_pdev_attach_target(soc, pdev_id);
401  }
402  
cdp_pdev_attach(ol_txrx_soc_handle soc,struct cdp_pdev_attach_params * params)403  static inline QDF_STATUS cdp_pdev_attach
404  	(ol_txrx_soc_handle soc, struct cdp_pdev_attach_params *params)
405  {
406  	if (!soc || !soc->ops) {
407  		dp_cdp_debug("Invalid Instance:");
408  		QDF_BUG(0);
409  		return QDF_STATUS_E_FAILURE;
410  	}
411  
412  	if (!soc->ops->cmn_drv_ops ||
413  	    !soc->ops->cmn_drv_ops->txrx_pdev_attach)
414  		return QDF_STATUS_E_FAILURE;
415  
416  	return soc->ops->cmn_drv_ops->txrx_pdev_attach(soc, params);
417  }
418  
419  /**
420   * cdp_pdev_post_attach() - attach the data SW state
421   * @soc: datapath soc handle
422   * @pdev_id: the data physical device id being removed
423   *
424   * This function is used when the WLAN driver is being loaded to
425   * attach the host data component within the driver.
426   *
427   * Return: 0 for success or error code
428   */
cdp_pdev_post_attach(ol_txrx_soc_handle soc,uint8_t pdev_id)429  static inline int cdp_pdev_post_attach(ol_txrx_soc_handle soc, uint8_t pdev_id)
430  {
431  	if (!soc || !soc->ops) {
432  		dp_cdp_debug("Invalid Instance:");
433  		QDF_BUG(0);
434  		return 0;
435  	}
436  
437  	if (!soc->ops->cmn_drv_ops ||
438  	    !soc->ops->cmn_drv_ops->txrx_pdev_post_attach)
439  		return 0;
440  
441  	return soc->ops->cmn_drv_ops->txrx_pdev_post_attach(soc, pdev_id);
442  }
443  
444  /**
445   * cdp_pdev_pre_detach() - detach the data SW state
446   * @soc: datapath soc handle
447   * @pdev_id: the data physical device id being removed
448   * @force: delete the pdev (and its vdevs and peers) even if
449   * there are outstanding references by the target to the vdevs
450   * and peers within the pdev
451   *
452   * This function is used when the WLAN driver is being removed to
453   * detach the host data component within the driver.
454   *
455   * Return: None
456   */
457  static inline void
cdp_pdev_pre_detach(ol_txrx_soc_handle soc,uint8_t pdev_id,int force)458  cdp_pdev_pre_detach(ol_txrx_soc_handle soc, uint8_t pdev_id, int force)
459  {
460  	if (!soc || !soc->ops) {
461  		dp_cdp_debug("Invalid Instance:");
462  		QDF_BUG(0);
463  		return;
464  	}
465  
466  	if (!soc->ops->cmn_drv_ops ||
467  	    !soc->ops->cmn_drv_ops->txrx_pdev_pre_detach)
468  		return;
469  
470  	soc->ops->cmn_drv_ops->txrx_pdev_pre_detach(soc, pdev_id, force);
471  }
472  
473  static inline QDF_STATUS
cdp_pdev_detach(ol_txrx_soc_handle soc,uint8_t pdev_id,int force)474  cdp_pdev_detach(ol_txrx_soc_handle soc, uint8_t pdev_id, int force)
475  {
476  	if (!soc || !soc->ops) {
477  		dp_cdp_debug("Invalid Instance:");
478  		QDF_BUG(0);
479  		return QDF_STATUS_E_FAILURE;
480  	}
481  
482  	if (!soc->ops->cmn_drv_ops ||
483  	    !soc->ops->cmn_drv_ops->txrx_pdev_detach)
484  		return QDF_STATUS_E_FAILURE;
485  
486  	return soc->ops->cmn_drv_ops->txrx_pdev_detach(soc, pdev_id, force);
487  }
488  
489  static inline void
cdp_pdev_deinit(ol_txrx_soc_handle soc,uint8_t pdev_id,int force)490  cdp_pdev_deinit(ol_txrx_soc_handle soc, uint8_t pdev_id, int force)
491  {
492  	if (!soc || !soc->ops) {
493  		dp_cdp_debug("Invalid Instance:");
494  		QDF_BUG(0);
495  		return;
496  	}
497  
498  	if (!soc->ops->cmn_drv_ops ||
499  	    !soc->ops->cmn_drv_ops->txrx_pdev_deinit)
500  		return;
501  
502  	soc->ops->cmn_drv_ops->txrx_pdev_deinit(soc, pdev_id, force);
503  }
504  
cdp_peer_create(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac_addr)505  static inline QDF_STATUS cdp_peer_create
506  	(ol_txrx_soc_handle soc, uint8_t vdev_id,
507  	uint8_t *peer_mac_addr)
508  {
509  	if (!soc || !soc->ops) {
510  		dp_cdp_debug("Invalid Instance:");
511  		QDF_BUG(0);
512  		return QDF_STATUS_E_FAILURE;
513  	}
514  
515  	if (!soc->ops->cmn_drv_ops ||
516  	    !soc->ops->cmn_drv_ops->txrx_peer_create)
517  		return QDF_STATUS_E_FAILURE;
518  
519  	return soc->ops->cmn_drv_ops->txrx_peer_create(soc, vdev_id,
520  			peer_mac_addr, CDP_LINK_PEER_TYPE);
521  }
522  
cdp_peer_setup(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,struct cdp_peer_setup_info * setup_info)523  static inline  QDF_STATUS cdp_peer_setup
524  	(ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *peer_mac,
525  	 struct cdp_peer_setup_info *setup_info)
526  {
527  	if (!soc || !soc->ops) {
528  		dp_cdp_debug("Invalid Instance:");
529  		QDF_BUG(0);
530  		return  QDF_STATUS_E_FAILURE;
531  	}
532  
533  	if (!soc->ops->cmn_drv_ops ||
534  	    !soc->ops->cmn_drv_ops->txrx_peer_setup)
535  		return QDF_STATUS_E_FAILURE;
536  
537  	return soc->ops->cmn_drv_ops->txrx_peer_setup(soc, vdev_id,
538  						      peer_mac, setup_info);
539  }
540  
541  /**
542   * cdp_cp_peer_del_response() - Call the peer delete response handler
543   * @soc: Datapath SOC handle
544   * @vdev_id: id of virtual device object
545   * @peer_mac_addr: Mac address of the peer
546   *
547   * Return: void
548   */
cdp_cp_peer_del_response(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac_addr)549  static inline QDF_STATUS cdp_cp_peer_del_response
550  	(ol_txrx_soc_handle soc,
551  	 uint8_t vdev_id,
552  	 uint8_t *peer_mac_addr)
553  {
554  	if (!soc || !soc->ops) {
555  		dp_cdp_debug("Invalid Instance:");
556  		QDF_BUG(0);
557  		return QDF_STATUS_E_FAILURE;
558  	}
559  
560  	if (!soc->ops->cmn_drv_ops ||
561  	    !soc->ops->cmn_drv_ops->txrx_cp_peer_del_response)
562  		return QDF_STATUS_E_FAILURE;
563  
564  	return soc->ops->cmn_drv_ops->txrx_cp_peer_del_response(soc,
565  								vdev_id,
566  								peer_mac_addr);
567  }
568  /**
569   * cdp_peer_get_ast_info_by_soc() - search the soc AST hash table
570   *                                  and return ast entry information
571   *                                  of first ast entry found in the
572   *                                  table with given mac address
573   *
574   * @soc: data path soc handle
575   * @ast_mac_addr: AST entry mac address
576   * @ast_entry_info: ast entry information
577   *
578   * return: true if ast entry found with ast_mac_addr
579   *          false if ast entry not found
580   */
cdp_peer_get_ast_info_by_soc(ol_txrx_soc_handle soc,uint8_t * ast_mac_addr,struct cdp_ast_entry_info * ast_entry_info)581  static inline bool cdp_peer_get_ast_info_by_soc
582  	(ol_txrx_soc_handle soc, uint8_t *ast_mac_addr,
583  	 struct cdp_ast_entry_info *ast_entry_info)
584  {
585  	if (!soc || !soc->ops) {
586  		dp_cdp_debug("Invalid Instance:");
587  		QDF_BUG(0);
588  		return false;
589  	}
590  
591  	if (!soc->ops->cmn_drv_ops ||
592  	    !soc->ops->cmn_drv_ops->txrx_peer_get_ast_info_by_soc)
593  		return false;
594  
595  	return soc->ops->cmn_drv_ops->txrx_peer_get_ast_info_by_soc
596  					(soc, ast_mac_addr,
597  					 ast_entry_info);
598  }
599  
600  /**
601   * cdp_peer_get_ast_info_by_pdev() - search the soc AST hash table
602   *                                   and return ast entry information
603   *                                   if mac address and pdev_id matches
604   *
605   * @soc: data path soc handle
606   * @ast_mac_addr: AST entry mac address
607   * @pdev_id: pdev_id
608   * @ast_entry_info: ast entry information
609   *
610   * return: true if ast entry found with ast_mac_addr
611   *          false if ast entry not found
612   */
cdp_peer_get_ast_info_by_pdev(ol_txrx_soc_handle soc,uint8_t * ast_mac_addr,uint8_t pdev_id,struct cdp_ast_entry_info * ast_entry_info)613  static inline bool cdp_peer_get_ast_info_by_pdev
614  	(ol_txrx_soc_handle soc, uint8_t *ast_mac_addr,
615  	 uint8_t pdev_id,
616  	 struct cdp_ast_entry_info *ast_entry_info)
617  {
618  	if (!soc || !soc->ops) {
619  		dp_cdp_debug("Invalid Instance:");
620  		QDF_BUG(0);
621  		return false;
622  	}
623  
624  	if (!soc->ops->cmn_drv_ops ||
625  	    !soc->ops->cmn_drv_ops->txrx_peer_get_ast_info_by_pdev)
626  		return false;
627  
628  	return soc->ops->cmn_drv_ops->txrx_peer_get_ast_info_by_pdev
629  					(soc,
630  					 ast_mac_addr,
631  					 pdev_id,
632  					 ast_entry_info);
633  }
634  
635  /**
636   * cdp_peer_ast_delete_by_soc() - delete the ast entry from soc AST hash table
637   *                                with given mac address
638   *
639   * @soc: data path soc handle
640   * @ast_mac_addr: AST entry mac address
641   * @callback: callback function to called on ast delete response from FW
642   * @cookie: argument to be passed to callback
643   *
644   * return: QDF_STATUS_SUCCESS if ast entry found with ast_mac_addr and delete
645   *          is sent
646   *          QDF_STATUS_E_INVAL false if ast entry not found
647   */
cdp_peer_ast_delete_by_soc(ol_txrx_soc_handle soc,uint8_t * ast_mac_addr,txrx_ast_free_cb callback,void * cookie)648  static inline QDF_STATUS cdp_peer_ast_delete_by_soc
649  	(ol_txrx_soc_handle soc, uint8_t *ast_mac_addr,
650  	 txrx_ast_free_cb callback,
651  	 void *cookie)
652  {
653  	if (!soc || !soc->ops) {
654  		dp_cdp_debug("Invalid Instance:");
655  		QDF_BUG(0);
656  		return QDF_STATUS_E_INVAL;
657  	}
658  
659  	if (!soc->ops->cmn_drv_ops ||
660  	    !soc->ops->cmn_drv_ops->txrx_peer_ast_delete_by_soc)
661  		return QDF_STATUS_E_INVAL;
662  
663  	return soc->ops->cmn_drv_ops->txrx_peer_ast_delete_by_soc
664  							(soc,
665  							 ast_mac_addr,
666  							 callback,
667  							 cookie);
668  }
669  
670  /**
671   * cdp_peer_ast_delete_by_pdev() - delete the ast entry from soc AST hash table
672   *                                 if mac address and pdev_id matches
673   *
674   * @soc: data path soc handle
675   * @ast_mac_addr: AST entry mac address
676   * @pdev_id: pdev id
677   * @callback: callback function to called on ast delete response from FW
678   * @cookie: argument to be passed to callback
679   *
680   * return: QDF_STATUS_SUCCESS if ast entry found with ast_mac_addr and delete
681   *          is sent
682   *          QDF_STATUS_E_INVAL false if ast entry not found
683   */
cdp_peer_ast_delete_by_pdev(ol_txrx_soc_handle soc,uint8_t * ast_mac_addr,uint8_t pdev_id,txrx_ast_free_cb callback,void * cookie)684  static inline QDF_STATUS cdp_peer_ast_delete_by_pdev
685  	(ol_txrx_soc_handle soc, uint8_t *ast_mac_addr,
686  	 uint8_t pdev_id, txrx_ast_free_cb callback,
687  	 void *cookie)
688  {
689  	if (!soc || !soc->ops) {
690  		dp_cdp_debug("Invalid Instance:");
691  		QDF_BUG(0);
692  		return QDF_STATUS_E_INVAL;
693  	}
694  
695  	if (!soc->ops->cmn_drv_ops ||
696  	    !soc->ops->cmn_drv_ops->txrx_peer_ast_delete_by_pdev)
697  		return QDF_STATUS_E_INVAL;
698  
699  	return soc->ops->cmn_drv_ops->txrx_peer_ast_delete_by_pdev
700  					(soc,
701  					 ast_mac_addr,
702  					 pdev_id,
703  					 callback,
704  					 cookie);
705  }
706  
707  /**
708   * cdp_peer_HMWDS_ast_delete() - delete the ast entry from soc AST hash table
709   *                               for HMWDS rem-addr command
710   *
711   * @soc: data path soc handle
712   * @vdev_id: vdev id
713   * @dest_mac: AST entry mac address to delete
714   * @type: cdp_txrx_ast_entry_type to send to FW
715   * @delete_in_fw: flag to indicate AST entry deletion in FW
716   *
717   * Return: QDF_STATUS_SUCCESS if ast entry found with ast_mac_addr and delete
718   *         is sent
719   *         QDF_STATUS_E_INVAL false if ast entry not found
720   */
cdp_peer_HMWDS_ast_delete(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * dest_mac,uint8_t type,uint8_t delete_in_fw)721  static inline QDF_STATUS cdp_peer_HMWDS_ast_delete
722  	(ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *dest_mac,
723  	 uint8_t type, uint8_t delete_in_fw)
724  {
725  	if (!soc || !soc->ops) {
726  		dp_cdp_debug("Invalid Instance:");
727  		QDF_BUG(0);
728  		return QDF_STATUS_E_INVAL;
729  	}
730  
731  	if (!soc->ops->cmn_drv_ops ||
732  	    !soc->ops->cmn_drv_ops->txrx_peer_HMWDS_ast_delete)
733  		return QDF_STATUS_E_INVAL;
734  
735  	return soc->ops->cmn_drv_ops->txrx_peer_HMWDS_ast_delete
736  					(soc,
737  					 vdev_id,
738  					 dest_mac,
739  					 type,
740  					 delete_in_fw);
741  }
742  
cdp_peer_add_ast(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,uint8_t * mac_addr,enum cdp_txrx_ast_entry_type type,uint32_t flags)743  static inline int cdp_peer_add_ast
744  	(ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *peer_mac,
745  	uint8_t *mac_addr,
746  	enum cdp_txrx_ast_entry_type type, uint32_t flags)
747  {
748  	if (!soc || !soc->ops) {
749  		dp_cdp_debug("Invalid Instance:");
750  		QDF_BUG(0);
751  		return 0;
752  	}
753  
754  	if (!soc->ops->cmn_drv_ops ||
755  	    !soc->ops->cmn_drv_ops->txrx_peer_add_ast)
756  		return 0;
757  
758  	return soc->ops->cmn_drv_ops->txrx_peer_add_ast(soc,
759  							vdev_id,
760  							peer_mac,
761  							mac_addr,
762  							type,
763  							flags);
764  }
765  
cdp_peer_reset_ast(ol_txrx_soc_handle soc,uint8_t * wds_macaddr,uint8_t * peer_macaddr,uint8_t vdev_id)766  static inline QDF_STATUS cdp_peer_reset_ast
767  	(ol_txrx_soc_handle soc, uint8_t *wds_macaddr, uint8_t *peer_macaddr,
768  	 uint8_t vdev_id)
769  {
770  
771  	if (!soc || !soc->ops) {
772  		dp_cdp_debug("Invalid Instance:");
773  		QDF_BUG(0);
774  		return QDF_STATUS_E_FAILURE;
775  	}
776  	if (!soc->ops->cmn_drv_ops ||
777  	    !soc->ops->cmn_drv_ops->txrx_peer_reset_ast)
778  		return QDF_STATUS_E_FAILURE;
779  
780  	return soc->ops->cmn_drv_ops->txrx_peer_reset_ast(soc, wds_macaddr,
781  						   peer_macaddr, vdev_id);
782  }
783  
cdp_peer_reset_ast_table(ol_txrx_soc_handle soc,uint8_t vdev_id)784  static inline QDF_STATUS cdp_peer_reset_ast_table
785  	(ol_txrx_soc_handle soc, uint8_t vdev_id)
786  {
787  	if (!soc || !soc->ops) {
788  		dp_cdp_debug("Invalid Instance:");
789  		QDF_BUG(0);
790  		return QDF_STATUS_E_FAILURE;
791  	}
792  
793  	if (!soc->ops->cmn_drv_ops ||
794  	    !soc->ops->cmn_drv_ops->txrx_peer_reset_ast_table)
795  		return QDF_STATUS_E_FAILURE;
796  
797  	return soc->ops->cmn_drv_ops->txrx_peer_reset_ast_table(soc, vdev_id);
798  }
799  
cdp_peer_flush_ast_table(ol_txrx_soc_handle soc)800  static inline void cdp_peer_flush_ast_table
801  	(ol_txrx_soc_handle soc)
802  {
803  	if (!soc || !soc->ops) {
804  		dp_cdp_debug("Invalid Instance:");
805  		QDF_BUG(0);
806  		return;
807  	}
808  
809  	if (!soc->ops->cmn_drv_ops ||
810  	    !soc->ops->cmn_drv_ops->txrx_peer_flush_ast_table)
811  		return;
812  
813  	soc->ops->cmn_drv_ops->txrx_peer_flush_ast_table(soc);
814  }
815  
cdp_peer_update_ast(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,uint8_t * wds_macaddr,uint32_t flags)816  static inline int cdp_peer_update_ast
817  	(ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *peer_mac,
818  	 uint8_t *wds_macaddr, uint32_t flags)
819  {
820  	if (!soc || !soc->ops) {
821  		dp_cdp_debug("Invalid Instance:");
822  		QDF_BUG(0);
823  		return 0;
824  	}
825  
826  	if (!soc->ops->cmn_drv_ops ||
827  	    !soc->ops->cmn_drv_ops->txrx_peer_update_ast)
828  		return 0;
829  
830  
831  	return soc->ops->cmn_drv_ops->txrx_peer_update_ast(soc,
832  							vdev_id,
833  							peer_mac,
834  							wds_macaddr,
835  							flags);
836  }
837  
cdp_peer_teardown(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac)838  static inline void cdp_peer_teardown
839  	(ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *peer_mac)
840  {
841  	if (!soc || !soc->ops) {
842  		dp_cdp_debug("Invalid Instance:");
843  		QDF_BUG(0);
844  		return;
845  	}
846  
847  	if (!soc->ops->cmn_drv_ops ||
848  	    !soc->ops->cmn_drv_ops->txrx_peer_teardown)
849  		return;
850  
851  	soc->ops->cmn_drv_ops->txrx_peer_teardown(soc, vdev_id, peer_mac);
852  }
853  
854  static inline void
cdp_peer_delete(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,uint32_t bitmap)855  cdp_peer_delete(ol_txrx_soc_handle soc, uint8_t vdev_id,
856  		uint8_t *peer_mac, uint32_t bitmap)
857  {
858  	if (!soc || !soc->ops) {
859  		dp_cdp_debug("Invalid Instance:");
860  		QDF_BUG(0);
861  		return;
862  	}
863  
864  	if (!soc->ops->cmn_drv_ops ||
865  	    !soc->ops->cmn_drv_ops->txrx_peer_delete)
866  		return;
867  
868  	soc->ops->cmn_drv_ops->txrx_peer_delete(soc, vdev_id, peer_mac,
869  						bitmap, CDP_LINK_PEER_TYPE);
870  }
871  
872  #ifdef DP_RX_UDP_OVER_PEER_ROAM
873  static inline void
cdp_update_roaming_peer_in_vdev(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,uint32_t auth_status)874  cdp_update_roaming_peer_in_vdev(ol_txrx_soc_handle soc, uint8_t vdev_id,
875  				uint8_t *peer_mac, uint32_t auth_status)
876  {
877  	if (!soc || !soc->ops) {
878  		QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG,
879  			  "%s: Invalid Instance:", __func__);
880  		QDF_BUG(0);
881  		return;
882  	}
883  
884  	if (!soc->ops->cmn_drv_ops ||
885  	    !soc->ops->cmn_drv_ops->txrx_update_roaming_peer)
886  		return;
887  
888  	soc->ops->cmn_drv_ops->txrx_update_roaming_peer(soc, vdev_id,
889  							peer_mac, auth_status);
890  }
891  #else
892  static inline void
cdp_update_roaming_peer_in_vdev(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,uint32_t auth_status)893  cdp_update_roaming_peer_in_vdev(ol_txrx_soc_handle soc, uint8_t vdev_id,
894  				uint8_t *peer_mac, uint32_t auth_status)
895  {
896  }
897  #endif
898  /**
899   * cdp_peer_delete_sync() - peer delete sync callback
900   * @soc: datapath soc handle
901   * @vdev_id: virtual device/interface id
902   * @peer_mac: peer mac address
903   * @delete_cb: peer delete sync cb.
904   * @bitmap: bitmap indicating special handling of request.
905   *
906   * Return: None
907   */
908  static inline void
cdp_peer_delete_sync(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,QDF_STATUS (* delete_cb)(uint8_t vdev_id,uint32_t peerid_cnt,uint16_t * peerid_list),uint32_t bitmap)909  cdp_peer_delete_sync(ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *peer_mac,
910  		     QDF_STATUS(*delete_cb)(
911  				uint8_t vdev_id,
912  				uint32_t peerid_cnt,
913  				uint16_t *peerid_list),
914  		     uint32_t bitmap)
915  {
916  	if (!soc || !soc->ops) {
917  		dp_cdp_debug("Invalid Instance:");
918  		QDF_BUG(0);
919  		return;
920  	}
921  
922  	if (!soc->ops->cmn_drv_ops ||
923  	    !soc->ops->cmn_drv_ops->txrx_peer_delete_sync)
924  		return;
925  
926  	soc->ops->cmn_drv_ops->txrx_peer_delete_sync(soc, vdev_id, peer_mac,
927  						     delete_cb,
928  						     bitmap);
929  }
930  
931  static inline int
cdp_set_monitor_mode(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t smart_monitor)932  cdp_set_monitor_mode(ol_txrx_soc_handle soc, uint8_t vdev_id,
933  		     uint8_t smart_monitor)
934  {
935  	if (!soc || !soc->ops) {
936  		dp_cdp_debug("Invalid Instance:");
937  		QDF_BUG(0);
938  		return 0;
939  	}
940  
941  	if (!soc->ops->cmn_drv_ops ||
942  	    !soc->ops->cmn_drv_ops->txrx_set_monitor_mode)
943  		return 0;
944  
945  	return soc->ops->cmn_drv_ops->txrx_set_monitor_mode(soc, vdev_id,
946  					smart_monitor);
947  }
948  
949  static inline QDF_STATUS
cdp_set_curchan(ol_txrx_soc_handle soc,uint8_t pdev_id,uint32_t chan_mhz)950  cdp_set_curchan(ol_txrx_soc_handle soc,
951  	uint8_t pdev_id,
952  	uint32_t chan_mhz)
953  {
954  	if (!soc || !soc->ops) {
955  		dp_cdp_debug("Invalid Instance:");
956  		QDF_BUG(0);
957  		return QDF_STATUS_E_FAILURE;
958  	}
959  
960  	if (!soc->ops->cmn_drv_ops ||
961  	    !soc->ops->cmn_drv_ops->txrx_set_curchan)
962  		return QDF_STATUS_E_FAILURE;
963  
964  	return soc->ops->cmn_drv_ops->txrx_set_curchan(soc, pdev_id, chan_mhz);
965  }
966  
967  static inline QDF_STATUS
cdp_set_privacy_filters(ol_txrx_soc_handle soc,uint8_t vdev_id,void * filter,uint32_t num)968  cdp_set_privacy_filters(ol_txrx_soc_handle soc, uint8_t vdev_id,
969  			void *filter, uint32_t num)
970  {
971  	if (!soc || !soc->ops) {
972  		dp_cdp_debug("Invalid Instance:");
973  		QDF_BUG(0);
974  		return QDF_STATUS_E_FAILURE;
975  	}
976  
977  	if (!soc->ops->cmn_drv_ops ||
978  	    !soc->ops->cmn_drv_ops->txrx_set_privacy_filters)
979  		return QDF_STATUS_E_FAILURE;
980  
981  	return soc->ops->cmn_drv_ops->txrx_set_privacy_filters(soc, vdev_id,
982  			filter, num);
983  }
984  
985  static inline int
cdp_set_monitor_filter(ol_txrx_soc_handle soc,uint8_t pdev_id,struct cdp_monitor_filter * filter_val)986  cdp_set_monitor_filter(ol_txrx_soc_handle soc, uint8_t pdev_id,
987  		       struct cdp_monitor_filter *filter_val)
988  {
989  	if (soc->ops->mon_ops->txrx_set_advance_monitor_filter)
990  		return soc->ops->mon_ops->txrx_set_advance_monitor_filter(soc,
991  								pdev_id,
992  								filter_val);
993  	return 0;
994  }
995  
996  
997  /******************************************************************************
998   * Data Interface (B Interface)
999   *****************************************************************************/
1000  static inline void
cdp_vdev_register(ol_txrx_soc_handle soc,uint8_t vdev_id,ol_osif_vdev_handle osif_vdev,struct ol_txrx_ops * txrx_ops)1001  cdp_vdev_register(ol_txrx_soc_handle soc, uint8_t vdev_id,
1002  		  ol_osif_vdev_handle osif_vdev,
1003  		  struct ol_txrx_ops *txrx_ops)
1004  {
1005  	if (!soc || !soc->ops) {
1006  		dp_cdp_debug("Invalid Instance:");
1007  		QDF_BUG(0);
1008  		return;
1009  	}
1010  
1011  	if (!soc->ops->cmn_drv_ops ||
1012  	    !soc->ops->cmn_drv_ops->txrx_vdev_register)
1013  		return;
1014  
1015  	soc->ops->cmn_drv_ops->txrx_vdev_register(soc, vdev_id,
1016  			osif_vdev, txrx_ops);
1017  }
1018  
1019  static inline int
cdp_mgmt_send(ol_txrx_soc_handle soc,uint8_t vdev_id,qdf_nbuf_t tx_mgmt_frm,uint8_t type)1020  cdp_mgmt_send(ol_txrx_soc_handle soc, uint8_t vdev_id,
1021  	      qdf_nbuf_t tx_mgmt_frm,	uint8_t type)
1022  {
1023  	if (!soc || !soc->ops) {
1024  		dp_cdp_debug("Invalid Instance:");
1025  		QDF_BUG(0);
1026  		return 0;
1027  	}
1028  
1029  	if (!soc->ops->cmn_drv_ops ||
1030  	    !soc->ops->cmn_drv_ops->txrx_mgmt_send)
1031  		return 0;
1032  
1033  	return soc->ops->cmn_drv_ops->txrx_mgmt_send(soc, vdev_id,
1034  			tx_mgmt_frm, type);
1035  }
1036  
1037  static inline int
cdp_mgmt_send_ext(ol_txrx_soc_handle soc,uint8_t vdev_id,qdf_nbuf_t tx_mgmt_frm,uint8_t type,uint8_t use_6mbps,uint16_t chanfreq)1038  cdp_mgmt_send_ext(ol_txrx_soc_handle soc, uint8_t vdev_id,
1039  		  qdf_nbuf_t tx_mgmt_frm, uint8_t type,
1040  		  uint8_t use_6mbps, uint16_t chanfreq)
1041  {
1042  	if (!soc || !soc->ops) {
1043  		dp_cdp_debug("Invalid Instance:");
1044  		QDF_BUG(0);
1045  		return 0;
1046  	}
1047  
1048  	if (!soc->ops->cmn_drv_ops ||
1049  	    !soc->ops->cmn_drv_ops->txrx_mgmt_send_ext)
1050  		return 0;
1051  
1052  	return soc->ops->cmn_drv_ops->txrx_mgmt_send_ext
1053  			(soc, vdev_id, tx_mgmt_frm, type, use_6mbps, chanfreq);
1054  }
1055  
1056  
1057  static inline QDF_STATUS
cdp_mgmt_tx_cb_set(ol_txrx_soc_handle soc,uint8_t pdev_id,uint8_t type,ol_txrx_mgmt_tx_cb download_cb,ol_txrx_mgmt_tx_cb ota_ack_cb,void * ctxt)1058  cdp_mgmt_tx_cb_set(ol_txrx_soc_handle soc, uint8_t pdev_id,
1059  		   uint8_t type, ol_txrx_mgmt_tx_cb download_cb,
1060  		   ol_txrx_mgmt_tx_cb ota_ack_cb, void *ctxt)
1061  {
1062  	if (!soc || !soc->ops) {
1063  		dp_cdp_debug("Invalid Instance:");
1064  		QDF_BUG(0);
1065  		return QDF_STATUS_E_FAILURE;
1066  	}
1067  
1068  	if (!soc->ops->cmn_drv_ops ||
1069  	    !soc->ops->cmn_drv_ops->txrx_mgmt_tx_cb_set)
1070  		return QDF_STATUS_E_FAILURE;
1071  
1072  	return soc->ops->cmn_drv_ops->txrx_mgmt_tx_cb_set
1073  			(soc, pdev_id, type, download_cb, ota_ack_cb, ctxt);
1074  }
1075  
1076  /**
1077   * cdp_peer_unmap_sync_cb_set() - set peer unmap sync callback
1078   * @soc: datapath soc handle
1079   * @pdev_id: physical device instance id
1080   * @unmap_resp_cb: peer unmap sync callback
1081   *
1082   * Return: None
1083   */
1084  static inline void
cdp_peer_unmap_sync_cb_set(ol_txrx_soc_handle soc,uint8_t pdev_id,QDF_STATUS (* unmap_resp_cb)(uint8_t vdev_id,uint32_t peerid_cnt,uint16_t * peerid_list))1085  cdp_peer_unmap_sync_cb_set(ol_txrx_soc_handle soc,
1086  			   uint8_t pdev_id,
1087  			   QDF_STATUS(*unmap_resp_cb)(
1088  					uint8_t vdev_id,
1089  					uint32_t peerid_cnt,
1090  					uint16_t *peerid_list))
1091  {
1092  	if (!soc || !soc->ops) {
1093  		dp_cdp_debug("Invalid Instance:");
1094  		QDF_BUG(0);
1095  		return;
1096  	}
1097  
1098  	if (!soc->ops->cmn_drv_ops ||
1099  	    !soc->ops->cmn_drv_ops->txrx_peer_unmap_sync_cb_set)
1100  		return;
1101  
1102  	soc->ops->cmn_drv_ops->txrx_peer_unmap_sync_cb_set(soc, pdev_id,
1103  							   unmap_resp_cb);
1104  }
1105  
1106  /**
1107   * cdp_data_tx_cb_set(): set the callback for non standard tx
1108   * @soc: datapath soc handle
1109   * @vdev_id: virtual device/interface id
1110   * @callback: callback function
1111   * @ctxt: callback context
1112   *
1113   */
1114  static inline void
cdp_data_tx_cb_set(ol_txrx_soc_handle soc,uint8_t vdev_id,ol_txrx_data_tx_cb callback,void * ctxt)1115  cdp_data_tx_cb_set(ol_txrx_soc_handle soc, uint8_t vdev_id,
1116  		   ol_txrx_data_tx_cb callback, void *ctxt)
1117  {
1118  	if (!soc || !soc->ops) {
1119  		dp_cdp_debug("Invalid Instance:");
1120  		QDF_BUG(0);
1121  		return;
1122  	}
1123  
1124  	if (!soc->ops->cmn_drv_ops ||
1125  	    !soc->ops->cmn_drv_ops->txrx_data_tx_cb_set)
1126  		return;
1127  
1128  	soc->ops->cmn_drv_ops->txrx_data_tx_cb_set(soc, vdev_id,
1129  						   callback, ctxt);
1130  }
1131  
1132  /******************************************************************************
1133   * Statistics and Debugging Interface (C Interface)
1134   *****************************************************************************/
1135  /*
1136   * External Device physical address types
1137   *
1138   * Currently, both MAC and IPA uController use the same size addresses
1139   * and descriptors are exchanged between these two depending on the mode.
1140   *
1141   * Rationale: qdf_dma_addr_t is the type used internally on the host for DMA
1142   *            operations. However, external device physical address sizes
1143   *            may be different from host-specific physical address sizes.
1144   *            This calls for the following definitions for target devices
1145   *            (MAC, IPA uc).
1146   */
1147  #if HTT_PADDR64
1148  typedef uint64_t target_paddr_t;
1149  #else
1150  typedef uint32_t target_paddr_t;
1151  #endif /*HTT_PADDR64 */
1152  
1153  static inline int
cdp_aggr_cfg(ol_txrx_soc_handle soc,uint8_t vdev_id,int max_subfrms_ampdu,int max_subfrms_amsdu)1154  cdp_aggr_cfg(ol_txrx_soc_handle soc, uint8_t vdev_id,
1155  	     int max_subfrms_ampdu,
1156  	     int max_subfrms_amsdu)
1157  {
1158  	if (!soc || !soc->ops) {
1159  		dp_cdp_debug("Invalid Instance:");
1160  		QDF_BUG(0);
1161  		return 0;
1162  	}
1163  
1164  	if (!soc->ops->cmn_drv_ops ||
1165  	    !soc->ops->cmn_drv_ops->txrx_aggr_cfg)
1166  		return 0;
1167  
1168  	return soc->ops->cmn_drv_ops->txrx_aggr_cfg(soc, vdev_id,
1169  			max_subfrms_ampdu, max_subfrms_amsdu);
1170  }
1171  
1172  static inline int
cdp_fw_stats_get(ol_txrx_soc_handle soc,uint8_t vdev_id,struct ol_txrx_stats_req * req,bool per_vdev,bool response_expected)1173  cdp_fw_stats_get(ol_txrx_soc_handle soc, uint8_t vdev_id,
1174  		 struct ol_txrx_stats_req *req, bool per_vdev,
1175  		 bool response_expected)
1176  {
1177  	if (!soc || !soc->ops) {
1178  		dp_cdp_debug("Invalid Instance:");
1179  		QDF_BUG(0);
1180  		return 0;
1181  	}
1182  
1183  	if (!soc->ops->cmn_drv_ops ||
1184  	    !soc->ops->cmn_drv_ops->txrx_fw_stats_get)
1185  		return 0;
1186  
1187  	return soc->ops->cmn_drv_ops->txrx_fw_stats_get(soc, vdev_id, req,
1188  			per_vdev, response_expected);
1189  }
1190  
1191  static inline int
cdp_debug(ol_txrx_soc_handle soc,uint8_t vdev_id,int debug_specs)1192  cdp_debug(ol_txrx_soc_handle soc, uint8_t vdev_id, int debug_specs)
1193  {
1194  	if (!soc || !soc->ops) {
1195  		dp_cdp_debug("Invalid Instance:");
1196  		QDF_BUG(0);
1197  		return 0;
1198  	}
1199  
1200  	if (!soc->ops->cmn_drv_ops ||
1201  	    !soc->ops->cmn_drv_ops->txrx_debug)
1202  		return 0;
1203  
1204  	return soc->ops->cmn_drv_ops->txrx_debug(soc, vdev_id, debug_specs);
1205  }
1206  
1207  static inline QDF_STATUS
cdp_fw_stats_cfg(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t cfg_stats_type,uint32_t cfg_val)1208  cdp_fw_stats_cfg(ol_txrx_soc_handle soc,
1209  		 uint8_t vdev_id, uint8_t cfg_stats_type, uint32_t cfg_val)
1210  {
1211  	if (!soc || !soc->ops) {
1212  		dp_cdp_debug("Invalid Instance:");
1213  		QDF_BUG(0);
1214  		return QDF_STATUS_E_FAILURE;
1215  	}
1216  
1217  	if (!soc->ops->cmn_drv_ops ||
1218  	    !soc->ops->cmn_drv_ops->txrx_fw_stats_cfg)
1219  		return QDF_STATUS_E_FAILURE;
1220  
1221  	return soc->ops->cmn_drv_ops->txrx_fw_stats_cfg(soc, vdev_id,
1222  						 cfg_stats_type, cfg_val);
1223  }
1224  
cdp_print_level_set(ol_txrx_soc_handle soc,unsigned level)1225  static inline void cdp_print_level_set(ol_txrx_soc_handle soc, unsigned level)
1226  {
1227  	if (!soc || !soc->ops) {
1228  		dp_cdp_debug("Invalid Instance:");
1229  		QDF_BUG(0);
1230  		return;
1231  	}
1232  
1233  	if (!soc->ops->cmn_drv_ops ||
1234  	    !soc->ops->cmn_drv_ops->txrx_print_level_set)
1235  		return;
1236  
1237  	soc->ops->cmn_drv_ops->txrx_print_level_set(level);
1238  }
1239  
1240  /**
1241   * cdp_get_vdev_mac_addr() - Detach txrx peer
1242   * @soc: Datapath soc handle
1243   * @vdev_id: virtual device/interface id
1244   *
1245   * Return: MAC address on success, NULL on failure.
1246   *
1247   */
1248  static inline uint8_t *
cdp_get_vdev_mac_addr(ol_txrx_soc_handle soc,uint8_t vdev_id)1249  cdp_get_vdev_mac_addr(ol_txrx_soc_handle soc, uint8_t vdev_id)
1250  {
1251  	if (!soc || !soc->ops) {
1252  		dp_cdp_debug("Invalid Instance:");
1253  		QDF_BUG(0);
1254  		return NULL;
1255  	}
1256  
1257  	if (!soc->ops->cmn_drv_ops ||
1258  	    !soc->ops->cmn_drv_ops->txrx_get_vdev_mac_addr)
1259  		return NULL;
1260  
1261  	return soc->ops->cmn_drv_ops->txrx_get_vdev_mac_addr(soc, vdev_id);
1262  
1263  }
1264  
1265  /**
1266   * cdp_get_os_rx_handles_from_vdev() - Return os rx handles for a vdev
1267   * @soc: ol_txrx_soc_handle handle
1268   * @vdev_id: vdev id for which os rx handles are needed
1269   * @stack_fn_p: pointer to stack function pointer
1270   * @osif_handle_p: pointer to ol_osif_vdev_handle
1271   *
1272   * Return: void
1273   */
1274  static inline
cdp_get_os_rx_handles_from_vdev(ol_txrx_soc_handle soc,uint8_t vdev_id,ol_txrx_rx_fp * stack_fn_p,ol_osif_vdev_handle * osif_handle_p)1275  void cdp_get_os_rx_handles_from_vdev(ol_txrx_soc_handle soc,
1276  				     uint8_t vdev_id,
1277  				     ol_txrx_rx_fp *stack_fn_p,
1278  				     ol_osif_vdev_handle *osif_handle_p)
1279  {
1280  	if (!soc || !soc->ops) {
1281  		dp_cdp_debug("Invalid Instance:");
1282  		QDF_BUG(0);
1283  		return;
1284  	}
1285  
1286  	if (!soc->ops->cmn_drv_ops ||
1287  	    !soc->ops->cmn_drv_ops->txrx_get_os_rx_handles_from_vdev)
1288  		return;
1289  
1290  	soc->ops->cmn_drv_ops->txrx_get_os_rx_handles_from_vdev(soc, vdev_id,
1291  								stack_fn_p,
1292  								osif_handle_p);
1293  }
1294  
1295  /**
1296   * cdp_get_ctrl_pdev_from_vdev() - Return control pdev of vdev
1297   * @soc: datapath soc handle
1298   * @vdev_id: virtual device/interface id
1299   *
1300   * Return: Handle to control pdev
1301   */
1302  static inline struct cdp_cfg *
cdp_get_ctrl_pdev_from_vdev(ol_txrx_soc_handle soc,uint8_t vdev_id)1303  cdp_get_ctrl_pdev_from_vdev(ol_txrx_soc_handle soc, uint8_t vdev_id)
1304  {
1305  	if (!soc || !soc->ops) {
1306  		dp_cdp_debug("Invalid Instance:");
1307  		QDF_BUG(0);
1308  		return NULL;
1309  	}
1310  
1311  	if (!soc->ops->cmn_drv_ops ||
1312  	    !soc->ops->cmn_drv_ops->txrx_get_ctrl_pdev_from_vdev)
1313  		return NULL;
1314  
1315  	return soc->ops->cmn_drv_ops->txrx_get_ctrl_pdev_from_vdev(soc,
1316  								   vdev_id);
1317  }
1318  
1319  /**
1320   * cdp_get_mon_vdev_from_pdev() - Get vdev handle of monitor mode
1321   * @soc: datapath soc handle
1322   * @pdev_id: physical device instance id
1323   *
1324   * Return: virtual interface id
1325   */
1326  static inline uint8_t
cdp_get_mon_vdev_from_pdev(ol_txrx_soc_handle soc,uint8_t pdev_id)1327  cdp_get_mon_vdev_from_pdev(ol_txrx_soc_handle soc, uint8_t pdev_id)
1328  {
1329  	if (!soc || !soc->ops) {
1330  		dp_cdp_debug("Invalid Instance:");
1331  		QDF_BUG(0);
1332  		return -EINVAL;
1333  	}
1334  
1335  	if (!soc->ops->cmn_drv_ops ||
1336  	    !soc->ops->cmn_drv_ops->txrx_get_mon_vdev_from_pdev)
1337  		return -EINVAL;
1338  
1339  	return soc->ops->cmn_drv_ops->txrx_get_mon_vdev_from_pdev(soc, pdev_id);
1340  }
1341  
1342  static inline void
cdp_soc_detach(ol_txrx_soc_handle soc)1343  cdp_soc_detach(ol_txrx_soc_handle soc)
1344  {
1345  	if (!soc || !soc->ops) {
1346  		dp_cdp_debug("Invalid Instance:");
1347  		QDF_BUG(0);
1348  		return;
1349  	}
1350  
1351  	if (!soc->ops->cmn_drv_ops ||
1352  	    !soc->ops->cmn_drv_ops->txrx_soc_detach)
1353  		return;
1354  
1355  	soc->ops->cmn_drv_ops->txrx_soc_detach(soc);
1356  }
1357  
1358  /**
1359   * cdp_soc_init() - Initialize txrx SOC
1360   * @soc: ol_txrx_soc_handle handle
1361   * @devid: Device ID
1362   * @hif_handle: Opaque HIF handle
1363   * @psoc: Opaque Objmgr handle
1364   * @htc_handle: Opaque HTC handle
1365   * @qdf_dev: QDF device
1366   * @dp_ol_if_ops: Offload Operations
1367   *
1368   * Return: DP SOC handle on success, NULL on failure
1369   */
1370  static inline ol_txrx_soc_handle
cdp_soc_init(ol_txrx_soc_handle soc,u_int16_t devid,void * hif_handle,struct cdp_ctrl_objmgr_psoc * psoc,HTC_HANDLE htc_handle,qdf_device_t qdf_dev,struct ol_if_ops * dp_ol_if_ops)1371  cdp_soc_init(ol_txrx_soc_handle soc, u_int16_t devid,
1372  	     void *hif_handle,
1373  	     struct cdp_ctrl_objmgr_psoc *psoc,
1374  	     HTC_HANDLE htc_handle, qdf_device_t qdf_dev,
1375  	     struct ol_if_ops *dp_ol_if_ops)
1376  {
1377  	if (!soc || !soc->ops) {
1378  		dp_cdp_debug("Invalid Instance:");
1379  		QDF_BUG(0);
1380  		return NULL;
1381  	}
1382  
1383  	if (!soc->ops->cmn_drv_ops ||
1384  	    !soc->ops->cmn_drv_ops->txrx_soc_init)
1385  		return NULL;
1386  
1387  	return soc->ops->cmn_drv_ops->txrx_soc_init(soc, psoc,
1388  						    hif_handle,
1389  						    htc_handle, qdf_dev,
1390  						    dp_ol_if_ops, devid);
1391  }
1392  
1393  /**
1394   * cdp_pdev_init() - Initialize txrx pdev
1395   * @soc: ol_txrx_soc_handle handle
1396   * @htc_handle: Opaque HTC handle
1397   * @qdf_dev: QDF device
1398   * @pdev_id: pdev id
1399   *
1400   * Return: DP SOC handle on success, NULL on failure
1401   */
1402  static inline QDF_STATUS
cdp_pdev_init(ol_txrx_soc_handle soc,HTC_HANDLE htc_handle,qdf_device_t qdf_dev,uint8_t pdev_id)1403  cdp_pdev_init(ol_txrx_soc_handle soc,
1404  	      HTC_HANDLE htc_handle, qdf_device_t qdf_dev,
1405  	      uint8_t pdev_id)
1406  {
1407  	if (!soc || !soc->ops) {
1408  		dp_cdp_debug("Invalid Instance:");
1409  		QDF_BUG(0);
1410  		return 0;
1411  	}
1412  
1413  	if (!soc->ops->cmn_drv_ops ||
1414  	    !soc->ops->cmn_drv_ops->txrx_pdev_init)
1415  		return 0;
1416  
1417  	return soc->ops->cmn_drv_ops->txrx_pdev_init(soc,
1418  						     htc_handle, qdf_dev,
1419  						     pdev_id);
1420  }
1421  
1422  /**
1423   * cdp_soc_deinit() - Deinitialize txrx SOC
1424   * @soc: Opaque DP SOC handle
1425   *
1426   * Return: None
1427   */
1428  static inline void
cdp_soc_deinit(ol_txrx_soc_handle soc)1429  cdp_soc_deinit(ol_txrx_soc_handle soc)
1430  {
1431  	if (!soc || !soc->ops) {
1432  		dp_cdp_debug("Invalid Instance:");
1433  		QDF_BUG(0);
1434  		return;
1435  	}
1436  
1437  	if (!soc->ops->cmn_drv_ops ||
1438  	    !soc->ops->cmn_drv_ops->txrx_soc_deinit)
1439  		return;
1440  
1441  	soc->ops->cmn_drv_ops->txrx_soc_deinit(soc);
1442  }
1443  
1444  /**
1445   * cdp_tso_soc_attach() - TSO attach function
1446   * @soc: ol_txrx_soc_handle handle
1447   *
1448   * Reserve TSO descriptor buffers
1449   *
1450   * Return: QDF_STATUS_SUCCESS on Success or
1451   * QDF_STATUS_E_FAILURE on failure
1452   */
1453  static inline QDF_STATUS
cdp_tso_soc_attach(ol_txrx_soc_handle soc)1454  cdp_tso_soc_attach(ol_txrx_soc_handle soc)
1455  {
1456  	if (!soc || !soc->ops) {
1457  		dp_cdp_debug("Invalid Instance:");
1458  		QDF_BUG(0);
1459  		return 0;
1460  	}
1461  
1462  	if (!soc->ops->cmn_drv_ops ||
1463  	    !soc->ops->cmn_drv_ops->txrx_tso_soc_attach)
1464  		return 0;
1465  
1466  	return soc->ops->cmn_drv_ops->txrx_tso_soc_attach(soc);
1467  }
1468  
1469  /**
1470   * cdp_tso_soc_detach() - TSO detach function
1471   * @soc: ol_txrx_soc_handle handle
1472   *
1473   * Release TSO descriptor buffers
1474   *
1475   * Return: QDF_STATUS_SUCCESS on Success or
1476   * QDF_STATUS_E_FAILURE on failure
1477   */
1478  static inline QDF_STATUS
cdp_tso_soc_detach(ol_txrx_soc_handle soc)1479  cdp_tso_soc_detach(ol_txrx_soc_handle soc)
1480  {
1481  	if (!soc || !soc->ops) {
1482  		dp_cdp_debug("Invalid Instance:");
1483  		QDF_BUG(0);
1484  		return 0;
1485  	}
1486  
1487  	if (!soc->ops->cmn_drv_ops ||
1488  	    !soc->ops->cmn_drv_ops->txrx_tso_soc_detach)
1489  		return 0;
1490  
1491  	return soc->ops->cmn_drv_ops->txrx_tso_soc_detach(soc);
1492  }
1493  
1494  /**
1495   * cdp_tid_update_ba_win_size() - Update the DP tid BA window size
1496   * @soc: soc handle
1497   * @peer_mac: mac address of peer handle
1498   * @vdev_id: id of vdev handle
1499   * @tid: tid
1500   * @buffersize: BA window size
1501   *
1502   * Return: success/failure of tid update
1503   */
1504  static inline QDF_STATUS
cdp_tid_update_ba_win_size(ol_txrx_soc_handle soc,uint8_t * peer_mac,uint16_t vdev_id,uint8_t tid,uint16_t buffersize)1505  cdp_tid_update_ba_win_size(ol_txrx_soc_handle soc,
1506  			   uint8_t *peer_mac, uint16_t vdev_id, uint8_t tid,
1507  			   uint16_t buffersize)
1508  {
1509  	if (!soc || !soc->ops) {
1510  		dp_cdp_debug("Invalid Instance:");
1511  		QDF_BUG(0);
1512  		return 0;
1513  	}
1514  
1515  	if (!soc->ops->cmn_drv_ops ||
1516  	    !soc->ops->cmn_drv_ops->tid_update_ba_win_size)
1517  		return 0;
1518  
1519  	return soc->ops->cmn_drv_ops->tid_update_ba_win_size(soc, peer_mac,
1520  							     vdev_id, tid,
1521  							     buffersize);
1522  }
1523  
1524  /**
1525   * cdp_addba_resp_tx_completion() - Indicate addba response tx
1526   * completion to dp to change tid state.
1527   * @soc: soc handle
1528   * @peer_mac: mac address of peer handle
1529   * @vdev_id: id of vdev handle
1530   * @tid: tid
1531   * @status: Tx completion status
1532   *
1533   * Return: success/failure of tid update
1534   */
cdp_addba_resp_tx_completion(ol_txrx_soc_handle soc,uint8_t * peer_mac,uint16_t vdev_id,uint8_t tid,int status)1535  static inline int cdp_addba_resp_tx_completion(ol_txrx_soc_handle soc,
1536  					       uint8_t *peer_mac,
1537  					       uint16_t vdev_id,
1538  					       uint8_t tid, int status)
1539  {
1540  	if (!soc || !soc->ops) {
1541  		dp_cdp_debug("Invalid Instance:");
1542  		QDF_BUG(0);
1543  		return 0;
1544  	}
1545  
1546  	if (!soc->ops->cmn_drv_ops ||
1547  	    !soc->ops->cmn_drv_ops->addba_resp_tx_completion)
1548  		return 0;
1549  
1550  	return soc->ops->cmn_drv_ops->addba_resp_tx_completion(soc, peer_mac,
1551  					vdev_id, tid, status);
1552  }
1553  
cdp_addba_requestprocess(ol_txrx_soc_handle soc,uint8_t * peer_mac,uint16_t vdev_id,uint8_t dialogtoken,uint16_t tid,uint16_t batimeout,uint16_t buffersize,uint16_t startseqnum)1554  static inline int cdp_addba_requestprocess(ol_txrx_soc_handle soc,
1555  	uint8_t *peer_mac, uint16_t vdev_id, uint8_t dialogtoken, uint16_t tid,
1556  	uint16_t batimeout, uint16_t buffersize, uint16_t startseqnum)
1557  {
1558  	if (!soc || !soc->ops) {
1559  		dp_cdp_debug("Invalid Instance:");
1560  		QDF_BUG(0);
1561  		return 0;
1562  	}
1563  
1564  	if (!soc->ops->cmn_drv_ops ||
1565  	    !soc->ops->cmn_drv_ops->addba_requestprocess)
1566  		return 0;
1567  
1568  	return soc->ops->cmn_drv_ops->addba_requestprocess(soc, peer_mac,
1569  			vdev_id, dialogtoken, tid, batimeout, buffersize,
1570  			startseqnum);
1571  }
1572  
1573  static inline QDF_STATUS
cdp_addba_responsesetup(ol_txrx_soc_handle soc,uint8_t * peer_mac,uint16_t vdev_id,uint8_t tid,uint8_t * dialogtoken,uint16_t * statuscode,uint16_t * buffersize,uint16_t * batimeout)1574  cdp_addba_responsesetup(ol_txrx_soc_handle soc,
1575  			uint8_t *peer_mac, uint16_t vdev_id,
1576  			uint8_t tid, uint8_t *dialogtoken,
1577  			uint16_t *statuscode, uint16_t *buffersize,
1578  			uint16_t *batimeout)
1579  {
1580  	if (!soc || !soc->ops) {
1581  		dp_cdp_debug("Invalid Instance:");
1582  		QDF_BUG(0);
1583  		return QDF_STATUS_E_FAILURE;
1584  	}
1585  
1586  	if (!soc->ops->cmn_drv_ops ||
1587  	    !soc->ops->cmn_drv_ops->addba_responsesetup)
1588  		return QDF_STATUS_E_FAILURE;
1589  
1590  	return soc->ops->cmn_drv_ops->addba_responsesetup(soc, peer_mac,
1591  			vdev_id, tid, dialogtoken, statuscode, buffersize,
1592  			batimeout);
1593  }
1594  
cdp_delba_process(ol_txrx_soc_handle soc,uint8_t * peer_mac,uint16_t vdev_id,int tid,uint16_t reasoncode)1595  static inline int cdp_delba_process(ol_txrx_soc_handle soc, uint8_t *peer_mac,
1596  				    uint16_t vdev_id, int tid,
1597  				    uint16_t reasoncode)
1598  {
1599  	if (!soc || !soc->ops) {
1600  		dp_cdp_debug("Invalid Instance:");
1601  		QDF_BUG(0);
1602  		return 0;
1603  	}
1604  
1605  	if (!soc->ops->cmn_drv_ops ||
1606  	    !soc->ops->cmn_drv_ops->delba_process)
1607  		return 0;
1608  
1609  	return soc->ops->cmn_drv_ops->delba_process(soc, peer_mac,
1610  						vdev_id, tid, reasoncode);
1611  }
1612  
1613  /**
1614   * cdp_delba_tx_completion() - Handle delba tx completion
1615   * to update stats and retry transmission if failed.
1616   * @soc: soc handle
1617   * @peer_mac: peer mac address
1618   * @vdev_id: id of vdev handle
1619   * @tid: Tid number
1620   * @status: Tx completion status
1621   *
1622   * Return: 0 on Success, 1 on failure
1623   */
1624  
cdp_delba_tx_completion(ol_txrx_soc_handle soc,uint8_t * peer_mac,uint16_t vdev_id,uint8_t tid,int status)1625  static inline int cdp_delba_tx_completion(ol_txrx_soc_handle soc,
1626  					  uint8_t *peer_mac,
1627  					  uint16_t vdev_id,
1628  					  uint8_t tid, int status)
1629  {
1630  	if (!soc || !soc->ops) {
1631  		dp_cdp_debug("Invalid Instance:");
1632  		QDF_BUG(0);
1633  		return 0;
1634  	}
1635  
1636  	if (!soc->ops->cmn_drv_ops ||
1637  	    !soc->ops->cmn_drv_ops->delba_tx_completion)
1638  		return 0;
1639  
1640  	return soc->ops->cmn_drv_ops->delba_tx_completion(soc, peer_mac,
1641  							  vdev_id,
1642  							  tid, status);
1643  }
1644  
1645  static inline QDF_STATUS
cdp_set_addbaresponse(ol_txrx_soc_handle soc,uint8_t * peer_mac,uint16_t vdev_id,int tid,uint16_t statuscode)1646  cdp_set_addbaresponse(ol_txrx_soc_handle soc,
1647  		      uint8_t *peer_mac, uint16_t vdev_id, int tid,
1648  		      uint16_t statuscode)
1649  {
1650  	if (!soc || !soc->ops) {
1651  		dp_cdp_debug("Invalid Instance:");
1652  		QDF_BUG(0);
1653  		return QDF_STATUS_E_FAILURE;
1654  	}
1655  
1656  	if (!soc->ops->cmn_drv_ops ||
1657  	    !soc->ops->cmn_drv_ops->set_addba_response)
1658  		return QDF_STATUS_E_FAILURE;
1659  
1660  	return soc->ops->cmn_drv_ops->set_addba_response(soc, peer_mac, vdev_id,
1661  						  tid, statuscode);
1662  }
1663  
1664  /**
1665   * cdp_set_vdev_dscp_tid_map(): function to set DSCP-tid map in the vap
1666   * @soc : soc handle
1667   * @vdev_id: id of vdev handle
1668   * @map_id: id of the tid map
1669   *
1670   * Return: QDF_STATUS
1671   */
1672  static inline QDF_STATUS
cdp_set_vdev_dscp_tid_map(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t map_id)1673  cdp_set_vdev_dscp_tid_map(ol_txrx_soc_handle soc,
1674  			  uint8_t vdev_id, uint8_t map_id)
1675  {
1676  	if (!soc || !soc->ops) {
1677  		dp_cdp_debug("Invalid Instance:");
1678  		QDF_BUG(0);
1679  		return QDF_STATUS_E_FAILURE;
1680  	}
1681  
1682  	if (!soc->ops->cmn_drv_ops ||
1683  	    !soc->ops->cmn_drv_ops->set_vdev_dscp_tid_map)
1684  		return QDF_STATUS_E_FAILURE;
1685  
1686  	return soc->ops->cmn_drv_ops->set_vdev_dscp_tid_map(soc, vdev_id,
1687  				map_id);
1688  }
1689  
1690  #ifdef QCA_MULTIPASS_SUPPORT
1691  /**
1692   * cdp_set_vlan_groupkey(): function to set vlan ID - group key map in the vap
1693   * @soc : soc handle
1694   * @vdev_id: id of vdev handle
1695   * @vlan_id: vlan id
1696   * @group_key: corresponding group key to vlan ID
1697   *
1698   * Return: void
1699   */
1700  static inline
cdp_set_vlan_groupkey(ol_txrx_soc_handle soc,uint8_t vdev_id,uint16_t vlan_id,uint16_t group_key)1701  QDF_STATUS cdp_set_vlan_groupkey(ol_txrx_soc_handle soc, uint8_t vdev_id,
1702  				 uint16_t vlan_id, uint16_t group_key)
1703  {
1704  	if (!soc || !soc->ops) {
1705  		dp_cdp_debug("Invalid Instance:");
1706  		QDF_BUG(0);
1707  		return 0;
1708  	}
1709  
1710  	if (!soc->ops->cmn_drv_ops ||
1711  	    !soc->ops->cmn_drv_ops->set_vlan_groupkey)
1712  		return 0;
1713  
1714  	return soc->ops->cmn_drv_ops->set_vlan_groupkey(soc, vdev_id, vlan_id,
1715  							group_key);
1716  }
1717  #endif
1718  
1719  /**
1720   * cdp_ath_get_total_per(): function to get hw retries
1721   * @soc : soc handle
1722   * @pdev_id: id of pdev handle
1723   *
1724   * Return: get hw retries
1725   */
1726  static inline
cdp_ath_get_total_per(ol_txrx_soc_handle soc,uint8_t pdev_id)1727  int cdp_ath_get_total_per(ol_txrx_soc_handle soc, uint8_t pdev_id)
1728  {
1729  	if (!soc || !soc->ops) {
1730  		dp_cdp_debug("Invalid Instance:");
1731  		QDF_BUG(0);
1732  		return 0;
1733  	}
1734  
1735  	if (!soc->ops->cmn_drv_ops ||
1736  	    !soc->ops->cmn_drv_ops->txrx_get_total_per)
1737  		return 0;
1738  
1739  	return soc->ops->cmn_drv_ops->txrx_get_total_per(soc, pdev_id);
1740  }
1741  
1742  /**
1743   * cdp_set_pdev_dscp_tid_map(): function to change tid values in DSCP-tid map
1744   * @soc: soc handle
1745   * @pdev_id: id of pdev handle
1746   * @map_id: id of the tid map
1747   * @tos: index value in map that needs to be changed
1748   * @tid: tid value passed by user
1749   *
1750   * Return: void
1751   */
cdp_set_pdev_dscp_tid_map(ol_txrx_soc_handle soc,uint8_t pdev_id,uint8_t map_id,uint8_t tos,uint8_t tid)1752  static inline void cdp_set_pdev_dscp_tid_map(ol_txrx_soc_handle soc,
1753  		uint8_t pdev_id, uint8_t map_id, uint8_t tos, uint8_t tid)
1754  {
1755  	if (!soc || !soc->ops) {
1756  		dp_cdp_debug("Invalid Instance:");
1757  		QDF_BUG(0);
1758  		return;
1759  	}
1760  
1761  	if (!soc->ops->cmn_drv_ops ||
1762  	    !soc->ops->cmn_drv_ops->set_pdev_dscp_tid_map)
1763  		return;
1764  
1765  	soc->ops->cmn_drv_ops->set_pdev_dscp_tid_map(soc, pdev_id,
1766  			map_id, tos, tid);
1767  }
1768  
1769  /**
1770   * cdp_flush_cache_rx_queue() - flush cache rx queue frame
1771   * @soc: soc handle
1772   *
1773   * Return: None
1774   */
cdp_flush_cache_rx_queue(ol_txrx_soc_handle soc)1775  static inline void cdp_flush_cache_rx_queue(ol_txrx_soc_handle soc)
1776  {
1777  	if (!soc || !soc->ops) {
1778  		dp_cdp_debug("Invalid Instance:");
1779  		QDF_BUG(0);
1780  		return;
1781  	}
1782  
1783  	if (!soc->ops->cmn_drv_ops ||
1784  	    !soc->ops->cmn_drv_ops->flush_cache_rx_queue)
1785  		return;
1786  	soc->ops->cmn_drv_ops->flush_cache_rx_queue();
1787  }
1788  
1789  /**
1790   * cdp_txrx_stats_request(): function to map to host and firmware statistics
1791   * @soc: soc handle
1792   * @vdev_id: virtual device ID
1793   * @req: stats request container
1794   *
1795   * return: status
1796   */
1797  static inline
cdp_txrx_stats_request(ol_txrx_soc_handle soc,uint8_t vdev_id,struct cdp_txrx_stats_req * req)1798  int cdp_txrx_stats_request(ol_txrx_soc_handle soc, uint8_t vdev_id,
1799  			   struct cdp_txrx_stats_req *req)
1800  {
1801  	if (!soc || !soc->ops || !soc->ops->cmn_drv_ops || !req) {
1802  		dp_cdp_debug("Invalid Instance:");
1803  		QDF_ASSERT(0);
1804  		return 0;
1805  	}
1806  
1807  	if (soc->ops->cmn_drv_ops->txrx_stats_request)
1808  		return soc->ops->cmn_drv_ops->txrx_stats_request(soc, vdev_id,
1809  								 req);
1810  
1811  	return 0;
1812  }
1813  
1814  /**
1815   * cdp_txrx_intr_attach(): function to attach and configure interrupt
1816   * @soc: soc handle
1817   */
cdp_txrx_intr_attach(ol_txrx_soc_handle soc)1818  static inline QDF_STATUS cdp_txrx_intr_attach(ol_txrx_soc_handle soc)
1819  {
1820  	if (!soc || !soc->ops) {
1821  		dp_cdp_debug("Invalid Instance:");
1822  		QDF_BUG(0);
1823  		return 0;
1824  	}
1825  
1826  	if (!soc->ops->cmn_drv_ops ||
1827  	    !soc->ops->cmn_drv_ops->txrx_intr_attach)
1828  		return 0;
1829  
1830  	return soc->ops->cmn_drv_ops->txrx_intr_attach(soc);
1831  }
1832  
1833  /**
1834   * cdp_txrx_intr_detach(): function to detach interrupt
1835   * @soc: soc handle
1836   */
cdp_txrx_intr_detach(ol_txrx_soc_handle soc)1837  static inline void cdp_txrx_intr_detach(ol_txrx_soc_handle soc)
1838  {
1839  	if (!soc || !soc->ops) {
1840  		dp_cdp_debug("Invalid Instance:");
1841  		QDF_BUG(0);
1842  		return;
1843  	}
1844  
1845  	if (!soc->ops->cmn_drv_ops ||
1846  	    !soc->ops->cmn_drv_ops->txrx_intr_detach)
1847  		return;
1848  
1849  	soc->ops->cmn_drv_ops->txrx_intr_detach(soc);
1850  }
1851  
1852  /**
1853   * cdp_txrx_ppeds_stop(): function to stop ppeds
1854   * @soc: soc handle
1855   */
cdp_txrx_ppeds_stop(ol_txrx_soc_handle soc)1856  static inline void cdp_txrx_ppeds_stop(ol_txrx_soc_handle soc)
1857  {
1858  	if (!soc || !soc->ops) {
1859  		dp_cdp_debug("Invalid Instance:");
1860  		QDF_BUG(0);
1861  		return;
1862  	}
1863  
1864  	if (!soc->ops->cmn_drv_ops ||
1865  	    !soc->ops->cmn_drv_ops->txrx_ppeds_stop)
1866  		return;
1867  
1868  	soc->ops->cmn_drv_ops->txrx_ppeds_stop(soc);
1869  }
1870  
1871  /**
1872   * cdp_txrx_umac_reset_init(): De-initialize UMAC HW reset module
1873   * @soc: soc handle
1874   */
cdp_txrx_umac_reset_init(ol_txrx_soc_handle soc)1875  static inline void cdp_txrx_umac_reset_init(ol_txrx_soc_handle soc)
1876  {
1877  	if (!soc || !soc->ops) {
1878  		dp_cdp_debug("Invalid Instance:");
1879  		QDF_BUG(0);
1880  		return;
1881  	}
1882  
1883  	if (!soc->ops->cmn_drv_ops ||
1884  	    !soc->ops->cmn_drv_ops->txrx_umac_reset_init)
1885  		return;
1886  
1887  	soc->ops->cmn_drv_ops->txrx_umac_reset_init(soc);
1888  }
1889  
1890  /**
1891   * cdp_txrx_umac_reset_deinit(): De-initialize UMAC HW reset module
1892   * @soc: soc handle
1893   */
cdp_txrx_umac_reset_deinit(ol_txrx_soc_handle soc)1894  static inline void cdp_txrx_umac_reset_deinit(ol_txrx_soc_handle soc)
1895  {
1896  	if (!soc || !soc->ops) {
1897  		dp_cdp_debug("Invalid Instance:");
1898  		QDF_BUG(0);
1899  		return;
1900  	}
1901  
1902  	if (!soc->ops->cmn_drv_ops ||
1903  	    !soc->ops->cmn_drv_ops->txrx_umac_reset_deinit)
1904  		return;
1905  
1906  	soc->ops->cmn_drv_ops->txrx_umac_reset_deinit(soc);
1907  }
1908  
1909  /**
1910   * cdp_notify_asserted_soc(): function to notify asserted SoC
1911   * @soc: soc handle
1912   *
1913   * Return: QDF_STATUS
1914   */
1915  static inline QDF_STATUS
cdp_notify_asserted_soc(ol_txrx_soc_handle soc)1916  cdp_notify_asserted_soc(ol_txrx_soc_handle soc)
1917  {
1918  	if (!soc || !soc->ops) {
1919  		dp_cdp_debug("Invalid Instance:");
1920  		QDF_BUG(0);
1921  		return QDF_STATUS_E_NULL_VALUE;
1922  	}
1923  
1924  	if (!soc->ops->cmn_drv_ops ||
1925  	    !soc->ops->cmn_drv_ops->notify_asserted_soc)
1926  		return QDF_STATUS_E_NULL_VALUE;
1927  
1928  	return soc->ops->cmn_drv_ops->notify_asserted_soc(soc);
1929  }
1930  
1931  /**
1932   * cdp_display_stats(): function to map to dump stats
1933   * @soc: soc handle
1934   * @value: statistics option
1935   * @level: verbosity level
1936   */
1937  static inline QDF_STATUS
cdp_display_stats(ol_txrx_soc_handle soc,uint16_t value,enum qdf_stats_verbosity_level level)1938  cdp_display_stats(ol_txrx_soc_handle soc, uint16_t value,
1939  		  enum qdf_stats_verbosity_level level)
1940  {
1941  	if (!soc || !soc->ops) {
1942  		dp_cdp_debug("Invalid Instance:");
1943  		QDF_BUG(0);
1944  		return 0;
1945  	}
1946  
1947  	if (!soc->ops->cmn_drv_ops ||
1948  	    !soc->ops->cmn_drv_ops->display_stats)
1949  		return 0;
1950  
1951  	return soc->ops->cmn_drv_ops->display_stats(soc, value, level);
1952  }
1953  
1954  
1955  /**
1956   * cdp_set_pn_check(): function to set pn check
1957   * @soc: soc handle
1958   * @vdev_id: id of virtual device
1959   * @peer_mac: mac address of peer
1960   * @sec_type: security type
1961   * @rx_pn: receive pn
1962   */
cdp_set_pn_check(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,enum cdp_sec_type sec_type,uint32_t * rx_pn)1963  static inline int cdp_set_pn_check(ol_txrx_soc_handle soc,
1964  		uint8_t vdev_id, uint8_t *peer_mac,
1965  		enum cdp_sec_type sec_type,  uint32_t *rx_pn)
1966  {
1967  	if (!soc || !soc->ops) {
1968  		dp_cdp_debug("Invalid Instance:");
1969  		QDF_BUG(0);
1970  		return 0;
1971  	}
1972  
1973  	if (!soc->ops->cmn_drv_ops ||
1974  	    !soc->ops->cmn_drv_ops->set_pn_check)
1975  		return 0;
1976  
1977  	soc->ops->cmn_drv_ops->set_pn_check(soc, vdev_id, peer_mac,
1978  			sec_type, rx_pn);
1979  	return 0;
1980  }
1981  
1982  /**
1983   * cdp_set_key_sec_type(): function to set sec mode of key
1984   * @soc: soc handle
1985   * @vdev_id: id of virtual device
1986   * @peer_mac: mac address of peer
1987   * @sec_type: security type
1988   * @is_unicast: ucast or mcast
1989   */
cdp_set_key_sec_type(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * peer_mac,enum cdp_sec_type sec_type,bool is_unicast)1990  static inline int cdp_set_key_sec_type(ol_txrx_soc_handle soc,
1991  				       uint8_t vdev_id,
1992  				       uint8_t *peer_mac,
1993  				       enum cdp_sec_type sec_type,
1994  				       bool is_unicast)
1995  {
1996  	if (!soc || !soc->ops) {
1997  		dp_cdp_debug("Invalid Instance:");
1998  		QDF_BUG(0);
1999  		return 0;
2000  	}
2001  
2002  	if (!soc->ops->cmn_drv_ops ||
2003  	    !soc->ops->cmn_drv_ops->set_key_sec_type)
2004  		return 0;
2005  
2006  	soc->ops->cmn_drv_ops->set_key_sec_type(soc, vdev_id,
2007  			peer_mac, sec_type, is_unicast);
2008  	return 0;
2009  }
2010  
2011  static inline QDF_STATUS
cdp_set_key(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * mac,bool is_unicast,uint32_t * key)2012  cdp_set_key(ol_txrx_soc_handle soc,
2013  	    uint8_t vdev_id,
2014  	    uint8_t *mac,
2015  	    bool is_unicast, uint32_t *key)
2016  {
2017  	if (!soc || !soc->ops) {
2018  		dp_cdp_debug("Invalid Instance:");
2019  		QDF_BUG(0);
2020  		return QDF_STATUS_E_FAILURE;
2021  	}
2022  
2023  	if (!soc->ops->ctrl_ops ||
2024  	    !soc->ops->ctrl_ops->set_key)
2025  		return QDF_STATUS_E_FAILURE;
2026  
2027  	return soc->ops->ctrl_ops->set_key(soc, vdev_id, mac,
2028  			is_unicast, key);
2029  }
2030  
2031  /**
2032   * cdp_update_config_parameters(): function to propagate configuration
2033   *                                 parameters to datapath
2034   * @soc: opaque soc handle
2035   * @cfg: configuration handle
2036   *
2037   * Return: status: 0 - Success, non-zero: Failure
2038   */
2039  static inline
cdp_update_config_parameters(ol_txrx_soc_handle soc,struct cdp_config_params * cfg)2040  QDF_STATUS cdp_update_config_parameters(ol_txrx_soc_handle soc,
2041  	struct cdp_config_params *cfg)
2042  {
2043  	struct cdp_soc *psoc = (struct cdp_soc *)soc;
2044  
2045  	if (!soc || !soc->ops) {
2046  		dp_cdp_debug("Invalid Instance:");
2047  		QDF_BUG(0);
2048  		return 0;
2049  	}
2050  
2051  	if (!soc->ops->cmn_drv_ops ||
2052  	    !soc->ops->cmn_drv_ops->update_config_parameters)
2053  		return QDF_STATUS_SUCCESS;
2054  
2055  	return soc->ops->cmn_drv_ops->update_config_parameters(psoc,
2056  								cfg);
2057  }
2058  
2059  /**
2060   * cdp_pdev_get_dp_txrx_handle() - get advanced dp handle from pdev
2061   * @soc: opaque soc handle
2062   * @pdev_id: id of data path pdev handle
2063   *
2064   * Return: opaque dp handle
2065   */
2066  static inline void *
cdp_pdev_get_dp_txrx_handle(ol_txrx_soc_handle soc,uint8_t pdev_id)2067  cdp_pdev_get_dp_txrx_handle(ol_txrx_soc_handle soc, uint8_t pdev_id)
2068  {
2069  	if (!soc || !soc->ops) {
2070  		dp_cdp_debug("Invalid Instance:");
2071  		QDF_BUG(0);
2072  		return 0;
2073  	}
2074  
2075  	if (soc->ops->cmn_drv_ops->get_dp_txrx_handle)
2076  		return soc->ops->cmn_drv_ops->get_dp_txrx_handle(soc, pdev_id);
2077  
2078  	return 0;
2079  }
2080  
2081  /**
2082   * cdp_pdev_set_dp_txrx_handle() - set advanced dp handle in pdev
2083   * @soc: opaque soc handle
2084   * @pdev_id: id of data path pdev handle
2085   * @dp_hdl: opaque pointer for dp_txrx_handle
2086   *
2087   * Return: void
2088   */
2089  static inline void
cdp_pdev_set_dp_txrx_handle(ol_txrx_soc_handle soc,uint8_t pdev_id,void * dp_hdl)2090  cdp_pdev_set_dp_txrx_handle(ol_txrx_soc_handle soc, uint8_t pdev_id,
2091  			    void *dp_hdl)
2092  {
2093  	if (!soc || !soc->ops) {
2094  		dp_cdp_debug("Invalid Instance:");
2095  		QDF_BUG(0);
2096  		return;
2097  	}
2098  
2099  	if (!soc->ops->cmn_drv_ops ||
2100  			!soc->ops->cmn_drv_ops->set_dp_txrx_handle)
2101  		return;
2102  
2103  	soc->ops->cmn_drv_ops->set_dp_txrx_handle(soc, pdev_id, dp_hdl);
2104  }
2105  
2106  /**
2107   * cdp_vdev_get_dp_ext_txrx_handle() - get extended dp handle from vdev
2108   * @soc: opaque soc handle
2109   * @vdev_id: vdev id
2110   *
2111   * Return: opaque dp handle
2112   */
2113  static inline void *
cdp_vdev_get_dp_ext_txrx_handle(ol_txrx_soc_handle soc,uint8_t vdev_id)2114  cdp_vdev_get_dp_ext_txrx_handle(ol_txrx_soc_handle soc, uint8_t vdev_id)
2115  {
2116  	if (!soc || !soc->ops) {
2117  		dp_cdp_debug("Invalid Instance:");
2118  		QDF_BUG(0);
2119  		return 0;
2120  	}
2121  
2122  	if (soc->ops->cmn_drv_ops->get_vdev_dp_ext_txrx_handle)
2123  		return soc->ops->cmn_drv_ops->get_vdev_dp_ext_txrx_handle(
2124  							soc, vdev_id);
2125  
2126  	return 0;
2127  }
2128  
2129  /**
2130   * cdp_vdev_set_dp_ext_txrx_handle() - set extended dp handle in vdev
2131   * @soc: opaque soc handle
2132   * @vdev_id: vdev id
2133   * @size: size of the advance dp handle
2134   *
2135   * Return: QDF_STATUS
2136   */
2137  static inline QDF_STATUS
cdp_vdev_set_dp_ext_txrx_handle(ol_txrx_soc_handle soc,uint8_t vdev_id,uint16_t size)2138  cdp_vdev_set_dp_ext_txrx_handle(ol_txrx_soc_handle soc, uint8_t vdev_id,
2139  				uint16_t size)
2140  {
2141  	if (!soc || !soc->ops) {
2142  		dp_cdp_debug("Invalid Instance:");
2143  		QDF_BUG(0);
2144  		return QDF_STATUS_E_FAILURE;
2145  	}
2146  
2147  	if (!soc->ops->cmn_drv_ops ||
2148  	    !soc->ops->cmn_drv_ops->set_vdev_dp_ext_txrx_handle)
2149  		return QDF_STATUS_E_FAILURE;
2150  
2151  	return soc->ops->cmn_drv_ops->set_vdev_dp_ext_txrx_handle(soc,
2152  								  vdev_id,
2153  								  size);
2154  }
2155  
2156  /**
2157   * cdp_soc_get_dp_txrx_handle() - get extended dp handle from soc
2158   * @soc: opaque soc handle
2159   *
2160   * Return: opaque extended dp handle
2161   */
2162  static inline void *
cdp_soc_get_dp_txrx_handle(ol_txrx_soc_handle soc)2163  cdp_soc_get_dp_txrx_handle(ol_txrx_soc_handle soc)
2164  {
2165  	if (!soc || !soc->ops) {
2166  		dp_cdp_debug("Invalid Instance:");
2167  		QDF_BUG(0);
2168  		return NULL;
2169  	}
2170  
2171  	if (soc->ops->cmn_drv_ops->get_soc_dp_txrx_handle)
2172  		return soc->ops->cmn_drv_ops->get_soc_dp_txrx_handle(
2173  				(struct cdp_soc *) soc);
2174  
2175  	return NULL;
2176  }
2177  
2178  /**
2179   * cdp_soc_set_dp_txrx_handle() - set advanced dp handle in soc
2180   * @soc: opaque soc handle
2181   * @dp_handle: opaque pointer for dp_txrx_handle
2182   *
2183   * Return: void
2184   */
2185  static inline void
cdp_soc_set_dp_txrx_handle(ol_txrx_soc_handle soc,void * dp_handle)2186  cdp_soc_set_dp_txrx_handle(ol_txrx_soc_handle soc, void *dp_handle)
2187  {
2188  	if (!soc || !soc->ops) {
2189  		dp_cdp_debug("Invalid Instance:");
2190  		QDF_BUG(0);
2191  		return;
2192  	}
2193  
2194  	if (!soc->ops->cmn_drv_ops ||
2195  			!soc->ops->cmn_drv_ops->set_soc_dp_txrx_handle)
2196  		return;
2197  
2198  	soc->ops->cmn_drv_ops->set_soc_dp_txrx_handle((struct cdp_soc *)soc,
2199  			dp_handle);
2200  }
2201  
2202  /**
2203   * cdp_soc_handle_mode_change() - Update pdev_id to lmac_id mapping
2204   * @soc: opaque soc handle
2205   * @pdev_id: id of data path pdev handle
2206   * @lmac_id: lmac id
2207   *
2208   * Return: QDF_STATUS
2209   */
2210  static inline QDF_STATUS
cdp_soc_handle_mode_change(ol_txrx_soc_handle soc,uint8_t pdev_id,uint32_t lmac_id)2211  cdp_soc_handle_mode_change(ol_txrx_soc_handle soc, uint8_t pdev_id,
2212  			   uint32_t lmac_id)
2213  {
2214  	if (!soc || !soc->ops) {
2215  		dp_cdp_debug("Invalid Instance:");
2216  		QDF_BUG(0);
2217  		return QDF_STATUS_E_FAILURE;
2218  	}
2219  
2220  	if (!soc->ops->cmn_drv_ops ||
2221  	    !soc->ops->cmn_drv_ops->handle_mode_change)
2222  		return QDF_STATUS_E_FAILURE;
2223  
2224  	return soc->ops->cmn_drv_ops->handle_mode_change(soc, pdev_id,
2225  							 lmac_id);
2226  }
2227  
2228  /**
2229   * cdp_soc_map_pdev_to_lmac() - Save pdev_id to lmac_id mapping
2230   * @soc: opaque soc handle
2231   * @pdev_id: id of data path pdev handle
2232   * @lmac_id: lmac id
2233   * Return: QDF_STATUS
2234   */
2235  static inline QDF_STATUS
cdp_soc_map_pdev_to_lmac(ol_txrx_soc_handle soc,uint8_t pdev_id,uint32_t lmac_id)2236  cdp_soc_map_pdev_to_lmac(ol_txrx_soc_handle soc, uint8_t pdev_id,
2237  			 uint32_t lmac_id)
2238  {
2239  	if (!soc || !soc->ops) {
2240  		dp_cdp_debug("Invalid Instance:");
2241  		QDF_BUG(0);
2242  		return QDF_STATUS_E_FAILURE;
2243  	}
2244  
2245  	if (!soc->ops->cmn_drv_ops ||
2246  	    !soc->ops->cmn_drv_ops->map_pdev_to_lmac)
2247  		return QDF_STATUS_E_FAILURE;
2248  
2249  	return soc->ops->cmn_drv_ops->map_pdev_to_lmac(soc, pdev_id,
2250  			lmac_id);
2251  }
2252  
2253  /**
2254   * cdp_txrx_set_pdev_status_down() - set pdev down/up status
2255   * @soc: soc opaque handle
2256   * @pdev_id: id of data path pdev handle
2257   * @is_pdev_down: pdev down/up status
2258   *
2259   * return: QDF_STATUS
2260   */
2261  static inline QDF_STATUS
cdp_txrx_set_pdev_status_down(ol_txrx_soc_handle soc,uint8_t pdev_id,bool is_pdev_down)2262  cdp_txrx_set_pdev_status_down(ol_txrx_soc_handle soc,
2263  			      uint8_t pdev_id,
2264  			      bool is_pdev_down)
2265  {
2266  	if (!soc || !soc->ops) {
2267  		dp_cdp_debug("Invalid Instance:");
2268  		QDF_BUG(0);
2269  		return QDF_STATUS_E_FAILURE;
2270  	}
2271  
2272  	if (!soc->ops->cmn_drv_ops ||
2273  	    !soc->ops->cmn_drv_ops->set_pdev_status_down)
2274  		return QDF_STATUS_E_FAILURE;
2275  
2276  	return soc->ops->cmn_drv_ops->set_pdev_status_down(soc, pdev_id,
2277  						    is_pdev_down);
2278  }
2279  
2280  /**
2281   * cdp_set_tx_pause() - Pause or resume tx path
2282   * @soc: Datapath soc handle
2283   * @flag: set or clear is_tx_pause
2284   *
2285   * Return: None.
2286   */
2287  static inline
cdp_set_tx_pause(ol_txrx_soc_handle soc,bool flag)2288  void cdp_set_tx_pause(ol_txrx_soc_handle soc, bool flag)
2289  {
2290  	if (!soc || !soc->ops) {
2291  		dp_cdp_debug("Invalid Instance:");
2292  		QDF_BUG(0);
2293  		return;
2294  	}
2295  
2296  	if (!soc->ops->cmn_drv_ops ||
2297  				!soc->ops->cmn_drv_ops->set_tx_pause)
2298  		return;
2299  
2300  	soc->ops->cmn_drv_ops->set_tx_pause(soc, flag);
2301  }
2302  
2303  /**
2304   * cdp_tx_send() - enqueue frame for transmission
2305   * @soc: soc opaque handle
2306   * @vdev_id: id of VAP device
2307   * @nbuf: nbuf to be enqueued
2308   *
2309   * This API is used by Extended Datapath modules to enqueue frame for
2310   * transmission
2311   *
2312   * Return: void
2313   */
2314  static inline void
cdp_tx_send(ol_txrx_soc_handle soc,uint8_t vdev_id,qdf_nbuf_t nbuf)2315  cdp_tx_send(ol_txrx_soc_handle soc, uint8_t vdev_id, qdf_nbuf_t nbuf)
2316  {
2317  	if (!soc || !soc->ops) {
2318  		dp_cdp_debug("Invalid Instance:");
2319  		QDF_BUG(0);
2320  		return;
2321  	}
2322  
2323  	if (!soc->ops->cmn_drv_ops ||
2324  			!soc->ops->cmn_drv_ops->tx_send)
2325  		return;
2326  
2327  	soc->ops->cmn_drv_ops->tx_send(soc, vdev_id, nbuf);
2328  }
2329  
2330  /**
2331   * cdp_set_pdev_pcp_tid_map() - set pdev pcp-tid-map
2332   * @soc: opaque soc handle
2333   * @pdev_id: id of data path pdev handle
2334   * @pcp: pcp value
2335   * @tid: tid value
2336   *
2337   * This API is used to configure the pcp-to-tid mapping for a pdev.
2338   *
2339   * Return: QDF_STATUS_SUCCESS if value set successfully
2340   *          QDF_STATUS_E_INVAL false if error
2341   */
2342  static inline
cdp_set_pdev_pcp_tid_map(ol_txrx_soc_handle soc,uint8_t pdev_id,uint32_t pcp,uint32_t tid)2343  QDF_STATUS cdp_set_pdev_pcp_tid_map(ol_txrx_soc_handle soc,
2344  				    uint8_t pdev_id,
2345  				    uint32_t pcp, uint32_t tid)
2346  {
2347  	if (!soc || !soc->ops) {
2348  		dp_cdp_debug("Invalid Instance");
2349  		return QDF_STATUS_E_INVAL;
2350  	}
2351  
2352  	if (!soc->ops->cmn_drv_ops ||
2353  	    !soc->ops->cmn_drv_ops->set_pdev_pcp_tid_map)
2354  		return QDF_STATUS_E_INVAL;
2355  
2356  	return soc->ops->cmn_drv_ops->set_pdev_pcp_tid_map(soc, pdev_id,
2357  							   pcp, tid);
2358  }
2359  
2360  /**
2361   * cdp_get_peer_mac_from_peer_id() - get peer mac addr from peer id
2362   * @soc: opaque soc handle
2363   * @peer_id: data path peer id
2364   * @peer_mac: peer_mac
2365   *
2366   * Return: QDF_STATUS
2367   */
2368  static inline
cdp_get_peer_mac_from_peer_id(ol_txrx_soc_handle soc,uint32_t peer_id,uint8_t * peer_mac)2369  QDF_STATUS cdp_get_peer_mac_from_peer_id(ol_txrx_soc_handle soc,
2370  					 uint32_t peer_id, uint8_t *peer_mac)
2371  {
2372  	if (soc->ops->cmn_drv_ops->txrx_get_peer_mac_from_peer_id)
2373  		return soc->ops->cmn_drv_ops->txrx_get_peer_mac_from_peer_id(
2374  				soc, peer_id, peer_mac);
2375  
2376  	return QDF_STATUS_E_INVAL;
2377  }
2378  
2379  /**
2380   * cdp_vdev_tx_lock() - acquire lock
2381   * @soc: opaque soc handle
2382   * @vdev_id: id of data path vdev handle
2383   *
2384   * Return: void
2385   */
2386  static inline
cdp_vdev_tx_lock(ol_txrx_soc_handle soc,uint8_t vdev_id)2387  void cdp_vdev_tx_lock(ol_txrx_soc_handle soc,
2388  		      uint8_t vdev_id)
2389  {
2390  	if (soc->ops->cmn_drv_ops->txrx_vdev_tx_lock)
2391  		soc->ops->cmn_drv_ops->txrx_vdev_tx_lock(soc, vdev_id);
2392  }
2393  
2394  /**
2395   * cdp_vdev_tx_unlock() - release lock
2396   * @soc: opaque soc handle
2397   * @vdev_id: id of data path vdev handle
2398   *
2399   * Return: void
2400   */
2401  static inline
cdp_vdev_tx_unlock(ol_txrx_soc_handle soc,uint8_t vdev_id)2402  void cdp_vdev_tx_unlock(ol_txrx_soc_handle soc,
2403  			uint8_t vdev_id)
2404  {
2405  	if (soc->ops->cmn_drv_ops->txrx_vdev_tx_unlock)
2406  		soc->ops->cmn_drv_ops->txrx_vdev_tx_unlock(soc, vdev_id);
2407  }
2408  
2409  /**
2410   * cdp_ath_getstats() - get updated athstats
2411   * @soc: opaque soc handle
2412   * @id: vdev_id/pdev_id based on type
2413   * @stats: cdp network device stats structure
2414   * @type: device type pdev/vdev
2415   *
2416   * Return: QDF_STATUS
2417   */
2418  static inline QDF_STATUS
cdp_ath_getstats(ol_txrx_soc_handle soc,uint8_t id,struct cdp_dev_stats * stats,uint8_t type)2419  cdp_ath_getstats(ol_txrx_soc_handle soc,
2420  		 uint8_t id, struct cdp_dev_stats *stats,
2421  		 uint8_t type)
2422  {
2423  	if (soc && soc->ops && soc->ops->cmn_drv_ops->txrx_ath_getstats)
2424  		return soc->ops->cmn_drv_ops->txrx_ath_getstats(soc, id,
2425  								stats, type);
2426  
2427  	return QDF_STATUS_E_FAILURE;
2428  }
2429  
2430  /**
2431   * cdp_set_gid_flag() - set groupid flag
2432   * @soc: opaque soc handle
2433   * @pdev_id: id of data path pdev handle
2434   * @mem_status: member status from grp management frame
2435   * @user_position: user position from grp management frame
2436   *
2437   * Return: QDF_STATUS
2438   */
2439  static inline QDF_STATUS
cdp_set_gid_flag(ol_txrx_soc_handle soc,uint8_t pdev_id,u_int8_t * mem_status,u_int8_t * user_position)2440  cdp_set_gid_flag(ol_txrx_soc_handle soc,
2441  		 uint8_t pdev_id, u_int8_t *mem_status,
2442  		 u_int8_t *user_position)
2443  {
2444  	if (soc->ops->cmn_drv_ops->txrx_set_gid_flag)
2445  		return soc->ops->cmn_drv_ops->txrx_set_gid_flag(soc, pdev_id,
2446  							 mem_status,
2447  							 user_position);
2448  	return QDF_STATUS_E_FAILURE;
2449  }
2450  
2451  /**
2452   * cdp_fw_supported_enh_stats_version() - returns the fw enhanced stats version
2453   * @soc: opaque soc handle
2454   * @pdev_id: id of data path pdev handle
2455   *
2456   */
2457  static inline
cdp_fw_supported_enh_stats_version(ol_txrx_soc_handle soc,uint8_t pdev_id)2458  uint32_t cdp_fw_supported_enh_stats_version(ol_txrx_soc_handle soc,
2459  					    uint8_t pdev_id)
2460  {
2461  	if (soc->ops->cmn_drv_ops->txrx_fw_supported_enh_stats_version)
2462  		return soc->ops->cmn_drv_ops->txrx_fw_supported_enh_stats_version(soc, pdev_id);
2463  	return 0;
2464  }
2465  
2466  /**
2467   * cdp_if_mgmt_drain() - Drain management frames
2468   * @soc: opaque soc handle
2469   * @vdev_id: id of vdev device
2470   * @force: number of frame in SW queue
2471   *
2472   * Return: void
2473   */
2474  static inline
cdp_if_mgmt_drain(ol_txrx_soc_handle soc,uint8_t vdev_id,int force)2475  void cdp_if_mgmt_drain(ol_txrx_soc_handle soc,
2476  		uint8_t vdev_id, int force)
2477  {
2478  	if (soc->ops->cmn_drv_ops->txrx_if_mgmt_drain)
2479  		soc->ops->cmn_drv_ops->txrx_if_mgmt_drain(soc, vdev_id, force);
2480  }
2481  
2482  /**
2483   * cdp_peer_map_attach() - CDP API to allocate PEER map memory
2484   * @soc: opaque soc handle
2485   * @max_peers: number of peers created in FW
2486   * @max_ast_index: max number of AST index supported in FW
2487   * @peer_map_unmap_v: Indicates HTT peer map/unmap versions enabled in FW
2488   *
2489   * Return: QDF_STATUS
2490   */
2491  static inline QDF_STATUS
cdp_peer_map_attach(ol_txrx_soc_handle soc,uint32_t max_peers,uint32_t max_ast_index,uint8_t peer_map_unmap_v)2492  cdp_peer_map_attach(ol_txrx_soc_handle soc, uint32_t max_peers,
2493  		    uint32_t max_ast_index, uint8_t peer_map_unmap_v)
2494  {
2495  	if (soc && soc->ops && soc->ops->cmn_drv_ops &&
2496  	    soc->ops->cmn_drv_ops->txrx_peer_map_attach)
2497  		return soc->ops->cmn_drv_ops->txrx_peer_map_attach(soc,
2498  							max_peers,
2499  							max_ast_index,
2500  							peer_map_unmap_v);
2501  
2502  	return QDF_STATUS_SUCCESS;
2503  }
2504  
2505  /**
2506   * cdp_soc_set_param() - CDP API to set soc parameters
2507   * @soc: opaque soc handle
2508   * @param: parameter type
2509   * @value: parameter value
2510   *
2511   *
2512   * Return: QDF_STATUS
2513   */
2514  static inline QDF_STATUS
cdp_soc_set_param(ol_txrx_soc_handle soc,enum cdp_soc_param_t param,uint32_t value)2515  cdp_soc_set_param(ol_txrx_soc_handle soc, enum cdp_soc_param_t param,
2516  		  uint32_t value)
2517  {
2518  	if (soc && soc->ops && soc->ops->cmn_drv_ops &&
2519  	    soc->ops->cmn_drv_ops->set_soc_param)
2520  		return soc->ops->cmn_drv_ops->set_soc_param(soc, param,
2521  							value);
2522  
2523  	return QDF_STATUS_SUCCESS;
2524  }
2525  
2526  /**
2527   * cdp_txrx_classify_and_update() - To classify the packet and update stats
2528   * @soc: opaque soc handle
2529   * @vdev_id: vdev id
2530   * @skb: data
2531   * @dir: rx or tx packet
2532   * @nbuf_class: packet classification object
2533   *
2534   * Return: 1 on success else return 0
2535   */
2536  static inline int
cdp_txrx_classify_and_update(ol_txrx_soc_handle soc,uint8_t vdev_id,qdf_nbuf_t skb,enum txrx_direction dir,struct ol_txrx_nbuf_classify * nbuf_class)2537  cdp_txrx_classify_and_update(ol_txrx_soc_handle soc,
2538  			     uint8_t vdev_id, qdf_nbuf_t skb,
2539  			     enum txrx_direction dir,
2540  			     struct ol_txrx_nbuf_classify *nbuf_class)
2541  {
2542  	if (!soc || !soc->ops) {
2543  		dp_cdp_debug("Invalid Instance");
2544  		QDF_BUG(0);
2545  		return 0;
2546  	}
2547  
2548  	if (!soc->ops->cmn_drv_ops ||
2549  	    !soc->ops->cmn_drv_ops->txrx_classify_update)
2550  		return 0;
2551  
2552  	return soc->ops->cmn_drv_ops->txrx_classify_update(soc, vdev_id,
2553  							   skb,
2554  							   dir, nbuf_class);
2555  }
2556  
2557  /**
2558   * cdp_get_dp_capabilities() - get DP capabilities
2559   * @soc: opaque soc handle
2560   * @dp_caps: enum of DP capabilities
2561   *
2562   * Return: bool
2563   */
2564  static inline bool
cdp_get_dp_capabilities(struct cdp_soc_t * soc,enum cdp_capabilities dp_caps)2565  cdp_get_dp_capabilities(struct cdp_soc_t *soc, enum cdp_capabilities dp_caps)
2566  {
2567  	if (soc && soc->ops && soc->ops->cmn_drv_ops &&
2568  	    soc->ops->cmn_drv_ops->get_dp_capabilities)
2569  		return soc->ops->cmn_drv_ops->get_dp_capabilities(soc, dp_caps);
2570  
2571  	qdf_err("invalid instance");
2572  	return false;
2573  }
2574  
2575  #ifdef RECEIVE_OFFLOAD
2576  /**
2577   * cdp_register_rx_offld_flush_cb() - register LRO/GRO flush cb function pointer
2578   * @soc: data path soc handle
2579   * @rx_ol_flush_cb: Flush callback function
2580   *
2581   * register rx offload flush callback function pointer
2582   *
2583   * Return: none
2584   */
cdp_register_rx_offld_flush_cb(ol_txrx_soc_handle soc,void (rx_ol_flush_cb)(void *))2585  static inline void cdp_register_rx_offld_flush_cb(ol_txrx_soc_handle soc,
2586  						  void (rx_ol_flush_cb)(void *))
2587  {
2588  	if (!soc || !soc->ops || !soc->ops->rx_offld_ops) {
2589  		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
2590  			  "%s invalid instance", __func__);
2591  		return;
2592  	}
2593  
2594  	if (soc->ops->rx_offld_ops->register_rx_offld_flush_cb)
2595  		return soc->ops->rx_offld_ops->register_rx_offld_flush_cb(
2596  								rx_ol_flush_cb);
2597  }
2598  
2599  /**
2600   * cdp_deregister_rx_offld_flush_cb() - deregister Rx offld flush cb function
2601   * @soc: data path soc handle
2602   *
2603   * deregister rx offload flush callback function pointer
2604   *
2605   * Return: none
2606   */
cdp_deregister_rx_offld_flush_cb(ol_txrx_soc_handle soc)2607  static inline void cdp_deregister_rx_offld_flush_cb(ol_txrx_soc_handle soc)
2608  {
2609  	if (!soc || !soc->ops || !soc->ops->rx_offld_ops) {
2610  		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
2611  			  "%s invalid instance", __func__);
2612  		return;
2613  	}
2614  
2615  	if (soc->ops->rx_offld_ops->deregister_rx_offld_flush_cb)
2616  		return soc->ops->rx_offld_ops->deregister_rx_offld_flush_cb();
2617  }
2618  #endif /* RECEIVE_OFFLOAD */
2619  
2620  /**
2621   * cdp_set_ba_timeout() - set ba aging timeout per AC
2622   *
2623   * @soc: pointer to the soc
2624   * @value: timeout value in millisec
2625   * @ac: Access category
2626   *
2627   * Return: void
2628   */
cdp_set_ba_timeout(ol_txrx_soc_handle soc,uint8_t ac,uint32_t value)2629  static inline void cdp_set_ba_timeout(ol_txrx_soc_handle soc,
2630  				      uint8_t ac, uint32_t value)
2631  {
2632  	if (!soc || !soc->ops) {
2633  		dp_cdp_debug("Invalid Instance");
2634  		QDF_BUG(0);
2635  		return;
2636  	}
2637  
2638  	if (!soc->ops->cmn_drv_ops ||
2639  	    !soc->ops->cmn_drv_ops->txrx_set_ba_aging_timeout)
2640  		return;
2641  
2642  	soc->ops->cmn_drv_ops->txrx_set_ba_aging_timeout(soc, ac, value);
2643  }
2644  
2645  /**
2646   * cdp_get_ba_timeout() - return ba aging timeout per AC
2647   *
2648   * @soc: pointer to the soc
2649   * @ac: access category
2650   * @value: timeout value in millisec
2651   *
2652   * Return: void
2653   */
cdp_get_ba_timeout(ol_txrx_soc_handle soc,uint8_t ac,uint32_t * value)2654  static inline void cdp_get_ba_timeout(ol_txrx_soc_handle soc,
2655  				      uint8_t ac, uint32_t *value)
2656  {
2657  	if (!soc || !soc->ops) {
2658  		dp_cdp_debug("Invalid Instance");
2659  		QDF_BUG(0);
2660  		return;
2661  	}
2662  
2663  	if (!soc->ops->cmn_drv_ops ||
2664  	    !soc->ops->cmn_drv_ops->txrx_get_ba_aging_timeout)
2665  		return;
2666  
2667  	soc->ops->cmn_drv_ops->txrx_get_ba_aging_timeout(soc, ac, value);
2668  }
2669  
2670  /**
2671   * cdp_cfg_get() - get cfg for dp enum
2672   *
2673   * @soc: pointer to the soc
2674   * @cfg: cfg enum
2675   *
2676   * Return: cfg value
2677   */
cdp_cfg_get(ol_txrx_soc_handle soc,enum cdp_dp_cfg cfg)2678  static inline uint32_t cdp_cfg_get(ol_txrx_soc_handle soc, enum cdp_dp_cfg cfg)
2679  {
2680  	if (!soc || !soc->ops) {
2681  		dp_cdp_debug("Invalid Instance");
2682  		return 0;
2683  	}
2684  
2685  	if (!soc->ops->cmn_drv_ops || !soc->ops->cmn_drv_ops->txrx_get_cfg)
2686  		return 0;
2687  
2688  	return soc->ops->cmn_drv_ops->txrx_get_cfg(soc, cfg);
2689  }
2690  
2691  /**
2692   * cdp_soc_set_rate_stats_ctx() - set rate stats context in soc
2693   * @soc: opaque soc handle
2694   * @ctx: rate stats context
2695   *
2696   * Return: void
2697   */
2698  static inline void
cdp_soc_set_rate_stats_ctx(ol_txrx_soc_handle soc,void * ctx)2699  cdp_soc_set_rate_stats_ctx(ol_txrx_soc_handle soc,
2700  			   void *ctx)
2701  {
2702  	if (!soc || !soc->ops) {
2703  		dp_cdp_debug("Invalid Instance:");
2704  		QDF_BUG(0);
2705  		return;
2706  	}
2707  
2708  	if (!soc->ops->cmn_drv_ops ||
2709  	    !soc->ops->cmn_drv_ops->set_rate_stats_ctx)
2710  		return;
2711  
2712  	soc->ops->cmn_drv_ops->set_rate_stats_ctx((struct cdp_soc_t *)soc,
2713  						  ctx);
2714  }
2715  
2716  /**
2717   * cdp_soc_get_rate_stats_ctx() - get rate stats context in soc
2718   * @soc: opaque soc handle
2719   *
2720   * Return: void
2721   */
2722  static inline void*
cdp_soc_get_rate_stats_ctx(ol_txrx_soc_handle soc)2723  cdp_soc_get_rate_stats_ctx(ol_txrx_soc_handle soc)
2724  {
2725  	if (!soc || !soc->ops) {
2726  		dp_cdp_debug("Invalid Instance:");
2727  		QDF_BUG(0);
2728  		return NULL;
2729  	}
2730  
2731  	if (!soc->ops->cmn_drv_ops ||
2732  	    !soc->ops->cmn_drv_ops->get_rate_stats_ctx)
2733  		return NULL;
2734  
2735  	return soc->ops->cmn_drv_ops->get_rate_stats_ctx(soc);
2736  }
2737  
2738  /**
2739   * cdp_peer_flush_rate_stats() - flush peer rate statistics
2740   * @soc: opaque soc handle
2741   * @pdev_id: id of pdev handle
2742   * @buf: stats buffer
2743   */
2744  static inline void
cdp_peer_flush_rate_stats(ol_txrx_soc_handle soc,uint8_t pdev_id,void * buf)2745  cdp_peer_flush_rate_stats(ol_txrx_soc_handle soc, uint8_t pdev_id,
2746  			  void *buf)
2747  {
2748  	if (!soc || !soc->ops) {
2749  		dp_cdp_debug("Invalid Instance:");
2750  		QDF_BUG(0);
2751  		return;
2752  	}
2753  
2754  	if (!soc->ops->cmn_drv_ops ||
2755  	    !soc->ops->cmn_drv_ops->txrx_peer_flush_rate_stats)
2756  		return;
2757  
2758  	soc->ops->cmn_drv_ops->txrx_peer_flush_rate_stats(soc, pdev_id, buf);
2759  }
2760  
2761  /**
2762   * cdp_peer_get_peerstats_ctx() - get peer stats context
2763   * @soc: opaque soc handle
2764   * @vdev_id: id of vdev handle
2765   * @mac_addr: peer mac address
2766   */
2767  static inline void
cdp_peer_get_peerstats_ctx(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * mac_addr)2768  *cdp_peer_get_peerstats_ctx(ol_txrx_soc_handle soc, uint8_t vdev_id,
2769  			    uint8_t *mac_addr)
2770  {
2771  	if (!soc || !soc->ops) {
2772  		dp_cdp_debug("Invalid Instance:");
2773  		QDF_BUG(0);
2774  		return NULL;
2775  	}
2776  
2777  	if (!soc->ops->cmn_drv_ops ||
2778  	    !soc->ops->cmn_drv_ops->txrx_peer_get_peerstats_ctx)
2779  		return NULL;
2780  
2781  	return soc->ops->cmn_drv_ops->txrx_peer_get_peerstats_ctx(soc,
2782  								  vdev_id,
2783  								  mac_addr);
2784  }
2785  
2786  /**
2787   * cdp_flush_rate_stats_request() - request flush rate statistics
2788   * @soc: opaque soc handle
2789   * @pdev_id: id of pdev handle
2790   */
2791  static inline QDF_STATUS
cdp_flush_rate_stats_request(struct cdp_soc_t * soc,uint8_t pdev_id)2792  cdp_flush_rate_stats_request(struct cdp_soc_t *soc, uint8_t pdev_id)
2793  {
2794  	if (!soc || !soc->ops) {
2795  		dp_cdp_debug("Invalid Instance:");
2796  		QDF_BUG(0);
2797  		return QDF_STATUS_E_FAILURE;
2798  	}
2799  
2800  	if (!soc->ops->cmn_drv_ops ||
2801  	    !soc->ops->cmn_drv_ops->txrx_flush_rate_stats_request)
2802  		return QDF_STATUS_E_FAILURE;
2803  
2804  	return soc->ops->cmn_drv_ops->txrx_flush_rate_stats_request(soc,
2805  								    pdev_id);
2806  }
2807  
2808  /**
2809   * cdp_set_vdev_pcp_tid_map() - set vdev pcp-tid-map
2810   * @soc: opaque soc handle
2811   * @vdev_id: id of data path vdev handle
2812   * @pcp: pcp value
2813   * @tid: tid value
2814   *
2815   * This API is used to configure the pcp-to-tid mapping for a pdev.
2816   *
2817   * Return: QDF_STATUS_SUCCESS if value set successfully
2818   *          QDF_STATUS_E_INVAL false if error
2819   */
2820  static inline
cdp_set_vdev_pcp_tid_map(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t pcp,uint8_t tid)2821  QDF_STATUS cdp_set_vdev_pcp_tid_map(ol_txrx_soc_handle soc,
2822  				    uint8_t vdev_id,
2823  				    uint8_t pcp, uint8_t tid)
2824  {
2825  	if (!soc || !soc->ops) {
2826  		dp_cdp_debug("Invalid Instance");
2827  		return QDF_STATUS_E_INVAL;
2828  	}
2829  
2830  	if (!soc->ops->cmn_drv_ops ||
2831  	    !soc->ops->cmn_drv_ops->set_vdev_pcp_tid_map)
2832  		return QDF_STATUS_E_INVAL;
2833  
2834  	return soc->ops->cmn_drv_ops->set_vdev_pcp_tid_map(soc, vdev_id,
2835  							   pcp, tid);
2836  }
2837  
2838  /**
2839   * cdp_tx_send_exc() - Transmit a frame on a given vdev in exception path
2840   *
2841   * @soc: opaque soc handle
2842   * @vdev_id: vdev id
2843   * @nbuf: skb
2844   * @tx_exc_metadata: Handle that holds exception path meta data
2845   *
2846   * Return: NULL on success
2847   *         nbuf when it fails to send
2848   */
2849  static inline qdf_nbuf_t
cdp_tx_send_exc(ol_txrx_soc_handle soc,uint8_t vdev_id,qdf_nbuf_t nbuf,struct cdp_tx_exception_metadata * tx_exc_metadata)2850  cdp_tx_send_exc(ol_txrx_soc_handle soc,
2851  		uint8_t vdev_id,
2852  		qdf_nbuf_t nbuf,
2853  		struct cdp_tx_exception_metadata *tx_exc_metadata)
2854  {
2855  	if (!soc || !soc->ops) {
2856  		dp_cdp_debug("Invalid Instance");
2857  		QDF_BUG(0);
2858  		return 0;
2859  	}
2860  
2861  	if (!soc->ops->cmn_drv_ops ||
2862  	    !soc->ops->cmn_drv_ops->tx_send_exc)
2863  		return 0;
2864  
2865  	return soc->ops->cmn_drv_ops->tx_send_exc
2866  			(soc, vdev_id, nbuf, tx_exc_metadata);
2867  }
2868  
2869  /**
2870   * cdp_vdev_get_peer_mac_list(): function to get peer mac list of vdev
2871   * @soc: Datapath soc handle
2872   * @vdev_id: vdev id
2873   * @newmac: Table of the clients mac
2874   * @mac_cnt: No. of MACs required
2875   * @limit: Limit the number of clients
2876   *
2877   * return: no of clients
2878   */
2879  static inline uint16_t
cdp_vdev_get_peer_mac_list(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t newmac[][QDF_MAC_ADDR_SIZE],uint16_t mac_cnt,bool limit)2880  cdp_vdev_get_peer_mac_list(ol_txrx_soc_handle soc,
2881  			   uint8_t vdev_id,
2882  			   uint8_t newmac[][QDF_MAC_ADDR_SIZE],
2883  			   uint16_t mac_cnt, bool limit)
2884  {
2885  	if (!soc || !soc->ops) {
2886  		dp_cdp_debug("Invalid Instance");
2887  		QDF_BUG(0);
2888  		return 0;
2889  	}
2890  
2891  	if (!soc->ops->cmn_drv_ops ||
2892  	    !soc->ops->cmn_drv_ops->get_peer_mac_list)
2893  		return 0;
2894  
2895  	return soc->ops->cmn_drv_ops->get_peer_mac_list
2896  			(soc, vdev_id, newmac, mac_cnt, limit);
2897  }
2898  
2899  /**
2900   * cdp_soc_config_full_mon_mode () - Configure Full monitor mode
2901   *
2902   * @soc: dp soc handle
2903   * @val: value to be configured val should be 0 or 1
2904   *
2905   * This API is used to enable/disable support for Full monitor mode feature
2906   *
2907   * Return: QDF_STATUS_SUCCESS if value set successfully
2908   *         QDF_STATUS_E_INVAL false if error
2909   */
2910  static inline QDF_STATUS
cdp_soc_config_full_mon_mode(ol_txrx_soc_handle soc,uint8_t val)2911  cdp_soc_config_full_mon_mode(ol_txrx_soc_handle soc, uint8_t val)
2912  {
2913  	if (!soc || !soc->ops) {
2914  		dp_cdp_debug("Invalid Instance");
2915  		return QDF_STATUS_E_INVAL;
2916  	}
2917  
2918  	if (!soc->ops->mon_ops ||
2919  	    !soc->ops->mon_ops->config_full_mon_mode)
2920  		return QDF_STATUS_E_INVAL;
2921  
2922  	return soc->ops->mon_ops->config_full_mon_mode(soc, val);
2923  }
2924  
2925  /**
2926   * cdp_rx_get_pending() - Get number of pending frames of RX threads
2927   * @soc: opaque soc handle
2928   * Return: number of pending frames
2929   */
2930  static inline int
cdp_rx_get_pending(ol_txrx_soc_handle soc)2931  cdp_rx_get_pending(ol_txrx_soc_handle soc)
2932  {
2933  	if (!soc || !soc->ol_ops ||
2934  	    !soc->ol_ops->dp_rx_get_pending)
2935  		return 0;
2936  
2937  	if (cdp_cfg_get(soc, cfg_dp_wow_check_rx_pending))
2938  		return soc->ol_ops->dp_rx_get_pending(soc);
2939  	else
2940  		return 0;
2941  }
2942  
2943  static inline uint16_t
cdp_get_peer_id(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * mac)2944  cdp_get_peer_id(ol_txrx_soc_handle soc, uint8_t vdev_id, uint8_t *mac)
2945  {
2946  	if (!soc || !soc->ops) {
2947  		dp_cdp_debug("Invalid Instance");
2948  		QDF_BUG(0);
2949  		return 0;
2950  	}
2951  
2952  	if (!soc->ops->cmn_drv_ops ||
2953  	    !soc->ops->cmn_drv_ops->get_peer_id)
2954  		return 0;
2955  
2956  	return soc->ops->cmn_drv_ops->get_peer_id
2957  			(soc, vdev_id, mac);
2958  }
2959  
2960  #ifdef QCA_SUPPORT_WDS_EXTENDED
2961  static inline QDF_STATUS
cdp_wds_ext_set_peer_rx(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * mac,ol_txrx_rx_fp rx,ol_osif_peer_handle osif_peer)2962  cdp_wds_ext_set_peer_rx(ol_txrx_soc_handle soc, uint8_t vdev_id,
2963  			uint8_t *mac, ol_txrx_rx_fp rx,
2964  			ol_osif_peer_handle osif_peer)
2965  {
2966  	if (!soc || !soc->ops) {
2967  		dp_cdp_debug("Invalid Instance");
2968  		QDF_BUG(0);
2969  		return QDF_STATUS_E_FAULT;
2970  	}
2971  
2972  	if (!soc->ops->cmn_drv_ops ||
2973  	    !soc->ops->cmn_drv_ops->set_wds_ext_peer_rx)
2974  		return QDF_STATUS_E_FAULT;
2975  
2976  	return soc->ops->cmn_drv_ops->set_wds_ext_peer_rx
2977  			(soc, vdev_id, mac, rx, osif_peer);
2978  }
2979  
2980  static inline QDF_STATUS
cdp_wds_ext_get_peer_osif_handle(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * mac,ol_osif_peer_handle * osif_peer)2981  cdp_wds_ext_get_peer_osif_handle(
2982  			ol_txrx_soc_handle soc, uint8_t vdev_id,
2983  			uint8_t *mac,
2984  			ol_osif_peer_handle *osif_peer)
2985  {
2986  	if (!soc || !soc->ops) {
2987  		dp_cdp_debug("Invalid Instance");
2988  		QDF_BUG(0);
2989  		return QDF_STATUS_E_FAULT;
2990  	}
2991  
2992  	if (!soc->ops->cmn_drv_ops ||
2993  	    !soc->ops->cmn_drv_ops->get_wds_ext_peer_osif_handle)
2994  		return QDF_STATUS_E_FAULT;
2995  
2996  	return soc->ops->cmn_drv_ops->get_wds_ext_peer_osif_handle
2997  			(soc, vdev_id, mac, osif_peer);
2998  }
2999  
3000  /**
3001   * cdp_wds_ext_set_bit() - set wds-ext peer bit
3002   * @soc: soc handle
3003   * @mac: peer mac address
3004   *
3005   * Return: QDF_STATUS
3006   */
3007  static inline QDF_STATUS
cdp_wds_ext_set_bit(ol_txrx_soc_handle soc,uint8_t * mac)3008  cdp_wds_ext_set_bit(ol_txrx_soc_handle soc, uint8_t *mac)
3009  {
3010  	if (!soc || !soc->ops) {
3011  		dp_cdp_debug("Invalid Instance");
3012  		QDF_BUG(0);
3013  		return QDF_STATUS_E_FAULT;
3014  	}
3015  
3016  	if (!soc->ops->cmn_drv_ops ||
3017  	    !soc->ops->cmn_drv_ops->set_wds_ext_peer_bit)
3018  		return QDF_STATUS_E_FAULT;
3019  
3020  	return soc->ops->cmn_drv_ops->set_wds_ext_peer_bit(soc, mac);
3021  }
3022  #endif /* QCA_SUPPORT_WDS_EXTENDED */
3023  
3024  /**
3025   * cdp_drain_txrx() - drain TX/RX SRNGs
3026   * @soc: opaque soc handle
3027   * @rx_only: drain only RX rings
3028   *
3029   * Return: QDF_STATUS
3030   */
3031  static inline QDF_STATUS
cdp_drain_txrx(ol_txrx_soc_handle soc,uint8_t rx_only)3032  cdp_drain_txrx(ol_txrx_soc_handle soc, uint8_t rx_only)
3033  {
3034  	if (!soc || !soc->ops) {
3035  		dp_cdp_debug("Invalid Instance");
3036  		QDF_BUG(0);
3037  		return QDF_STATUS_E_FAULT;
3038  	}
3039  
3040  	if (!soc->ops->cmn_drv_ops ||
3041  	    !soc->ops->cmn_drv_ops->txrx_drain)
3042  		return QDF_STATUS_E_FAULT;
3043  
3044  	return soc->ops->cmn_drv_ops->txrx_drain(soc, rx_only);
3045  }
3046  
3047  /**
3048   * cdp_get_free_desc_poolsize() - get free desc pool size
3049   * @soc: opaque soc handle
3050   */
3051  static inline int
cdp_get_free_desc_poolsize(ol_txrx_soc_handle soc)3052  cdp_get_free_desc_poolsize(ol_txrx_soc_handle soc)
3053  {
3054  	if (!soc || !soc->ops) {
3055  		dp_cdp_debug("Invalid Instance");
3056  		QDF_BUG(0);
3057  		return 0;
3058  	}
3059  
3060  	if (!soc->ops->cmn_drv_ops ||
3061  	    !soc->ops->cmn_drv_ops->get_free_desc_poolsize)
3062  		return 0;
3063  
3064  	return soc->ops->cmn_drv_ops->get_free_desc_poolsize(soc);
3065  }
3066  
3067  #ifdef WLAN_FEATURE_PKT_CAPTURE_V2
3068  /**
3069   * cdp_set_pkt_capture_mode() - set pkt capture mode in dp ctx
3070   * @soc: opaque soc handle
3071   * @val: value to be set
3072   */
3073  static inline void
cdp_set_pkt_capture_mode(ol_txrx_soc_handle soc,bool val)3074  cdp_set_pkt_capture_mode(ol_txrx_soc_handle soc, bool val)
3075  {
3076  	if (!soc || !soc->ops) {
3077  		dp_cdp_debug("Invalid Instance");
3078  		QDF_BUG(0);
3079  		return;
3080  	}
3081  
3082  	if (!soc->ops->cmn_drv_ops ||
3083  	    !soc->ops->cmn_drv_ops->set_pkt_capture_mode)
3084  		return;
3085  
3086  	soc->ops->cmn_drv_ops->set_pkt_capture_mode(soc, val);
3087  }
3088  #else
3089  static inline void
cdp_set_pkt_capture_mode(ol_txrx_soc_handle soc,bool val)3090  cdp_set_pkt_capture_mode(ol_txrx_soc_handle soc, bool val)
3091  {
3092  }
3093  #endif
3094  
3095  /**
3096   * cdp_get_tx_inqueue() - Get number of Tx frames that are queued
3097   * @soc: opaque soc handle
3098   *
3099   * Return: number of queued frames
3100   */
3101  static inline uint32_t
cdp_get_tx_inqueue(ol_txrx_soc_handle soc)3102  cdp_get_tx_inqueue(ol_txrx_soc_handle soc)
3103  {
3104  	if (!soc || !soc->ol_ops ||
3105  	    !soc->ol_ops->dp_get_tx_inqueue)
3106  		return 0;
3107  
3108  	return soc->ol_ops->dp_get_tx_inqueue(soc);
3109  }
3110  
3111  #ifdef FEATURE_RUNTIME_PM
3112  
3113  /**
3114   * cdp_set_rtpm_tput_policy_requirement() - Set RTPM throughput policy
3115   * @soc: opaque soc handle
3116   * @is_high_tput: flag indicating whether throughput requirement is high or not
3117   *
3118   * The functions sets RTPM throughput policy requirement. If 'is_high_tput' is
3119   * set, the expectation is that runtime_pm APIs will not be invoked per packet.
3120   */
3121  
3122  static inline
cdp_set_rtpm_tput_policy_requirement(ol_txrx_soc_handle soc,bool is_high_tput)3123  void cdp_set_rtpm_tput_policy_requirement(ol_txrx_soc_handle soc,
3124  					  bool is_high_tput)
3125  {
3126  	if (!soc || !soc->ops) {
3127  		dp_cdp_debug("Invalid Instance");
3128  		QDF_BUG(0);
3129  		return;
3130  	}
3131  
3132  	if (!soc->ops->cmn_drv_ops ||
3133  	    !soc->ops->cmn_drv_ops->set_rtpm_tput_policy)
3134  		return;
3135  
3136  	soc->ops->cmn_drv_ops->set_rtpm_tput_policy(soc, is_high_tput);
3137  }
3138  #else
3139  static inline
cdp_set_rtpm_tput_policy_requirement(ol_txrx_soc_handle soc,bool is_high_tput)3140  void cdp_set_rtpm_tput_policy_requirement(ol_txrx_soc_handle soc,
3141  					  bool is_high_tput)
3142  {
3143  }
3144  
3145  #endif /* FEATURE_RUNTIME_PM */
3146  
3147  /**
3148   * cdp_enable_mon_reap_timer() - enable/disable reap timer
3149   * @soc: Datapath soc handle
3150   * @source: monitor reap source
3151   * @enable: enable/disable reap timer of monitor status ring
3152   *
3153   * Return: true if timer start/stop is performed, false otherwise.
3154   */
3155  static inline bool
cdp_enable_mon_reap_timer(ol_txrx_soc_handle soc,enum cdp_mon_reap_source source,bool enable)3156  cdp_enable_mon_reap_timer(ol_txrx_soc_handle soc,
3157  			  enum cdp_mon_reap_source source,
3158  			  bool enable)
3159  {
3160  	if (!soc || !soc->ops) {
3161  		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_FATAL,
3162  			  "%s invalid instance", __func__);
3163  		QDF_BUG(0);
3164  		return false;
3165  	}
3166  
3167  	if (!soc->ops->mon_ops ||
3168  	    !soc->ops->mon_ops->txrx_enable_mon_reap_timer)
3169  		return false;
3170  
3171  	return soc->ops->mon_ops->txrx_enable_mon_reap_timer(soc, source,
3172  							     enable);
3173  }
3174  
3175  /**
3176   * cdp_get_tsf_time() - get tsf time
3177   * @soc: Datapath soc handle
3178   * @tsf_id:
3179   * @mac_id: mac_id
3180   * @tsf: pointer to update tsf value
3181   * @tsf_sync_soc_time: pointer to update tsf sync time
3182   *
3183   * Return: None.
3184   */
3185  static inline void
cdp_get_tsf_time(ol_txrx_soc_handle soc,uint32_t tsf_id,uint32_t mac_id,uint64_t * tsf,uint64_t * tsf_sync_soc_time)3186  cdp_get_tsf_time(ol_txrx_soc_handle soc, uint32_t tsf_id, uint32_t mac_id,
3187  		 uint64_t *tsf, uint64_t *tsf_sync_soc_time)
3188  {
3189  	if (!soc) {
3190  		dp_cdp_debug("Invalid Instance");
3191  		return;
3192  	}
3193  	if (!soc->ops->cmn_drv_ops || !soc->ops->cmn_drv_ops->txrx_get_tsf_time)
3194  		return;
3195  
3196  	soc->ops->cmn_drv_ops->txrx_get_tsf_time(soc, tsf_id, mac_id, tsf,
3197  						 tsf_sync_soc_time);
3198  }
3199  
3200  /**
3201   * cdp_get_tsf2_offset() - get tsf2 offset
3202   * @soc: Datapath soc handle
3203   * @mac_id: mac_id
3204   * @value: pointer to update tsf2 value
3205   *
3206   * Return: None.
3207   */
3208  static inline void
cdp_get_tsf2_offset(ol_txrx_soc_handle soc,uint8_t mac_id,uint64_t * value)3209  cdp_get_tsf2_offset(ol_txrx_soc_handle soc, uint8_t mac_id, uint64_t *value)
3210  {
3211  	if (!soc) {
3212  		dp_cdp_debug("Invalid Instance");
3213  		return;
3214  	}
3215  	if (!soc->ops->cmn_drv_ops ||
3216  	    !soc->ops->cmn_drv_ops->txrx_get_tsf2_offset)
3217  		return;
3218  
3219  	soc->ops->cmn_drv_ops->txrx_get_tsf2_offset(soc, mac_id, value);
3220  }
3221  
3222  /**
3223   * cdp_get_tqm_offset() - get tqm offset
3224   * @soc: Datapath soc handle
3225   * @value: pointer to update tqm value
3226   *
3227   * Return: None.
3228   */
3229  static inline void
cdp_get_tqm_offset(ol_txrx_soc_handle soc,uint64_t * value)3230  cdp_get_tqm_offset(ol_txrx_soc_handle soc, uint64_t *value)
3231  {
3232  	if (!soc) {
3233  		dp_cdp_debug("Invalid Instance");
3234  		return;
3235  	}
3236  	if (!soc->ops->cmn_drv_ops ||
3237  	    !soc->ops->cmn_drv_ops->txrx_get_tqm_offset)
3238  		return;
3239  
3240  	soc->ops->cmn_drv_ops->txrx_get_tqm_offset(soc, value);
3241  }
3242  
cdp_get_fst_cem_base(ol_txrx_soc_handle soc,uint64_t size)3243  static inline uint64_t cdp_get_fst_cem_base(ol_txrx_soc_handle soc,
3244  					    uint64_t size)
3245  {
3246  	if (!soc) {
3247  		dp_cdp_debug("Invalid Instance");
3248  		return 0;
3249  	}
3250  
3251  	if (!soc->ops->cmn_drv_ops ||
3252  	    !soc->ops->cmn_drv_ops->get_fst_cmem_base)
3253  		return 0;
3254  
3255  	return soc->ops->cmn_drv_ops->get_fst_cmem_base(soc, size);
3256  }
3257  
3258  #if defined(WLAN_FEATURE_11BE_MLO)
3259  /*
3260   * cdp_mlo_dev_ctxt_create - DP MLO Device context create
3261   * @soc: soc handle
3262   * @mld_mac_addr: MLD MAC Address
3263   *
3264   * return: QDF_STATUS
3265   */
3266  static inline
cdp_mlo_dev_ctxt_create(ol_txrx_soc_handle soc,uint8_t * mld_mac_addr)3267  QDF_STATUS cdp_mlo_dev_ctxt_create(ol_txrx_soc_handle soc,
3268  				   uint8_t *mld_mac_addr)
3269  {
3270  	if (!soc || !soc->ops) {
3271  		QDF_BUG(0);
3272  		return QDF_STATUS_E_FAILURE;
3273  	}
3274  
3275  	if (!soc->ops->cmn_mlo_ops ||
3276  	    !soc->ops->cmn_mlo_ops->mlo_dev_ctxt_create)
3277  		return QDF_STATUS_E_FAILURE;
3278  
3279  	return soc->ops->cmn_mlo_ops->mlo_dev_ctxt_create(soc, mld_mac_addr);
3280  }
3281  
3282  /*
3283   * cdp_mlo_dev_ctxt_destroy - DP MLO Device context destroy
3284   * @soc: soc handle
3285   * @mld_mac_addr: MLD MAC Address
3286   *
3287   * return: QDF_STATUS
3288   */
3289  static inline
cdp_mlo_dev_ctxt_destroy(ol_txrx_soc_handle soc,uint8_t * mld_mac_addr)3290  QDF_STATUS cdp_mlo_dev_ctxt_destroy(ol_txrx_soc_handle soc,
3291  				    uint8_t *mld_mac_addr)
3292  {
3293  	if (!soc || !soc->ops) {
3294  		QDF_BUG(0);
3295  		return QDF_STATUS_E_FAILURE;
3296  	}
3297  
3298  	if (!soc->ops->cmn_mlo_ops ||
3299  	    !soc->ops->cmn_mlo_ops->mlo_dev_ctxt_destroy)
3300  		return QDF_STATUS_E_FAILURE;
3301  
3302  	return soc->ops->cmn_mlo_ops->mlo_dev_ctxt_destroy(soc, mld_mac_addr);
3303  }
3304  
3305  /*
3306   * cdp_mlo_dev_ctxt_attach - DP MLO Device context attach vdev
3307   * @soc: soc handle
3308   * @vdev_id: vdev id
3309   * @mld_mac_addr: MLD MAC Address
3310   *
3311   * return: QDF_STATUS
3312   */
3313  static inline
cdp_mlo_dev_ctxt_attach(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * mld_mac_addr)3314  QDF_STATUS cdp_mlo_dev_ctxt_attach(ol_txrx_soc_handle soc,
3315  				   uint8_t vdev_id,
3316  				   uint8_t *mld_mac_addr)
3317  {
3318  	if (!soc || !soc->ops) {
3319  		QDF_BUG(0);
3320  		return QDF_STATUS_E_FAILURE;
3321  	}
3322  
3323  	if (!soc->ops->cmn_mlo_ops ||
3324  	    !soc->ops->cmn_mlo_ops->mlo_dev_ctxt_attach)
3325  		return QDF_STATUS_E_FAILURE;
3326  
3327  	return soc->ops->cmn_mlo_ops->mlo_dev_ctxt_attach(soc, vdev_id,
3328  							  mld_mac_addr);
3329  }
3330  
3331  /*
3332   * cdp_mlo_dev_ctxt_detach - DP MLO Device context detach vdev
3333   * @soc: soc handle
3334   * @vdev_id: vdev id
3335   * @mld_mac_addr: MLD MAC Address
3336   *
3337   * return: QDF_STATUS
3338   */
3339  static inline
cdp_mlo_dev_ctxt_detach(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * mld_mac_addr)3340  QDF_STATUS cdp_mlo_dev_ctxt_detach(ol_txrx_soc_handle soc,
3341  				   uint8_t vdev_id,
3342  				   uint8_t *mld_mac_addr)
3343  {
3344  	if (!soc || !soc->ops) {
3345  		QDF_BUG(0);
3346  		return QDF_STATUS_E_FAILURE;
3347  	}
3348  
3349  	if (!soc->ops->cmn_mlo_ops ||
3350  	    !soc->ops->cmn_mlo_ops->mlo_dev_ctxt_detach)
3351  		return QDF_STATUS_E_FAILURE;
3352  
3353  	return soc->ops->cmn_mlo_ops->mlo_dev_ctxt_detach(soc, vdev_id,
3354  							  mld_mac_addr);
3355  }
3356  #else
3357  static inline
cdp_mlo_dev_ctxt_create(ol_txrx_soc_handle soc,uint8_t * mld_mac_addr)3358  QDF_STATUS cdp_mlo_dev_ctxt_create(ol_txrx_soc_handle soc,
3359  				   uint8_t *mld_mac_addr)
3360  {
3361  	return QDF_STATUS_SUCCESS;
3362  }
3363  
3364  static inline
cdp_mlo_dev_ctxt_destroy(ol_txrx_soc_handle soc,uint8_t * mld_mac_addr)3365  QDF_STATUS cdp_mlo_dev_ctxt_destroy(ol_txrx_soc_handle soc,
3366  				    uint8_t *mld_mac_addr)
3367  {
3368  	return QDF_STATUS_SUCCESS;
3369  }
3370  
3371  static inline
cdp_mlo_dev_ctxt_attach(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * mld_mac_addr)3372  QDF_STATUS cdp_mlo_dev_ctxt_attach(ol_txrx_soc_handle soc,
3373  				   uint8_t vdev_id,
3374  				   uint8_t *mld_mac_addr)
3375  {
3376  	return QDF_STATUS_SUCCESS;
3377  }
3378  
3379  static inline
cdp_mlo_dev_ctxt_detach(ol_txrx_soc_handle soc,uint8_t vdev_id,uint8_t * mld_mac_addr)3380  QDF_STATUS cdp_mlo_dev_ctxt_detach(ol_txrx_soc_handle soc,
3381  				   uint8_t vdev_id,
3382  				   uint8_t *mld_mac_addr)
3383  {
3384  	return QDF_STATUS_SUCCESS;
3385  }
3386  #endif /* WLAN_FEATURE_11BE_MLO */
3387  
3388  #ifdef WLAN_SUPPORT_DPDK
3389  /*
3390   * cdp_dpdk_get_ring_info - get dp ring info for dpdk
3391   * @soc: soc handle
3392   * @uio_info: pointer to fill dp ring info
3393   *
3394   * Return: no. of mappings filled
3395   */
cdp_dpdk_get_ring_info(ol_txrx_soc_handle soc,qdf_uio_info_t * uio_info)3396  static inline uint8_t cdp_dpdk_get_ring_info(ol_txrx_soc_handle soc,
3397  					     qdf_uio_info_t *uio_info)
3398  {
3399  	if (!soc) {
3400  		dp_cdp_debug("Invalid Instance");
3401  		return 0;
3402  	}
3403  
3404  	if (!soc->ops->cmn_drv_ops ||
3405  	    !soc->ops->cmn_drv_ops->dpdk_get_ring_info)
3406  		return 0;
3407  
3408  	return soc->ops->cmn_drv_ops->dpdk_get_ring_info(soc, uio_info);
3409  }
3410  
3411  /*
3412   * cdp_cfgmgr_get_soc_info - get soc info for dpdk
3413   * @soc: soc handle
3414   * @soc_id: soc id
3415   * @ev_buf: pointer to fill soc info
3416   *
3417   * Return: 0 if info filled successful, error otherwise
3418   */
3419  static inline
cdp_cfgmgr_get_soc_info(struct cdp_soc_t * soc,uint8_t soc_id,struct dpdk_wlan_soc_info_event * ev_buf)3420  int cdp_cfgmgr_get_soc_info(struct cdp_soc_t *soc, uint8_t soc_id,
3421  			    struct dpdk_wlan_soc_info_event *ev_buf)
3422  {
3423  	if (!soc) {
3424  		dp_cdp_debug("Invalid Instance");
3425  		return -EINVAL;
3426  	}
3427  
3428  	if (!soc->ops->cmn_drv_ops ||
3429  	    !soc->ops->cmn_drv_ops->cfgmgr_get_soc_info)
3430  		return -EINVAL;
3431  
3432  	return soc->ops->cmn_drv_ops->cfgmgr_get_soc_info(soc, soc_id, ev_buf);
3433  }
3434  
3435  /*
3436   * cdp_cfgmgr_get_vdev_info - get vdev info of a soc for dpdk
3437   * @soc: soc handle
3438   * @soc_id: soc id
3439   * @ev_buf: pointer to fill vdev info
3440   *
3441   * Return: 0 if info filled successful, error otherwise
3442   */
3443  static inline
cdp_cfgmgr_get_vdev_info(struct cdp_soc_t * soc,uint8_t soc_id,struct dpdk_wlan_vdev_info_event * ev_buf)3444  int cdp_cfgmgr_get_vdev_info(struct cdp_soc_t *soc, uint8_t soc_id,
3445  			     struct dpdk_wlan_vdev_info_event *ev_buf)
3446  {
3447  	if (!soc) {
3448  		dp_cdp_debug("Invalid Instance");
3449  		return -EINVAL;
3450  	}
3451  
3452  	if (!soc->ops->cmn_drv_ops ||
3453  	    !soc->ops->cmn_drv_ops->cfgmgr_get_vdev_info)
3454  		return -EINVAL;
3455  
3456  	return soc->ops->cmn_drv_ops->cfgmgr_get_vdev_info(soc, soc_id, ev_buf);
3457  }
3458  
3459  /*
3460   * cdp_cfgmgr_get_peer_info - get peer info of a soc for dpdk
3461   * @soc: soc handle
3462   * @soc_id: soc id
3463   * @ev_buf: pointer to fill peer info
3464   *
3465   * Return: 0 if info filled successful, error otherwise
3466   */
3467  static inline
cdp_cfgmgr_get_peer_info(struct cdp_soc_t * soc,uint8_t soc_id,struct dpdk_wlan_peer_info * ev_buf)3468  int cdp_cfgmgr_get_peer_info(struct cdp_soc_t *soc, uint8_t soc_id,
3469  			     struct dpdk_wlan_peer_info *ev_buf)
3470  {
3471  	if (!soc) {
3472  		dp_cdp_debug("Invalid Instance");
3473  		return -EINVAL;
3474  	}
3475  
3476  	if (!soc->ops->cmn_drv_ops ||
3477  	    !soc->ops->cmn_drv_ops->cfgmgr_get_peer_info)
3478  		return -EINVAL;
3479  
3480  	return soc->ops->cmn_drv_ops->cfgmgr_get_peer_info(soc, soc_id, ev_buf);
3481  }
3482  
3483  /*
3484   * cdp_cfgmgr_get_vdev_create_evt_info - get vdev create info of a soc for dpdk
3485   * @soc: soc handle
3486   * @vdev_id: vdev id
3487   * @ev_buf: pointer to fill vdev info
3488   *
3489   * Return: 0 if info filled successful, error otherwise
3490   */
3491  static inline
cdp_cfgmgr_get_vdev_create_evt_info(struct cdp_soc_t * soc,uint8_t vdev_id,struct dpdk_wlan_vdev_create_info * ev_buf)3492  int cdp_cfgmgr_get_vdev_create_evt_info(struct cdp_soc_t *soc, uint8_t vdev_id,
3493  					struct dpdk_wlan_vdev_create_info *ev_buf)
3494  {
3495  	if (!soc) {
3496  		dp_cdp_debug("Invalid Instance");
3497  		return -EINVAL;
3498  	}
3499  
3500  	if (!soc->ops->cmn_drv_ops ||
3501  	    !soc->ops->cmn_drv_ops->cfgmgr_get_vdev_create_evt_info)
3502  		return -EINVAL;
3503  
3504  	return soc->ops->cmn_drv_ops->cfgmgr_get_vdev_create_evt_info(
3505  						soc, vdev_id, ev_buf);
3506  }
3507  
3508  /*
3509   * cdp_cfgmgr_get_peer_create_evt_info - get peer create info of a soc for dpdk
3510   * @soc: soc handle
3511   * @peer_id: peer id
3512   * @ev_buf: pointer to fill peer info
3513   *
3514   * Return: 0 if info filled successful, error otherwise
3515   */
3516  static inline
cdp_cfgmgr_get_peer_create_evt_info(struct cdp_soc_t * soc,uint16_t peer_id,struct dpdk_wlan_peer_create_info * ev_buf)3517  int cdp_cfgmgr_get_peer_create_evt_info(struct cdp_soc_t *soc, uint16_t peer_id,
3518  					struct dpdk_wlan_peer_create_info *ev_buf)
3519  {
3520  	if (!soc) {
3521  		dp_cdp_debug("Invalid Instance");
3522  		return -EINVAL;
3523  	}
3524  
3525  	if (!soc->ops->cmn_drv_ops ||
3526  	    !soc->ops->cmn_drv_ops->cfgmgr_get_peer_create_evt_info)
3527  		return -EINVAL;
3528  
3529  	return soc->ops->cmn_drv_ops->cfgmgr_get_peer_create_evt_info(
3530  						soc, peer_id, ev_buf);
3531  }
3532  #endif
3533  #endif /* _CDP_TXRX_CMN_H_ */
3534