xref: /wlan-driver/qcacld-3.0/core/dp/txrx/ol_tx.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2011-2020 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 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 
20*5113495bSYour Name /**
21*5113495bSYour Name  * @file ol_tx.h
22*5113495bSYour Name  * @brief Internal definitions for the high-level tx module.
23*5113495bSYour Name  */
24*5113495bSYour Name #ifndef _OL_TX__H_
25*5113495bSYour Name #define _OL_TX__H_
26*5113495bSYour Name 
27*5113495bSYour Name #include <qdf_nbuf.h>           /* qdf_nbuf_t */
28*5113495bSYour Name #include <qdf_lock.h>
29*5113495bSYour Name #include <cdp_txrx_cmn.h>       /* ol_txrx_vdev_t, etc. */
30*5113495bSYour Name #include <cdp_txrx_misc.h>      /* ol_tx_spec */
31*5113495bSYour Name #include <cdp_txrx_handle.h>
32*5113495bSYour Name #include <ol_txrx_types.h>      /* ol_tx_desc_t, ol_txrx_msdu_info_t */
33*5113495bSYour Name #include <ol_txrx.h>
34*5113495bSYour Name #include <hif.h>
35*5113495bSYour Name 
36*5113495bSYour Name #ifdef IPA_OFFLOAD
37*5113495bSYour Name /**
38*5113495bSYour Name  * ol_tx_send_ipa_data_frame() - send IPA data frame
39*5113495bSYour Name  * @soc_hdl: datapath soc handle
40*5113495bSYour Name  * @vdev: virtual interface id
41*5113495bSYour Name  * @skb: skb
42*5113495bSYour Name  *
43*5113495bSYour Name  * Return: skb/ NULL is for success
44*5113495bSYour Name  */
45*5113495bSYour Name qdf_nbuf_t ol_tx_send_ipa_data_frame(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
46*5113495bSYour Name 				     qdf_nbuf_t skb);
47*5113495bSYour Name #endif
48*5113495bSYour Name 
49*5113495bSYour Name #ifdef CONFIG_LL_DP_SUPPORT
50*5113495bSYour Name struct ol_tx_desc_t *
51*5113495bSYour Name ol_tx_prepare_ll(ol_txrx_vdev_handle vdev,
52*5113495bSYour Name 		 qdf_nbuf_t msdu,
53*5113495bSYour Name 		 struct ol_txrx_msdu_info_t *msdu_info);
54*5113495bSYour Name #endif
55*5113495bSYour Name 
56*5113495bSYour Name qdf_nbuf_t ol_tx_ll_wrapper(ol_txrx_vdev_handle vdev, qdf_nbuf_t msdu_list);
57*5113495bSYour Name #ifdef WLAN_FEATURE_FASTPATH
58*5113495bSYour Name qdf_nbuf_t ol_tx_ll_fast(ol_txrx_vdev_handle vdev, qdf_nbuf_t msdu_list);
59*5113495bSYour Name 
60*5113495bSYour Name void ol_tx_setup_fastpath_ce_handles(struct hif_opaque_softc *osc,
61*5113495bSYour Name 				     struct ol_txrx_pdev_t *pdev);
62*5113495bSYour Name #else
63*5113495bSYour Name static inline
ol_tx_setup_fastpath_ce_handles(struct hif_opaque_softc * osc,struct ol_txrx_pdev_t * pdev)64*5113495bSYour Name void ol_tx_setup_fastpath_ce_handles(struct hif_opaque_softc *osc,
65*5113495bSYour Name 				     struct ol_txrx_pdev_t *pdev)
66*5113495bSYour Name { }
67*5113495bSYour Name 
68*5113495bSYour Name qdf_nbuf_t ol_tx_ll(ol_txrx_vdev_handle vdev, qdf_nbuf_t msdu_list);
69*5113495bSYour Name #endif
70*5113495bSYour Name 
71*5113495bSYour Name qdf_nbuf_t ol_tx_ll_queue(ol_txrx_vdev_handle vdev, qdf_nbuf_t msdu_list);
72*5113495bSYour Name 
73*5113495bSYour Name #ifdef CONFIG_HL_SUPPORT
74*5113495bSYour Name #define OL_TX_SEND ol_tx_hl
75*5113495bSYour Name #else
76*5113495bSYour Name #define OL_TX_SEND OL_TX_LL
77*5113495bSYour Name #endif
78*5113495bSYour Name 
79*5113495bSYour Name #ifdef QCA_LL_LEGACY_TX_FLOW_CONTROL
80*5113495bSYour Name #define OL_TX_LL ol_tx_ll_queue
81*5113495bSYour Name #else
82*5113495bSYour Name #define OL_TX_LL ol_tx_ll_wrapper
83*5113495bSYour Name #endif
84*5113495bSYour Name 
85*5113495bSYour Name #ifdef WLAN_SUPPORT_TXRX_HL_BUNDLE
86*5113495bSYour Name void ol_tx_hl_vdev_bundle_timer(void *context);
87*5113495bSYour Name 
88*5113495bSYour Name void ol_tx_hl_queue_flush_all(struct ol_txrx_vdev_t *vdev);
89*5113495bSYour Name qdf_nbuf_t
90*5113495bSYour Name ol_tx_hl_pdev_queue_send_all(struct ol_txrx_pdev_t *pdev);
91*5113495bSYour Name #else
92*5113495bSYour Name static inline
ol_tx_hl_vdev_bundle_timer(void * context)93*5113495bSYour Name void ol_tx_hl_vdev_bundle_timer(void *context)
94*5113495bSYour Name {
95*5113495bSYour Name }
96*5113495bSYour Name 
97*5113495bSYour Name static inline
ol_tx_hl_queue_flush_all(struct ol_txrx_vdev_t * vdev)98*5113495bSYour Name void ol_tx_hl_queue_flush_all(struct ol_txrx_vdev_t *vdev)
99*5113495bSYour Name {
100*5113495bSYour Name }
101*5113495bSYour Name 
102*5113495bSYour Name static inline
103*5113495bSYour Name qdf_nbuf_t
ol_tx_hl_pdev_queue_send_all(struct ol_txrx_pdev_t * pdev)104*5113495bSYour Name ol_tx_hl_pdev_queue_send_all(struct ol_txrx_pdev_t *pdev)
105*5113495bSYour Name {
106*5113495bSYour Name 	return NULL;
107*5113495bSYour Name }
108*5113495bSYour Name #endif
109*5113495bSYour Name 
110*5113495bSYour Name #ifdef QCA_LL_LEGACY_TX_FLOW_CONTROL
111*5113495bSYour Name void ol_tx_vdev_ll_pause_queue_send(void *context);
112*5113495bSYour Name void ol_tx_pdev_ll_pause_queue_send_all(struct ol_txrx_pdev_t *pdev);
113*5113495bSYour Name #else
ol_tx_vdev_ll_pause_queue_send(void * context)114*5113495bSYour Name static inline void ol_tx_vdev_ll_pause_queue_send(void *context)
115*5113495bSYour Name {
116*5113495bSYour Name }
117*5113495bSYour Name static inline
ol_tx_pdev_ll_pause_queue_send_all(struct ol_txrx_pdev_t * pdev)118*5113495bSYour Name void ol_tx_pdev_ll_pause_queue_send_all(struct ol_txrx_pdev_t *pdev)
119*5113495bSYour Name {
120*5113495bSYour Name }
121*5113495bSYour Name #endif
122*5113495bSYour Name 
123*5113495bSYour Name /**
124*5113495bSYour Name  * ol_tx_comp_hw_to_qdf_status(): map ol hw to qdf status
125*5113495bSYour Name  * @status: hw status
126*5113495bSYour Name  *
127*5113495bSYour Name  * Return: qdf tx rx status
128*5113495bSYour Name  */
129*5113495bSYour Name static inline enum qdf_dp_tx_rx_status
ol_tx_comp_hw_to_qdf_status(uint16_t status)130*5113495bSYour Name ol_tx_comp_hw_to_qdf_status(uint16_t status)
131*5113495bSYour Name {
132*5113495bSYour Name 	switch (status) {
133*5113495bSYour Name 	case HTT_TX_COMPL_IND_STAT_OK:
134*5113495bSYour Name 		return QDF_TX_RX_STATUS_OK;
135*5113495bSYour Name 	case HTT_TX_COMPL_IND_STAT_DISCARD:
136*5113495bSYour Name 	case HTT_TX_COMPL_IND_STAT_DROP:
137*5113495bSYour Name 		return QDF_TX_RX_STATUS_FW_DISCARD;
138*5113495bSYour Name 	case HTT_TX_COMPL_IND_STAT_NO_ACK:
139*5113495bSYour Name 		return QDF_TX_RX_STATUS_NO_ACK;
140*5113495bSYour Name 	default:
141*5113495bSYour Name 		return QDF_TX_RX_STATUS_DEFAULT;
142*5113495bSYour Name 	}
143*5113495bSYour Name }
144*5113495bSYour Name 
145*5113495bSYour Name static inline
ol_txrx_tx_is_raw(enum ol_tx_spec tx_spec)146*5113495bSYour Name int ol_txrx_tx_is_raw(enum ol_tx_spec tx_spec)
147*5113495bSYour Name {
148*5113495bSYour Name 	return	tx_spec &
149*5113495bSYour Name 		(OL_TX_SPEC_RAW | OL_TX_SPEC_NO_AGGR | OL_TX_SPEC_NO_ENCRYPT);
150*5113495bSYour Name }
151*5113495bSYour Name 
152*5113495bSYour Name static inline
ol_txrx_tx_raw_subtype(enum ol_tx_spec tx_spec)153*5113495bSYour Name uint8_t ol_txrx_tx_raw_subtype(enum ol_tx_spec tx_spec)
154*5113495bSYour Name {
155*5113495bSYour Name 	uint8_t sub_type = 0x1; /* 802.11 MAC header present */
156*5113495bSYour Name 
157*5113495bSYour Name 	if (tx_spec & OL_TX_SPEC_NO_AGGR)
158*5113495bSYour Name 		sub_type |= 0x1 << HTT_TX_MSDU_DESC_RAW_SUBTYPE_NO_AGGR_S;
159*5113495bSYour Name 	if (tx_spec & OL_TX_SPEC_NO_ENCRYPT)
160*5113495bSYour Name 		sub_type |= 0x1 << HTT_TX_MSDU_DESC_RAW_SUBTYPE_NO_ENCRYPT_S;
161*5113495bSYour Name 	if (tx_spec & OL_TX_SPEC_NWIFI_NO_ENCRYPT)
162*5113495bSYour Name 		sub_type |= 0x1 << HTT_TX_MSDU_DESC_RAW_SUBTYPE_NO_ENCRYPT_S;
163*5113495bSYour Name 	return sub_type;
164*5113495bSYour Name }
165*5113495bSYour Name 
166*5113495bSYour Name /**
167*5113495bSYour Name  * ol_tx_hl() - transmit tx frames for a HL system.
168*5113495bSYour Name  * @vdev: the virtual device transmit the data
169*5113495bSYour Name  * @msdu_list: the tx frames to send
170*5113495bSYour Name  *
171*5113495bSYour Name  * Return: NULL if all MSDUs are accepted
172*5113495bSYour Name  */
173*5113495bSYour Name qdf_nbuf_t
174*5113495bSYour Name ol_tx_hl(ol_txrx_vdev_handle vdev, qdf_nbuf_t msdu_list);
175*5113495bSYour Name 
176*5113495bSYour Name /**
177*5113495bSYour Name  * ol_tx_non_std() - Allow the control-path SW to send data frames
178*5113495bSYour Name  * @soc_hdl: Datapath soc handle
179*5113495bSYour Name  * @vdev_id: id of vdev
180*5113495bSYour Name  * @tx_spec: what non-standard handling to apply to the tx data frames
181*5113495bSYour Name  * @msdu_list: NULL-terminated list of tx MSDUs
182*5113495bSYour Name  *
183*5113495bSYour Name  * Generally, all tx data frames come from the OS shim into the txrx layer.
184*5113495bSYour Name  * However, there are rare cases such as TDLS messaging where the UMAC
185*5113495bSYour Name  * control-path SW creates tx data frames.
186*5113495bSYour Name  *  This UMAC SW can call this function to provide the tx data frames to
187*5113495bSYour Name  *  the txrx layer.
188*5113495bSYour Name  *  The UMAC SW can request a callback for these data frames after their
189*5113495bSYour Name  *  transmission completes, by using the ol_txrx_data_tx_cb_set function
190*5113495bSYour Name  *  to register a tx completion callback, and by specifying
191*5113495bSYour Name  *  ol_tx_spec_no_free as the tx_spec arg when giving the frames to
192*5113495bSYour Name  *  ol_tx_non_std.
193*5113495bSYour Name  *  The MSDUs need to have the appropriate L2 header type (802.3 vs. 802.11),
194*5113495bSYour Name  *  as specified by ol_cfg_frame_type().
195*5113495bSYour Name  *
196*5113495bSYour Name  *  Return: null - success, skb - failure
197*5113495bSYour Name  */
198*5113495bSYour Name #ifdef CONFIG_HL_SUPPORT
199*5113495bSYour Name qdf_nbuf_t ol_tx_non_std_hl(struct ol_txrx_vdev_t *vdev,
200*5113495bSYour Name 			    enum ol_tx_spec tx_spec,
201*5113495bSYour Name 			    qdf_nbuf_t msdu_list);
202*5113495bSYour Name 
203*5113495bSYour Name static inline qdf_nbuf_t
ol_tx_non_std(struct cdp_soc_t * soc_hdl,uint8_t vdev_id,enum ol_tx_spec tx_spec,qdf_nbuf_t msdu_list)204*5113495bSYour Name ol_tx_non_std(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
205*5113495bSYour Name 	      enum ol_tx_spec tx_spec, qdf_nbuf_t msdu_list)
206*5113495bSYour Name {
207*5113495bSYour Name 	struct ol_txrx_vdev_t *vdev;
208*5113495bSYour Name 
209*5113495bSYour Name 	vdev = (struct ol_txrx_vdev_t *)ol_txrx_get_vdev_from_vdev_id(vdev_id);
210*5113495bSYour Name 
211*5113495bSYour Name 	if (!vdev)
212*5113495bSYour Name 		return msdu_list;
213*5113495bSYour Name 	else
214*5113495bSYour Name 		return ol_tx_non_std_hl(vdev, tx_spec, msdu_list);
215*5113495bSYour Name }
216*5113495bSYour Name #else
217*5113495bSYour Name qdf_nbuf_t ol_tx_non_std_ll(struct ol_txrx_vdev_t *vdev,
218*5113495bSYour Name 			    enum ol_tx_spec tx_spec, qdf_nbuf_t msdu_list);
219*5113495bSYour Name 
220*5113495bSYour Name static inline qdf_nbuf_t
ol_tx_non_std(struct cdp_soc_t * soc_hdl,uint8_t vdev_id,enum ol_tx_spec tx_spec,qdf_nbuf_t msdu_list)221*5113495bSYour Name ol_tx_non_std(struct cdp_soc_t *soc_hdl, uint8_t vdev_id,
222*5113495bSYour Name 	      enum ol_tx_spec tx_spec, qdf_nbuf_t msdu_list)
223*5113495bSYour Name {
224*5113495bSYour Name 	struct ol_txrx_vdev_t *vdev;
225*5113495bSYour Name 
226*5113495bSYour Name 	vdev = (struct ol_txrx_vdev_t *)ol_txrx_get_vdev_from_vdev_id(vdev_id);
227*5113495bSYour Name 
228*5113495bSYour Name 	if (!vdev)
229*5113495bSYour Name 		return msdu_list;
230*5113495bSYour Name 	else
231*5113495bSYour Name 		return ol_tx_non_std_ll(vdev, tx_spec, msdu_list);
232*5113495bSYour Name }
233*5113495bSYour Name #endif
234*5113495bSYour Name 
235*5113495bSYour Name /**
236*5113495bSYour Name  * ol_tx_trace_pkt() - Trace TX packet at OL layer
237*5113495bSYour Name  *
238*5113495bSYour Name  * @skb: skb to be traced
239*5113495bSYour Name  * @msdu_id: msdu_id of the packet
240*5113495bSYour Name  * @vdev_id: vdev_id of the packet
241*5113495bSYour Name  * @op_mode: Vdev Operation mode
242*5113495bSYour Name  *
243*5113495bSYour Name  * Return: None
244*5113495bSYour Name  */
245*5113495bSYour Name void ol_tx_trace_pkt(qdf_nbuf_t skb, uint16_t msdu_id, uint8_t vdev_id,
246*5113495bSYour Name 		     enum QDF_OPMODE op_mode);
247*5113495bSYour Name 
248*5113495bSYour Name void ol_txrx_mgmt_tx_complete(void *ctxt, qdf_nbuf_t netbuf, int err);
249*5113495bSYour Name 
250*5113495bSYour Name /**
251*5113495bSYour Name  * ol_txrx_mgmt_tx_cb_set() - Store a callback for delivery
252*5113495bSYour Name  *	notifications for management frames.
253*5113495bSYour Name  * @soc: Datapath soc handle
254*5113495bSYour Name  * @pdev_id: Physical device instance id
255*5113495bSYour Name  * @type: the type of mgmt frame the callback is used for
256*5113495bSYour Name  * @download_cb: the callback for notification of delivery to the target
257*5113495bSYour Name  * @ota_ack_cb: the callback for notification of delivery to the peer
258*5113495bSYour Name  * @ctxt: context to use with the callback
259*5113495bSYour Name  *
260*5113495bSYour Name  * When the txrx SW receives notifications from the target that a tx frame
261*5113495bSYour Name  * has been delivered to its recipient, it will check if the tx frame
262*5113495bSYour Name  * is a management frame.  If so, the txrx SW will check the management
263*5113495bSYour Name  * frame type specified when the frame was submitted for transmission.
264*5113495bSYour Name  * If there is a callback function registered for the type of management
265*5113495bSYour Name  * frame in question, the txrx code will invoke the callback to inform
266*5113495bSYour Name  * the management + control SW that the mgmt frame was delivered.
267*5113495bSYour Name  * This function is used by the control SW to store a callback pointer
268*5113495bSYour Name  * for a given type of management frame.
269*5113495bSYour Name  */
270*5113495bSYour Name QDF_STATUS
271*5113495bSYour Name ol_txrx_mgmt_tx_cb_set(struct cdp_soc_t *soc, uint8_t pdev_id, uint8_t type,
272*5113495bSYour Name 		       ol_txrx_mgmt_tx_cb download_cb,
273*5113495bSYour Name 		       ol_txrx_mgmt_tx_cb ota_ack_cb, void *ctxt);
274*5113495bSYour Name 
275*5113495bSYour Name /**
276*5113495bSYour Name  * ol_txrx_mgmt_send_ext() - Transmit a management frame
277*5113495bSYour Name  * @soc: Datapath soc handle
278*5113495bSYour Name  * @vdev_id: virtual interface id
279*5113495bSYour Name  * @tx_mgmt_frm: management frame to transmit
280*5113495bSYour Name  * @type: the type of management frame (determines what callback to use)
281*5113495bSYour Name  * @use_6mbps: specify whether management frame to transmit should
282*5113495bSYour Name  *	use 6 Mbps rather than 1 Mbps min rate(for 5GHz band or P2P)
283*5113495bSYour Name  * @chanfreq: channel to transmit the frame on
284*5113495bSYour Name  *
285*5113495bSYour Name  * Send the specified management frame from the specified virtual device.
286*5113495bSYour Name  * The type is used for determining whether to invoke a callback to inform
287*5113495bSYour Name  * the sender that the tx mgmt frame was delivered, and if so, which
288*5113495bSYour Name  * callback to use.
289*5113495bSYour Name  *
290*5113495bSYour Name  * Return: 0 - the frame is accepted for transmission
291*5113495bSYour Name  *         1 - the frame was not accepted
292*5113495bSYour Name  */
293*5113495bSYour Name int
294*5113495bSYour Name ol_txrx_mgmt_send_ext(struct cdp_soc_t *soc, uint8_t vdev_id,
295*5113495bSYour Name 		      qdf_nbuf_t tx_mgmt_frm,
296*5113495bSYour Name 		      uint8_t type, uint8_t use_6mbps, uint16_t chanfreq);
297*5113495bSYour Name 
298*5113495bSYour Name qdf_nbuf_t
299*5113495bSYour Name ol_tx_reinject(struct ol_txrx_vdev_t *vdev, qdf_nbuf_t msdu, uint16_t peer_id);
300*5113495bSYour Name 
301*5113495bSYour Name #if defined(FEATURE_TSO)
302*5113495bSYour Name void ol_tso_seg_list_init(struct ol_txrx_pdev_t *pdev, uint32_t num_seg);
303*5113495bSYour Name void ol_tso_seg_list_deinit(struct ol_txrx_pdev_t *pdev);
304*5113495bSYour Name void ol_tso_num_seg_list_init(struct ol_txrx_pdev_t *pdev, uint32_t num_seg);
305*5113495bSYour Name void ol_tso_num_seg_list_deinit(struct ol_txrx_pdev_t *pdev);
306*5113495bSYour Name uint32_t ol_tx_tso_get_stats_idx(struct ol_txrx_pdev_t *pdev);
307*5113495bSYour Name uint8_t ol_tx_prepare_tso(ol_txrx_vdev_handle vdev,
308*5113495bSYour Name 			  qdf_nbuf_t msdu,
309*5113495bSYour Name 			  struct ol_txrx_msdu_info_t *msdu_info);
310*5113495bSYour Name void ol_tx_tso_update_stats(struct ol_txrx_pdev_t *pdev,
311*5113495bSYour Name 			    struct qdf_tso_info_t  *tso_info, qdf_nbuf_t msdu,
312*5113495bSYour Name 			    uint32_t tso_msdu_idx);
313*5113495bSYour Name #else
ol_tx_tso_get_stats_idx(struct ol_txrx_pdev_t * pdev)314*5113495bSYour Name static inline uint32_t ol_tx_tso_get_stats_idx(struct ol_txrx_pdev_t *pdev)
315*5113495bSYour Name {
316*5113495bSYour Name 	return 0;
317*5113495bSYour Name }
318*5113495bSYour Name 
ol_tso_seg_list_init(struct ol_txrx_pdev_t * pdev,uint32_t num_seg)319*5113495bSYour Name static inline void ol_tso_seg_list_init(struct ol_txrx_pdev_t *pdev,
320*5113495bSYour Name 	uint32_t num_seg)
321*5113495bSYour Name {
322*5113495bSYour Name }
323*5113495bSYour Name 
ol_tso_seg_list_deinit(struct ol_txrx_pdev_t * pdev)324*5113495bSYour Name static inline void ol_tso_seg_list_deinit(struct ol_txrx_pdev_t *pdev)
325*5113495bSYour Name {
326*5113495bSYour Name }
327*5113495bSYour Name 
ol_tso_num_seg_list_init(struct ol_txrx_pdev_t * pdev,uint32_t num_seg)328*5113495bSYour Name static inline void ol_tso_num_seg_list_init(struct ol_txrx_pdev_t *pdev,
329*5113495bSYour Name 	uint32_t num_seg)
330*5113495bSYour Name {
331*5113495bSYour Name }
332*5113495bSYour Name 
ol_tso_num_seg_list_deinit(struct ol_txrx_pdev_t * pdev)333*5113495bSYour Name static inline void ol_tso_num_seg_list_deinit(struct ol_txrx_pdev_t *pdev)
334*5113495bSYour Name {
335*5113495bSYour Name }
336*5113495bSYour Name 
ol_tx_prepare_tso(ol_txrx_vdev_handle vdev,qdf_nbuf_t msdu,struct ol_txrx_msdu_info_t * msdu_info)337*5113495bSYour Name static inline uint8_t ol_tx_prepare_tso(ol_txrx_vdev_handle vdev,
338*5113495bSYour Name 					qdf_nbuf_t msdu,
339*5113495bSYour Name 					struct ol_txrx_msdu_info_t *msdu_info)
340*5113495bSYour Name {
341*5113495bSYour Name 	return 0;
342*5113495bSYour Name }
343*5113495bSYour Name 
ol_tx_tso_update_stats(struct ol_txrx_pdev_t * pdev,struct qdf_tso_info_t * tso_info,qdf_nbuf_t msdu,uint32_t tso_msdu_idx)344*5113495bSYour Name static inline void ol_tx_tso_update_stats(struct ol_txrx_pdev_t *pdev,
345*5113495bSYour Name 					  struct qdf_tso_info_t  *tso_info,
346*5113495bSYour Name 					  qdf_nbuf_t msdu,
347*5113495bSYour Name 					  uint32_t tso_msdu_idx)
348*5113495bSYour Name {
349*5113495bSYour Name }
350*5113495bSYour Name #endif
351*5113495bSYour Name 
352*5113495bSYour Name #ifdef QCA_HL_NETDEV_FLOW_CONTROL
353*5113495bSYour Name bool ol_tx_desc_is_high_prio(qdf_nbuf_t msdu);
354*5113495bSYour Name #endif
355*5113495bSYour Name 
356*5113495bSYour Name #if defined(HELIUMPLUS)
357*5113495bSYour Name void ol_txrx_dump_frag_desc(char *msg, struct ol_tx_desc_t *tx_desc);
358*5113495bSYour Name #else
359*5113495bSYour Name static inline
ol_txrx_dump_frag_desc(char * msg,struct ol_tx_desc_t * tx_desc)360*5113495bSYour Name void ol_txrx_dump_frag_desc(char *msg, struct ol_tx_desc_t *tx_desc)
361*5113495bSYour Name {
362*5113495bSYour Name }
363*5113495bSYour Name #endif
364*5113495bSYour Name 
365*5113495bSYour Name #endif /* _OL_TX__H_ */
366