xref: /wlan-driver/qca-wifi-host-cmn/hal/wifi3.0/be/hal_be_rx.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_RX_H_
21*5113495bSYour Name #define _HAL_BE_RX_H_
22*5113495bSYour Name 
23*5113495bSYour Name #include "hal_be_hw_headers.h"
24*5113495bSYour Name #include "hal_be_rx_tlv.h"
25*5113495bSYour Name #include "hal_rx.h"
26*5113495bSYour Name #include <wbm_release_ring_rx.h>
27*5113495bSYour Name 
28*5113495bSYour Name #define HAL_RX_DA_IDX_CHIP_ID_OFFSET    14
29*5113495bSYour Name #define HAL_RX_DA_IDX_CHIP_ID_MASK      0x3
30*5113495bSYour Name 
31*5113495bSYour Name #define HAL_RX_DA_IDX_PEER_ID_MASK    0x3fff
32*5113495bSYour Name #define HAL_RX_DA_IDX_ML_PEER_MASK    0x2000
33*5113495bSYour Name 
34*5113495bSYour Name /*
35*5113495bSYour Name  * macro to set the cookie into the rxdma ring entry
36*5113495bSYour Name  */
37*5113495bSYour Name #define HAL_RXDMA_COOKIE_SET(buff_addr_info, cookie) \
38*5113495bSYour Name 		((*(((unsigned int *)buff_addr_info) + \
39*5113495bSYour Name 		(BUFFER_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET >> 2))) &= \
40*5113495bSYour Name 		~BUFFER_ADDR_INFO_SW_BUFFER_COOKIE_MASK); \
41*5113495bSYour Name 		((*(((unsigned int *)buff_addr_info) + \
42*5113495bSYour Name 		(BUFFER_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET >> 2))) |= \
43*5113495bSYour Name 		(cookie << BUFFER_ADDR_INFO_SW_BUFFER_COOKIE_LSB) & \
44*5113495bSYour Name 		BUFFER_ADDR_INFO_SW_BUFFER_COOKIE_MASK)
45*5113495bSYour Name 
46*5113495bSYour Name /*
47*5113495bSYour Name  * macro to set the manager into the rxdma ring entry
48*5113495bSYour Name  */
49*5113495bSYour Name #define HAL_RXDMA_MANAGER_SET(buff_addr_info, manager) \
50*5113495bSYour Name 		((*(((unsigned int *)buff_addr_info) + \
51*5113495bSYour Name 		(BUFFER_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET >> 2))) &= \
52*5113495bSYour Name 		~BUFFER_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK); \
53*5113495bSYour Name 		((*(((unsigned int *)buff_addr_info) + \
54*5113495bSYour Name 		(BUFFER_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET >> 2))) |= \
55*5113495bSYour Name 		(manager << BUFFER_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB) & \
56*5113495bSYour Name 		BUFFER_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK)
57*5113495bSYour Name 
58*5113495bSYour Name #define HAL_RX_ERROR_STATUS_GET(reo_desc)			\
59*5113495bSYour Name 	(_HAL_MS((*_OFFSET_TO_WORD_PTR(reo_desc,		\
60*5113495bSYour Name 		REO_DESTINATION_RING_REO_PUSH_REASON_OFFSET)),\
61*5113495bSYour Name 		REO_DESTINATION_RING_REO_PUSH_REASON_MASK,	\
62*5113495bSYour Name 		REO_DESTINATION_RING_REO_PUSH_REASON_LSB))
63*5113495bSYour Name 
64*5113495bSYour Name #define HAL_RX_BUF_COOKIE_GET(buff_addr_info)			\
65*5113495bSYour Name 	(_HAL_MS((*_OFFSET_TO_WORD_PTR(buff_addr_info,		\
66*5113495bSYour Name 		BUFFER_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET)),	\
67*5113495bSYour Name 		BUFFER_ADDR_INFO_SW_BUFFER_COOKIE_MASK,	\
68*5113495bSYour Name 		BUFFER_ADDR_INFO_SW_BUFFER_COOKIE_LSB))
69*5113495bSYour Name 
70*5113495bSYour Name #define HAL_RX_BUF_RBM_GET(buff_addr_info)			\
71*5113495bSYour Name 	(_HAL_MS((*_OFFSET_TO_WORD_PTR(buff_addr_info,		\
72*5113495bSYour Name 		BUFFER_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET)),\
73*5113495bSYour Name 		BUFFER_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK,	\
74*5113495bSYour Name 		BUFFER_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB))
75*5113495bSYour Name 
76*5113495bSYour Name /* TODO: Convert the following structure fields accesseses to offsets */
77*5113495bSYour Name 
78*5113495bSYour Name #define HAL_RX_REO_BUF_COOKIE_GET(reo_desc)	\
79*5113495bSYour Name 	(HAL_RX_BUF_COOKIE_GET(&		\
80*5113495bSYour Name 	(((struct reo_destination_ring *)	\
81*5113495bSYour Name 		reo_desc)->buf_or_link_desc_addr_info)))
82*5113495bSYour Name 
83*5113495bSYour Name #define HAL_RX_MSDU_DESC_IP_CHKSUM_FAIL_GET(msdu_desc_info_ptr)	\
84*5113495bSYour Name 	(_HAL_MS((*_OFFSET_TO_WORD_PTR((msdu_desc_info_ptr),	\
85*5113495bSYour Name 		RX_MSDU_DESC_INFO_IP_CHKSUM_FAIL_OFFSET)),	\
86*5113495bSYour Name 		RX_MSDU_DESC_INFO_IP_CHKSUM_FAIL_MASK,	\
87*5113495bSYour Name 		RX_MSDU_DESC_INFO_IP_CHKSUM_FAIL_LSB))
88*5113495bSYour Name 
89*5113495bSYour Name #define HAL_RX_REO_IP_CHKSUM_FAIL_GET(ring_desc)	\
90*5113495bSYour Name 	(HAL_RX_MSDU_DESC_IP_CHKSUM_FAIL_GET(&		\
91*5113495bSYour Name 	((struct reo_destination_ring *)ring_desc)->rx_msdu_desc_info_details))
92*5113495bSYour Name 
93*5113495bSYour Name #define HAL_RX_MSDU_DESC_TCP_UDP_CHKSUM_FAIL_GET(msdu_desc_info_ptr)	\
94*5113495bSYour Name 	(_HAL_MS((*_OFFSET_TO_WORD_PTR((msdu_desc_info_ptr),		\
95*5113495bSYour Name 		RX_MSDU_DESC_INFO_TCP_UDP_CHKSUM_FAIL_OFFSET)),	\
96*5113495bSYour Name 		RX_MSDU_DESC_INFO_TCP_UDP_CHKSUM_FAIL_MASK,	\
97*5113495bSYour Name 		RX_MSDU_DESC_INFO_TCP_UDP_CHKSUM_FAIL_LSB))
98*5113495bSYour Name 
99*5113495bSYour Name #define HAL_RX_REO_TCP_UDP_CHKSUM_FAIL_GET(ring_desc)	\
100*5113495bSYour Name 	(HAL_RX_MSDU_DESC_TCP_UDP_CHKSUM_FAIL_GET(&		\
101*5113495bSYour Name 	((struct reo_destination_ring *)ring_desc)->rx_msdu_desc_info_details))
102*5113495bSYour Name 
103*5113495bSYour Name #define HAL_RX_MSDU_DESC_AMPDU_FLAG_GET(mpdu_info_ptr)		\
104*5113495bSYour Name 	(_HAL_MS((*_OFFSET_TO_WORD_PTR((mpdu_info_ptr),		\
105*5113495bSYour Name 		RX_MPDU_DESC_INFO_AMPDU_FLAG_OFFSET)),		\
106*5113495bSYour Name 		RX_MPDU_DESC_INFO_AMPDU_FLAG_MASK,		\
107*5113495bSYour Name 		RX_MPDU_DESC_INFO_AMPDU_FLAG_LSB))
108*5113495bSYour Name 
109*5113495bSYour Name #define HAL_RX_MPDU_DESC_PEER_META_DATA_GET(mpdu_info_ptr)	\
110*5113495bSYour Name 	((mpdu_info_ptr					\
111*5113495bSYour Name 	[RX_MPDU_DESC_INFO_PEER_META_DATA_OFFSET >> 2] & \
112*5113495bSYour Name 	RX_MPDU_DESC_INFO_PEER_META_DATA_MASK) >> \
113*5113495bSYour Name 	RX_MPDU_DESC_INFO_PEER_META_DATA_LSB)
114*5113495bSYour Name 
115*5113495bSYour Name #define HAL_RX_MPDU_MSDU_COUNT_GET(mpdu_info_ptr) \
116*5113495bSYour Name 	((mpdu_info_ptr[RX_MPDU_DESC_INFO_MSDU_COUNT_OFFSET >> 2] & \
117*5113495bSYour Name 	RX_MPDU_DESC_INFO_MSDU_COUNT_MASK) >> \
118*5113495bSYour Name 	RX_MPDU_DESC_INFO_MSDU_COUNT_LSB)
119*5113495bSYour Name 
120*5113495bSYour Name #define HAL_RX_MPDU_FRAGMENT_FLAG_GET(mpdu_info_ptr) \
121*5113495bSYour Name 	(mpdu_info_ptr[RX_MPDU_DESC_INFO_FRAGMENT_FLAG_OFFSET >> 2] & \
122*5113495bSYour Name 	RX_MPDU_DESC_INFO_FRAGMENT_FLAG_MASK)
123*5113495bSYour Name 
124*5113495bSYour Name #define HAL_RX_MPDU_RETRY_BIT_GET(mpdu_info_ptr) \
125*5113495bSYour Name 	(mpdu_info_ptr[RX_MPDU_DESC_INFO_MPDU_RETRY_BIT_OFFSET >> 2] & \
126*5113495bSYour Name 	RX_MPDU_DESC_INFO_MPDU_RETRY_BIT_MASK)
127*5113495bSYour Name 
128*5113495bSYour Name #define HAL_RX_MPDU_AMPDU_FLAG_GET(mpdu_info_ptr) \
129*5113495bSYour Name 	(mpdu_info_ptr[RX_MPDU_DESC_INFO_AMPDU_FLAG_OFFSET >> 2] & \
130*5113495bSYour Name 	RX_MPDU_DESC_INFO_AMPDU_FLAG_MASK)
131*5113495bSYour Name 
132*5113495bSYour Name #define HAL_RX_MPDU_RAW_MPDU_GET(mpdu_info_ptr) \
133*5113495bSYour Name 	(mpdu_info_ptr[RX_MPDU_DESC_INFO_RAW_MPDU_OFFSET >> 2] & \
134*5113495bSYour Name 	RX_MPDU_DESC_INFO_RAW_MPDU_MASK)
135*5113495bSYour Name 
136*5113495bSYour Name #define HAL_RX_MPDU_BAR_FRAME_GET(mpdu_info_ptr) \
137*5113495bSYour Name 	((mpdu_info_ptr[RX_MPDU_DESC_INFO_BAR_FRAME_OFFSET >> 2] & \
138*5113495bSYour Name 	RX_MPDU_DESC_INFO_BAR_FRAME_MASK) >> \
139*5113495bSYour Name 	RX_MPDU_DESC_INFO_BAR_FRAME_LSB)
140*5113495bSYour Name 
141*5113495bSYour Name #define HAL_RX_MPDU_TID_GET(mpdu_info_ptr) \
142*5113495bSYour Name 	((mpdu_info_ptr[RX_MPDU_DESC_INFO_TID_OFFSET >> 2] & \
143*5113495bSYour Name 	RX_MPDU_DESC_INFO_TID_MASK) >> \
144*5113495bSYour Name 	RX_MPDU_DESC_INFO_TID_LSB)
145*5113495bSYour Name 
146*5113495bSYour Name #define HAL_RX_MPDU_MPDU_QOS_CONTROL_VALID_GET(mpdu_info_ptr) \
147*5113495bSYour Name 	((mpdu_info_ptr[RX_MPDU_DESC_INFO_MPDU_QOS_CONTROL_VALID_OFFSET >> 2] &\
148*5113495bSYour Name 	RX_MPDU_DESC_INFO_MPDU_QOS_CONTROL_VALID_MASK) >> \
149*5113495bSYour Name 	RX_MPDU_DESC_INFO_MPDU_QOS_CONTROL_VALID_LSB)
150*5113495bSYour Name 
151*5113495bSYour Name /*
152*5113495bSYour Name  * NOTE: None of the following _GET macros need a right
153*5113495bSYour Name  * shift by the corresponding _LSB. This is because, they are
154*5113495bSYour Name  * finally taken and "OR'ed" into a single word again.
155*5113495bSYour Name  */
156*5113495bSYour Name #define HAL_RX_MSDU_CONTINUATION_FLAG_SET(msdu_info_ptr, val)		\
157*5113495bSYour Name 	((*(((uint32_t *)msdu_info_ptr) +				\
158*5113495bSYour Name 		(RX_MSDU_DESC_INFO_MSDU_CONTINUATION_OFFSET >> 2))) |= \
159*5113495bSYour Name 		((val) << RX_MSDU_DESC_INFO_MSDU_CONTINUATION_LSB) & \
160*5113495bSYour Name 		RX_MSDU_DESC_INFO_MSDU_CONTINUATION_MASK)
161*5113495bSYour Name 
162*5113495bSYour Name #define HAL_RX_MSDU_CONTINUATION_FLAG_GET(msdu_info_ptr)	\
163*5113495bSYour Name 	((*_OFFSET_TO_WORD_PTR(msdu_info_ptr,			\
164*5113495bSYour Name 		RX_MSDU_DESC_INFO_MSDU_CONTINUATION_OFFSET)) & \
165*5113495bSYour Name 		RX_MSDU_DESC_INFO_MSDU_CONTINUATION_MASK)
166*5113495bSYour Name 
167*5113495bSYour Name #define HAL_RX_MSDU_REO_DST_IND_GET(msdu_info_ptr)	\
168*5113495bSYour Name 	(_HAL_MS((*_OFFSET_TO_WORD_PTR(msdu_info_ptr,	\
169*5113495bSYour Name 	RX_MSDU_EXT_DESC_INFO_REO_DESTINATION_INDICATION_OFFSET)),	\
170*5113495bSYour Name 	RX_MSDU_EXT_DESC_INFO_REO_DESTINATION_INDICATION_MASK,		\
171*5113495bSYour Name 	RX_MSDU_EXT_DESC_INFO_REO_DESTINATION_INDICATION_LSB))
172*5113495bSYour Name 
173*5113495bSYour Name #define HAL_RX_MSDU_SA_IS_VALID_FLAG_GET(msdu_info_ptr)		\
174*5113495bSYour Name 	((*_OFFSET_TO_WORD_PTR(msdu_info_ptr,			\
175*5113495bSYour Name 		RX_MSDU_DESC_INFO_SA_IS_VALID_OFFSET)) &	\
176*5113495bSYour Name 		RX_MSDU_DESC_INFO_SA_IS_VALID_MASK)
177*5113495bSYour Name 
178*5113495bSYour Name #define HAL_RX_MSDU_DA_IS_VALID_FLAG_GET(msdu_info_ptr)		\
179*5113495bSYour Name 	((*_OFFSET_TO_WORD_PTR(msdu_info_ptr,			\
180*5113495bSYour Name 		RX_MSDU_DESC_INFO_DA_IS_VALID_OFFSET)) &	\
181*5113495bSYour Name 		RX_MSDU_DESC_INFO_DA_IS_VALID_MASK)
182*5113495bSYour Name 
183*5113495bSYour Name #define HAL_RX_MSDU_DA_IS_MCBC_FLAG_GET(msdu_info_ptr)		\
184*5113495bSYour Name 	((*_OFFSET_TO_WORD_PTR(msdu_info_ptr,			\
185*5113495bSYour Name 		RX_MSDU_DESC_INFO_DA_IS_MCBC_OFFSET)) &	\
186*5113495bSYour Name 		RX_MSDU_DESC_INFO_DA_IS_MCBC_MASK)
187*5113495bSYour Name 
188*5113495bSYour Name #define HAL_RX_MSDU_INTRA_BSS_FLAG_GET(msdu_info_ptr)		\
189*5113495bSYour Name 	((*_OFFSET_TO_WORD_PTR(msdu_info_ptr,			\
190*5113495bSYour Name 		RX_MSDU_DESC_INFO_INTRA_BSS_OFFSET)) &	\
191*5113495bSYour Name 		RX_MSDU_DESC_INFO_INTRA_BSS_MASK)
192*5113495bSYour Name 
193*5113495bSYour Name #define HAL_RX_MSDU_DEST_CHIP_ID_GET(msdu_info_ptr) \
194*5113495bSYour Name 	((*_OFFSET_TO_WORD_PTR(msdu_info_ptr,		\
195*5113495bSYour Name 		RX_MSDU_DESC_INFO_DEST_CHIP_ID_OFFSET)) & \
196*5113495bSYour Name 		RX_MSDU_DESC_INFO_DEST_CHIP_ID_MASK)
197*5113495bSYour Name 
198*5113495bSYour Name #define HAL_RX_MPDU_ENCRYPT_TYPE_GET(_rx_mpdu_info)	\
199*5113495bSYour Name 	(_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_mpdu_info,	\
200*5113495bSYour Name 	RX_MPDU_INFO_ENCRYPT_TYPE_OFFSET)),		\
201*5113495bSYour Name 	RX_MPDU_INFO_ENCRYPT_TYPE_MASK,		\
202*5113495bSYour Name 	RX_MPDU_INFO_ENCRYPT_TYPE_LSB))
203*5113495bSYour Name 
204*5113495bSYour Name #define HAL_RX_MSDU_DESC_INFO_SET(_msdu_info_ptr, _field, _val)		\
205*5113495bSYour Name 	HAL_RX_FLD_SET(_msdu_info_ptr, RX_MSDU_DESC_INFO,		\
206*5113495bSYour Name 			_field, _val)
207*5113495bSYour Name 
208*5113495bSYour Name #define HAL_RX_MPDU_DESC_INFO_SET(_mpdu_info_ptr, _field, _val)		\
209*5113495bSYour Name 	HAL_RX_FLD_SET(_mpdu_info_ptr, RX_MPDU_DESC_INFO,		\
210*5113495bSYour Name 			_field, _val)
211*5113495bSYour Name 
212*5113495bSYour Name #define HAL_RX_MSDU_REO_DST_IND_SET(_msdu_ext_desc_info_ptr, _field, _val)  \
213*5113495bSYour Name 	HAL_RX_FLD_SET(_msdu_ext_desc_info_ptr, RX_MSDU_EXT_DESC_INFO,	    \
214*5113495bSYour Name 			_field, _val)
215*5113495bSYour Name 
216*5113495bSYour Name #define HAL_RX_REO_MSDU_REO_DST_IND_GET(reo_desc)	\
217*5113495bSYour Name 	(HAL_RX_MSDU_REO_DST_IND_GET(&		\
218*5113495bSYour Name 	(((struct reo_destination_ring *)	\
219*5113495bSYour Name 	   reo_desc)->rx_msdu_desc_info_details)))
220*5113495bSYour Name 
221*5113495bSYour Name #define HAL_RX_DEST_CHIP_ID_GET(msdu_metadata) \
222*5113495bSYour Name 	(((msdu_metadata)->da_idx >> HAL_RX_DA_IDX_CHIP_ID_OFFSET) &	\
223*5113495bSYour Name 	 HAL_RX_DA_IDX_CHIP_ID_MASK)
224*5113495bSYour Name 
225*5113495bSYour Name #define HAL_RX_PEER_ID_GET(msdu_metadata) \
226*5113495bSYour Name 	(((msdu_metadata)->da_idx) & HAL_RX_DA_IDX_PEER_ID_MASK)
227*5113495bSYour Name 
228*5113495bSYour Name #define HAL_RX_TLV_DEST_CHIP_ID_GET(_rx_pkt_tlv)	\
229*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).dest_chip_id
230*5113495bSYour Name 
231*5113495bSYour Name #ifdef INTRA_BSS_FWD_OFFLOAD
232*5113495bSYour Name #define HAL_RX_TLV_DEST_CHIP_PMAC_ID_GET(_rx_pkt_tlv)	\
233*5113495bSYour Name 	HAL_RX_MSDU_END(_rx_pkt_tlv).dest_chip_pmac_id
234*5113495bSYour Name #endif
235*5113495bSYour Name 
236*5113495bSYour Name /**
237*5113495bSYour Name  * enum hal_be_rx_wbm_error_source: Indicates which module initiated the
238*5113495bSYour Name  * release of this buffer or descriptor
239*5113495bSYour Name  *
240*5113495bSYour Name  * @HAL_BE_RX_WBM_ERR_SRC_RXDMA: RXDMA released this buffer or descriptor
241*5113495bSYour Name  * @HAL_BE_RX_WBM_ERR_SRC_REO: REO released this buffer or descriptor
242*5113495bSYour Name  * @HAL_BE_RX_WBM_ERR_SRC_FW_RX: FW released this buffer or descriptor from the
243*5113495bSYour Name  *				RX path
244*5113495bSYour Name  * @HAL_BE_RX_WBM_ERR_SRC_SW_RX: SW released this buffer or descriptor from the
245*5113495bSYour Name  *				RX path
246*5113495bSYour Name  * @HAL_BE_RX_WBM_ERR_SRC_TQM : TQM released this buffer or descriptor
247*5113495bSYour Name  * @HAL_BE_RX_WBM_ERR_SRC_FW_TX: FW released this buffer or descriptor from the
248*5113495bSYour Name  *				RX path
249*5113495bSYour Name  * @HAL_BE_RX_WBM_ERR_SRC_SW_TX: SW released this buffer or descriptor from the
250*5113495bSYour Name  *				RX path
251*5113495bSYour Name  */
252*5113495bSYour Name enum hal_be_rx_wbm_error_source {
253*5113495bSYour Name 	HAL_BE_RX_WBM_ERR_SRC_RXDMA = 0,
254*5113495bSYour Name 	HAL_BE_RX_WBM_ERR_SRC_REO,
255*5113495bSYour Name 	HAL_BE_RX_WBM_ERR_SRC_FW_RX,
256*5113495bSYour Name 	HAL_BE_RX_WBM_ERR_SRC_SW_RX,
257*5113495bSYour Name 	HAL_BE_RX_WBM_ERR_SRC_TQM,
258*5113495bSYour Name 	HAL_BE_RX_WBM_ERR_SRC_FW_TX,
259*5113495bSYour Name 	HAL_BE_RX_WBM_ERR_SRC_SW_TX,
260*5113495bSYour Name };
261*5113495bSYour Name 
262*5113495bSYour Name /**
263*5113495bSYour Name  * enum hal_be_wbm_release_dir - Direction of the buffer which was released to
264*5113495bSYour Name  *			wbm.
265*5113495bSYour Name  * @HAL_BE_WBM_RELEASE_DIR_RX: Buffer released to WBM due to error
266*5113495bSYour Name  * @HAL_BE_WBM_RELEASE_DIR_TX: Buffer released to WBM from TX path
267*5113495bSYour Name  */
268*5113495bSYour Name enum hal_be_wbm_release_dir {
269*5113495bSYour Name 	HAL_BE_WBM_RELEASE_DIR_RX,
270*5113495bSYour Name 	HAL_BE_WBM_RELEASE_DIR_TX,
271*5113495bSYour Name };
272*5113495bSYour Name 
hal_rx_get_mpdu_flags(uint32_t * mpdu_info)273*5113495bSYour Name static inline uint32_t hal_rx_get_mpdu_flags(uint32_t *mpdu_info)
274*5113495bSYour Name {
275*5113495bSYour Name 	uint32_t mpdu_flags = 0;
276*5113495bSYour Name 
277*5113495bSYour Name 	if (HAL_RX_MPDU_FRAGMENT_FLAG_GET(mpdu_info))
278*5113495bSYour Name 		mpdu_flags |= HAL_MPDU_F_FRAGMENT;
279*5113495bSYour Name 
280*5113495bSYour Name 	if (HAL_RX_MPDU_RETRY_BIT_GET(mpdu_info))
281*5113495bSYour Name 		mpdu_flags |= HAL_MPDU_F_RETRY_BIT;
282*5113495bSYour Name 
283*5113495bSYour Name 	if (HAL_RX_MPDU_AMPDU_FLAG_GET(mpdu_info))
284*5113495bSYour Name 		mpdu_flags |= HAL_MPDU_F_AMPDU_FLAG;
285*5113495bSYour Name 
286*5113495bSYour Name 	if (HAL_RX_MPDU_RAW_MPDU_GET(mpdu_info))
287*5113495bSYour Name 		mpdu_flags |= HAL_MPDU_F_RAW_AMPDU;
288*5113495bSYour Name 
289*5113495bSYour Name 	if (HAL_RX_MPDU_MPDU_QOS_CONTROL_VALID_GET(mpdu_info))
290*5113495bSYour Name 		mpdu_flags |= HAL_MPDU_F_QOS_CONTROL_VALID;
291*5113495bSYour Name 
292*5113495bSYour Name 	return mpdu_flags;
293*5113495bSYour Name }
294*5113495bSYour Name 
295*5113495bSYour Name /*******************************************************************************
296*5113495bSYour Name  * RX REO ERROR APIS
297*5113495bSYour Name  ******************************************************************************/
298*5113495bSYour Name 
299*5113495bSYour Name #define HAL_RX_REO_BUF_TYPE_GET(reo_desc) (((*(((uint32_t *)reo_desc) + \
300*5113495bSYour Name 		(REO_DESTINATION_RING_REO_DEST_BUFFER_TYPE_OFFSET >> 2))) & \
301*5113495bSYour Name 		REO_DESTINATION_RING_REO_DEST_BUFFER_TYPE_MASK) >> \
302*5113495bSYour Name 		REO_DESTINATION_RING_REO_DEST_BUFFER_TYPE_LSB)
303*5113495bSYour Name 
304*5113495bSYour Name #define HAL_RX_REO_ERROR_GET(reo_desc) (((*(((uint32_t *)reo_desc) + \
305*5113495bSYour Name 		(REO_DESTINATION_RING_REO_ERROR_CODE_OFFSET >> 2))) & \
306*5113495bSYour Name 		REO_DESTINATION_RING_REO_ERROR_CODE_MASK) >> \
307*5113495bSYour Name 		REO_DESTINATION_RING_REO_ERROR_CODE_LSB)
308*5113495bSYour Name 
309*5113495bSYour Name /*
310*5113495bSYour Name  * hal_rx_msdu_link_desc_reinject: Re-injects the MSDU link descriptor to
311*5113495bSYour Name  * REO entrance ring
312*5113495bSYour Name  *
313*5113495bSYour Name  * @ soc: HAL version of the SOC pointer
314*5113495bSYour Name  * @ pa: Physical address of the MSDU Link Descriptor
315*5113495bSYour Name  * @ cookie: SW cookie to get to the virtual address
316*5113495bSYour Name  * @ error_enabled_reo_q: Argument to determine whether this needs to go
317*5113495bSYour Name  * to the error enabled REO queue
318*5113495bSYour Name  *
319*5113495bSYour Name  * Return: void
320*5113495bSYour Name  */
321*5113495bSYour Name static inline void
hal_rx_msdu_link_desc_reinject(struct hal_soc * soc,uint64_t pa,uint32_t cookie,bool error_enabled_reo_q)322*5113495bSYour Name hal_rx_msdu_link_desc_reinject(struct hal_soc *soc, uint64_t pa,
323*5113495bSYour Name 			       uint32_t cookie, bool error_enabled_reo_q)
324*5113495bSYour Name {
325*5113495bSYour Name 	/* TODO */
326*5113495bSYour Name }
327*5113495bSYour Name 
328*5113495bSYour Name #ifdef DP_HW_COOKIE_CONVERT_EXCEPTION
329*5113495bSYour Name /* HW set dowrd-2 bit16 to 1 if HW CC is done */
330*5113495bSYour Name #define HAL_WBM2SW_COMPLETION_RING_RX_CC_DONE_OFFSET 0x8
331*5113495bSYour Name #define HAL_WBM2SW_COMPLETION_RING_RX_CC_DONE_MASK 0x10000
332*5113495bSYour Name #define HAL_WBM2SW_COMPLETION_RING_RX_CC_DONE_LSB 0x10
333*5113495bSYour Name /**
334*5113495bSYour Name  * hal_rx_wbm_get_cookie_convert_done() - Get cookie conversion done flag
335*5113495bSYour Name  * @hal_desc: wbm Rx ring descriptor pointer
336*5113495bSYour Name  *
337*5113495bSYour Name  * This function will get the bit value that indicate HW cookie
338*5113495bSYour Name  * conversion done or not
339*5113495bSYour Name  *
340*5113495bSYour Name  * Return: 1 - HW cookie conversion done, 0 - not
341*5113495bSYour Name  */
hal_rx_wbm_get_cookie_convert_done(void * hal_desc)342*5113495bSYour Name static inline uint8_t hal_rx_wbm_get_cookie_convert_done(void *hal_desc)
343*5113495bSYour Name {
344*5113495bSYour Name 	return HAL_RX_GET(hal_desc, HAL_WBM2SW_COMPLETION_RING_RX,
345*5113495bSYour Name 			  CC_DONE);
346*5113495bSYour Name }
347*5113495bSYour Name #endif
348*5113495bSYour Name 
349*5113495bSYour Name /**
350*5113495bSYour Name  * hal_rx_wbm_get_desc_va() - Get Desc virtual address within WBM Desc
351*5113495bSYour Name  * @hal_desc: RX WBM2SW ring descriptor pointer
352*5113495bSYour Name  *
353*5113495bSYour Name  * Return: RX descriptor virtual address
354*5113495bSYour Name  */
hal_rx_wbm_get_desc_va(void * hal_desc)355*5113495bSYour Name static inline uintptr_t hal_rx_wbm_get_desc_va(void *hal_desc)
356*5113495bSYour Name {
357*5113495bSYour Name 	uint64_t va_from_desc;
358*5113495bSYour Name 
359*5113495bSYour Name 	va_from_desc = qdf_le64_to_cpu(HAL_RX_GET(hal_desc,
360*5113495bSYour Name 				       WBM2SW_COMPLETION_RING_RX,
361*5113495bSYour Name 				       BUFFER_VIRT_ADDR_31_0) |
362*5113495bSYour Name 				       (((uint64_t)HAL_RX_GET(hal_desc,
363*5113495bSYour Name 				       WBM2SW_COMPLETION_RING_RX,
364*5113495bSYour Name 				       BUFFER_VIRT_ADDR_63_32)) << 32));
365*5113495bSYour Name 	return (uintptr_t)va_from_desc;
366*5113495bSYour Name }
367*5113495bSYour Name 
368*5113495bSYour Name #define HAL_RX_WBM_FIRST_MSDU_GET(wbm_desc)		\
369*5113495bSYour Name 	(((*(((uint32_t *)wbm_desc) +			\
370*5113495bSYour Name 	(WBM_RELEASE_RING_FIRST_MSDU_OFFSET >> 2))) & \
371*5113495bSYour Name 	WBM_RELEASE_RING_FIRST_MSDU_MASK) >>		\
372*5113495bSYour Name 	WBM_RELEASE_RING_FIRST_MSDU_LSB)
373*5113495bSYour Name 
374*5113495bSYour Name #define HAL_RX_WBM_LAST_MSDU_GET(wbm_desc)		\
375*5113495bSYour Name 	(((*(((uint32_t *)wbm_desc) +			\
376*5113495bSYour Name 	(WBM_RELEASE_RING_LAST_MSDU_OFFSET >> 2))) &  \
377*5113495bSYour Name 	WBM_RELEASE_RING_LAST_MSDU_MASK) >>		\
378*5113495bSYour Name 	WBM_RELEASE_RING_LAST_MSDU_LSB)
379*5113495bSYour Name 
380*5113495bSYour Name #define HAL_RX_WBM_BUF_ADDR_39_32_GET(wbm_desc)	\
381*5113495bSYour Name 	(HAL_RX_BUFFER_ADDR_39_32_GET(&			\
382*5113495bSYour Name 	(((struct wbm_release_ring_rx *) \
383*5113495bSYour Name 	wbm_desc)->released_buff_or_desc_addr_info)))
384*5113495bSYour Name 
385*5113495bSYour Name #define HAL_RX_WBM_BUF_ADDR_31_0_GET(wbm_desc)	\
386*5113495bSYour Name 	(HAL_RX_BUFFER_ADDR_31_0_GET(&			\
387*5113495bSYour Name 	(((struct wbm_release_ring_rx *) \
388*5113495bSYour Name 	wbm_desc)->released_buff_or_desc_addr_info)))
389*5113495bSYour Name 
390*5113495bSYour Name #define HAL_RX_WBM_BUF_COOKIE_GET(wbm_desc) \
391*5113495bSYour Name 	HAL_RX_BUF_COOKIE_GET(&((struct wbm_release_ring_rx *) \
392*5113495bSYour Name 	wbm_desc)->released_buff_or_desc_addr_info)
393*5113495bSYour Name 
394*5113495bSYour Name #define HAL_RX_WBM_COMP_BUF_ADDR_31_0_GET(wbm_desc) \
395*5113495bSYour Name 	HAL_RX_GET(wbm_desc, WBM2SW_COMPLETION_RING_RX, BUFFER_PHYS_ADDR_31_0)
396*5113495bSYour Name 
397*5113495bSYour Name #define HAL_RX_WBM_COMP_BUF_ADDR_39_32_GET(wbm_desc) \
398*5113495bSYour Name 	HAL_RX_GET(wbm_desc, WBM2SW_COMPLETION_RING_RX, BUFFER_PHYS_ADDR_39_32)
399*5113495bSYour Name 
400*5113495bSYour Name #define HAL_RX_WBM_COMP_BUF_COOKIE_GET(wbm_desc) \
401*5113495bSYour Name 	HAL_RX_GET(wbm_desc, WBM2SW_COMPLETION_RING_RX, SW_BUFFER_COOKIE)
402*5113495bSYour Name /**
403*5113495bSYour Name  * hal_rx_msdu_flags_get_be() - Get msdu flags from ring desc
404*5113495bSYour Name  * @msdu_desc_info_hdl: msdu desc info handle
405*5113495bSYour Name  *
406*5113495bSYour Name  * Return: msdu flags
407*5113495bSYour Name  */
408*5113495bSYour Name static inline
hal_rx_msdu_flags_get_be(rx_msdu_desc_info_t msdu_desc_info_hdl)409*5113495bSYour Name uint32_t hal_rx_msdu_flags_get_be(rx_msdu_desc_info_t msdu_desc_info_hdl)
410*5113495bSYour Name {
411*5113495bSYour Name 	struct rx_msdu_desc_info *msdu_desc_info =
412*5113495bSYour Name 		(struct rx_msdu_desc_info *)msdu_desc_info_hdl;
413*5113495bSYour Name 	uint32_t flags = 0;
414*5113495bSYour Name 
415*5113495bSYour Name 	if (HAL_RX_FIRST_MSDU_IN_MPDU_FLAG_GET(msdu_desc_info))
416*5113495bSYour Name 		flags |= HAL_MSDU_F_FIRST_MSDU_IN_MPDU;
417*5113495bSYour Name 
418*5113495bSYour Name 	if (HAL_RX_LAST_MSDU_IN_MPDU_FLAG_GET(msdu_desc_info))
419*5113495bSYour Name 		flags |= HAL_MSDU_F_LAST_MSDU_IN_MPDU;
420*5113495bSYour Name 
421*5113495bSYour Name 	if (HAL_RX_MSDU_CONTINUATION_FLAG_GET(msdu_desc_info))
422*5113495bSYour Name 		flags |= HAL_MSDU_F_MSDU_CONTINUATION;
423*5113495bSYour Name 
424*5113495bSYour Name 	if (HAL_RX_MSDU_SA_IS_VALID_FLAG_GET(msdu_desc_info))
425*5113495bSYour Name 		flags |= HAL_MSDU_F_SA_IS_VALID;
426*5113495bSYour Name 
427*5113495bSYour Name 	if (HAL_RX_MSDU_DA_IS_VALID_FLAG_GET(msdu_desc_info))
428*5113495bSYour Name 		flags |= HAL_MSDU_F_DA_IS_VALID;
429*5113495bSYour Name 
430*5113495bSYour Name 	if (HAL_RX_MSDU_DA_IS_MCBC_FLAG_GET(msdu_desc_info))
431*5113495bSYour Name 		flags |= HAL_MSDU_F_DA_IS_MCBC;
432*5113495bSYour Name 
433*5113495bSYour Name 	if (HAL_RX_MSDU_INTRA_BSS_FLAG_GET(msdu_desc_info))
434*5113495bSYour Name 		flags |= HAL_MSDU_F_INTRA_BSS;
435*5113495bSYour Name 
436*5113495bSYour Name 	return flags;
437*5113495bSYour Name }
438*5113495bSYour Name 
439*5113495bSYour Name static inline
hal_rx_mpdu_desc_info_get_be(void * desc_addr,void * mpdu_desc_info_hdl)440*5113495bSYour Name void hal_rx_mpdu_desc_info_get_be(void *desc_addr,
441*5113495bSYour Name 				  void *mpdu_desc_info_hdl)
442*5113495bSYour Name {
443*5113495bSYour Name 	struct reo_destination_ring *reo_dst_ring;
444*5113495bSYour Name 	struct hal_rx_mpdu_desc_info *mpdu_desc_info =
445*5113495bSYour Name 		(struct hal_rx_mpdu_desc_info *)mpdu_desc_info_hdl;
446*5113495bSYour Name 	uint32_t *mpdu_info;
447*5113495bSYour Name 
448*5113495bSYour Name 	reo_dst_ring = (struct reo_destination_ring *)desc_addr;
449*5113495bSYour Name 
450*5113495bSYour Name 	mpdu_info = (uint32_t *)&reo_dst_ring->rx_mpdu_desc_info_details;
451*5113495bSYour Name 
452*5113495bSYour Name 	mpdu_desc_info->msdu_count = HAL_RX_MPDU_MSDU_COUNT_GET(mpdu_info);
453*5113495bSYour Name 	mpdu_desc_info->mpdu_flags = hal_rx_get_mpdu_flags(mpdu_info);
454*5113495bSYour Name 	mpdu_desc_info->peer_meta_data =
455*5113495bSYour Name 		HAL_RX_MPDU_DESC_PEER_META_DATA_GET(mpdu_info);
456*5113495bSYour Name 	mpdu_desc_info->bar_frame = HAL_RX_MPDU_BAR_FRAME_GET(mpdu_info);
457*5113495bSYour Name 	mpdu_desc_info->tid = HAL_RX_MPDU_TID_GET(mpdu_info);
458*5113495bSYour Name }
459*5113495bSYour Name 
460*5113495bSYour Name /*
461*5113495bSYour Name  *hal_rx_msdu_desc_info_get_be: Gets the flags related to MSDU descriptor.
462*5113495bSYour Name  *@desc_addr: REO ring descriptor addr
463*5113495bSYour Name  *@msdu_desc_info: Holds MSDU descriptor info from HAL Rx descriptor
464*5113495bSYour Name  *
465*5113495bSYour Name  * Specifically flags needed are: first_msdu_in_mpdu,
466*5113495bSYour Name  * last_msdu_in_mpdu, msdu_continuation, sa_is_valid,
467*5113495bSYour Name  * sa_idx_timeout, da_is_valid, da_idx_timeout, da_is_MCBC
468*5113495bSYour Name  *
469*5113495bSYour Name 
470*5113495bSYour Name  *Return: void
471*5113495bSYour Name  */
472*5113495bSYour Name static inline void
hal_rx_msdu_desc_info_get_be(void * desc_addr,struct hal_rx_msdu_desc_info * msdu_desc_info)473*5113495bSYour Name hal_rx_msdu_desc_info_get_be(void *desc_addr,
474*5113495bSYour Name 			     struct hal_rx_msdu_desc_info *msdu_desc_info)
475*5113495bSYour Name {
476*5113495bSYour Name 	struct reo_destination_ring *reo_dst_ring;
477*5113495bSYour Name 	uint32_t *msdu_info;
478*5113495bSYour Name 
479*5113495bSYour Name 	reo_dst_ring = (struct reo_destination_ring *)desc_addr;
480*5113495bSYour Name 
481*5113495bSYour Name 	msdu_info = (uint32_t *)&reo_dst_ring->rx_msdu_desc_info_details;
482*5113495bSYour Name 	msdu_desc_info->msdu_flags =
483*5113495bSYour Name 		hal_rx_msdu_flags_get_be((struct rx_msdu_desc_info *)msdu_info);
484*5113495bSYour Name 	msdu_desc_info->msdu_len = HAL_RX_MSDU_PKT_LENGTH_GET(msdu_info);
485*5113495bSYour Name }
486*5113495bSYour Name 
487*5113495bSYour Name /**
488*5113495bSYour Name  * hal_rx_get_reo_desc_va() - Get Desc virtual address within REO Desc
489*5113495bSYour Name  * @reo_desc: REO2SW ring descriptor pointer
490*5113495bSYour Name  *
491*5113495bSYour Name  * Return: RX descriptor virtual address
492*5113495bSYour Name  */
hal_rx_get_reo_desc_va(void * reo_desc)493*5113495bSYour Name static inline uintptr_t hal_rx_get_reo_desc_va(void *reo_desc)
494*5113495bSYour Name {
495*5113495bSYour Name 	uint64_t va_from_desc;
496*5113495bSYour Name 
497*5113495bSYour Name 	va_from_desc = qdf_le64_to_cpu(HAL_RX_GET(reo_desc,
498*5113495bSYour Name 				       REO_DESTINATION_RING,
499*5113495bSYour Name 				       BUFFER_VIRT_ADDR_31_0) |
500*5113495bSYour Name 				       (((uint64_t)HAL_RX_GET(reo_desc,
501*5113495bSYour Name 				       REO_DESTINATION_RING,
502*5113495bSYour Name 				       BUFFER_VIRT_ADDR_63_32)) << 32));
503*5113495bSYour Name 	return (uintptr_t)va_from_desc;
504*5113495bSYour Name }
505*5113495bSYour Name 
506*5113495bSYour Name /**
507*5113495bSYour Name  * hal_rx_sw_exception_get_be() - Get sw_exception bit value from REO Desc
508*5113495bSYour Name  * @reo_desc: REO2SW ring descriptor pointer
509*5113495bSYour Name  *
510*5113495bSYour Name  * sw_exception bit might not exist in reo destination ring descriptor
511*5113495bSYour Name  * for some chipset, so just restrict this function for BE only.
512*5113495bSYour Name  *
513*5113495bSYour Name  * Return: sw_exception bit value
514*5113495bSYour Name  */
hal_rx_sw_exception_get_be(void * reo_desc)515*5113495bSYour Name static inline uint8_t hal_rx_sw_exception_get_be(void *reo_desc)
516*5113495bSYour Name {
517*5113495bSYour Name 	return HAL_RX_GET(reo_desc, REO_DESTINATION_RING, SW_EXCEPTION);
518*5113495bSYour Name }
519*5113495bSYour Name 
520*5113495bSYour Name #ifdef INTRA_BSS_FWD_OFFLOAD
521*5113495bSYour Name /**
522*5113495bSYour Name  * hal_rx_tlv_get_dest_chip_pmac_id() - Get destination chip and PMAC ID
523*5113495bSYour Name  * @buf: Rx TLV buffer
524*5113495bSYour Name  * @d_chip_id: chip id being filled in
525*5113495bSYour Name  * @d_chip_pmac_id: chip pmac id being filled in
526*5113495bSYour Name  *
527*5113495bSYour Name  * Return: void
528*5113495bSYour Name  */
529*5113495bSYour Name static inline void
hal_rx_tlv_get_dest_chip_pmac_id(uint8_t * buf,uint8_t * d_chip_id,uint8_t * d_chip_pmac_id)530*5113495bSYour Name hal_rx_tlv_get_dest_chip_pmac_id(uint8_t *buf,
531*5113495bSYour Name 				 uint8_t *d_chip_id, uint8_t *d_chip_pmac_id)
532*5113495bSYour Name {
533*5113495bSYour Name 	struct rx_pkt_tlvs *rx_pkt_tlvs = (struct rx_pkt_tlvs *)buf;
534*5113495bSYour Name 
535*5113495bSYour Name 	*d_chip_id = HAL_RX_TLV_DEST_CHIP_ID_GET(rx_pkt_tlvs);
536*5113495bSYour Name 	*d_chip_pmac_id = HAL_RX_TLV_DEST_CHIP_PMAC_ID_GET(rx_pkt_tlvs);
537*5113495bSYour Name }
538*5113495bSYour Name #endif /* INTRA_BSS_FWD_OFFLOAD */
539*5113495bSYour Name 
hal_rx_get_reo_push_rsn(void * desc_addr)540*5113495bSYour Name static inline uint8_t hal_rx_get_reo_push_rsn(void *desc_addr)
541*5113495bSYour Name {
542*5113495bSYour Name 	struct reo_destination_ring *reo_dst_ring;
543*5113495bSYour Name 
544*5113495bSYour Name 	reo_dst_ring = (struct reo_destination_ring *)desc_addr;
545*5113495bSYour Name 	return reo_dst_ring->reo_push_reason;
546*5113495bSYour Name }
547*5113495bSYour Name 
548*5113495bSYour Name /**
549*5113495bSYour Name  * hal_rx_get_mpdu_msdu_desc_info_be() - get msdu, mpdu, peer meta data info
550*5113495bSYour Name  *					 from HAL Desc.
551*5113495bSYour Name  * @desc_addr: REO ring descriptor addr
552*5113495bSYour Name  * @mpdu_info: pointer to MPDU info
553*5113495bSYour Name  * @peer_mdata: pointer to peer meta data info
554*5113495bSYour Name  * @msdu_info: pointer to msdu info
555*5113495bSYour Name  *
556*5113495bSYour Name  * Return: void
557*5113495bSYour Name  */
558*5113495bSYour Name static inline void
hal_rx_get_mpdu_msdu_desc_info_be(void * desc_addr,uint32_t * mpdu_info,uint32_t * peer_mdata,uint32_t * msdu_info)559*5113495bSYour Name hal_rx_get_mpdu_msdu_desc_info_be(void *desc_addr,
560*5113495bSYour Name 				  uint32_t *mpdu_info,
561*5113495bSYour Name 				  uint32_t *peer_mdata,
562*5113495bSYour Name 				  uint32_t *msdu_info)
563*5113495bSYour Name {
564*5113495bSYour Name 	struct reo_destination_ring *reo_dst_ring;
565*5113495bSYour Name 
566*5113495bSYour Name 	reo_dst_ring = (struct reo_destination_ring *)desc_addr;
567*5113495bSYour Name 	*mpdu_info = *(uint32_t *)(&reo_dst_ring->rx_mpdu_desc_info_details);
568*5113495bSYour Name 	*peer_mdata = *((uint32_t *)
569*5113495bSYour Name 			&reo_dst_ring->rx_mpdu_desc_info_details + 1);
570*5113495bSYour Name 	*msdu_info = *(uint32_t *)(&reo_dst_ring->rx_msdu_desc_info_details);
571*5113495bSYour Name }
572*5113495bSYour Name 
573*5113495bSYour Name /**
574*5113495bSYour Name  * hal_rx_wbm_err_mpdu_msdu_info_get_be() - Copies wbm, msdu, mpdu info
575*5113495bSYour Name  *                                          from HAL desc
576*5113495bSYour Name  * @desc_addr: WBM2SW Rx Error ring descriptor addr
577*5113495bSYour Name  * @wbm_err_info: Holds WBM Error info from HAL Rx descriptor
578*5113495bSYour Name  * @mpdu_info: Holds MPDU descriptor info from HAL Rx descriptor
579*5113495bSYour Name  * @msdu_info: Holds MSDU descriptor info from HAL Rx descriptor
580*5113495bSYour Name  * @peer_meta_data: Holds Peer Meta data from HAL Rx descriptor
581*5113495bSYour Name  *
582*5113495bSYour Name  * This function copies the WBM error information, MSDU desc info,
583*5113495bSYour Name  * MPDU Desc info and peer meta data from HAL RX Desc.
584*5113495bSYour Name  *
585*5113495bSYour Name  * Return: void
586*5113495bSYour Name  */
587*5113495bSYour Name static inline void
hal_rx_wbm_err_mpdu_msdu_info_get_be(void * desc_addr,uint32_t * wbm_err_info,uint32_t * mpdu_info,uint32_t * msdu_info,uint32_t * peer_meta_data)588*5113495bSYour Name hal_rx_wbm_err_mpdu_msdu_info_get_be(void *desc_addr,
589*5113495bSYour Name 				     uint32_t *wbm_err_info,
590*5113495bSYour Name 				     uint32_t *mpdu_info,
591*5113495bSYour Name 				     uint32_t *msdu_info,
592*5113495bSYour Name 				     uint32_t *peer_meta_data)
593*5113495bSYour Name {
594*5113495bSYour Name 	struct wbm2sw_completion_ring_rx *wbm_rx_err_ring;
595*5113495bSYour Name 
596*5113495bSYour Name 	wbm_rx_err_ring = (struct wbm2sw_completion_ring_rx *)desc_addr;
597*5113495bSYour Name 	*msdu_info = *(uint32_t *)&wbm_rx_err_ring->rx_msdu_desc_info_details;
598*5113495bSYour Name 	*mpdu_info = *(uint32_t *)&wbm_rx_err_ring->rx_mpdu_desc_info_details;
599*5113495bSYour Name 	*peer_meta_data =
600*5113495bSYour Name 		*((uint32_t *)&wbm_rx_err_ring->rx_mpdu_desc_info_details + 1);
601*5113495bSYour Name 	*wbm_err_info = *((uint32_t *)wbm_rx_err_ring + 2);
602*5113495bSYour Name }
603*5113495bSYour Name #endif /* _HAL_BE_RX_H_ */
604