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