xref: /wlan-dirver/qca-wifi-host-cmn/dp/wifi3.0/dp_rings.h (revision dd5f5c1afa4ab969b68717be955752f19527fb17)
1 /*
2  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 #ifndef _DP_RINGS_H_
21 #define _DP_RINGS_H_
22 
23 #include <dp_types.h>
24 #include <dp_internal.h>
25 #ifdef WIFI_MONITOR_SUPPORT
26 #include <dp_mon.h>
27 #endif
28 
29 #ifndef QCA_HOST_MODE_WIFI_DISABLED
30 
31 /**
32  * dp_srng_get_cpu() - Get the smp processor id for srng processing
33  *
34  * Return: smp processor id
35  */
36 static inline int dp_srng_get_cpu(void)
37 {
38 	return smp_processor_id();
39 }
40 
41 #else /* QCA_HOST_MODE_WIFI_DISABLED */
42 
43 /**
44  * dp_srng_get_cpu() - Get the smp processor id for srng processing
45  *
46  * Return: smp processor id
47  */
48 static inline int dp_srng_get_cpu(void)
49 {
50 	return 0;
51 }
52 
53 #endif /* QCA_HOST_MODE_WIFI_DISABLED */
54 
55 /**
56  * dp_interrupt_timer() - timer poll for interrupts
57  * @arg: SoC Handle
58  *
59  * Return:
60  *
61  */
62 void dp_interrupt_timer(void *arg);
63 
64 /**
65  * dp_soc_print_inactive_objects() - prints inactive peer and vdev list
66  * @soc: DP SOC handle
67  *
68  */
69 void dp_soc_print_inactive_objects(struct dp_soc *soc);
70 
71 /**
72  * dp_get_tx_pending() - read pending tx
73  * @pdev_handle: Datapath PDEV handle
74  *
75  * Return: outstanding tx
76  */
77 int32_t dp_get_tx_pending(struct cdp_pdev *pdev_handle);
78 
79 /**
80  * dp_find_missing_tx_comp() - check for leaked descriptor in tx path
81  * @soc: DP SOC context
82  *
83  * Parse through descriptors in all pools and validate magic number and
84  * completion time. Trigger self recovery if magic value is corrupted.
85  *
86  * Return: None.
87  */
88 void dp_find_missing_tx_comp(struct dp_soc *soc);
89 
90 void dp_enable_verbose_debug(struct dp_soc *soc);
91 
92 QDF_STATUS dp_peer_legacy_setup(struct dp_soc *soc, struct dp_peer *peer);
93 
94 #ifndef WLAN_SOFTUMAC_SUPPORT
95 
96 /**
97  * dp_service_lmac_rings()- timer to reap lmac rings
98  * @arg: SoC Handle
99  *
100  * Return:
101  *
102  */
103 void dp_service_lmac_rings(void *arg);
104 
105 /**
106  * dp_service_srngs() - Top level interrupt handler for DP Ring interrupts
107  * @dp_ctx: DP SOC handle
108  * @dp_budget: Number of frames/descriptors that can be processed in one shot
109  * @cpu: CPU on which this instance is running
110  *
111  * Return: remaining budget/quota for the soc device
112  */
113 uint32_t dp_service_srngs(void *dp_ctx, uint32_t dp_budget, int cpu);
114 
115 /**
116  * dp_soc_attach_poll() - Register handlers for DP interrupts
117  * @txrx_soc: DP SOC handle
118  *
119  * Host driver will register for “DP_NUM_INTERRUPT_CONTEXTS” number of NAPI
120  * contexts. Each NAPI context will have a tx_ring_mask , rx_ring_mask ,and
121  * rx_monitor_ring mask to indicate the rings that are processed by the handler.
122  *
123  * Return: 0 for success, nonzero for failure.
124  */
125 QDF_STATUS dp_soc_attach_poll(struct cdp_soc_t *txrx_soc);
126 
127 /**
128  * dp_soc_interrupt_attach() - Register handlers for DP interrupts
129  * @txrx_soc: DP SOC handle
130  *
131  * Host driver will register for “DP_NUM_INTERRUPT_CONTEXTS” number of NAPI
132  * contexts. Each NAPI context will have a tx_ring_mask , rx_ring_mask ,and
133  * rx_monitor_ring mask to indicate the rings that are processed by the handler.
134  *
135  * Return: 0 for success. nonzero for failure.
136  */
137 QDF_STATUS dp_soc_interrupt_attach(struct cdp_soc_t *txrx_soc);
138 
139 /**
140  * dp_hw_link_desc_ring_free() - Free h/w link desc rings
141  * @soc: DP SOC handle
142  *
143  * Return: none
144  */
145 void dp_hw_link_desc_ring_free(struct dp_soc *soc);
146 
147 /**
148  * dp_hw_link_desc_ring_alloc() - Allocate hw link desc rings
149  * @soc: DP SOC handle
150  *
151  * Allocate memory for WBM_IDLE_LINK srng ring if the number of
152  * link descriptors is less then the max_allocated size. else
153  * allocate memory for wbm_idle_scatter_buffer.
154  *
155  * Return: QDF_STATUS_SUCCESS: success
156  *         QDF_STATUS_E_NO_MEM: No memory (Failure)
157  */
158 QDF_STATUS dp_hw_link_desc_ring_alloc(struct dp_soc *soc);
159 
160 /**
161  * dp_hw_link_desc_ring_init() - Initialize hw link desc rings
162  * @soc: DP SOC handle
163  *
164  * Return: QDF_STATUS_SUCCESS: success
165  *         QDF_STATUS_E_FAILURE: failure
166  */
167 QDF_STATUS dp_hw_link_desc_ring_init(struct dp_soc *soc);
168 
169 /**
170  * dp_hw_link_desc_ring_deinit() - Reset hw link desc rings
171  * @soc: DP SOC handle
172  *
173  * Return: None
174  */
175 void dp_hw_link_desc_ring_deinit(struct dp_soc *soc);
176 
177 /**
178  * dp_ipa_hal_tx_init_alt_data_ring() - IPA hal init data rings
179  * @soc: DP SOC handle
180  *
181  * Return: None
182  */
183 void dp_ipa_hal_tx_init_alt_data_ring(struct dp_soc *soc);
184 
185 /*
186  * dp_soc_reset_ring_map() - Reset cpu ring map
187  * @soc: Datapath soc handler
188  *
189  * This api resets the default cpu ring map
190  */
191 void dp_soc_reset_cpu_ring_map(struct dp_soc *soc);
192 
193 /*
194  * dp_soc_reset_ipa_vlan_intr_mask() - reset interrupt mask for IPA offloaded
195  * ring for vlan tagged traffic
196  * @dp_soc - DP Soc handle
197  *
198  * Return: Return void
199  */
200 void dp_soc_reset_ipa_vlan_intr_mask(struct dp_soc *soc);
201 
202 /*
203  * dp_soc_reset_intr_mask() - reset interrupt mask
204  * @dp_soc - DP Soc handle
205  *
206  * Return: Return void
207  */
208 void dp_soc_reset_intr_mask(struct dp_soc *soc);
209 
210 /*
211  * dp_reo_frag_dst_set() - configure reo register to set the
212  *                        fragment destination ring
213  * @soc : Datapath soc
214  * @frag_dst_ring : output parameter to set fragment destination ring
215  *
216  * Based on offload_radio below fragment destination rings is selected
217  * 0 - TCL
218  * 1 - SW1
219  * 2 - SW2
220  * 3 - SW3
221  * 4 - SW4
222  * 5 - Release
223  * 6 - FW
224  * 7 - alternate select
225  *
226  * return: void
227  */
228 void dp_reo_frag_dst_set(struct dp_soc *soc, uint8_t *frag_dst_ring);
229 
230 /**
231  * dp_dscp_tid_map_setup(): Initialize the dscp-tid maps
232  * @pdev:  DP_PDEV handle
233  *
234  * Return: void
235  */
236 void
237 dp_dscp_tid_map_setup(struct dp_pdev *pdev);
238 
239 /**
240  * dp_pcp_tid_map_setup(): Initialize the pcp-tid maps
241  * @pdev: DP_PDEV handle
242  *
243  * Return: void
244  */
245 void
246 dp_pcp_tid_map_setup(struct dp_pdev *pdev);
247 
248 /**
249  * dp_soc_deinit() - Deinitialize txrx SOC
250  * @txrx_soc: Opaque DP SOC handle
251  *
252  * Return: None
253  */
254 void dp_soc_deinit(void *txrx_soc);
255 
256 #ifdef QCA_HOST2FW_RXBUF_RING
257 void
258 dp_htt_setup_rxdma_err_dst_ring(struct dp_soc *soc, int mac_id,
259 				int lmac_id);
260 #endif
261 
262 /*
263  * dp_peer_setup_wifi3() - initialize the peer
264  * @soc_hdl: soc handle object
265  * @vdev_id : vdev_id of vdev object
266  * @peer_mac: Peer's mac address
267  * @peer_setup_info: peer setup info for MLO
268  *
269  * Return: QDF_STATUS
270  */
271 QDF_STATUS
272 dp_peer_setup_wifi3(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
273 		    uint8_t *peer_mac,
274 		    struct cdp_peer_setup_info *setup_info);
275 
276 uint32_t dp_get_tx_rings_grp_bitmap(struct cdp_soc_t *soc_hdl);
277 
278 /*
279  * dp_set_ba_aging_timeout() - set ba aging timeout per AC
280  * @txrx_soc: cdp soc handle
281  * @ac: Access category
282  * @value: timeout value in millisec
283  *
284  * Return: void
285  */
286 void dp_set_ba_aging_timeout(struct cdp_soc_t *txrx_soc,
287 			     uint8_t ac, uint32_t value);
288 
289 /*
290  * dp_get_ba_aging_timeout() - get ba aging timeout per AC
291  * @txrx_soc: cdp soc handle
292  * @ac: access category
293  * @value: timeout value in millisec
294  *
295  * Return: void
296  */
297 void dp_get_ba_aging_timeout(struct cdp_soc_t *txrx_soc,
298 			     uint8_t ac, uint32_t *value);
299 
300 /*
301  * dp_set_pdev_reo_dest() - set the reo destination ring for this pdev
302  * @txrx_soc: cdp soc handle
303  * @pdev_id: id of physical device object
304  * @val: reo destination ring index (1 - 4)
305  *
306  * Return: QDF_STATUS
307  */
308 QDF_STATUS
309 dp_set_pdev_reo_dest(struct cdp_soc_t *txrx_soc, uint8_t pdev_id,
310 		     enum cdp_host_reo_dest_ring val);
311 
312 /*
313  * dp_get_pdev_reo_dest() - get the reo destination for this pdev
314  * @txrx_soc: cdp soc handle
315  * @pdev_id: id of physical device object
316  *
317  * Return: reo destination ring index
318  */
319 enum cdp_host_reo_dest_ring
320 dp_get_pdev_reo_dest(struct cdp_soc_t *txrx_soc, uint8_t pdev_id);
321 
322 /**
323  * dp_set_pdev_pcp_tid_map_wifi3(): update pcp tid map in pdev
324  * @psoc: dp soc handle
325  * @pdev_id: id of DP_PDEV handle
326  * @pcp: pcp value
327  * @tid: tid value passed by the user
328  *
329  * Return: QDF_STATUS_SUCCESS on success
330  */
331 QDF_STATUS dp_set_pdev_pcp_tid_map_wifi3(ol_txrx_soc_handle psoc,
332 					 uint8_t pdev_id,
333 					 uint8_t pcp, uint8_t tid);
334 
335 /**
336  * dp_set_vdev_pcp_tid_map_wifi3(): update pcp tid map in vdev
337  * @soc_hdl: DP soc handle
338  * @vdev_id: id of DP_VDEV handle
339  * @pcp: pcp value
340  * @tid: tid value passed by the user
341  *
342  * Return: QDF_STATUS_SUCCESS on success
343  */
344 QDF_STATUS dp_set_vdev_pcp_tid_map_wifi3(struct cdp_soc_t *soc_hdl,
345 					 uint8_t vdev_id,
346 					 uint8_t pcp, uint8_t tid);
347 
348 /* *
349  * dp_dump_wbm_idle_hptp() -dump wbm idle ring, hw hp tp info.
350  * @soc: dp soc.
351  * @pdev: dp pdev.
352  *
353  * Return: None.
354  */
355 void
356 dp_dump_wbm_idle_hptp(struct dp_soc *soc, struct dp_pdev *pdev);
357 
358 /**
359  * dp_display_srng_info() - Dump the srng HP TP info
360  * @soc_hdl: CDP Soc handle
361  *
362  * This function dumps the SW hp/tp values for the important rings.
363  * HW hp/tp values are not being dumped, since it can lead to
364  * READ NOC error when UMAC is in low power state. MCC does not have
365  * device force wake working yet.
366  *
367  * Return: none
368  */
369 void dp_display_srng_info(struct cdp_soc_t *soc_hdl);
370 
371 #if defined(DP_POWER_SAVE) || defined(FEATURE_RUNTIME_PM)
372 void dp_drain_txrx(struct cdp_soc_t *soc_handle);
373 
374 /*
375  * dp_update_ring_hptp() - update dp rings hptp
376  * @soc: dp soc handler
377  * @force_flush_tx: force flush the Tx ring hp
378  */
379 void dp_update_ring_hptp(struct dp_soc *soc, bool force_flush_tx);
380 #endif
381 
382 #ifdef WLAN_FEATURE_STATS_EXT
383 /**
384  * dp_request_rx_hw_stats - request rx hardware stats
385  * @soc_hdl: soc handle
386  * @vdev_id: vdev id
387  *
388  * Return: None
389  */
390 QDF_STATUS
391 dp_request_rx_hw_stats(struct cdp_soc_t *soc_hdl, uint8_t vdev_id);
392 #endif
393 
394 /**
395  * dp_reset_rx_hw_ext_stats - Reset rx hardware ext stats
396  * @soc_hdl: soc handle
397  *
398  * Return: None
399  */
400 void dp_reset_rx_hw_ext_stats(struct cdp_soc_t *soc_hdl);
401 
402 void dp_pdev_set_default_reo(struct dp_pdev *pdev);
403 
404 /**
405  * dp_soc_init() - Initialize txrx SOC
406  * @soc: Opaque DP SOC handle
407  * @htc_handle: Opaque HTC handle
408  * @hif_handle: Opaque HIF handle
409  *
410  * Return: DP SOC handle on success, NULL on failure
411  */
412 void *dp_soc_init(struct dp_soc *soc, HTC_HANDLE htc_handle,
413 		  struct hif_opaque_softc *hif_handle);
414 
415 void dp_tx_init_cmd_credit_ring(struct dp_soc *soc);
416 
417 /**
418  * dp_soc_srng_deinit() - de-initialize soc srng rings
419  * @soc: Datapath soc handle
420  *
421  */
422 void dp_soc_srng_deinit(struct dp_soc *soc);
423 
424 /**
425  * dp_soc_srng_init() - Initialize soc level srng rings
426  * @soc: Datapath soc handle
427  *
428  * return: QDF_STATUS_SUCCESS on success
429  *	   QDF_STATUS_E_FAILURE on failure
430  */
431 QDF_STATUS dp_soc_srng_init(struct dp_soc *soc);
432 
433 /**
434  * dp_soc_srng_free() - free soc level srng rings
435  * @soc: Datapath soc handle
436  *
437  */
438 void dp_soc_srng_free(struct dp_soc *soc);
439 
440 /**
441  * dp_soc_srng_alloc() - Allocate memory for soc level srng rings
442  * @soc: Datapath soc handle
443  *
444  * return: QDF_STATUS_SUCCESS on success
445  *	   QDF_STATUS_E_NOMEM on failure
446  */
447 QDF_STATUS dp_soc_srng_alloc(struct dp_soc *soc);
448 
449 /**
450  * dp_soc_cfg_attach() - set target specific configuration in
451  *			 dp soc cfg.
452  * @soc: dp soc handle
453  */
454 void dp_soc_cfg_attach(struct dp_soc *soc);
455 
456 /**
457  * dp_soc_set_interrupt_mode() - Set the interrupt mode in soc
458  * @soc: DP soc handle
459  *
460  * Set the appropriate interrupt mode flag in the soc
461  */
462 void dp_soc_set_interrupt_mode(struct dp_soc *soc);
463 
464 #else /* WLAN_SOFTUMAC_SUPPORT */
465 static inline void dp_service_lmac_rings(void *arg)
466 {
467 }
468 
469 static inline
470 uint32_t dp_service_srngs(void *dp_ctx, uint32_t dp_budget, int cpu)
471 {
472 	return 0;
473 }
474 
475 static inline void dp_soc_interrupt_detach(struct cdp_soc_t *txrx_soc)
476 {
477 	struct dp_soc *soc = (struct dp_soc *)txrx_soc;
478 
479 	if (soc->intr_mode == DP_INTR_POLL)
480 		qdf_timer_free(&soc->int_timer);
481 
482 	qdf_mem_set(&soc->mon_intr_id_lmac_map,
483 		    sizeof(soc->mon_intr_id_lmac_map),
484 		    DP_MON_INVALID_LMAC_ID);
485 }
486 
487 /*
488  * dp_soc_interrupt_attach() - Register handlers for DP interrupts
489  * @txrx_soc: DP SOC handle
490  *
491  * Host driver will register for “DP_NUM_INTERRUPT_CONTEXTS” number of NAPI
492  * contexts. Each NAPI context will have a tx_ring_mask , rx_ring_mask ,and
493  * rx_monitor_ring mask to indicate the rings that are processed by the handler.
494  *
495  * Return: 0 for success. nonzero for failure.
496  */
497 static inline QDF_STATUS dp_soc_interrupt_attach(struct cdp_soc_t *txrx_soc)
498 {
499 	struct dp_soc *soc = (struct dp_soc *)txrx_soc;
500 
501 	qdf_mem_set(&soc->mon_intr_id_lmac_map,
502 		    sizeof(soc->mon_intr_id_lmac_map),
503 		    DP_MON_INVALID_LMAC_ID);
504 
505 	return QDF_STATUS_SUCCESS;
506 }
507 
508 static inline void dp_hw_link_desc_ring_free(struct dp_soc *soc)
509 {
510 }
511 
512 static inline QDF_STATUS dp_hw_link_desc_ring_alloc(struct dp_soc *soc)
513 {
514 	return QDF_STATUS_SUCCESS;
515 }
516 
517 static inline QDF_STATUS dp_hw_link_desc_ring_init(struct dp_soc *soc)
518 {
519 	return QDF_STATUS_SUCCESS;
520 }
521 
522 static inline void dp_hw_link_desc_ring_deinit(struct dp_soc *soc)
523 {
524 }
525 
526 static inline void dp_ipa_hal_tx_init_alt_data_ring(struct dp_soc *soc)
527 {
528 }
529 
530 static inline void dp_soc_reset_cpu_ring_map(struct dp_soc *soc)
531 {
532 }
533 
534 static inline void dp_soc_reset_ipa_vlan_intr_mask(struct dp_soc *soc)
535 {
536 }
537 
538 static inline void dp_soc_reset_intr_mask(struct dp_soc *soc)
539 {
540 }
541 
542 static inline
543 void dp_reo_frag_dst_set(struct dp_soc *soc, uint8_t *frag_dst_ring)
544 {
545 }
546 
547 /**
548  * dp_dscp_tid_map_setup(): Initialize the dscp-tid maps
549  * @pdev: DP_PDEV handle
550  *
551  * Return: void
552  */
553 static inline void
554 dp_dscp_tid_map_setup(struct dp_pdev *pdev)
555 {
556 }
557 
558 /**
559  * dp_pcp_tid_map_setup(): Initialize the pcp-tid maps
560  * @pdev: DP_PDEV handle
561  *
562  * Return: void
563  */
564 static inline void
565 dp_pcp_tid_map_setup(struct dp_pdev *pdev)
566 {
567 }
568 
569 #ifdef QCA_HOST2FW_RXBUF_RING
570 static inline void
571 dp_htt_setup_rxdma_err_dst_ring(struct dp_soc *soc, int mac_id,
572 				int lmac_id)
573 {
574 }
575 #endif
576 
577 /* *
578  * dp_dump_wbm_idle_hptp() -dump wbm idle ring, hw hp tp info.
579  * @soc: dp soc.
580  * @pdev: dp pdev.
581  *
582  * Return: None.
583  */
584 static inline void
585 dp_dump_wbm_idle_hptp(struct dp_soc *soc, struct dp_pdev *pdev)
586 {
587 }
588 
589 static inline void dp_pdev_set_default_reo(struct dp_pdev *pdev)
590 {
591 }
592 
593 static inline void dp_tx_init_cmd_credit_ring(struct dp_soc *soc)
594 {
595 }
596 
597 /**
598  * dp_soc_srng_deinit() - de-initialize soc srng rings
599  * @soc: Datapath soc handle
600  *
601  */
602 static inline void dp_soc_srng_deinit(struct dp_soc *soc)
603 {
604 }
605 
606 /**
607  * dp_soc_srng_init() - Initialize soc level srng rings
608  * @soc: Datapath soc handle
609  *
610  * return: QDF_STATUS_SUCCESS on success
611  *	   QDF_STATUS_E_FAILURE on failure
612  */
613 static inline QDF_STATUS dp_soc_srng_init(struct dp_soc *soc)
614 {
615 	dp_enable_verbose_debug(soc);
616 
617 	return QDF_STATUS_SUCCESS;
618 }
619 
620 /**
621  * dp_soc_srng_free() - free soc level srng rings
622  * @soc: Datapath soc handle
623  *
624  */
625 static inline void dp_soc_srng_free(struct dp_soc *soc)
626 {
627 }
628 
629 /**
630  * dp_soc_srng_alloc() - Allocate memory for soc level srng rings
631  * @soc: Datapath soc handle
632  *
633  * return: QDF_STATUS_SUCCESS on success
634  *	   QDF_STATUS_E_NOMEM on failure
635  */
636 static inline QDF_STATUS dp_soc_srng_alloc(struct dp_soc *soc)
637 {
638 	return QDF_STATUS_SUCCESS;
639 }
640 
641 /*
642  * dp_soc_attach_poll() - Register handlers for DP interrupts
643  * @txrx_soc: DP SOC handle
644  *
645  * Host driver will register for “DP_NUM_INTERRUPT_CONTEXTS” number of NAPI
646  * contexts. Each NAPI context will have a tx_ring_mask , rx_ring_mask ,and
647  * rx_monitor_ring mask to indicate the rings that are processed by the handler.
648  *
649  * Return: 0 for success, nonzero for failure.
650  */
651 static inline QDF_STATUS dp_soc_attach_poll(struct cdp_soc_t *txrx_soc)
652 {
653 	struct dp_soc *soc = (struct dp_soc *)txrx_soc;
654 
655 	qdf_mem_set(&soc->mon_intr_id_lmac_map,
656 		    sizeof(soc->mon_intr_id_lmac_map), DP_MON_INVALID_LMAC_ID);
657 	soc->intr_mode = DP_INTR_POLL;
658 
659 	qdf_timer_init(soc->osdev, &soc->int_timer,
660 		       dp_interrupt_timer, (void *)soc,
661 		       QDF_TIMER_TYPE_WAKE_APPS);
662 
663 	return QDF_STATUS_SUCCESS;
664 }
665 
666 static inline void dp_soc_set_interrupt_mode(struct dp_soc *soc)
667 {
668 	soc->intr_mode = DP_INTR_INTEGRATED;
669 
670 	if (!(soc->wlan_cfg_ctx->napi_enabled) ||
671 	    (dp_is_monitor_mode_using_poll(soc) &&
672 	     soc->cdp_soc.ol_ops->get_con_mode &&
673 	     soc->cdp_soc.ol_ops->get_con_mode() == QDF_GLOBAL_MONITOR_MODE)) {
674 		soc->intr_mode = DP_INTR_POLL;
675 	} else {
676 		soc->intr_mode = DP_INTR_MSI;
677 	}
678 }
679 
680 /**
681  * dp_display_srng_info() - Dump the ring Read/Write idx info
682  * @soc_hdl: CDP Soc handle
683  *
684  * This function dumps the SW Read/Write idx for the important rings.
685  *
686  * Return: none
687  */
688 static inline void dp_display_srng_info(struct cdp_soc_t *soc_hdl)
689 {
690 /*TODO add support display SOFTUMAC data rings info*/
691 }
692 
693 #if defined(DP_POWER_SAVE) || defined(FEATURE_RUNTIME_PM)
694 static inline void dp_drain_txrx(struct cdp_soc_t *soc_handle)
695 {
696 }
697 #endif
698 #endif /* WLAN_SOFTUMAC_SUPPORT */
699 
700 #endif /* _DP_RINGS_H_ */
701