xref: /wlan-driver/qca-wifi-host-cmn/dp/wifi3.0/be/dp_be_tx.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name #ifndef __DP_BE_TX_H
20*5113495bSYour Name #define __DP_BE_TX_H
21*5113495bSYour Name /**
22*5113495bSYour Name  *  DOC: dp_be_tx.h
23*5113495bSYour Name  *
24*5113495bSYour Name  * BE specific TX Datapath header file. Need not be exposed to common DP code.
25*5113495bSYour Name  *
26*5113495bSYour Name  */
27*5113495bSYour Name 
28*5113495bSYour Name #include <dp_types.h>
29*5113495bSYour Name #include "dp_be.h"
30*5113495bSYour Name 
31*5113495bSYour Name struct __attribute__((__packed__)) dp_tx_comp_peer_id {
32*5113495bSYour Name 	uint16_t peer_id:13,
33*5113495bSYour Name 		 ml_peer_valid:1,
34*5113495bSYour Name 		 reserved:2;
35*5113495bSYour Name };
36*5113495bSYour Name 
37*5113495bSYour Name /* Invalid TX Bank ID value */
38*5113495bSYour Name #define DP_BE_INVALID_BANK_ID -1
39*5113495bSYour Name 
40*5113495bSYour Name /* Extraction of msdu queue information from per packet sawf metadata */
41*5113495bSYour Name #define DP_TX_HLOS_TID_GET(_var) \
42*5113495bSYour Name 	(((_var) & 0x0e) >> 1)
43*5113495bSYour Name #define DP_TX_FLOW_OVERRIDE_GET(_var) \
44*5113495bSYour Name 	((_var >> 3) & 0x1)
45*5113495bSYour Name #define DP_TX_WHO_CLFY_INF_SEL_GET(_var) \
46*5113495bSYour Name 	(((_var) & 0x30) >> 4)
47*5113495bSYour Name #define DP_TX_FLOW_OVERRIDE_ENABLE 0x1
48*5113495bSYour Name 
49*5113495bSYour Name #define DP_TX_FAST_DESC_SIZE	28
50*5113495bSYour Name #define DP_TX_L3_L4_CSUM_ENABLE	0x1f
51*5113495bSYour Name 
52*5113495bSYour Name #ifdef DP_USE_REDUCED_PEER_ID_FIELD_WIDTH
53*5113495bSYour Name static inline uint16_t
dp_tx_comp_adjust_peer_id_be(struct dp_soc * soc,uint16_t peer_id)54*5113495bSYour Name dp_tx_comp_adjust_peer_id_be(struct dp_soc *soc, uint16_t peer_id)
55*5113495bSYour Name {
56*5113495bSYour Name 	struct dp_tx_comp_peer_id *tx_peer_id =
57*5113495bSYour Name 		(struct dp_tx_comp_peer_id *)&peer_id;
58*5113495bSYour Name 
59*5113495bSYour Name 	return (tx_peer_id->peer_id |
60*5113495bSYour Name 		(tx_peer_id->ml_peer_valid << soc->peer_id_shift));
61*5113495bSYour Name }
62*5113495bSYour Name /**
63*5113495bSYour Name  * dp_tx_comp_get_peer_id_be() - Get peer ID from TX Comp Desc
64*5113495bSYour Name  * @soc: Handle to DP Soc structure
65*5113495bSYour Name  * @tx_comp_hal_desc: TX comp ring descriptor
66*5113495bSYour Name  *
67*5113495bSYour Name  * Return: Peer ID
68*5113495bSYour Name  */
dp_tx_comp_get_peer_id_be(struct dp_soc * soc,void * tx_comp_hal_desc)69*5113495bSYour Name static inline uint16_t dp_tx_comp_get_peer_id_be(struct dp_soc *soc,
70*5113495bSYour Name 						 void *tx_comp_hal_desc)
71*5113495bSYour Name {
72*5113495bSYour Name 	uint16_t peer_id = hal_tx_comp_get_peer_id(tx_comp_hal_desc);
73*5113495bSYour Name 
74*5113495bSYour Name 	return dp_tx_comp_adjust_peer_id_be(soc, peer_id);
75*5113495bSYour Name }
76*5113495bSYour Name #else
77*5113495bSYour Name static inline uint16_t
dp_tx_comp_adjust_peer_id_be(struct dp_soc * soc,uint16_t peer_id)78*5113495bSYour Name dp_tx_comp_adjust_peer_id_be(struct dp_soc *soc, uint16_t peer_id)
79*5113495bSYour Name {
80*5113495bSYour Name 	return peer_id;
81*5113495bSYour Name }
dp_tx_comp_get_peer_id_be(struct dp_soc * soc,void * tx_comp_hal_desc)82*5113495bSYour Name static inline uint16_t dp_tx_comp_get_peer_id_be(struct dp_soc *soc,
83*5113495bSYour Name 						 void *tx_comp_hal_desc)
84*5113495bSYour Name {
85*5113495bSYour Name 	return hal_tx_comp_get_peer_id(tx_comp_hal_desc);
86*5113495bSYour Name 
87*5113495bSYour Name }
88*5113495bSYour Name #endif
89*5113495bSYour Name 
90*5113495bSYour Name /**
91*5113495bSYour Name  * dp_tx_hw_enqueue_be() - Enqueue to TCL HW for transmit for BE target
92*5113495bSYour Name  * @soc: DP Soc Handle
93*5113495bSYour Name  * @vdev: DP vdev handle
94*5113495bSYour Name  * @tx_desc: Tx Descriptor Handle
95*5113495bSYour Name  * @fw_metadata: Metadata to send to Target Firmware along with frame
96*5113495bSYour Name  * @metadata: Handle that holds exception path meta data
97*5113495bSYour Name  * @msdu_info: msdu_info containing information about TX buffer
98*5113495bSYour Name  *
99*5113495bSYour Name  *  Gets the next free TCL HW DMA descriptor and sets up required parameters
100*5113495bSYour Name  *  from software Tx descriptor
101*5113495bSYour Name  *
102*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS: success
103*5113495bSYour Name  *         QDF_STATUS_E_RESOURCES: Error return
104*5113495bSYour Name  */
105*5113495bSYour Name QDF_STATUS dp_tx_hw_enqueue_be(struct dp_soc *soc, struct dp_vdev *vdev,
106*5113495bSYour Name 			       struct dp_tx_desc_s *tx_desc,
107*5113495bSYour Name 				uint16_t fw_metadata,
108*5113495bSYour Name 				struct cdp_tx_exception_metadata *metadata,
109*5113495bSYour Name 				struct dp_tx_msdu_info_s *msdu_info);
110*5113495bSYour Name 
111*5113495bSYour Name #ifdef QCA_DP_TX_NBUF_LIST_FREE
112*5113495bSYour Name /**
113*5113495bSYour Name  * dp_tx_fast_send_be() - Transmit a frame on a given VAP
114*5113495bSYour Name  * @soc_hdl: DP soc handle
115*5113495bSYour Name  * @vdev_id: id of DP vdev handle
116*5113495bSYour Name  * @nbuf: skb
117*5113495bSYour Name  *
118*5113495bSYour Name  * Entry point for Core Tx layer (DP_TX) invoked from
119*5113495bSYour Name  * hard_start_xmit in OSIF/HDD or from dp_rx_process for intravap forwarding
120*5113495bSYour Name  * cases
121*5113495bSYour Name  *
122*5113495bSYour Name  * Return: NULL on success,
123*5113495bSYour Name  *         nbuf when it fails to send
124*5113495bSYour Name  */
125*5113495bSYour Name qdf_nbuf_t dp_tx_fast_send_be(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
126*5113495bSYour Name 			      qdf_nbuf_t nbuf);
127*5113495bSYour Name #else
dp_tx_fast_send_be(struct cdp_soc_t * soc,uint8_t vdev_id,qdf_nbuf_t nbuf)128*5113495bSYour Name static inline qdf_nbuf_t dp_tx_fast_send_be(struct cdp_soc_t *soc, uint8_t vdev_id,
129*5113495bSYour Name 					    qdf_nbuf_t nbuf)
130*5113495bSYour Name {
131*5113495bSYour Name 	return NULL;
132*5113495bSYour Name }
133*5113495bSYour Name #endif
134*5113495bSYour Name 
135*5113495bSYour Name /**
136*5113495bSYour Name  * dp_tx_comp_get_params_from_hal_desc_be() - Get TX desc from HAL comp desc
137*5113495bSYour Name  * @soc: DP soc handle
138*5113495bSYour Name  * @tx_comp_hal_desc: HAL TX Comp Descriptor
139*5113495bSYour Name  * @r_tx_desc: SW Tx Descriptor retrieved from HAL desc.
140*5113495bSYour Name  *
141*5113495bSYour Name  * Return: QDF_STATUS
142*5113495bSYour Name  */
143*5113495bSYour Name QDF_STATUS
144*5113495bSYour Name dp_tx_comp_get_params_from_hal_desc_be(struct dp_soc *soc,
145*5113495bSYour Name 				       void *tx_comp_hal_desc,
146*5113495bSYour Name 				       struct dp_tx_desc_s **r_tx_desc);
147*5113495bSYour Name 
148*5113495bSYour Name /**
149*5113495bSYour Name  * dp_tx_process_htt_completion_be() - Tx HTT Completion Indication Handler
150*5113495bSYour Name  * @soc: Handle to DP soc structure
151*5113495bSYour Name  * @tx_desc: software descriptor head pointer
152*5113495bSYour Name  * @status: Tx completion status from HTT descriptor
153*5113495bSYour Name  * @ring_id: ring number
154*5113495bSYour Name  *
155*5113495bSYour Name  * This function will process HTT Tx indication messages from Target
156*5113495bSYour Name  *
157*5113495bSYour Name  * Return: none
158*5113495bSYour Name  */
159*5113495bSYour Name void dp_tx_process_htt_completion_be(struct dp_soc *soc,
160*5113495bSYour Name 				     struct dp_tx_desc_s *tx_desc,
161*5113495bSYour Name 				     uint8_t *status,
162*5113495bSYour Name 				     uint8_t ring_id);
163*5113495bSYour Name 
164*5113495bSYour Name /**
165*5113495bSYour Name  * dp_tx_init_bank_profiles() - Init TX bank profiles
166*5113495bSYour Name  * @soc: DP soc handle
167*5113495bSYour Name  *
168*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS or QDF error code.
169*5113495bSYour Name  */
170*5113495bSYour Name QDF_STATUS dp_tx_init_bank_profiles(struct dp_soc_be *soc);
171*5113495bSYour Name 
172*5113495bSYour Name /**
173*5113495bSYour Name  * dp_tx_deinit_bank_profiles() - De-Init TX bank profiles
174*5113495bSYour Name  * @soc: DP soc handle
175*5113495bSYour Name  *
176*5113495bSYour Name  * Return: None
177*5113495bSYour Name  */
178*5113495bSYour Name void dp_tx_deinit_bank_profiles(struct dp_soc_be *soc);
179*5113495bSYour Name 
180*5113495bSYour Name /**
181*5113495bSYour Name  * dp_tx_get_bank_profile() - get TX bank profile for vdev
182*5113495bSYour Name  * @soc: DP soc handle
183*5113495bSYour Name  * @be_vdev: BE vdev pointer
184*5113495bSYour Name  *
185*5113495bSYour Name  * Return: bank profile allocated to vdev or DP_BE_INVALID_BANK_ID
186*5113495bSYour Name  */
187*5113495bSYour Name int dp_tx_get_bank_profile(struct dp_soc_be *soc,
188*5113495bSYour Name 			   struct dp_vdev_be *be_vdev);
189*5113495bSYour Name 
190*5113495bSYour Name /**
191*5113495bSYour Name  * dp_tx_put_bank_profile() - release TX bank profile for vdev
192*5113495bSYour Name  * @soc: DP soc handle
193*5113495bSYour Name  * @be_vdev: pointer to be_vdev structure
194*5113495bSYour Name  *
195*5113495bSYour Name  * Return: None
196*5113495bSYour Name  */
197*5113495bSYour Name void dp_tx_put_bank_profile(struct dp_soc_be *soc, struct dp_vdev_be *be_vdev);
198*5113495bSYour Name 
199*5113495bSYour Name /**
200*5113495bSYour Name  * dp_tx_update_bank_profile() - release existing and allocate new bank profile
201*5113495bSYour Name  * @be_soc: DP soc handle
202*5113495bSYour Name  * @be_vdev: pointer to be_vdev structure
203*5113495bSYour Name  *
204*5113495bSYour Name  * The function releases the existing bank profile allocated to the vdev and
205*5113495bSYour Name  * looks for a new bank profile based on updated dp_vdev TX params.
206*5113495bSYour Name  *
207*5113495bSYour Name  * Return: None
208*5113495bSYour Name  */
209*5113495bSYour Name void dp_tx_update_bank_profile(struct dp_soc_be *be_soc,
210*5113495bSYour Name 			       struct dp_vdev_be *be_vdev);
211*5113495bSYour Name 
212*5113495bSYour Name /**
213*5113495bSYour Name  * dp_tx_desc_pool_init_be() - Initialize Tx Descriptor pool(s)
214*5113495bSYour Name  * @soc: Handle to DP Soc structure
215*5113495bSYour Name  * @num_elem: number of descriptor in pool
216*5113495bSYour Name  * @pool_id: pool ID to allocate
217*5113495bSYour Name  * @spcl_tx_desc: if special desc
218*5113495bSYour Name  *
219*5113495bSYour Name  * Return: QDF_STATUS_SUCCESS - success, others - failure
220*5113495bSYour Name  */
221*5113495bSYour Name QDF_STATUS dp_tx_desc_pool_init_be(struct dp_soc *soc,
222*5113495bSYour Name 				   uint32_t num_elem,
223*5113495bSYour Name 				   uint8_t pool_id,
224*5113495bSYour Name 				   bool spcl_tx_desc);
225*5113495bSYour Name /**
226*5113495bSYour Name  * dp_tx_desc_pool_deinit_be() - De-initialize Tx Descriptor pool(s)
227*5113495bSYour Name  * @soc: Handle to DP Soc structure
228*5113495bSYour Name  * @tx_desc_pool: Tx descriptor pool handler
229*5113495bSYour Name  * @pool_id: pool ID to deinit
230*5113495bSYour Name  * @spcl_tx_desc: if special desc
231*5113495bSYour Name  *
232*5113495bSYour Name  * Return: None
233*5113495bSYour Name  */
234*5113495bSYour Name void dp_tx_desc_pool_deinit_be(struct dp_soc *soc,
235*5113495bSYour Name 			       struct dp_tx_desc_pool_s *tx_desc_pool,
236*5113495bSYour Name 			       uint8_t pool_id, bool spcl_tx_desc);
237*5113495bSYour Name 
238*5113495bSYour Name #ifdef WLAN_SUPPORT_PPEDS
239*5113495bSYour Name /**
240*5113495bSYour Name  * dp_ppeds_tx_comp_handler()- Handle tx completions for ppe2tcl ring
241*5113495bSYour Name  * @be_soc: Handle to DP Soc structure
242*5113495bSYour Name  * @quota: Max number of tx completions to process
243*5113495bSYour Name  *
244*5113495bSYour Name  * Return: Number of tx completions processed
245*5113495bSYour Name  */
246*5113495bSYour Name int dp_ppeds_tx_comp_handler(struct dp_soc_be *be_soc, uint32_t quota);
247*5113495bSYour Name 
248*5113495bSYour Name /*
249*5113495bSYour Name  * dp_ppeds_stats() - Accounting fw2wbm_tx_drop drops in Tx path
250*5113495bSYour Name  * @soc: Handle to DP Soc structure
251*5113495bSYour Name  * @peer_id: Peer ID in the descriptor
252*5113495bSYour Name  *
253*5113495bSYour Name  * Return: NONE
254*5113495bSYour Name  */
255*5113495bSYour Name 
256*5113495bSYour Name static inline
257*5113495bSYour Name void dp_ppeds_stats(struct dp_soc *soc, uint16_t peer_id);
258*5113495bSYour Name 
259*5113495bSYour Name #endif
260*5113495bSYour Name #ifdef WLAN_FEATURE_11BE_MLO
261*5113495bSYour Name /**
262*5113495bSYour Name  * dp_tx_mlo_mcast_handler_be() - Tx handler for Mcast packets
263*5113495bSYour Name  * @soc: Handle to DP Soc structure
264*5113495bSYour Name  * @vdev: DP vdev handle
265*5113495bSYour Name  * @nbuf: nbuf to be enqueued
266*5113495bSYour Name  *
267*5113495bSYour Name  * Return: None
268*5113495bSYour Name  */
269*5113495bSYour Name void dp_tx_mlo_mcast_handler_be(struct dp_soc *soc,
270*5113495bSYour Name 				struct dp_vdev *vdev,
271*5113495bSYour Name 				qdf_nbuf_t nbuf);
272*5113495bSYour Name 
273*5113495bSYour Name /**
274*5113495bSYour Name  * dp_tx_mlo_is_mcast_primary_be() - Function to check for primary mcast vdev
275*5113495bSYour Name  * @soc: Handle to DP Soc structure
276*5113495bSYour Name  * @vdev: DP vdev handle
277*5113495bSYour Name  *
278*5113495bSYour Name  * Return: True if vdev is mcast primary
279*5113495bSYour Name  *         False for all othercase
280*5113495bSYour Name  */
281*5113495bSYour Name bool dp_tx_mlo_is_mcast_primary_be(struct dp_soc *soc,
282*5113495bSYour Name 				   struct dp_vdev *vdev);
283*5113495bSYour Name #ifdef WLAN_MCAST_MLO
284*5113495bSYour Name #ifdef WLAN_MLO_MULTI_CHIP
285*5113495bSYour Name #ifdef CONFIG_MLO_SINGLE_DEV
286*5113495bSYour Name /**
287*5113495bSYour Name  * dp_tx_mlo_mcast_send_be() - Tx send handler for mlo mcast enhance
288*5113495bSYour Name  * @soc: DP soc handle
289*5113495bSYour Name  * @vdev: DP vdev handle
290*5113495bSYour Name  * @nbuf: skb
291*5113495bSYour Name  * @tx_exc_metadata: Handle that holds exception path meta data
292*5113495bSYour Name  *
293*5113495bSYour Name  * Return: NULL for success
294*5113495bSYour Name  *         nbuf for failure
295*5113495bSYour Name  */
296*5113495bSYour Name 
297*5113495bSYour Name qdf_nbuf_t dp_tx_mlo_mcast_send_be(struct dp_soc *soc, struct dp_vdev *vdev,
298*5113495bSYour Name 				   qdf_nbuf_t nbuf,
299*5113495bSYour Name 				   struct cdp_tx_exception_metadata
300*5113495bSYour Name 				   *tx_exc_metadata);
301*5113495bSYour Name #endif
302*5113495bSYour Name /**
303*5113495bSYour Name  * dp_tx_mlo_mcast_pkt_send() - handler to send MLO Mcast packets
304*5113495bSYour Name  * @be_vdev: Handle to DP be_vdev structure
305*5113495bSYour Name  * @ptnr_vdev: DP ptnr_vdev handle
306*5113495bSYour Name  * @arg: nbuf to be enqueued
307*5113495bSYour Name  *
308*5113495bSYour Name  * Return: None
309*5113495bSYour Name  */
310*5113495bSYour Name void dp_tx_mlo_mcast_pkt_send(struct dp_vdev_be *be_vdev,
311*5113495bSYour Name 			      struct dp_vdev *ptnr_vdev,
312*5113495bSYour Name 			      void *arg);
313*5113495bSYour Name #endif
314*5113495bSYour Name #endif
315*5113495bSYour Name #endif
316*5113495bSYour Name 
317*5113495bSYour Name #ifdef WLAN_FEATURE_NEAR_FULL_IRQ
318*5113495bSYour Name /**
319*5113495bSYour Name  * dp_tx_comp_nf_handler() - Tx completion ring Near full scenario handler
320*5113495bSYour Name  * @int_ctx: Interrupt context
321*5113495bSYour Name  * @soc: Datapath SoC handle
322*5113495bSYour Name  * @hal_ring_hdl: TX completion ring handle
323*5113495bSYour Name  * @ring_id: TX completion ring number
324*5113495bSYour Name  * @quota: Quota of the work to be done
325*5113495bSYour Name  *
326*5113495bSYour Name  * Return: work done
327*5113495bSYour Name  */
328*5113495bSYour Name uint32_t dp_tx_comp_nf_handler(struct dp_intr *int_ctx, struct dp_soc *soc,
329*5113495bSYour Name 			       hal_ring_handle_t hal_ring_hdl, uint8_t ring_id,
330*5113495bSYour Name 			       uint32_t quota);
331*5113495bSYour Name #else
332*5113495bSYour Name static inline
dp_tx_comp_nf_handler(struct dp_intr * int_ctx,struct dp_soc * soc,hal_ring_handle_t hal_ring_hdl,uint8_t ring_id,uint32_t quota)333*5113495bSYour Name uint32_t dp_tx_comp_nf_handler(struct dp_intr *int_ctx, struct dp_soc *soc,
334*5113495bSYour Name 			       hal_ring_handle_t hal_ring_hdl, uint8_t ring_id,
335*5113495bSYour Name 			       uint32_t quota)
336*5113495bSYour Name {
337*5113495bSYour Name 	return 0;
338*5113495bSYour Name }
339*5113495bSYour Name #endif /* WLAN_FEATURE_NEAR_FULL_IRQ */
340*5113495bSYour Name 
341*5113495bSYour Name /**
342*5113495bSYour Name  * dp_tx_compute_tx_delay_be() - Compute HW Tx completion delay
343*5113495bSYour Name  * @soc: Handle to DP Soc structure
344*5113495bSYour Name  * @vdev: vdev
345*5113495bSYour Name  * @ts: Tx completion status
346*5113495bSYour Name  * @delay_us: Delay to be calculated in microseconds
347*5113495bSYour Name  *
348*5113495bSYour Name  * Return: QDF_STATUS
349*5113495bSYour Name  */
350*5113495bSYour Name QDF_STATUS dp_tx_compute_tx_delay_be(struct dp_soc *soc,
351*5113495bSYour Name 				     struct dp_vdev *vdev,
352*5113495bSYour Name 				     struct hal_tx_completion_status *ts,
353*5113495bSYour Name 				     uint32_t *delay_us);
354*5113495bSYour Name 
355*5113495bSYour Name /**
356*5113495bSYour Name  * dp_tx_desc_pool_alloc_be() - Allocate TX descriptor pool
357*5113495bSYour Name  * @soc: Handle to DP Soc structure
358*5113495bSYour Name  * @num_elem: Number of elements to allocate
359*5113495bSYour Name  * @pool_id: TCL descriptor pool ID
360*5113495bSYour Name  *
361*5113495bSYour Name  * Return: QDF_STATUS
362*5113495bSYour Name  */
363*5113495bSYour Name QDF_STATUS dp_tx_desc_pool_alloc_be(struct dp_soc *soc, uint32_t num_elem,
364*5113495bSYour Name 				    uint8_t pool_id);
365*5113495bSYour Name 
366*5113495bSYour Name /**
367*5113495bSYour Name  * dp_tx_desc_pool_free_be() - Free TX descriptor pool
368*5113495bSYour Name  * @soc: Handle to DP Soc structure
369*5113495bSYour Name  * @pool_id: TCL descriptor pool ID
370*5113495bSYour Name  *
371*5113495bSYour Name  * Return: none
372*5113495bSYour Name  */
373*5113495bSYour Name void dp_tx_desc_pool_free_be(struct dp_soc *soc, uint8_t pool_id);
374*5113495bSYour Name #endif
375