xref: /wlan-driver/qca-wifi-host-cmn/hal/wifi3.0/qcn6122/hal_qcn6122.c (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2020-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 any
6*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
7*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
8*5113495bSYour Name  *
9*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*5113495bSYour Name  */
17*5113495bSYour Name 
18*5113495bSYour Name #include "hal_li_hw_headers.h"
19*5113495bSYour Name #include "hal_internal.h"
20*5113495bSYour Name #include "hal_api.h"
21*5113495bSYour Name #include "target_type.h"
22*5113495bSYour Name #include "wcss_version.h"
23*5113495bSYour Name #include "qdf_module.h"
24*5113495bSYour Name #include "hal_qcn6122_rx.h"
25*5113495bSYour Name #include "hal_api_mon.h"
26*5113495bSYour Name #include "hal_flow.h"
27*5113495bSYour Name #include "rx_flow_search_entry.h"
28*5113495bSYour Name #include "hal_rx_flow_info.h"
29*5113495bSYour Name 
30*5113495bSYour Name #define UNIFIED_RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_OFFSET \
31*5113495bSYour Name 	RXPCU_PPDU_END_INFO_9_RX_PPDU_DURATION_OFFSET
32*5113495bSYour Name #define UNIFIED_RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_MASK \
33*5113495bSYour Name 	RXPCU_PPDU_END_INFO_9_RX_PPDU_DURATION_MASK
34*5113495bSYour Name #define UNIFIED_RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_LSB \
35*5113495bSYour Name 	RXPCU_PPDU_END_INFO_9_RX_PPDU_DURATION_LSB
36*5113495bSYour Name #define UNIFIED_RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHYRX_ABORT_REASON_OFFSET \
37*5113495bSYour Name 	RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHYRX_ABORT_REASON_OFFSET
38*5113495bSYour Name #define UNIFIED_RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHYRX_ABORT_REASON_MASK \
39*5113495bSYour Name 	RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHYRX_ABORT_REASON_MASK
40*5113495bSYour Name #define UNIFIED_RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHYRX_ABORT_REASON_LSB \
41*5113495bSYour Name 	RXPCU_PPDU_END_INFO_11_PHYRX_ABORT_REQUEST_INFO_DETAILS_PHYRX_ABORT_REASON_LSB
42*5113495bSYour Name #define UNIFIED_PHYRX_HT_SIG_0_HT_SIG_INFO_PHYRX_HT_SIG_INFO_DETAILS_OFFSET \
43*5113495bSYour Name 	PHYRX_HT_SIG_0_PHYRX_HT_SIG_INFO_DETAILS_MCS_OFFSET
44*5113495bSYour Name #define UNIFIED_PHYRX_L_SIG_B_0_L_SIG_B_INFO_PHYRX_L_SIG_B_INFO_DETAILS_OFFSET \
45*5113495bSYour Name 	PHYRX_L_SIG_B_0_PHYRX_L_SIG_B_INFO_DETAILS_RATE_OFFSET
46*5113495bSYour Name #define UNIFIED_PHYRX_L_SIG_A_0_L_SIG_A_INFO_PHYRX_L_SIG_A_INFO_DETAILS_OFFSET \
47*5113495bSYour Name 	PHYRX_L_SIG_A_0_PHYRX_L_SIG_A_INFO_DETAILS_RATE_OFFSET
48*5113495bSYour Name #define UNIFIED_PHYRX_VHT_SIG_A_0_VHT_SIG_A_INFO_PHYRX_VHT_SIG_A_INFO_DETAILS_OFFSET \
49*5113495bSYour Name 	PHYRX_VHT_SIG_A_0_PHYRX_VHT_SIG_A_INFO_DETAILS_BANDWIDTH_OFFSET
50*5113495bSYour Name #define UNIFIED_PHYRX_HE_SIG_A_SU_0_HE_SIG_A_SU_INFO_PHYRX_HE_SIG_A_SU_INFO_DETAILS_OFFSET \
51*5113495bSYour Name 	PHYRX_HE_SIG_A_SU_0_PHYRX_HE_SIG_A_SU_INFO_DETAILS_FORMAT_INDICATION_OFFSET
52*5113495bSYour Name #define UNIFIED_PHYRX_HE_SIG_A_MU_DL_0_HE_SIG_A_MU_DL_INFO_PHYRX_HE_SIG_A_MU_DL_INFO_DETAILS_OFFSET \
53*5113495bSYour Name 	PHYRX_HE_SIG_A_MU_DL_0_PHYRX_HE_SIG_A_MU_DL_INFO_DETAILS_DL_UL_FLAG_OFFSET
54*5113495bSYour Name #define UNIFIED_PHYRX_HE_SIG_B1_MU_0_HE_SIG_B1_MU_INFO_PHYRX_HE_SIG_B1_MU_INFO_DETAILS_OFFSET \
55*5113495bSYour Name 	PHYRX_HE_SIG_B1_MU_0_PHYRX_HE_SIG_B1_MU_INFO_DETAILS_RU_ALLOCATION_OFFSET
56*5113495bSYour Name #define UNIFIED_PHYRX_HE_SIG_B2_MU_0_HE_SIG_B2_MU_INFO_PHYRX_HE_SIG_B2_MU_INFO_DETAILS_OFFSET \
57*5113495bSYour Name 	PHYRX_HE_SIG_B2_MU_0_PHYRX_HE_SIG_B2_MU_INFO_DETAILS_STA_ID_OFFSET
58*5113495bSYour Name #define UNIFIED_PHYRX_HE_SIG_B2_OFDMA_0_HE_SIG_B2_OFDMA_INFO_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS_OFFSET \
59*5113495bSYour Name 	PHYRX_HE_SIG_B2_OFDMA_0_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS_STA_ID_OFFSET
60*5113495bSYour Name #define UNIFIED_PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET \
61*5113495bSYour Name 	PHYRX_RSSI_LEGACY_3_PRE_RSSI_INFO_DETAILS_RSSI_PRI20_CHAIN0_OFFSET
62*5113495bSYour Name #define UNIFIED_PHYRX_RSSI_LEGACY_19_RECEIVE_RSSI_INFO_PREAMBLE_RSSI_INFO_DETAILS_OFFSET \
63*5113495bSYour Name 	PHYRX_RSSI_LEGACY_19_PREAMBLE_RSSI_INFO_DETAILS_RSSI_PRI20_CHAIN0_OFFSET
64*5113495bSYour Name #define UNIFIED_RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET \
65*5113495bSYour Name 	RX_MPDU_START_9_RX_MPDU_INFO_DETAILS_RXPCU_MPDU_FILTER_IN_CATEGORY_OFFSET
66*5113495bSYour Name #define UNIFIED_RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET \
67*5113495bSYour Name 	RX_MSDU_LINK_8_MSDU_0_BUFFER_ADDR_INFO_DETAILS_BUFFER_ADDR_31_0_OFFSET
68*5113495bSYour Name #define UNIFIED_RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_RX_MSDU_DESC_INFO_DETAILS_OFFSET \
69*5113495bSYour Name 	RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG_OFFSET
70*5113495bSYour Name #define UNIFIED_RX_MPDU_DETAILS_2_RX_MPDU_DESC_INFO_RX_MPDU_DESC_INFO_DETAILS_OFFSET \
71*5113495bSYour Name 	RX_MPDU_DETAILS_2_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_OFFSET
72*5113495bSYour Name #define UNIFIED_REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_RX_MPDU_DESC_INFO_DETAILS_OFFSET \
73*5113495bSYour Name 	REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_OFFSET
74*5113495bSYour Name #define UNIFORM_REO_STATUS_HEADER_STATUS_HEADER \
75*5113495bSYour Name 	STATUS_HEADER_REO_STATUS_NUMBER
76*5113495bSYour Name #define UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC \
77*5113495bSYour Name 	STATUS_HEADER_TIMESTAMP
78*5113495bSYour Name #define UNIFIED_RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_RX_MSDU_DESC_INFO_DETAILS_OFFSET \
79*5113495bSYour Name 	RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG_OFFSET
80*5113495bSYour Name #define UNIFIED_RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET \
81*5113495bSYour Name 	RX_MSDU_LINK_8_MSDU_0_BUFFER_ADDR_INFO_DETAILS_BUFFER_ADDR_31_0_OFFSET
82*5113495bSYour Name #define UNIFIED_TCL_DATA_CMD_0_BUFFER_ADDR_INFO_BUF_ADDR_INFO_OFFSET \
83*5113495bSYour Name 	TCL_DATA_CMD_0_BUF_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET
84*5113495bSYour Name #define UNIFIED_TCL_DATA_CMD_1_BUFFER_ADDR_INFO_BUF_ADDR_INFO_OFFSET \
85*5113495bSYour Name 	TCL_DATA_CMD_1_BUF_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET
86*5113495bSYour Name #define UNIFIED_TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_OFFSET \
87*5113495bSYour Name 	TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_OFFSET
88*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_0_BUFFER_ADDR_31_0_LSB \
89*5113495bSYour Name 	BUFFER_ADDR_INFO_0_BUFFER_ADDR_31_0_LSB
90*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_0_BUFFER_ADDR_31_0_MASK \
91*5113495bSYour Name 	BUFFER_ADDR_INFO_0_BUFFER_ADDR_31_0_MASK
92*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_BUFFER_ADDR_39_32_LSB \
93*5113495bSYour Name 	BUFFER_ADDR_INFO_1_BUFFER_ADDR_39_32_LSB
94*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_BUFFER_ADDR_39_32_MASK \
95*5113495bSYour Name 	BUFFER_ADDR_INFO_1_BUFFER_ADDR_39_32_MASK
96*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_RETURN_BUFFER_MANAGER_LSB \
97*5113495bSYour Name 	BUFFER_ADDR_INFO_1_RETURN_BUFFER_MANAGER_LSB
98*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_RETURN_BUFFER_MANAGER_MASK \
99*5113495bSYour Name 	BUFFER_ADDR_INFO_1_RETURN_BUFFER_MANAGER_MASK
100*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_SW_BUFFER_COOKIE_LSB \
101*5113495bSYour Name 	BUFFER_ADDR_INFO_1_SW_BUFFER_COOKIE_LSB
102*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_SW_BUFFER_COOKIE_MASK \
103*5113495bSYour Name 	BUFFER_ADDR_INFO_1_SW_BUFFER_COOKIE_MASK
104*5113495bSYour Name #define UNIFIED_TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_LSB \
105*5113495bSYour Name 	TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_LSB
106*5113495bSYour Name #define UNIFIED_TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_MASK \
107*5113495bSYour Name 	TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_MASK
108*5113495bSYour Name #define UNIFIED_WBM_RELEASE_RING_6_TX_RATE_STATS_INFO_TX_RATE_STATS_MASK \
109*5113495bSYour Name 	WBM_RELEASE_RING_6_TX_RATE_STATS_PPDU_TRANSMISSION_TSF_MASK
110*5113495bSYour Name #define UNIFIED_WBM_RELEASE_RING_6_TX_RATE_STATS_INFO_TX_RATE_STATS_OFFSET \
111*5113495bSYour Name 	WBM_RELEASE_RING_6_TX_RATE_STATS_PPDU_TRANSMISSION_TSF_OFFSET
112*5113495bSYour Name #define UNIFIED_WBM_RELEASE_RING_6_TX_RATE_STATS_INFO_TX_RATE_STATS_LSB \
113*5113495bSYour Name 	WBM_RELEASE_RING_6_TX_RATE_STATS_PPDU_TRANSMISSION_TSF_LSB
114*5113495bSYour Name 
115*5113495bSYour Name #define CE_WINDOW_ADDRESS_6122 \
116*5113495bSYour Name 		((SOC_WFSS_CE_REG_BASE >> WINDOW_SHIFT) & WINDOW_VALUE_MASK)
117*5113495bSYour Name 
118*5113495bSYour Name #define UMAC_WINDOW_ADDRESS_6122 \
119*5113495bSYour Name 		((SEQ_WCSS_UMAC_OFFSET >> WINDOW_SHIFT) & WINDOW_VALUE_MASK)
120*5113495bSYour Name 
121*5113495bSYour Name #define WINDOW_CONFIGURATION_VALUE_6122 \
122*5113495bSYour Name 		((CE_WINDOW_ADDRESS_6122 << 6) |\
123*5113495bSYour Name 		 (UMAC_WINDOW_ADDRESS_6122 << 12) | \
124*5113495bSYour Name 		 WINDOW_ENABLE_BIT)
125*5113495bSYour Name 
126*5113495bSYour Name #include "hal_qcn6122_tx.h"
127*5113495bSYour Name #include <hal_generic_api.h>
128*5113495bSYour Name #include "hal_li_rx.h"
129*5113495bSYour Name #include "hal_li_api.h"
130*5113495bSYour Name #include "hal_li_generic_api.h"
131*5113495bSYour Name 
132*5113495bSYour Name /**
133*5113495bSYour Name  * hal_rx_sw_mon_desc_info_get_6122() - API to read the sw monitor ring
134*5113495bSYour Name  *                                      descriptor
135*5113495bSYour Name  * @rxdma_dst_ring_desc: sw monitor ring descriptor
136*5113495bSYour Name  * @desc_info_buf: Descriptor info buffer to which sw monitor ring descriptor is
137*5113495bSYour Name  *                 populated to
138*5113495bSYour Name  *
139*5113495bSYour Name  * Return: void
140*5113495bSYour Name  */
141*5113495bSYour Name static void
hal_rx_sw_mon_desc_info_get_6122(hal_ring_desc_t rxdma_dst_ring_desc,hal_rx_mon_desc_info_t desc_info_buf)142*5113495bSYour Name hal_rx_sw_mon_desc_info_get_6122(hal_ring_desc_t rxdma_dst_ring_desc,
143*5113495bSYour Name 				 hal_rx_mon_desc_info_t desc_info_buf)
144*5113495bSYour Name {
145*5113495bSYour Name 	struct sw_monitor_ring *sw_mon_ring =
146*5113495bSYour Name 		(struct sw_monitor_ring *)rxdma_dst_ring_desc;
147*5113495bSYour Name 	struct buffer_addr_info *buf_addr_info;
148*5113495bSYour Name 	uint32_t *mpdu_info;
149*5113495bSYour Name 	uint32_t loop_cnt;
150*5113495bSYour Name 	struct hal_rx_mon_desc_info *desc_info;
151*5113495bSYour Name 
152*5113495bSYour Name 	desc_info = (struct hal_rx_mon_desc_info *)desc_info_buf;
153*5113495bSYour Name 	mpdu_info = (uint32_t *)&sw_mon_ring->
154*5113495bSYour Name 			reo_level_mpdu_frame_info.rx_mpdu_desc_info_details;
155*5113495bSYour Name 
156*5113495bSYour Name 	loop_cnt = HAL_RX_GET(sw_mon_ring, SW_MONITOR_RING_7, LOOPING_COUNT);
157*5113495bSYour Name 	desc_info->msdu_count = HAL_RX_MPDU_MSDU_COUNT_GET(mpdu_info);
158*5113495bSYour Name 
159*5113495bSYour Name 	/* Get msdu link descriptor buf_addr_info */
160*5113495bSYour Name 	buf_addr_info = &sw_mon_ring->
161*5113495bSYour Name 		reo_level_mpdu_frame_info.msdu_link_desc_addr_info;
162*5113495bSYour Name 	desc_info->link_desc.paddr = HAL_RX_BUFFER_ADDR_31_0_GET(buf_addr_info)
163*5113495bSYour Name 			| ((uint64_t)(HAL_RX_BUFFER_ADDR_39_32_GET(
164*5113495bSYour Name 			buf_addr_info)) << 32);
165*5113495bSYour Name 	desc_info->link_desc.sw_cookie = HAL_RX_BUF_COOKIE_GET(buf_addr_info);
166*5113495bSYour Name 	buf_addr_info = &sw_mon_ring->status_buff_addr_info;
167*5113495bSYour Name 	desc_info->status_buf.paddr = HAL_RX_BUFFER_ADDR_31_0_GET(buf_addr_info)
168*5113495bSYour Name 			| ((uint64_t)
169*5113495bSYour Name 			  (HAL_RX_BUFFER_ADDR_39_32_GET(buf_addr_info)) << 32);
170*5113495bSYour Name 	desc_info->status_buf.sw_cookie = HAL_RX_BUF_COOKIE_GET(buf_addr_info);
171*5113495bSYour Name 	desc_info->end_of_ppdu = HAL_RX_GET(sw_mon_ring,
172*5113495bSYour Name 					    SW_MONITOR_RING_6,
173*5113495bSYour Name 					    END_OF_PPDU);
174*5113495bSYour Name 	desc_info->status_buf_count = HAL_RX_GET(sw_mon_ring,
175*5113495bSYour Name 						 SW_MONITOR_RING_6,
176*5113495bSYour Name 						 STATUS_BUF_COUNT);
177*5113495bSYour Name 	desc_info->rxdma_push_reason = HAL_RX_GET(sw_mon_ring,
178*5113495bSYour Name 						  SW_MONITOR_RING_6,
179*5113495bSYour Name 						  RXDMA_PUSH_REASON);
180*5113495bSYour Name 	desc_info->ppdu_id = HAL_RX_GET(sw_mon_ring,
181*5113495bSYour Name 					SW_MONITOR_RING_7,
182*5113495bSYour Name 					PHY_PPDU_ID);
183*5113495bSYour Name }
184*5113495bSYour Name 
185*5113495bSYour Name /**
186*5113495bSYour Name  * hal_rx_msdu_start_nss_get_6122() - API to get the NSS Interval from
187*5113495bSYour Name  *                                    rx_msdu_start
188*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
189*5113495bSYour Name  *
190*5113495bSYour Name  * Return: uint32_t(nss)
191*5113495bSYour Name  */
hal_rx_msdu_start_nss_get_6122(uint8_t * buf)192*5113495bSYour Name static uint32_t hal_rx_msdu_start_nss_get_6122(uint8_t *buf)
193*5113495bSYour Name {
194*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
195*5113495bSYour Name 	struct rx_msdu_start *msdu_start =
196*5113495bSYour Name 				&pkt_tlvs->msdu_start_tlv.rx_msdu_start;
197*5113495bSYour Name 	uint8_t mimo_ss_bitmap;
198*5113495bSYour Name 
199*5113495bSYour Name 	mimo_ss_bitmap = HAL_RX_MSDU_START_MIMO_SS_BITMAP(msdu_start);
200*5113495bSYour Name 
201*5113495bSYour Name 	return qdf_get_hweight8(mimo_ss_bitmap);
202*5113495bSYour Name }
203*5113495bSYour Name 
204*5113495bSYour Name /**
205*5113495bSYour Name  * hal_rx_msdu_start_get_len_6122() - API to get the MSDU length from
206*5113495bSYour Name  *                                    rx_msdu_start TLV
207*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
208*5113495bSYour Name  *
209*5113495bSYour Name  * Return: (uint32_t)msdu length
210*5113495bSYour Name  */
hal_rx_msdu_start_get_len_6122(uint8_t * buf)211*5113495bSYour Name static uint32_t hal_rx_msdu_start_get_len_6122(uint8_t *buf)
212*5113495bSYour Name {
213*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
214*5113495bSYour Name 	struct rx_msdu_start *msdu_start =
215*5113495bSYour Name 				&pkt_tlvs->msdu_start_tlv.rx_msdu_start;
216*5113495bSYour Name 	uint32_t msdu_len;
217*5113495bSYour Name 
218*5113495bSYour Name 	msdu_len = HAL_RX_MSDU_START_MSDU_LEN_GET(msdu_start);
219*5113495bSYour Name 
220*5113495bSYour Name 	return msdu_len;
221*5113495bSYour Name }
222*5113495bSYour Name 
223*5113495bSYour Name /**
224*5113495bSYour Name  * hal_rx_mon_hw_desc_get_mpdu_status_6122() - Retrieve MPDU status
225*5113495bSYour Name  * @hw_desc_addr: Start address of Rx HW TLVs
226*5113495bSYour Name  * @rs: Status for monitor mode
227*5113495bSYour Name  *
228*5113495bSYour Name  * Return: void
229*5113495bSYour Name  */
hal_rx_mon_hw_desc_get_mpdu_status_6122(void * hw_desc_addr,struct mon_rx_status * rs)230*5113495bSYour Name static void hal_rx_mon_hw_desc_get_mpdu_status_6122(void *hw_desc_addr,
231*5113495bSYour Name 						    struct mon_rx_status *rs)
232*5113495bSYour Name {
233*5113495bSYour Name 	struct rx_msdu_start *rx_msdu_start;
234*5113495bSYour Name 	struct rx_pkt_tlvs *rx_desc = (struct rx_pkt_tlvs *)hw_desc_addr;
235*5113495bSYour Name 	uint32_t reg_value;
236*5113495bSYour Name 	const uint32_t sgi_hw_to_cdp[] = {
237*5113495bSYour Name 		CDP_SGI_0_8_US,
238*5113495bSYour Name 		CDP_SGI_0_4_US,
239*5113495bSYour Name 		CDP_SGI_1_6_US,
240*5113495bSYour Name 		CDP_SGI_3_2_US,
241*5113495bSYour Name 	};
242*5113495bSYour Name 
243*5113495bSYour Name 	rx_msdu_start = &rx_desc->msdu_start_tlv.rx_msdu_start;
244*5113495bSYour Name 
245*5113495bSYour Name 	HAL_RX_GET_MSDU_AGGREGATION(rx_desc, rs);
246*5113495bSYour Name 
247*5113495bSYour Name 	rs->ant_signal_db = HAL_RX_GET(rx_msdu_start,
248*5113495bSYour Name 				RX_MSDU_START_5, USER_RSSI);
249*5113495bSYour Name 	rs->is_stbc = HAL_RX_GET(rx_msdu_start, RX_MSDU_START_5, STBC);
250*5113495bSYour Name 
251*5113495bSYour Name 	reg_value = HAL_RX_GET(rx_msdu_start, RX_MSDU_START_5, SGI);
252*5113495bSYour Name 	rs->sgi = sgi_hw_to_cdp[reg_value];
253*5113495bSYour Name 	reg_value = HAL_RX_GET(rx_msdu_start, RX_MSDU_START_5, RECEPTION_TYPE);
254*5113495bSYour Name 	rs->beamformed = (reg_value == HAL_RX_RECEPTION_TYPE_MU_MIMO) ? 1 : 0;
255*5113495bSYour Name 	/* TODO: rs->beamformed should be set for SU beamforming also */
256*5113495bSYour Name }
257*5113495bSYour Name 
258*5113495bSYour Name #define LINK_DESC_SIZE (NUM_OF_DWORDS_RX_MSDU_LINK << 2)
259*5113495bSYour Name /**
260*5113495bSYour Name  * hal_get_link_desc_size_6122() - API to get the link desc size
261*5113495bSYour Name  *
262*5113495bSYour Name  * Return: uint32_t
263*5113495bSYour Name  */
hal_get_link_desc_size_6122(void)264*5113495bSYour Name static uint32_t hal_get_link_desc_size_6122(void)
265*5113495bSYour Name {
266*5113495bSYour Name 	return LINK_DESC_SIZE;
267*5113495bSYour Name }
268*5113495bSYour Name 
269*5113495bSYour Name /**
270*5113495bSYour Name  * hal_rx_get_tlv_6122() - API to get the tlv
271*5113495bSYour Name  * @rx_tlv: TLV data extracted from the rx packet
272*5113495bSYour Name  *
273*5113495bSYour Name  * Return: uint8_t
274*5113495bSYour Name  */
hal_rx_get_tlv_6122(void * rx_tlv)275*5113495bSYour Name static uint8_t hal_rx_get_tlv_6122(void *rx_tlv)
276*5113495bSYour Name {
277*5113495bSYour Name 	return HAL_RX_GET(rx_tlv, PHYRX_RSSI_LEGACY_0, RECEIVE_BANDWIDTH);
278*5113495bSYour Name }
279*5113495bSYour Name 
280*5113495bSYour Name /**
281*5113495bSYour Name  * hal_rx_mpdu_start_tlv_tag_valid_6122() - API to check if RX_MPDU_START
282*5113495bSYour Name  *                                          tlv tag is valid
283*5113495bSYour Name  * @rx_tlv_hdr: start address of rx_pkt_tlvs
284*5113495bSYour Name  *
285*5113495bSYour Name  * Return: true if RX_MPDU_START is valid, else false.
286*5113495bSYour Name  */
hal_rx_mpdu_start_tlv_tag_valid_6122(void * rx_tlv_hdr)287*5113495bSYour Name uint8_t hal_rx_mpdu_start_tlv_tag_valid_6122(void *rx_tlv_hdr)
288*5113495bSYour Name {
289*5113495bSYour Name 	struct rx_pkt_tlvs *rx_desc = (struct rx_pkt_tlvs *)rx_tlv_hdr;
290*5113495bSYour Name 	uint32_t tlv_tag;
291*5113495bSYour Name 
292*5113495bSYour Name 	tlv_tag = HAL_RX_GET_USER_TLV32_TYPE(&rx_desc->mpdu_start_tlv);
293*5113495bSYour Name 
294*5113495bSYour Name 	return tlv_tag == WIFIRX_MPDU_START_E ? true : false;
295*5113495bSYour Name }
296*5113495bSYour Name 
297*5113495bSYour Name /**
298*5113495bSYour Name  * hal_rx_wbm_err_msdu_continuation_get_6122() - API to check if WBM msdu
299*5113495bSYour Name  *                                               continuation bit is set
300*5113495bSYour Name  * @wbm_desc: wbm release ring descriptor
301*5113495bSYour Name  *
302*5113495bSYour Name  * Return: true if msdu continuation bit is set.
303*5113495bSYour Name  */
hal_rx_wbm_err_msdu_continuation_get_6122(void * wbm_desc)304*5113495bSYour Name uint8_t hal_rx_wbm_err_msdu_continuation_get_6122(void *wbm_desc)
305*5113495bSYour Name {
306*5113495bSYour Name 	uint32_t comp_desc =
307*5113495bSYour Name 		*(uint32_t *)(((uint8_t *)wbm_desc) +
308*5113495bSYour Name 				WBM_RELEASE_RING_3_MSDU_CONTINUATION_OFFSET);
309*5113495bSYour Name 
310*5113495bSYour Name 	return (comp_desc & WBM_RELEASE_RING_3_MSDU_CONTINUATION_MASK) >>
311*5113495bSYour Name 		WBM_RELEASE_RING_3_MSDU_CONTINUATION_LSB;
312*5113495bSYour Name }
313*5113495bSYour Name 
314*5113495bSYour Name /**
315*5113495bSYour Name  * hal_rx_proc_phyrx_other_receive_info_tlv_6122() - API to get tlv info
316*5113495bSYour Name  * @rx_tlv_hdr: RX TLV header
317*5113495bSYour Name  * @ppdu_info_hdl: handle to PPDU info to update
318*5113495bSYour Name  *
319*5113495bSYour Name  * Return: None
320*5113495bSYour Name  */
321*5113495bSYour Name static inline
hal_rx_proc_phyrx_other_receive_info_tlv_6122(void * rx_tlv_hdr,void * ppdu_info_hdl)322*5113495bSYour Name void hal_rx_proc_phyrx_other_receive_info_tlv_6122(void *rx_tlv_hdr,
323*5113495bSYour Name 						   void *ppdu_info_hdl)
324*5113495bSYour Name {
325*5113495bSYour Name }
326*5113495bSYour Name 
327*5113495bSYour Name #if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
328*5113495bSYour Name static inline
hal_rx_get_bb_info_6122(void * rx_tlv,void * ppdu_info_hdl)329*5113495bSYour Name void hal_rx_get_bb_info_6122(void *rx_tlv,
330*5113495bSYour Name 			     void *ppdu_info_hdl)
331*5113495bSYour Name {
332*5113495bSYour Name 	struct hal_rx_ppdu_info *ppdu_info  = ppdu_info_hdl;
333*5113495bSYour Name 
334*5113495bSYour Name 	ppdu_info->cfr_info.bb_captured_channel =
335*5113495bSYour Name 		HAL_RX_GET(rx_tlv, RXPCU_PPDU_END_INFO_3, BB_CAPTURED_CHANNEL);
336*5113495bSYour Name 
337*5113495bSYour Name 	ppdu_info->cfr_info.bb_captured_timeout =
338*5113495bSYour Name 		HAL_RX_GET(rx_tlv, RXPCU_PPDU_END_INFO_3, BB_CAPTURED_TIMEOUT);
339*5113495bSYour Name 
340*5113495bSYour Name 	ppdu_info->cfr_info.bb_captured_reason =
341*5113495bSYour Name 		HAL_RX_GET(rx_tlv, RXPCU_PPDU_END_INFO_3, BB_CAPTURED_REASON);
342*5113495bSYour Name }
343*5113495bSYour Name 
344*5113495bSYour Name static inline
hal_rx_get_rtt_info_6122(void * rx_tlv,void * ppdu_info_hdl)345*5113495bSYour Name void hal_rx_get_rtt_info_6122(void *rx_tlv,
346*5113495bSYour Name 			      void *ppdu_info_hdl)
347*5113495bSYour Name {
348*5113495bSYour Name 	struct hal_rx_ppdu_info *ppdu_info  = ppdu_info_hdl;
349*5113495bSYour Name 
350*5113495bSYour Name 	ppdu_info->cfr_info.rx_location_info_valid =
351*5113495bSYour Name 	HAL_RX_GET(rx_tlv, PHYRX_PKT_END_13_RX_PKT_END_DETAILS,
352*5113495bSYour Name 		   RX_LOCATION_INFO_DETAILS_RX_LOCATION_INFO_VALID);
353*5113495bSYour Name 
354*5113495bSYour Name 	ppdu_info->cfr_info.rtt_che_buffer_pointer_low32 =
355*5113495bSYour Name 	HAL_RX_GET(rx_tlv,
356*5113495bSYour Name 		   PHYRX_PKT_END_12_RX_PKT_END_DETAILS_RX_LOCATION_INFO_DETAILS,
357*5113495bSYour Name 		   RTT_CHE_BUFFER_POINTER_LOW32);
358*5113495bSYour Name 
359*5113495bSYour Name 	ppdu_info->cfr_info.rtt_che_buffer_pointer_high8 =
360*5113495bSYour Name 	HAL_RX_GET(rx_tlv,
361*5113495bSYour Name 		   PHYRX_PKT_END_11_RX_PKT_END_DETAILS_RX_LOCATION_INFO_DETAILS,
362*5113495bSYour Name 		   RTT_CHE_BUFFER_POINTER_HIGH8);
363*5113495bSYour Name 
364*5113495bSYour Name 	ppdu_info->cfr_info.chan_capture_status =
365*5113495bSYour Name 	HAL_RX_GET(rx_tlv,
366*5113495bSYour Name 		   PHYRX_PKT_END_13_RX_PKT_END_DETAILS_RX_LOCATION_INFO_DETAILS,
367*5113495bSYour Name 		   RESERVED_8);
368*5113495bSYour Name 
369*5113495bSYour Name 	ppdu_info->cfr_info.rx_start_ts =
370*5113495bSYour Name 	HAL_RX_GET(rx_tlv,
371*5113495bSYour Name 		   PHYRX_PKT_END_9_RX_PKT_END_DETAILS_RX_LOCATION_INFO_DETAILS,
372*5113495bSYour Name 		   RX_START_TS);
373*5113495bSYour Name 
374*5113495bSYour Name 	ppdu_info->cfr_info.rtt_cfo_measurement = (int16_t)
375*5113495bSYour Name 	HAL_RX_GET(rx_tlv,
376*5113495bSYour Name 		   PHYRX_PKT_END_13_RX_PKT_END_DETAILS_RX_LOCATION_INFO_DETAILS,
377*5113495bSYour Name 		   RTT_CFO_MEASUREMENT);
378*5113495bSYour Name 
379*5113495bSYour Name 	ppdu_info->cfr_info.agc_gain_info0 =
380*5113495bSYour Name 	HAL_RX_GET(rx_tlv,
381*5113495bSYour Name 		   PHYRX_PKT_END_1_RX_PKT_END_DETAILS,
382*5113495bSYour Name 		   PHY_TIMESTAMP_1_LOWER_32);
383*5113495bSYour Name 
384*5113495bSYour Name 	ppdu_info->cfr_info.agc_gain_info1 =
385*5113495bSYour Name 	HAL_RX_GET(rx_tlv,
386*5113495bSYour Name 		   PHYRX_PKT_END_2_RX_PKT_END_DETAILS,
387*5113495bSYour Name 		   PHY_TIMESTAMP_1_UPPER_32);
388*5113495bSYour Name 
389*5113495bSYour Name 	ppdu_info->cfr_info.agc_gain_info2 =
390*5113495bSYour Name 	HAL_RX_GET(rx_tlv,
391*5113495bSYour Name 		   PHYRX_PKT_END_3_RX_PKT_END_DETAILS,
392*5113495bSYour Name 		   PHY_TIMESTAMP_2_LOWER_32);
393*5113495bSYour Name 
394*5113495bSYour Name 	ppdu_info->cfr_info.agc_gain_info3 =
395*5113495bSYour Name 	HAL_RX_GET(rx_tlv,
396*5113495bSYour Name 		   PHYRX_PKT_END_4_RX_PKT_END_DETAILS,
397*5113495bSYour Name 		   PHY_TIMESTAMP_2_UPPER_32);
398*5113495bSYour Name 
399*5113495bSYour Name 	ppdu_info->cfr_info.mcs_rate =
400*5113495bSYour Name 	HAL_RX_GET(rx_tlv,
401*5113495bSYour Name 		   PHYRX_PKT_END_8_RX_PKT_END_DETAILS_RX_LOCATION_INFO_DETAILS,
402*5113495bSYour Name 		   RTT_MCS_RATE);
403*5113495bSYour Name 
404*5113495bSYour Name 	ppdu_info->cfr_info.gi_type =
405*5113495bSYour Name 	HAL_RX_GET(rx_tlv,
406*5113495bSYour Name 		   PHYRX_PKT_END_8_RX_PKT_END_DETAILS_RX_LOCATION_INFO_DETAILS,
407*5113495bSYour Name 		   RTT_GI_TYPE);
408*5113495bSYour Name }
409*5113495bSYour Name #endif
410*5113495bSYour Name 
411*5113495bSYour Name /**
412*5113495bSYour Name  * hal_rx_dump_msdu_start_tlv_6122() - dump RX msdu_start TLV in structured
413*5113495bSYour Name  *			               human readable format.
414*5113495bSYour Name  * @pkttlvs: pointer to the pkttlvs.
415*5113495bSYour Name  * @dbg_level: log level.
416*5113495bSYour Name  *
417*5113495bSYour Name  * Return: void
418*5113495bSYour Name  */
hal_rx_dump_msdu_start_tlv_6122(void * pkttlvs,uint8_t dbg_level)419*5113495bSYour Name static void hal_rx_dump_msdu_start_tlv_6122(void *pkttlvs,
420*5113495bSYour Name 					    uint8_t dbg_level)
421*5113495bSYour Name {
422*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)pkttlvs;
423*5113495bSYour Name 	struct rx_msdu_start *msdu_start =
424*5113495bSYour Name 					&pkt_tlvs->msdu_start_tlv.rx_msdu_start;
425*5113495bSYour Name 
426*5113495bSYour Name 	QDF_TRACE(QDF_MODULE_ID_DP, dbg_level,
427*5113495bSYour Name 		  "rx_msdu_start tlv - "
428*5113495bSYour Name 		  "rxpcu_mpdu_filter_in_category: %d "
429*5113495bSYour Name 		  "sw_frame_group_id: %d "
430*5113495bSYour Name 		  "phy_ppdu_id: %d "
431*5113495bSYour Name 		  "msdu_length: %d "
432*5113495bSYour Name 		  "ipsec_esp: %d "
433*5113495bSYour Name 		  "l3_offset: %d "
434*5113495bSYour Name 		  "ipsec_ah: %d "
435*5113495bSYour Name 		  "l4_offset: %d "
436*5113495bSYour Name 		  "msdu_number: %d "
437*5113495bSYour Name 		  "decap_format: %d "
438*5113495bSYour Name 		  "ipv4_proto: %d "
439*5113495bSYour Name 		  "ipv6_proto: %d "
440*5113495bSYour Name 		  "tcp_proto: %d "
441*5113495bSYour Name 		  "udp_proto: %d "
442*5113495bSYour Name 		  "ip_frag: %d "
443*5113495bSYour Name 		  "tcp_only_ack: %d "
444*5113495bSYour Name 		  "da_is_bcast_mcast: %d "
445*5113495bSYour Name 		  "ip4_protocol_ip6_next_header: %d "
446*5113495bSYour Name 		  "toeplitz_hash_2_or_4: %d "
447*5113495bSYour Name 		  "flow_id_toeplitz: %d "
448*5113495bSYour Name 		  "user_rssi: %d "
449*5113495bSYour Name 		  "pkt_type: %d "
450*5113495bSYour Name 		  "stbc: %d "
451*5113495bSYour Name 		  "sgi: %d "
452*5113495bSYour Name 		  "rate_mcs: %d "
453*5113495bSYour Name 		  "receive_bandwidth: %d "
454*5113495bSYour Name 		  "reception_type: %d "
455*5113495bSYour Name 		  "ppdu_start_timestamp: %d "
456*5113495bSYour Name 		  "sw_phy_meta_data: %d ",
457*5113495bSYour Name 		  msdu_start->rxpcu_mpdu_filter_in_category,
458*5113495bSYour Name 		  msdu_start->sw_frame_group_id,
459*5113495bSYour Name 		  msdu_start->phy_ppdu_id,
460*5113495bSYour Name 		  msdu_start->msdu_length,
461*5113495bSYour Name 		  msdu_start->ipsec_esp,
462*5113495bSYour Name 		  msdu_start->l3_offset,
463*5113495bSYour Name 		  msdu_start->ipsec_ah,
464*5113495bSYour Name 		  msdu_start->l4_offset,
465*5113495bSYour Name 		  msdu_start->msdu_number,
466*5113495bSYour Name 		  msdu_start->decap_format,
467*5113495bSYour Name 		  msdu_start->ipv4_proto,
468*5113495bSYour Name 		  msdu_start->ipv6_proto,
469*5113495bSYour Name 		  msdu_start->tcp_proto,
470*5113495bSYour Name 		  msdu_start->udp_proto,
471*5113495bSYour Name 		  msdu_start->ip_frag,
472*5113495bSYour Name 		  msdu_start->tcp_only_ack,
473*5113495bSYour Name 		  msdu_start->da_is_bcast_mcast,
474*5113495bSYour Name 		  msdu_start->ip4_protocol_ip6_next_header,
475*5113495bSYour Name 		  msdu_start->toeplitz_hash_2_or_4,
476*5113495bSYour Name 		  msdu_start->flow_id_toeplitz,
477*5113495bSYour Name 		  msdu_start->user_rssi,
478*5113495bSYour Name 		  msdu_start->pkt_type,
479*5113495bSYour Name 		  msdu_start->stbc,
480*5113495bSYour Name 		  msdu_start->sgi,
481*5113495bSYour Name 		  msdu_start->rate_mcs,
482*5113495bSYour Name 		  msdu_start->receive_bandwidth,
483*5113495bSYour Name 		  msdu_start->reception_type,
484*5113495bSYour Name 		  msdu_start->ppdu_start_timestamp,
485*5113495bSYour Name 		  msdu_start->sw_phy_meta_data);
486*5113495bSYour Name }
487*5113495bSYour Name 
488*5113495bSYour Name /**
489*5113495bSYour Name  * hal_rx_dump_msdu_end_tlv_6122() - dump RX msdu_end TLV in structured
490*5113495bSYour Name  *			             human readable format.
491*5113495bSYour Name  * @pkttlvs: pointer to the pkttlvs.
492*5113495bSYour Name  * @dbg_level: log level.
493*5113495bSYour Name  *
494*5113495bSYour Name  * Return: void
495*5113495bSYour Name  */
hal_rx_dump_msdu_end_tlv_6122(void * pkttlvs,uint8_t dbg_level)496*5113495bSYour Name static void hal_rx_dump_msdu_end_tlv_6122(void *pkttlvs,
497*5113495bSYour Name 					  uint8_t dbg_level)
498*5113495bSYour Name {
499*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)pkttlvs;
500*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
501*5113495bSYour Name 
502*5113495bSYour Name 	QDF_TRACE(QDF_MODULE_ID_DP, dbg_level,
503*5113495bSYour Name 		  "rx_msdu_end tlv - "
504*5113495bSYour Name 		  "rxpcu_mpdu_filter_in_category: %d "
505*5113495bSYour Name 		  "sw_frame_group_id: %d "
506*5113495bSYour Name 		  "phy_ppdu_id: %d "
507*5113495bSYour Name 		  "ip_hdr_chksum: %d "
508*5113495bSYour Name 		  "reported_mpdu_length: %d "
509*5113495bSYour Name 		  "key_id_octet: %d "
510*5113495bSYour Name 		  "cce_super_rule: %d "
511*5113495bSYour Name 		  "cce_classify_not_done_truncat: %d "
512*5113495bSYour Name 		  "cce_classify_not_done_cce_dis: %d "
513*5113495bSYour Name 		  "rule_indication_31_0: %d "
514*5113495bSYour Name 		  "rule_indication_63_32: %d "
515*5113495bSYour Name 		  "da_offset: %d "
516*5113495bSYour Name 		  "sa_offset: %d "
517*5113495bSYour Name 		  "da_offset_valid: %d "
518*5113495bSYour Name 		  "sa_offset_valid: %d "
519*5113495bSYour Name 		  "ipv6_options_crc: %d "
520*5113495bSYour Name 		  "tcp_seq_number: %d "
521*5113495bSYour Name 		  "tcp_ack_number: %d "
522*5113495bSYour Name 		  "tcp_flag: %d "
523*5113495bSYour Name 		  "lro_eligible: %d "
524*5113495bSYour Name 		  "window_size: %d "
525*5113495bSYour Name 		  "tcp_udp_chksum: %d "
526*5113495bSYour Name 		  "sa_idx_timeout: %d "
527*5113495bSYour Name 		  "da_idx_timeout: %d "
528*5113495bSYour Name 		  "msdu_limit_error: %d "
529*5113495bSYour Name 		  "flow_idx_timeout: %d "
530*5113495bSYour Name 		  "flow_idx_invalid: %d "
531*5113495bSYour Name 		  "wifi_parser_error: %d "
532*5113495bSYour Name 		  "amsdu_parser_error: %d "
533*5113495bSYour Name 		  "sa_is_valid: %d "
534*5113495bSYour Name 		  "da_is_valid: %d "
535*5113495bSYour Name 		  "da_is_mcbc: %d "
536*5113495bSYour Name 		  "l3_header_padding: %d "
537*5113495bSYour Name 		  "first_msdu: %d "
538*5113495bSYour Name 		  "last_msdu: %d "
539*5113495bSYour Name 		  "sa_idx: %d "
540*5113495bSYour Name 		  "msdu_drop: %d "
541*5113495bSYour Name 		  "reo_destination_indication: %d "
542*5113495bSYour Name 		  "flow_idx: %d "
543*5113495bSYour Name 		  "fse_metadata: %d "
544*5113495bSYour Name 		  "cce_metadata: %d "
545*5113495bSYour Name 		  "sa_sw_peer_id: %d ",
546*5113495bSYour Name 		  msdu_end->rxpcu_mpdu_filter_in_category,
547*5113495bSYour Name 		  msdu_end->sw_frame_group_id,
548*5113495bSYour Name 		  msdu_end->phy_ppdu_id,
549*5113495bSYour Name 		  msdu_end->ip_hdr_chksum,
550*5113495bSYour Name 		  msdu_end->reported_mpdu_length,
551*5113495bSYour Name 		  msdu_end->key_id_octet,
552*5113495bSYour Name 		  msdu_end->cce_super_rule,
553*5113495bSYour Name 		  msdu_end->cce_classify_not_done_truncate,
554*5113495bSYour Name 		  msdu_end->cce_classify_not_done_cce_dis,
555*5113495bSYour Name 		  msdu_end->rule_indication_31_0,
556*5113495bSYour Name 		  msdu_end->rule_indication_63_32,
557*5113495bSYour Name 		  msdu_end->da_offset,
558*5113495bSYour Name 		  msdu_end->sa_offset,
559*5113495bSYour Name 		  msdu_end->da_offset_valid,
560*5113495bSYour Name 		  msdu_end->sa_offset_valid,
561*5113495bSYour Name 		  msdu_end->ipv6_options_crc,
562*5113495bSYour Name 		  msdu_end->tcp_seq_number,
563*5113495bSYour Name 		  msdu_end->tcp_ack_number,
564*5113495bSYour Name 		  msdu_end->tcp_flag,
565*5113495bSYour Name 		  msdu_end->lro_eligible,
566*5113495bSYour Name 		  msdu_end->window_size,
567*5113495bSYour Name 		  msdu_end->tcp_udp_chksum,
568*5113495bSYour Name 		  msdu_end->sa_idx_timeout,
569*5113495bSYour Name 		  msdu_end->da_idx_timeout,
570*5113495bSYour Name 		  msdu_end->msdu_limit_error,
571*5113495bSYour Name 		  msdu_end->flow_idx_timeout,
572*5113495bSYour Name 		  msdu_end->flow_idx_invalid,
573*5113495bSYour Name 		  msdu_end->wifi_parser_error,
574*5113495bSYour Name 		  msdu_end->amsdu_parser_error,
575*5113495bSYour Name 		  msdu_end->sa_is_valid,
576*5113495bSYour Name 		  msdu_end->da_is_valid,
577*5113495bSYour Name 		  msdu_end->da_is_mcbc,
578*5113495bSYour Name 		  msdu_end->l3_header_padding,
579*5113495bSYour Name 		  msdu_end->first_msdu,
580*5113495bSYour Name 		  msdu_end->last_msdu,
581*5113495bSYour Name 		  msdu_end->sa_idx,
582*5113495bSYour Name 		  msdu_end->msdu_drop,
583*5113495bSYour Name 		  msdu_end->reo_destination_indication,
584*5113495bSYour Name 		  msdu_end->flow_idx,
585*5113495bSYour Name 		  msdu_end->fse_metadata,
586*5113495bSYour Name 		  msdu_end->cce_metadata,
587*5113495bSYour Name 		  msdu_end->sa_sw_peer_id);
588*5113495bSYour Name }
589*5113495bSYour Name 
590*5113495bSYour Name /**
591*5113495bSYour Name  * hal_rx_mpdu_start_tid_get_6122() - API to get tid from rx_msdu_start
592*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
593*5113495bSYour Name  *
594*5113495bSYour Name  * Return: uint32_t(tid value)
595*5113495bSYour Name  */
hal_rx_mpdu_start_tid_get_6122(uint8_t * buf)596*5113495bSYour Name static uint32_t hal_rx_mpdu_start_tid_get_6122(uint8_t *buf)
597*5113495bSYour Name {
598*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
599*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
600*5113495bSYour Name 			&pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
601*5113495bSYour Name 	uint32_t tid;
602*5113495bSYour Name 
603*5113495bSYour Name 	tid = HAL_RX_MPDU_INFO_TID_GET(&mpdu_start->rx_mpdu_info_details);
604*5113495bSYour Name 
605*5113495bSYour Name 	return tid;
606*5113495bSYour Name }
607*5113495bSYour Name 
608*5113495bSYour Name /**
609*5113495bSYour Name  * hal_rx_msdu_start_reception_type_get_6122() - API to get the reception type
610*5113495bSYour Name  *                                               Interval from rx_msdu_start
611*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
612*5113495bSYour Name  *
613*5113495bSYour Name  * Return: uint32_t(reception_type)
614*5113495bSYour Name  */
hal_rx_msdu_start_reception_type_get_6122(uint8_t * buf)615*5113495bSYour Name static uint32_t hal_rx_msdu_start_reception_type_get_6122(uint8_t *buf)
616*5113495bSYour Name {
617*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
618*5113495bSYour Name 	struct rx_msdu_start *msdu_start =
619*5113495bSYour Name 		&pkt_tlvs->msdu_start_tlv.rx_msdu_start;
620*5113495bSYour Name 	uint32_t reception_type;
621*5113495bSYour Name 
622*5113495bSYour Name 	reception_type = HAL_RX_MSDU_START_RECEPTION_TYPE_GET(msdu_start);
623*5113495bSYour Name 
624*5113495bSYour Name 	return reception_type;
625*5113495bSYour Name }
626*5113495bSYour Name 
627*5113495bSYour Name /**
628*5113495bSYour Name  * hal_rx_msdu_end_da_idx_get_6122() - API to get da_idx from rx_msdu_end TLV
629*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
630*5113495bSYour Name  *
631*5113495bSYour Name  * Return: da index
632*5113495bSYour Name  */
hal_rx_msdu_end_da_idx_get_6122(uint8_t * buf)633*5113495bSYour Name static uint16_t hal_rx_msdu_end_da_idx_get_6122(uint8_t *buf)
634*5113495bSYour Name {
635*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
636*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
637*5113495bSYour Name 	uint16_t da_idx;
638*5113495bSYour Name 
639*5113495bSYour Name 	da_idx = HAL_RX_MSDU_END_DA_IDX_GET(msdu_end);
640*5113495bSYour Name 
641*5113495bSYour Name 	return da_idx;
642*5113495bSYour Name }
643*5113495bSYour Name 
644*5113495bSYour Name /**
645*5113495bSYour Name  * hal_rx_get_rx_fragment_number_6122() - Function to retrieve rx fragment
646*5113495bSYour Name  *                                        number
647*5113495bSYour Name  * @buf: Network buffer
648*5113495bSYour Name  *
649*5113495bSYour Name  * Return: rx fragment number
650*5113495bSYour Name  */
651*5113495bSYour Name static
hal_rx_get_rx_fragment_number_6122(uint8_t * buf)652*5113495bSYour Name uint8_t hal_rx_get_rx_fragment_number_6122(uint8_t *buf)
653*5113495bSYour Name {
654*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf);
655*5113495bSYour Name 	struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs);
656*5113495bSYour Name 
657*5113495bSYour Name 	/* Return first 4 bits as fragment number */
658*5113495bSYour Name 	return (HAL_RX_MPDU_GET_SEQUENCE_NUMBER(rx_mpdu_info) &
659*5113495bSYour Name 		DOT11_SEQ_FRAG_MASK);
660*5113495bSYour Name }
661*5113495bSYour Name 
662*5113495bSYour Name /**
663*5113495bSYour Name  * hal_rx_msdu_end_da_is_mcbc_get_6122() - API to check if pkt is MCBC from
664*5113495bSYour Name  *                                         rx_msdu_end TLV
665*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
666*5113495bSYour Name  *
667*5113495bSYour Name  * Return: da_is_mcbc
668*5113495bSYour Name  */
669*5113495bSYour Name static uint8_t
hal_rx_msdu_end_da_is_mcbc_get_6122(uint8_t * buf)670*5113495bSYour Name hal_rx_msdu_end_da_is_mcbc_get_6122(uint8_t *buf)
671*5113495bSYour Name {
672*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
673*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
674*5113495bSYour Name 
675*5113495bSYour Name 	return HAL_RX_MSDU_END_DA_IS_MCBC_GET(msdu_end);
676*5113495bSYour Name }
677*5113495bSYour Name 
678*5113495bSYour Name /**
679*5113495bSYour Name  * hal_rx_msdu_end_sa_is_valid_get_6122() - API to get_6122 the sa_is_valid bit
680*5113495bSYour Name  *                                          from rx_msdu_end TLV
681*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
682*5113495bSYour Name  *
683*5113495bSYour Name  * Return: sa_is_valid bit
684*5113495bSYour Name  */
685*5113495bSYour Name static uint8_t
hal_rx_msdu_end_sa_is_valid_get_6122(uint8_t * buf)686*5113495bSYour Name hal_rx_msdu_end_sa_is_valid_get_6122(uint8_t *buf)
687*5113495bSYour Name {
688*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
689*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
690*5113495bSYour Name 	uint8_t sa_is_valid;
691*5113495bSYour Name 
692*5113495bSYour Name 	sa_is_valid = HAL_RX_MSDU_END_SA_IS_VALID_GET(msdu_end);
693*5113495bSYour Name 
694*5113495bSYour Name 	return sa_is_valid;
695*5113495bSYour Name }
696*5113495bSYour Name 
697*5113495bSYour Name /**
698*5113495bSYour Name  * hal_rx_msdu_end_sa_idx_get_6122() - API to get_6122 the sa_idx from
699*5113495bSYour Name  *                                     rx_msdu_end TLV
700*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
701*5113495bSYour Name  *
702*5113495bSYour Name  * Return: sa_idx (SA AST index)
703*5113495bSYour Name  */
hal_rx_msdu_end_sa_idx_get_6122(uint8_t * buf)704*5113495bSYour Name static uint16_t hal_rx_msdu_end_sa_idx_get_6122(uint8_t *buf)
705*5113495bSYour Name {
706*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
707*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
708*5113495bSYour Name 	uint16_t sa_idx;
709*5113495bSYour Name 
710*5113495bSYour Name 	sa_idx = HAL_RX_MSDU_END_SA_IDX_GET(msdu_end);
711*5113495bSYour Name 
712*5113495bSYour Name 	return sa_idx;
713*5113495bSYour Name }
714*5113495bSYour Name 
715*5113495bSYour Name /**
716*5113495bSYour Name  * hal_rx_desc_is_first_msdu_6122() - Check if first msdu
717*5113495bSYour Name  * @hw_desc_addr: hardware descriptor address
718*5113495bSYour Name  *
719*5113495bSYour Name  * Return: 0 - success/ non-zero failure
720*5113495bSYour Name  */
hal_rx_desc_is_first_msdu_6122(void * hw_desc_addr)721*5113495bSYour Name static uint32_t hal_rx_desc_is_first_msdu_6122(void *hw_desc_addr)
722*5113495bSYour Name {
723*5113495bSYour Name 	struct rx_pkt_tlvs *rx_tlvs = (struct rx_pkt_tlvs *)hw_desc_addr;
724*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &rx_tlvs->msdu_end_tlv.rx_msdu_end;
725*5113495bSYour Name 
726*5113495bSYour Name 	return HAL_RX_GET(msdu_end, RX_MSDU_END_10, FIRST_MSDU);
727*5113495bSYour Name }
728*5113495bSYour Name 
729*5113495bSYour Name /**
730*5113495bSYour Name  * hal_rx_msdu_end_l3_hdr_padding_get_6122() - API to get_6122 the l3_header
731*5113495bSYour Name  *                                             padding from rx_msdu_end TLV
732*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
733*5113495bSYour Name  *
734*5113495bSYour Name  * Return: number of l3 header padding bytes
735*5113495bSYour Name  */
hal_rx_msdu_end_l3_hdr_padding_get_6122(uint8_t * buf)736*5113495bSYour Name static uint32_t hal_rx_msdu_end_l3_hdr_padding_get_6122(uint8_t *buf)
737*5113495bSYour Name {
738*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
739*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
740*5113495bSYour Name 	uint32_t l3_header_padding;
741*5113495bSYour Name 
742*5113495bSYour Name 	l3_header_padding = HAL_RX_MSDU_END_L3_HEADER_PADDING_GET(msdu_end);
743*5113495bSYour Name 
744*5113495bSYour Name 	return l3_header_padding;
745*5113495bSYour Name }
746*5113495bSYour Name 
747*5113495bSYour Name /**
748*5113495bSYour Name  * hal_rx_encryption_info_valid_6122() - Returns encryption type.
749*5113495bSYour Name  * @buf: rx_tlv_hdr of the received packet
750*5113495bSYour Name  *
751*5113495bSYour Name  * Return: encryption type
752*5113495bSYour Name  */
hal_rx_encryption_info_valid_6122(uint8_t * buf)753*5113495bSYour Name inline uint32_t hal_rx_encryption_info_valid_6122(uint8_t *buf)
754*5113495bSYour Name {
755*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
756*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
757*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
758*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
759*5113495bSYour Name 	uint32_t encryption_info = HAL_RX_MPDU_ENCRYPTION_INFO_VALID(mpdu_info);
760*5113495bSYour Name 
761*5113495bSYour Name 	return encryption_info;
762*5113495bSYour Name }
763*5113495bSYour Name 
764*5113495bSYour Name /**
765*5113495bSYour Name  * hal_rx_print_pn_6122() - Prints the PN of rx packet.
766*5113495bSYour Name  * @buf: rx_tlv_hdr of the received packet
767*5113495bSYour Name  *
768*5113495bSYour Name  * Return: void
769*5113495bSYour Name  */
hal_rx_print_pn_6122(uint8_t * buf)770*5113495bSYour Name static void hal_rx_print_pn_6122(uint8_t *buf)
771*5113495bSYour Name {
772*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
773*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
774*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
775*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
776*5113495bSYour Name 
777*5113495bSYour Name 	uint32_t pn_31_0 = HAL_RX_MPDU_PN_31_0_GET(mpdu_info);
778*5113495bSYour Name 	uint32_t pn_63_32 = HAL_RX_MPDU_PN_63_32_GET(mpdu_info);
779*5113495bSYour Name 	uint32_t pn_95_64 = HAL_RX_MPDU_PN_95_64_GET(mpdu_info);
780*5113495bSYour Name 	uint32_t pn_127_96 = HAL_RX_MPDU_PN_127_96_GET(mpdu_info);
781*5113495bSYour Name 
782*5113495bSYour Name 	hal_debug("PN number pn_127_96 0x%x pn_95_64 0x%x pn_63_32 0x%x pn_31_0 0x%x",
783*5113495bSYour Name 		  pn_127_96, pn_95_64, pn_63_32, pn_31_0);
784*5113495bSYour Name }
785*5113495bSYour Name 
786*5113495bSYour Name /**
787*5113495bSYour Name  * hal_rx_msdu_end_first_msdu_get_6122() - API to get first msdu status from
788*5113495bSYour Name  *                                         rx_msdu_end TLV
789*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
790*5113495bSYour Name  *
791*5113495bSYour Name  * Return: first_msdu
792*5113495bSYour Name  */
hal_rx_msdu_end_first_msdu_get_6122(uint8_t * buf)793*5113495bSYour Name static uint8_t hal_rx_msdu_end_first_msdu_get_6122(uint8_t *buf)
794*5113495bSYour Name {
795*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
796*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
797*5113495bSYour Name 	uint8_t first_msdu;
798*5113495bSYour Name 
799*5113495bSYour Name 	first_msdu = HAL_RX_MSDU_END_FIRST_MSDU_GET(msdu_end);
800*5113495bSYour Name 
801*5113495bSYour Name 	return first_msdu;
802*5113495bSYour Name }
803*5113495bSYour Name 
804*5113495bSYour Name /**
805*5113495bSYour Name  * hal_rx_msdu_end_da_is_valid_get_6122() - API to check if da is valid from
806*5113495bSYour Name  *                                          rx_msdu_end TLV
807*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
808*5113495bSYour Name  *
809*5113495bSYour Name  * Return: da_is_valid
810*5113495bSYour Name  */
hal_rx_msdu_end_da_is_valid_get_6122(uint8_t * buf)811*5113495bSYour Name static uint8_t hal_rx_msdu_end_da_is_valid_get_6122(uint8_t *buf)
812*5113495bSYour Name {
813*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
814*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
815*5113495bSYour Name 	uint8_t da_is_valid;
816*5113495bSYour Name 
817*5113495bSYour Name 	da_is_valid = HAL_RX_MSDU_END_DA_IS_VALID_GET(msdu_end);
818*5113495bSYour Name 
819*5113495bSYour Name 	return da_is_valid;
820*5113495bSYour Name }
821*5113495bSYour Name 
822*5113495bSYour Name /**
823*5113495bSYour Name  * hal_rx_msdu_end_last_msdu_get_6122() - API to get last msdu status from
824*5113495bSYour Name  *                                        rx_msdu_end TLV
825*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
826*5113495bSYour Name  *
827*5113495bSYour Name  * Return: last_msdu
828*5113495bSYour Name  */
hal_rx_msdu_end_last_msdu_get_6122(uint8_t * buf)829*5113495bSYour Name static uint8_t hal_rx_msdu_end_last_msdu_get_6122(uint8_t *buf)
830*5113495bSYour Name {
831*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
832*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
833*5113495bSYour Name 	uint8_t last_msdu;
834*5113495bSYour Name 
835*5113495bSYour Name 	last_msdu = HAL_RX_MSDU_END_LAST_MSDU_GET(msdu_end);
836*5113495bSYour Name 
837*5113495bSYour Name 	return last_msdu;
838*5113495bSYour Name }
839*5113495bSYour Name 
840*5113495bSYour Name /**
841*5113495bSYour Name  * hal_rx_get_mpdu_mac_ad4_valid_6122() - Retrieves if mpdu 4th addr is valid
842*5113495bSYour Name  * @buf: Network buffer
843*5113495bSYour Name  *
844*5113495bSYour Name  * Return: value of mpdu 4th address valid field
845*5113495bSYour Name  */
hal_rx_get_mpdu_mac_ad4_valid_6122(uint8_t * buf)846*5113495bSYour Name inline bool hal_rx_get_mpdu_mac_ad4_valid_6122(uint8_t *buf)
847*5113495bSYour Name {
848*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf);
849*5113495bSYour Name 	struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs);
850*5113495bSYour Name 	bool ad4_valid = 0;
851*5113495bSYour Name 
852*5113495bSYour Name 	ad4_valid = HAL_RX_MPDU_MAC_ADDR_AD4_VALID_GET(rx_mpdu_info);
853*5113495bSYour Name 
854*5113495bSYour Name 	return ad4_valid;
855*5113495bSYour Name }
856*5113495bSYour Name 
857*5113495bSYour Name /**
858*5113495bSYour Name  * hal_rx_mpdu_start_sw_peer_id_get_6122() - Retrieve sw peer_id
859*5113495bSYour Name  * @buf: network buffer
860*5113495bSYour Name  *
861*5113495bSYour Name  * Return: sw peer_id
862*5113495bSYour Name  */
hal_rx_mpdu_start_sw_peer_id_get_6122(uint8_t * buf)863*5113495bSYour Name static uint32_t hal_rx_mpdu_start_sw_peer_id_get_6122(uint8_t *buf)
864*5113495bSYour Name {
865*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
866*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
867*5113495bSYour Name 			&pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
868*5113495bSYour Name 
869*5113495bSYour Name 	return HAL_RX_MPDU_INFO_SW_PEER_ID_GET(
870*5113495bSYour Name 		&mpdu_start->rx_mpdu_info_details);
871*5113495bSYour Name }
872*5113495bSYour Name 
873*5113495bSYour Name /**
874*5113495bSYour Name  * hal_rx_mpdu_get_to_ds_6122() - API to get the tods info from rx_mpdu_start
875*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
876*5113495bSYour Name  *
877*5113495bSYour Name  * Return: uint32_t(to_ds)
878*5113495bSYour Name  */
hal_rx_mpdu_get_to_ds_6122(uint8_t * buf)879*5113495bSYour Name static uint32_t hal_rx_mpdu_get_to_ds_6122(uint8_t *buf)
880*5113495bSYour Name {
881*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
882*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
883*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
884*5113495bSYour Name 
885*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
886*5113495bSYour Name 
887*5113495bSYour Name 	return HAL_RX_MPDU_GET_TODS(mpdu_info);
888*5113495bSYour Name }
889*5113495bSYour Name 
890*5113495bSYour Name /**
891*5113495bSYour Name  * hal_rx_mpdu_get_fr_ds_6122() - API to get the from ds info from rx_mpdu_start
892*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
893*5113495bSYour Name  *
894*5113495bSYour Name  * Return: uint32_t(fr_ds)
895*5113495bSYour Name  */
hal_rx_mpdu_get_fr_ds_6122(uint8_t * buf)896*5113495bSYour Name static uint32_t hal_rx_mpdu_get_fr_ds_6122(uint8_t *buf)
897*5113495bSYour Name {
898*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
899*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
900*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
901*5113495bSYour Name 
902*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
903*5113495bSYour Name 
904*5113495bSYour Name 	return HAL_RX_MPDU_GET_FROMDS(mpdu_info);
905*5113495bSYour Name }
906*5113495bSYour Name 
907*5113495bSYour Name /**
908*5113495bSYour Name  * hal_rx_get_mpdu_frame_control_valid_6122() - Retrieves mpdu frame control
909*5113495bSYour Name  *                                              valid
910*5113495bSYour Name  * @buf: Network buffer
911*5113495bSYour Name  *
912*5113495bSYour Name  * Return: value of frame control valid field
913*5113495bSYour Name  */
hal_rx_get_mpdu_frame_control_valid_6122(uint8_t * buf)914*5113495bSYour Name static uint8_t hal_rx_get_mpdu_frame_control_valid_6122(uint8_t *buf)
915*5113495bSYour Name {
916*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf);
917*5113495bSYour Name 	struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs);
918*5113495bSYour Name 
919*5113495bSYour Name 	return HAL_RX_MPDU_GET_FRAME_CONTROL_VALID(rx_mpdu_info);
920*5113495bSYour Name }
921*5113495bSYour Name 
922*5113495bSYour Name /**
923*5113495bSYour Name  * hal_rx_get_mpdu_frame_control_field_6122() - Function to retrieve frame
924*5113495bSYour Name  *                                              control field
925*5113495bSYour Name  * @buf: Network buffer
926*5113495bSYour Name  *
927*5113495bSYour Name  * Return: value of frame control field
928*5113495bSYour Name  *
929*5113495bSYour Name  */
hal_rx_get_mpdu_frame_control_field_6122(uint8_t * buf)930*5113495bSYour Name static uint16_t hal_rx_get_mpdu_frame_control_field_6122(uint8_t *buf)
931*5113495bSYour Name {
932*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf);
933*5113495bSYour Name 	struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs);
934*5113495bSYour Name 	uint16_t frame_ctrl = 0;
935*5113495bSYour Name 
936*5113495bSYour Name 	frame_ctrl = HAL_RX_MPDU_GET_FRAME_CONTROL_FIELD(rx_mpdu_info);
937*5113495bSYour Name 
938*5113495bSYour Name 	return frame_ctrl;
939*5113495bSYour Name }
940*5113495bSYour Name 
941*5113495bSYour Name /**
942*5113495bSYour Name  * hal_rx_mpdu_get_addr1_6122() - API to check get address1 of the mpdu
943*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headera
944*5113495bSYour Name  * @mac_addr: pointer to mac address
945*5113495bSYour Name  *
946*5113495bSYour Name  * Return: success/failure
947*5113495bSYour Name  */
hal_rx_mpdu_get_addr1_6122(uint8_t * buf,uint8_t * mac_addr)948*5113495bSYour Name static QDF_STATUS hal_rx_mpdu_get_addr1_6122(uint8_t *buf,
949*5113495bSYour Name 					     uint8_t *mac_addr)
950*5113495bSYour Name {
951*5113495bSYour Name 	struct __attribute__((__packed__)) hal_addr1 {
952*5113495bSYour Name 		uint32_t ad1_31_0;
953*5113495bSYour Name 		uint16_t ad1_47_32;
954*5113495bSYour Name 	};
955*5113495bSYour Name 
956*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
957*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
958*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
959*5113495bSYour Name 
960*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
961*5113495bSYour Name 	struct hal_addr1 *addr = (struct hal_addr1 *)mac_addr;
962*5113495bSYour Name 	uint32_t mac_addr_ad1_valid;
963*5113495bSYour Name 
964*5113495bSYour Name 	mac_addr_ad1_valid = HAL_RX_MPDU_MAC_ADDR_AD1_VALID_GET(mpdu_info);
965*5113495bSYour Name 
966*5113495bSYour Name 	if (mac_addr_ad1_valid) {
967*5113495bSYour Name 		addr->ad1_31_0 = HAL_RX_MPDU_AD1_31_0_GET(mpdu_info);
968*5113495bSYour Name 		addr->ad1_47_32 = HAL_RX_MPDU_AD1_47_32_GET(mpdu_info);
969*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
970*5113495bSYour Name 	}
971*5113495bSYour Name 
972*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
973*5113495bSYour Name }
974*5113495bSYour Name 
975*5113495bSYour Name /**
976*5113495bSYour Name  * hal_rx_mpdu_get_addr2_6122() - API to check get address2 of the mpdu in the
977*5113495bSYour Name  *                                packet
978*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
979*5113495bSYour Name  * @mac_addr: pointer to mac address
980*5113495bSYour Name  *
981*5113495bSYour Name  * Return: success/failure
982*5113495bSYour Name  */
hal_rx_mpdu_get_addr2_6122(uint8_t * buf,uint8_t * mac_addr)983*5113495bSYour Name static QDF_STATUS hal_rx_mpdu_get_addr2_6122(uint8_t *buf, uint8_t *mac_addr)
984*5113495bSYour Name {
985*5113495bSYour Name 	struct __attribute__((__packed__)) hal_addr2 {
986*5113495bSYour Name 		uint16_t ad2_15_0;
987*5113495bSYour Name 		uint32_t ad2_47_16;
988*5113495bSYour Name 	};
989*5113495bSYour Name 
990*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
991*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
992*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
993*5113495bSYour Name 
994*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
995*5113495bSYour Name 	struct hal_addr2 *addr = (struct hal_addr2 *)mac_addr;
996*5113495bSYour Name 	uint32_t mac_addr_ad2_valid;
997*5113495bSYour Name 
998*5113495bSYour Name 	mac_addr_ad2_valid = HAL_RX_MPDU_MAC_ADDR_AD2_VALID_GET(mpdu_info);
999*5113495bSYour Name 
1000*5113495bSYour Name 	if (mac_addr_ad2_valid) {
1001*5113495bSYour Name 		addr->ad2_15_0 = HAL_RX_MPDU_AD2_15_0_GET(mpdu_info);
1002*5113495bSYour Name 		addr->ad2_47_16 = HAL_RX_MPDU_AD2_47_16_GET(mpdu_info);
1003*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
1004*5113495bSYour Name 	}
1005*5113495bSYour Name 
1006*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
1007*5113495bSYour Name }
1008*5113495bSYour Name 
1009*5113495bSYour Name /**
1010*5113495bSYour Name  * hal_rx_mpdu_get_addr3_6122() - API to get address3 of the mpdu in the packet
1011*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
1012*5113495bSYour Name  * @mac_addr: pointer to mac address
1013*5113495bSYour Name  *
1014*5113495bSYour Name  * Return: success/failure
1015*5113495bSYour Name  */
hal_rx_mpdu_get_addr3_6122(uint8_t * buf,uint8_t * mac_addr)1016*5113495bSYour Name static QDF_STATUS hal_rx_mpdu_get_addr3_6122(uint8_t *buf, uint8_t *mac_addr)
1017*5113495bSYour Name {
1018*5113495bSYour Name 	struct __attribute__((__packed__)) hal_addr3 {
1019*5113495bSYour Name 		uint32_t ad3_31_0;
1020*5113495bSYour Name 		uint16_t ad3_47_32;
1021*5113495bSYour Name 	};
1022*5113495bSYour Name 
1023*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1024*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
1025*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
1026*5113495bSYour Name 
1027*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
1028*5113495bSYour Name 	struct hal_addr3 *addr = (struct hal_addr3 *)mac_addr;
1029*5113495bSYour Name 	uint32_t mac_addr_ad3_valid;
1030*5113495bSYour Name 
1031*5113495bSYour Name 	mac_addr_ad3_valid = HAL_RX_MPDU_MAC_ADDR_AD3_VALID_GET(mpdu_info);
1032*5113495bSYour Name 
1033*5113495bSYour Name 	if (mac_addr_ad3_valid) {
1034*5113495bSYour Name 		addr->ad3_31_0 = HAL_RX_MPDU_AD3_31_0_GET(mpdu_info);
1035*5113495bSYour Name 		addr->ad3_47_32 = HAL_RX_MPDU_AD3_47_32_GET(mpdu_info);
1036*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
1037*5113495bSYour Name 	}
1038*5113495bSYour Name 
1039*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
1040*5113495bSYour Name }
1041*5113495bSYour Name 
1042*5113495bSYour Name /**
1043*5113495bSYour Name  * hal_rx_mpdu_get_addr4_6122() - API to get address4 of the mpdu in the packet
1044*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
1045*5113495bSYour Name  * @mac_addr: pointer to mac address
1046*5113495bSYour Name  *
1047*5113495bSYour Name  * Return: success/failure
1048*5113495bSYour Name  */
hal_rx_mpdu_get_addr4_6122(uint8_t * buf,uint8_t * mac_addr)1049*5113495bSYour Name static QDF_STATUS hal_rx_mpdu_get_addr4_6122(uint8_t *buf, uint8_t *mac_addr)
1050*5113495bSYour Name {
1051*5113495bSYour Name 	struct __attribute__((__packed__)) hal_addr4 {
1052*5113495bSYour Name 		uint32_t ad4_31_0;
1053*5113495bSYour Name 		uint16_t ad4_47_32;
1054*5113495bSYour Name 	};
1055*5113495bSYour Name 
1056*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1057*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
1058*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
1059*5113495bSYour Name 
1060*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
1061*5113495bSYour Name 	struct hal_addr4 *addr = (struct hal_addr4 *)mac_addr;
1062*5113495bSYour Name 	uint32_t mac_addr_ad4_valid;
1063*5113495bSYour Name 
1064*5113495bSYour Name 	mac_addr_ad4_valid = HAL_RX_MPDU_MAC_ADDR_AD4_VALID_GET(mpdu_info);
1065*5113495bSYour Name 
1066*5113495bSYour Name 	if (mac_addr_ad4_valid) {
1067*5113495bSYour Name 		addr->ad4_31_0 = HAL_RX_MPDU_AD4_31_0_GET(mpdu_info);
1068*5113495bSYour Name 		addr->ad4_47_32 = HAL_RX_MPDU_AD4_47_32_GET(mpdu_info);
1069*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
1070*5113495bSYour Name 	}
1071*5113495bSYour Name 
1072*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
1073*5113495bSYour Name }
1074*5113495bSYour Name 
1075*5113495bSYour Name /**
1076*5113495bSYour Name  * hal_rx_get_mpdu_sequence_control_valid_6122() - Get mpdu sequence control
1077*5113495bSYour Name  *                                                 valid
1078*5113495bSYour Name  * @buf: Network buffer
1079*5113495bSYour Name  *
1080*5113495bSYour Name  * Return: value of sequence control valid field
1081*5113495bSYour Name  */
hal_rx_get_mpdu_sequence_control_valid_6122(uint8_t * buf)1082*5113495bSYour Name static uint8_t hal_rx_get_mpdu_sequence_control_valid_6122(uint8_t *buf)
1083*5113495bSYour Name {
1084*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf);
1085*5113495bSYour Name 	struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs);
1086*5113495bSYour Name 
1087*5113495bSYour Name 	return HAL_RX_MPDU_GET_SEQUENCE_CONTROL_VALID(rx_mpdu_info);
1088*5113495bSYour Name }
1089*5113495bSYour Name 
1090*5113495bSYour Name /**
1091*5113495bSYour Name  * hal_rx_is_unicast_6122() - check packet is unicast frame or not.
1092*5113495bSYour Name  * @buf: pointer to rx pkt TLV.
1093*5113495bSYour Name  *
1094*5113495bSYour Name  * Return: true on unicast.
1095*5113495bSYour Name  */
hal_rx_is_unicast_6122(uint8_t * buf)1096*5113495bSYour Name static bool hal_rx_is_unicast_6122(uint8_t *buf)
1097*5113495bSYour Name {
1098*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1099*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
1100*5113495bSYour Name 		&pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
1101*5113495bSYour Name 	uint32_t grp_id;
1102*5113495bSYour Name 	uint8_t *rx_mpdu_info = (uint8_t *)&mpdu_start->rx_mpdu_info_details;
1103*5113495bSYour Name 
1104*5113495bSYour Name 	grp_id = (_HAL_MS((*_OFFSET_TO_WORD_PTR((rx_mpdu_info),
1105*5113495bSYour Name 			   RX_MPDU_INFO_9_SW_FRAME_GROUP_ID_OFFSET)),
1106*5113495bSYour Name 			  RX_MPDU_INFO_9_SW_FRAME_GROUP_ID_MASK,
1107*5113495bSYour Name 			  RX_MPDU_INFO_9_SW_FRAME_GROUP_ID_LSB));
1108*5113495bSYour Name 
1109*5113495bSYour Name 	return (HAL_MPDU_SW_FRAME_GROUP_UNICAST_DATA == grp_id) ? true : false;
1110*5113495bSYour Name }
1111*5113495bSYour Name 
1112*5113495bSYour Name /**
1113*5113495bSYour Name  * hal_rx_tid_get_6122() - get tid based on qos control valid.
1114*5113495bSYour Name  * @hal_soc_hdl: hal soc handle
1115*5113495bSYour Name  * @buf: pointer to rx pkt TLV.
1116*5113495bSYour Name  *
1117*5113495bSYour Name  * Return: tid
1118*5113495bSYour Name  */
hal_rx_tid_get_6122(hal_soc_handle_t hal_soc_hdl,uint8_t * buf)1119*5113495bSYour Name static uint32_t hal_rx_tid_get_6122(hal_soc_handle_t hal_soc_hdl, uint8_t *buf)
1120*5113495bSYour Name {
1121*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1122*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
1123*5113495bSYour Name 	&pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
1124*5113495bSYour Name 	uint8_t *rx_mpdu_info = (uint8_t *)&mpdu_start->rx_mpdu_info_details;
1125*5113495bSYour Name 	uint8_t qos_control_valid =
1126*5113495bSYour Name 		(_HAL_MS((*_OFFSET_TO_WORD_PTR((rx_mpdu_info),
1127*5113495bSYour Name 			  RX_MPDU_INFO_11_MPDU_QOS_CONTROL_VALID_OFFSET)),
1128*5113495bSYour Name 			 RX_MPDU_INFO_11_MPDU_QOS_CONTROL_VALID_MASK,
1129*5113495bSYour Name 			 RX_MPDU_INFO_11_MPDU_QOS_CONTROL_VALID_LSB));
1130*5113495bSYour Name 
1131*5113495bSYour Name 	if (qos_control_valid)
1132*5113495bSYour Name 		return hal_rx_mpdu_start_tid_get_6122(buf);
1133*5113495bSYour Name 
1134*5113495bSYour Name 	return HAL_RX_NON_QOS_TID;
1135*5113495bSYour Name }
1136*5113495bSYour Name 
1137*5113495bSYour Name /**
1138*5113495bSYour Name  * hal_rx_hw_desc_get_ppduid_get_6122() - retrieve ppdu id
1139*5113495bSYour Name  * @rx_tlv_hdr: rx tlv header
1140*5113495bSYour Name  * @rxdma_dst_ring_desc: rxdma HW descriptor
1141*5113495bSYour Name  *
1142*5113495bSYour Name  * Return: ppdu id
1143*5113495bSYour Name  */
hal_rx_hw_desc_get_ppduid_get_6122(void * rx_tlv_hdr,void * rxdma_dst_ring_desc)1144*5113495bSYour Name static uint32_t hal_rx_hw_desc_get_ppduid_get_6122(void *rx_tlv_hdr,
1145*5113495bSYour Name 						   void *rxdma_dst_ring_desc)
1146*5113495bSYour Name {
1147*5113495bSYour Name 	struct reo_entrance_ring *reo_ent = rxdma_dst_ring_desc;
1148*5113495bSYour Name 
1149*5113495bSYour Name 	return reo_ent->phy_ppdu_id;
1150*5113495bSYour Name }
1151*5113495bSYour Name 
1152*5113495bSYour Name /**
1153*5113495bSYour Name  * hal_reo_status_get_header_6122() - Process reo desc info
1154*5113495bSYour Name  * @ring_desc: REO status ring descriptor
1155*5113495bSYour Name  * @b: tlv type info
1156*5113495bSYour Name  * @h1: Pointer to hal_reo_status_header where info to be stored
1157*5113495bSYour Name  *
1158*5113495bSYour Name  * Return: none.
1159*5113495bSYour Name  *
1160*5113495bSYour Name  */
hal_reo_status_get_header_6122(hal_ring_desc_t ring_desc,int b,void * h1)1161*5113495bSYour Name static void hal_reo_status_get_header_6122(hal_ring_desc_t ring_desc, int b,
1162*5113495bSYour Name 					   void *h1)
1163*5113495bSYour Name {
1164*5113495bSYour Name 	uint32_t *d = (uint32_t *)ring_desc;
1165*5113495bSYour Name 	uint32_t val1 = 0;
1166*5113495bSYour Name 	struct hal_reo_status_header *h =
1167*5113495bSYour Name 			(struct hal_reo_status_header *)h1;
1168*5113495bSYour Name 
1169*5113495bSYour Name 	/* Offsets of descriptor fields defined in HW headers start
1170*5113495bSYour Name 	 * from the field after TLV header
1171*5113495bSYour Name 	 */
1172*5113495bSYour Name 	d += HAL_GET_NUM_DWORDS(sizeof(struct tlv_32_hdr));
1173*5113495bSYour Name 
1174*5113495bSYour Name 	switch (b) {
1175*5113495bSYour Name 	case HAL_REO_QUEUE_STATS_STATUS_TLV:
1176*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_GET_QUEUE_STATS_STATUS_0,
1177*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
1178*5113495bSYour Name 		break;
1179*5113495bSYour Name 	case HAL_REO_FLUSH_QUEUE_STATUS_TLV:
1180*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_QUEUE_STATUS_0,
1181*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
1182*5113495bSYour Name 		break;
1183*5113495bSYour Name 	case HAL_REO_FLUSH_CACHE_STATUS_TLV:
1184*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_CACHE_STATUS_0,
1185*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
1186*5113495bSYour Name 		break;
1187*5113495bSYour Name 	case HAL_REO_UNBLK_CACHE_STATUS_TLV:
1188*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_UNBLOCK_CACHE_STATUS_0,
1189*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
1190*5113495bSYour Name 		break;
1191*5113495bSYour Name 	case HAL_REO_TIMOUT_LIST_STATUS_TLV:
1192*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_TIMEOUT_LIST_STATUS_0,
1193*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
1194*5113495bSYour Name 		break;
1195*5113495bSYour Name 	case HAL_REO_DESC_THRES_STATUS_TLV:
1196*5113495bSYour Name 		val1 =
1197*5113495bSYour Name 		  d[HAL_OFFSET_DW(REO_DESCRIPTOR_THRESHOLD_REACHED_STATUS_0,
1198*5113495bSYour Name 		  UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
1199*5113495bSYour Name 		break;
1200*5113495bSYour Name 	case HAL_REO_UPDATE_RX_QUEUE_STATUS_TLV:
1201*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_UPDATE_RX_REO_QUEUE_STATUS_0,
1202*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
1203*5113495bSYour Name 		break;
1204*5113495bSYour Name 	default:
1205*5113495bSYour Name 		qdf_nofl_err("ERROR: Unknown tlv\n");
1206*5113495bSYour Name 		break;
1207*5113495bSYour Name 	}
1208*5113495bSYour Name 	h->cmd_num =
1209*5113495bSYour Name 		HAL_GET_FIELD(
1210*5113495bSYour Name 			      UNIFORM_REO_STATUS_HEADER_0, REO_STATUS_NUMBER,
1211*5113495bSYour Name 			      val1);
1212*5113495bSYour Name 	h->exec_time =
1213*5113495bSYour Name 		HAL_GET_FIELD(UNIFORM_REO_STATUS_HEADER_0,
1214*5113495bSYour Name 			      CMD_EXECUTION_TIME, val1);
1215*5113495bSYour Name 	h->status =
1216*5113495bSYour Name 		HAL_GET_FIELD(UNIFORM_REO_STATUS_HEADER_0,
1217*5113495bSYour Name 			      REO_CMD_EXECUTION_STATUS, val1);
1218*5113495bSYour Name 	switch (b) {
1219*5113495bSYour Name 	case HAL_REO_QUEUE_STATS_STATUS_TLV:
1220*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_GET_QUEUE_STATS_STATUS_1,
1221*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
1222*5113495bSYour Name 		break;
1223*5113495bSYour Name 	case HAL_REO_FLUSH_QUEUE_STATUS_TLV:
1224*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_QUEUE_STATUS_1,
1225*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
1226*5113495bSYour Name 		break;
1227*5113495bSYour Name 	case HAL_REO_FLUSH_CACHE_STATUS_TLV:
1228*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_CACHE_STATUS_1,
1229*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
1230*5113495bSYour Name 		break;
1231*5113495bSYour Name 	case HAL_REO_UNBLK_CACHE_STATUS_TLV:
1232*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_UNBLOCK_CACHE_STATUS_1,
1233*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
1234*5113495bSYour Name 		break;
1235*5113495bSYour Name 	case HAL_REO_TIMOUT_LIST_STATUS_TLV:
1236*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_TIMEOUT_LIST_STATUS_1,
1237*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
1238*5113495bSYour Name 		break;
1239*5113495bSYour Name 	case HAL_REO_DESC_THRES_STATUS_TLV:
1240*5113495bSYour Name 		val1 =
1241*5113495bSYour Name 		  d[HAL_OFFSET_DW(REO_DESCRIPTOR_THRESHOLD_REACHED_STATUS_1,
1242*5113495bSYour Name 		  UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
1243*5113495bSYour Name 		break;
1244*5113495bSYour Name 	case HAL_REO_UPDATE_RX_QUEUE_STATUS_TLV:
1245*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_UPDATE_RX_REO_QUEUE_STATUS_1,
1246*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
1247*5113495bSYour Name 		break;
1248*5113495bSYour Name 	default:
1249*5113495bSYour Name 		qdf_nofl_err("ERROR: Unknown tlv\n");
1250*5113495bSYour Name 		break;
1251*5113495bSYour Name 	}
1252*5113495bSYour Name 	h->tstamp =
1253*5113495bSYour Name 		HAL_GET_FIELD(UNIFORM_REO_STATUS_HEADER_1, TIMESTAMP, val1);
1254*5113495bSYour Name }
1255*5113495bSYour Name 
1256*5113495bSYour Name /**
1257*5113495bSYour Name  * hal_rx_mpdu_start_mpdu_qos_control_valid_get_6122() - Retrieve qos control
1258*5113495bSYour Name  *                                                       valid bit from the tlv.
1259*5113495bSYour Name  * @buf: pointer to rx pkt TLV.
1260*5113495bSYour Name  *
1261*5113495bSYour Name  * Return: qos control value.
1262*5113495bSYour Name  */
1263*5113495bSYour Name static inline uint32_t
hal_rx_mpdu_start_mpdu_qos_control_valid_get_6122(uint8_t * buf)1264*5113495bSYour Name hal_rx_mpdu_start_mpdu_qos_control_valid_get_6122(uint8_t *buf)
1265*5113495bSYour Name {
1266*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1267*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
1268*5113495bSYour Name 			&pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
1269*5113495bSYour Name 
1270*5113495bSYour Name 	return HAL_RX_MPDU_INFO_QOS_CONTROL_VALID_GET(
1271*5113495bSYour Name 		&mpdu_start->rx_mpdu_info_details);
1272*5113495bSYour Name }
1273*5113495bSYour Name 
1274*5113495bSYour Name /**
1275*5113495bSYour Name  * hal_rx_msdu_end_sa_sw_peer_id_get_6122() - API to get the sa_sw_peer_id from
1276*5113495bSYour Name  *                                            rx_msdu_end TLV
1277*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1278*5113495bSYour Name  *
1279*5113495bSYour Name  * Return: sa_sw_peer_id index
1280*5113495bSYour Name  */
1281*5113495bSYour Name static inline uint32_t
hal_rx_msdu_end_sa_sw_peer_id_get_6122(uint8_t * buf)1282*5113495bSYour Name hal_rx_msdu_end_sa_sw_peer_id_get_6122(uint8_t *buf)
1283*5113495bSYour Name {
1284*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1285*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
1286*5113495bSYour Name 
1287*5113495bSYour Name 	return HAL_RX_MSDU_END_SA_SW_PEER_ID_GET(msdu_end);
1288*5113495bSYour Name }
1289*5113495bSYour Name 
1290*5113495bSYour Name /**
1291*5113495bSYour Name  * hal_tx_desc_set_mesh_en_6122() - Set mesh_enable flag in Tx descriptor
1292*5113495bSYour Name  * @desc: Handle to Tx Descriptor
1293*5113495bSYour Name  * @en:   For raw WiFi frames, this indicates transmission to a mesh STA,
1294*5113495bSYour Name  *        enabling the interpretation of the 'Mesh Control Present' bit
1295*5113495bSYour Name  *        (bit 8) of QoS Control (otherwise this bit is ignored),
1296*5113495bSYour Name  *        For native WiFi frames, this indicates that a 'Mesh Control' field
1297*5113495bSYour Name  *        is present between the header and the LLC.
1298*5113495bSYour Name  *
1299*5113495bSYour Name  * Return: void
1300*5113495bSYour Name  */
1301*5113495bSYour Name static inline
hal_tx_desc_set_mesh_en_6122(void * desc,uint8_t en)1302*5113495bSYour Name void hal_tx_desc_set_mesh_en_6122(void *desc, uint8_t en)
1303*5113495bSYour Name {
1304*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD_5, MESH_ENABLE) |=
1305*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD_5, MESH_ENABLE, en);
1306*5113495bSYour Name }
1307*5113495bSYour Name 
1308*5113495bSYour Name static
hal_rx_msdu0_buffer_addr_lsb_6122(void * link_desc_va)1309*5113495bSYour Name void *hal_rx_msdu0_buffer_addr_lsb_6122(void *link_desc_va)
1310*5113495bSYour Name {
1311*5113495bSYour Name 	return (void *)HAL_RX_MSDU0_BUFFER_ADDR_LSB(link_desc_va);
1312*5113495bSYour Name }
1313*5113495bSYour Name 
1314*5113495bSYour Name static
hal_rx_msdu_desc_info_ptr_get_6122(void * msdu0)1315*5113495bSYour Name void *hal_rx_msdu_desc_info_ptr_get_6122(void *msdu0)
1316*5113495bSYour Name {
1317*5113495bSYour Name 	return (void *)HAL_RX_MSDU_DESC_INFO_PTR_GET(msdu0);
1318*5113495bSYour Name }
1319*5113495bSYour Name 
1320*5113495bSYour Name static
hal_ent_mpdu_desc_info_6122(void * ent_ring_desc)1321*5113495bSYour Name void *hal_ent_mpdu_desc_info_6122(void *ent_ring_desc)
1322*5113495bSYour Name {
1323*5113495bSYour Name 	return (void *)HAL_ENT_MPDU_DESC_INFO(ent_ring_desc);
1324*5113495bSYour Name }
1325*5113495bSYour Name 
1326*5113495bSYour Name static
hal_dst_mpdu_desc_info_6122(void * dst_ring_desc)1327*5113495bSYour Name void *hal_dst_mpdu_desc_info_6122(void *dst_ring_desc)
1328*5113495bSYour Name {
1329*5113495bSYour Name 	return (void *)HAL_DST_MPDU_DESC_INFO(dst_ring_desc);
1330*5113495bSYour Name }
1331*5113495bSYour Name 
1332*5113495bSYour Name static
hal_rx_get_fc_valid_6122(uint8_t * buf)1333*5113495bSYour Name uint8_t hal_rx_get_fc_valid_6122(uint8_t *buf)
1334*5113495bSYour Name {
1335*5113495bSYour Name 	return HAL_RX_GET_FC_VALID(buf);
1336*5113495bSYour Name }
1337*5113495bSYour Name 
hal_rx_get_to_ds_flag_6122(uint8_t * buf)1338*5113495bSYour Name static uint8_t hal_rx_get_to_ds_flag_6122(uint8_t *buf)
1339*5113495bSYour Name {
1340*5113495bSYour Name 	return HAL_RX_GET_TO_DS_FLAG(buf);
1341*5113495bSYour Name }
1342*5113495bSYour Name 
hal_rx_get_mac_addr2_valid_6122(uint8_t * buf)1343*5113495bSYour Name static uint8_t hal_rx_get_mac_addr2_valid_6122(uint8_t *buf)
1344*5113495bSYour Name {
1345*5113495bSYour Name 	return HAL_RX_GET_MAC_ADDR2_VALID(buf);
1346*5113495bSYour Name }
1347*5113495bSYour Name 
hal_rx_get_filter_category_6122(uint8_t * buf)1348*5113495bSYour Name static uint8_t hal_rx_get_filter_category_6122(uint8_t *buf)
1349*5113495bSYour Name {
1350*5113495bSYour Name 	return HAL_RX_GET_FILTER_CATEGORY(buf);
1351*5113495bSYour Name }
1352*5113495bSYour Name 
1353*5113495bSYour Name static uint32_t
hal_rx_get_ppdu_id_6122(uint8_t * buf)1354*5113495bSYour Name hal_rx_get_ppdu_id_6122(uint8_t *buf)
1355*5113495bSYour Name {
1356*5113495bSYour Name 	struct rx_mpdu_info *rx_mpdu_info;
1357*5113495bSYour Name 	struct rx_pkt_tlvs *rx_desc = (struct rx_pkt_tlvs *)buf;
1358*5113495bSYour Name 
1359*5113495bSYour Name 	rx_mpdu_info =
1360*5113495bSYour Name 		&rx_desc->mpdu_start_tlv.rx_mpdu_start.rx_mpdu_info_details;
1361*5113495bSYour Name 
1362*5113495bSYour Name 	return HAL_RX_GET_PPDU_ID(rx_mpdu_info);
1363*5113495bSYour Name }
1364*5113495bSYour Name 
1365*5113495bSYour Name /**
1366*5113495bSYour Name  * hal_reo_config_6122() - Set reo config parameters
1367*5113495bSYour Name  * @soc: hal soc handle
1368*5113495bSYour Name  * @reg_val: value to be set
1369*5113495bSYour Name  * @reo_params: reo parameters
1370*5113495bSYour Name  *
1371*5113495bSYour Name  * Return: void
1372*5113495bSYour Name  */
1373*5113495bSYour Name static void
hal_reo_config_6122(struct hal_soc * soc,uint32_t reg_val,struct hal_reo_params * reo_params)1374*5113495bSYour Name hal_reo_config_6122(struct hal_soc *soc,
1375*5113495bSYour Name 		    uint32_t reg_val,
1376*5113495bSYour Name 		    struct hal_reo_params *reo_params)
1377*5113495bSYour Name {
1378*5113495bSYour Name 	HAL_REO_R0_CONFIG(soc, reg_val, reo_params);
1379*5113495bSYour Name }
1380*5113495bSYour Name 
1381*5113495bSYour Name /**
1382*5113495bSYour Name  * hal_rx_msdu_desc_info_get_ptr_6122() - Get msdu desc info ptr
1383*5113495bSYour Name  * @msdu_details_ptr: Pointer to msdu_details_ptr
1384*5113495bSYour Name  *
1385*5113495bSYour Name  * Return: Pointer to rx_msdu_desc_info structure.
1386*5113495bSYour Name  *
1387*5113495bSYour Name  */
hal_rx_msdu_desc_info_get_ptr_6122(void * msdu_details_ptr)1388*5113495bSYour Name static void *hal_rx_msdu_desc_info_get_ptr_6122(void *msdu_details_ptr)
1389*5113495bSYour Name {
1390*5113495bSYour Name 	return HAL_RX_MSDU_DESC_INFO_GET(msdu_details_ptr);
1391*5113495bSYour Name }
1392*5113495bSYour Name 
1393*5113495bSYour Name /**
1394*5113495bSYour Name  * hal_rx_link_desc_msdu0_ptr_6122 - Get pointer to rx_msdu details
1395*5113495bSYour Name  * @link_desc: Pointer to link desc
1396*5113495bSYour Name  *
1397*5113495bSYour Name  * Return: Pointer to rx_msdu_details structure
1398*5113495bSYour Name  *
1399*5113495bSYour Name  */
hal_rx_link_desc_msdu0_ptr_6122(void * link_desc)1400*5113495bSYour Name static void *hal_rx_link_desc_msdu0_ptr_6122(void *link_desc)
1401*5113495bSYour Name {
1402*5113495bSYour Name 	return HAL_RX_LINK_DESC_MSDU0_PTR(link_desc);
1403*5113495bSYour Name }
1404*5113495bSYour Name 
1405*5113495bSYour Name /**
1406*5113495bSYour Name  * hal_rx_msdu_flow_idx_get_6122() - API to get flow index from rx_msdu_end TLV
1407*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1408*5113495bSYour Name  *
1409*5113495bSYour Name  * Return: flow index value from MSDU END TLV
1410*5113495bSYour Name  */
hal_rx_msdu_flow_idx_get_6122(uint8_t * buf)1411*5113495bSYour Name static inline uint32_t hal_rx_msdu_flow_idx_get_6122(uint8_t *buf)
1412*5113495bSYour Name {
1413*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1414*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
1415*5113495bSYour Name 
1416*5113495bSYour Name 	return HAL_RX_MSDU_END_FLOW_IDX_GET(msdu_end);
1417*5113495bSYour Name }
1418*5113495bSYour Name 
1419*5113495bSYour Name /**
1420*5113495bSYour Name  * hal_rx_msdu_flow_idx_invalid_6122() - API to get flow index invalid from
1421*5113495bSYour Name  *                                       rx_msdu_end TLV
1422*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1423*5113495bSYour Name  *
1424*5113495bSYour Name  * Return: flow index invalid value from MSDU END TLV
1425*5113495bSYour Name  */
hal_rx_msdu_flow_idx_invalid_6122(uint8_t * buf)1426*5113495bSYour Name static bool hal_rx_msdu_flow_idx_invalid_6122(uint8_t *buf)
1427*5113495bSYour Name {
1428*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1429*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
1430*5113495bSYour Name 
1431*5113495bSYour Name 	return HAL_RX_MSDU_END_FLOW_IDX_INVALID_GET(msdu_end);
1432*5113495bSYour Name }
1433*5113495bSYour Name 
1434*5113495bSYour Name /**
1435*5113495bSYour Name  * hal_rx_msdu_flow_idx_timeout_6122() - API to get flow index timeout from
1436*5113495bSYour Name  *                                       rx_msdu_end TLV
1437*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1438*5113495bSYour Name  *
1439*5113495bSYour Name  * Return: flow index timeout value from MSDU END TLV
1440*5113495bSYour Name  */
hal_rx_msdu_flow_idx_timeout_6122(uint8_t * buf)1441*5113495bSYour Name static bool hal_rx_msdu_flow_idx_timeout_6122(uint8_t *buf)
1442*5113495bSYour Name {
1443*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1444*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
1445*5113495bSYour Name 
1446*5113495bSYour Name 	return HAL_RX_MSDU_END_FLOW_IDX_TIMEOUT_GET(msdu_end);
1447*5113495bSYour Name }
1448*5113495bSYour Name 
1449*5113495bSYour Name /**
1450*5113495bSYour Name  * hal_rx_msdu_fse_metadata_get_6122() - API to get FSE metadata from
1451*5113495bSYour Name  *                                       rx_msdu_end TLV
1452*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1453*5113495bSYour Name  *
1454*5113495bSYour Name  * Return: fse metadata value from MSDU END TLV
1455*5113495bSYour Name  */
hal_rx_msdu_fse_metadata_get_6122(uint8_t * buf)1456*5113495bSYour Name static uint32_t hal_rx_msdu_fse_metadata_get_6122(uint8_t *buf)
1457*5113495bSYour Name {
1458*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1459*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
1460*5113495bSYour Name 
1461*5113495bSYour Name 	return HAL_RX_MSDU_END_FSE_METADATA_GET(msdu_end);
1462*5113495bSYour Name }
1463*5113495bSYour Name 
1464*5113495bSYour Name /**
1465*5113495bSYour Name  * hal_rx_msdu_cce_metadata_get_6122() - API to get CCE metadata from
1466*5113495bSYour Name  *                                       rx_msdu_end TLV
1467*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1468*5113495bSYour Name  *
1469*5113495bSYour Name  * Return: cce_metadata
1470*5113495bSYour Name  */
1471*5113495bSYour Name static uint16_t
hal_rx_msdu_cce_metadata_get_6122(uint8_t * buf)1472*5113495bSYour Name hal_rx_msdu_cce_metadata_get_6122(uint8_t *buf)
1473*5113495bSYour Name {
1474*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1475*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
1476*5113495bSYour Name 
1477*5113495bSYour Name 	return HAL_RX_MSDU_END_CCE_METADATA_GET(msdu_end);
1478*5113495bSYour Name }
1479*5113495bSYour Name 
1480*5113495bSYour Name /**
1481*5113495bSYour Name  * hal_rx_msdu_get_flow_params_6122() - API to get flow index, flow index
1482*5113495bSYour Name  *                                      invalid and flow index timeout from
1483*5113495bSYour Name  *                                      rx_msdu_end TLV
1484*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1485*5113495bSYour Name  * @flow_invalid: pointer to return value of flow_idx_valid
1486*5113495bSYour Name  * @flow_timeout: pointer to return value of flow_idx_timeout
1487*5113495bSYour Name  * @flow_index: pointer to return value of flow_idx
1488*5113495bSYour Name  *
1489*5113495bSYour Name  * Return: none
1490*5113495bSYour Name  */
1491*5113495bSYour Name static inline void
hal_rx_msdu_get_flow_params_6122(uint8_t * buf,bool * flow_invalid,bool * flow_timeout,uint32_t * flow_index)1492*5113495bSYour Name hal_rx_msdu_get_flow_params_6122(uint8_t *buf,
1493*5113495bSYour Name 				 bool *flow_invalid,
1494*5113495bSYour Name 				 bool *flow_timeout,
1495*5113495bSYour Name 				 uint32_t *flow_index)
1496*5113495bSYour Name {
1497*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1498*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
1499*5113495bSYour Name 
1500*5113495bSYour Name 	*flow_invalid = HAL_RX_MSDU_END_FLOW_IDX_INVALID_GET(msdu_end);
1501*5113495bSYour Name 	*flow_timeout = HAL_RX_MSDU_END_FLOW_IDX_TIMEOUT_GET(msdu_end);
1502*5113495bSYour Name 	*flow_index = HAL_RX_MSDU_END_FLOW_IDX_GET(msdu_end);
1503*5113495bSYour Name }
1504*5113495bSYour Name 
1505*5113495bSYour Name /**
1506*5113495bSYour Name  * hal_rx_tlv_get_tcp_chksum_6122() - API to get tcp checksum
1507*5113495bSYour Name  * @buf: rx_tlv_hdr
1508*5113495bSYour Name  *
1509*5113495bSYour Name  * Return: tcp checksum
1510*5113495bSYour Name  */
1511*5113495bSYour Name static uint16_t
hal_rx_tlv_get_tcp_chksum_6122(uint8_t * buf)1512*5113495bSYour Name hal_rx_tlv_get_tcp_chksum_6122(uint8_t *buf)
1513*5113495bSYour Name {
1514*5113495bSYour Name 	return HAL_RX_TLV_GET_TCP_CHKSUM(buf);
1515*5113495bSYour Name }
1516*5113495bSYour Name 
1517*5113495bSYour Name /**
1518*5113495bSYour Name  * hal_rx_get_rx_sequence_6122() - Function to retrieve rx sequence number
1519*5113495bSYour Name  * @buf: Network buffer
1520*5113495bSYour Name  *
1521*5113495bSYour Name  * Return: rx sequence number
1522*5113495bSYour Name  */
1523*5113495bSYour Name static
hal_rx_get_rx_sequence_6122(uint8_t * buf)1524*5113495bSYour Name uint16_t hal_rx_get_rx_sequence_6122(uint8_t *buf)
1525*5113495bSYour Name {
1526*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf);
1527*5113495bSYour Name 	struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs);
1528*5113495bSYour Name 
1529*5113495bSYour Name 	return HAL_RX_MPDU_GET_SEQUENCE_NUMBER(rx_mpdu_info);
1530*5113495bSYour Name }
1531*5113495bSYour Name 
1532*5113495bSYour Name #define SPRUCE_SEQ_WCSS_UMAC_OFFSET 0x00a00000
1533*5113495bSYour Name #define SPRUCE_CE_WFSS_CE_REG_BASE 0x3B80000
1534*5113495bSYour Name 
1535*5113495bSYour Name /**
1536*5113495bSYour Name  * hal_get_window_address_6122() - Function to get hp/tp address
1537*5113495bSYour Name  * @hal_soc: Pointer to hal_soc
1538*5113495bSYour Name  * @addr: address offset of register
1539*5113495bSYour Name  *
1540*5113495bSYour Name  * Return: modified address offset of register
1541*5113495bSYour Name  */
hal_get_window_address_6122(struct hal_soc * hal_soc,qdf_iomem_t addr)1542*5113495bSYour Name static inline qdf_iomem_t hal_get_window_address_6122(struct hal_soc *hal_soc,
1543*5113495bSYour Name 						      qdf_iomem_t addr)
1544*5113495bSYour Name {
1545*5113495bSYour Name 	uint32_t offset = addr - hal_soc->dev_base_addr;
1546*5113495bSYour Name 	qdf_iomem_t new_offset;
1547*5113495bSYour Name 
1548*5113495bSYour Name 	/*
1549*5113495bSYour Name 	 * If offset lies within DP register range, use 3rd window to write
1550*5113495bSYour Name 	 * into DP region.
1551*5113495bSYour Name 	 */
1552*5113495bSYour Name 	if ((offset ^ SPRUCE_SEQ_WCSS_UMAC_OFFSET) < WINDOW_RANGE_MASK) {
1553*5113495bSYour Name 		new_offset = (hal_soc->dev_base_addr + (3 * WINDOW_START) +
1554*5113495bSYour Name 			  (offset & WINDOW_RANGE_MASK));
1555*5113495bSYour Name 	/*
1556*5113495bSYour Name 	 * If offset lies within CE register range, use 2nd window to write
1557*5113495bSYour Name 	 * into CE region.
1558*5113495bSYour Name 	 */
1559*5113495bSYour Name 	} else if ((offset ^ SPRUCE_CE_WFSS_CE_REG_BASE) < WINDOW_RANGE_MASK) {
1560*5113495bSYour Name 		new_offset = (hal_soc->dev_base_addr + (2 * WINDOW_START) +
1561*5113495bSYour Name 			  (offset & WINDOW_RANGE_MASK));
1562*5113495bSYour Name 	} else {
1563*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
1564*5113495bSYour Name 			  "%s: ERROR: Accessing Wrong register\n", __func__);
1565*5113495bSYour Name 		qdf_assert_always(0);
1566*5113495bSYour Name 		return 0;
1567*5113495bSYour Name 	}
1568*5113495bSYour Name 	return new_offset;
1569*5113495bSYour Name }
1570*5113495bSYour Name 
hal_write_window_register(struct hal_soc * hal_soc)1571*5113495bSYour Name static inline void hal_write_window_register(struct hal_soc *hal_soc)
1572*5113495bSYour Name {
1573*5113495bSYour Name 	/* Write value into window configuration register */
1574*5113495bSYour Name 	qdf_iowrite32(hal_soc->dev_base_addr + WINDOW_REG_ADDRESS,
1575*5113495bSYour Name 		      WINDOW_CONFIGURATION_VALUE_6122);
1576*5113495bSYour Name }
1577*5113495bSYour Name 
1578*5113495bSYour Name /**
1579*5113495bSYour Name  * hal_rx_msdu_packet_metadata_get_6122() - API to get the msdu information from
1580*5113495bSYour Name  *                                          rx_msdu_end TLV
1581*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
1582*5113495bSYour Name  * @msdu_pkt_metadata: pointer to the msdu info structure
1583*5113495bSYour Name  */
1584*5113495bSYour Name static void
hal_rx_msdu_packet_metadata_get_6122(uint8_t * buf,void * msdu_pkt_metadata)1585*5113495bSYour Name hal_rx_msdu_packet_metadata_get_6122(uint8_t *buf,
1586*5113495bSYour Name 				     void *msdu_pkt_metadata)
1587*5113495bSYour Name {
1588*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1589*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
1590*5113495bSYour Name 	struct hal_rx_msdu_metadata *msdu_metadata =
1591*5113495bSYour Name 		(struct hal_rx_msdu_metadata *)msdu_pkt_metadata;
1592*5113495bSYour Name 
1593*5113495bSYour Name 	msdu_metadata->l3_hdr_pad =
1594*5113495bSYour Name 		HAL_RX_MSDU_END_L3_HEADER_PADDING_GET(msdu_end);
1595*5113495bSYour Name 	msdu_metadata->sa_idx = HAL_RX_MSDU_END_SA_IDX_GET(msdu_end);
1596*5113495bSYour Name 	msdu_metadata->da_idx = HAL_RX_MSDU_END_DA_IDX_GET(msdu_end);
1597*5113495bSYour Name 	msdu_metadata->sa_sw_peer_id =
1598*5113495bSYour Name 		HAL_RX_MSDU_END_SA_SW_PEER_ID_GET(msdu_end);
1599*5113495bSYour Name }
1600*5113495bSYour Name 
1601*5113495bSYour Name /**
1602*5113495bSYour Name  * hal_rx_flow_setup_fse_6122() - Setup a flow search entry in HW FST
1603*5113495bSYour Name  * @rx_fst: Pointer to the Rx Flow Search Table
1604*5113495bSYour Name  * @table_offset: offset into the table where the flow is to be setup
1605*5113495bSYour Name  * @rx_flow: Flow Parameters
1606*5113495bSYour Name  *
1607*5113495bSYour Name  * Return: Success/Failure
1608*5113495bSYour Name  */
1609*5113495bSYour Name static void *
hal_rx_flow_setup_fse_6122(uint8_t * rx_fst,uint32_t table_offset,uint8_t * rx_flow)1610*5113495bSYour Name hal_rx_flow_setup_fse_6122(uint8_t *rx_fst, uint32_t table_offset,
1611*5113495bSYour Name 			   uint8_t *rx_flow)
1612*5113495bSYour Name {
1613*5113495bSYour Name 	struct hal_rx_fst *fst = (struct hal_rx_fst *)rx_fst;
1614*5113495bSYour Name 	struct hal_rx_flow *flow = (struct hal_rx_flow *)rx_flow;
1615*5113495bSYour Name 	uint8_t *fse;
1616*5113495bSYour Name 	bool fse_valid;
1617*5113495bSYour Name 
1618*5113495bSYour Name 	if (table_offset >= fst->max_entries) {
1619*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
1620*5113495bSYour Name 			  "HAL FSE table offset %u exceeds max entries %u",
1621*5113495bSYour Name 			  table_offset, fst->max_entries);
1622*5113495bSYour Name 		return NULL;
1623*5113495bSYour Name 	}
1624*5113495bSYour Name 
1625*5113495bSYour Name 	fse = (uint8_t *)fst->base_vaddr +
1626*5113495bSYour Name 			(table_offset * HAL_RX_FST_ENTRY_SIZE);
1627*5113495bSYour Name 
1628*5113495bSYour Name 	fse_valid = HAL_GET_FLD(fse, RX_FLOW_SEARCH_ENTRY_9, VALID);
1629*5113495bSYour Name 
1630*5113495bSYour Name 	if (fse_valid) {
1631*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_DEBUG,
1632*5113495bSYour Name 			  "HAL FSE %pK already valid", fse);
1633*5113495bSYour Name 		return NULL;
1634*5113495bSYour Name 	}
1635*5113495bSYour Name 
1636*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY_0, SRC_IP_127_96) =
1637*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY_0, SRC_IP_127_96,
1638*5113495bSYour Name 			       qdf_htonl(flow->tuple_info.src_ip_127_96));
1639*5113495bSYour Name 
1640*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY_1, SRC_IP_95_64) =
1641*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY_1, SRC_IP_95_64,
1642*5113495bSYour Name 			       qdf_htonl(flow->tuple_info.src_ip_95_64));
1643*5113495bSYour Name 
1644*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY_2, SRC_IP_63_32) =
1645*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY_2, SRC_IP_63_32,
1646*5113495bSYour Name 			       qdf_htonl(flow->tuple_info.src_ip_63_32));
1647*5113495bSYour Name 
1648*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY_3, SRC_IP_31_0) =
1649*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY_3, SRC_IP_31_0,
1650*5113495bSYour Name 			       qdf_htonl(flow->tuple_info.src_ip_31_0));
1651*5113495bSYour Name 
1652*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY_4, DEST_IP_127_96) =
1653*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY_4, DEST_IP_127_96,
1654*5113495bSYour Name 			       qdf_htonl(flow->tuple_info.dest_ip_127_96));
1655*5113495bSYour Name 
1656*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY_5, DEST_IP_95_64) =
1657*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY_5, DEST_IP_95_64,
1658*5113495bSYour Name 			       qdf_htonl(flow->tuple_info.dest_ip_95_64));
1659*5113495bSYour Name 
1660*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY_6, DEST_IP_63_32) =
1661*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY_6, DEST_IP_63_32,
1662*5113495bSYour Name 			       qdf_htonl(flow->tuple_info.dest_ip_63_32));
1663*5113495bSYour Name 
1664*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY_7, DEST_IP_31_0) =
1665*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY_7, DEST_IP_31_0,
1666*5113495bSYour Name 			       qdf_htonl(flow->tuple_info.dest_ip_31_0));
1667*5113495bSYour Name 
1668*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY_8, DEST_PORT);
1669*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY_8, DEST_PORT) |=
1670*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY_8, DEST_PORT,
1671*5113495bSYour Name 			       (flow->tuple_info.dest_port));
1672*5113495bSYour Name 
1673*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY_8, SRC_PORT);
1674*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY_8, SRC_PORT) |=
1675*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY_8, SRC_PORT,
1676*5113495bSYour Name 			       (flow->tuple_info.src_port));
1677*5113495bSYour Name 
1678*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY_9, L4_PROTOCOL);
1679*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY_9, L4_PROTOCOL) |=
1680*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY_9, L4_PROTOCOL,
1681*5113495bSYour Name 			       flow->tuple_info.l4_protocol);
1682*5113495bSYour Name 
1683*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY_9, REO_DESTINATION_HANDLER);
1684*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY_9, REO_DESTINATION_HANDLER) |=
1685*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY_9, REO_DESTINATION_HANDLER,
1686*5113495bSYour Name 			       flow->reo_destination_handler);
1687*5113495bSYour Name 
1688*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY_9, VALID);
1689*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY_9, VALID) |=
1690*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY_9, VALID, 1);
1691*5113495bSYour Name 
1692*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY_10, METADATA);
1693*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY_10, METADATA) =
1694*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY_10, METADATA,
1695*5113495bSYour Name 			       flow->fse_metadata);
1696*5113495bSYour Name 
1697*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY_9, REO_DESTINATION_INDICATION);
1698*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY_9, REO_DESTINATION_INDICATION) |=
1699*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY_9,
1700*5113495bSYour Name 			       REO_DESTINATION_INDICATION,
1701*5113495bSYour Name 			       flow->reo_destination_indication);
1702*5113495bSYour Name 
1703*5113495bSYour Name 	/* Reset all the other fields in FSE */
1704*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY_9, RESERVED_9);
1705*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY_9, MSDU_DROP);
1706*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY_11, MSDU_COUNT);
1707*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY_12, MSDU_BYTE_COUNT);
1708*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY_13, TIMESTAMP);
1709*5113495bSYour Name 
1710*5113495bSYour Name 	return fse;
1711*5113495bSYour Name }
1712*5113495bSYour Name 
hal_compute_reo_remap_ix2_ix3_6122(uint32_t * ring,uint32_t num_rings,uint32_t * remap1,uint32_t * remap2)1713*5113495bSYour Name void hal_compute_reo_remap_ix2_ix3_6122(uint32_t *ring, uint32_t num_rings,
1714*5113495bSYour Name 					uint32_t *remap1, uint32_t *remap2)
1715*5113495bSYour Name {
1716*5113495bSYour Name 	switch (num_rings) {
1717*5113495bSYour Name 	case 1:
1718*5113495bSYour Name 		*remap1 = HAL_REO_REMAP_IX2(ring[0], 16) |
1719*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 17) |
1720*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 18) |
1721*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 19) |
1722*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 20) |
1723*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 21) |
1724*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 22) |
1725*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 23);
1726*5113495bSYour Name 
1727*5113495bSYour Name 		*remap2 = HAL_REO_REMAP_IX3(ring[0], 24) |
1728*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 25) |
1729*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 26) |
1730*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 27) |
1731*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 28) |
1732*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 29) |
1733*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 30) |
1734*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 31);
1735*5113495bSYour Name 		break;
1736*5113495bSYour Name 	case 2:
1737*5113495bSYour Name 		*remap1 = HAL_REO_REMAP_IX2(ring[0], 16) |
1738*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 17) |
1739*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 18) |
1740*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 19) |
1741*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 20) |
1742*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 21) |
1743*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 22) |
1744*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 23);
1745*5113495bSYour Name 
1746*5113495bSYour Name 		*remap2 = HAL_REO_REMAP_IX3(ring[0], 24) |
1747*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 25) |
1748*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[1], 26) |
1749*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[1], 27) |
1750*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 28) |
1751*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 29) |
1752*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[1], 30) |
1753*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[1], 31);
1754*5113495bSYour Name 		break;
1755*5113495bSYour Name 	case 3:
1756*5113495bSYour Name 		*remap1 = HAL_REO_REMAP_IX2(ring[0], 16) |
1757*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 17) |
1758*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[2], 18) |
1759*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 19) |
1760*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 20) |
1761*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[2], 21) |
1762*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 22) |
1763*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 23);
1764*5113495bSYour Name 
1765*5113495bSYour Name 		*remap2 = HAL_REO_REMAP_IX3(ring[2], 24) |
1766*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 25) |
1767*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[1], 26) |
1768*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[2], 27) |
1769*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 28) |
1770*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[1], 29) |
1771*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[2], 30) |
1772*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 31);
1773*5113495bSYour Name 		break;
1774*5113495bSYour Name 	case 4:
1775*5113495bSYour Name 		*remap1 = HAL_REO_REMAP_IX2(ring[0], 16) |
1776*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 17) |
1777*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[2], 18) |
1778*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[3], 19) |
1779*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 20) |
1780*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 21) |
1781*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[2], 22) |
1782*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[3], 23);
1783*5113495bSYour Name 
1784*5113495bSYour Name 		*remap2 = HAL_REO_REMAP_IX3(ring[0], 24) |
1785*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[1], 25) |
1786*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[2], 26) |
1787*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[3], 27) |
1788*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 28) |
1789*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[1], 29) |
1790*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[2], 30) |
1791*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[3], 31);
1792*5113495bSYour Name 		break;
1793*5113495bSYour Name 	}
1794*5113495bSYour Name }
1795*5113495bSYour Name 
hal_hw_txrx_ops_attach_qcn6122(struct hal_soc * hal_soc)1796*5113495bSYour Name static void hal_hw_txrx_ops_attach_qcn6122(struct hal_soc *hal_soc)
1797*5113495bSYour Name {
1798*5113495bSYour Name 
1799*5113495bSYour Name 	/* init and setup */
1800*5113495bSYour Name 	hal_soc->ops->hal_srng_dst_hw_init = hal_srng_dst_hw_init_generic;
1801*5113495bSYour Name 	hal_soc->ops->hal_srng_src_hw_init = hal_srng_src_hw_init_generic;
1802*5113495bSYour Name 	hal_soc->ops->hal_get_hw_hptp = hal_get_hw_hptp_generic;
1803*5113495bSYour Name 	hal_soc->ops->hal_reo_setup = hal_reo_setup_generic_li;
1804*5113495bSYour Name 	hal_soc->ops->hal_get_window_address = hal_get_window_address_6122;
1805*5113495bSYour Name 
1806*5113495bSYour Name 	/* tx */
1807*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_dscp_tid_table_id =
1808*5113495bSYour Name 		hal_tx_desc_set_dscp_tid_table_id_6122;
1809*5113495bSYour Name 	hal_soc->ops->hal_tx_set_dscp_tid_map = hal_tx_set_dscp_tid_map_6122;
1810*5113495bSYour Name 	hal_soc->ops->hal_tx_update_dscp_tid = hal_tx_update_dscp_tid_6122;
1811*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_lmac_id = hal_tx_desc_set_lmac_id_6122;
1812*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_buf_addr =
1813*5113495bSYour Name 					hal_tx_desc_set_buf_addr_generic_li;
1814*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_search_type =
1815*5113495bSYour Name 					hal_tx_desc_set_search_type_generic_li;
1816*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_search_index =
1817*5113495bSYour Name 					hal_tx_desc_set_search_index_generic_li;
1818*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_cache_set_num =
1819*5113495bSYour Name 				hal_tx_desc_set_cache_set_num_generic_li;
1820*5113495bSYour Name 	hal_soc->ops->hal_tx_comp_get_status =
1821*5113495bSYour Name 					hal_tx_comp_get_status_generic_li;
1822*5113495bSYour Name 	hal_soc->ops->hal_tx_comp_get_release_reason =
1823*5113495bSYour Name 		hal_tx_comp_get_release_reason_generic_li;
1824*5113495bSYour Name 	hal_soc->ops->hal_get_wbm_internal_error =
1825*5113495bSYour Name 					hal_get_wbm_internal_error_generic_li;
1826*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_mesh_en = hal_tx_desc_set_mesh_en_6122;
1827*5113495bSYour Name 	hal_soc->ops->hal_tx_init_cmd_credit_ring =
1828*5113495bSYour Name 					hal_tx_init_cmd_credit_ring_6122;
1829*5113495bSYour Name 
1830*5113495bSYour Name 	/* rx */
1831*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_start_nss_get =
1832*5113495bSYour Name 					hal_rx_msdu_start_nss_get_6122;
1833*5113495bSYour Name 	hal_soc->ops->hal_rx_mon_hw_desc_get_mpdu_status =
1834*5113495bSYour Name 		hal_rx_mon_hw_desc_get_mpdu_status_6122;
1835*5113495bSYour Name 	hal_soc->ops->hal_rx_get_tlv = hal_rx_get_tlv_6122;
1836*5113495bSYour Name 	hal_soc->ops->hal_rx_proc_phyrx_other_receive_info_tlv =
1837*5113495bSYour Name 		hal_rx_proc_phyrx_other_receive_info_tlv_6122;
1838*5113495bSYour Name 
1839*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_msdu_end_tlv = hal_rx_dump_msdu_end_tlv_6122;
1840*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_rx_attention_tlv =
1841*5113495bSYour Name 					hal_rx_dump_rx_attention_tlv_generic_li;
1842*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_msdu_start_tlv =
1843*5113495bSYour Name 					hal_rx_dump_msdu_start_tlv_6122;
1844*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_mpdu_start_tlv =
1845*5113495bSYour Name 					hal_rx_dump_mpdu_start_tlv_generic_li;
1846*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_mpdu_end_tlv =
1847*5113495bSYour Name 					hal_rx_dump_mpdu_end_tlv_generic_li;
1848*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_pkt_hdr_tlv =
1849*5113495bSYour Name 					hal_rx_dump_pkt_hdr_tlv_generic_li;
1850*5113495bSYour Name 
1851*5113495bSYour Name 	hal_soc->ops->hal_get_link_desc_size = hal_get_link_desc_size_6122;
1852*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_tid_get =
1853*5113495bSYour Name 					hal_rx_mpdu_start_tid_get_6122;
1854*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_start_reception_type_get =
1855*5113495bSYour Name 		hal_rx_msdu_start_reception_type_get_6122;
1856*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_da_idx_get =
1857*5113495bSYour Name 					hal_rx_msdu_end_da_idx_get_6122;
1858*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_desc_info_get_ptr =
1859*5113495bSYour Name 					hal_rx_msdu_desc_info_get_ptr_6122;
1860*5113495bSYour Name 	hal_soc->ops->hal_rx_link_desc_msdu0_ptr =
1861*5113495bSYour Name 					hal_rx_link_desc_msdu0_ptr_6122;
1862*5113495bSYour Name 	hal_soc->ops->hal_reo_status_get_header =
1863*5113495bSYour Name 					hal_reo_status_get_header_6122;
1864*5113495bSYour Name 	hal_soc->ops->hal_rx_status_get_tlv_info =
1865*5113495bSYour Name 					hal_rx_status_get_tlv_info_generic_li;
1866*5113495bSYour Name 	hal_soc->ops->hal_rx_wbm_err_info_get =
1867*5113495bSYour Name 					hal_rx_wbm_err_info_get_generic_li;
1868*5113495bSYour Name 
1869*5113495bSYour Name 	hal_soc->ops->hal_tx_set_pcp_tid_map =
1870*5113495bSYour Name 					hal_tx_set_pcp_tid_map_generic_li;
1871*5113495bSYour Name 	hal_soc->ops->hal_tx_update_pcp_tid_map =
1872*5113495bSYour Name 					hal_tx_update_pcp_tid_generic_li;
1873*5113495bSYour Name 	hal_soc->ops->hal_tx_set_tidmap_prty =
1874*5113495bSYour Name 					hal_tx_update_tidmap_prty_generic_li;
1875*5113495bSYour Name 	hal_soc->ops->hal_rx_get_rx_fragment_number =
1876*5113495bSYour Name 					hal_rx_get_rx_fragment_number_6122;
1877*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_da_is_mcbc_get =
1878*5113495bSYour Name 					hal_rx_msdu_end_da_is_mcbc_get_6122;
1879*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_sa_is_valid_get =
1880*5113495bSYour Name 					hal_rx_msdu_end_sa_is_valid_get_6122;
1881*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_sa_idx_get =
1882*5113495bSYour Name 					hal_rx_msdu_end_sa_idx_get_6122;
1883*5113495bSYour Name 	hal_soc->ops->hal_rx_desc_is_first_msdu =
1884*5113495bSYour Name 					hal_rx_desc_is_first_msdu_6122;
1885*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_l3_hdr_padding_get =
1886*5113495bSYour Name 		hal_rx_msdu_end_l3_hdr_padding_get_6122;
1887*5113495bSYour Name 	hal_soc->ops->hal_rx_encryption_info_valid =
1888*5113495bSYour Name 					hal_rx_encryption_info_valid_6122;
1889*5113495bSYour Name 	hal_soc->ops->hal_rx_print_pn = hal_rx_print_pn_6122;
1890*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_first_msdu_get =
1891*5113495bSYour Name 					hal_rx_msdu_end_first_msdu_get_6122;
1892*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_da_is_valid_get =
1893*5113495bSYour Name 					hal_rx_msdu_end_da_is_valid_get_6122;
1894*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_last_msdu_get =
1895*5113495bSYour Name 					hal_rx_msdu_end_last_msdu_get_6122;
1896*5113495bSYour Name 	hal_soc->ops->hal_rx_get_mpdu_mac_ad4_valid =
1897*5113495bSYour Name 					hal_rx_get_mpdu_mac_ad4_valid_6122;
1898*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_sw_peer_id_get =
1899*5113495bSYour Name 		hal_rx_mpdu_start_sw_peer_id_get_6122;
1900*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_peer_meta_data_get =
1901*5113495bSYour Name 		hal_rx_mpdu_peer_meta_data_get_li;
1902*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_to_ds = hal_rx_mpdu_get_to_ds_6122;
1903*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_fr_ds = hal_rx_mpdu_get_fr_ds_6122;
1904*5113495bSYour Name 	hal_soc->ops->hal_rx_get_mpdu_frame_control_valid =
1905*5113495bSYour Name 		hal_rx_get_mpdu_frame_control_valid_6122;
1906*5113495bSYour Name 	hal_soc->ops->hal_rx_get_frame_ctrl_field =
1907*5113495bSYour Name 		hal_rx_get_mpdu_frame_control_field_6122;
1908*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_addr1 = hal_rx_mpdu_get_addr1_6122;
1909*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_addr2 = hal_rx_mpdu_get_addr2_6122;
1910*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_addr3 = hal_rx_mpdu_get_addr3_6122;
1911*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_addr4 = hal_rx_mpdu_get_addr4_6122;
1912*5113495bSYour Name 	hal_soc->ops->hal_rx_get_mpdu_sequence_control_valid =
1913*5113495bSYour Name 		hal_rx_get_mpdu_sequence_control_valid_6122;
1914*5113495bSYour Name 	hal_soc->ops->hal_rx_is_unicast = hal_rx_is_unicast_6122;
1915*5113495bSYour Name 	hal_soc->ops->hal_rx_tid_get = hal_rx_tid_get_6122;
1916*5113495bSYour Name 	hal_soc->ops->hal_rx_hw_desc_get_ppduid_get =
1917*5113495bSYour Name 					hal_rx_hw_desc_get_ppduid_get_6122;
1918*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_mpdu_qos_control_valid_get =
1919*5113495bSYour Name 		hal_rx_mpdu_start_mpdu_qos_control_valid_get_6122;
1920*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_sa_sw_peer_id_get =
1921*5113495bSYour Name 		hal_rx_msdu_end_sa_sw_peer_id_get_6122;
1922*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu0_buffer_addr_lsb =
1923*5113495bSYour Name 					hal_rx_msdu0_buffer_addr_lsb_6122;
1924*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_desc_info_ptr_get =
1925*5113495bSYour Name 					hal_rx_msdu_desc_info_ptr_get_6122;
1926*5113495bSYour Name 	hal_soc->ops->hal_ent_mpdu_desc_info = hal_ent_mpdu_desc_info_6122;
1927*5113495bSYour Name 	hal_soc->ops->hal_dst_mpdu_desc_info = hal_dst_mpdu_desc_info_6122;
1928*5113495bSYour Name 	hal_soc->ops->hal_rx_get_fc_valid = hal_rx_get_fc_valid_6122;
1929*5113495bSYour Name 	hal_soc->ops->hal_rx_get_to_ds_flag = hal_rx_get_to_ds_flag_6122;
1930*5113495bSYour Name 	hal_soc->ops->hal_rx_get_mac_addr2_valid =
1931*5113495bSYour Name 					hal_rx_get_mac_addr2_valid_6122;
1932*5113495bSYour Name 	hal_soc->ops->hal_rx_get_filter_category =
1933*5113495bSYour Name 					hal_rx_get_filter_category_6122;
1934*5113495bSYour Name 	hal_soc->ops->hal_rx_get_ppdu_id = hal_rx_get_ppdu_id_6122;
1935*5113495bSYour Name 	hal_soc->ops->hal_reo_config = hal_reo_config_6122;
1936*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_flow_idx_get = hal_rx_msdu_flow_idx_get_6122;
1937*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_flow_idx_invalid =
1938*5113495bSYour Name 					hal_rx_msdu_flow_idx_invalid_6122;
1939*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_flow_idx_timeout =
1940*5113495bSYour Name 					hal_rx_msdu_flow_idx_timeout_6122;
1941*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_fse_metadata_get =
1942*5113495bSYour Name 					hal_rx_msdu_fse_metadata_get_6122;
1943*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_cce_match_get =
1944*5113495bSYour Name 					hal_rx_msdu_cce_match_get_li;
1945*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_cce_metadata_get =
1946*5113495bSYour Name 					hal_rx_msdu_cce_metadata_get_6122;
1947*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_get_flow_params =
1948*5113495bSYour Name 					hal_rx_msdu_get_flow_params_6122;
1949*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_get_tcp_chksum =
1950*5113495bSYour Name 					hal_rx_tlv_get_tcp_chksum_6122;
1951*5113495bSYour Name 	hal_soc->ops->hal_rx_get_rx_sequence = hal_rx_get_rx_sequence_6122;
1952*5113495bSYour Name #if defined(WLAN_CFR_ENABLE) && defined(WLAN_ENH_CFR_ENABLE)
1953*5113495bSYour Name 	hal_soc->ops->hal_rx_get_bb_info = hal_rx_get_bb_info_6122;
1954*5113495bSYour Name 	hal_soc->ops->hal_rx_get_rtt_info = hal_rx_get_rtt_info_6122;
1955*5113495bSYour Name #endif
1956*5113495bSYour Name 	/* rx - msdu fast path info fields */
1957*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_packet_metadata_get =
1958*5113495bSYour Name 					hal_rx_msdu_packet_metadata_get_6122;
1959*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_tlv_tag_valid =
1960*5113495bSYour Name 					hal_rx_mpdu_start_tlv_tag_valid_6122;
1961*5113495bSYour Name 	hal_soc->ops->hal_rx_sw_mon_desc_info_get =
1962*5113495bSYour Name 					hal_rx_sw_mon_desc_info_get_6122;
1963*5113495bSYour Name 	hal_soc->ops->hal_rx_wbm_err_msdu_continuation_get =
1964*5113495bSYour Name 		hal_rx_wbm_err_msdu_continuation_get_6122;
1965*5113495bSYour Name 
1966*5113495bSYour Name 	/* rx - TLV struct offsets */
1967*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_offset_get =
1968*5113495bSYour Name 					hal_rx_msdu_end_offset_get_generic;
1969*5113495bSYour Name 	hal_soc->ops->hal_rx_attn_offset_get = hal_rx_attn_offset_get_generic;
1970*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_start_offset_get =
1971*5113495bSYour Name 					hal_rx_msdu_start_offset_get_generic;
1972*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_offset_get =
1973*5113495bSYour Name 					hal_rx_mpdu_start_offset_get_generic;
1974*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_end_offset_get =
1975*5113495bSYour Name 					hal_rx_mpdu_end_offset_get_generic;
1976*5113495bSYour Name #ifndef NO_RX_PKT_HDR_TLV
1977*5113495bSYour Name 	hal_soc->ops->hal_rx_pkt_tlv_offset_get =
1978*5113495bSYour Name 					hal_rx_pkt_tlv_offset_get_generic;
1979*5113495bSYour Name #endif
1980*5113495bSYour Name 	hal_soc->ops->hal_rx_flow_setup_fse = hal_rx_flow_setup_fse_6122;
1981*5113495bSYour Name 	hal_soc->ops->hal_rx_flow_get_tuple_info =
1982*5113495bSYour Name 					hal_rx_flow_get_tuple_info_li;
1983*5113495bSYour Name 	 hal_soc->ops->hal_rx_flow_delete_entry =
1984*5113495bSYour Name 					hal_rx_flow_delete_entry_li;
1985*5113495bSYour Name 	hal_soc->ops->hal_rx_fst_get_fse_size = hal_rx_fst_get_fse_size_li;
1986*5113495bSYour Name 	hal_soc->ops->hal_compute_reo_remap_ix2_ix3 =
1987*5113495bSYour Name 					hal_compute_reo_remap_ix2_ix3_6122;
1988*5113495bSYour Name 	hal_soc->ops->hal_setup_link_idle_list =
1989*5113495bSYour Name 				hal_setup_link_idle_list_generic_li;
1990*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_get_pn_num = hal_rx_tlv_get_pn_num_li;
1991*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_mic_err_get = hal_rx_tlv_mic_err_get_li;
1992*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_decrypt_err_get =
1993*5113495bSYour Name 			hal_rx_tlv_decrypt_err_get_li;
1994*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_get_pkt_capture_flags =
1995*5113495bSYour Name 					hal_rx_tlv_get_pkt_capture_flags_li;
1996*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_info_ampdu_flag_get =
1997*5113495bSYour Name 					hal_rx_mpdu_info_ampdu_flag_get_li;
1998*5113495bSYour Name 	hal_soc->ops->hal_compute_reo_remap_ix0 = NULL;
1999*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_msdu_len_get =
2000*5113495bSYour Name 				hal_rx_msdu_start_get_len_6122;
2001*5113495bSYour Name };
2002*5113495bSYour Name 
2003*5113495bSYour Name struct hal_hw_srng_config hw_srng_table_6122[] = {
2004*5113495bSYour Name 	/* TODO: max_rings can populated by querying HW capabilities */
2005*5113495bSYour Name 	{ /* REO_DST */
2006*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO2SW1,
2007*5113495bSYour Name 		.max_rings = 4,
2008*5113495bSYour Name 		.entry_size = sizeof(struct reo_destination_ring) >> 2,
2009*5113495bSYour Name 		.lmac_ring = FALSE,
2010*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
2011*5113495bSYour Name 		.reg_start = {
2012*5113495bSYour Name 			HWIO_REO_R0_REO2SW1_RING_BASE_LSB_ADDR(
2013*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
2014*5113495bSYour Name 			HWIO_REO_R2_REO2SW1_RING_HP_ADDR(
2015*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET)
2016*5113495bSYour Name 		},
2017*5113495bSYour Name 		.reg_size = {
2018*5113495bSYour Name 			HWIO_REO_R0_REO2SW2_RING_BASE_LSB_ADDR(0) -
2019*5113495bSYour Name 				HWIO_REO_R0_REO2SW1_RING_BASE_LSB_ADDR(0),
2020*5113495bSYour Name 			HWIO_REO_R2_REO2SW2_RING_HP_ADDR(0) -
2021*5113495bSYour Name 				HWIO_REO_R2_REO2SW1_RING_HP_ADDR(0),
2022*5113495bSYour Name 		},
2023*5113495bSYour Name 		.max_size =
2024*5113495bSYour Name 			HWIO_REO_R0_REO2SW1_RING_BASE_MSB_RING_SIZE_BMSK >>
2025*5113495bSYour Name 			HWIO_REO_R0_REO2SW1_RING_BASE_MSB_RING_SIZE_SHFT,
2026*5113495bSYour Name 	},
2027*5113495bSYour Name 	{ /* REO_EXCEPTION */
2028*5113495bSYour Name 		/* Designating REO2TCL ring as exception ring. This ring is
2029*5113495bSYour Name 		 * similar to other REO2SW rings though it is named as REO2TCL.
2030*5113495bSYour Name 		 * Any of theREO2SW rings can be used as exception ring.
2031*5113495bSYour Name 		 */
2032*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO2TCL,
2033*5113495bSYour Name 		.max_rings = 1,
2034*5113495bSYour Name 		.entry_size = sizeof(struct reo_destination_ring) >> 2,
2035*5113495bSYour Name 		.lmac_ring = FALSE,
2036*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
2037*5113495bSYour Name 		.reg_start = {
2038*5113495bSYour Name 			HWIO_REO_R0_REO2TCL_RING_BASE_LSB_ADDR(
2039*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
2040*5113495bSYour Name 			HWIO_REO_R2_REO2TCL_RING_HP_ADDR(
2041*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET)
2042*5113495bSYour Name 		},
2043*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
2044*5113495bSYour Name 		 * type are supported
2045*5113495bSYour Name 		 */
2046*5113495bSYour Name 		.reg_size = {},
2047*5113495bSYour Name 		.max_size =
2048*5113495bSYour Name 			HWIO_REO_R0_REO2TCL_RING_BASE_MSB_RING_SIZE_BMSK >>
2049*5113495bSYour Name 			HWIO_REO_R0_REO2TCL_RING_BASE_MSB_RING_SIZE_SHFT,
2050*5113495bSYour Name 	},
2051*5113495bSYour Name 	{ /* REO_REINJECT */
2052*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2REO,
2053*5113495bSYour Name 		.max_rings = 1,
2054*5113495bSYour Name 		.entry_size = sizeof(struct reo_entrance_ring) >> 2,
2055*5113495bSYour Name 		.lmac_ring = FALSE,
2056*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2057*5113495bSYour Name 		.reg_start = {
2058*5113495bSYour Name 			HWIO_REO_R0_SW2REO_RING_BASE_LSB_ADDR(
2059*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
2060*5113495bSYour Name 			HWIO_REO_R2_SW2REO_RING_HP_ADDR(
2061*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET)
2062*5113495bSYour Name 		},
2063*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
2064*5113495bSYour Name 		 * type are supported
2065*5113495bSYour Name 		 */
2066*5113495bSYour Name 		.reg_size = {},
2067*5113495bSYour Name 		.max_size = HWIO_REO_R0_SW2REO_RING_BASE_MSB_RING_SIZE_BMSK >>
2068*5113495bSYour Name 				HWIO_REO_R0_SW2REO_RING_BASE_MSB_RING_SIZE_SHFT,
2069*5113495bSYour Name 	},
2070*5113495bSYour Name 	{ /* REO_CMD */
2071*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO_CMD,
2072*5113495bSYour Name 		.max_rings = 1,
2073*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
2074*5113495bSYour Name 			sizeof(struct reo_get_queue_stats)) >> 2,
2075*5113495bSYour Name 		.lmac_ring = FALSE,
2076*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2077*5113495bSYour Name 		.reg_start = {
2078*5113495bSYour Name 			HWIO_REO_R0_REO_CMD_RING_BASE_LSB_ADDR(
2079*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
2080*5113495bSYour Name 			HWIO_REO_R2_REO_CMD_RING_HP_ADDR(
2081*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
2082*5113495bSYour Name 		},
2083*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
2084*5113495bSYour Name 		 * type are supported
2085*5113495bSYour Name 		 */
2086*5113495bSYour Name 		.reg_size = {},
2087*5113495bSYour Name 		.max_size = HWIO_REO_R0_REO_CMD_RING_BASE_MSB_RING_SIZE_BMSK >>
2088*5113495bSYour Name 			HWIO_REO_R0_REO_CMD_RING_BASE_MSB_RING_SIZE_SHFT,
2089*5113495bSYour Name 	},
2090*5113495bSYour Name 	{ /* REO_STATUS */
2091*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO_STATUS,
2092*5113495bSYour Name 		.max_rings = 1,
2093*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
2094*5113495bSYour Name 			sizeof(struct reo_get_queue_stats_status)) >> 2,
2095*5113495bSYour Name 		.lmac_ring = FALSE,
2096*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
2097*5113495bSYour Name 		.reg_start = {
2098*5113495bSYour Name 			HWIO_REO_R0_REO_STATUS_RING_BASE_LSB_ADDR(
2099*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
2100*5113495bSYour Name 			HWIO_REO_R2_REO_STATUS_RING_HP_ADDR(
2101*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
2102*5113495bSYour Name 		},
2103*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
2104*5113495bSYour Name 		 * type are supported
2105*5113495bSYour Name 		 */
2106*5113495bSYour Name 		.reg_size = {},
2107*5113495bSYour Name 		.max_size =
2108*5113495bSYour Name 		HWIO_REO_R0_REO_STATUS_RING_BASE_MSB_RING_SIZE_BMSK >>
2109*5113495bSYour Name 			HWIO_REO_R0_REO_STATUS_RING_BASE_MSB_RING_SIZE_SHFT,
2110*5113495bSYour Name 	},
2111*5113495bSYour Name 	{ /* TCL_DATA */
2112*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2TCL1,
2113*5113495bSYour Name 		.max_rings = 3,
2114*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
2115*5113495bSYour Name 			sizeof(struct tcl_data_cmd)) >> 2,
2116*5113495bSYour Name 		.lmac_ring = FALSE,
2117*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2118*5113495bSYour Name 		.reg_start = {
2119*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL1_RING_BASE_LSB_ADDR(
2120*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
2121*5113495bSYour Name 			HWIO_TCL_R2_SW2TCL1_RING_HP_ADDR(
2122*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
2123*5113495bSYour Name 		},
2124*5113495bSYour Name 		.reg_size = {
2125*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL2_RING_BASE_LSB_ADDR(0) -
2126*5113495bSYour Name 				HWIO_TCL_R0_SW2TCL1_RING_BASE_LSB_ADDR(0),
2127*5113495bSYour Name 			HWIO_TCL_R2_SW2TCL2_RING_HP_ADDR(0) -
2128*5113495bSYour Name 				HWIO_TCL_R2_SW2TCL1_RING_HP_ADDR(0),
2129*5113495bSYour Name 		},
2130*5113495bSYour Name 		.max_size =
2131*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL1_RING_BASE_MSB_RING_SIZE_BMSK >>
2132*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL1_RING_BASE_MSB_RING_SIZE_SHFT,
2133*5113495bSYour Name 	},
2134*5113495bSYour Name 	{ /* TCL_CMD/CREDIT */
2135*5113495bSYour Name 	  /* qca8074v2 and qcn6122 uses this ring for data commands */
2136*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2TCL_CMD,
2137*5113495bSYour Name 		.max_rings = 1,
2138*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
2139*5113495bSYour Name 			sizeof(struct tcl_data_cmd)) >> 2,
2140*5113495bSYour Name 		.lmac_ring =  FALSE,
2141*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2142*5113495bSYour Name 		.reg_start = {
2143*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL_CREDIT_RING_BASE_LSB_ADDR(
2144*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
2145*5113495bSYour Name 			HWIO_TCL_R2_SW2TCL_CREDIT_RING_HP_ADDR(
2146*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
2147*5113495bSYour Name 		},
2148*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
2149*5113495bSYour Name 		 * type are supported
2150*5113495bSYour Name 		 */
2151*5113495bSYour Name 		.reg_size = {},
2152*5113495bSYour Name 		.max_size =
2153*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL_CREDIT_RING_BASE_MSB_RING_SIZE_BMSK >>
2154*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL_CREDIT_RING_BASE_MSB_RING_SIZE_SHFT,
2155*5113495bSYour Name 	},
2156*5113495bSYour Name 	{ /* TCL_STATUS */
2157*5113495bSYour Name 		.start_ring_id = HAL_SRNG_TCL_STATUS,
2158*5113495bSYour Name 		.max_rings = 1,
2159*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
2160*5113495bSYour Name 			sizeof(struct tcl_status_ring)) >> 2,
2161*5113495bSYour Name 		.lmac_ring = FALSE,
2162*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
2163*5113495bSYour Name 		.reg_start = {
2164*5113495bSYour Name 			HWIO_TCL_R0_TCL_STATUS1_RING_BASE_LSB_ADDR(
2165*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
2166*5113495bSYour Name 			HWIO_TCL_R2_TCL_STATUS1_RING_HP_ADDR(
2167*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
2168*5113495bSYour Name 		},
2169*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
2170*5113495bSYour Name 		 * type are supported
2171*5113495bSYour Name 		 */
2172*5113495bSYour Name 		.reg_size = {},
2173*5113495bSYour Name 		.max_size =
2174*5113495bSYour Name 			HWIO_TCL_R0_TCL_STATUS1_RING_BASE_MSB_RING_SIZE_BMSK >>
2175*5113495bSYour Name 			HWIO_TCL_R0_TCL_STATUS1_RING_BASE_MSB_RING_SIZE_SHFT,
2176*5113495bSYour Name 	},
2177*5113495bSYour Name 	{ /* CE_SRC */
2178*5113495bSYour Name 		.start_ring_id = HAL_SRNG_CE_0_SRC,
2179*5113495bSYour Name 		.max_rings = 12,
2180*5113495bSYour Name 		.entry_size = sizeof(struct ce_src_desc) >> 2,
2181*5113495bSYour Name 		.lmac_ring = FALSE,
2182*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2183*5113495bSYour Name 		.reg_start = {
2184*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_LSB_ADDR(
2185*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_SRC_REG_OFFSET),
2186*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R2_DEST_RING_HP_ADDR(
2187*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_SRC_REG_OFFSET),
2188*5113495bSYour Name 		},
2189*5113495bSYour Name 		.reg_size = {
2190*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_SRC_REG_OFFSET -
2191*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_SRC_REG_OFFSET,
2192*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_SRC_REG_OFFSET -
2193*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_SRC_REG_OFFSET,
2194*5113495bSYour Name 		},
2195*5113495bSYour Name 		.max_size =
2196*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_MSB_RING_SIZE_BMSK >>
2197*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_MSB_RING_SIZE_SHFT,
2198*5113495bSYour Name 	},
2199*5113495bSYour Name 	{ /* CE_DST */
2200*5113495bSYour Name 		.start_ring_id = HAL_SRNG_CE_0_DST,
2201*5113495bSYour Name 		.max_rings = 12,
2202*5113495bSYour Name 		.entry_size = 8 >> 2,
2203*5113495bSYour Name 		/*TODO: entry_size above should actually be
2204*5113495bSYour Name 		 * sizeof(struct ce_dst_desc) >> 2, but couldn't find definition
2205*5113495bSYour Name 		 * of struct ce_dst_desc in HW header files
2206*5113495bSYour Name 		 */
2207*5113495bSYour Name 		.lmac_ring = FALSE,
2208*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2209*5113495bSYour Name 		.reg_start = {
2210*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_LSB_ADDR(
2211*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET),
2212*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R2_DEST_RING_HP_ADDR(
2213*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET),
2214*5113495bSYour Name 		},
2215*5113495bSYour Name 		.reg_size = {
2216*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_DST_REG_OFFSET -
2217*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET,
2218*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_DST_REG_OFFSET -
2219*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET,
2220*5113495bSYour Name 		},
2221*5113495bSYour Name 		.max_size =
2222*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_MSB_RING_SIZE_BMSK >>
2223*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_MSB_RING_SIZE_SHFT,
2224*5113495bSYour Name 	},
2225*5113495bSYour Name 	{ /* CE_DST_STATUS */
2226*5113495bSYour Name 		.start_ring_id = HAL_SRNG_CE_0_DST_STATUS,
2227*5113495bSYour Name 		.max_rings = 12,
2228*5113495bSYour Name 		.entry_size = sizeof(struct ce_stat_desc) >> 2,
2229*5113495bSYour Name 		.lmac_ring = FALSE,
2230*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
2231*5113495bSYour Name 		.reg_start = {
2232*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_STATUS_RING_BASE_LSB_ADDR(
2233*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET),
2234*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R2_STATUS_RING_HP_ADDR(
2235*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET),
2236*5113495bSYour Name 		},
2237*5113495bSYour Name 			/* TODO: check destination status ring registers */
2238*5113495bSYour Name 		.reg_size = {
2239*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_DST_REG_OFFSET -
2240*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET,
2241*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_DST_REG_OFFSET -
2242*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET,
2243*5113495bSYour Name 		},
2244*5113495bSYour Name 		.max_size =
2245*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_STATUS_RING_BASE_MSB_RING_SIZE_BMSK >>
2246*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_STATUS_RING_BASE_MSB_RING_SIZE_SHFT,
2247*5113495bSYour Name 	},
2248*5113495bSYour Name 	{ /* WBM_IDLE_LINK */
2249*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WBM_IDLE_LINK,
2250*5113495bSYour Name 		.max_rings = 1,
2251*5113495bSYour Name 		.entry_size = sizeof(struct wbm_link_descriptor_ring) >> 2,
2252*5113495bSYour Name 		.lmac_ring = FALSE,
2253*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2254*5113495bSYour Name 		.reg_start = {
2255*5113495bSYour Name 		HWIO_WBM_R0_WBM_IDLE_LINK_RING_BASE_LSB_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
2256*5113495bSYour Name 		HWIO_WBM_R2_WBM_IDLE_LINK_RING_HP_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
2257*5113495bSYour Name 		},
2258*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
2259*5113495bSYour Name 		 * type are supported
2260*5113495bSYour Name 		 */
2261*5113495bSYour Name 		.reg_size = {},
2262*5113495bSYour Name 		.max_size =
2263*5113495bSYour Name 			HWIO_WBM_R0_WBM_IDLE_LINK_RING_BASE_MSB_RING_SIZE_BMSK >>
2264*5113495bSYour Name 				HWIO_WBM_R0_WBM_IDLE_LINK_RING_BASE_MSB_RING_SIZE_SHFT,
2265*5113495bSYour Name 	},
2266*5113495bSYour Name 	{ /* SW2WBM_RELEASE */
2267*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WBM_SW_RELEASE,
2268*5113495bSYour Name 		.max_rings = 1,
2269*5113495bSYour Name 		.entry_size = sizeof(struct wbm_release_ring) >> 2,
2270*5113495bSYour Name 		.lmac_ring = FALSE,
2271*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2272*5113495bSYour Name 		.reg_start = {
2273*5113495bSYour Name 		HWIO_WBM_R0_SW_RELEASE_RING_BASE_LSB_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
2274*5113495bSYour Name 		HWIO_WBM_R2_SW_RELEASE_RING_HP_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
2275*5113495bSYour Name 		},
2276*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
2277*5113495bSYour Name 		 * type are supported
2278*5113495bSYour Name 		 */
2279*5113495bSYour Name 		.reg_size = {},
2280*5113495bSYour Name 		.max_size =
2281*5113495bSYour Name 		HWIO_WBM_R0_SW_RELEASE_RING_BASE_MSB_RING_SIZE_BMSK >>
2282*5113495bSYour Name 		HWIO_WBM_R0_SW_RELEASE_RING_BASE_MSB_RING_SIZE_SHFT,
2283*5113495bSYour Name 	},
2284*5113495bSYour Name 	{ /* WBM2SW_RELEASE */
2285*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WBM2SW0_RELEASE,
2286*5113495bSYour Name 		.max_rings = 5,
2287*5113495bSYour Name 		.entry_size = sizeof(struct wbm_release_ring) >> 2,
2288*5113495bSYour Name 		.lmac_ring = FALSE,
2289*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
2290*5113495bSYour Name 		.reg_start = {
2291*5113495bSYour Name 			HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_LSB_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
2292*5113495bSYour Name 			HWIO_WBM_R2_WBM2SW0_RELEASE_RING_HP_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
2293*5113495bSYour Name 		},
2294*5113495bSYour Name 		.reg_size = {
2295*5113495bSYour Name 			HWIO_WBM_R0_WBM2SW1_RELEASE_RING_BASE_LSB_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET) -
2296*5113495bSYour Name 				HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_LSB_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
2297*5113495bSYour Name 			HWIO_WBM_R2_WBM2SW1_RELEASE_RING_HP_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET) -
2298*5113495bSYour Name 				HWIO_WBM_R2_WBM2SW0_RELEASE_RING_HP_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
2299*5113495bSYour Name 		},
2300*5113495bSYour Name 		.max_size =
2301*5113495bSYour Name 			HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_MSB_RING_SIZE_BMSK >>
2302*5113495bSYour Name 				HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_MSB_RING_SIZE_SHFT,
2303*5113495bSYour Name 	},
2304*5113495bSYour Name 	{ /* RXDMA_BUF */
2305*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA0_BUF0,
2306*5113495bSYour Name #ifdef IPA_OFFLOAD
2307*5113495bSYour Name 		.max_rings = 3,
2308*5113495bSYour Name #else
2309*5113495bSYour Name 		.max_rings = 2,
2310*5113495bSYour Name #endif
2311*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
2312*5113495bSYour Name 		.lmac_ring = TRUE,
2313*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2314*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2315*5113495bSYour Name 		 * from host
2316*5113495bSYour Name 		 */
2317*5113495bSYour Name 		.reg_start = {},
2318*5113495bSYour Name 		.reg_size = {},
2319*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
2320*5113495bSYour Name 	},
2321*5113495bSYour Name 	{ /* RXDMA_DST */
2322*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_RXDMA2SW0,
2323*5113495bSYour Name 		.max_rings = 1,
2324*5113495bSYour Name 		.entry_size = sizeof(struct reo_entrance_ring) >> 2,
2325*5113495bSYour Name 		.lmac_ring =  TRUE,
2326*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
2327*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2328*5113495bSYour Name 		 * from host
2329*5113495bSYour Name 		 */
2330*5113495bSYour Name 		.reg_start = {},
2331*5113495bSYour Name 		.reg_size = {},
2332*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
2333*5113495bSYour Name 	},
2334*5113495bSYour Name 	{ /* RXDMA_MONITOR_BUF */
2335*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA2_BUF,
2336*5113495bSYour Name 		.max_rings = 1,
2337*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
2338*5113495bSYour Name 		.lmac_ring = TRUE,
2339*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2340*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2341*5113495bSYour Name 		 * from host
2342*5113495bSYour Name 		 */
2343*5113495bSYour Name 		.reg_start = {},
2344*5113495bSYour Name 		.reg_size = {},
2345*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
2346*5113495bSYour Name 	},
2347*5113495bSYour Name 	{ /* RXDMA_MONITOR_STATUS */
2348*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA1_STATBUF,
2349*5113495bSYour Name 		.max_rings = 1,
2350*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
2351*5113495bSYour Name 		.lmac_ring = TRUE,
2352*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2353*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2354*5113495bSYour Name 		 * from host
2355*5113495bSYour Name 		 */
2356*5113495bSYour Name 		.reg_start = {},
2357*5113495bSYour Name 		.reg_size = {},
2358*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
2359*5113495bSYour Name 	},
2360*5113495bSYour Name 	{ /* RXDMA_MONITOR_DST */
2361*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_RXDMA2SW1,
2362*5113495bSYour Name 		.max_rings = 1,
2363*5113495bSYour Name 		.entry_size = sizeof(struct sw_monitor_ring) >> 2,
2364*5113495bSYour Name 		.lmac_ring = TRUE,
2365*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
2366*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2367*5113495bSYour Name 		 * from host
2368*5113495bSYour Name 		 */
2369*5113495bSYour Name 		.reg_start = {},
2370*5113495bSYour Name 		.reg_size = {},
2371*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
2372*5113495bSYour Name 	},
2373*5113495bSYour Name 	{ /* RXDMA_MONITOR_DESC */
2374*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA1_DESC,
2375*5113495bSYour Name 		.max_rings = 1,
2376*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
2377*5113495bSYour Name 		.lmac_ring = TRUE,
2378*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2379*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2380*5113495bSYour Name 		 * from host
2381*5113495bSYour Name 		 */
2382*5113495bSYour Name 		.reg_start = {},
2383*5113495bSYour Name 		.reg_size = {},
2384*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
2385*5113495bSYour Name 	},
2386*5113495bSYour Name 	{ /* DIR_BUF_RX_DMA_SRC */
2387*5113495bSYour Name 		.start_ring_id = HAL_SRNG_DIR_BUF_RX_SRC_DMA_RING,
2388*5113495bSYour Name 		/* one ring for spectral and one ring for cfr */
2389*5113495bSYour Name 		.max_rings = 2,
2390*5113495bSYour Name 		.entry_size = 2,
2391*5113495bSYour Name 		.lmac_ring = TRUE,
2392*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2393*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2394*5113495bSYour Name 		 * from host
2395*5113495bSYour Name 		 */
2396*5113495bSYour Name 		.reg_start = {},
2397*5113495bSYour Name 		.reg_size = {},
2398*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
2399*5113495bSYour Name 	},
2400*5113495bSYour Name #ifdef WLAN_FEATURE_CIF_CFR
2401*5113495bSYour Name 	{ /* WIFI_POS_SRC */
2402*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WIFI_POS_SRC_DMA_RING,
2403*5113495bSYour Name 		.max_rings = 1,
2404*5113495bSYour Name 		.entry_size = sizeof(wmi_oem_dma_buf_release_entry)  >> 2,
2405*5113495bSYour Name 		.lmac_ring = TRUE,
2406*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2407*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2408*5113495bSYour Name 		 * from host
2409*5113495bSYour Name 		 */
2410*5113495bSYour Name 		.reg_start = {},
2411*5113495bSYour Name 		.reg_size = {},
2412*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
2413*5113495bSYour Name 	},
2414*5113495bSYour Name #endif
2415*5113495bSYour Name 	{ /* REO2PPE */ 0},
2416*5113495bSYour Name 	{ /* PPE2TCL */ 0},
2417*5113495bSYour Name 	{ /* PPE_RELEASE */ 0},
2418*5113495bSYour Name 	{ /* TX_MONITOR_BUF */ 0},
2419*5113495bSYour Name 	{ /* TX_MONITOR_DST */ 0},
2420*5113495bSYour Name 	{ /* SW2RXDMA_NEW */ 0},
2421*5113495bSYour Name 	{ /* SW2RXDMA_LINK_RELEASE */ 0},
2422*5113495bSYour Name };
2423*5113495bSYour Name 
2424*5113495bSYour Name /**
2425*5113495bSYour Name  * hal_qcn6122_attach() - Attach 6122 target specific hal_soc ops,
2426*5113495bSYour Name  *                        offset and srng table
2427*5113495bSYour Name  * @hal_soc: HAL SoC Context
2428*5113495bSYour Name  *
2429*5113495bSYour Name  * Return: void
2430*5113495bSYour Name  */
hal_qcn6122_attach(struct hal_soc * hal_soc)2431*5113495bSYour Name void hal_qcn6122_attach(struct hal_soc *hal_soc)
2432*5113495bSYour Name {
2433*5113495bSYour Name 	hal_soc->hw_srng_table = hw_srng_table_6122;
2434*5113495bSYour Name 	hal_srng_hw_reg_offset_init_generic(hal_soc);
2435*5113495bSYour Name 
2436*5113495bSYour Name 	hal_hw_txrx_default_ops_attach_li(hal_soc);
2437*5113495bSYour Name 	hal_hw_txrx_ops_attach_qcn6122(hal_soc);
2438*5113495bSYour Name 	if (hal_soc->static_window_map)
2439*5113495bSYour Name 		hal_write_window_register(hal_soc);
2440*5113495bSYour Name }
2441