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