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