xref: /wlan-driver/qca-wifi-host-cmn/hal/wifi3.0/qca6290/hal_6290.c (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name #include "qdf_types.h"
20*5113495bSYour Name #include "qdf_util.h"
21*5113495bSYour Name #include "qdf_types.h"
22*5113495bSYour Name #include "qdf_lock.h"
23*5113495bSYour Name #include "qdf_mem.h"
24*5113495bSYour Name #include "qdf_nbuf.h"
25*5113495bSYour Name #include "hal_li_hw_headers.h"
26*5113495bSYour Name #include "hal_internal.h"
27*5113495bSYour Name #include "hal_api.h"
28*5113495bSYour Name #include "target_type.h"
29*5113495bSYour Name #include "wcss_version.h"
30*5113495bSYour Name #include "qdf_module.h"
31*5113495bSYour Name 
32*5113495bSYour Name #define UNIFIED_RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_OFFSET \
33*5113495bSYour Name 	RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_OFFSET
34*5113495bSYour Name #define UNIFIED_RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_MASK \
35*5113495bSYour Name 	RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_MASK
36*5113495bSYour Name #define UNIFIED_RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_LSB \
37*5113495bSYour Name 	RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_LSB
38*5113495bSYour Name #define UNIFIED_PHYRX_HT_SIG_0_HT_SIG_INFO_PHYRX_HT_SIG_INFO_DETAILS_OFFSET \
39*5113495bSYour Name 	PHYRX_HT_SIG_0_HT_SIG_INFO_PHYRX_HT_SIG_INFO_DETAILS_OFFSET
40*5113495bSYour Name #define UNIFIED_PHYRX_L_SIG_B_0_L_SIG_B_INFO_PHYRX_L_SIG_B_INFO_DETAILS_OFFSET \
41*5113495bSYour Name 	PHYRX_L_SIG_B_0_L_SIG_B_INFO_PHYRX_L_SIG_B_INFO_DETAILS_OFFSET
42*5113495bSYour Name #define UNIFIED_PHYRX_L_SIG_A_0_L_SIG_A_INFO_PHYRX_L_SIG_A_INFO_DETAILS_OFFSET \
43*5113495bSYour Name 	PHYRX_L_SIG_A_0_L_SIG_A_INFO_PHYRX_L_SIG_A_INFO_DETAILS_OFFSET
44*5113495bSYour Name #define UNIFIED_PHYRX_VHT_SIG_A_0_VHT_SIG_A_INFO_PHYRX_VHT_SIG_A_INFO_DETAILS_OFFSET \
45*5113495bSYour Name 	PHYRX_VHT_SIG_A_0_VHT_SIG_A_INFO_PHYRX_VHT_SIG_A_INFO_DETAILS_OFFSET
46*5113495bSYour Name #define UNIFIED_PHYRX_HE_SIG_A_SU_0_HE_SIG_A_SU_INFO_PHYRX_HE_SIG_A_SU_INFO_DETAILS_OFFSET \
47*5113495bSYour Name 	PHYRX_HE_SIG_A_SU_0_HE_SIG_A_SU_INFO_PHYRX_HE_SIG_A_SU_INFO_DETAILS_OFFSET
48*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 \
49*5113495bSYour Name 	PHYRX_HE_SIG_A_MU_DL_0_HE_SIG_A_MU_DL_INFO_PHYRX_HE_SIG_A_MU_DL_INFO_DETAILS_OFFSET
50*5113495bSYour Name #define UNIFIED_PHYRX_HE_SIG_B1_MU_0_HE_SIG_B1_MU_INFO_PHYRX_HE_SIG_B1_MU_INFO_DETAILS_OFFSET \
51*5113495bSYour Name 	PHYRX_HE_SIG_B1_MU_0_HE_SIG_B1_MU_INFO_PHYRX_HE_SIG_B1_MU_INFO_DETAILS_OFFSET
52*5113495bSYour Name #define UNIFIED_PHYRX_HE_SIG_B2_MU_0_HE_SIG_B2_MU_INFO_PHYRX_HE_SIG_B2_MU_INFO_DETAILS_OFFSET \
53*5113495bSYour Name 	PHYRX_HE_SIG_B2_MU_0_HE_SIG_B2_MU_INFO_PHYRX_HE_SIG_B2_MU_INFO_DETAILS_OFFSET
54*5113495bSYour Name #define UNIFIED_PHYRX_HE_SIG_B2_OFDMA_0_HE_SIG_B2_OFDMA_INFO_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS_OFFSET \
55*5113495bSYour Name 	PHYRX_HE_SIG_B2_OFDMA_0_HE_SIG_B2_OFDMA_INFO_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS_OFFSET
56*5113495bSYour Name #define UNIFIED_PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET \
57*5113495bSYour Name 	PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET
58*5113495bSYour Name #define UNIFIED_PHYRX_RSSI_LEGACY_19_RECEIVE_RSSI_INFO_PREAMBLE_RSSI_INFO_DETAILS_OFFSET \
59*5113495bSYour Name 	PHYRX_RSSI_LEGACY_19_RECEIVE_RSSI_INFO_PREAMBLE_RSSI_INFO_DETAILS_OFFSET
60*5113495bSYour Name #define UNIFIED_RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET \
61*5113495bSYour Name 	RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET
62*5113495bSYour Name #define UNIFIED_RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET \
63*5113495bSYour Name 	RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET
64*5113495bSYour Name #define UNIFIED_RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_RX_MSDU_DESC_INFO_DETAILS_OFFSET \
65*5113495bSYour Name 	RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_RX_MSDU_DESC_INFO_DETAILS_OFFSET
66*5113495bSYour Name #define UNIFIED_RX_MPDU_DETAILS_2_RX_MPDU_DESC_INFO_RX_MPDU_DESC_INFO_DETAILS_OFFSET \
67*5113495bSYour Name 	RX_MPDU_DETAILS_2_RX_MPDU_DESC_INFO_RX_MPDU_DESC_INFO_DETAILS_OFFSET
68*5113495bSYour Name #define UNIFIED_REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_RX_MPDU_DESC_INFO_DETAILS_OFFSET \
69*5113495bSYour Name 	REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_RX_MPDU_DESC_INFO_DETAILS_OFFSET
70*5113495bSYour Name #define UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC \
71*5113495bSYour Name 	UNIFORM_REO_STATUS_HEADER_STATUS_HEADER
72*5113495bSYour Name #define UNIFIED_RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_RX_MSDU_DESC_INFO_DETAILS_OFFSET \
73*5113495bSYour Name 	RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_RX_MSDU_DESC_INFO_DETAILS_OFFSET
74*5113495bSYour Name #define UNIFIED_RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET \
75*5113495bSYour Name 	RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET
76*5113495bSYour Name #define UNIFIED_TCL_DATA_CMD_0_BUFFER_ADDR_INFO_BUF_ADDR_INFO_OFFSET \
77*5113495bSYour Name 	TCL_DATA_CMD_0_BUFFER_ADDR_INFO_BUF_ADDR_INFO_OFFSET
78*5113495bSYour Name #define UNIFIED_TCL_DATA_CMD_1_BUFFER_ADDR_INFO_BUF_ADDR_INFO_OFFSET \
79*5113495bSYour Name 	TCL_DATA_CMD_1_BUFFER_ADDR_INFO_BUF_ADDR_INFO_OFFSET
80*5113495bSYour Name #define UNIFIED_TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_OFFSET \
81*5113495bSYour Name 	TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_OFFSET
82*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_0_BUFFER_ADDR_31_0_LSB \
83*5113495bSYour Name 	BUFFER_ADDR_INFO_0_BUFFER_ADDR_31_0_LSB
84*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_0_BUFFER_ADDR_31_0_MASK \
85*5113495bSYour Name 	BUFFER_ADDR_INFO_0_BUFFER_ADDR_31_0_MASK
86*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_BUFFER_ADDR_39_32_LSB \
87*5113495bSYour Name 	BUFFER_ADDR_INFO_1_BUFFER_ADDR_39_32_LSB
88*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_BUFFER_ADDR_39_32_MASK \
89*5113495bSYour Name 	BUFFER_ADDR_INFO_1_BUFFER_ADDR_39_32_MASK
90*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_RETURN_BUFFER_MANAGER_LSB \
91*5113495bSYour Name 	BUFFER_ADDR_INFO_1_RETURN_BUFFER_MANAGER_LSB
92*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_RETURN_BUFFER_MANAGER_MASK \
93*5113495bSYour Name 	BUFFER_ADDR_INFO_1_RETURN_BUFFER_MANAGER_MASK
94*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_SW_BUFFER_COOKIE_LSB \
95*5113495bSYour Name 	BUFFER_ADDR_INFO_1_SW_BUFFER_COOKIE_LSB
96*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_SW_BUFFER_COOKIE_MASK \
97*5113495bSYour Name 	BUFFER_ADDR_INFO_1_SW_BUFFER_COOKIE_MASK
98*5113495bSYour Name #define UNIFIED_TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_LSB \
99*5113495bSYour Name 	TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_LSB
100*5113495bSYour Name #define UNIFIED_TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_MASK \
101*5113495bSYour Name 	TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_MASK
102*5113495bSYour Name #define UNIFIED_WBM_RELEASE_RING_6_TX_RATE_STATS_INFO_TX_RATE_STATS_MASK \
103*5113495bSYour Name 	WBM_RELEASE_RING_6_TX_RATE_STATS_INFO_TX_RATE_STATS_MASK
104*5113495bSYour Name #define UNIFIED_WBM_RELEASE_RING_6_TX_RATE_STATS_INFO_TX_RATE_STATS_OFFSET \
105*5113495bSYour Name 	WBM_RELEASE_RING_6_TX_RATE_STATS_INFO_TX_RATE_STATS_OFFSET
106*5113495bSYour Name #define UNIFIED_WBM_RELEASE_RING_6_TX_RATE_STATS_INFO_TX_RATE_STATS_LSB \
107*5113495bSYour Name 	WBM_RELEASE_RING_6_TX_RATE_STATS_INFO_TX_RATE_STATS_LSB
108*5113495bSYour Name 
109*5113495bSYour Name #include "hal_6290_tx.h"
110*5113495bSYour Name #include "hal_6290_rx.h"
111*5113495bSYour Name #include <hal_generic_api.h>
112*5113495bSYour Name #include "hal_li_rx.h"
113*5113495bSYour Name #include "hal_li_api.h"
114*5113495bSYour Name #include "hal_li_generic_api.h"
115*5113495bSYour Name 
116*5113495bSYour Name /**
117*5113495bSYour Name  * hal_rx_get_rx_fragment_number_6290() - API to retrieve rx fragment number
118*5113495bSYour Name  * @buf: Network buffer
119*5113495bSYour Name  *
120*5113495bSYour Name  * Return: rx fragment number
121*5113495bSYour Name  */
122*5113495bSYour Name static
hal_rx_get_rx_fragment_number_6290(uint8_t * buf)123*5113495bSYour Name uint8_t hal_rx_get_rx_fragment_number_6290(uint8_t *buf)
124*5113495bSYour Name {
125*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf);
126*5113495bSYour Name 	struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs);
127*5113495bSYour Name 
128*5113495bSYour Name 	/* Return first 4 bits as fragment number */
129*5113495bSYour Name 	return (HAL_RX_MPDU_GET_SEQUENCE_NUMBER(rx_mpdu_info) &
130*5113495bSYour Name 		DOT11_SEQ_FRAG_MASK);
131*5113495bSYour Name }
132*5113495bSYour Name 
133*5113495bSYour Name /**
134*5113495bSYour Name  * hal_rx_msdu_end_da_is_mcbc_get_6290() - API to check if pkt is MCBC
135*5113495bSYour Name  *                                         from rx_msdu_end TLV
136*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
137*5113495bSYour Name  *
138*5113495bSYour Name  * Return: da_is_mcbc
139*5113495bSYour Name  */
140*5113495bSYour Name static inline uint8_t
hal_rx_msdu_end_da_is_mcbc_get_6290(uint8_t * buf)141*5113495bSYour Name hal_rx_msdu_end_da_is_mcbc_get_6290(uint8_t *buf)
142*5113495bSYour Name {
143*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
144*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
145*5113495bSYour Name 
146*5113495bSYour Name 	return HAL_RX_MSDU_END_DA_IS_MCBC_GET(msdu_end);
147*5113495bSYour Name }
148*5113495bSYour Name 
149*5113495bSYour Name /**
150*5113495bSYour Name  * hal_rx_msdu_end_sa_is_valid_get_6290() - API to get_6290 the sa_is_valid bit
151*5113495bSYour Name  *                                          from rx_msdu_end TLV
152*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
153*5113495bSYour Name  *
154*5113495bSYour Name  * Return: sa_is_valid bit
155*5113495bSYour Name  */
156*5113495bSYour Name static uint8_t
hal_rx_msdu_end_sa_is_valid_get_6290(uint8_t * buf)157*5113495bSYour Name hal_rx_msdu_end_sa_is_valid_get_6290(uint8_t *buf)
158*5113495bSYour Name {
159*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
160*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
161*5113495bSYour Name 	uint8_t sa_is_valid;
162*5113495bSYour Name 
163*5113495bSYour Name 	sa_is_valid = HAL_RX_MSDU_END_SA_IS_VALID_GET(msdu_end);
164*5113495bSYour Name 
165*5113495bSYour Name 	return sa_is_valid;
166*5113495bSYour Name }
167*5113495bSYour Name 
168*5113495bSYour Name /**
169*5113495bSYour Name  * hal_rx_msdu_end_sa_idx_get_6290() - API to get_6290 the sa_idx from
170*5113495bSYour Name  *                                     rx_msdu_end TLV
171*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
172*5113495bSYour Name  *
173*5113495bSYour Name  * Return: sa_idx (SA AST index)
174*5113495bSYour Name  */
175*5113495bSYour Name static
hal_rx_msdu_end_sa_idx_get_6290(uint8_t * buf)176*5113495bSYour Name uint16_t hal_rx_msdu_end_sa_idx_get_6290(uint8_t *buf)
177*5113495bSYour Name {
178*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
179*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
180*5113495bSYour Name 	uint16_t sa_idx;
181*5113495bSYour Name 
182*5113495bSYour Name 	sa_idx = HAL_RX_MSDU_END_SA_IDX_GET(msdu_end);
183*5113495bSYour Name 
184*5113495bSYour Name 	return sa_idx;
185*5113495bSYour Name }
186*5113495bSYour Name 
187*5113495bSYour Name /**
188*5113495bSYour Name  * hal_rx_desc_is_first_msdu_6290() - Check if first msdu
189*5113495bSYour Name  * @hw_desc_addr: hardware descriptor address
190*5113495bSYour Name  *
191*5113495bSYour Name  * Return: 0 - success/ non-zero failure
192*5113495bSYour Name  */
hal_rx_desc_is_first_msdu_6290(void * hw_desc_addr)193*5113495bSYour Name static uint32_t hal_rx_desc_is_first_msdu_6290(void *hw_desc_addr)
194*5113495bSYour Name {
195*5113495bSYour Name 	struct rx_pkt_tlvs *rx_tlvs = (struct rx_pkt_tlvs *)hw_desc_addr;
196*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &rx_tlvs->msdu_end_tlv.rx_msdu_end;
197*5113495bSYour Name 
198*5113495bSYour Name 	return HAL_RX_GET(msdu_end, RX_MSDU_END_5, FIRST_MSDU);
199*5113495bSYour Name }
200*5113495bSYour Name 
201*5113495bSYour Name /**
202*5113495bSYour Name  * hal_rx_msdu_end_l3_hdr_padding_get_6290() - API to get_6290 the l3_header
203*5113495bSYour Name  *                                             padding from rx_msdu_end TLV
204*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
205*5113495bSYour Name  *
206*5113495bSYour Name  * Return: number of l3 header padding bytes
207*5113495bSYour Name  */
hal_rx_msdu_end_l3_hdr_padding_get_6290(uint8_t * buf)208*5113495bSYour Name static uint32_t hal_rx_msdu_end_l3_hdr_padding_get_6290(uint8_t *buf)
209*5113495bSYour Name {
210*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
211*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
212*5113495bSYour Name 	uint32_t l3_header_padding;
213*5113495bSYour Name 
214*5113495bSYour Name 	l3_header_padding = HAL_RX_MSDU_END_L3_HEADER_PADDING_GET(msdu_end);
215*5113495bSYour Name 
216*5113495bSYour Name 	return l3_header_padding;
217*5113495bSYour Name }
218*5113495bSYour Name 
219*5113495bSYour Name /**
220*5113495bSYour Name  * hal_rx_encryption_info_valid_6290() - Returns encryption type.
221*5113495bSYour Name  * @buf: rx_tlv_hdr of the received packet
222*5113495bSYour Name  *
223*5113495bSYour Name  * Return: encryption type
224*5113495bSYour Name  */
hal_rx_encryption_info_valid_6290(uint8_t * buf)225*5113495bSYour Name static uint32_t hal_rx_encryption_info_valid_6290(uint8_t *buf)
226*5113495bSYour Name {
227*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
228*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
229*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
230*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
231*5113495bSYour Name 	uint32_t encryption_info = HAL_RX_MPDU_ENCRYPTION_INFO_VALID(mpdu_info);
232*5113495bSYour Name 
233*5113495bSYour Name 	return encryption_info;
234*5113495bSYour Name }
235*5113495bSYour Name 
236*5113495bSYour Name /**
237*5113495bSYour Name  * hal_rx_print_pn_6290() - Prints the PN of rx packet.
238*5113495bSYour Name  * @buf: rx_tlv_hdr of the received packet
239*5113495bSYour Name  *
240*5113495bSYour Name  * Return: void
241*5113495bSYour Name  */
hal_rx_print_pn_6290(uint8_t * buf)242*5113495bSYour Name static void hal_rx_print_pn_6290(uint8_t *buf)
243*5113495bSYour Name {
244*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
245*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
246*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
247*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
248*5113495bSYour Name 
249*5113495bSYour Name 	uint32_t pn_31_0 = HAL_RX_MPDU_PN_31_0_GET(mpdu_info);
250*5113495bSYour Name 	uint32_t pn_63_32 = HAL_RX_MPDU_PN_63_32_GET(mpdu_info);
251*5113495bSYour Name 	uint32_t pn_95_64 = HAL_RX_MPDU_PN_95_64_GET(mpdu_info);
252*5113495bSYour Name 	uint32_t pn_127_96 = HAL_RX_MPDU_PN_127_96_GET(mpdu_info);
253*5113495bSYour Name 
254*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",
255*5113495bSYour Name 		  pn_127_96, pn_95_64, pn_63_32, pn_31_0);
256*5113495bSYour Name }
257*5113495bSYour Name 
258*5113495bSYour Name /**
259*5113495bSYour Name  * hal_rx_msdu_end_first_msdu_get_6290() - API to get first msdu status from
260*5113495bSYour Name  *                                         rx_msdu_end TLV
261*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
262*5113495bSYour Name  *
263*5113495bSYour Name  * Return: first_msdu
264*5113495bSYour Name  */
265*5113495bSYour Name static uint8_t
hal_rx_msdu_end_first_msdu_get_6290(uint8_t * buf)266*5113495bSYour Name hal_rx_msdu_end_first_msdu_get_6290(uint8_t *buf)
267*5113495bSYour Name {
268*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
269*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
270*5113495bSYour Name 	uint8_t first_msdu;
271*5113495bSYour Name 
272*5113495bSYour Name 	first_msdu = HAL_RX_MSDU_END_FIRST_MSDU_GET(msdu_end);
273*5113495bSYour Name 
274*5113495bSYour Name 	return first_msdu;
275*5113495bSYour Name }
276*5113495bSYour Name 
277*5113495bSYour Name /**
278*5113495bSYour Name  * hal_rx_msdu_end_da_is_valid_get_6290() - API to check if da is valid from
279*5113495bSYour Name  *                                          rx_msdu_end TLV
280*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
281*5113495bSYour Name  *
282*5113495bSYour Name  * Return: da_is_valid
283*5113495bSYour Name  */
hal_rx_msdu_end_da_is_valid_get_6290(uint8_t * buf)284*5113495bSYour Name static uint8_t hal_rx_msdu_end_da_is_valid_get_6290(uint8_t *buf)
285*5113495bSYour Name {
286*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
287*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
288*5113495bSYour Name 	uint8_t da_is_valid;
289*5113495bSYour Name 
290*5113495bSYour Name 	da_is_valid = HAL_RX_MSDU_END_DA_IS_VALID_GET(msdu_end);
291*5113495bSYour Name 
292*5113495bSYour Name 	return da_is_valid;
293*5113495bSYour Name }
294*5113495bSYour Name 
295*5113495bSYour Name /**
296*5113495bSYour Name  * hal_rx_msdu_end_last_msdu_get_6290() - API to get last msdu status
297*5113495bSYour Name  *                                        from rx_msdu_end TLV
298*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
299*5113495bSYour Name  *
300*5113495bSYour Name  * Return: last_msdu
301*5113495bSYour Name  */
hal_rx_msdu_end_last_msdu_get_6290(uint8_t * buf)302*5113495bSYour Name static uint8_t hal_rx_msdu_end_last_msdu_get_6290(uint8_t *buf)
303*5113495bSYour Name {
304*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
305*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
306*5113495bSYour Name 	uint8_t last_msdu;
307*5113495bSYour Name 
308*5113495bSYour Name 	last_msdu = HAL_RX_MSDU_END_LAST_MSDU_GET(msdu_end);
309*5113495bSYour Name 
310*5113495bSYour Name 	return last_msdu;
311*5113495bSYour Name }
312*5113495bSYour Name 
313*5113495bSYour Name /**
314*5113495bSYour Name  * hal_rx_get_mpdu_mac_ad4_valid_6290() - Retrieves if mpdu 4th addr is valid
315*5113495bSYour Name  * @buf: Network buffer
316*5113495bSYour Name  *
317*5113495bSYour Name  * Return: value of mpdu 4th address valid field
318*5113495bSYour Name  */
hal_rx_get_mpdu_mac_ad4_valid_6290(uint8_t * buf)319*5113495bSYour Name static bool hal_rx_get_mpdu_mac_ad4_valid_6290(uint8_t *buf)
320*5113495bSYour Name {
321*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf);
322*5113495bSYour Name 	struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs);
323*5113495bSYour Name 	bool ad4_valid = 0;
324*5113495bSYour Name 
325*5113495bSYour Name 	ad4_valid = HAL_RX_MPDU_GET_MAC_AD4_VALID(rx_mpdu_info);
326*5113495bSYour Name 
327*5113495bSYour Name 	return ad4_valid;
328*5113495bSYour Name }
329*5113495bSYour Name 
330*5113495bSYour Name /**
331*5113495bSYour Name  * hal_rx_mpdu_start_sw_peer_id_get_6290() - Retrieve sw peer_id
332*5113495bSYour Name  * @buf: network buffer
333*5113495bSYour Name  *
334*5113495bSYour Name  * Return: sw peer_id:
335*5113495bSYour Name  */
hal_rx_mpdu_start_sw_peer_id_get_6290(uint8_t * buf)336*5113495bSYour Name static uint32_t hal_rx_mpdu_start_sw_peer_id_get_6290(uint8_t *buf)
337*5113495bSYour Name {
338*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
339*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
340*5113495bSYour Name 			&pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
341*5113495bSYour Name 
342*5113495bSYour Name 	return HAL_RX_MPDU_INFO_SW_PEER_ID_GET(
343*5113495bSYour Name 		&mpdu_start->rx_mpdu_info_details);
344*5113495bSYour Name }
345*5113495bSYour Name 
346*5113495bSYour Name /**
347*5113495bSYour Name  * hal_rx_mpdu_get_to_ds_6290() - API to get the tods info from rx_mpdu_start
348*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
349*5113495bSYour Name  *
350*5113495bSYour Name  * Return: uint32_t(to_ds)
351*5113495bSYour Name  */
352*5113495bSYour Name 
hal_rx_mpdu_get_to_ds_6290(uint8_t * buf)353*5113495bSYour Name static uint32_t hal_rx_mpdu_get_to_ds_6290(uint8_t *buf)
354*5113495bSYour Name {
355*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
356*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
357*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
358*5113495bSYour Name 
359*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
360*5113495bSYour Name 
361*5113495bSYour Name 	return HAL_RX_MPDU_GET_TODS(mpdu_info);
362*5113495bSYour Name }
363*5113495bSYour Name 
364*5113495bSYour Name /**
365*5113495bSYour Name  * hal_rx_mpdu_get_fr_ds_6290() - API to get the from ds info from rx_mpdu_start
366*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
367*5113495bSYour Name  *
368*5113495bSYour Name  * Return: uint32_t(fr_ds)
369*5113495bSYour Name  */
hal_rx_mpdu_get_fr_ds_6290(uint8_t * buf)370*5113495bSYour Name static uint32_t hal_rx_mpdu_get_fr_ds_6290(uint8_t *buf)
371*5113495bSYour Name {
372*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
373*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
374*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
375*5113495bSYour Name 
376*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
377*5113495bSYour Name 
378*5113495bSYour Name 	return HAL_RX_MPDU_GET_FROMDS(mpdu_info);
379*5113495bSYour Name }
380*5113495bSYour Name 
381*5113495bSYour Name /**
382*5113495bSYour Name  * hal_rx_get_mpdu_frame_control_valid_6290() - Retrieves mpdu frame control
383*5113495bSYour Name  *                                              valid
384*5113495bSYour Name  * @buf: Network buffer
385*5113495bSYour Name  *
386*5113495bSYour Name  * Return: value of frame control valid field
387*5113495bSYour Name  */
hal_rx_get_mpdu_frame_control_valid_6290(uint8_t * buf)388*5113495bSYour Name static uint8_t hal_rx_get_mpdu_frame_control_valid_6290(uint8_t *buf)
389*5113495bSYour Name {
390*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf);
391*5113495bSYour Name 	struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs);
392*5113495bSYour Name 
393*5113495bSYour Name 	return HAL_RX_MPDU_GET_FRAME_CONTROL_VALID(rx_mpdu_info);
394*5113495bSYour Name }
395*5113495bSYour Name 
396*5113495bSYour Name /**
397*5113495bSYour Name  * hal_rx_mpdu_get_addr1_6290() - API to check get address1 of the mpdu
398*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headera
399*5113495bSYour Name  * @mac_addr: pointer to mac address
400*5113495bSYour Name  *
401*5113495bSYour Name  * Return: success/failure
402*5113495bSYour Name  */
hal_rx_mpdu_get_addr1_6290(uint8_t * buf,uint8_t * mac_addr)403*5113495bSYour Name static QDF_STATUS hal_rx_mpdu_get_addr1_6290(uint8_t *buf, uint8_t *mac_addr)
404*5113495bSYour Name {
405*5113495bSYour Name 	struct __attribute__((__packed__)) hal_addr1 {
406*5113495bSYour Name 		uint32_t ad1_31_0;
407*5113495bSYour Name 		uint16_t ad1_47_32;
408*5113495bSYour Name 	};
409*5113495bSYour Name 
410*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
411*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
412*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
413*5113495bSYour Name 
414*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
415*5113495bSYour Name 	struct hal_addr1 *addr = (struct hal_addr1 *)mac_addr;
416*5113495bSYour Name 	uint32_t mac_addr_ad1_valid;
417*5113495bSYour Name 
418*5113495bSYour Name 	mac_addr_ad1_valid = HAL_RX_MPDU_MAC_ADDR_AD1_VALID_GET(mpdu_info);
419*5113495bSYour Name 
420*5113495bSYour Name 	if (mac_addr_ad1_valid) {
421*5113495bSYour Name 		addr->ad1_31_0 = HAL_RX_MPDU_AD1_31_0_GET(mpdu_info);
422*5113495bSYour Name 		addr->ad1_47_32 = HAL_RX_MPDU_AD1_47_32_GET(mpdu_info);
423*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
424*5113495bSYour Name 	}
425*5113495bSYour Name 
426*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
427*5113495bSYour Name }
428*5113495bSYour Name 
429*5113495bSYour Name /**
430*5113495bSYour Name  * hal_rx_mpdu_get_addr2_6290() - API to get address2 of the mpdu in the packet
431*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
432*5113495bSYour Name  * @mac_addr: pointer to mac address
433*5113495bSYour Name  *
434*5113495bSYour Name  * Return: success/failure
435*5113495bSYour Name  */
hal_rx_mpdu_get_addr2_6290(uint8_t * buf,uint8_t * mac_addr)436*5113495bSYour Name static QDF_STATUS hal_rx_mpdu_get_addr2_6290(uint8_t *buf,
437*5113495bSYour Name 					     uint8_t *mac_addr)
438*5113495bSYour Name {
439*5113495bSYour Name 	struct __attribute__((__packed__)) hal_addr2 {
440*5113495bSYour Name 		uint16_t ad2_15_0;
441*5113495bSYour Name 		uint32_t ad2_47_16;
442*5113495bSYour Name 	};
443*5113495bSYour Name 
444*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
445*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
446*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
447*5113495bSYour Name 
448*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
449*5113495bSYour Name 	struct hal_addr2 *addr = (struct hal_addr2 *)mac_addr;
450*5113495bSYour Name 	uint32_t mac_addr_ad2_valid;
451*5113495bSYour Name 
452*5113495bSYour Name 	mac_addr_ad2_valid = HAL_RX_MPDU_MAC_ADDR_AD2_VALID_GET(mpdu_info);
453*5113495bSYour Name 
454*5113495bSYour Name 	if (mac_addr_ad2_valid) {
455*5113495bSYour Name 		addr->ad2_15_0 = HAL_RX_MPDU_AD2_15_0_GET(mpdu_info);
456*5113495bSYour Name 		addr->ad2_47_16 = HAL_RX_MPDU_AD2_47_16_GET(mpdu_info);
457*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
458*5113495bSYour Name 	}
459*5113495bSYour Name 
460*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
461*5113495bSYour Name }
462*5113495bSYour Name 
463*5113495bSYour Name /**
464*5113495bSYour Name  * hal_rx_mpdu_get_addr3_6290() - API to get address3 of the mpdu in the packet
465*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
466*5113495bSYour Name  * @mac_addr: pointer to mac address
467*5113495bSYour Name  *
468*5113495bSYour Name  * Return: success/failure
469*5113495bSYour Name  */
hal_rx_mpdu_get_addr3_6290(uint8_t * buf,uint8_t * mac_addr)470*5113495bSYour Name static QDF_STATUS hal_rx_mpdu_get_addr3_6290(uint8_t *buf, uint8_t *mac_addr)
471*5113495bSYour Name {
472*5113495bSYour Name 	struct __attribute__((__packed__)) hal_addr3 {
473*5113495bSYour Name 		uint32_t ad3_31_0;
474*5113495bSYour Name 		uint16_t ad3_47_32;
475*5113495bSYour Name 	};
476*5113495bSYour Name 
477*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
478*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
479*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
480*5113495bSYour Name 
481*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
482*5113495bSYour Name 	struct hal_addr3 *addr = (struct hal_addr3 *)mac_addr;
483*5113495bSYour Name 	uint32_t mac_addr_ad3_valid;
484*5113495bSYour Name 
485*5113495bSYour Name 	mac_addr_ad3_valid = HAL_RX_MPDU_MAC_ADDR_AD3_VALID_GET(mpdu_info);
486*5113495bSYour Name 
487*5113495bSYour Name 	if (mac_addr_ad3_valid) {
488*5113495bSYour Name 		addr->ad3_31_0 = HAL_RX_MPDU_AD3_31_0_GET(mpdu_info);
489*5113495bSYour Name 		addr->ad3_47_32 = HAL_RX_MPDU_AD3_47_32_GET(mpdu_info);
490*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
491*5113495bSYour Name 	}
492*5113495bSYour Name 
493*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
494*5113495bSYour Name }
495*5113495bSYour Name 
496*5113495bSYour Name /**
497*5113495bSYour Name  * hal_rx_mpdu_get_addr4_6290() - API to get address4 of the mpdu in the packet
498*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
499*5113495bSYour Name  * @mac_addr: pointer to mac address
500*5113495bSYour Name  *
501*5113495bSYour Name  * Return: success/failure
502*5113495bSYour Name  */
hal_rx_mpdu_get_addr4_6290(uint8_t * buf,uint8_t * mac_addr)503*5113495bSYour Name static QDF_STATUS hal_rx_mpdu_get_addr4_6290(uint8_t *buf, uint8_t *mac_addr)
504*5113495bSYour Name {
505*5113495bSYour Name 	struct __attribute__((__packed__)) hal_addr4 {
506*5113495bSYour Name 		uint32_t ad4_31_0;
507*5113495bSYour Name 		uint16_t ad4_47_32;
508*5113495bSYour Name 	};
509*5113495bSYour Name 
510*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
511*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
512*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
513*5113495bSYour Name 
514*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
515*5113495bSYour Name 	struct hal_addr4 *addr = (struct hal_addr4 *)mac_addr;
516*5113495bSYour Name 	uint32_t mac_addr_ad4_valid;
517*5113495bSYour Name 
518*5113495bSYour Name 	mac_addr_ad4_valid = HAL_RX_MPDU_MAC_ADDR_AD4_VALID_GET(mpdu_info);
519*5113495bSYour Name 
520*5113495bSYour Name 	if (mac_addr_ad4_valid) {
521*5113495bSYour Name 		addr->ad4_31_0 = HAL_RX_MPDU_AD4_31_0_GET(mpdu_info);
522*5113495bSYour Name 		addr->ad4_47_32 = HAL_RX_MPDU_AD4_47_32_GET(mpdu_info);
523*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
524*5113495bSYour Name 	}
525*5113495bSYour Name 
526*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
527*5113495bSYour Name }
528*5113495bSYour Name 
529*5113495bSYour Name /**
530*5113495bSYour Name  * hal_rx_get_mpdu_sequence_control_valid_6290() - Get mpdu sequence control
531*5113495bSYour Name  *                                                 valid
532*5113495bSYour Name  * @buf: Network buffer
533*5113495bSYour Name  *
534*5113495bSYour Name  * Return: value of sequence control valid field
535*5113495bSYour Name  */
hal_rx_get_mpdu_sequence_control_valid_6290(uint8_t * buf)536*5113495bSYour Name static uint8_t hal_rx_get_mpdu_sequence_control_valid_6290(uint8_t *buf)
537*5113495bSYour Name {
538*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf);
539*5113495bSYour Name 	struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs);
540*5113495bSYour Name 
541*5113495bSYour Name 	return HAL_RX_MPDU_GET_SEQUENCE_CONTROL_VALID(rx_mpdu_info);
542*5113495bSYour Name }
543*5113495bSYour Name 
544*5113495bSYour Name /**
545*5113495bSYour Name  * hal_rx_is_unicast_6290() - check packet is unicast frame or not.
546*5113495bSYour Name  * @buf: pointer to rx pkt TLV.
547*5113495bSYour Name  *
548*5113495bSYour Name  * Return: true on unicast.
549*5113495bSYour Name  */
hal_rx_is_unicast_6290(uint8_t * buf)550*5113495bSYour Name static bool hal_rx_is_unicast_6290(uint8_t *buf)
551*5113495bSYour Name {
552*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
553*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
554*5113495bSYour Name 		&pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
555*5113495bSYour Name 	uint32_t grp_id;
556*5113495bSYour Name 	uint8_t *rx_mpdu_info = (uint8_t *)&mpdu_start->rx_mpdu_info_details;
557*5113495bSYour Name 
558*5113495bSYour Name 	grp_id = (_HAL_MS((*_OFFSET_TO_WORD_PTR((rx_mpdu_info),
559*5113495bSYour Name 			   RX_MPDU_INFO_0_SW_FRAME_GROUP_ID_OFFSET)),
560*5113495bSYour Name 			  RX_MPDU_INFO_0_SW_FRAME_GROUP_ID_MASK,
561*5113495bSYour Name 			  RX_MPDU_INFO_0_SW_FRAME_GROUP_ID_LSB));
562*5113495bSYour Name 
563*5113495bSYour Name 	return (HAL_MPDU_SW_FRAME_GROUP_UNICAST_DATA == grp_id) ? true : false;
564*5113495bSYour Name }
565*5113495bSYour Name 
566*5113495bSYour Name /**
567*5113495bSYour Name  * hal_rx_tid_get_6290() - get tid based on qos control valid.
568*5113495bSYour Name  * @hal_soc_hdl: hal soc handle
569*5113495bSYour Name  * @buf: pointer to rx pkt TLV.
570*5113495bSYour Name  *
571*5113495bSYour Name  * Return: tid
572*5113495bSYour Name  */
hal_rx_tid_get_6290(hal_soc_handle_t hal_soc_hdl,uint8_t * buf)573*5113495bSYour Name static uint32_t hal_rx_tid_get_6290(hal_soc_handle_t hal_soc_hdl, uint8_t *buf)
574*5113495bSYour Name {
575*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
576*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
577*5113495bSYour Name 	&pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
578*5113495bSYour Name 	uint8_t *rx_mpdu_info = (uint8_t *)&mpdu_start->rx_mpdu_info_details;
579*5113495bSYour Name 	uint8_t qos_control_valid =
580*5113495bSYour Name 		(_HAL_MS((*_OFFSET_TO_WORD_PTR((rx_mpdu_info),
581*5113495bSYour Name 			  RX_MPDU_INFO_2_MPDU_QOS_CONTROL_VALID_OFFSET)),
582*5113495bSYour Name 			 RX_MPDU_INFO_2_MPDU_QOS_CONTROL_VALID_MASK,
583*5113495bSYour Name 			 RX_MPDU_INFO_2_MPDU_QOS_CONTROL_VALID_LSB));
584*5113495bSYour Name 
585*5113495bSYour Name 	if (qos_control_valid)
586*5113495bSYour Name 		return hal_rx_mpdu_start_tid_get_6290(buf);
587*5113495bSYour Name 
588*5113495bSYour Name 	return HAL_RX_NON_QOS_TID;
589*5113495bSYour Name }
590*5113495bSYour Name 
591*5113495bSYour Name /**
592*5113495bSYour Name  * hal_rx_hw_desc_get_ppduid_get_6290() - retrieve ppdu id
593*5113495bSYour Name  * @rx_tlv_hdr: start address of rx_pkt_tlvs
594*5113495bSYour Name  * @rxdma_dst_ring_desc: Rx HW descriptor
595*5113495bSYour Name  *
596*5113495bSYour Name  * Return: ppdu id
597*5113495bSYour Name  */
hal_rx_hw_desc_get_ppduid_get_6290(void * rx_tlv_hdr,void * rxdma_dst_ring_desc)598*5113495bSYour Name static uint32_t hal_rx_hw_desc_get_ppduid_get_6290(void *rx_tlv_hdr,
599*5113495bSYour Name 						   void *rxdma_dst_ring_desc)
600*5113495bSYour Name {
601*5113495bSYour Name 	struct rx_mpdu_info *rx_mpdu_info;
602*5113495bSYour Name 	struct rx_pkt_tlvs *rx_desc = (struct rx_pkt_tlvs *)rx_tlv_hdr;
603*5113495bSYour Name 
604*5113495bSYour Name 	rx_mpdu_info =
605*5113495bSYour Name 		&rx_desc->mpdu_start_tlv.rx_mpdu_start.rx_mpdu_info_details;
606*5113495bSYour Name 
607*5113495bSYour Name 	return HAL_RX_GET(rx_mpdu_info, RX_MPDU_INFO_0, PHY_PPDU_ID);
608*5113495bSYour Name }
609*5113495bSYour Name 
610*5113495bSYour Name /**
611*5113495bSYour Name  * hal_reo_status_get_header_6290() - Process reo desc info
612*5113495bSYour Name  * @ring_desc: REO status ring descriptor
613*5113495bSYour Name  * @b: tlv type info
614*5113495bSYour Name  * @h1: Pointer to hal_reo_status_header where info to be stored
615*5113495bSYour Name  *
616*5113495bSYour Name  * Return: none.
617*5113495bSYour Name  *
618*5113495bSYour Name  */
hal_reo_status_get_header_6290(hal_ring_desc_t ring_desc,int b,void * h1)619*5113495bSYour Name static void hal_reo_status_get_header_6290(hal_ring_desc_t ring_desc, int b,
620*5113495bSYour Name 					   void *h1)
621*5113495bSYour Name {
622*5113495bSYour Name 	uint32_t *d = (uint32_t *)ring_desc;
623*5113495bSYour Name 	uint32_t val1 = 0;
624*5113495bSYour Name 	struct hal_reo_status_header *h =
625*5113495bSYour Name 			(struct hal_reo_status_header *)h1;
626*5113495bSYour Name 
627*5113495bSYour Name 	/* Offsets of descriptor fields defined in HW headers start
628*5113495bSYour Name 	 * from the field after TLV header
629*5113495bSYour Name 	 */
630*5113495bSYour Name 	d += HAL_GET_NUM_DWORDS(sizeof(struct tlv_32_hdr));
631*5113495bSYour Name 
632*5113495bSYour Name 	switch (b) {
633*5113495bSYour Name 	case HAL_REO_QUEUE_STATS_STATUS_TLV:
634*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_GET_QUEUE_STATS_STATUS_0,
635*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
636*5113495bSYour Name 		break;
637*5113495bSYour Name 	case HAL_REO_FLUSH_QUEUE_STATUS_TLV:
638*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_QUEUE_STATUS_0,
639*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
640*5113495bSYour Name 		break;
641*5113495bSYour Name 	case HAL_REO_FLUSH_CACHE_STATUS_TLV:
642*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_CACHE_STATUS_0,
643*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
644*5113495bSYour Name 		break;
645*5113495bSYour Name 	case HAL_REO_UNBLK_CACHE_STATUS_TLV:
646*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_UNBLOCK_CACHE_STATUS_0,
647*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
648*5113495bSYour Name 		break;
649*5113495bSYour Name 	case HAL_REO_TIMOUT_LIST_STATUS_TLV:
650*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_TIMEOUT_LIST_STATUS_0,
651*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
652*5113495bSYour Name 		break;
653*5113495bSYour Name 	case HAL_REO_DESC_THRES_STATUS_TLV:
654*5113495bSYour Name 		val1 =
655*5113495bSYour Name 		  d[HAL_OFFSET_DW(REO_DESCRIPTOR_THRESHOLD_REACHED_STATUS_0,
656*5113495bSYour Name 		  UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
657*5113495bSYour Name 		break;
658*5113495bSYour Name 	case HAL_REO_UPDATE_RX_QUEUE_STATUS_TLV:
659*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_UPDATE_RX_REO_QUEUE_STATUS_0,
660*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
661*5113495bSYour Name 		break;
662*5113495bSYour Name 	default:
663*5113495bSYour Name 		qdf_nofl_err("ERROR: Unknown tlv\n");
664*5113495bSYour Name 		break;
665*5113495bSYour Name 	}
666*5113495bSYour Name 	h->cmd_num =
667*5113495bSYour Name 		HAL_GET_FIELD(
668*5113495bSYour Name 			      UNIFORM_REO_STATUS_HEADER_0, REO_STATUS_NUMBER,
669*5113495bSYour Name 			      val1);
670*5113495bSYour Name 	h->exec_time =
671*5113495bSYour Name 		HAL_GET_FIELD(UNIFORM_REO_STATUS_HEADER_0,
672*5113495bSYour Name 			      CMD_EXECUTION_TIME, val1);
673*5113495bSYour Name 	h->status =
674*5113495bSYour Name 		HAL_GET_FIELD(UNIFORM_REO_STATUS_HEADER_0,
675*5113495bSYour Name 			      REO_CMD_EXECUTION_STATUS, val1);
676*5113495bSYour Name 	switch (b) {
677*5113495bSYour Name 	case HAL_REO_QUEUE_STATS_STATUS_TLV:
678*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_GET_QUEUE_STATS_STATUS_1,
679*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
680*5113495bSYour Name 		break;
681*5113495bSYour Name 	case HAL_REO_FLUSH_QUEUE_STATUS_TLV:
682*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_QUEUE_STATUS_1,
683*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
684*5113495bSYour Name 		break;
685*5113495bSYour Name 	case HAL_REO_FLUSH_CACHE_STATUS_TLV:
686*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_CACHE_STATUS_1,
687*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
688*5113495bSYour Name 		break;
689*5113495bSYour Name 	case HAL_REO_UNBLK_CACHE_STATUS_TLV:
690*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_UNBLOCK_CACHE_STATUS_1,
691*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
692*5113495bSYour Name 		break;
693*5113495bSYour Name 	case HAL_REO_TIMOUT_LIST_STATUS_TLV:
694*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_TIMEOUT_LIST_STATUS_1,
695*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
696*5113495bSYour Name 		break;
697*5113495bSYour Name 	case HAL_REO_DESC_THRES_STATUS_TLV:
698*5113495bSYour Name 		val1 =
699*5113495bSYour Name 		  d[HAL_OFFSET_DW(REO_DESCRIPTOR_THRESHOLD_REACHED_STATUS_1,
700*5113495bSYour Name 		  UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
701*5113495bSYour Name 		break;
702*5113495bSYour Name 	case HAL_REO_UPDATE_RX_QUEUE_STATUS_TLV:
703*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_UPDATE_RX_REO_QUEUE_STATUS_1,
704*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
705*5113495bSYour Name 		break;
706*5113495bSYour Name 	default:
707*5113495bSYour Name 		qdf_nofl_err("ERROR: Unknown tlv\n");
708*5113495bSYour Name 		break;
709*5113495bSYour Name 	}
710*5113495bSYour Name 	h->tstamp =
711*5113495bSYour Name 		HAL_GET_FIELD(UNIFORM_REO_STATUS_HEADER_1, TIMESTAMP, val1);
712*5113495bSYour Name }
713*5113495bSYour Name 
714*5113495bSYour Name /**
715*5113495bSYour Name  * hal_rx_mpdu_start_mpdu_qos_control_valid_get_6290() -
716*5113495bSYour Name  * Retrieve qos control valid bit from the tlv.
717*5113495bSYour Name  * @buf: pointer to rx pkt TLV.
718*5113495bSYour Name  *
719*5113495bSYour Name  * Return: qos control value.
720*5113495bSYour Name  */
721*5113495bSYour Name static inline uint32_t
hal_rx_mpdu_start_mpdu_qos_control_valid_get_6290(uint8_t * buf)722*5113495bSYour Name hal_rx_mpdu_start_mpdu_qos_control_valid_get_6290(uint8_t *buf)
723*5113495bSYour Name {
724*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
725*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
726*5113495bSYour Name 			&pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
727*5113495bSYour Name 
728*5113495bSYour Name 	return HAL_RX_MPDU_INFO_QOS_CONTROL_VALID_GET(
729*5113495bSYour Name 		&mpdu_start->rx_mpdu_info_details);
730*5113495bSYour Name }
731*5113495bSYour Name 
732*5113495bSYour Name /**
733*5113495bSYour Name  * hal_rx_msdu_end_sa_sw_peer_id_get_6290() - API to get the
734*5113495bSYour Name  * sa_sw_peer_id from rx_msdu_end TLV
735*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
736*5113495bSYour Name  *
737*5113495bSYour Name  * Return: sa_sw_peer_id index
738*5113495bSYour Name  */
739*5113495bSYour Name static inline uint32_t
hal_rx_msdu_end_sa_sw_peer_id_get_6290(uint8_t * buf)740*5113495bSYour Name hal_rx_msdu_end_sa_sw_peer_id_get_6290(uint8_t *buf)
741*5113495bSYour Name {
742*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
743*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
744*5113495bSYour Name 
745*5113495bSYour Name 	return HAL_RX_MSDU_END_SA_SW_PEER_ID_GET(msdu_end);
746*5113495bSYour Name }
747*5113495bSYour Name 
748*5113495bSYour Name /**
749*5113495bSYour Name  * hal_tx_desc_set_mesh_en_6290() - Set mesh_enable flag in Tx descriptor
750*5113495bSYour Name  * @desc: Handle to Tx Descriptor
751*5113495bSYour Name  * @en:   For raw WiFi frames, this indicates transmission to a mesh STA,
752*5113495bSYour Name  *        enabling the interpretation of the 'Mesh Control Present' bit
753*5113495bSYour Name  *        (bit 8) of QoS Control (otherwise this bit is ignored),
754*5113495bSYour Name  *        For native WiFi frames, this indicates that a 'Mesh Control' field
755*5113495bSYour Name  *        is present between the header and the LLC.
756*5113495bSYour Name  *
757*5113495bSYour Name  * Return: void
758*5113495bSYour Name  */
759*5113495bSYour Name static inline
hal_tx_desc_set_mesh_en_6290(void * desc,uint8_t en)760*5113495bSYour Name void hal_tx_desc_set_mesh_en_6290(void *desc, uint8_t en)
761*5113495bSYour Name {
762*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD_4, MESH_ENABLE) |=
763*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD_4, MESH_ENABLE, en);
764*5113495bSYour Name }
765*5113495bSYour Name 
766*5113495bSYour Name static
hal_rx_msdu0_buffer_addr_lsb_6290(void * link_desc_va)767*5113495bSYour Name void *hal_rx_msdu0_buffer_addr_lsb_6290(void *link_desc_va)
768*5113495bSYour Name {
769*5113495bSYour Name 	return (void *)HAL_RX_MSDU0_BUFFER_ADDR_LSB(link_desc_va);
770*5113495bSYour Name }
771*5113495bSYour Name 
772*5113495bSYour Name static
hal_rx_msdu_desc_info_ptr_get_6290(void * msdu0)773*5113495bSYour Name void *hal_rx_msdu_desc_info_ptr_get_6290(void *msdu0)
774*5113495bSYour Name {
775*5113495bSYour Name 	return (void *)HAL_RX_MSDU_DESC_INFO_PTR_GET(msdu0);
776*5113495bSYour Name }
777*5113495bSYour Name 
778*5113495bSYour Name static
hal_ent_mpdu_desc_info_6290(void * ent_ring_desc)779*5113495bSYour Name void *hal_ent_mpdu_desc_info_6290(void *ent_ring_desc)
780*5113495bSYour Name {
781*5113495bSYour Name 	return (void *)HAL_ENT_MPDU_DESC_INFO(ent_ring_desc);
782*5113495bSYour Name }
783*5113495bSYour Name 
784*5113495bSYour Name static
hal_dst_mpdu_desc_info_6290(void * dst_ring_desc)785*5113495bSYour Name void *hal_dst_mpdu_desc_info_6290(void *dst_ring_desc)
786*5113495bSYour Name {
787*5113495bSYour Name 	return (void *)HAL_DST_MPDU_DESC_INFO(dst_ring_desc);
788*5113495bSYour Name }
789*5113495bSYour Name 
790*5113495bSYour Name static
hal_rx_get_fc_valid_6290(uint8_t * buf)791*5113495bSYour Name uint8_t hal_rx_get_fc_valid_6290(uint8_t *buf)
792*5113495bSYour Name {
793*5113495bSYour Name 	return HAL_RX_GET_FC_VALID(buf);
794*5113495bSYour Name }
795*5113495bSYour Name 
hal_rx_get_to_ds_flag_6290(uint8_t * buf)796*5113495bSYour Name static uint8_t hal_rx_get_to_ds_flag_6290(uint8_t *buf)
797*5113495bSYour Name {
798*5113495bSYour Name 	return HAL_RX_GET_TO_DS_FLAG(buf);
799*5113495bSYour Name }
800*5113495bSYour Name 
hal_rx_get_mac_addr2_valid_6290(uint8_t * buf)801*5113495bSYour Name static uint8_t hal_rx_get_mac_addr2_valid_6290(uint8_t *buf)
802*5113495bSYour Name {
803*5113495bSYour Name 	return HAL_RX_GET_MAC_ADDR2_VALID(buf);
804*5113495bSYour Name }
805*5113495bSYour Name 
hal_rx_get_filter_category_6290(uint8_t * buf)806*5113495bSYour Name static uint8_t hal_rx_get_filter_category_6290(uint8_t *buf)
807*5113495bSYour Name {
808*5113495bSYour Name 	return HAL_RX_GET_FILTER_CATEGORY(buf);
809*5113495bSYour Name }
810*5113495bSYour Name 
811*5113495bSYour Name static uint32_t
hal_rx_get_ppdu_id_6290(uint8_t * buf)812*5113495bSYour Name hal_rx_get_ppdu_id_6290(uint8_t *buf)
813*5113495bSYour Name {
814*5113495bSYour Name 	return HAL_RX_GET_PPDU_ID(buf);
815*5113495bSYour Name }
816*5113495bSYour Name 
817*5113495bSYour Name /**
818*5113495bSYour Name  * hal_reo_config_6290() - Set reo config parameters
819*5113495bSYour Name  * @soc: hal soc handle
820*5113495bSYour Name  * @reg_val: value to be set
821*5113495bSYour Name  * @reo_params: reo parameters
822*5113495bSYour Name  *
823*5113495bSYour Name  * Return: void
824*5113495bSYour Name  */
825*5113495bSYour Name static
hal_reo_config_6290(struct hal_soc * soc,uint32_t reg_val,struct hal_reo_params * reo_params)826*5113495bSYour Name void hal_reo_config_6290(struct hal_soc *soc,
827*5113495bSYour Name 			 uint32_t reg_val,
828*5113495bSYour Name 			 struct hal_reo_params *reo_params)
829*5113495bSYour Name {
830*5113495bSYour Name 	HAL_REO_R0_CONFIG(soc, reg_val, reo_params);
831*5113495bSYour Name }
832*5113495bSYour Name 
833*5113495bSYour Name /**
834*5113495bSYour Name  * hal_rx_msdu_desc_info_get_ptr_6290() - Get msdu desc info ptr
835*5113495bSYour Name  * @msdu_details_ptr: Pointer to msdu_details_ptr
836*5113495bSYour Name  *
837*5113495bSYour Name  * Return: Pointer to rx_msdu_desc_info structure.
838*5113495bSYour Name  *
839*5113495bSYour Name  */
hal_rx_msdu_desc_info_get_ptr_6290(void * msdu_details_ptr)840*5113495bSYour Name static void *hal_rx_msdu_desc_info_get_ptr_6290(void *msdu_details_ptr)
841*5113495bSYour Name {
842*5113495bSYour Name 	return HAL_RX_MSDU_DESC_INFO_GET(msdu_details_ptr);
843*5113495bSYour Name }
844*5113495bSYour Name 
845*5113495bSYour Name /**
846*5113495bSYour Name  * hal_rx_link_desc_msdu0_ptr_6290() - Get pointer to rx_msdu details
847*5113495bSYour Name  * @link_desc: Pointer to link desc
848*5113495bSYour Name  *
849*5113495bSYour Name  * Return: Pointer to rx_msdu_details structure
850*5113495bSYour Name  *
851*5113495bSYour Name  */
hal_rx_link_desc_msdu0_ptr_6290(void * link_desc)852*5113495bSYour Name static void *hal_rx_link_desc_msdu0_ptr_6290(void *link_desc)
853*5113495bSYour Name {
854*5113495bSYour Name 	return HAL_RX_LINK_DESC_MSDU0_PTR(link_desc);
855*5113495bSYour Name }
856*5113495bSYour Name 
857*5113495bSYour Name /**
858*5113495bSYour Name  * hal_rx_msdu_flow_idx_get_6290() - API to get flow index
859*5113495bSYour Name  *                                   from rx_msdu_end TLV
860*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
861*5113495bSYour Name  *
862*5113495bSYour Name  * Return: flow index value from MSDU END TLV
863*5113495bSYour Name  */
hal_rx_msdu_flow_idx_get_6290(uint8_t * buf)864*5113495bSYour Name static inline uint32_t hal_rx_msdu_flow_idx_get_6290(uint8_t *buf)
865*5113495bSYour Name {
866*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
867*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
868*5113495bSYour Name 
869*5113495bSYour Name 	return HAL_RX_MSDU_END_FLOW_IDX_GET(msdu_end);
870*5113495bSYour Name }
871*5113495bSYour Name 
872*5113495bSYour Name /**
873*5113495bSYour Name  * hal_rx_msdu_flow_idx_invalid_6290() - API to get flow index invalid
874*5113495bSYour Name  *                                       from rx_msdu_end TLV
875*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
876*5113495bSYour Name  *
877*5113495bSYour Name  * Return: flow index invalid value from MSDU END TLV
878*5113495bSYour Name  */
hal_rx_msdu_flow_idx_invalid_6290(uint8_t * buf)879*5113495bSYour Name static bool hal_rx_msdu_flow_idx_invalid_6290(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_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
883*5113495bSYour Name 
884*5113495bSYour Name 	return HAL_RX_MSDU_END_FLOW_IDX_INVALID_GET(msdu_end);
885*5113495bSYour Name }
886*5113495bSYour Name 
887*5113495bSYour Name /**
888*5113495bSYour Name  * hal_rx_msdu_flow_idx_timeout_6290() - API to get flow index timeout
889*5113495bSYour Name  *                                       from rx_msdu_end TLV
890*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
891*5113495bSYour Name  *
892*5113495bSYour Name  * Return: flow index timeout value from MSDU END TLV
893*5113495bSYour Name  */
hal_rx_msdu_flow_idx_timeout_6290(uint8_t * buf)894*5113495bSYour Name static bool hal_rx_msdu_flow_idx_timeout_6290(uint8_t *buf)
895*5113495bSYour Name {
896*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
897*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
898*5113495bSYour Name 
899*5113495bSYour Name 	return HAL_RX_MSDU_END_FLOW_IDX_TIMEOUT_GET(msdu_end);
900*5113495bSYour Name }
901*5113495bSYour Name 
902*5113495bSYour Name /**
903*5113495bSYour Name  * hal_rx_msdu_fse_metadata_get_6290() - API to get FSE metadata
904*5113495bSYour Name  *                                       from rx_msdu_end TLV
905*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
906*5113495bSYour Name  *
907*5113495bSYour Name  * Return: fse metadata value from MSDU END TLV
908*5113495bSYour Name  */
hal_rx_msdu_fse_metadata_get_6290(uint8_t * buf)909*5113495bSYour Name static uint32_t hal_rx_msdu_fse_metadata_get_6290(uint8_t *buf)
910*5113495bSYour Name {
911*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
912*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
913*5113495bSYour Name 
914*5113495bSYour Name 	return HAL_RX_MSDU_END_FSE_METADATA_GET(msdu_end);
915*5113495bSYour Name }
916*5113495bSYour Name 
917*5113495bSYour Name /**
918*5113495bSYour Name  * hal_rx_msdu_cce_metadata_get_6290() - API to get CCE metadata
919*5113495bSYour Name  *                                       from rx_msdu_end TLV
920*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
921*5113495bSYour Name  *
922*5113495bSYour Name  * Return: cce_metadata
923*5113495bSYour Name  */
924*5113495bSYour Name static uint16_t
hal_rx_msdu_cce_metadata_get_6290(uint8_t * buf)925*5113495bSYour Name hal_rx_msdu_cce_metadata_get_6290(uint8_t *buf)
926*5113495bSYour Name {
927*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
928*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
929*5113495bSYour Name 
930*5113495bSYour Name 	return HAL_RX_MSDU_END_CCE_METADATA_GET(msdu_end);
931*5113495bSYour Name }
932*5113495bSYour Name 
933*5113495bSYour Name /**
934*5113495bSYour Name  * hal_rx_msdu_get_flow_params_6290() - API to get flow index, flow index
935*5113495bSYour Name  *                                      invalid and flow index timeout from
936*5113495bSYour Name  *                                      rx_msdu_end TLV
937*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
938*5113495bSYour Name  * @flow_invalid: pointer to return value of flow_idx_valid
939*5113495bSYour Name  * @flow_timeout: pointer to return value of flow_idx_timeout
940*5113495bSYour Name  * @flow_index: pointer to return value of flow_idx
941*5113495bSYour Name  *
942*5113495bSYour Name  * Return: none
943*5113495bSYour Name  */
944*5113495bSYour Name static inline void
hal_rx_msdu_get_flow_params_6290(uint8_t * buf,bool * flow_invalid,bool * flow_timeout,uint32_t * flow_index)945*5113495bSYour Name hal_rx_msdu_get_flow_params_6290(uint8_t *buf,
946*5113495bSYour Name 				 bool *flow_invalid,
947*5113495bSYour Name 				 bool *flow_timeout,
948*5113495bSYour Name 				 uint32_t *flow_index)
949*5113495bSYour Name {
950*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
951*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
952*5113495bSYour Name 
953*5113495bSYour Name 	*flow_invalid = HAL_RX_MSDU_END_FLOW_IDX_INVALID_GET(msdu_end);
954*5113495bSYour Name 	*flow_timeout = HAL_RX_MSDU_END_FLOW_IDX_TIMEOUT_GET(msdu_end);
955*5113495bSYour Name 	*flow_index = HAL_RX_MSDU_END_FLOW_IDX_GET(msdu_end);
956*5113495bSYour Name }
957*5113495bSYour Name 
958*5113495bSYour Name /**
959*5113495bSYour Name  * hal_rx_tlv_get_tcp_chksum_6290() - API to get tcp checksum
960*5113495bSYour Name  * @buf: rx_tlv_hdr
961*5113495bSYour Name  *
962*5113495bSYour Name  * Return: tcp checksum
963*5113495bSYour Name  */
964*5113495bSYour Name static uint16_t
hal_rx_tlv_get_tcp_chksum_6290(uint8_t * buf)965*5113495bSYour Name hal_rx_tlv_get_tcp_chksum_6290(uint8_t *buf)
966*5113495bSYour Name {
967*5113495bSYour Name 	return HAL_RX_TLV_GET_TCP_CHKSUM(buf);
968*5113495bSYour Name }
969*5113495bSYour Name 
970*5113495bSYour Name /**
971*5113495bSYour Name  * hal_rx_get_rx_sequence_6290() - Function to retrieve rx sequence number
972*5113495bSYour Name  * @buf: Network buffer
973*5113495bSYour Name  *
974*5113495bSYour Name  * Return: rx sequence number
975*5113495bSYour Name  */
976*5113495bSYour Name static
hal_rx_get_rx_sequence_6290(uint8_t * buf)977*5113495bSYour Name uint16_t hal_rx_get_rx_sequence_6290(uint8_t *buf)
978*5113495bSYour Name {
979*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf);
980*5113495bSYour Name 	struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs);
981*5113495bSYour Name 
982*5113495bSYour Name 	return HAL_RX_MPDU_GET_SEQUENCE_NUMBER(rx_mpdu_info);
983*5113495bSYour Name }
984*5113495bSYour Name 
985*5113495bSYour Name /**
986*5113495bSYour Name  * hal_get_window_address_6290() - Function to get hp/tp address
987*5113495bSYour Name  * @hal_soc: Pointer to hal_soc
988*5113495bSYour Name  * @addr: address offset of register
989*5113495bSYour Name  *
990*5113495bSYour Name  * Return: modified address offset of register
991*5113495bSYour Name  */
hal_get_window_address_6290(struct hal_soc * hal_soc,qdf_iomem_t addr)992*5113495bSYour Name static inline qdf_iomem_t hal_get_window_address_6290(struct hal_soc *hal_soc,
993*5113495bSYour Name 							qdf_iomem_t addr)
994*5113495bSYour Name {
995*5113495bSYour Name 	return addr;
996*5113495bSYour Name }
997*5113495bSYour Name 
998*5113495bSYour Name static
hal_compute_reo_remap_ix2_ix3_6290(uint32_t * ring,uint32_t num_rings,uint32_t * remap1,uint32_t * remap2)999*5113495bSYour Name void hal_compute_reo_remap_ix2_ix3_6290(uint32_t *ring, uint32_t num_rings,
1000*5113495bSYour Name 					uint32_t *remap1, uint32_t *remap2)
1001*5113495bSYour Name {
1002*5113495bSYour Name 	switch (num_rings) {
1003*5113495bSYour Name 	case 3:
1004*5113495bSYour Name 		*remap1 = HAL_REO_REMAP_IX2(ring[0], 16) |
1005*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 17) |
1006*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[2], 18) |
1007*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 19) |
1008*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 20) |
1009*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[2], 21) |
1010*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 22) |
1011*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 23);
1012*5113495bSYour Name 
1013*5113495bSYour Name 		*remap2 = HAL_REO_REMAP_IX3(ring[2], 24) |
1014*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 25) |
1015*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[1], 26) |
1016*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[2], 27) |
1017*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 28) |
1018*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[1], 29) |
1019*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[2], 30) |
1020*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 31);
1021*5113495bSYour Name 		break;
1022*5113495bSYour Name 	case 4:
1023*5113495bSYour Name 		*remap1 = HAL_REO_REMAP_IX2(ring[0], 16) |
1024*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 17) |
1025*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[2], 18) |
1026*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[3], 19) |
1027*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 20) |
1028*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 21) |
1029*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[2], 22) |
1030*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[3], 23);
1031*5113495bSYour Name 
1032*5113495bSYour Name 		*remap2 = HAL_REO_REMAP_IX3(ring[0], 24) |
1033*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[1], 25) |
1034*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[2], 26) |
1035*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[3], 27) |
1036*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 28) |
1037*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[1], 29) |
1038*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[2], 30) |
1039*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[3], 31);
1040*5113495bSYour Name 		break;
1041*5113495bSYour Name 	}
1042*5113495bSYour Name }
1043*5113495bSYour Name 
1044*5113495bSYour Name #ifdef WLAN_FEATURE_MARK_FIRST_WAKEUP_PACKET
1045*5113495bSYour Name /**
1046*5113495bSYour Name  * hal_get_first_wow_wakeup_packet_6290() - Function to get if the buffer
1047*5113495bSYour Name  * is the first one that wakes up host from WoW.
1048*5113495bSYour Name  *
1049*5113495bSYour Name  * @buf: network buffer
1050*5113495bSYour Name  *
1051*5113495bSYour Name  * Dummy function for QCA6290
1052*5113495bSYour Name  *
1053*5113495bSYour Name  * Return: 1 to indicate it is first packet received that wakes up host from
1054*5113495bSYour Name  *	   WoW. Otherwise 0
1055*5113495bSYour Name  */
hal_get_first_wow_wakeup_packet_6290(uint8_t * buf)1056*5113495bSYour Name static inline uint8_t hal_get_first_wow_wakeup_packet_6290(uint8_t *buf)
1057*5113495bSYour Name {
1058*5113495bSYour Name 	return 0;
1059*5113495bSYour Name }
1060*5113495bSYour Name #endif
1061*5113495bSYour Name 
hal_hw_txrx_ops_attach_6290(struct hal_soc * hal_soc)1062*5113495bSYour Name static void hal_hw_txrx_ops_attach_6290(struct hal_soc *hal_soc)
1063*5113495bSYour Name {
1064*5113495bSYour Name 	/* init and setup */
1065*5113495bSYour Name 	hal_soc->ops->hal_srng_dst_hw_init = hal_srng_dst_hw_init_generic;
1066*5113495bSYour Name 	hal_soc->ops->hal_srng_src_hw_init = hal_srng_src_hw_init_generic;
1067*5113495bSYour Name 	hal_soc->ops->hal_get_hw_hptp = hal_get_hw_hptp_generic;
1068*5113495bSYour Name 	hal_soc->ops->hal_reo_setup = hal_reo_setup_generic_li;
1069*5113495bSYour Name 	hal_soc->ops->hal_get_window_address = hal_get_window_address_6290;
1070*5113495bSYour Name 
1071*5113495bSYour Name 	/* tx */
1072*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_dscp_tid_table_id =
1073*5113495bSYour Name 	hal_tx_desc_set_dscp_tid_table_id_6290;
1074*5113495bSYour Name 	hal_soc->ops->hal_tx_set_dscp_tid_map = hal_tx_set_dscp_tid_map_6290;
1075*5113495bSYour Name 	hal_soc->ops->hal_tx_update_dscp_tid = hal_tx_update_dscp_tid_6290;
1076*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_lmac_id = hal_tx_desc_set_lmac_id_6290;
1077*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_buf_addr =
1078*5113495bSYour Name 					hal_tx_desc_set_buf_addr_generic_li;
1079*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_search_type =
1080*5113495bSYour Name 					hal_tx_desc_set_search_type_generic_li;
1081*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_search_index =
1082*5113495bSYour Name 					hal_tx_desc_set_search_index_generic_li;
1083*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_cache_set_num =
1084*5113495bSYour Name 				hal_tx_desc_set_cache_set_num_generic_li;
1085*5113495bSYour Name 	hal_soc->ops->hal_tx_comp_get_status =
1086*5113495bSYour Name 					hal_tx_comp_get_status_generic_li;
1087*5113495bSYour Name 	hal_soc->ops->hal_tx_comp_get_release_reason =
1088*5113495bSYour Name 		hal_tx_comp_get_release_reason_generic_li;
1089*5113495bSYour Name 	hal_soc->ops->hal_get_wbm_internal_error =
1090*5113495bSYour Name 					hal_get_wbm_internal_error_generic_li;
1091*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_mesh_en = hal_tx_desc_set_mesh_en_6290;
1092*5113495bSYour Name 	hal_soc->ops->hal_tx_init_cmd_credit_ring =
1093*5113495bSYour Name 					hal_tx_init_cmd_credit_ring_6290;
1094*5113495bSYour Name 
1095*5113495bSYour Name 	/* rx */
1096*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_start_nss_get =
1097*5113495bSYour Name 					hal_rx_msdu_start_nss_get_6290;
1098*5113495bSYour Name 	hal_soc->ops->hal_rx_mon_hw_desc_get_mpdu_status =
1099*5113495bSYour Name 		hal_rx_mon_hw_desc_get_mpdu_status_6290;
1100*5113495bSYour Name 	hal_soc->ops->hal_rx_get_tlv = hal_rx_get_tlv_6290;
1101*5113495bSYour Name 	hal_soc->ops->hal_rx_proc_phyrx_other_receive_info_tlv =
1102*5113495bSYour Name 		hal_rx_proc_phyrx_other_receive_info_tlv_6290;
1103*5113495bSYour Name 
1104*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_msdu_end_tlv = hal_rx_dump_msdu_end_tlv_6290;
1105*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_rx_attention_tlv =
1106*5113495bSYour Name 					hal_rx_dump_rx_attention_tlv_generic_li;
1107*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_msdu_start_tlv =
1108*5113495bSYour Name 					hal_rx_dump_msdu_start_tlv_6290;
1109*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_mpdu_start_tlv =
1110*5113495bSYour Name 					hal_rx_dump_mpdu_start_tlv_generic_li;
1111*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_mpdu_end_tlv =
1112*5113495bSYour Name 					hal_rx_dump_mpdu_end_tlv_generic_li;
1113*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_pkt_hdr_tlv =
1114*5113495bSYour Name 					hal_rx_dump_pkt_hdr_tlv_generic_li;
1115*5113495bSYour Name 
1116*5113495bSYour Name 	hal_soc->ops->hal_get_link_desc_size = hal_get_link_desc_size_6290;
1117*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_tid_get =
1118*5113495bSYour Name 					hal_rx_mpdu_start_tid_get_6290;
1119*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_start_reception_type_get =
1120*5113495bSYour Name 		hal_rx_msdu_start_reception_type_get_6290;
1121*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_da_idx_get =
1122*5113495bSYour Name 					hal_rx_msdu_end_da_idx_get_6290;
1123*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_desc_info_get_ptr =
1124*5113495bSYour Name 					hal_rx_msdu_desc_info_get_ptr_6290;
1125*5113495bSYour Name 	hal_soc->ops->hal_rx_link_desc_msdu0_ptr =
1126*5113495bSYour Name 					hal_rx_link_desc_msdu0_ptr_6290;
1127*5113495bSYour Name 	hal_soc->ops->hal_reo_status_get_header =
1128*5113495bSYour Name 					hal_reo_status_get_header_6290;
1129*5113495bSYour Name 	hal_soc->ops->hal_rx_status_get_tlv_info =
1130*5113495bSYour Name 					hal_rx_status_get_tlv_info_generic_li;
1131*5113495bSYour Name 	hal_soc->ops->hal_rx_wbm_err_info_get =
1132*5113495bSYour Name 					hal_rx_wbm_err_info_get_generic_li;
1133*5113495bSYour Name 
1134*5113495bSYour Name 	hal_soc->ops->hal_tx_set_pcp_tid_map =
1135*5113495bSYour Name 					hal_tx_set_pcp_tid_map_generic_li;
1136*5113495bSYour Name 	hal_soc->ops->hal_tx_update_pcp_tid_map =
1137*5113495bSYour Name 					hal_tx_update_pcp_tid_generic_li;
1138*5113495bSYour Name 	hal_soc->ops->hal_tx_set_tidmap_prty =
1139*5113495bSYour Name 					hal_tx_update_tidmap_prty_generic_li;
1140*5113495bSYour Name 	hal_soc->ops->hal_rx_get_rx_fragment_number =
1141*5113495bSYour Name 					hal_rx_get_rx_fragment_number_6290;
1142*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_da_is_mcbc_get =
1143*5113495bSYour Name 					hal_rx_msdu_end_da_is_mcbc_get_6290;
1144*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_sa_is_valid_get =
1145*5113495bSYour Name 					hal_rx_msdu_end_sa_is_valid_get_6290;
1146*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_sa_idx_get =
1147*5113495bSYour Name 					hal_rx_msdu_end_sa_idx_get_6290;
1148*5113495bSYour Name 	hal_soc->ops->hal_rx_desc_is_first_msdu =
1149*5113495bSYour Name 					hal_rx_desc_is_first_msdu_6290;
1150*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_l3_hdr_padding_get =
1151*5113495bSYour Name 				hal_rx_msdu_end_l3_hdr_padding_get_6290;
1152*5113495bSYour Name 	hal_soc->ops->hal_rx_encryption_info_valid =
1153*5113495bSYour Name 					hal_rx_encryption_info_valid_6290;
1154*5113495bSYour Name 	hal_soc->ops->hal_rx_print_pn = hal_rx_print_pn_6290;
1155*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_first_msdu_get =
1156*5113495bSYour Name 					hal_rx_msdu_end_first_msdu_get_6290;
1157*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_da_is_valid_get =
1158*5113495bSYour Name 					hal_rx_msdu_end_da_is_valid_get_6290;
1159*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_last_msdu_get =
1160*5113495bSYour Name 					hal_rx_msdu_end_last_msdu_get_6290;
1161*5113495bSYour Name 	hal_soc->ops->hal_rx_get_mpdu_mac_ad4_valid =
1162*5113495bSYour Name 					hal_rx_get_mpdu_mac_ad4_valid_6290;
1163*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_sw_peer_id_get =
1164*5113495bSYour Name 		hal_rx_mpdu_start_sw_peer_id_get_6290;
1165*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_peer_meta_data_get =
1166*5113495bSYour Name 		hal_rx_mpdu_peer_meta_data_get_li;
1167*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_to_ds = hal_rx_mpdu_get_to_ds_6290;
1168*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_fr_ds = hal_rx_mpdu_get_fr_ds_6290;
1169*5113495bSYour Name 	hal_soc->ops->hal_rx_get_mpdu_frame_control_valid =
1170*5113495bSYour Name 				hal_rx_get_mpdu_frame_control_valid_6290;
1171*5113495bSYour Name 	hal_soc->ops->hal_rx_get_frame_ctrl_field =
1172*5113495bSYour Name 				hal_rx_get_frame_ctrl_field_li;
1173*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_addr1 = hal_rx_mpdu_get_addr1_6290;
1174*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_addr2 = hal_rx_mpdu_get_addr2_6290;
1175*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_addr3 = hal_rx_mpdu_get_addr3_6290;
1176*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_addr4 = hal_rx_mpdu_get_addr4_6290;
1177*5113495bSYour Name 	hal_soc->ops->hal_rx_get_mpdu_sequence_control_valid =
1178*5113495bSYour Name 				hal_rx_get_mpdu_sequence_control_valid_6290;
1179*5113495bSYour Name 	hal_soc->ops->hal_rx_is_unicast = hal_rx_is_unicast_6290;
1180*5113495bSYour Name 	hal_soc->ops->hal_rx_tid_get = hal_rx_tid_get_6290;
1181*5113495bSYour Name 	hal_soc->ops->hal_rx_hw_desc_get_ppduid_get =
1182*5113495bSYour Name 					hal_rx_hw_desc_get_ppduid_get_6290;
1183*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_mpdu_qos_control_valid_get =
1184*5113495bSYour Name 		hal_rx_mpdu_start_mpdu_qos_control_valid_get_6290;
1185*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_sa_sw_peer_id_get =
1186*5113495bSYour Name 		hal_rx_msdu_end_sa_sw_peer_id_get_6290;
1187*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu0_buffer_addr_lsb =
1188*5113495bSYour Name 					hal_rx_msdu0_buffer_addr_lsb_6290;
1189*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_desc_info_ptr_get =
1190*5113495bSYour Name 					hal_rx_msdu_desc_info_ptr_get_6290;
1191*5113495bSYour Name 	hal_soc->ops->hal_ent_mpdu_desc_info = hal_ent_mpdu_desc_info_6290;
1192*5113495bSYour Name 	hal_soc->ops->hal_dst_mpdu_desc_info = hal_dst_mpdu_desc_info_6290;
1193*5113495bSYour Name 	hal_soc->ops->hal_rx_get_fc_valid = hal_rx_get_fc_valid_6290;
1194*5113495bSYour Name 	hal_soc->ops->hal_rx_get_to_ds_flag = hal_rx_get_to_ds_flag_6290;
1195*5113495bSYour Name 	hal_soc->ops->hal_rx_get_mac_addr2_valid =
1196*5113495bSYour Name 					hal_rx_get_mac_addr2_valid_6290;
1197*5113495bSYour Name 	hal_soc->ops->hal_rx_get_filter_category =
1198*5113495bSYour Name 					hal_rx_get_filter_category_6290;
1199*5113495bSYour Name 	hal_soc->ops->hal_rx_get_ppdu_id = hal_rx_get_ppdu_id_6290;
1200*5113495bSYour Name 	hal_soc->ops->hal_reo_config = hal_reo_config_6290;
1201*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_flow_idx_get = hal_rx_msdu_flow_idx_get_6290;
1202*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_flow_idx_invalid =
1203*5113495bSYour Name 					hal_rx_msdu_flow_idx_invalid_6290;
1204*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_flow_idx_timeout =
1205*5113495bSYour Name 					hal_rx_msdu_flow_idx_timeout_6290;
1206*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_fse_metadata_get =
1207*5113495bSYour Name 					hal_rx_msdu_fse_metadata_get_6290;
1208*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_cce_match_get =
1209*5113495bSYour Name 					hal_rx_msdu_cce_match_get_li;
1210*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_cce_metadata_get =
1211*5113495bSYour Name 					hal_rx_msdu_cce_metadata_get_6290;
1212*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_get_flow_params =
1213*5113495bSYour Name 					hal_rx_msdu_get_flow_params_6290;
1214*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_get_tcp_chksum =
1215*5113495bSYour Name 					hal_rx_tlv_get_tcp_chksum_6290;
1216*5113495bSYour Name 	hal_soc->ops->hal_rx_get_rx_sequence = hal_rx_get_rx_sequence_6290;
1217*5113495bSYour Name 	/* rx - msdu end fast path info fields */
1218*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_packet_metadata_get =
1219*5113495bSYour Name 		hal_rx_msdu_packet_metadata_get_generic_li;
1220*5113495bSYour Name 	/* rx - TLV struct offsets */
1221*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_offset_get =
1222*5113495bSYour Name 					hal_rx_msdu_end_offset_get_generic;
1223*5113495bSYour Name 	hal_soc->ops->hal_rx_attn_offset_get =
1224*5113495bSYour Name 					hal_rx_attn_offset_get_generic;
1225*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_start_offset_get =
1226*5113495bSYour Name 					hal_rx_msdu_start_offset_get_generic;
1227*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_offset_get =
1228*5113495bSYour Name 					hal_rx_mpdu_start_offset_get_generic;
1229*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_end_offset_get =
1230*5113495bSYour Name 					hal_rx_mpdu_end_offset_get_generic;
1231*5113495bSYour Name #ifndef NO_RX_PKT_HDR_TLV
1232*5113495bSYour Name 	hal_soc->ops->hal_rx_pkt_tlv_offset_get =
1233*5113495bSYour Name 					hal_rx_pkt_tlv_offset_get_generic;
1234*5113495bSYour Name #endif
1235*5113495bSYour Name 	hal_soc->ops->hal_compute_reo_remap_ix2_ix3 =
1236*5113495bSYour Name 					hal_compute_reo_remap_ix2_ix3_6290;
1237*5113495bSYour Name 	hal_soc->ops->hal_setup_link_idle_list =
1238*5113495bSYour Name 				hal_setup_link_idle_list_generic_li;
1239*5113495bSYour Name #ifdef WLAN_FEATURE_MARK_FIRST_WAKEUP_PACKET
1240*5113495bSYour Name 	hal_soc->ops->hal_get_first_wow_wakeup_packet =
1241*5113495bSYour Name 		hal_get_first_wow_wakeup_packet_6290;
1242*5113495bSYour Name #endif
1243*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_get_pn_num = hal_rx_tlv_get_pn_num_li;
1244*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_mic_err_get = hal_rx_tlv_mic_err_get_li;
1245*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_decrypt_err_get =
1246*5113495bSYour Name 			hal_rx_tlv_decrypt_err_get_li;
1247*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_get_pkt_capture_flags =
1248*5113495bSYour Name 					hal_rx_tlv_get_pkt_capture_flags_li;
1249*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_info_ampdu_flag_get =
1250*5113495bSYour Name 					hal_rx_mpdu_info_ampdu_flag_get_li;
1251*5113495bSYour Name 	hal_soc->ops->hal_compute_reo_remap_ix0 = NULL;
1252*5113495bSYour Name };
1253*5113495bSYour Name 
1254*5113495bSYour Name struct hal_hw_srng_config hw_srng_table_6290[] = {
1255*5113495bSYour Name 	/* TODO: max_rings can populated by querying HW capabilities */
1256*5113495bSYour Name 	{ /* REO_DST */
1257*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO2SW1,
1258*5113495bSYour Name 		.max_rings = 4,
1259*5113495bSYour Name 		.entry_size = sizeof(struct reo_destination_ring) >> 2,
1260*5113495bSYour Name 		.lmac_ring = FALSE,
1261*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
1262*5113495bSYour Name 		.reg_start = {
1263*5113495bSYour Name 			HWIO_REO_R0_REO2SW1_RING_BASE_LSB_ADDR(
1264*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
1265*5113495bSYour Name 			HWIO_REO_R2_REO2SW1_RING_HP_ADDR(
1266*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET)
1267*5113495bSYour Name 		},
1268*5113495bSYour Name 		.reg_size = {
1269*5113495bSYour Name 			HWIO_REO_R0_REO2SW2_RING_BASE_LSB_ADDR(0) -
1270*5113495bSYour Name 				HWIO_REO_R0_REO2SW1_RING_BASE_LSB_ADDR(0),
1271*5113495bSYour Name 			HWIO_REO_R2_REO2SW2_RING_HP_ADDR(0) -
1272*5113495bSYour Name 				HWIO_REO_R2_REO2SW1_RING_HP_ADDR(0),
1273*5113495bSYour Name 		},
1274*5113495bSYour Name 		.max_size = HWIO_REO_R0_REO2SW1_RING_BASE_MSB_RING_SIZE_BMSK >>
1275*5113495bSYour Name 			HWIO_REO_R0_REO2SW1_RING_BASE_MSB_RING_SIZE_SHFT,
1276*5113495bSYour Name 	},
1277*5113495bSYour Name 	{ /* REO_EXCEPTION */
1278*5113495bSYour Name 		/* Designating REO2TCL ring as exception ring. This ring is
1279*5113495bSYour Name 		 * similar to other REO2SW rings though it is named as REO2TCL.
1280*5113495bSYour Name 		 * Any of theREO2SW rings can be used as exception ring.
1281*5113495bSYour Name 		 */
1282*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO2TCL,
1283*5113495bSYour Name 		.max_rings = 1,
1284*5113495bSYour Name 		.entry_size = sizeof(struct reo_destination_ring) >> 2,
1285*5113495bSYour Name 		.lmac_ring = FALSE,
1286*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
1287*5113495bSYour Name 		.reg_start = {
1288*5113495bSYour Name 			HWIO_REO_R0_REO2TCL_RING_BASE_LSB_ADDR(
1289*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
1290*5113495bSYour Name 			HWIO_REO_R2_REO2TCL_RING_HP_ADDR(
1291*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET)
1292*5113495bSYour Name 		},
1293*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
1294*5113495bSYour Name 		 * type are supported
1295*5113495bSYour Name 		 */
1296*5113495bSYour Name 		.reg_size = {},
1297*5113495bSYour Name 		.max_size = HWIO_REO_R0_REO2TCL_RING_BASE_MSB_RING_SIZE_BMSK >>
1298*5113495bSYour Name 			HWIO_REO_R0_REO2TCL_RING_BASE_MSB_RING_SIZE_SHFT,
1299*5113495bSYour Name 	},
1300*5113495bSYour Name 	{ /* REO_REINJECT */
1301*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2REO,
1302*5113495bSYour Name 		.max_rings = 1,
1303*5113495bSYour Name 		.entry_size = sizeof(struct reo_entrance_ring) >> 2,
1304*5113495bSYour Name 		.lmac_ring = FALSE,
1305*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1306*5113495bSYour Name 		.reg_start = {
1307*5113495bSYour Name 			HWIO_REO_R0_SW2REO_RING_BASE_LSB_ADDR(
1308*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
1309*5113495bSYour Name 			HWIO_REO_R2_SW2REO_RING_HP_ADDR(
1310*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET)
1311*5113495bSYour Name 		},
1312*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
1313*5113495bSYour Name 		 * type are supported
1314*5113495bSYour Name 		 */
1315*5113495bSYour Name 		.reg_size = {},
1316*5113495bSYour Name 		.max_size = HWIO_REO_R0_SW2REO_RING_BASE_MSB_RING_SIZE_BMSK >>
1317*5113495bSYour Name 				HWIO_REO_R0_SW2REO_RING_BASE_MSB_RING_SIZE_SHFT,
1318*5113495bSYour Name 	},
1319*5113495bSYour Name 	{ /* REO_CMD */
1320*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO_CMD,
1321*5113495bSYour Name 		.max_rings = 1,
1322*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
1323*5113495bSYour Name 			sizeof(struct reo_get_queue_stats)) >> 2,
1324*5113495bSYour Name 		.lmac_ring = FALSE,
1325*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1326*5113495bSYour Name 		.reg_start = {
1327*5113495bSYour Name 			HWIO_REO_R0_REO_CMD_RING_BASE_LSB_ADDR(
1328*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
1329*5113495bSYour Name 			HWIO_REO_R2_REO_CMD_RING_HP_ADDR(
1330*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
1331*5113495bSYour Name 		},
1332*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
1333*5113495bSYour Name 		 * type are supported
1334*5113495bSYour Name 		 */
1335*5113495bSYour Name 		.reg_size = {},
1336*5113495bSYour Name 		.max_size = HWIO_REO_R0_REO_CMD_RING_BASE_MSB_RING_SIZE_BMSK >>
1337*5113495bSYour Name 			HWIO_REO_R0_REO_CMD_RING_BASE_MSB_RING_SIZE_SHFT,
1338*5113495bSYour Name 	},
1339*5113495bSYour Name 	{ /* REO_STATUS */
1340*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO_STATUS,
1341*5113495bSYour Name 		.max_rings = 1,
1342*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
1343*5113495bSYour Name 			sizeof(struct reo_get_queue_stats_status)) >> 2,
1344*5113495bSYour Name 		.lmac_ring = FALSE,
1345*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
1346*5113495bSYour Name 		.reg_start = {
1347*5113495bSYour Name 			HWIO_REO_R0_REO_STATUS_RING_BASE_LSB_ADDR(
1348*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
1349*5113495bSYour Name 			HWIO_REO_R2_REO_STATUS_RING_HP_ADDR(
1350*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
1351*5113495bSYour Name 		},
1352*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
1353*5113495bSYour Name 		 * type are supported
1354*5113495bSYour Name 		 */
1355*5113495bSYour Name 		.reg_size = {},
1356*5113495bSYour Name 		.max_size =
1357*5113495bSYour Name 			HWIO_REO_R0_REO_STATUS_RING_BASE_MSB_RING_SIZE_BMSK >>
1358*5113495bSYour Name 			HWIO_REO_R0_REO_STATUS_RING_BASE_MSB_RING_SIZE_SHFT,
1359*5113495bSYour Name 	},
1360*5113495bSYour Name 	{ /* TCL_DATA */
1361*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2TCL1,
1362*5113495bSYour Name 		.max_rings = 3,
1363*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
1364*5113495bSYour Name 			sizeof(struct tcl_data_cmd)) >> 2,
1365*5113495bSYour Name 		.lmac_ring = FALSE,
1366*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1367*5113495bSYour Name 		.reg_start = {
1368*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL1_RING_BASE_LSB_ADDR(
1369*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
1370*5113495bSYour Name 			HWIO_TCL_R2_SW2TCL1_RING_HP_ADDR(
1371*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
1372*5113495bSYour Name 		},
1373*5113495bSYour Name 		.reg_size = {
1374*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL2_RING_BASE_LSB_ADDR(0) -
1375*5113495bSYour Name 				HWIO_TCL_R0_SW2TCL1_RING_BASE_LSB_ADDR(0),
1376*5113495bSYour Name 			HWIO_TCL_R2_SW2TCL2_RING_HP_ADDR(0) -
1377*5113495bSYour Name 				HWIO_TCL_R2_SW2TCL1_RING_HP_ADDR(0),
1378*5113495bSYour Name 		},
1379*5113495bSYour Name 		.max_size = HWIO_TCL_R0_SW2TCL1_RING_BASE_MSB_RING_SIZE_BMSK >>
1380*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL1_RING_BASE_MSB_RING_SIZE_SHFT,
1381*5113495bSYour Name 	},
1382*5113495bSYour Name 	{ /* TCL_CMD */
1383*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2TCL_CMD,
1384*5113495bSYour Name 		.max_rings = 1,
1385*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
1386*5113495bSYour Name 			sizeof(struct tcl_gse_cmd)) >> 2,
1387*5113495bSYour Name 		.lmac_ring =  FALSE,
1388*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1389*5113495bSYour Name 		.reg_start = {
1390*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL_CMD_RING_BASE_LSB_ADDR(
1391*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
1392*5113495bSYour Name 			HWIO_TCL_R2_SW2TCL_CMD_RING_HP_ADDR(
1393*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
1394*5113495bSYour Name 		},
1395*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
1396*5113495bSYour Name 		 * type are supported
1397*5113495bSYour Name 		 */
1398*5113495bSYour Name 		.reg_size = {},
1399*5113495bSYour Name 		.max_size =
1400*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL_CMD_RING_BASE_MSB_RING_SIZE_BMSK >>
1401*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL_CMD_RING_BASE_MSB_RING_SIZE_SHFT,
1402*5113495bSYour Name 	},
1403*5113495bSYour Name 	{ /* TCL_STATUS */
1404*5113495bSYour Name 		.start_ring_id = HAL_SRNG_TCL_STATUS,
1405*5113495bSYour Name 		.max_rings = 1,
1406*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
1407*5113495bSYour Name 			sizeof(struct tcl_status_ring)) >> 2,
1408*5113495bSYour Name 		.lmac_ring = FALSE,
1409*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
1410*5113495bSYour Name 		.reg_start = {
1411*5113495bSYour Name 			HWIO_TCL_R0_TCL_STATUS1_RING_BASE_LSB_ADDR(
1412*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
1413*5113495bSYour Name 			HWIO_TCL_R2_TCL_STATUS1_RING_HP_ADDR(
1414*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
1415*5113495bSYour Name 		},
1416*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
1417*5113495bSYour Name 		 * type are supported
1418*5113495bSYour Name 		 */
1419*5113495bSYour Name 		.reg_size = {},
1420*5113495bSYour Name 		.max_size =
1421*5113495bSYour Name 			HWIO_TCL_R0_TCL_STATUS1_RING_BASE_MSB_RING_SIZE_BMSK >>
1422*5113495bSYour Name 			HWIO_TCL_R0_TCL_STATUS1_RING_BASE_MSB_RING_SIZE_SHFT,
1423*5113495bSYour Name 	},
1424*5113495bSYour Name 	{ /* CE_SRC */
1425*5113495bSYour Name 		.start_ring_id = HAL_SRNG_CE_0_SRC,
1426*5113495bSYour Name 		.max_rings = 12,
1427*5113495bSYour Name 		.entry_size = sizeof(struct ce_src_desc) >> 2,
1428*5113495bSYour Name 		.lmac_ring = FALSE,
1429*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1430*5113495bSYour Name 		.reg_start = {
1431*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_LSB_ADDR(
1432*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_SRC_REG_OFFSET),
1433*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R2_DEST_RING_HP_ADDR(
1434*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_SRC_REG_OFFSET),
1435*5113495bSYour Name 		},
1436*5113495bSYour Name 		.reg_size = {
1437*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_SRC_REG_OFFSET -
1438*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_SRC_REG_OFFSET,
1439*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_SRC_REG_OFFSET -
1440*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_SRC_REG_OFFSET,
1441*5113495bSYour Name 		},
1442*5113495bSYour Name 		.max_size =
1443*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_MSB_RING_SIZE_BMSK >>
1444*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_MSB_RING_SIZE_SHFT,
1445*5113495bSYour Name 	},
1446*5113495bSYour Name 	{ /* CE_DST */
1447*5113495bSYour Name 		.start_ring_id = HAL_SRNG_CE_0_DST,
1448*5113495bSYour Name 		.max_rings = 12,
1449*5113495bSYour Name 		.entry_size = 8 >> 2,
1450*5113495bSYour Name 		/*TODO: entry_size above should actually be
1451*5113495bSYour Name 		 * sizeof(struct ce_dst_desc) >> 2, but couldn't find definition
1452*5113495bSYour Name 		 * of struct ce_dst_desc in HW header files
1453*5113495bSYour Name 		 */
1454*5113495bSYour Name 		.lmac_ring = FALSE,
1455*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1456*5113495bSYour Name 		.reg_start = {
1457*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_LSB_ADDR(
1458*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET),
1459*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R2_DEST_RING_HP_ADDR(
1460*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET),
1461*5113495bSYour Name 		},
1462*5113495bSYour Name 		.reg_size = {
1463*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_DST_REG_OFFSET -
1464*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET,
1465*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_DST_REG_OFFSET -
1466*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET,
1467*5113495bSYour Name 		},
1468*5113495bSYour Name 		.max_size =
1469*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_MSB_RING_SIZE_BMSK >>
1470*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_MSB_RING_SIZE_SHFT,
1471*5113495bSYour Name 	},
1472*5113495bSYour Name 	{ /* CE_DST_STATUS */
1473*5113495bSYour Name 		.start_ring_id = HAL_SRNG_CE_0_DST_STATUS,
1474*5113495bSYour Name 		.max_rings = 12,
1475*5113495bSYour Name 		.entry_size = sizeof(struct ce_stat_desc) >> 2,
1476*5113495bSYour Name 		.lmac_ring = FALSE,
1477*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
1478*5113495bSYour Name 		.reg_start = {
1479*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_STATUS_RING_BASE_LSB_ADDR(
1480*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET),
1481*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R2_STATUS_RING_HP_ADDR(
1482*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET),
1483*5113495bSYour Name 		},
1484*5113495bSYour Name 			/* TODO: check destination status ring registers */
1485*5113495bSYour Name 		.reg_size = {
1486*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_DST_REG_OFFSET -
1487*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET,
1488*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_DST_REG_OFFSET -
1489*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET,
1490*5113495bSYour Name 		},
1491*5113495bSYour Name 		.max_size =
1492*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_STATUS_RING_BASE_MSB_RING_SIZE_BMSK >>
1493*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_STATUS_RING_BASE_MSB_RING_SIZE_SHFT,
1494*5113495bSYour Name 	},
1495*5113495bSYour Name 	{ /* WBM_IDLE_LINK */
1496*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WBM_IDLE_LINK,
1497*5113495bSYour Name 		.max_rings = 1,
1498*5113495bSYour Name 		.entry_size = sizeof(struct wbm_link_descriptor_ring) >> 2,
1499*5113495bSYour Name 		.lmac_ring = FALSE,
1500*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1501*5113495bSYour Name 		.reg_start = {
1502*5113495bSYour Name 		HWIO_WBM_R0_WBM_IDLE_LINK_RING_BASE_LSB_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
1503*5113495bSYour Name 		HWIO_WBM_R2_WBM_IDLE_LINK_RING_HP_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
1504*5113495bSYour Name 		},
1505*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
1506*5113495bSYour Name 		 * type are supported
1507*5113495bSYour Name 		 */
1508*5113495bSYour Name 		.reg_size = {},
1509*5113495bSYour Name 		.max_size =
1510*5113495bSYour Name 		HWIO_WBM_R0_WBM_IDLE_LINK_RING_BASE_MSB_RING_SIZE_BMSK >>
1511*5113495bSYour Name 			HWIO_WBM_R0_WBM_IDLE_LINK_RING_BASE_MSB_RING_SIZE_SHFT,
1512*5113495bSYour Name 	},
1513*5113495bSYour Name 	{ /* SW2WBM_RELEASE */
1514*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WBM_SW_RELEASE,
1515*5113495bSYour Name 		.max_rings = 1,
1516*5113495bSYour Name 		.entry_size = sizeof(struct wbm_release_ring) >> 2,
1517*5113495bSYour Name 		.lmac_ring = FALSE,
1518*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1519*5113495bSYour Name 		.reg_start = {
1520*5113495bSYour Name 		HWIO_WBM_R0_SW_RELEASE_RING_BASE_LSB_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
1521*5113495bSYour Name 		HWIO_WBM_R2_SW_RELEASE_RING_HP_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
1522*5113495bSYour Name 		},
1523*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
1524*5113495bSYour Name 		 * type are supported
1525*5113495bSYour Name 		 */
1526*5113495bSYour Name 		.reg_size = {},
1527*5113495bSYour Name 		.max_size =
1528*5113495bSYour Name 			HWIO_WBM_R0_SW_RELEASE_RING_BASE_MSB_RING_SIZE_BMSK >>
1529*5113495bSYour Name 			HWIO_WBM_R0_SW_RELEASE_RING_BASE_MSB_RING_SIZE_SHFT,
1530*5113495bSYour Name 	},
1531*5113495bSYour Name 	{ /* WBM2SW_RELEASE */
1532*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WBM2SW0_RELEASE,
1533*5113495bSYour Name 		.max_rings = 4,
1534*5113495bSYour Name 		.entry_size = sizeof(struct wbm_release_ring) >> 2,
1535*5113495bSYour Name 		.lmac_ring = FALSE,
1536*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
1537*5113495bSYour Name 		.reg_start = {
1538*5113495bSYour Name 		HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_LSB_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
1539*5113495bSYour Name 		HWIO_WBM_R2_WBM2SW0_RELEASE_RING_HP_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
1540*5113495bSYour Name 		},
1541*5113495bSYour Name 		.reg_size = {
1542*5113495bSYour Name 			HWIO_WBM_R0_WBM2SW1_RELEASE_RING_BASE_LSB_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET) -
1543*5113495bSYour Name 				HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_LSB_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
1544*5113495bSYour Name 			HWIO_WBM_R2_WBM2SW1_RELEASE_RING_HP_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET) -
1545*5113495bSYour Name 				HWIO_WBM_R2_WBM2SW0_RELEASE_RING_HP_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
1546*5113495bSYour Name 		},
1547*5113495bSYour Name 		.max_size =
1548*5113495bSYour Name 			HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_MSB_RING_SIZE_BMSK >>
1549*5113495bSYour Name 				HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_MSB_RING_SIZE_SHFT,
1550*5113495bSYour Name 	},
1551*5113495bSYour Name 	{ /* RXDMA_BUF */
1552*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA0_BUF0,
1553*5113495bSYour Name #ifdef IPA_OFFLOAD
1554*5113495bSYour Name 		.max_rings = 3,
1555*5113495bSYour Name #else
1556*5113495bSYour Name 		.max_rings = 2,
1557*5113495bSYour Name #endif
1558*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
1559*5113495bSYour Name 		.lmac_ring = TRUE,
1560*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1561*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
1562*5113495bSYour Name 		 * from host
1563*5113495bSYour Name 		 */
1564*5113495bSYour Name 		.reg_start = {},
1565*5113495bSYour Name 		.reg_size = {},
1566*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
1567*5113495bSYour Name 	},
1568*5113495bSYour Name 	{ /* RXDMA_DST */
1569*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_RXDMA2SW0,
1570*5113495bSYour Name 		.max_rings = 1,
1571*5113495bSYour Name 		.entry_size = sizeof(struct reo_entrance_ring) >> 2,
1572*5113495bSYour Name 		.lmac_ring =  TRUE,
1573*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
1574*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
1575*5113495bSYour Name 		 * from host
1576*5113495bSYour Name 		 */
1577*5113495bSYour Name 		.reg_start = {},
1578*5113495bSYour Name 		.reg_size = {},
1579*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
1580*5113495bSYour Name 	},
1581*5113495bSYour Name 	{ /* RXDMA_MONITOR_BUF */
1582*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA2_BUF,
1583*5113495bSYour Name 		.max_rings = 1,
1584*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
1585*5113495bSYour Name 		.lmac_ring = TRUE,
1586*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1587*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
1588*5113495bSYour Name 		 * from host
1589*5113495bSYour Name 		 */
1590*5113495bSYour Name 		.reg_start = {},
1591*5113495bSYour Name 		.reg_size = {},
1592*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
1593*5113495bSYour Name 	},
1594*5113495bSYour Name 	{ /* RXDMA_MONITOR_STATUS */
1595*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA1_STATBUF,
1596*5113495bSYour Name 		.max_rings = 1,
1597*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
1598*5113495bSYour Name 		.lmac_ring = TRUE,
1599*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1600*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
1601*5113495bSYour Name 		 * from host
1602*5113495bSYour Name 		 */
1603*5113495bSYour Name 		.reg_start = {},
1604*5113495bSYour Name 		.reg_size = {},
1605*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
1606*5113495bSYour Name 	},
1607*5113495bSYour Name 	{ /* RXDMA_MONITOR_DST */
1608*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_RXDMA2SW1,
1609*5113495bSYour Name 		.max_rings = 1,
1610*5113495bSYour Name 		.entry_size = sizeof(struct reo_entrance_ring) >> 2,
1611*5113495bSYour Name 		.lmac_ring = TRUE,
1612*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
1613*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
1614*5113495bSYour Name 		 * from host
1615*5113495bSYour Name 		 */
1616*5113495bSYour Name 		.reg_start = {},
1617*5113495bSYour Name 		.reg_size = {},
1618*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
1619*5113495bSYour Name 	},
1620*5113495bSYour Name 	{ /* RXDMA_MONITOR_DESC */
1621*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA1_DESC,
1622*5113495bSYour Name 		.max_rings = 1,
1623*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
1624*5113495bSYour Name 		.lmac_ring = TRUE,
1625*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1626*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
1627*5113495bSYour Name 		 * from host
1628*5113495bSYour Name 		 */
1629*5113495bSYour Name 		.reg_start = {},
1630*5113495bSYour Name 		.reg_size = {},
1631*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
1632*5113495bSYour Name 	},
1633*5113495bSYour Name 	{ /* DIR_BUF_RX_DMA_SRC */
1634*5113495bSYour Name 		.start_ring_id = HAL_SRNG_DIR_BUF_RX_SRC_DMA_RING,
1635*5113495bSYour Name 		.max_rings = 1,
1636*5113495bSYour Name 		.entry_size = 2,
1637*5113495bSYour Name 		.lmac_ring = TRUE,
1638*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1639*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
1640*5113495bSYour Name 		 * from host
1641*5113495bSYour Name 		 */
1642*5113495bSYour Name 		.reg_start = {},
1643*5113495bSYour Name 		.reg_size = {},
1644*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
1645*5113495bSYour Name 	},
1646*5113495bSYour Name #ifdef WLAN_FEATURE_CIF_CFR
1647*5113495bSYour Name 	{ /* WIFI_POS_SRC */
1648*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WIFI_POS_SRC_DMA_RING,
1649*5113495bSYour Name 		.max_rings = 1,
1650*5113495bSYour Name 		.entry_size = sizeof(wmi_oem_dma_buf_release_entry)  >> 2,
1651*5113495bSYour Name 		.lmac_ring = TRUE,
1652*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1653*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
1654*5113495bSYour Name 		 * from host
1655*5113495bSYour Name 		 */
1656*5113495bSYour Name 		.reg_start = {},
1657*5113495bSYour Name 		.reg_size = {},
1658*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
1659*5113495bSYour Name 	},
1660*5113495bSYour Name #endif
1661*5113495bSYour Name 	{ /* REO2PPE */ 0},
1662*5113495bSYour Name 	{ /* PPE2TCL */ 0},
1663*5113495bSYour Name 	{ /* PPE_RELEASE */ 0},
1664*5113495bSYour Name 	{ /* TX_MONITOR_BUF */ 0},
1665*5113495bSYour Name 	{ /* TX_MONITOR_DST */ 0},
1666*5113495bSYour Name 	{ /* SW2RXDMA_NEW */ 0},
1667*5113495bSYour Name 	{ /* SW2RXDMA_LINK_RELEASE */ 0},
1668*5113495bSYour Name };
1669*5113495bSYour Name 
1670*5113495bSYour Name /**
1671*5113495bSYour Name  * hal_qca6290_attach() - Attach 6290 target specific hal_soc ops,
1672*5113495bSYour Name  *			  offset and srng table
1673*5113495bSYour Name  * @hal_soc: Pointer to hal_soc
1674*5113495bSYour Name  */
hal_qca6290_attach(struct hal_soc * hal_soc)1675*5113495bSYour Name void hal_qca6290_attach(struct hal_soc *hal_soc)
1676*5113495bSYour Name {
1677*5113495bSYour Name 	hal_soc->hw_srng_table = hw_srng_table_6290;
1678*5113495bSYour Name 	hal_srng_hw_reg_offset_init_generic(hal_soc);
1679*5113495bSYour Name 
1680*5113495bSYour Name 	hal_hw_txrx_default_ops_attach_li(hal_soc);
1681*5113495bSYour Name 	hal_hw_txrx_ops_attach_6290(hal_soc);
1682*5113495bSYour Name }
1683