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