xref: /wlan-driver/qca-wifi-host-cmn/hal/wifi3.0/be/hal_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 
20*5113495bSYour Name #ifndef _HAL_BE_TX_H_
21*5113495bSYour Name #define _HAL_BE_TX_H_
22*5113495bSYour Name 
23*5113495bSYour Name #include "hal_be_hw_headers.h"
24*5113495bSYour Name #include "hal_tx.h"
25*5113495bSYour Name 
26*5113495bSYour Name /* Number of TX banks reserved i.e, will not be used by host driver. */
27*5113495bSYour Name /* MAX_TCL_BANK reserved for FW use */
28*5113495bSYour Name #define HAL_TX_NUM_RESERVED_BANKS 1
29*5113495bSYour Name 
30*5113495bSYour Name /*
31*5113495bSYour Name  * Number of Priority to TID mapping
32*5113495bSYour Name  */
33*5113495bSYour Name #define HAL_BE_TX_MAP0_PRI2TID_MAX 10
34*5113495bSYour Name #define HAL_BE_TX_MAP1_PRI2TID_MAX 6
35*5113495bSYour Name 
36*5113495bSYour Name enum hal_be_tx_ret_buf_manager {
37*5113495bSYour Name 	HAL_BE_WBM_SW0_BM_ID = 5,
38*5113495bSYour Name 	HAL_BE_WBM_SW1_BM_ID = 6,
39*5113495bSYour Name 	HAL_BE_WBM_SW2_BM_ID = 7,
40*5113495bSYour Name 	HAL_BE_WBM_SW3_BM_ID = 8,
41*5113495bSYour Name 	HAL_BE_WBM_SW4_BM_ID = 9,
42*5113495bSYour Name 	HAL_BE_WBM_SW5_BM_ID = 10,
43*5113495bSYour Name 	HAL_BE_WBM_SW6_BM_ID = 11,
44*5113495bSYour Name };
45*5113495bSYour Name 
46*5113495bSYour Name enum hal_tx_mcast_ctrl {
47*5113495bSYour Name 	/* mcast traffic exceptioned to FW
48*5113495bSYour Name 	 * valid only for AP VAP default for AP
49*5113495bSYour Name 	 */
50*5113495bSYour Name 	HAL_TX_MCAST_CTRL_FW_EXCEPTION = 0,
51*5113495bSYour Name 	/* mcast traffic dropped in TCL*/
52*5113495bSYour Name 	HAL_TX_MCAST_CTRL_DROP,
53*5113495bSYour Name 	/* MEC notification are enabled
54*5113495bSYour Name 	 * valid only for client VAP
55*5113495bSYour Name 	 */
56*5113495bSYour Name 	HAL_TX_MCAST_CTRL_MEC_NOTIFY,
57*5113495bSYour Name 	/* no special routing for mcast
58*5113495bSYour Name 	 * valid for client vap when index search is enabled
59*5113495bSYour Name 	 */
60*5113495bSYour Name 	HAL_TX_MCAST_CTRL_NO_SPECIAL,
61*5113495bSYour Name };
62*5113495bSYour Name 
63*5113495bSYour Name /**
64*5113495bSYour Name  * enum hal_tx_notify_frame_type - TX notify frame type
65*5113495bSYour Name  * @NO_TX_NOTIFY: Not a notify frame
66*5113495bSYour Name  * @TX_HARD_NOTIFY: Hard notify TX frame
67*5113495bSYour Name  * @TX_SOFT_NOTIFY_E: Soft Notify Tx frame
68*5113495bSYour Name  * @TX_SEMI_HARD_NOTIFY_E: Semi Hard notify TX frame
69*5113495bSYour Name  */
70*5113495bSYour Name enum hal_tx_notify_frame_type {
71*5113495bSYour Name 	NO_TX_NOTIFY = 0,
72*5113495bSYour Name 	TX_HARD_NOTIFY = 1,
73*5113495bSYour Name 	TX_SOFT_NOTIFY_E = 2,
74*5113495bSYour Name 	TX_SEMI_HARD_NOTIFY_E = 3
75*5113495bSYour Name };
76*5113495bSYour Name 
77*5113495bSYour Name /*---------------------------------------------------------------------------
78*5113495bSYour Name  * Structures
79*5113495bSYour Name  * ---------------------------------------------------------------------------
80*5113495bSYour Name  */
81*5113495bSYour Name /**
82*5113495bSYour Name  * union hal_tx_bank_config - SW config bank params
83*5113495bSYour Name  * @epd: EPD indication flag
84*5113495bSYour Name  * @encap_type: encapsulation type
85*5113495bSYour Name  * @encrypt_type: encrypt type
86*5113495bSYour Name  * @src_buffer_swap: big-endia switch for packet buffer
87*5113495bSYour Name  * @link_meta_swap: big-endian switch for link metadata
88*5113495bSYour Name  * @index_lookup_enable: Enable index lookup
89*5113495bSYour Name  * @addrx_en: Address-X search
90*5113495bSYour Name  * @addry_en: Address-Y search
91*5113495bSYour Name  * @mesh_enable:mesh enable flag
92*5113495bSYour Name  * @vdev_id_check_en: vdev id check
93*5113495bSYour Name  * @pmac_id: mac id
94*5113495bSYour Name  * @mcast_pkt_ctrl: mulitcast packet control
95*5113495bSYour Name  * @dscp_tid_map_id: DSCP to TID map id
96*5113495bSYour Name  * @reserved: unused bits
97*5113495bSYour Name  * @val: value representing bank config
98*5113495bSYour Name  */
99*5113495bSYour Name union hal_tx_bank_config {
100*5113495bSYour Name 	struct {
101*5113495bSYour Name 		uint32_t epd:1,
102*5113495bSYour Name 			 encap_type:2,
103*5113495bSYour Name 			 encrypt_type:4,
104*5113495bSYour Name 			 src_buffer_swap:1,
105*5113495bSYour Name 			 link_meta_swap:1,
106*5113495bSYour Name 			 index_lookup_enable:1,
107*5113495bSYour Name 			 addrx_en:1,
108*5113495bSYour Name 			 addry_en:1,
109*5113495bSYour Name 			 mesh_enable:2,
110*5113495bSYour Name 			 vdev_id_check_en:1,
111*5113495bSYour Name 			 pmac_id:2,
112*5113495bSYour Name 			 mcast_pkt_ctrl:2,
113*5113495bSYour Name 			 dscp_tid_map_id:6,
114*5113495bSYour Name 			 reserved:7;
115*5113495bSYour Name 	};
116*5113495bSYour Name 	uint32_t val;
117*5113495bSYour Name };
118*5113495bSYour Name 
119*5113495bSYour Name /**
120*5113495bSYour Name  * union hal_tx_cmn_config_ppe - SW config exception related parameters
121*5113495bSYour Name  * @drop_prec_err: Exception drop_prec errors.
122*5113495bSYour Name  * @fake_mac_hdr: Exception fake mac header.
123*5113495bSYour Name  * @cpu_code_inv: Exception cpu code invalid.
124*5113495bSYour Name  * @data_buff_err: Exception buffer length/offset erorors.
125*5113495bSYour Name  * @l3_l4_err: Exception m3_l4 checksum errors
126*5113495bSYour Name  * @data_offset_max: Maximum data offset allowed.
127*5113495bSYour Name  * @data_len_max: Maximum data length allowed.
128*5113495bSYour Name  * @val: aggregate 32-bit value
129*5113495bSYour Name  */
130*5113495bSYour Name union hal_tx_cmn_config_ppe {
131*5113495bSYour Name 	struct {
132*5113495bSYour Name 		uint32_t drop_prec_err:1,
133*5113495bSYour Name 			 fake_mac_hdr:1,
134*5113495bSYour Name 			 cpu_code_inv:1,
135*5113495bSYour Name 			 data_buff_err:1,
136*5113495bSYour Name 			 l3_l4_err:1,
137*5113495bSYour Name 			 data_offset_max:12,
138*5113495bSYour Name 			 data_len_max:14;
139*5113495bSYour Name 	};
140*5113495bSYour Name 	uint32_t val;
141*5113495bSYour Name };
142*5113495bSYour Name 
143*5113495bSYour Name /**
144*5113495bSYour Name  * union hal_tx_ppe_vp_config - SW config PPE VP table
145*5113495bSYour Name  * @vp_num: Virtual port number
146*5113495bSYour Name  * @pmac_id: Lmac ID
147*5113495bSYour Name  * @bank_id: Bank ID corresponding to this I/F.
148*5113495bSYour Name  * @vdev_id: VDEV ID of the I/F.
149*5113495bSYour Name  * @search_idx_reg_num: Register number of this SI.
150*5113495bSYour Name  * @use_ppe_int_pri: Use the PPE INT_PRI to TID table
151*5113495bSYour Name  * @to_fw: Use FW
152*5113495bSYour Name  * @drop_prec_enable: Enable precedence drop.
153*5113495bSYour Name  * @val: aggregate 32-bit value
154*5113495bSYour Name  */
155*5113495bSYour Name union hal_tx_ppe_vp_config {
156*5113495bSYour Name 	struct {
157*5113495bSYour Name 		uint32_t vp_num:8,
158*5113495bSYour Name 			 pmac_id:2,
159*5113495bSYour Name 			 bank_id:6,
160*5113495bSYour Name 			 vdev_id:8,
161*5113495bSYour Name 			 search_idx_reg_num:3,
162*5113495bSYour Name 			 use_ppe_int_pri:1,
163*5113495bSYour Name 			 to_fw:1,
164*5113495bSYour Name 			 drop_prec_enable:1;
165*5113495bSYour Name 	};
166*5113495bSYour Name 	uint32_t val;
167*5113495bSYour Name };
168*5113495bSYour Name 
169*5113495bSYour Name /**
170*5113495bSYour Name  * union hal_tx_ppe_idx_map_config - Use ppe index mapping table
171*5113495bSYour Name  * @search_idx: Search index
172*5113495bSYour Name  * @cache_set: Cache set number
173*5113495bSYour Name  * @val: aggregate 32-bit value
174*5113495bSYour Name  */
175*5113495bSYour Name union hal_tx_ppe_idx_map_config {
176*5113495bSYour Name 	struct {
177*5113495bSYour Name 		uint32_t search_idx:20,
178*5113495bSYour Name 			 cache_set:4;
179*5113495bSYour Name 	};
180*5113495bSYour Name 	uint32_t val;
181*5113495bSYour Name };
182*5113495bSYour Name 
183*5113495bSYour Name /**
184*5113495bSYour Name  * union hal_tx_ppe_pri2tid_map0_config - Configure ppe INT_PRI to tid map
185*5113495bSYour Name  * @int_pri0: INT_PRI_0
186*5113495bSYour Name  * @int_pri1: INT_PRI_1
187*5113495bSYour Name  * @int_pri2: INT_PRI_2
188*5113495bSYour Name  * @int_pri3: INT_PRI_3
189*5113495bSYour Name  * @int_pri4: INT_PRI_4
190*5113495bSYour Name  * @int_pri5: INT_PRI_5
191*5113495bSYour Name  * @int_pri6: INT_PRI_6
192*5113495bSYour Name  * @int_pri7: INT_PRI_7
193*5113495bSYour Name  * @int_pri8: INT_PRI_8
194*5113495bSYour Name  * @int_pri9: INT_PRI_9
195*5113495bSYour Name  * @val: aggregate 32-bit value
196*5113495bSYour Name  */
197*5113495bSYour Name union hal_tx_ppe_pri2tid_map0_config {
198*5113495bSYour Name 	struct {
199*5113495bSYour Name 		uint32_t int_pri0:3,
200*5113495bSYour Name 			 int_pri1:3,
201*5113495bSYour Name 			 int_pri2:3,
202*5113495bSYour Name 			 int_pri3:3,
203*5113495bSYour Name 			 int_pri4:3,
204*5113495bSYour Name 			 int_pri5:3,
205*5113495bSYour Name 			 int_pri6:3,
206*5113495bSYour Name 			 int_pri7:3,
207*5113495bSYour Name 			 int_pri8:3,
208*5113495bSYour Name 			 int_pri9:3;
209*5113495bSYour Name 	};
210*5113495bSYour Name 	uint32_t val;
211*5113495bSYour Name };
212*5113495bSYour Name 
213*5113495bSYour Name /**
214*5113495bSYour Name  * union hal_tx_ppe_pri2tid_map1_config - Configure ppe INT_PRI to tid map
215*5113495bSYour Name  * @int_pri10: INT_PRI_10
216*5113495bSYour Name  * @int_pri11: INT_PRI_11
217*5113495bSYour Name  * @int_pri12: INT_PRI_12
218*5113495bSYour Name  * @int_pri13: INT_PRI_13
219*5113495bSYour Name  * @int_pri14: INT_PRI_14
220*5113495bSYour Name  * @int_pri15: INT_PRI_15
221*5113495bSYour Name  * @val: aggregate 32-bit value
222*5113495bSYour Name  */
223*5113495bSYour Name union hal_tx_ppe_pri2tid_map1_config {
224*5113495bSYour Name 	struct {
225*5113495bSYour Name 		uint32_t int_pri10:3,
226*5113495bSYour Name 			 int_pri11:3,
227*5113495bSYour Name 			 int_pri12:3,
228*5113495bSYour Name 			 int_pri13:3,
229*5113495bSYour Name 			 int_pri14:3,
230*5113495bSYour Name 			 int_pri15:3;
231*5113495bSYour Name 	};
232*5113495bSYour Name 	uint32_t val;
233*5113495bSYour Name };
234*5113495bSYour Name 
235*5113495bSYour Name /*---------------------------------------------------------------------------
236*5113495bSYour Name  *  Function declarations and documentation
237*5113495bSYour Name  * ---------------------------------------------------------------------------
238*5113495bSYour Name  */
239*5113495bSYour Name 
240*5113495bSYour Name /*---------------------------------------------------------------------------
241*5113495bSYour Name  *  TCL Descriptor accessor APIs
242*5113495bSYour Name  *---------------------------------------------------------------------------
243*5113495bSYour Name  */
244*5113495bSYour Name 
245*5113495bSYour Name /**
246*5113495bSYour Name  * hal_tx_desc_set_tx_notify_frame() - Set TX notify_frame field in Tx desc
247*5113495bSYour Name  * @desc: Handle to Tx Descriptor
248*5113495bSYour Name  * @val: Value to be set
249*5113495bSYour Name  *
250*5113495bSYour Name  * Return: None
251*5113495bSYour Name  */
hal_tx_desc_set_tx_notify_frame(void * desc,uint8_t val)252*5113495bSYour Name static inline void hal_tx_desc_set_tx_notify_frame(void *desc,
253*5113495bSYour Name 						   uint8_t val)
254*5113495bSYour Name {
255*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, TX_NOTIFY_FRAME) |=
256*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, TX_NOTIFY_FRAME, val);
257*5113495bSYour Name }
258*5113495bSYour Name 
259*5113495bSYour Name /**
260*5113495bSYour Name  * hal_tx_desc_set_flow_override_enable() - Set flow_override_enable field
261*5113495bSYour Name  * @desc: Handle to Tx Descriptor
262*5113495bSYour Name  * @val: Value to be set
263*5113495bSYour Name  *
264*5113495bSYour Name  * Return: None
265*5113495bSYour Name  */
hal_tx_desc_set_flow_override_enable(void * desc,uint8_t val)266*5113495bSYour Name static inline void  hal_tx_desc_set_flow_override_enable(void *desc,
267*5113495bSYour Name 							 uint8_t val)
268*5113495bSYour Name {
269*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, FLOW_OVERRIDE_ENABLE) |=
270*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, FLOW_OVERRIDE_ENABLE, val);
271*5113495bSYour Name }
272*5113495bSYour Name 
273*5113495bSYour Name /**
274*5113495bSYour Name  * hal_tx_desc_set_flow_override() - Set flow_override field in TX desc
275*5113495bSYour Name  * @desc: Handle to Tx Descriptor
276*5113495bSYour Name  * @val: Value to be set
277*5113495bSYour Name  *
278*5113495bSYour Name  * Return: None
279*5113495bSYour Name  */
hal_tx_desc_set_flow_override(void * desc,uint8_t val)280*5113495bSYour Name static inline void  hal_tx_desc_set_flow_override(void *desc,
281*5113495bSYour Name 						  uint8_t val)
282*5113495bSYour Name {
283*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, FLOW_OVERRIDE) |=
284*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, FLOW_OVERRIDE, val);
285*5113495bSYour Name }
286*5113495bSYour Name 
287*5113495bSYour Name /**
288*5113495bSYour Name  * hal_tx_desc_set_who_classify_info_sel() - Set who_classify_info_sel field
289*5113495bSYour Name  * @desc: Handle to Tx Descriptor
290*5113495bSYour Name  * @val: Value to be set
291*5113495bSYour Name  *
292*5113495bSYour Name  * Return: None
293*5113495bSYour Name  */
hal_tx_desc_set_who_classify_info_sel(void * desc,uint8_t val)294*5113495bSYour Name static inline void  hal_tx_desc_set_who_classify_info_sel(void *desc,
295*5113495bSYour Name 							  uint8_t val)
296*5113495bSYour Name {
297*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, WHO_CLASSIFY_INFO_SEL) |=
298*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, WHO_CLASSIFY_INFO_SEL, val);
299*5113495bSYour Name }
300*5113495bSYour Name 
301*5113495bSYour Name /**
302*5113495bSYour Name  * hal_tx_desc_set_buf_length() - Set Data length in bytes in Tx Descriptor
303*5113495bSYour Name  * @desc: Handle to Tx Descriptor
304*5113495bSYour Name  * @data_length: MSDU length in case of direct descriptor.
305*5113495bSYour Name  *              Length of link extension descriptor in case of Link extension
306*5113495bSYour Name  *              descriptor.Includes the length of Metadata
307*5113495bSYour Name  * Return: None
308*5113495bSYour Name  */
hal_tx_desc_set_buf_length(void * desc,uint16_t data_length)309*5113495bSYour Name static inline void  hal_tx_desc_set_buf_length(void *desc,
310*5113495bSYour Name 					       uint16_t data_length)
311*5113495bSYour Name {
312*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, DATA_LENGTH) |=
313*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, DATA_LENGTH, data_length);
314*5113495bSYour Name }
315*5113495bSYour Name 
316*5113495bSYour Name /**
317*5113495bSYour Name  * hal_tx_desc_set_buf_offset() - Sets Packet Offset field in Tx descriptor
318*5113495bSYour Name  * @desc: Handle to Tx Descriptor
319*5113495bSYour Name  * @offset: Packet offset from Metadata in case of direct buffer descriptor.
320*5113495bSYour Name  *
321*5113495bSYour Name  * Return: void
322*5113495bSYour Name  */
hal_tx_desc_set_buf_offset(void * desc,uint8_t offset)323*5113495bSYour Name static inline void hal_tx_desc_set_buf_offset(void *desc,
324*5113495bSYour Name 					      uint8_t offset)
325*5113495bSYour Name {
326*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, PACKET_OFFSET) |=
327*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, PACKET_OFFSET, offset);
328*5113495bSYour Name }
329*5113495bSYour Name 
330*5113495bSYour Name /**
331*5113495bSYour Name  * hal_tx_desc_set_l4_checksum_en() -  Set TCP/IP checksum enable flags
332*5113495bSYour Name  *                                     Tx Descriptor for MSDU_buffer type
333*5113495bSYour Name  * @desc: Handle to Tx Descriptor
334*5113495bSYour Name  * @en: UDP/TCP over ipv4/ipv6 checksum enable flags (5 bits)
335*5113495bSYour Name  *
336*5113495bSYour Name  * Return: void
337*5113495bSYour Name  */
hal_tx_desc_set_l4_checksum_en(void * desc,uint8_t en)338*5113495bSYour Name static inline void hal_tx_desc_set_l4_checksum_en(void *desc,
339*5113495bSYour Name 						  uint8_t en)
340*5113495bSYour Name {
341*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, IPV4_CHECKSUM_EN) |=
342*5113495bSYour Name 		(HAL_TX_SM(TCL_DATA_CMD, UDP_OVER_IPV4_CHECKSUM_EN, en) |
343*5113495bSYour Name 		 HAL_TX_SM(TCL_DATA_CMD, UDP_OVER_IPV6_CHECKSUM_EN, en) |
344*5113495bSYour Name 		 HAL_TX_SM(TCL_DATA_CMD, TCP_OVER_IPV4_CHECKSUM_EN, en) |
345*5113495bSYour Name 		 HAL_TX_SM(TCL_DATA_CMD, TCP_OVER_IPV6_CHECKSUM_EN, en));
346*5113495bSYour Name }
347*5113495bSYour Name 
348*5113495bSYour Name /**
349*5113495bSYour Name  * hal_tx_desc_set_l3_checksum_en() -  Set IPv4 checksum enable flag in
350*5113495bSYour Name  *                                     Tx Descriptor for MSDU_buffer type
351*5113495bSYour Name  * @desc: Handle to Tx Descriptor
352*5113495bSYour Name  * @en: ipv4 checksum enable flags
353*5113495bSYour Name  *
354*5113495bSYour Name  * Return: void
355*5113495bSYour Name  */
hal_tx_desc_set_l3_checksum_en(void * desc,uint8_t en)356*5113495bSYour Name static inline void hal_tx_desc_set_l3_checksum_en(void *desc,
357*5113495bSYour Name 						  uint8_t en)
358*5113495bSYour Name {
359*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, IPV4_CHECKSUM_EN) |=
360*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, IPV4_CHECKSUM_EN, en);
361*5113495bSYour Name }
362*5113495bSYour Name 
363*5113495bSYour Name /**
364*5113495bSYour Name  * hal_tx_desc_set_fw_metadata() - Sets the metadata that is part of TCL descriptor
365*5113495bSYour Name  * @desc: Handle to Tx Descriptor
366*5113495bSYour Name  * @metadata: Metadata to be sent to Firmware
367*5113495bSYour Name  *
368*5113495bSYour Name  * Return: void
369*5113495bSYour Name  */
hal_tx_desc_set_fw_metadata(void * desc,uint16_t metadata)370*5113495bSYour Name static inline void hal_tx_desc_set_fw_metadata(void *desc,
371*5113495bSYour Name 					       uint16_t metadata)
372*5113495bSYour Name {
373*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, TCL_CMD_NUMBER) |=
374*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, TCL_CMD_NUMBER, metadata);
375*5113495bSYour Name }
376*5113495bSYour Name 
377*5113495bSYour Name /**
378*5113495bSYour Name  * hal_tx_desc_set_to_fw() - Set To_FW bit in Tx Descriptor.
379*5113495bSYour Name  * @desc: Handle to Tx Descriptor
380*5113495bSYour Name  * @to_fw: if set, Forward packet to FW along with classification result
381*5113495bSYour Name  *
382*5113495bSYour Name  * Return: void
383*5113495bSYour Name  */
hal_tx_desc_set_to_fw(void * desc,uint8_t to_fw)384*5113495bSYour Name static inline void hal_tx_desc_set_to_fw(void *desc, uint8_t to_fw)
385*5113495bSYour Name {
386*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, TO_FW) |=
387*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, TO_FW, to_fw);
388*5113495bSYour Name }
389*5113495bSYour Name 
390*5113495bSYour Name /**
391*5113495bSYour Name  * hal_tx_desc_set_hlos_tid() - Set the TID value (override DSCP/PCP fields in
392*5113495bSYour Name  *                              frame) to be used for Tx Frame
393*5113495bSYour Name  * @desc: Handle to Tx Descriptor
394*5113495bSYour Name  * @hlos_tid: HLOS TID
395*5113495bSYour Name  *
396*5113495bSYour Name  * Return: void
397*5113495bSYour Name  */
hal_tx_desc_set_hlos_tid(void * desc,uint8_t hlos_tid)398*5113495bSYour Name static inline void hal_tx_desc_set_hlos_tid(void *desc,
399*5113495bSYour Name 					    uint8_t hlos_tid)
400*5113495bSYour Name {
401*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, HLOS_TID) |=
402*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, HLOS_TID, hlos_tid);
403*5113495bSYour Name 
404*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, HLOS_TID_OVERWRITE) |=
405*5113495bSYour Name 	   HAL_TX_SM(TCL_DATA_CMD, HLOS_TID_OVERWRITE, 1);
406*5113495bSYour Name }
407*5113495bSYour Name 
408*5113495bSYour Name /**
409*5113495bSYour Name  * hal_tx_desc_sync() - Commit the descriptor to Hardware
410*5113495bSYour Name  * @hal_tx_desc_cached: Cached descriptor that software maintains
411*5113495bSYour Name  * @hw_desc: Hardware descriptor to be updated
412*5113495bSYour Name  * @num_bytes: descriptor size
413*5113495bSYour Name  */
hal_tx_desc_sync(void * hal_tx_desc_cached,void * hw_desc,uint8_t num_bytes)414*5113495bSYour Name static inline void hal_tx_desc_sync(void *hal_tx_desc_cached,
415*5113495bSYour Name 				    void *hw_desc, uint8_t num_bytes)
416*5113495bSYour Name {
417*5113495bSYour Name 	qdf_mem_copy(hw_desc, hal_tx_desc_cached, num_bytes);
418*5113495bSYour Name }
419*5113495bSYour Name 
420*5113495bSYour Name /**
421*5113495bSYour Name  * hal_tx_desc_set_vdev_id() - set vdev id to the descriptor to Hardware
422*5113495bSYour Name  * @desc: Cached descriptor that software maintains
423*5113495bSYour Name  * @vdev_id: vdev id
424*5113495bSYour Name  */
hal_tx_desc_set_vdev_id(void * desc,uint8_t vdev_id)425*5113495bSYour Name static inline void hal_tx_desc_set_vdev_id(void *desc, uint8_t vdev_id)
426*5113495bSYour Name {
427*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, VDEV_ID) |=
428*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, VDEV_ID, vdev_id);
429*5113495bSYour Name }
430*5113495bSYour Name 
431*5113495bSYour Name /**
432*5113495bSYour Name  * hal_tx_desc_set_bank_id() - set bank id to the descriptor to Hardware
433*5113495bSYour Name  * @desc: Cached descriptor that software maintains
434*5113495bSYour Name  * @bank_id: bank id
435*5113495bSYour Name  */
hal_tx_desc_set_bank_id(void * desc,uint8_t bank_id)436*5113495bSYour Name static inline void hal_tx_desc_set_bank_id(void *desc, uint8_t bank_id)
437*5113495bSYour Name {
438*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, BANK_ID) |=
439*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, BANK_ID, bank_id);
440*5113495bSYour Name }
441*5113495bSYour Name 
442*5113495bSYour Name /**
443*5113495bSYour Name  * hal_tx_desc_set_tcl_cmd_type() - set tcl command type to the descriptor
444*5113495bSYour Name  *                                  to Hardware
445*5113495bSYour Name  * @desc: Cached descriptor that software maintains
446*5113495bSYour Name  * @tcl_cmd_type: tcl command type
447*5113495bSYour Name  */
448*5113495bSYour Name static inline void
hal_tx_desc_set_tcl_cmd_type(void * desc,uint8_t tcl_cmd_type)449*5113495bSYour Name hal_tx_desc_set_tcl_cmd_type(void *desc, uint8_t tcl_cmd_type)
450*5113495bSYour Name {
451*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, TCL_CMD_TYPE) |=
452*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, TCL_CMD_TYPE, tcl_cmd_type);
453*5113495bSYour Name }
454*5113495bSYour Name 
455*5113495bSYour Name /**
456*5113495bSYour Name  * hal_tx_desc_set_lmac_id_be() - set lmac id to the descriptor to Hardware
457*5113495bSYour Name  * @hal_soc_hdl: hal soc handle
458*5113495bSYour Name  * @desc: Cached descriptor that software maintains
459*5113495bSYour Name  * @lmac_id: lmac id
460*5113495bSYour Name  */
461*5113495bSYour Name static inline void
hal_tx_desc_set_lmac_id_be(hal_soc_handle_t hal_soc_hdl,void * desc,uint8_t lmac_id)462*5113495bSYour Name hal_tx_desc_set_lmac_id_be(hal_soc_handle_t hal_soc_hdl, void *desc,
463*5113495bSYour Name 			   uint8_t lmac_id)
464*5113495bSYour Name {
465*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, PMAC_ID) |=
466*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, PMAC_ID, lmac_id);
467*5113495bSYour Name }
468*5113495bSYour Name 
469*5113495bSYour Name /**
470*5113495bSYour Name  * hal_tx_desc_set_search_index_be() - set search index to the
471*5113495bSYour Name  *                                     descriptor to Hardware
472*5113495bSYour Name  * @hal_soc_hdl: hal soc handle
473*5113495bSYour Name  * @desc: Cached descriptor that software maintains
474*5113495bSYour Name  * @search_index: search index
475*5113495bSYour Name  */
476*5113495bSYour Name static inline void
hal_tx_desc_set_search_index_be(hal_soc_handle_t hal_soc_hdl,void * desc,uint32_t search_index)477*5113495bSYour Name hal_tx_desc_set_search_index_be(hal_soc_handle_t hal_soc_hdl, void *desc,
478*5113495bSYour Name 				uint32_t search_index)
479*5113495bSYour Name {
480*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, SEARCH_INDEX) |=
481*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, SEARCH_INDEX, search_index);
482*5113495bSYour Name }
483*5113495bSYour Name 
484*5113495bSYour Name /**
485*5113495bSYour Name  * hal_tx_desc_set_cache_set_num() - set cache set num to the
486*5113495bSYour Name  *                                   descriptor to Hardware
487*5113495bSYour Name  * @hal_soc_hdl: hal soc handle
488*5113495bSYour Name  * @desc: Cached descriptor that software maintains
489*5113495bSYour Name  * @cache_num: cache number
490*5113495bSYour Name  */
491*5113495bSYour Name static inline void
hal_tx_desc_set_cache_set_num(hal_soc_handle_t hal_soc_hdl,void * desc,uint8_t cache_num)492*5113495bSYour Name hal_tx_desc_set_cache_set_num(hal_soc_handle_t hal_soc_hdl, void *desc,
493*5113495bSYour Name 			      uint8_t cache_num)
494*5113495bSYour Name {
495*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, CACHE_SET_NUM) |=
496*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, CACHE_SET_NUM, cache_num);
497*5113495bSYour Name }
498*5113495bSYour Name 
499*5113495bSYour Name /**
500*5113495bSYour Name  * hal_tx_desc_set_index_lookup_override() - set lookup override num to the
501*5113495bSYour Name  *                                           descriptor to Hardware
502*5113495bSYour Name  * @hal_soc_hdl: hal soc handle
503*5113495bSYour Name  * @desc: Cached descriptor that software maintains
504*5113495bSYour Name  * @num: set number
505*5113495bSYour Name  */
506*5113495bSYour Name static inline void
hal_tx_desc_set_index_lookup_override(hal_soc_handle_t hal_soc_hdl,void * desc,uint8_t num)507*5113495bSYour Name hal_tx_desc_set_index_lookup_override(hal_soc_handle_t hal_soc_hdl,
508*5113495bSYour Name 				      void *desc, uint8_t num)
509*5113495bSYour Name {
510*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD, INDEX_LOOKUP_OVERRIDE) |=
511*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, INDEX_LOOKUP_OVERRIDE, num);
512*5113495bSYour Name }
513*5113495bSYour Name 
514*5113495bSYour Name /*---------------------------------------------------------------------------
515*5113495bSYour Name  * WBM Descriptor accessor APIs for Tx completions
516*5113495bSYour Name  * ---------------------------------------------------------------------------
517*5113495bSYour Name  */
518*5113495bSYour Name 
519*5113495bSYour Name /**
520*5113495bSYour Name  * hal_tx_get_wbm_sw0_bm_id() - Get the BM ID for first tx completion ring
521*5113495bSYour Name  *
522*5113495bSYour Name  * Return: BM ID for first tx completion ring
523*5113495bSYour Name  */
hal_tx_get_wbm_sw0_bm_id(void)524*5113495bSYour Name static inline uint32_t hal_tx_get_wbm_sw0_bm_id(void)
525*5113495bSYour Name {
526*5113495bSYour Name 	return HAL_BE_WBM_SW0_BM_ID;
527*5113495bSYour Name }
528*5113495bSYour Name 
529*5113495bSYour Name /**
530*5113495bSYour Name  * hal_tx_comp_get_desc_id() - Get TX descriptor id within comp descriptor
531*5113495bSYour Name  * @hal_desc: completion ring descriptor pointer
532*5113495bSYour Name  *
533*5113495bSYour Name  * This function will tx descriptor id, cookie, within hardware completion
534*5113495bSYour Name  * descriptor. For cases when cookie conversion is disabled, the sw_cookie
535*5113495bSYour Name  * is present in the 2nd DWORD.
536*5113495bSYour Name  *
537*5113495bSYour Name  * Return: cookie
538*5113495bSYour Name  */
hal_tx_comp_get_desc_id(void * hal_desc)539*5113495bSYour Name static inline uint32_t hal_tx_comp_get_desc_id(void *hal_desc)
540*5113495bSYour Name {
541*5113495bSYour Name 	uint32_t comp_desc =
542*5113495bSYour Name 		*(uint32_t *)(((uint8_t *)hal_desc) +
543*5113495bSYour Name 			       BUFFER_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET);
544*5113495bSYour Name 
545*5113495bSYour Name 	/* Cookie is placed on 2nd word */
546*5113495bSYour Name 	return (comp_desc & BUFFER_ADDR_INFO_SW_BUFFER_COOKIE_MASK) >>
547*5113495bSYour Name 		BUFFER_ADDR_INFO_SW_BUFFER_COOKIE_LSB;
548*5113495bSYour Name }
549*5113495bSYour Name 
550*5113495bSYour Name /**
551*5113495bSYour Name  * hal_tx_comp_get_paddr() - Get paddr within comp descriptor
552*5113495bSYour Name  * @hal_desc: completion ring descriptor pointer
553*5113495bSYour Name  *
554*5113495bSYour Name  * This function will get buffer physical address within hardware completion
555*5113495bSYour Name  * descriptor
556*5113495bSYour Name  *
557*5113495bSYour Name  * Return: Buffer physical address
558*5113495bSYour Name  */
hal_tx_comp_get_paddr(void * hal_desc)559*5113495bSYour Name static inline qdf_dma_addr_t hal_tx_comp_get_paddr(void *hal_desc)
560*5113495bSYour Name {
561*5113495bSYour Name 	uint32_t paddr_lo;
562*5113495bSYour Name 	uint32_t paddr_hi;
563*5113495bSYour Name 
564*5113495bSYour Name 	paddr_lo = *(uint32_t *)(((uint8_t *)hal_desc) +
565*5113495bSYour Name 			BUFFER_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET);
566*5113495bSYour Name 
567*5113495bSYour Name 	paddr_hi = *(uint32_t *)(((uint8_t *)hal_desc) +
568*5113495bSYour Name 			BUFFER_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET);
569*5113495bSYour Name 
570*5113495bSYour Name 	paddr_hi = (paddr_hi & BUFFER_ADDR_INFO_BUFFER_ADDR_39_32_MASK) >>
571*5113495bSYour Name 		BUFFER_ADDR_INFO_BUFFER_ADDR_39_32_LSB;
572*5113495bSYour Name 
573*5113495bSYour Name 	return (qdf_dma_addr_t)(paddr_lo | (((uint64_t)paddr_hi) << 32));
574*5113495bSYour Name }
575*5113495bSYour Name 
576*5113495bSYour Name #ifdef DP_HW_COOKIE_CONVERT_EXCEPTION
577*5113495bSYour Name /* HW set dowrd-2 bit30 to 1 if HW CC is done */
578*5113495bSYour Name #define HAL_WBM2SW_COMPLETION_RING_TX_CC_DONE_OFFSET 0x8
579*5113495bSYour Name #define HAL_WBM2SW_COMPLETION_RING_TX_CC_DONE_MASK 0x40000000
580*5113495bSYour Name #define HAL_WBM2SW_COMPLETION_RING_TX_CC_DONE_LSB 0x1E
581*5113495bSYour Name /**
582*5113495bSYour Name  * hal_tx_comp_get_cookie_convert_done() - Get cookie conversion done flag
583*5113495bSYour Name  * @hal_desc: completion ring descriptor pointer
584*5113495bSYour Name  *
585*5113495bSYour Name  * This function will get the bit value that indicate HW cookie
586*5113495bSYour Name  * conversion done or not
587*5113495bSYour Name  *
588*5113495bSYour Name  * Return: 1 - HW cookie conversion done, 0 - not
589*5113495bSYour Name  */
hal_tx_comp_get_cookie_convert_done(void * hal_desc)590*5113495bSYour Name static inline uint8_t hal_tx_comp_get_cookie_convert_done(void *hal_desc)
591*5113495bSYour Name {
592*5113495bSYour Name 	return HAL_TX_DESC_GET(hal_desc, HAL_WBM2SW_COMPLETION_RING_TX,
593*5113495bSYour Name 			       CC_DONE);
594*5113495bSYour Name }
595*5113495bSYour Name #endif
596*5113495bSYour Name 
597*5113495bSYour Name /**
598*5113495bSYour Name  * hal_tx_comp_set_desc_va_63_32() - Set bit 32~63 value for 64 bit VA
599*5113495bSYour Name  * @hal_desc: completion ring descriptor pointer
600*5113495bSYour Name  * @val: value to be set
601*5113495bSYour Name  *
602*5113495bSYour Name  * Return: None
603*5113495bSYour Name  */
hal_tx_comp_set_desc_va_63_32(void * hal_desc,uint32_t val)604*5113495bSYour Name static inline void hal_tx_comp_set_desc_va_63_32(void *hal_desc, uint32_t val)
605*5113495bSYour Name {
606*5113495bSYour Name 	HAL_SET_FLD(hal_desc,
607*5113495bSYour Name 		    WBM2SW_COMPLETION_RING_TX,
608*5113495bSYour Name 		    BUFFER_VIRT_ADDR_63_32) = val;
609*5113495bSYour Name }
610*5113495bSYour Name 
611*5113495bSYour Name /**
612*5113495bSYour Name  * hal_tx_comp_get_desc_va() - Get Desc virtual address within completion Desc
613*5113495bSYour Name  * @hal_desc: completion ring descriptor pointer
614*5113495bSYour Name  *
615*5113495bSYour Name  * This function will get the TX Desc virtual address
616*5113495bSYour Name  *
617*5113495bSYour Name  * Return: TX desc virtual address
618*5113495bSYour Name  */
hal_tx_comp_get_desc_va(void * hal_desc)619*5113495bSYour Name static inline uint64_t hal_tx_comp_get_desc_va(void *hal_desc)
620*5113495bSYour Name {
621*5113495bSYour Name 	uint64_t va_from_desc;
622*5113495bSYour Name 
623*5113495bSYour Name 	va_from_desc = qdf_le64_to_cpu(HAL_TX_DESC_GET(hal_desc,
624*5113495bSYour Name 				       WBM2SW_COMPLETION_RING_TX,
625*5113495bSYour Name 				       BUFFER_VIRT_ADDR_31_0) |
626*5113495bSYour Name 				       (((uint64_t)HAL_TX_DESC_GET(
627*5113495bSYour Name 				       hal_desc,
628*5113495bSYour Name 				       WBM2SW_COMPLETION_RING_TX,
629*5113495bSYour Name 				       BUFFER_VIRT_ADDR_63_32)) << 32));
630*5113495bSYour Name 
631*5113495bSYour Name 	return va_from_desc;
632*5113495bSYour Name }
633*5113495bSYour Name 
634*5113495bSYour Name /*---------------------------------------------------------------------------
635*5113495bSYour Name  * TX BANK register accessor APIs
636*5113495bSYour Name  * ---------------------------------------------------------------------------
637*5113495bSYour Name  */
638*5113495bSYour Name 
639*5113495bSYour Name /**
640*5113495bSYour Name  * hal_tx_get_num_tcl_banks() - Get number of banks for target
641*5113495bSYour Name  * @hal_soc_hdl: HAL soc handle
642*5113495bSYour Name  *
643*5113495bSYour Name  * Return: None
644*5113495bSYour Name  */
645*5113495bSYour Name static inline uint8_t
hal_tx_get_num_tcl_banks(hal_soc_handle_t hal_soc_hdl)646*5113495bSYour Name hal_tx_get_num_tcl_banks(hal_soc_handle_t hal_soc_hdl)
647*5113495bSYour Name {
648*5113495bSYour Name 	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
649*5113495bSYour Name 	int  hal_banks = 0;
650*5113495bSYour Name 
651*5113495bSYour Name 	if (hal_soc->ops->hal_tx_get_num_tcl_banks) {
652*5113495bSYour Name 		hal_banks =  hal_soc->ops->hal_tx_get_num_tcl_banks();
653*5113495bSYour Name 		hal_banks -= HAL_TX_NUM_RESERVED_BANKS;
654*5113495bSYour Name 		hal_banks = (hal_banks < 0) ? 0 : hal_banks;
655*5113495bSYour Name 	}
656*5113495bSYour Name 
657*5113495bSYour Name 	return hal_banks;
658*5113495bSYour Name }
659*5113495bSYour Name 
660*5113495bSYour Name /**
661*5113495bSYour Name  * hal_tx_populate_bank_register() - populate the bank register with
662*5113495bSYour Name  *                                   the software configs.
663*5113495bSYour Name  * @hal_soc_hdl: HAL soc handle
664*5113495bSYour Name  * @config: bank config
665*5113495bSYour Name  * @bank_id: bank id to be configured
666*5113495bSYour Name  *
667*5113495bSYour Name  * Returns: None
668*5113495bSYour Name  */
669*5113495bSYour Name static inline void
hal_tx_populate_bank_register(hal_soc_handle_t hal_soc_hdl,union hal_tx_bank_config * config,uint8_t bank_id)670*5113495bSYour Name hal_tx_populate_bank_register(hal_soc_handle_t hal_soc_hdl,
671*5113495bSYour Name 			      union hal_tx_bank_config *config,
672*5113495bSYour Name 			      uint8_t bank_id)
673*5113495bSYour Name {
674*5113495bSYour Name 	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
675*5113495bSYour Name 
676*5113495bSYour Name 	hal_soc->ops->hal_tx_populate_bank_register(hal_soc_hdl, config,
677*5113495bSYour Name 						    bank_id);
678*5113495bSYour Name }
679*5113495bSYour Name 
680*5113495bSYour Name #ifdef DP_TX_IMPLICIT_RBM_MAPPING
681*5113495bSYour Name 
682*5113495bSYour Name #define RBM_MAPPING_BMSK HWIO_TCL_R0_RBM_MAPPING0_SW2TCL1_RING_BMSK
683*5113495bSYour Name #define RBM_MAPPING_SHFT HWIO_TCL_R0_RBM_MAPPING0_SW2TCL2_RING_SHFT
684*5113495bSYour Name 
685*5113495bSYour Name #define RBM_PPE2TCL_OFFSET \
686*5113495bSYour Name 			(HWIO_TCL_R0_RBM_MAPPING0_PPE2TCL1_RING_SHFT >> 2)
687*5113495bSYour Name #define RBM_TCL_CMD_CREDIT_OFFSET \
688*5113495bSYour Name 			(HWIO_TCL_R0_RBM_MAPPING0_SW2TCL_CREDIT_RING_SHFT >> 2)
689*5113495bSYour Name 
690*5113495bSYour Name /**
691*5113495bSYour Name  * hal_tx_config_rbm_mapping_be() - Update return buffer manager ring id
692*5113495bSYour Name  * @hal_soc_hdl: HAL SoC context
693*5113495bSYour Name  * @hal_ring_hdl: Source ring pointer
694*5113495bSYour Name  * @rbm_id: return buffer manager ring id
695*5113495bSYour Name  *
696*5113495bSYour Name  * Return: void
697*5113495bSYour Name  */
698*5113495bSYour Name static inline void
hal_tx_config_rbm_mapping_be(hal_soc_handle_t hal_soc_hdl,hal_ring_handle_t hal_ring_hdl,uint8_t rbm_id)699*5113495bSYour Name hal_tx_config_rbm_mapping_be(hal_soc_handle_t hal_soc_hdl,
700*5113495bSYour Name 			     hal_ring_handle_t hal_ring_hdl,
701*5113495bSYour Name 			     uint8_t rbm_id)
702*5113495bSYour Name {
703*5113495bSYour Name 	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
704*5113495bSYour Name 
705*5113495bSYour Name 	hal_soc->ops->hal_tx_config_rbm_mapping_be(hal_soc_hdl, hal_ring_hdl,
706*5113495bSYour Name 						   rbm_id);
707*5113495bSYour Name }
708*5113495bSYour Name #else
709*5113495bSYour Name static inline void
hal_tx_config_rbm_mapping_be(hal_soc_handle_t hal_soc_hdl,hal_ring_handle_t hal_ring_hdl,uint8_t rbm_id)710*5113495bSYour Name hal_tx_config_rbm_mapping_be(hal_soc_handle_t hal_soc_hdl,
711*5113495bSYour Name 			     hal_ring_handle_t hal_ring_hdl,
712*5113495bSYour Name 			     uint8_t rbm_id)
713*5113495bSYour Name {
714*5113495bSYour Name }
715*5113495bSYour Name #endif
716*5113495bSYour Name 
717*5113495bSYour Name /**
718*5113495bSYour Name  * hal_tx_desc_set_buf_addr_be() - Fill Buffer Address information in Tx Desc
719*5113495bSYour Name  * @hal_soc_hdl: HAL SoC context
720*5113495bSYour Name  * @desc: Handle to Tx Descriptor
721*5113495bSYour Name  * @paddr: Physical Address
722*5113495bSYour Name  * @rbm_id: Return Buffer Manager ID
723*5113495bSYour Name  * @desc_id: Descriptor ID
724*5113495bSYour Name  * @type: 0 - Address points to a MSDU buffer
725*5113495bSYour Name  *        1 - Address points to MSDU extension descriptor
726*5113495bSYour Name  *
727*5113495bSYour Name  * Return: void
728*5113495bSYour Name  */
729*5113495bSYour Name #ifdef DP_TX_IMPLICIT_RBM_MAPPING
730*5113495bSYour Name static inline void
hal_tx_desc_set_buf_addr_be(hal_soc_handle_t hal_soc_hdl,void * desc,dma_addr_t paddr,uint8_t rbm_id,uint32_t desc_id,uint8_t type)731*5113495bSYour Name hal_tx_desc_set_buf_addr_be(hal_soc_handle_t hal_soc_hdl, void *desc,
732*5113495bSYour Name 			    dma_addr_t paddr, uint8_t rbm_id,
733*5113495bSYour Name 			    uint32_t desc_id, uint8_t type)
734*5113495bSYour Name {
735*5113495bSYour Name 	/* Set buffer_addr_info.buffer_addr_31_0 */
736*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD,
737*5113495bSYour Name 		    BUF_ADDR_INFO_BUFFER_ADDR_31_0) =
738*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, BUF_ADDR_INFO_BUFFER_ADDR_31_0, paddr);
739*5113495bSYour Name 
740*5113495bSYour Name 	/* Set buffer_addr_info.buffer_addr_39_32 */
741*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD,
742*5113495bSYour Name 		    BUF_ADDR_INFO_BUFFER_ADDR_39_32) |=
743*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, BUF_ADDR_INFO_BUFFER_ADDR_39_32,
744*5113495bSYour Name 			  (((uint64_t)paddr) >> 32));
745*5113495bSYour Name 
746*5113495bSYour Name 	/* Set buffer_addr_info.sw_buffer_cookie = desc_id */
747*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD,
748*5113495bSYour Name 		    BUF_ADDR_INFO_SW_BUFFER_COOKIE) |=
749*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, BUF_ADDR_INFO_SW_BUFFER_COOKIE,
750*5113495bSYour Name 			  desc_id);
751*5113495bSYour Name 
752*5113495bSYour Name 	/* Set  Buffer or Ext Descriptor Type */
753*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD,
754*5113495bSYour Name 		    BUF_OR_EXT_DESC_TYPE) |=
755*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, BUF_OR_EXT_DESC_TYPE, type);
756*5113495bSYour Name }
757*5113495bSYour Name #else
758*5113495bSYour Name static inline void
hal_tx_desc_set_buf_addr_be(hal_soc_handle_t hal_soc_hdl,void * desc,dma_addr_t paddr,uint8_t rbm_id,uint32_t desc_id,uint8_t type)759*5113495bSYour Name hal_tx_desc_set_buf_addr_be(hal_soc_handle_t hal_soc_hdl, void *desc,
760*5113495bSYour Name 			    dma_addr_t paddr, uint8_t rbm_id,
761*5113495bSYour Name 			    uint32_t desc_id, uint8_t type)
762*5113495bSYour Name {
763*5113495bSYour Name 	/* Set buffer_addr_info.buffer_addr_31_0 */
764*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD,
765*5113495bSYour Name 		    BUF_ADDR_INFO_BUFFER_ADDR_31_0) =
766*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, BUF_ADDR_INFO_BUFFER_ADDR_31_0, paddr);
767*5113495bSYour Name 
768*5113495bSYour Name 	/* Set buffer_addr_info.buffer_addr_39_32 */
769*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD,
770*5113495bSYour Name 		    BUF_ADDR_INFO_BUFFER_ADDR_39_32) |=
771*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, BUF_ADDR_INFO_BUFFER_ADDR_39_32,
772*5113495bSYour Name 			  (((uint64_t)paddr) >> 32));
773*5113495bSYour Name 
774*5113495bSYour Name 	/* Set buffer_addr_info.return_buffer_manager = rbm id */
775*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD,
776*5113495bSYour Name 		    BUF_ADDR_INFO_RETURN_BUFFER_MANAGER) |=
777*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD,
778*5113495bSYour Name 			  BUF_ADDR_INFO_RETURN_BUFFER_MANAGER, rbm_id);
779*5113495bSYour Name 
780*5113495bSYour Name 	/* Set buffer_addr_info.sw_buffer_cookie = desc_id */
781*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD,
782*5113495bSYour Name 		    BUF_ADDR_INFO_SW_BUFFER_COOKIE) |=
783*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, BUF_ADDR_INFO_SW_BUFFER_COOKIE,
784*5113495bSYour Name 			  desc_id);
785*5113495bSYour Name 
786*5113495bSYour Name 	/* Set  Buffer or Ext Descriptor Type */
787*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD,
788*5113495bSYour Name 		    BUF_OR_EXT_DESC_TYPE) |=
789*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD, BUF_OR_EXT_DESC_TYPE, type);
790*5113495bSYour Name }
791*5113495bSYour Name #endif
792*5113495bSYour Name 
793*5113495bSYour Name /**
794*5113495bSYour Name  * hal_tx_vdev_mismatch_routing_set() - set vdev mismatch exception routing
795*5113495bSYour Name  * @hal_soc_hdl: HAL SoC context
796*5113495bSYour Name  * @config: HAL_TX_VDEV_MISMATCH_TQM_NOTIFY - route via TQM
797*5113495bSYour Name  *          HAL_TX_VDEV_MISMATCH_FW_NOTIFY - route via FW
798*5113495bSYour Name  *
799*5113495bSYour Name  * Return: void
800*5113495bSYour Name  */
801*5113495bSYour Name #ifdef HWIO_TCL_R0_CMN_CONFIG_VDEVID_MISMATCH_EXCEPTION_BMSK
802*5113495bSYour Name static inline void
hal_tx_vdev_mismatch_routing_set(hal_soc_handle_t hal_soc_hdl,enum hal_tx_vdev_mismatch_notify config)803*5113495bSYour Name hal_tx_vdev_mismatch_routing_set(hal_soc_handle_t hal_soc_hdl,
804*5113495bSYour Name 				 enum hal_tx_vdev_mismatch_notify config)
805*5113495bSYour Name {
806*5113495bSYour Name 	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
807*5113495bSYour Name 
808*5113495bSYour Name 	hal_soc->ops->hal_tx_vdev_mismatch_routing_set(hal_soc_hdl, config);
809*5113495bSYour Name }
810*5113495bSYour Name #else
811*5113495bSYour Name static inline void
hal_tx_vdev_mismatch_routing_set(hal_soc_handle_t hal_soc_hdl,enum hal_tx_vdev_mismatch_notify config)812*5113495bSYour Name hal_tx_vdev_mismatch_routing_set(hal_soc_handle_t hal_soc_hdl,
813*5113495bSYour Name 				 enum hal_tx_vdev_mismatch_notify config)
814*5113495bSYour Name {
815*5113495bSYour Name }
816*5113495bSYour Name #endif
817*5113495bSYour Name 
818*5113495bSYour Name /**
819*5113495bSYour Name  * hal_tx_mcast_mlo_reinject_routing_set() - set MLO multicast reinject routing
820*5113495bSYour Name  * @hal_soc_hdl: HAL SoC context
821*5113495bSYour Name  * @config: HAL_TX_MCAST_MLO_REINJECT_FW_NOTIFY - route via FW
822*5113495bSYour Name  *          HAL_TX_MCAST_MLO_REINJECT_TQM_NOTIFY - route via TQM
823*5113495bSYour Name  *
824*5113495bSYour Name  * Return: void
825*5113495bSYour Name  */
826*5113495bSYour Name #if defined(HWIO_TCL_R0_CMN_CONFIG_MCAST_CMN_PN_SN_MLO_REINJECT_ENABLE_BMSK) && \
827*5113495bSYour Name 	defined(WLAN_MCAST_MLO) && !defined(CONFIG_MLO_SINGLE_DEV)
828*5113495bSYour Name static inline void
hal_tx_mcast_mlo_reinject_routing_set(hal_soc_handle_t hal_soc_hdl,enum hal_tx_mcast_mlo_reinject_notify config)829*5113495bSYour Name hal_tx_mcast_mlo_reinject_routing_set(
830*5113495bSYour Name 				hal_soc_handle_t hal_soc_hdl,
831*5113495bSYour Name 				enum hal_tx_mcast_mlo_reinject_notify config)
832*5113495bSYour Name {
833*5113495bSYour Name 	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
834*5113495bSYour Name 	hal_soc->ops->hal_tx_mcast_mlo_reinject_routing_set(hal_soc_hdl,
835*5113495bSYour Name 							    config);
836*5113495bSYour Name }
837*5113495bSYour Name #else
838*5113495bSYour Name static inline void
hal_tx_mcast_mlo_reinject_routing_set(hal_soc_handle_t hal_soc_hdl,enum hal_tx_mcast_mlo_reinject_notify config)839*5113495bSYour Name hal_tx_mcast_mlo_reinject_routing_set(
840*5113495bSYour Name 				hal_soc_handle_t hal_soc_hdl,
841*5113495bSYour Name 				enum hal_tx_mcast_mlo_reinject_notify config)
842*5113495bSYour Name {
843*5113495bSYour Name }
844*5113495bSYour Name #endif
845*5113495bSYour Name 
846*5113495bSYour Name /**
847*5113495bSYour Name  * hal_reo_config_reo2ppe_dest_info() - Configure reo2ppe dest info
848*5113495bSYour Name  * @hal_soc_hdl: HAL SoC Context
849*5113495bSYour Name  *
850*5113495bSYour Name  * Return: None.
851*5113495bSYour Name  */
852*5113495bSYour Name static inline
hal_reo_config_reo2ppe_dest_info(hal_soc_handle_t hal_soc_hdl)853*5113495bSYour Name void hal_reo_config_reo2ppe_dest_info(hal_soc_handle_t hal_soc_hdl)
854*5113495bSYour Name {
855*5113495bSYour Name 	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
856*5113495bSYour Name 
857*5113495bSYour Name 	if (hal_soc->ops->hal_reo_config_reo2ppe_dest_info)
858*5113495bSYour Name 		hal_soc->ops->hal_reo_config_reo2ppe_dest_info(hal_soc_hdl);
859*5113495bSYour Name }
860*5113495bSYour Name 
861*5113495bSYour Name /**
862*5113495bSYour Name  * hal_tx_get_num_ppe_vp_tbl_entries() - Get the total number of VP table entries
863*5113495bSYour Name  * @hal_soc_hdl: HAL SoC Context
864*5113495bSYour Name  *
865*5113495bSYour Name  * Return: Total number of entries.
866*5113495bSYour Name  */
867*5113495bSYour Name static inline
hal_tx_get_num_ppe_vp_tbl_entries(hal_soc_handle_t hal_soc_hdl)868*5113495bSYour Name uint32_t hal_tx_get_num_ppe_vp_tbl_entries(hal_soc_handle_t hal_soc_hdl)
869*5113495bSYour Name {
870*5113495bSYour Name 	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
871*5113495bSYour Name 
872*5113495bSYour Name 	return hal_soc->ops->hal_tx_get_num_ppe_vp_tbl_entries(hal_soc_hdl);
873*5113495bSYour Name }
874*5113495bSYour Name 
875*5113495bSYour Name /**
876*5113495bSYour Name  * hal_tx_get_num_ppe_vp_search_idx_tbl_entries() - Get the total number of
877*5113495bSYour Name  *                                                  search idx registers
878*5113495bSYour Name  * @hal_soc_hdl: HAL SoC Context
879*5113495bSYour Name  *
880*5113495bSYour Name  * Return: Total number of entries.
881*5113495bSYour Name  */
882*5113495bSYour Name static inline
hal_tx_get_num_ppe_vp_search_idx_tbl_entries(hal_soc_handle_t hal_soc_hdl)883*5113495bSYour Name uint32_t hal_tx_get_num_ppe_vp_search_idx_tbl_entries(hal_soc_handle_t hal_soc_hdl)
884*5113495bSYour Name {
885*5113495bSYour Name 	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
886*5113495bSYour Name 
887*5113495bSYour Name 	return hal_soc->ops->hal_tx_get_num_ppe_vp_search_idx_tbl_entries(hal_soc_hdl);
888*5113495bSYour Name }
889*5113495bSYour Name 
890*5113495bSYour Name /**
891*5113495bSYour Name  * hal_tx_set_ppe_cmn_cfg()- Set the PPE common config
892*5113495bSYour Name  * @hal_soc_hdl: HAL SoC context
893*5113495bSYour Name  * @cmn_cfg: HAL PPE VP common config
894*5113495bSYour Name  *
895*5113495bSYour Name  * Return: void
896*5113495bSYour Name  */
897*5113495bSYour Name static inline void
hal_tx_set_ppe_cmn_cfg(hal_soc_handle_t hal_soc_hdl,union hal_tx_cmn_config_ppe * cmn_cfg)898*5113495bSYour Name hal_tx_set_ppe_cmn_cfg(hal_soc_handle_t hal_soc_hdl,
899*5113495bSYour Name 		       union hal_tx_cmn_config_ppe *cmn_cfg)
900*5113495bSYour Name {
901*5113495bSYour Name 	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
902*5113495bSYour Name 
903*5113495bSYour Name 	hal_soc->ops->hal_tx_set_ppe_cmn_cfg(hal_soc_hdl, cmn_cfg);
904*5113495bSYour Name }
905*5113495bSYour Name 
906*5113495bSYour Name /**
907*5113495bSYour Name  * hal_tx_populate_ppe_vp_entry() -  Populate ppe VP entry
908*5113495bSYour Name  * @hal_soc_hdl: HAL SoC context
909*5113495bSYour Name  * @vp_cfg: HAL PPE VP config
910*5113495bSYour Name  * @ppe_vp_idx: PPE VP index
911*5113495bSYour Name  *
912*5113495bSYour Name  * Return: void
913*5113495bSYour Name  */
914*5113495bSYour Name static inline void
hal_tx_populate_ppe_vp_entry(hal_soc_handle_t hal_soc_hdl,union hal_tx_ppe_vp_config * vp_cfg,int ppe_vp_idx)915*5113495bSYour Name hal_tx_populate_ppe_vp_entry(hal_soc_handle_t hal_soc_hdl,
916*5113495bSYour Name 			     union hal_tx_ppe_vp_config *vp_cfg,
917*5113495bSYour Name 			     int ppe_vp_idx)
918*5113495bSYour Name {
919*5113495bSYour Name 	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
920*5113495bSYour Name 
921*5113495bSYour Name 	hal_soc->ops->hal_tx_set_ppe_vp_entry(hal_soc_hdl, vp_cfg, ppe_vp_idx);
922*5113495bSYour Name }
923*5113495bSYour Name 
924*5113495bSYour Name /**
925*5113495bSYour Name  * hal_ppeds_cfg_ast_override_map_reg() - Set ppe index mapping table value
926*5113495bSYour Name  * @hal_soc_hdl: HAL SoC context
927*5113495bSYour Name  * @reg_idx: index into the table
928*5113495bSYour Name  * @overide_map: HAL PPE INDEX MAPPING config
929*5113495bSYour Name  *
930*5113495bSYour Name  * Return: void
931*5113495bSYour Name  */
932*5113495bSYour Name static inline void
hal_ppeds_cfg_ast_override_map_reg(hal_soc_handle_t hal_soc_hdl,uint8_t reg_idx,union hal_tx_ppe_idx_map_config * overide_map)933*5113495bSYour Name hal_ppeds_cfg_ast_override_map_reg(hal_soc_handle_t hal_soc_hdl,
934*5113495bSYour Name 	uint8_t reg_idx, union hal_tx_ppe_idx_map_config *overide_map)
935*5113495bSYour Name {
936*5113495bSYour Name 	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
937*5113495bSYour Name 
938*5113495bSYour Name 	if (hal_soc->ops->hal_ppeds_cfg_ast_override_map_reg)
939*5113495bSYour Name 		hal_soc->ops->hal_ppeds_cfg_ast_override_map_reg(hal_soc_hdl,
940*5113495bSYour Name 								 reg_idx,
941*5113495bSYour Name 								 overide_map);
942*5113495bSYour Name }
943*5113495bSYour Name 
944*5113495bSYour Name /**
945*5113495bSYour Name  * hal_tx_set_int_pri2tid() - Set the pri2tid table.
946*5113495bSYour Name  * @hal_soc_hdl: HAL SoC context
947*5113495bSYour Name  * @val: value to set
948*5113495bSYour Name  * @map_no: index in SW INT_PRI to TID table
949*5113495bSYour Name  *
950*5113495bSYour Name  * Return: void
951*5113495bSYour Name  */
952*5113495bSYour Name static inline void
hal_tx_set_int_pri2tid(hal_soc_handle_t hal_soc_hdl,uint32_t val,uint8_t map_no)953*5113495bSYour Name hal_tx_set_int_pri2tid(hal_soc_handle_t hal_soc_hdl,
954*5113495bSYour Name 		       uint32_t val, uint8_t map_no)
955*5113495bSYour Name {
956*5113495bSYour Name 	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
957*5113495bSYour Name 
958*5113495bSYour Name 	hal_soc->ops->hal_tx_set_ppe_pri2tid(hal_soc_hdl, val, map_no);
959*5113495bSYour Name }
960*5113495bSYour Name 
961*5113495bSYour Name /**
962*5113495bSYour Name  * hal_tx_update_int_pri2tid() - Populate the pri2tid table.
963*5113495bSYour Name  * @hal_soc_hdl: HAL SoC context
964*5113495bSYour Name  * @pri: INT_PRI value
965*5113495bSYour Name  * @tid: Wi-Fi TID
966*5113495bSYour Name  *
967*5113495bSYour Name  * Return: void
968*5113495bSYour Name  */
969*5113495bSYour Name static inline void
hal_tx_update_int_pri2tid(hal_soc_handle_t hal_soc_hdl,uint8_t pri,uint8_t tid)970*5113495bSYour Name hal_tx_update_int_pri2tid(hal_soc_handle_t hal_soc_hdl,
971*5113495bSYour Name 			  uint8_t pri, uint8_t tid)
972*5113495bSYour Name {
973*5113495bSYour Name 	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
974*5113495bSYour Name 
975*5113495bSYour Name 	hal_soc->ops->hal_tx_update_ppe_pri2tid(hal_soc_hdl, pri, tid);
976*5113495bSYour Name }
977*5113495bSYour Name 
978*5113495bSYour Name /**
979*5113495bSYour Name  * hal_tx_dump_ppe_vp_entry() - Dump the PPE VP entry
980*5113495bSYour Name  * @hal_soc_hdl: HAL SoC context
981*5113495bSYour Name  *
982*5113495bSYour Name  * Return: void
983*5113495bSYour Name  */
984*5113495bSYour Name static inline void
hal_tx_dump_ppe_vp_entry(hal_soc_handle_t hal_soc_hdl)985*5113495bSYour Name hal_tx_dump_ppe_vp_entry(hal_soc_handle_t hal_soc_hdl)
986*5113495bSYour Name {
987*5113495bSYour Name 	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
988*5113495bSYour Name 
989*5113495bSYour Name 	hal_soc->ops->hal_tx_dump_ppe_vp_entry(hal_soc_hdl);
990*5113495bSYour Name }
991*5113495bSYour Name 
992*5113495bSYour Name /**
993*5113495bSYour Name  * hal_tx_enable_pri2tid_map() - Enable the priority to tid mapping
994*5113495bSYour Name  * @hal_soc_hdl: HAL SoC context
995*5113495bSYour Name  * @val: True/False value
996*5113495bSYour Name  * @ppe_vp_idx: map index
997*5113495bSYour Name  *
998*5113495bSYour Name  * Return: void
999*5113495bSYour Name  */
1000*5113495bSYour Name static inline void
hal_tx_enable_pri2tid_map(hal_soc_handle_t hal_soc_hdl,bool val,uint8_t ppe_vp_idx)1001*5113495bSYour Name hal_tx_enable_pri2tid_map(hal_soc_handle_t hal_soc_hdl, bool val,
1002*5113495bSYour Name 			  uint8_t ppe_vp_idx)
1003*5113495bSYour Name {
1004*5113495bSYour Name 	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
1005*5113495bSYour Name 
1006*5113495bSYour Name 	hal_soc->ops->hal_tx_enable_pri2tid_map(hal_soc_hdl, val,
1007*5113495bSYour Name 						ppe_vp_idx);
1008*5113495bSYour Name }
1009*5113495bSYour Name 
1010*5113495bSYour Name #ifdef HWIO_TCL_R0_VDEV_MCAST_PACKET_CTRL_MAP_n_VAL_SHFT
1011*5113495bSYour Name static inline void
hal_tx_vdev_mcast_ctrl_set(hal_soc_handle_t hal_soc_hdl,uint8_t vdev_id,uint8_t mcast_ctrl_val)1012*5113495bSYour Name hal_tx_vdev_mcast_ctrl_set(hal_soc_handle_t hal_soc_hdl,
1013*5113495bSYour Name 		uint8_t vdev_id, uint8_t mcast_ctrl_val)
1014*5113495bSYour Name {
1015*5113495bSYour Name 	struct hal_soc *hal_soc = (struct hal_soc *)hal_soc_hdl;
1016*5113495bSYour Name 
1017*5113495bSYour Name 	hal_soc->ops->hal_tx_vdev_mcast_ctrl_set(hal_soc_hdl, vdev_id,
1018*5113495bSYour Name 						 mcast_ctrl_val);
1019*5113495bSYour Name }
1020*5113495bSYour Name #else
1021*5113495bSYour Name static inline void
hal_tx_vdev_mcast_ctrl_set(hal_soc_handle_t hal_soc_hdl,uint8_t vdev_id,uint8_t mcast_ctrl_val)1022*5113495bSYour Name hal_tx_vdev_mcast_ctrl_set(hal_soc_handle_t hal_soc_hdl,
1023*5113495bSYour Name 		uint8_t vdev_id, uint8_t mcast_ctrl_val)
1024*5113495bSYour Name {
1025*5113495bSYour Name }
1026*5113495bSYour Name #endif
1027*5113495bSYour Name #endif /* _HAL_BE_TX_H_ */
1028