xref: /wlan-driver/qca-wifi-host-cmn/hal/wifi3.0/qca6390/hal_6390.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_6390_tx.h"
110*5113495bSYour Name #include "hal_6390_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_6390() - 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_6390(uint8_t * buf)123*5113495bSYour Name uint8_t hal_rx_get_rx_fragment_number_6390(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_6390() - 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 uint8_t
hal_rx_msdu_end_da_is_mcbc_get_6390(uint8_t * buf)141*5113495bSYour Name hal_rx_msdu_end_da_is_mcbc_get_6390(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_6390() - API to get_6390 the sa_is_valid
151*5113495bSYour Name  *                                          bit 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_6390(uint8_t * buf)157*5113495bSYour Name hal_rx_msdu_end_sa_is_valid_get_6390(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_6390() - API to get_6390 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_6390(uint8_t * buf)176*5113495bSYour Name uint16_t hal_rx_msdu_end_sa_idx_get_6390(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_6390() - 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_6390(void * hw_desc_addr)193*5113495bSYour Name static uint32_t hal_rx_desc_is_first_msdu_6390(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_6390() - API to get_6390 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_6390(uint8_t * buf)208*5113495bSYour Name static uint32_t hal_rx_msdu_end_l3_hdr_padding_get_6390(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_6390() - 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_6390(uint8_t * buf)225*5113495bSYour Name static uint32_t hal_rx_encryption_info_valid_6390(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_6390() - 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_6390(uint8_t * buf)242*5113495bSYour Name static void hal_rx_print_pn_6390(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_6390() - API to get first msdu status
260*5113495bSYour Name  *                                         from 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  */
hal_rx_msdu_end_first_msdu_get_6390(uint8_t * buf)265*5113495bSYour Name static uint8_t hal_rx_msdu_end_first_msdu_get_6390(uint8_t *buf)
266*5113495bSYour Name {
267*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
268*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
269*5113495bSYour Name 	uint8_t first_msdu;
270*5113495bSYour Name 
271*5113495bSYour Name 	first_msdu = HAL_RX_MSDU_END_FIRST_MSDU_GET(msdu_end);
272*5113495bSYour Name 
273*5113495bSYour Name 	return first_msdu;
274*5113495bSYour Name }
275*5113495bSYour Name 
276*5113495bSYour Name /**
277*5113495bSYour Name  * hal_rx_msdu_end_da_is_valid_get_6390() - API to check if da is valid
278*5113495bSYour Name  *                                          from rx_msdu_end TLV
279*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
280*5113495bSYour Name  *
281*5113495bSYour Name  * Return: da_is_valid
282*5113495bSYour Name  */
hal_rx_msdu_end_da_is_valid_get_6390(uint8_t * buf)283*5113495bSYour Name static uint8_t hal_rx_msdu_end_da_is_valid_get_6390(uint8_t *buf)
284*5113495bSYour Name {
285*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
286*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
287*5113495bSYour Name 	uint8_t da_is_valid;
288*5113495bSYour Name 
289*5113495bSYour Name 	da_is_valid = HAL_RX_MSDU_END_DA_IS_VALID_GET(msdu_end);
290*5113495bSYour Name 
291*5113495bSYour Name 	return da_is_valid;
292*5113495bSYour Name }
293*5113495bSYour Name 
294*5113495bSYour Name /**
295*5113495bSYour Name  * hal_rx_msdu_end_last_msdu_get_6390() - API to get last msdu status
296*5113495bSYour Name  *                                        from rx_msdu_end TLV
297*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
298*5113495bSYour Name  *
299*5113495bSYour Name  * Return: last_msdu
300*5113495bSYour Name  */
hal_rx_msdu_end_last_msdu_get_6390(uint8_t * buf)301*5113495bSYour Name static uint8_t hal_rx_msdu_end_last_msdu_get_6390(uint8_t *buf)
302*5113495bSYour Name {
303*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
304*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
305*5113495bSYour Name 	uint8_t last_msdu;
306*5113495bSYour Name 
307*5113495bSYour Name 	last_msdu = HAL_RX_MSDU_END_LAST_MSDU_GET(msdu_end);
308*5113495bSYour Name 
309*5113495bSYour Name 	return last_msdu;
310*5113495bSYour Name }
311*5113495bSYour Name 
312*5113495bSYour Name /**
313*5113495bSYour Name  * hal_rx_get_mpdu_mac_ad4_valid_6390() - Retrieves if mpdu 4th addr is valid
314*5113495bSYour Name  * @buf: Network buffer
315*5113495bSYour Name  *
316*5113495bSYour Name  * Return: value of mpdu 4th address valid field
317*5113495bSYour Name  */
hal_rx_get_mpdu_mac_ad4_valid_6390(uint8_t * buf)318*5113495bSYour Name static bool hal_rx_get_mpdu_mac_ad4_valid_6390(uint8_t *buf)
319*5113495bSYour Name {
320*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf);
321*5113495bSYour Name 	struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs);
322*5113495bSYour Name 	bool ad4_valid = 0;
323*5113495bSYour Name 
324*5113495bSYour Name 	ad4_valid = HAL_RX_MPDU_GET_MAC_AD4_VALID(rx_mpdu_info);
325*5113495bSYour Name 
326*5113495bSYour Name 	return ad4_valid;
327*5113495bSYour Name }
328*5113495bSYour Name 
329*5113495bSYour Name /**
330*5113495bSYour Name  * hal_rx_mpdu_start_sw_peer_id_get_6390() - Retrieve sw peer_id
331*5113495bSYour Name  * @buf: network buffer
332*5113495bSYour Name  *
333*5113495bSYour Name  * Return: sw peer_id
334*5113495bSYour Name  */
hal_rx_mpdu_start_sw_peer_id_get_6390(uint8_t * buf)335*5113495bSYour Name static uint32_t hal_rx_mpdu_start_sw_peer_id_get_6390(uint8_t *buf)
336*5113495bSYour Name {
337*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
338*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
339*5113495bSYour Name 			&pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
340*5113495bSYour Name 
341*5113495bSYour Name 	return HAL_RX_MPDU_INFO_SW_PEER_ID_GET(
342*5113495bSYour Name 		&mpdu_start->rx_mpdu_info_details);
343*5113495bSYour Name }
344*5113495bSYour Name 
345*5113495bSYour Name /**
346*5113495bSYour Name  * hal_rx_mpdu_get_to_ds_6390() - API to get the tods info
347*5113495bSYour Name  *                                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  */
hal_rx_mpdu_get_to_ds_6390(uint8_t * buf)352*5113495bSYour Name static uint32_t hal_rx_mpdu_get_to_ds_6390(uint8_t *buf)
353*5113495bSYour Name {
354*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
355*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
356*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
357*5113495bSYour Name 
358*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
359*5113495bSYour Name 
360*5113495bSYour Name 	return HAL_RX_MPDU_GET_TODS(mpdu_info);
361*5113495bSYour Name }
362*5113495bSYour Name 
363*5113495bSYour Name /**
364*5113495bSYour Name  * hal_rx_mpdu_get_fr_ds_6390() - API to get the from ds info
365*5113495bSYour Name  *                                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_6390(uint8_t * buf)370*5113495bSYour Name static uint32_t hal_rx_mpdu_get_fr_ds_6390(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_6390() - Retrieves mpdu
383*5113495bSYour Name  *                                              frame control 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_6390(uint8_t * buf)388*5113495bSYour Name static uint8_t hal_rx_get_mpdu_frame_control_valid_6390(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_6390() - 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_6390(uint8_t * buf,uint8_t * mac_addr)403*5113495bSYour Name static QDF_STATUS hal_rx_mpdu_get_addr1_6390(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_6390() - API to check get address2 of the mpdu
431*5113495bSYour Name  *                                in the packet
432*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
433*5113495bSYour Name  * @mac_addr: pointer to mac address
434*5113495bSYour Name  *
435*5113495bSYour Name  * Return: success/failure
436*5113495bSYour Name  */
hal_rx_mpdu_get_addr2_6390(uint8_t * buf,uint8_t * mac_addr)437*5113495bSYour Name static QDF_STATUS hal_rx_mpdu_get_addr2_6390(uint8_t *buf,
438*5113495bSYour Name 					     uint8_t *mac_addr)
439*5113495bSYour Name {
440*5113495bSYour Name 	struct __attribute__((__packed__)) hal_addr2 {
441*5113495bSYour Name 		uint16_t ad2_15_0;
442*5113495bSYour Name 		uint32_t ad2_47_16;
443*5113495bSYour Name 	};
444*5113495bSYour Name 
445*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
446*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
447*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
448*5113495bSYour Name 
449*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
450*5113495bSYour Name 	struct hal_addr2 *addr = (struct hal_addr2 *)mac_addr;
451*5113495bSYour Name 	uint32_t mac_addr_ad2_valid;
452*5113495bSYour Name 
453*5113495bSYour Name 	mac_addr_ad2_valid = HAL_RX_MPDU_MAC_ADDR_AD2_VALID_GET(mpdu_info);
454*5113495bSYour Name 
455*5113495bSYour Name 	if (mac_addr_ad2_valid) {
456*5113495bSYour Name 		addr->ad2_15_0 = HAL_RX_MPDU_AD2_15_0_GET(mpdu_info);
457*5113495bSYour Name 		addr->ad2_47_16 = HAL_RX_MPDU_AD2_47_16_GET(mpdu_info);
458*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
459*5113495bSYour Name 	}
460*5113495bSYour Name 
461*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
462*5113495bSYour Name }
463*5113495bSYour Name 
464*5113495bSYour Name /**
465*5113495bSYour Name  * hal_rx_mpdu_get_addr3_6390() - API to get address3 of the mpdu
466*5113495bSYour Name  *                                in the packet
467*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
468*5113495bSYour Name  * @mac_addr: pointer to mac address
469*5113495bSYour Name  *
470*5113495bSYour Name  * Return: success/failure
471*5113495bSYour Name  */
hal_rx_mpdu_get_addr3_6390(uint8_t * buf,uint8_t * mac_addr)472*5113495bSYour Name static QDF_STATUS hal_rx_mpdu_get_addr3_6390(uint8_t *buf, uint8_t *mac_addr)
473*5113495bSYour Name {
474*5113495bSYour Name 	struct __attribute__((__packed__)) hal_addr3 {
475*5113495bSYour Name 		uint32_t ad3_31_0;
476*5113495bSYour Name 		uint16_t ad3_47_32;
477*5113495bSYour Name 	};
478*5113495bSYour Name 
479*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
480*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
481*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
482*5113495bSYour Name 
483*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
484*5113495bSYour Name 	struct hal_addr3 *addr = (struct hal_addr3 *)mac_addr;
485*5113495bSYour Name 	uint32_t mac_addr_ad3_valid;
486*5113495bSYour Name 
487*5113495bSYour Name 	mac_addr_ad3_valid = HAL_RX_MPDU_MAC_ADDR_AD3_VALID_GET(mpdu_info);
488*5113495bSYour Name 
489*5113495bSYour Name 	if (mac_addr_ad3_valid) {
490*5113495bSYour Name 		addr->ad3_31_0 = HAL_RX_MPDU_AD3_31_0_GET(mpdu_info);
491*5113495bSYour Name 		addr->ad3_47_32 = HAL_RX_MPDU_AD3_47_32_GET(mpdu_info);
492*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
493*5113495bSYour Name 	}
494*5113495bSYour Name 
495*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
496*5113495bSYour Name }
497*5113495bSYour Name 
498*5113495bSYour Name /**
499*5113495bSYour Name  * hal_rx_mpdu_get_addr4_6390() - API to get address4 of the mpdu
500*5113495bSYour Name  *                                in the packet
501*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV header
502*5113495bSYour Name  * @mac_addr: pointer to mac address
503*5113495bSYour Name  *
504*5113495bSYour Name  * Return: success/failure
505*5113495bSYour Name  */
hal_rx_mpdu_get_addr4_6390(uint8_t * buf,uint8_t * mac_addr)506*5113495bSYour Name static QDF_STATUS hal_rx_mpdu_get_addr4_6390(uint8_t *buf, uint8_t *mac_addr)
507*5113495bSYour Name {
508*5113495bSYour Name 	struct __attribute__((__packed__)) hal_addr4 {
509*5113495bSYour Name 		uint32_t ad4_31_0;
510*5113495bSYour Name 		uint16_t ad4_47_32;
511*5113495bSYour Name 	};
512*5113495bSYour Name 
513*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
514*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
515*5113495bSYour Name 				 &pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
516*5113495bSYour Name 
517*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
518*5113495bSYour Name 	struct hal_addr4 *addr = (struct hal_addr4 *)mac_addr;
519*5113495bSYour Name 	uint32_t mac_addr_ad4_valid;
520*5113495bSYour Name 
521*5113495bSYour Name 	mac_addr_ad4_valid = HAL_RX_MPDU_MAC_ADDR_AD4_VALID_GET(mpdu_info);
522*5113495bSYour Name 
523*5113495bSYour Name 	if (mac_addr_ad4_valid) {
524*5113495bSYour Name 		addr->ad4_31_0 = HAL_RX_MPDU_AD4_31_0_GET(mpdu_info);
525*5113495bSYour Name 		addr->ad4_47_32 = HAL_RX_MPDU_AD4_47_32_GET(mpdu_info);
526*5113495bSYour Name 		return QDF_STATUS_SUCCESS;
527*5113495bSYour Name 	}
528*5113495bSYour Name 
529*5113495bSYour Name 	return QDF_STATUS_E_FAILURE;
530*5113495bSYour Name }
531*5113495bSYour Name 
532*5113495bSYour Name /**
533*5113495bSYour Name  * hal_rx_get_mpdu_sequence_control_valid_6390() - Get mpdu sequence
534*5113495bSYour Name  *                                                 control valid
535*5113495bSYour Name  * @buf: Network buffer
536*5113495bSYour Name  *
537*5113495bSYour Name  * Return: value of sequence control valid field
538*5113495bSYour Name  */
hal_rx_get_mpdu_sequence_control_valid_6390(uint8_t * buf)539*5113495bSYour Name static uint8_t hal_rx_get_mpdu_sequence_control_valid_6390(uint8_t *buf)
540*5113495bSYour Name {
541*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf);
542*5113495bSYour Name 	struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs);
543*5113495bSYour Name 
544*5113495bSYour Name 	return HAL_RX_MPDU_GET_SEQUENCE_CONTROL_VALID(rx_mpdu_info);
545*5113495bSYour Name }
546*5113495bSYour Name 
547*5113495bSYour Name /**
548*5113495bSYour Name  * hal_rx_is_unicast_6390() - check packet is unicast frame or not.
549*5113495bSYour Name  * @buf: pointer to rx pkt TLV.
550*5113495bSYour Name  *
551*5113495bSYour Name  * Return: true on unicast.
552*5113495bSYour Name  */
hal_rx_is_unicast_6390(uint8_t * buf)553*5113495bSYour Name static bool hal_rx_is_unicast_6390(uint8_t *buf)
554*5113495bSYour Name {
555*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
556*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
557*5113495bSYour Name 		&pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
558*5113495bSYour Name 	uint32_t grp_id;
559*5113495bSYour Name 	uint8_t *rx_mpdu_info = (uint8_t *)&mpdu_start->rx_mpdu_info_details;
560*5113495bSYour Name 
561*5113495bSYour Name 	grp_id = (_HAL_MS((*_OFFSET_TO_WORD_PTR((rx_mpdu_info),
562*5113495bSYour Name 			   RX_MPDU_INFO_0_SW_FRAME_GROUP_ID_OFFSET)),
563*5113495bSYour Name 			  RX_MPDU_INFO_0_SW_FRAME_GROUP_ID_MASK,
564*5113495bSYour Name 			  RX_MPDU_INFO_0_SW_FRAME_GROUP_ID_LSB));
565*5113495bSYour Name 
566*5113495bSYour Name 	return (HAL_MPDU_SW_FRAME_GROUP_UNICAST_DATA == grp_id) ? true : false;
567*5113495bSYour Name }
568*5113495bSYour Name 
569*5113495bSYour Name /**
570*5113495bSYour Name  * hal_rx_tid_get_6390() - get tid based on qos control valid.
571*5113495bSYour Name  * @hal_soc_hdl: hal soc handle
572*5113495bSYour Name  * @buf: pointer to rx pkt TLV.
573*5113495bSYour Name  *
574*5113495bSYour Name  * Return: tid
575*5113495bSYour Name  */
hal_rx_tid_get_6390(hal_soc_handle_t hal_soc_hdl,uint8_t * buf)576*5113495bSYour Name static uint32_t hal_rx_tid_get_6390(hal_soc_handle_t hal_soc_hdl, uint8_t *buf)
577*5113495bSYour Name {
578*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
579*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
580*5113495bSYour Name 	&pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
581*5113495bSYour Name 	uint8_t *rx_mpdu_info = (uint8_t *)&mpdu_start->rx_mpdu_info_details;
582*5113495bSYour Name 	uint8_t qos_control_valid =
583*5113495bSYour Name 		(_HAL_MS((*_OFFSET_TO_WORD_PTR((rx_mpdu_info),
584*5113495bSYour Name 			  RX_MPDU_INFO_2_MPDU_QOS_CONTROL_VALID_OFFSET)),
585*5113495bSYour Name 			 RX_MPDU_INFO_2_MPDU_QOS_CONTROL_VALID_MASK,
586*5113495bSYour Name 			 RX_MPDU_INFO_2_MPDU_QOS_CONTROL_VALID_LSB));
587*5113495bSYour Name 
588*5113495bSYour Name 	if (qos_control_valid)
589*5113495bSYour Name 		return hal_rx_mpdu_start_tid_get_6390(buf);
590*5113495bSYour Name 
591*5113495bSYour Name 	return HAL_RX_NON_QOS_TID;
592*5113495bSYour Name }
593*5113495bSYour Name 
594*5113495bSYour Name /**
595*5113495bSYour Name  * hal_rx_hw_desc_get_ppduid_get_6390() - retrieve ppdu id
596*5113495bSYour Name  * @rx_tlv_hdr: start address of rx_pkt_tlvs
597*5113495bSYour Name  * @rxdma_dst_ring_desc: Rx HW descriptor
598*5113495bSYour Name  *
599*5113495bSYour Name  * Return: ppdu id
600*5113495bSYour Name  */
hal_rx_hw_desc_get_ppduid_get_6390(void * rx_tlv_hdr,void * rxdma_dst_ring_desc)601*5113495bSYour Name static uint32_t hal_rx_hw_desc_get_ppduid_get_6390(void *rx_tlv_hdr,
602*5113495bSYour Name 						   void *rxdma_dst_ring_desc)
603*5113495bSYour Name {
604*5113495bSYour Name 	struct rx_mpdu_info *rx_mpdu_info;
605*5113495bSYour Name 	struct rx_pkt_tlvs *rx_desc = (struct rx_pkt_tlvs *)rx_tlv_hdr;
606*5113495bSYour Name 
607*5113495bSYour Name 	rx_mpdu_info =
608*5113495bSYour Name 		&rx_desc->mpdu_start_tlv.rx_mpdu_start.rx_mpdu_info_details;
609*5113495bSYour Name 
610*5113495bSYour Name 	return HAL_RX_GET(rx_mpdu_info, RX_MPDU_INFO_0, PHY_PPDU_ID);
611*5113495bSYour Name }
612*5113495bSYour Name 
613*5113495bSYour Name /**
614*5113495bSYour Name  * hal_reo_status_get_header_6390() - Process reo desc info
615*5113495bSYour Name  * @ring_desc: REO status ring descriptor
616*5113495bSYour Name  * @b: tlv type info
617*5113495bSYour Name  * @h1: Pointer to hal_reo_status_header where info to be stored
618*5113495bSYour Name  *
619*5113495bSYour Name  * Return: none.
620*5113495bSYour Name  */
hal_reo_status_get_header_6390(hal_ring_desc_t ring_desc,int b,void * h1)621*5113495bSYour Name static void hal_reo_status_get_header_6390(hal_ring_desc_t ring_desc, int b,
622*5113495bSYour Name 					   void *h1)
623*5113495bSYour Name {
624*5113495bSYour Name 	uint32_t *d = (uint32_t *)ring_desc;
625*5113495bSYour Name 	uint32_t val1 = 0;
626*5113495bSYour Name 	struct hal_reo_status_header *h =
627*5113495bSYour Name 			(struct hal_reo_status_header *)h1;
628*5113495bSYour Name 
629*5113495bSYour Name 	/* Offsets of descriptor fields defined in HW headers start
630*5113495bSYour Name 	 * from the field after TLV header
631*5113495bSYour Name 	 */
632*5113495bSYour Name 	d += HAL_GET_NUM_DWORDS(sizeof(struct tlv_32_hdr));
633*5113495bSYour Name 
634*5113495bSYour Name 	switch (b) {
635*5113495bSYour Name 	case HAL_REO_QUEUE_STATS_STATUS_TLV:
636*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_GET_QUEUE_STATS_STATUS_0,
637*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
638*5113495bSYour Name 		break;
639*5113495bSYour Name 	case HAL_REO_FLUSH_QUEUE_STATUS_TLV:
640*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_QUEUE_STATUS_0,
641*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
642*5113495bSYour Name 		break;
643*5113495bSYour Name 	case HAL_REO_FLUSH_CACHE_STATUS_TLV:
644*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_CACHE_STATUS_0,
645*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
646*5113495bSYour Name 		break;
647*5113495bSYour Name 	case HAL_REO_UNBLK_CACHE_STATUS_TLV:
648*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_UNBLOCK_CACHE_STATUS_0,
649*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
650*5113495bSYour Name 		break;
651*5113495bSYour Name 	case HAL_REO_TIMOUT_LIST_STATUS_TLV:
652*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_TIMEOUT_LIST_STATUS_0,
653*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
654*5113495bSYour Name 		break;
655*5113495bSYour Name 	case HAL_REO_DESC_THRES_STATUS_TLV:
656*5113495bSYour Name 		val1 =
657*5113495bSYour Name 		  d[HAL_OFFSET_DW(REO_DESCRIPTOR_THRESHOLD_REACHED_STATUS_0,
658*5113495bSYour Name 		  UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
659*5113495bSYour Name 		break;
660*5113495bSYour Name 	case HAL_REO_UPDATE_RX_QUEUE_STATUS_TLV:
661*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_UPDATE_RX_REO_QUEUE_STATUS_0,
662*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER)];
663*5113495bSYour Name 		break;
664*5113495bSYour Name 	default:
665*5113495bSYour Name 		qdf_nofl_err("ERROR: Unknown tlv\n");
666*5113495bSYour Name 		break;
667*5113495bSYour Name 	}
668*5113495bSYour Name 	h->cmd_num =
669*5113495bSYour Name 		HAL_GET_FIELD(
670*5113495bSYour Name 			      UNIFORM_REO_STATUS_HEADER_0, REO_STATUS_NUMBER,
671*5113495bSYour Name 			      val1);
672*5113495bSYour Name 	h->exec_time =
673*5113495bSYour Name 		HAL_GET_FIELD(UNIFORM_REO_STATUS_HEADER_0,
674*5113495bSYour Name 			      CMD_EXECUTION_TIME, val1);
675*5113495bSYour Name 	h->status =
676*5113495bSYour Name 		HAL_GET_FIELD(UNIFORM_REO_STATUS_HEADER_0,
677*5113495bSYour Name 			      REO_CMD_EXECUTION_STATUS, val1);
678*5113495bSYour Name 	switch (b) {
679*5113495bSYour Name 	case HAL_REO_QUEUE_STATS_STATUS_TLV:
680*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_GET_QUEUE_STATS_STATUS_1,
681*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
682*5113495bSYour Name 		break;
683*5113495bSYour Name 	case HAL_REO_FLUSH_QUEUE_STATUS_TLV:
684*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_QUEUE_STATUS_1,
685*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
686*5113495bSYour Name 		break;
687*5113495bSYour Name 	case HAL_REO_FLUSH_CACHE_STATUS_TLV:
688*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_CACHE_STATUS_1,
689*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
690*5113495bSYour Name 		break;
691*5113495bSYour Name 	case HAL_REO_UNBLK_CACHE_STATUS_TLV:
692*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_UNBLOCK_CACHE_STATUS_1,
693*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
694*5113495bSYour Name 		break;
695*5113495bSYour Name 	case HAL_REO_TIMOUT_LIST_STATUS_TLV:
696*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_FLUSH_TIMEOUT_LIST_STATUS_1,
697*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
698*5113495bSYour Name 		break;
699*5113495bSYour Name 	case HAL_REO_DESC_THRES_STATUS_TLV:
700*5113495bSYour Name 		val1 =
701*5113495bSYour Name 		  d[HAL_OFFSET_DW(REO_DESCRIPTOR_THRESHOLD_REACHED_STATUS_1,
702*5113495bSYour Name 		  UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
703*5113495bSYour Name 		break;
704*5113495bSYour Name 	case HAL_REO_UPDATE_RX_QUEUE_STATUS_TLV:
705*5113495bSYour Name 		val1 = d[HAL_OFFSET_DW(REO_UPDATE_RX_REO_QUEUE_STATUS_1,
706*5113495bSYour Name 			UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC)];
707*5113495bSYour Name 		break;
708*5113495bSYour Name 	default:
709*5113495bSYour Name 		qdf_nofl_err("ERROR: Unknown tlv\n");
710*5113495bSYour Name 		break;
711*5113495bSYour Name 	}
712*5113495bSYour Name 	h->tstamp =
713*5113495bSYour Name 		HAL_GET_FIELD(UNIFORM_REO_STATUS_HEADER_1, TIMESTAMP, val1);
714*5113495bSYour Name }
715*5113495bSYour Name 
716*5113495bSYour Name /**
717*5113495bSYour Name  * hal_rx_mpdu_start_mpdu_qos_control_valid_get_6390() - Retrieve qos control
718*5113495bSYour Name  *                                                       valid bit from the tlv.
719*5113495bSYour Name  * @buf: pointer to rx pkt TLV.
720*5113495bSYour Name  *
721*5113495bSYour Name  * Return: qos control value.
722*5113495bSYour Name  */
723*5113495bSYour Name static inline uint32_t
hal_rx_mpdu_start_mpdu_qos_control_valid_get_6390(uint8_t * buf)724*5113495bSYour Name hal_rx_mpdu_start_mpdu_qos_control_valid_get_6390(uint8_t *buf)
725*5113495bSYour Name {
726*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
727*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
728*5113495bSYour Name 			&pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
729*5113495bSYour Name 
730*5113495bSYour Name 	return HAL_RX_MPDU_INFO_QOS_CONTROL_VALID_GET(
731*5113495bSYour Name 		&mpdu_start->rx_mpdu_info_details);
732*5113495bSYour Name }
733*5113495bSYour Name 
734*5113495bSYour Name /**
735*5113495bSYour Name  * hal_rx_msdu_end_sa_sw_peer_id_get_6390() - API to get the sa_sw_peer_id
736*5113495bSYour Name  *                                            from rx_msdu_end TLV
737*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
738*5113495bSYour Name  *
739*5113495bSYour Name  * Return: sa_sw_peer_id index
740*5113495bSYour Name  */
741*5113495bSYour Name static inline uint32_t
hal_rx_msdu_end_sa_sw_peer_id_get_6390(uint8_t * buf)742*5113495bSYour Name hal_rx_msdu_end_sa_sw_peer_id_get_6390(uint8_t *buf)
743*5113495bSYour Name {
744*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
745*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
746*5113495bSYour Name 
747*5113495bSYour Name 	return HAL_RX_MSDU_END_SA_SW_PEER_ID_GET(msdu_end);
748*5113495bSYour Name }
749*5113495bSYour Name 
750*5113495bSYour Name /**
751*5113495bSYour Name  * hal_tx_desc_set_mesh_en_6390() - Set mesh_enable flag in Tx descriptor
752*5113495bSYour Name  * @desc: Handle to Tx Descriptor
753*5113495bSYour Name  * @en:   For raw WiFi frames, this indicates transmission to a mesh STA,
754*5113495bSYour Name  *        enabling the interpretation of the 'Mesh Control Present' bit
755*5113495bSYour Name  *        (bit 8) of QoS Control (otherwise this bit is ignored),
756*5113495bSYour Name  *        For native WiFi frames, this indicates that a 'Mesh Control' field
757*5113495bSYour Name  *        is present between the header and the LLC.
758*5113495bSYour Name  *
759*5113495bSYour Name  * Return: void
760*5113495bSYour Name  */
761*5113495bSYour Name static inline
hal_tx_desc_set_mesh_en_6390(void * desc,uint8_t en)762*5113495bSYour Name void hal_tx_desc_set_mesh_en_6390(void *desc, uint8_t en)
763*5113495bSYour Name {
764*5113495bSYour Name 	HAL_SET_FLD(desc, TCL_DATA_CMD_4, MESH_ENABLE) |=
765*5113495bSYour Name 		HAL_TX_SM(TCL_DATA_CMD_4, MESH_ENABLE, en);
766*5113495bSYour Name }
767*5113495bSYour Name 
768*5113495bSYour Name static
hal_rx_msdu0_buffer_addr_lsb_6390(void * link_desc_va)769*5113495bSYour Name void *hal_rx_msdu0_buffer_addr_lsb_6390(void *link_desc_va)
770*5113495bSYour Name {
771*5113495bSYour Name 	return (void *)HAL_RX_MSDU0_BUFFER_ADDR_LSB(link_desc_va);
772*5113495bSYour Name }
773*5113495bSYour Name 
774*5113495bSYour Name static
hal_rx_msdu_desc_info_ptr_get_6390(void * msdu0)775*5113495bSYour Name void *hal_rx_msdu_desc_info_ptr_get_6390(void *msdu0)
776*5113495bSYour Name {
777*5113495bSYour Name 	return (void *)HAL_RX_MSDU_DESC_INFO_PTR_GET(msdu0);
778*5113495bSYour Name }
779*5113495bSYour Name 
780*5113495bSYour Name static
hal_ent_mpdu_desc_info_6390(void * ent_ring_desc)781*5113495bSYour Name void *hal_ent_mpdu_desc_info_6390(void *ent_ring_desc)
782*5113495bSYour Name {
783*5113495bSYour Name 	return (void *)HAL_ENT_MPDU_DESC_INFO(ent_ring_desc);
784*5113495bSYour Name }
785*5113495bSYour Name 
786*5113495bSYour Name static
hal_dst_mpdu_desc_info_6390(void * dst_ring_desc)787*5113495bSYour Name void *hal_dst_mpdu_desc_info_6390(void *dst_ring_desc)
788*5113495bSYour Name {
789*5113495bSYour Name 	return (void *)HAL_DST_MPDU_DESC_INFO(dst_ring_desc);
790*5113495bSYour Name }
791*5113495bSYour Name 
792*5113495bSYour Name static
hal_rx_get_fc_valid_6390(uint8_t * buf)793*5113495bSYour Name uint8_t hal_rx_get_fc_valid_6390(uint8_t *buf)
794*5113495bSYour Name {
795*5113495bSYour Name 	return HAL_RX_GET_FC_VALID(buf);
796*5113495bSYour Name }
797*5113495bSYour Name 
hal_rx_get_to_ds_flag_6390(uint8_t * buf)798*5113495bSYour Name static uint8_t hal_rx_get_to_ds_flag_6390(uint8_t *buf)
799*5113495bSYour Name {
800*5113495bSYour Name 	return HAL_RX_GET_TO_DS_FLAG(buf);
801*5113495bSYour Name }
802*5113495bSYour Name 
hal_rx_get_mac_addr2_valid_6390(uint8_t * buf)803*5113495bSYour Name static uint8_t hal_rx_get_mac_addr2_valid_6390(uint8_t *buf)
804*5113495bSYour Name {
805*5113495bSYour Name 	return HAL_RX_GET_MAC_ADDR2_VALID(buf);
806*5113495bSYour Name }
807*5113495bSYour Name 
hal_rx_get_filter_category_6390(uint8_t * buf)808*5113495bSYour Name static uint8_t hal_rx_get_filter_category_6390(uint8_t *buf)
809*5113495bSYour Name {
810*5113495bSYour Name 	return HAL_RX_GET_FILTER_CATEGORY(buf);
811*5113495bSYour Name }
812*5113495bSYour Name 
813*5113495bSYour Name static uint32_t
hal_rx_get_ppdu_id_6390(uint8_t * buf)814*5113495bSYour Name hal_rx_get_ppdu_id_6390(uint8_t *buf)
815*5113495bSYour Name {
816*5113495bSYour Name 	return HAL_RX_GET_PPDU_ID(buf);
817*5113495bSYour Name }
818*5113495bSYour Name 
819*5113495bSYour Name /**
820*5113495bSYour Name  * hal_reo_config_6390() - Set reo config parameters
821*5113495bSYour Name  * @soc: hal soc handle
822*5113495bSYour Name  * @reg_val: value to be set
823*5113495bSYour Name  * @reo_params: reo parameters
824*5113495bSYour Name  *
825*5113495bSYour Name  * Return: void
826*5113495bSYour Name  */
827*5113495bSYour Name static
hal_reo_config_6390(struct hal_soc * soc,uint32_t reg_val,struct hal_reo_params * reo_params)828*5113495bSYour Name void hal_reo_config_6390(struct hal_soc *soc,
829*5113495bSYour Name 			 uint32_t reg_val,
830*5113495bSYour Name 			 struct hal_reo_params *reo_params)
831*5113495bSYour Name {
832*5113495bSYour Name 	HAL_REO_R0_CONFIG(soc, reg_val, reo_params);
833*5113495bSYour Name }
834*5113495bSYour Name 
835*5113495bSYour Name /**
836*5113495bSYour Name  * hal_rx_msdu_desc_info_get_ptr_6390() - Get msdu desc info ptr
837*5113495bSYour Name  * @msdu_details_ptr: Pointer to msdu_details_ptr
838*5113495bSYour Name  *
839*5113495bSYour Name  * Return: Pointer to rx_msdu_desc_info structure.
840*5113495bSYour Name  *
841*5113495bSYour Name  */
hal_rx_msdu_desc_info_get_ptr_6390(void * msdu_details_ptr)842*5113495bSYour Name static void *hal_rx_msdu_desc_info_get_ptr_6390(void *msdu_details_ptr)
843*5113495bSYour Name {
844*5113495bSYour Name 	return HAL_RX_MSDU_DESC_INFO_GET(msdu_details_ptr);
845*5113495bSYour Name }
846*5113495bSYour Name 
847*5113495bSYour Name /**
848*5113495bSYour Name  * hal_rx_link_desc_msdu0_ptr_6390() - Get pointer to rx_msdu details
849*5113495bSYour Name  * @link_desc: Pointer to link desc
850*5113495bSYour Name  *
851*5113495bSYour Name  * Return: Pointer to rx_msdu_details structure
852*5113495bSYour Name  *
853*5113495bSYour Name  */
hal_rx_link_desc_msdu0_ptr_6390(void * link_desc)854*5113495bSYour Name static void *hal_rx_link_desc_msdu0_ptr_6390(void *link_desc)
855*5113495bSYour Name {
856*5113495bSYour Name 	return HAL_RX_LINK_DESC_MSDU0_PTR(link_desc);
857*5113495bSYour Name }
858*5113495bSYour Name 
859*5113495bSYour Name /**
860*5113495bSYour Name  * hal_rx_msdu_flow_idx_get_6390() - API to get flow index from rx_msdu_end TLV
861*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
862*5113495bSYour Name  *
863*5113495bSYour Name  * Return: flow index value from MSDU END TLV
864*5113495bSYour Name  */
hal_rx_msdu_flow_idx_get_6390(uint8_t * buf)865*5113495bSYour Name static inline uint32_t hal_rx_msdu_flow_idx_get_6390(uint8_t *buf)
866*5113495bSYour Name {
867*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
868*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
869*5113495bSYour Name 
870*5113495bSYour Name 	return HAL_RX_MSDU_END_FLOW_IDX_GET(msdu_end);
871*5113495bSYour Name }
872*5113495bSYour Name 
873*5113495bSYour Name /**
874*5113495bSYour Name  * hal_rx_msdu_flow_idx_invalid_6390() - API to get flow index invalid
875*5113495bSYour Name  *                                       from rx_msdu_end TLV
876*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
877*5113495bSYour Name  *
878*5113495bSYour Name  * Return: flow index invalid value from MSDU END TLV
879*5113495bSYour Name  */
hal_rx_msdu_flow_idx_invalid_6390(uint8_t * buf)880*5113495bSYour Name static bool hal_rx_msdu_flow_idx_invalid_6390(uint8_t *buf)
881*5113495bSYour Name {
882*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
883*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
884*5113495bSYour Name 
885*5113495bSYour Name 	return HAL_RX_MSDU_END_FLOW_IDX_INVALID_GET(msdu_end);
886*5113495bSYour Name }
887*5113495bSYour Name 
888*5113495bSYour Name /**
889*5113495bSYour Name  * hal_rx_msdu_flow_idx_timeout_6390() - API to get flow index timeout
890*5113495bSYour Name  *                                       from rx_msdu_end TLV
891*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
892*5113495bSYour Name  *
893*5113495bSYour Name  * Return: flow index timeout value from MSDU END TLV
894*5113495bSYour Name  */
hal_rx_msdu_flow_idx_timeout_6390(uint8_t * buf)895*5113495bSYour Name static bool hal_rx_msdu_flow_idx_timeout_6390(uint8_t *buf)
896*5113495bSYour Name {
897*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
898*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
899*5113495bSYour Name 
900*5113495bSYour Name 	return HAL_RX_MSDU_END_FLOW_IDX_TIMEOUT_GET(msdu_end);
901*5113495bSYour Name }
902*5113495bSYour Name 
903*5113495bSYour Name /**
904*5113495bSYour Name  * hal_rx_msdu_fse_metadata_get_6390() - API to get FSE metadata
905*5113495bSYour Name  *                                       from rx_msdu_end TLV
906*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
907*5113495bSYour Name  *
908*5113495bSYour Name  * Return: fse metadata value from MSDU END TLV
909*5113495bSYour Name  */
hal_rx_msdu_fse_metadata_get_6390(uint8_t * buf)910*5113495bSYour Name static uint32_t hal_rx_msdu_fse_metadata_get_6390(uint8_t *buf)
911*5113495bSYour Name {
912*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
913*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
914*5113495bSYour Name 
915*5113495bSYour Name 	return HAL_RX_MSDU_END_FSE_METADATA_GET(msdu_end);
916*5113495bSYour Name }
917*5113495bSYour Name 
918*5113495bSYour Name /**
919*5113495bSYour Name  * hal_rx_msdu_cce_metadata_get_6390() - API to get CCE metadata
920*5113495bSYour Name  *                                       from rx_msdu_end TLV
921*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
922*5113495bSYour Name  *
923*5113495bSYour Name  * Return: cce metadata
924*5113495bSYour Name  */
925*5113495bSYour Name static uint16_t
hal_rx_msdu_cce_metadata_get_6390(uint8_t * buf)926*5113495bSYour Name hal_rx_msdu_cce_metadata_get_6390(uint8_t *buf)
927*5113495bSYour Name {
928*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
929*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
930*5113495bSYour Name 
931*5113495bSYour Name 	return HAL_RX_MSDU_END_CCE_METADATA_GET(msdu_end);
932*5113495bSYour Name }
933*5113495bSYour Name 
934*5113495bSYour Name /**
935*5113495bSYour Name  * hal_rx_msdu_get_flow_params_6390() - API to get flow index, flow index
936*5113495bSYour Name  *                                      invalid and flow index timeout from
937*5113495bSYour Name  *                                      rx_msdu_end TLV
938*5113495bSYour Name  * @buf: pointer to the start of RX PKT TLV headers
939*5113495bSYour Name  * @flow_invalid: pointer to return value of flow_idx_valid
940*5113495bSYour Name  * @flow_timeout: pointer to return value of flow_idx_timeout
941*5113495bSYour Name  * @flow_index: pointer to return value of flow_idx
942*5113495bSYour Name  *
943*5113495bSYour Name  * Return: none
944*5113495bSYour Name  */
945*5113495bSYour Name static inline void
hal_rx_msdu_get_flow_params_6390(uint8_t * buf,bool * flow_invalid,bool * flow_timeout,uint32_t * flow_index)946*5113495bSYour Name hal_rx_msdu_get_flow_params_6390(uint8_t *buf,
947*5113495bSYour Name 				 bool *flow_invalid,
948*5113495bSYour Name 				 bool *flow_timeout,
949*5113495bSYour Name 				 uint32_t *flow_index)
950*5113495bSYour Name {
951*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
952*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
953*5113495bSYour Name 
954*5113495bSYour Name 	*flow_invalid = HAL_RX_MSDU_END_FLOW_IDX_INVALID_GET(msdu_end);
955*5113495bSYour Name 	*flow_timeout = HAL_RX_MSDU_END_FLOW_IDX_TIMEOUT_GET(msdu_end);
956*5113495bSYour Name 	*flow_index = HAL_RX_MSDU_END_FLOW_IDX_GET(msdu_end);
957*5113495bSYour Name }
958*5113495bSYour Name 
959*5113495bSYour Name /**
960*5113495bSYour Name  * hal_rx_tlv_get_tcp_chksum_6390() - API to get tcp checksum
961*5113495bSYour Name  * @buf: rx_tlv_hdr
962*5113495bSYour Name  *
963*5113495bSYour Name  * Return: tcp checksum
964*5113495bSYour Name  */
965*5113495bSYour Name static uint16_t
hal_rx_tlv_get_tcp_chksum_6390(uint8_t * buf)966*5113495bSYour Name hal_rx_tlv_get_tcp_chksum_6390(uint8_t *buf)
967*5113495bSYour Name {
968*5113495bSYour Name 	return HAL_RX_TLV_GET_TCP_CHKSUM(buf);
969*5113495bSYour Name }
970*5113495bSYour Name 
971*5113495bSYour Name /**
972*5113495bSYour Name  * hal_rx_get_rx_sequence_6390() - Function to retrieve rx sequence number
973*5113495bSYour Name  * @buf: Network buffer
974*5113495bSYour Name  *
975*5113495bSYour Name  * Return: rx sequence number
976*5113495bSYour Name  */
977*5113495bSYour Name static
hal_rx_get_rx_sequence_6390(uint8_t * buf)978*5113495bSYour Name uint16_t hal_rx_get_rx_sequence_6390(uint8_t *buf)
979*5113495bSYour Name {
980*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = hal_rx_get_pkt_tlvs(buf);
981*5113495bSYour Name 	struct rx_mpdu_info *rx_mpdu_info = hal_rx_get_mpdu_info(pkt_tlvs);
982*5113495bSYour Name 
983*5113495bSYour Name 	return HAL_RX_MPDU_GET_SEQUENCE_NUMBER(rx_mpdu_info);
984*5113495bSYour Name }
985*5113495bSYour Name 
986*5113495bSYour Name /**
987*5113495bSYour Name  * hal_rx_mpdu_start_tlv_tag_valid_6390() - API to check if RX_MPDU_START
988*5113495bSYour Name  *                                          tlv tag is valid
989*5113495bSYour Name  * @rx_tlv_hdr: start address of rx_pkt_tlvs
990*5113495bSYour Name  *
991*5113495bSYour Name  * Return: true if RX_MPDU_START is valid, else false.
992*5113495bSYour Name  */
hal_rx_mpdu_start_tlv_tag_valid_6390(void * rx_tlv_hdr)993*5113495bSYour Name static uint8_t hal_rx_mpdu_start_tlv_tag_valid_6390(void *rx_tlv_hdr)
994*5113495bSYour Name {
995*5113495bSYour Name 	struct rx_pkt_tlvs *rx_desc = (struct rx_pkt_tlvs *)rx_tlv_hdr;
996*5113495bSYour Name 	uint32_t tlv_tag;
997*5113495bSYour Name 
998*5113495bSYour Name 	tlv_tag = HAL_RX_GET_USER_TLV32_TYPE(&rx_desc->mpdu_start_tlv);
999*5113495bSYour Name 
1000*5113495bSYour Name 	return tlv_tag == WIFIRX_MPDU_START_E ? true : false;
1001*5113495bSYour Name }
1002*5113495bSYour Name 
1003*5113495bSYour Name /**
1004*5113495bSYour Name  * hal_get_window_address_6390() - Function to get hp/tp address
1005*5113495bSYour Name  * @hal_soc: Pointer to hal_soc
1006*5113495bSYour Name  * @addr: address offset of register
1007*5113495bSYour Name  *
1008*5113495bSYour Name  * Return: modified address offset of register
1009*5113495bSYour Name  */
hal_get_window_address_6390(struct hal_soc * hal_soc,qdf_iomem_t addr)1010*5113495bSYour Name static inline qdf_iomem_t hal_get_window_address_6390(struct hal_soc *hal_soc,
1011*5113495bSYour Name 						      qdf_iomem_t addr)
1012*5113495bSYour Name {
1013*5113495bSYour Name 	return addr;
1014*5113495bSYour Name }
1015*5113495bSYour Name 
1016*5113495bSYour Name /**
1017*5113495bSYour Name  * hal_reo_set_err_dst_remap_6390() - Function to set REO error destination
1018*5113495bSYour Name  *				     ring remap register
1019*5113495bSYour Name  * @hal_soc: Pointer to hal_soc
1020*5113495bSYour Name  *
1021*5113495bSYour Name  * Return: none.
1022*5113495bSYour Name  */
1023*5113495bSYour Name static void
hal_reo_set_err_dst_remap_6390(void * hal_soc)1024*5113495bSYour Name hal_reo_set_err_dst_remap_6390(void *hal_soc)
1025*5113495bSYour Name {
1026*5113495bSYour Name 	/*
1027*5113495bSYour Name 	 * Set REO error 2k jump (error code 5) / OOR (error code 7)
1028*5113495bSYour Name 	 * frame routed to REO2TCL ring.
1029*5113495bSYour Name 	 */
1030*5113495bSYour Name 	uint32_t dst_remap_ix0 =
1031*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_RELEASE, 0) |
1032*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_RELEASE, 1) |
1033*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_RELEASE, 2) |
1034*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_RELEASE, 3) |
1035*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_RELEASE, 4) |
1036*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_TCL, 5) |
1037*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_TCL, 6) |
1038*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_TCL, 7) |
1039*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_TCL, 8) |
1040*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_RELEASE, 9);
1041*5113495bSYour Name 
1042*5113495bSYour Name 		HAL_REG_WRITE(hal_soc,
1043*5113495bSYour Name 			      HWIO_REO_R0_ERROR_DESTINATION_MAPPING_IX_0_ADDR(
1044*5113495bSYour Name 			      SEQ_WCSS_UMAC_REO_REG_OFFSET),
1045*5113495bSYour Name 			      dst_remap_ix0);
1046*5113495bSYour Name 
1047*5113495bSYour Name 		hal_info("HWIO_REO_R0_ERROR_DESTINATION_MAPPING_IX_0 0x%x",
1048*5113495bSYour Name 			 HAL_REG_READ(
1049*5113495bSYour Name 			 hal_soc,
1050*5113495bSYour Name 			 HWIO_REO_R0_ERROR_DESTINATION_MAPPING_IX_0_ADDR(
1051*5113495bSYour Name 			 SEQ_WCSS_UMAC_REO_REG_OFFSET)));
1052*5113495bSYour Name }
1053*5113495bSYour Name 
1054*5113495bSYour Name static
hal_compute_reo_remap_ix2_ix3_6390(uint32_t * ring,uint32_t num_rings,uint32_t * remap1,uint32_t * remap2)1055*5113495bSYour Name void hal_compute_reo_remap_ix2_ix3_6390(uint32_t *ring, uint32_t num_rings,
1056*5113495bSYour Name 					uint32_t *remap1, uint32_t *remap2)
1057*5113495bSYour Name {
1058*5113495bSYour Name 	switch (num_rings) {
1059*5113495bSYour Name 	case 3:
1060*5113495bSYour Name 		*remap1 = HAL_REO_REMAP_IX2(ring[0], 16) |
1061*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 17) |
1062*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[2], 18) |
1063*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 19) |
1064*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 20) |
1065*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[2], 21) |
1066*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 22) |
1067*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 23);
1068*5113495bSYour Name 
1069*5113495bSYour Name 		*remap2 = HAL_REO_REMAP_IX3(ring[2], 24) |
1070*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 25) |
1071*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[1], 26) |
1072*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[2], 27) |
1073*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 28) |
1074*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[1], 29) |
1075*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[2], 30) |
1076*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 31);
1077*5113495bSYour Name 		break;
1078*5113495bSYour Name 	case 4:
1079*5113495bSYour Name 		*remap1 = HAL_REO_REMAP_IX2(ring[0], 16) |
1080*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 17) |
1081*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[2], 18) |
1082*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[3], 19) |
1083*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[0], 20) |
1084*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[1], 21) |
1085*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[2], 22) |
1086*5113495bSYour Name 				HAL_REO_REMAP_IX2(ring[3], 23);
1087*5113495bSYour Name 
1088*5113495bSYour Name 		*remap2 = HAL_REO_REMAP_IX3(ring[0], 24) |
1089*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[1], 25) |
1090*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[2], 26) |
1091*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[3], 27) |
1092*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[0], 28) |
1093*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[1], 29) |
1094*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[2], 30) |
1095*5113495bSYour Name 				HAL_REO_REMAP_IX3(ring[3], 31);
1096*5113495bSYour Name 		break;
1097*5113495bSYour Name 	}
1098*5113495bSYour Name }
1099*5113495bSYour Name 
1100*5113495bSYour Name static
hal_compute_reo_remap_ix0_6390(uint32_t * remap0)1101*5113495bSYour Name void hal_compute_reo_remap_ix0_6390(uint32_t *remap0)
1102*5113495bSYour Name {
1103*5113495bSYour Name 	*remap0 = HAL_REO_REMAP_IX0(REO_REMAP_SW1, 0) |
1104*5113495bSYour Name 			HAL_REO_REMAP_IX0(REO_REMAP_SW1, 1) |
1105*5113495bSYour Name 			HAL_REO_REMAP_IX0(REO_REMAP_SW2, 2) |
1106*5113495bSYour Name 			HAL_REO_REMAP_IX0(REO_REMAP_SW3, 3) |
1107*5113495bSYour Name 			HAL_REO_REMAP_IX0(REO_REMAP_SW2, 4) |
1108*5113495bSYour Name 			HAL_REO_REMAP_IX0(REO_REMAP_RELEASE, 5) |
1109*5113495bSYour Name 			HAL_REO_REMAP_IX0(REO_REMAP_FW, 6) |
1110*5113495bSYour Name 			HAL_REO_REMAP_IX0(REO_REMAP_FW, 7);
1111*5113495bSYour Name }
1112*5113495bSYour Name 
1113*5113495bSYour Name #ifdef WLAN_FEATURE_MARK_FIRST_WAKEUP_PACKET
1114*5113495bSYour Name /**
1115*5113495bSYour Name  * hal_get_first_wow_wakeup_packet_6390() - Function to get if the buffer is
1116*5113495bSYour Name  *                                          the first one that wakes up host
1117*5113495bSYour Name  *                                          from WoW.
1118*5113495bSYour Name  * @buf: network buffer
1119*5113495bSYour Name  *
1120*5113495bSYour Name  * Dummy function for QCA6390
1121*5113495bSYour Name  *
1122*5113495bSYour Name  * Return: 1 to indicate it is first packet received that wakes up host from
1123*5113495bSYour Name  *	    WoW. Otherwise 0
1124*5113495bSYour Name  */
hal_get_first_wow_wakeup_packet_6390(uint8_t * buf)1125*5113495bSYour Name static inline uint8_t hal_get_first_wow_wakeup_packet_6390(uint8_t *buf)
1126*5113495bSYour Name {
1127*5113495bSYour Name 	return 0;
1128*5113495bSYour Name }
1129*5113495bSYour Name #endif
1130*5113495bSYour Name 
hal_hw_txrx_ops_attach_qca6390(struct hal_soc * hal_soc)1131*5113495bSYour Name static void hal_hw_txrx_ops_attach_qca6390(struct hal_soc *hal_soc)
1132*5113495bSYour Name {
1133*5113495bSYour Name 	/* init and setup */
1134*5113495bSYour Name 	hal_soc->ops->hal_srng_dst_hw_init = hal_srng_dst_hw_init_generic;
1135*5113495bSYour Name 	hal_soc->ops->hal_srng_src_hw_init = hal_srng_src_hw_init_generic;
1136*5113495bSYour Name 	hal_soc->ops->hal_get_hw_hptp = hal_get_hw_hptp_generic;
1137*5113495bSYour Name 	hal_soc->ops->hal_reo_setup = hal_reo_setup_generic_li;
1138*5113495bSYour Name 	hal_soc->ops->hal_get_window_address = hal_get_window_address_6390;
1139*5113495bSYour Name 	hal_soc->ops->hal_reo_set_err_dst_remap =
1140*5113495bSYour Name 					hal_reo_set_err_dst_remap_6390;
1141*5113495bSYour Name 
1142*5113495bSYour Name 	/* tx */
1143*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_dscp_tid_table_id =
1144*5113495bSYour Name 		hal_tx_desc_set_dscp_tid_table_id_6390;
1145*5113495bSYour Name 	hal_soc->ops->hal_tx_set_dscp_tid_map = hal_tx_set_dscp_tid_map_6390;
1146*5113495bSYour Name 	hal_soc->ops->hal_tx_update_dscp_tid = hal_tx_update_dscp_tid_6390;
1147*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_lmac_id = hal_tx_desc_set_lmac_id_6390;
1148*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_buf_addr =
1149*5113495bSYour Name 					hal_tx_desc_set_buf_addr_generic_li;
1150*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_search_type =
1151*5113495bSYour Name 					hal_tx_desc_set_search_type_generic_li;
1152*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_search_index =
1153*5113495bSYour Name 					hal_tx_desc_set_search_index_generic_li;
1154*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_cache_set_num =
1155*5113495bSYour Name 				hal_tx_desc_set_cache_set_num_generic_li;
1156*5113495bSYour Name 	hal_soc->ops->hal_tx_comp_get_status =
1157*5113495bSYour Name 					hal_tx_comp_get_status_generic_li;
1158*5113495bSYour Name 	hal_soc->ops->hal_tx_comp_get_release_reason =
1159*5113495bSYour Name 		hal_tx_comp_get_release_reason_generic_li;
1160*5113495bSYour Name 	hal_soc->ops->hal_get_wbm_internal_error =
1161*5113495bSYour Name 					hal_get_wbm_internal_error_generic_li;
1162*5113495bSYour Name 	hal_soc->ops->hal_tx_desc_set_mesh_en = hal_tx_desc_set_mesh_en_6390;
1163*5113495bSYour Name 	hal_soc->ops->hal_tx_init_cmd_credit_ring =
1164*5113495bSYour Name 					hal_tx_init_cmd_credit_ring_6390;
1165*5113495bSYour Name 
1166*5113495bSYour Name 	/* rx */
1167*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_start_nss_get =
1168*5113495bSYour Name 					hal_rx_msdu_start_nss_get_6390;
1169*5113495bSYour Name 	hal_soc->ops->hal_rx_mon_hw_desc_get_mpdu_status =
1170*5113495bSYour Name 		hal_rx_mon_hw_desc_get_mpdu_status_6390;
1171*5113495bSYour Name 	hal_soc->ops->hal_rx_get_tlv = hal_rx_get_tlv_6390;
1172*5113495bSYour Name 	hal_soc->ops->hal_rx_proc_phyrx_other_receive_info_tlv =
1173*5113495bSYour Name 		hal_rx_proc_phyrx_other_receive_info_tlv_6390;
1174*5113495bSYour Name 
1175*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_msdu_end_tlv = hal_rx_dump_msdu_end_tlv_6390;
1176*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_rx_attention_tlv =
1177*5113495bSYour Name 					hal_rx_dump_rx_attention_tlv_generic_li;
1178*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_msdu_start_tlv =
1179*5113495bSYour Name 					hal_rx_dump_msdu_start_tlv_6390;
1180*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_mpdu_start_tlv =
1181*5113495bSYour Name 					hal_rx_dump_mpdu_start_tlv_generic_li;
1182*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_mpdu_end_tlv =
1183*5113495bSYour Name 					hal_rx_dump_mpdu_end_tlv_generic_li;
1184*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_pkt_hdr_tlv =
1185*5113495bSYour Name 					hal_rx_dump_pkt_hdr_tlv_generic_li;
1186*5113495bSYour Name 
1187*5113495bSYour Name 	hal_soc->ops->hal_get_link_desc_size = hal_get_link_desc_size_6390;
1188*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_tid_get =
1189*5113495bSYour Name 					hal_rx_mpdu_start_tid_get_6390;
1190*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_start_reception_type_get =
1191*5113495bSYour Name 		hal_rx_msdu_start_reception_type_get_6390;
1192*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_da_idx_get =
1193*5113495bSYour Name 					hal_rx_msdu_end_da_idx_get_6390;
1194*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_desc_info_get_ptr =
1195*5113495bSYour Name 					hal_rx_msdu_desc_info_get_ptr_6390;
1196*5113495bSYour Name 	hal_soc->ops->hal_rx_link_desc_msdu0_ptr =
1197*5113495bSYour Name 					hal_rx_link_desc_msdu0_ptr_6390;
1198*5113495bSYour Name 	hal_soc->ops->hal_reo_status_get_header =
1199*5113495bSYour Name 					hal_reo_status_get_header_6390;
1200*5113495bSYour Name 	hal_soc->ops->hal_rx_status_get_tlv_info =
1201*5113495bSYour Name 					hal_rx_status_get_tlv_info_generic_li;
1202*5113495bSYour Name 	hal_soc->ops->hal_rx_wbm_err_info_get =
1203*5113495bSYour Name 					hal_rx_wbm_err_info_get_generic_li;
1204*5113495bSYour Name 
1205*5113495bSYour Name 	hal_soc->ops->hal_tx_set_pcp_tid_map =
1206*5113495bSYour Name 					hal_tx_set_pcp_tid_map_generic_li;
1207*5113495bSYour Name 	hal_soc->ops->hal_tx_update_pcp_tid_map =
1208*5113495bSYour Name 					hal_tx_update_pcp_tid_generic_li;
1209*5113495bSYour Name 	hal_soc->ops->hal_tx_set_tidmap_prty =
1210*5113495bSYour Name 					hal_tx_update_tidmap_prty_generic_li;
1211*5113495bSYour Name 	hal_soc->ops->hal_rx_get_rx_fragment_number =
1212*5113495bSYour Name 					hal_rx_get_rx_fragment_number_6390;
1213*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_da_is_mcbc_get =
1214*5113495bSYour Name 					hal_rx_msdu_end_da_is_mcbc_get_6390;
1215*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_sa_is_valid_get =
1216*5113495bSYour Name 					hal_rx_msdu_end_sa_is_valid_get_6390;
1217*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_sa_idx_get =
1218*5113495bSYour Name 					hal_rx_msdu_end_sa_idx_get_6390;
1219*5113495bSYour Name 	hal_soc->ops->hal_rx_desc_is_first_msdu =
1220*5113495bSYour Name 					hal_rx_desc_is_first_msdu_6390;
1221*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_l3_hdr_padding_get =
1222*5113495bSYour Name 		hal_rx_msdu_end_l3_hdr_padding_get_6390;
1223*5113495bSYour Name 	hal_soc->ops->hal_rx_encryption_info_valid =
1224*5113495bSYour Name 					hal_rx_encryption_info_valid_6390;
1225*5113495bSYour Name 	hal_soc->ops->hal_rx_print_pn = hal_rx_print_pn_6390;
1226*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_first_msdu_get =
1227*5113495bSYour Name 					hal_rx_msdu_end_first_msdu_get_6390;
1228*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_da_is_valid_get =
1229*5113495bSYour Name 					hal_rx_msdu_end_da_is_valid_get_6390;
1230*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_last_msdu_get =
1231*5113495bSYour Name 					hal_rx_msdu_end_last_msdu_get_6390;
1232*5113495bSYour Name 	hal_soc->ops->hal_rx_get_mpdu_mac_ad4_valid =
1233*5113495bSYour Name 					hal_rx_get_mpdu_mac_ad4_valid_6390;
1234*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_sw_peer_id_get =
1235*5113495bSYour Name 		hal_rx_mpdu_start_sw_peer_id_get_6390;
1236*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_peer_meta_data_get =
1237*5113495bSYour Name 		hal_rx_mpdu_peer_meta_data_get_li;
1238*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_to_ds = hal_rx_mpdu_get_to_ds_6390;
1239*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_fr_ds = hal_rx_mpdu_get_fr_ds_6390;
1240*5113495bSYour Name 	hal_soc->ops->hal_rx_get_mpdu_frame_control_valid =
1241*5113495bSYour Name 		hal_rx_get_mpdu_frame_control_valid_6390;
1242*5113495bSYour Name 	hal_soc->ops->hal_rx_get_frame_ctrl_field =
1243*5113495bSYour Name 		hal_rx_get_frame_ctrl_field_li;
1244*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_addr1 = hal_rx_mpdu_get_addr1_6390;
1245*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_addr2 = hal_rx_mpdu_get_addr2_6390;
1246*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_addr3 = hal_rx_mpdu_get_addr3_6390;
1247*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_addr4 = hal_rx_mpdu_get_addr4_6390;
1248*5113495bSYour Name 	hal_soc->ops->hal_rx_get_mpdu_sequence_control_valid =
1249*5113495bSYour Name 		hal_rx_get_mpdu_sequence_control_valid_6390;
1250*5113495bSYour Name 	hal_soc->ops->hal_rx_is_unicast = hal_rx_is_unicast_6390;
1251*5113495bSYour Name 	hal_soc->ops->hal_rx_tid_get = hal_rx_tid_get_6390;
1252*5113495bSYour Name 	hal_soc->ops->hal_rx_hw_desc_get_ppduid_get =
1253*5113495bSYour Name 					hal_rx_hw_desc_get_ppduid_get_6390;
1254*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_mpdu_qos_control_valid_get =
1255*5113495bSYour Name 		hal_rx_mpdu_start_mpdu_qos_control_valid_get_6390;
1256*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_sa_sw_peer_id_get =
1257*5113495bSYour Name 		hal_rx_msdu_end_sa_sw_peer_id_get_6390;
1258*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu0_buffer_addr_lsb =
1259*5113495bSYour Name 					hal_rx_msdu0_buffer_addr_lsb_6390;
1260*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_desc_info_ptr_get =
1261*5113495bSYour Name 					hal_rx_msdu_desc_info_ptr_get_6390;
1262*5113495bSYour Name 	hal_soc->ops->hal_ent_mpdu_desc_info = hal_ent_mpdu_desc_info_6390;
1263*5113495bSYour Name 	hal_soc->ops->hal_dst_mpdu_desc_info = hal_dst_mpdu_desc_info_6390;
1264*5113495bSYour Name 	hal_soc->ops->hal_rx_get_fc_valid = hal_rx_get_fc_valid_6390;
1265*5113495bSYour Name 	hal_soc->ops->hal_rx_get_to_ds_flag = hal_rx_get_to_ds_flag_6390;
1266*5113495bSYour Name 	hal_soc->ops->hal_rx_get_mac_addr2_valid =
1267*5113495bSYour Name 					hal_rx_get_mac_addr2_valid_6390;
1268*5113495bSYour Name 	hal_soc->ops->hal_rx_get_filter_category =
1269*5113495bSYour Name 					hal_rx_get_filter_category_6390;
1270*5113495bSYour Name 	hal_soc->ops->hal_rx_get_ppdu_id = hal_rx_get_ppdu_id_6390;
1271*5113495bSYour Name 	hal_soc->ops->hal_reo_config = hal_reo_config_6390;
1272*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_flow_idx_get = hal_rx_msdu_flow_idx_get_6390;
1273*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_flow_idx_invalid =
1274*5113495bSYour Name 					hal_rx_msdu_flow_idx_invalid_6390;
1275*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_flow_idx_timeout =
1276*5113495bSYour Name 					hal_rx_msdu_flow_idx_timeout_6390;
1277*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_fse_metadata_get =
1278*5113495bSYour Name 					hal_rx_msdu_fse_metadata_get_6390;
1279*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_cce_match_get =
1280*5113495bSYour Name 					hal_rx_msdu_cce_match_get_li;
1281*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_cce_metadata_get =
1282*5113495bSYour Name 					hal_rx_msdu_cce_metadata_get_6390;
1283*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_get_flow_params =
1284*5113495bSYour Name 					hal_rx_msdu_get_flow_params_6390;
1285*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_get_tcp_chksum =
1286*5113495bSYour Name 					hal_rx_tlv_get_tcp_chksum_6390;
1287*5113495bSYour Name 	hal_soc->ops->hal_rx_get_rx_sequence = hal_rx_get_rx_sequence_6390;
1288*5113495bSYour Name 	/* rx - msdu end fast path info fields */
1289*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_packet_metadata_get =
1290*5113495bSYour Name 				hal_rx_msdu_packet_metadata_get_generic_li;
1291*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_tlv_tag_valid =
1292*5113495bSYour Name 					hal_rx_mpdu_start_tlv_tag_valid_6390;
1293*5113495bSYour Name 
1294*5113495bSYour Name 	/* rx - TLV struct offsets */
1295*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_offset_get =
1296*5113495bSYour Name 					hal_rx_msdu_end_offset_get_generic;
1297*5113495bSYour Name 	hal_soc->ops->hal_rx_attn_offset_get = hal_rx_attn_offset_get_generic;
1298*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_start_offset_get =
1299*5113495bSYour Name 					hal_rx_msdu_start_offset_get_generic;
1300*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_offset_get =
1301*5113495bSYour Name 					hal_rx_mpdu_start_offset_get_generic;
1302*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_end_offset_get =
1303*5113495bSYour Name 					hal_rx_mpdu_end_offset_get_generic;
1304*5113495bSYour Name #ifndef NO_RX_PKT_HDR_TLV
1305*5113495bSYour Name 	hal_soc->ops->hal_rx_pkt_tlv_offset_get =
1306*5113495bSYour Name 					hal_rx_pkt_tlv_offset_get_generic;
1307*5113495bSYour Name #endif
1308*5113495bSYour Name 	hal_soc->ops->hal_compute_reo_remap_ix2_ix3 =
1309*5113495bSYour Name 					hal_compute_reo_remap_ix2_ix3_6390;
1310*5113495bSYour Name 	hal_soc->ops->hal_setup_link_idle_list =
1311*5113495bSYour Name 				hal_setup_link_idle_list_generic_li;
1312*5113495bSYour Name #ifdef WLAN_FEATURE_MARK_FIRST_WAKEUP_PACKET
1313*5113495bSYour Name 	hal_soc->ops->hal_get_first_wow_wakeup_packet =
1314*5113495bSYour Name 		hal_get_first_wow_wakeup_packet_6390;
1315*5113495bSYour Name #endif
1316*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_get_pn_num = hal_rx_tlv_get_pn_num_li;
1317*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_mic_err_get = hal_rx_tlv_mic_err_get_li;
1318*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_decrypt_err_get =
1319*5113495bSYour Name 			hal_rx_tlv_decrypt_err_get_li;
1320*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_get_pkt_capture_flags =
1321*5113495bSYour Name 					hal_rx_tlv_get_pkt_capture_flags_li;
1322*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_info_ampdu_flag_get =
1323*5113495bSYour Name 					hal_rx_mpdu_info_ampdu_flag_get_li;
1324*5113495bSYour Name 	hal_soc->ops->hal_compute_reo_remap_ix0 =
1325*5113495bSYour Name 				hal_compute_reo_remap_ix0_6390;
1326*5113495bSYour Name };
1327*5113495bSYour Name 
1328*5113495bSYour Name struct hal_hw_srng_config hw_srng_table_6390[] = {
1329*5113495bSYour Name 	/* TODO: max_rings can populated by querying HW capabilities */
1330*5113495bSYour Name 	{ /* REO_DST */
1331*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO2SW1,
1332*5113495bSYour Name 		.max_rings = 4,
1333*5113495bSYour Name 		.entry_size = sizeof(struct reo_destination_ring) >> 2,
1334*5113495bSYour Name 		.lmac_ring = FALSE,
1335*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
1336*5113495bSYour Name 		.reg_start = {
1337*5113495bSYour Name 			HWIO_REO_R0_REO2SW1_RING_BASE_LSB_ADDR(
1338*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
1339*5113495bSYour Name 			HWIO_REO_R2_REO2SW1_RING_HP_ADDR(
1340*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET)
1341*5113495bSYour Name 		},
1342*5113495bSYour Name 		.reg_size = {
1343*5113495bSYour Name 			HWIO_REO_R0_REO2SW2_RING_BASE_LSB_ADDR(0) -
1344*5113495bSYour Name 				HWIO_REO_R0_REO2SW1_RING_BASE_LSB_ADDR(0),
1345*5113495bSYour Name 			HWIO_REO_R2_REO2SW2_RING_HP_ADDR(0) -
1346*5113495bSYour Name 				HWIO_REO_R2_REO2SW1_RING_HP_ADDR(0),
1347*5113495bSYour Name 		},
1348*5113495bSYour Name 		.max_size =
1349*5113495bSYour Name 			HWIO_REO_R0_REO2SW1_RING_BASE_MSB_RING_SIZE_BMSK >>
1350*5113495bSYour Name 			HWIO_REO_R0_REO2SW1_RING_BASE_MSB_RING_SIZE_SHFT,
1351*5113495bSYour Name 	},
1352*5113495bSYour Name 	{ /* REO_EXCEPTION */
1353*5113495bSYour Name 		/* Designating REO2TCL ring as exception ring. This ring is
1354*5113495bSYour Name 		 * similar to other REO2SW rings though it is named as REO2TCL.
1355*5113495bSYour Name 		 * Any of theREO2SW rings can be used as exception ring.
1356*5113495bSYour Name 		 */
1357*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO2TCL,
1358*5113495bSYour Name 		.max_rings = 1,
1359*5113495bSYour Name 		.entry_size = sizeof(struct reo_destination_ring) >> 2,
1360*5113495bSYour Name 		.lmac_ring = FALSE,
1361*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
1362*5113495bSYour Name 		.reg_start = {
1363*5113495bSYour Name 			HWIO_REO_R0_REO2TCL_RING_BASE_LSB_ADDR(
1364*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
1365*5113495bSYour Name 			HWIO_REO_R2_REO2TCL_RING_HP_ADDR(
1366*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET)
1367*5113495bSYour Name 		},
1368*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
1369*5113495bSYour Name 		 * type are supported
1370*5113495bSYour Name 		 */
1371*5113495bSYour Name 		.reg_size = {},
1372*5113495bSYour Name 		.max_size =
1373*5113495bSYour Name 			HWIO_REO_R0_REO2TCL_RING_BASE_MSB_RING_SIZE_BMSK >>
1374*5113495bSYour Name 			HWIO_REO_R0_REO2TCL_RING_BASE_MSB_RING_SIZE_SHFT,
1375*5113495bSYour Name 	},
1376*5113495bSYour Name 	{ /* REO_REINJECT */
1377*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2REO,
1378*5113495bSYour Name 		.max_rings = 1,
1379*5113495bSYour Name 		.entry_size = sizeof(struct reo_entrance_ring) >> 2,
1380*5113495bSYour Name 		.lmac_ring = FALSE,
1381*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1382*5113495bSYour Name 		.reg_start = {
1383*5113495bSYour Name 			HWIO_REO_R0_SW2REO_RING_BASE_LSB_ADDR(
1384*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
1385*5113495bSYour Name 			HWIO_REO_R2_SW2REO_RING_HP_ADDR(
1386*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET)
1387*5113495bSYour Name 		},
1388*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
1389*5113495bSYour Name 		 * type are supported
1390*5113495bSYour Name 		 */
1391*5113495bSYour Name 		.reg_size = {},
1392*5113495bSYour Name 		.max_size = HWIO_REO_R0_SW2REO_RING_BASE_MSB_RING_SIZE_BMSK >>
1393*5113495bSYour Name 				HWIO_REO_R0_SW2REO_RING_BASE_MSB_RING_SIZE_SHFT,
1394*5113495bSYour Name 	},
1395*5113495bSYour Name 	{ /* REO_CMD */
1396*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO_CMD,
1397*5113495bSYour Name 		.max_rings = 1,
1398*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
1399*5113495bSYour Name 			sizeof(struct reo_get_queue_stats)) >> 2,
1400*5113495bSYour Name 		.lmac_ring = FALSE,
1401*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1402*5113495bSYour Name 		.reg_start = {
1403*5113495bSYour Name 			HWIO_REO_R0_REO_CMD_RING_BASE_LSB_ADDR(
1404*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
1405*5113495bSYour Name 			HWIO_REO_R2_REO_CMD_RING_HP_ADDR(
1406*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
1407*5113495bSYour Name 		},
1408*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
1409*5113495bSYour Name 		 * type are supported
1410*5113495bSYour Name 		 */
1411*5113495bSYour Name 		.reg_size = {},
1412*5113495bSYour Name 		.max_size =
1413*5113495bSYour Name 			HWIO_REO_R0_REO_CMD_RING_BASE_MSB_RING_SIZE_BMSK >>
1414*5113495bSYour Name 			HWIO_REO_R0_REO_CMD_RING_BASE_MSB_RING_SIZE_SHFT,
1415*5113495bSYour Name 	},
1416*5113495bSYour Name 	{ /* REO_STATUS */
1417*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO_STATUS,
1418*5113495bSYour Name 		.max_rings = 1,
1419*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
1420*5113495bSYour Name 			sizeof(struct reo_get_queue_stats_status)) >> 2,
1421*5113495bSYour Name 		.lmac_ring = FALSE,
1422*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
1423*5113495bSYour Name 		.reg_start = {
1424*5113495bSYour Name 			HWIO_REO_R0_REO_STATUS_RING_BASE_LSB_ADDR(
1425*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
1426*5113495bSYour Name 			HWIO_REO_R2_REO_STATUS_RING_HP_ADDR(
1427*5113495bSYour Name 				SEQ_WCSS_UMAC_REO_REG_OFFSET),
1428*5113495bSYour Name 		},
1429*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
1430*5113495bSYour Name 		 * type are supported
1431*5113495bSYour Name 		 */
1432*5113495bSYour Name 		.reg_size = {},
1433*5113495bSYour Name 		.max_size =
1434*5113495bSYour Name 			HWIO_REO_R0_REO_STATUS_RING_BASE_MSB_RING_SIZE_BMSK >>
1435*5113495bSYour Name 			HWIO_REO_R0_REO_STATUS_RING_BASE_MSB_RING_SIZE_SHFT,
1436*5113495bSYour Name 	},
1437*5113495bSYour Name 	{ /* TCL_DATA */
1438*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2TCL1,
1439*5113495bSYour Name 		.max_rings = 3,
1440*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
1441*5113495bSYour Name 			sizeof(struct tcl_data_cmd)) >> 2,
1442*5113495bSYour Name 		.lmac_ring = FALSE,
1443*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1444*5113495bSYour Name 		.reg_start = {
1445*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL1_RING_BASE_LSB_ADDR(
1446*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
1447*5113495bSYour Name 			HWIO_TCL_R2_SW2TCL1_RING_HP_ADDR(
1448*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
1449*5113495bSYour Name 		},
1450*5113495bSYour Name 		.reg_size = {
1451*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL2_RING_BASE_LSB_ADDR(0) -
1452*5113495bSYour Name 				HWIO_TCL_R0_SW2TCL1_RING_BASE_LSB_ADDR(0),
1453*5113495bSYour Name 			HWIO_TCL_R2_SW2TCL2_RING_HP_ADDR(0) -
1454*5113495bSYour Name 				HWIO_TCL_R2_SW2TCL1_RING_HP_ADDR(0),
1455*5113495bSYour Name 		},
1456*5113495bSYour Name 		.max_size =
1457*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL1_RING_BASE_MSB_RING_SIZE_BMSK >>
1458*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL1_RING_BASE_MSB_RING_SIZE_SHFT,
1459*5113495bSYour Name 	},
1460*5113495bSYour Name 	{ /* TCL_CMD */
1461*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2TCL_CMD,
1462*5113495bSYour Name 		.max_rings = 1,
1463*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
1464*5113495bSYour Name 			sizeof(struct tcl_gse_cmd)) >> 2,
1465*5113495bSYour Name 		.lmac_ring =  FALSE,
1466*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1467*5113495bSYour Name 		.reg_start = {
1468*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL_CMD_RING_BASE_LSB_ADDR(
1469*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
1470*5113495bSYour Name 			HWIO_TCL_R2_SW2TCL_CMD_RING_HP_ADDR(
1471*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
1472*5113495bSYour Name 		},
1473*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
1474*5113495bSYour Name 		 * type are supported
1475*5113495bSYour Name 		 */
1476*5113495bSYour Name 		.reg_size = {},
1477*5113495bSYour Name 		.max_size =
1478*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL_CMD_RING_BASE_MSB_RING_SIZE_BMSK >>
1479*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL_CMD_RING_BASE_MSB_RING_SIZE_SHFT,
1480*5113495bSYour Name 	},
1481*5113495bSYour Name 	{ /* TCL_STATUS */
1482*5113495bSYour Name 		.start_ring_id = HAL_SRNG_TCL_STATUS,
1483*5113495bSYour Name 		.max_rings = 1,
1484*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
1485*5113495bSYour Name 			sizeof(struct tcl_status_ring)) >> 2,
1486*5113495bSYour Name 		.lmac_ring = FALSE,
1487*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
1488*5113495bSYour Name 		.reg_start = {
1489*5113495bSYour Name 			HWIO_TCL_R0_TCL_STATUS1_RING_BASE_LSB_ADDR(
1490*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
1491*5113495bSYour Name 			HWIO_TCL_R2_TCL_STATUS1_RING_HP_ADDR(
1492*5113495bSYour Name 				SEQ_WCSS_UMAC_MAC_TCL_REG_OFFSET),
1493*5113495bSYour Name 		},
1494*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
1495*5113495bSYour Name 		 * type are supported
1496*5113495bSYour Name 		 */
1497*5113495bSYour Name 		.reg_size = {},
1498*5113495bSYour Name 		.max_size =
1499*5113495bSYour Name 			HWIO_TCL_R0_TCL_STATUS1_RING_BASE_MSB_RING_SIZE_BMSK >>
1500*5113495bSYour Name 			HWIO_TCL_R0_TCL_STATUS1_RING_BASE_MSB_RING_SIZE_SHFT,
1501*5113495bSYour Name 	},
1502*5113495bSYour Name 	{ /* CE_SRC */
1503*5113495bSYour Name 		.start_ring_id = HAL_SRNG_CE_0_SRC,
1504*5113495bSYour Name 		.max_rings = 12,
1505*5113495bSYour Name 		.entry_size = sizeof(struct ce_src_desc) >> 2,
1506*5113495bSYour Name 		.lmac_ring = FALSE,
1507*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1508*5113495bSYour Name 		.reg_start = {
1509*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_LSB_ADDR(
1510*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_SRC_REG_OFFSET),
1511*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R2_DEST_RING_HP_ADDR(
1512*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_SRC_REG_OFFSET),
1513*5113495bSYour Name 		},
1514*5113495bSYour Name 		.reg_size = {
1515*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_SRC_REG_OFFSET -
1516*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_SRC_REG_OFFSET,
1517*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_SRC_REG_OFFSET -
1518*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_SRC_REG_OFFSET,
1519*5113495bSYour Name 		},
1520*5113495bSYour Name 		.max_size =
1521*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_MSB_RING_SIZE_BMSK >>
1522*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_MSB_RING_SIZE_SHFT,
1523*5113495bSYour Name 	},
1524*5113495bSYour Name 	{ /* CE_DST */
1525*5113495bSYour Name 		.start_ring_id = HAL_SRNG_CE_0_DST,
1526*5113495bSYour Name 		.max_rings = 12,
1527*5113495bSYour Name 		.entry_size = 8 >> 2,
1528*5113495bSYour Name 		/*TODO: entry_size above should actually be
1529*5113495bSYour Name 		 * sizeof(struct ce_dst_desc) >> 2, but couldn't find definition
1530*5113495bSYour Name 		 * of struct ce_dst_desc in HW header files
1531*5113495bSYour Name 		 */
1532*5113495bSYour Name 		.lmac_ring = FALSE,
1533*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1534*5113495bSYour Name 		.reg_start = {
1535*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_LSB_ADDR(
1536*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET),
1537*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R2_DEST_RING_HP_ADDR(
1538*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET),
1539*5113495bSYour Name 		},
1540*5113495bSYour Name 		.reg_size = {
1541*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_DST_REG_OFFSET -
1542*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET,
1543*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_DST_REG_OFFSET -
1544*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET,
1545*5113495bSYour Name 		},
1546*5113495bSYour Name 		.max_size =
1547*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_MSB_RING_SIZE_BMSK >>
1548*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_MSB_RING_SIZE_SHFT,
1549*5113495bSYour Name 	},
1550*5113495bSYour Name 	{ /* CE_DST_STATUS */
1551*5113495bSYour Name 		.start_ring_id = HAL_SRNG_CE_0_DST_STATUS,
1552*5113495bSYour Name 		.max_rings = 12,
1553*5113495bSYour Name 		.entry_size = sizeof(struct ce_stat_desc) >> 2,
1554*5113495bSYour Name 		.lmac_ring = FALSE,
1555*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
1556*5113495bSYour Name 		.reg_start = {
1557*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_STATUS_RING_BASE_LSB_ADDR(
1558*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET),
1559*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R2_STATUS_RING_HP_ADDR(
1560*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET),
1561*5113495bSYour Name 		},
1562*5113495bSYour Name 			/* TODO: check destination status ring registers */
1563*5113495bSYour Name 		.reg_size = {
1564*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_DST_REG_OFFSET -
1565*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET,
1566*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_1_CHANNEL_DST_REG_OFFSET -
1567*5113495bSYour Name 		SEQ_WCSS_UMAC_WFSS_CE_0_REG_WFSS_CE_0_CHANNEL_DST_REG_OFFSET,
1568*5113495bSYour Name 		},
1569*5113495bSYour Name 		.max_size =
1570*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_STATUS_RING_BASE_MSB_RING_SIZE_BMSK >>
1571*5113495bSYour Name 		HWIO_WFSS_CE_CHANNEL_DST_R0_STATUS_RING_BASE_MSB_RING_SIZE_SHFT,
1572*5113495bSYour Name 	},
1573*5113495bSYour Name 	{ /* WBM_IDLE_LINK */
1574*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WBM_IDLE_LINK,
1575*5113495bSYour Name 		.max_rings = 1,
1576*5113495bSYour Name 		.entry_size = sizeof(struct wbm_link_descriptor_ring) >> 2,
1577*5113495bSYour Name 		.lmac_ring = FALSE,
1578*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1579*5113495bSYour Name 		.reg_start = {
1580*5113495bSYour Name 		HWIO_WBM_R0_WBM_IDLE_LINK_RING_BASE_LSB_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
1581*5113495bSYour Name 		HWIO_WBM_R2_WBM_IDLE_LINK_RING_HP_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
1582*5113495bSYour Name 		},
1583*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
1584*5113495bSYour Name 		 * type are supported
1585*5113495bSYour Name 		 */
1586*5113495bSYour Name 		.reg_size = {},
1587*5113495bSYour Name 		.max_size =
1588*5113495bSYour Name 		HWIO_WBM_R0_WBM_IDLE_LINK_RING_BASE_MSB_RING_SIZE_BMSK >>
1589*5113495bSYour Name 		HWIO_WBM_R0_WBM_IDLE_LINK_RING_BASE_MSB_RING_SIZE_SHFT,
1590*5113495bSYour Name 	},
1591*5113495bSYour Name 	{ /* SW2WBM_RELEASE */
1592*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WBM_SW_RELEASE,
1593*5113495bSYour Name 		.max_rings = 1,
1594*5113495bSYour Name 		.entry_size = sizeof(struct wbm_release_ring) >> 2,
1595*5113495bSYour Name 		.lmac_ring = FALSE,
1596*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1597*5113495bSYour Name 		.reg_start = {
1598*5113495bSYour Name 		HWIO_WBM_R0_SW_RELEASE_RING_BASE_LSB_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
1599*5113495bSYour Name 		HWIO_WBM_R2_SW_RELEASE_RING_HP_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
1600*5113495bSYour Name 		},
1601*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
1602*5113495bSYour Name 		 * type are supported
1603*5113495bSYour Name 		 */
1604*5113495bSYour Name 		.reg_size = {},
1605*5113495bSYour Name 		.max_size =
1606*5113495bSYour Name 		HWIO_WBM_R0_SW_RELEASE_RING_BASE_MSB_RING_SIZE_BMSK >>
1607*5113495bSYour Name 		HWIO_WBM_R0_SW_RELEASE_RING_BASE_MSB_RING_SIZE_SHFT,
1608*5113495bSYour Name 	},
1609*5113495bSYour Name 	{ /* WBM2SW_RELEASE */
1610*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WBM2SW0_RELEASE,
1611*5113495bSYour Name #ifdef IPA_WDI3_TX_TWO_PIPES
1612*5113495bSYour Name 		.max_rings = 5,
1613*5113495bSYour Name #else
1614*5113495bSYour Name 		.max_rings = 4,
1615*5113495bSYour Name #endif
1616*5113495bSYour Name 		.entry_size = sizeof(struct wbm_release_ring) >> 2,
1617*5113495bSYour Name 		.lmac_ring = FALSE,
1618*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
1619*5113495bSYour Name 		.reg_start = {
1620*5113495bSYour Name 		HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_LSB_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
1621*5113495bSYour Name 		HWIO_WBM_R2_WBM2SW0_RELEASE_RING_HP_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
1622*5113495bSYour Name 		},
1623*5113495bSYour Name 		.reg_size = {
1624*5113495bSYour Name 		HWIO_WBM_R0_WBM2SW1_RELEASE_RING_BASE_LSB_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET) -
1625*5113495bSYour Name 		HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_LSB_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
1626*5113495bSYour Name 		HWIO_WBM_R2_WBM2SW1_RELEASE_RING_HP_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET) -
1627*5113495bSYour Name 		HWIO_WBM_R2_WBM2SW0_RELEASE_RING_HP_ADDR(SEQ_WCSS_UMAC_WBM_REG_OFFSET),
1628*5113495bSYour Name 		},
1629*5113495bSYour Name 		.max_size =
1630*5113495bSYour Name 		HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_MSB_RING_SIZE_BMSK >>
1631*5113495bSYour Name 		HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_MSB_RING_SIZE_SHFT,
1632*5113495bSYour Name 	},
1633*5113495bSYour Name 	{ /* RXDMA_BUF */
1634*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA0_BUF0,
1635*5113495bSYour Name #ifdef IPA_OFFLOAD
1636*5113495bSYour Name 		.max_rings = 3,
1637*5113495bSYour Name #else
1638*5113495bSYour Name 		.max_rings = 2,
1639*5113495bSYour Name #endif
1640*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
1641*5113495bSYour Name 		.lmac_ring = TRUE,
1642*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1643*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
1644*5113495bSYour Name 		 * from host
1645*5113495bSYour Name 		 */
1646*5113495bSYour Name 		.reg_start = {},
1647*5113495bSYour Name 		.reg_size = {},
1648*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
1649*5113495bSYour Name 	},
1650*5113495bSYour Name 	{ /* RXDMA_DST */
1651*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_RXDMA2SW0,
1652*5113495bSYour Name 		.max_rings = 1,
1653*5113495bSYour Name 		.entry_size = sizeof(struct reo_entrance_ring) >> 2,
1654*5113495bSYour Name 		.lmac_ring =  TRUE,
1655*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
1656*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
1657*5113495bSYour Name 		 * from host
1658*5113495bSYour Name 		 */
1659*5113495bSYour Name 		.reg_start = {},
1660*5113495bSYour Name 		.reg_size = {},
1661*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
1662*5113495bSYour Name 	},
1663*5113495bSYour Name 	{ /* RXDMA_MONITOR_BUF */
1664*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA2_BUF,
1665*5113495bSYour Name 		.max_rings = 1,
1666*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
1667*5113495bSYour Name 		.lmac_ring = TRUE,
1668*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1669*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
1670*5113495bSYour Name 		 * from host
1671*5113495bSYour Name 		 */
1672*5113495bSYour Name 		.reg_start = {},
1673*5113495bSYour Name 		.reg_size = {},
1674*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
1675*5113495bSYour Name 	},
1676*5113495bSYour Name 	{ /* RXDMA_MONITOR_STATUS */
1677*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA1_STATBUF,
1678*5113495bSYour Name 		.max_rings = 1,
1679*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
1680*5113495bSYour Name 		.lmac_ring = TRUE,
1681*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1682*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
1683*5113495bSYour Name 		 * from host
1684*5113495bSYour Name 		 */
1685*5113495bSYour Name 		.reg_start = {},
1686*5113495bSYour Name 		.reg_size = {},
1687*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
1688*5113495bSYour Name 	},
1689*5113495bSYour Name 	{ /* RXDMA_MONITOR_DST */
1690*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_RXDMA2SW1,
1691*5113495bSYour Name 		.max_rings = 1,
1692*5113495bSYour Name 		.entry_size = sizeof(struct reo_entrance_ring) >> 2,
1693*5113495bSYour Name 		.lmac_ring = TRUE,
1694*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
1695*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
1696*5113495bSYour Name 		 * from host
1697*5113495bSYour Name 		 */
1698*5113495bSYour Name 		.reg_start = {},
1699*5113495bSYour Name 		.reg_size = {},
1700*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
1701*5113495bSYour Name 	},
1702*5113495bSYour Name 	{ /* RXDMA_MONITOR_DESC */
1703*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA1_DESC,
1704*5113495bSYour Name 		.max_rings = 1,
1705*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
1706*5113495bSYour Name 		.lmac_ring = TRUE,
1707*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1708*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
1709*5113495bSYour Name 		 * from host
1710*5113495bSYour Name 		 */
1711*5113495bSYour Name 		.reg_start = {},
1712*5113495bSYour Name 		.reg_size = {},
1713*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
1714*5113495bSYour Name 	},
1715*5113495bSYour Name 	{ /* DIR_BUF_RX_DMA_SRC */
1716*5113495bSYour Name 		.start_ring_id = HAL_SRNG_DIR_BUF_RX_SRC_DMA_RING,
1717*5113495bSYour Name 		/*
1718*5113495bSYour Name 		 * one ring is for spectral scan
1719*5113495bSYour Name 		 * the other one is for cfr
1720*5113495bSYour Name 		 */
1721*5113495bSYour Name 		.max_rings = 2,
1722*5113495bSYour Name 		.entry_size = 2,
1723*5113495bSYour Name 		.lmac_ring = TRUE,
1724*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1725*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
1726*5113495bSYour Name 		 * from host
1727*5113495bSYour Name 		 */
1728*5113495bSYour Name 		.reg_start = {},
1729*5113495bSYour Name 		.reg_size = {},
1730*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
1731*5113495bSYour Name 	},
1732*5113495bSYour Name #ifdef WLAN_FEATURE_CIF_CFR
1733*5113495bSYour Name 	{ /* WIFI_POS_SRC */
1734*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WIFI_POS_SRC_DMA_RING,
1735*5113495bSYour Name 		.max_rings = 1,
1736*5113495bSYour Name 		.entry_size = sizeof(wmi_oem_dma_buf_release_entry)  >> 2,
1737*5113495bSYour Name 		.lmac_ring = TRUE,
1738*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
1739*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
1740*5113495bSYour Name 		 * from host
1741*5113495bSYour Name 		 */
1742*5113495bSYour Name 		.reg_start = {},
1743*5113495bSYour Name 		.reg_size = {},
1744*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
1745*5113495bSYour Name 	},
1746*5113495bSYour Name #endif
1747*5113495bSYour Name 	{ /* REO2PPE */ 0},
1748*5113495bSYour Name 	{ /* PPE2TCL */ 0},
1749*5113495bSYour Name 	{ /* PPE_RELEASE */ 0},
1750*5113495bSYour Name 	{ /* TX_MONITOR_BUF */ 0},
1751*5113495bSYour Name 	{ /* TX_MONITOR_DST */ 0},
1752*5113495bSYour Name 	{ /* SW2RXDMA_NEW */ 0},
1753*5113495bSYour Name 	{ /* SW2RXDMA_LINK_RELEASE */ 0},
1754*5113495bSYour Name };
1755*5113495bSYour Name 
1756*5113495bSYour Name /**
1757*5113495bSYour Name  * hal_qca6390_attach() - Attach 6390 target specific hal_soc ops,
1758*5113495bSYour Name  *			  offset and srng table
1759*5113495bSYour Name  * @hal_soc: HAL SoC context
1760*5113495bSYour Name  */
hal_qca6390_attach(struct hal_soc * hal_soc)1761*5113495bSYour Name void hal_qca6390_attach(struct hal_soc *hal_soc)
1762*5113495bSYour Name {
1763*5113495bSYour Name 	hal_soc->hw_srng_table = hw_srng_table_6390;
1764*5113495bSYour Name 	hal_srng_hw_reg_offset_init_generic(hal_soc);
1765*5113495bSYour Name 	hal_hw_txrx_default_ops_attach_li(hal_soc);
1766*5113495bSYour Name 	hal_hw_txrx_ops_attach_qca6390(hal_soc);
1767*5113495bSYour Name }
1768