xref: /wlan-driver/qca-wifi-host-cmn/hal/wifi3.0/kiwi/hal_kiwi.c (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4*5113495bSYour Name  *
5*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
6*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
7*5113495bSYour Name  * above copyright notice and this permission notice appear in all
8*5113495bSYour Name  * copies.
9*5113495bSYour Name  *
10*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
18*5113495bSYour Name  */
19*5113495bSYour Name 
20*5113495bSYour Name #include "qdf_types.h"
21*5113495bSYour Name #include "qdf_util.h"
22*5113495bSYour Name #include "qdf_types.h"
23*5113495bSYour Name #include "qdf_lock.h"
24*5113495bSYour Name #include "qdf_mem.h"
25*5113495bSYour Name #include "qdf_nbuf.h"
26*5113495bSYour Name #include "hal_hw_headers.h"
27*5113495bSYour Name #include "hal_internal.h"
28*5113495bSYour Name #include "hal_api.h"
29*5113495bSYour Name #include "target_type.h"
30*5113495bSYour Name #include "wcss_version.h"
31*5113495bSYour Name #include "qdf_module.h"
32*5113495bSYour Name #include "hal_flow.h"
33*5113495bSYour Name #include "rx_flow_search_entry.h"
34*5113495bSYour Name #include "hal_rx_flow_info.h"
35*5113495bSYour Name #include "hal_be_api.h"
36*5113495bSYour Name #include "reo_destination_ring_with_pn.h"
37*5113495bSYour Name #include "rx_reo_queue_1k.h"
38*5113495bSYour Name 
39*5113495bSYour Name #include <hal_be_rx.h>
40*5113495bSYour Name 
41*5113495bSYour Name #define UNIFIED_RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_OFFSET \
42*5113495bSYour Name 	RXPCU_PPDU_END_INFO_RX_PPDU_DURATION_OFFSET
43*5113495bSYour Name #define UNIFIED_RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_MASK \
44*5113495bSYour Name 	RXPCU_PPDU_END_INFO_RX_PPDU_DURATION_MASK
45*5113495bSYour Name #define UNIFIED_RXPCU_PPDU_END_INFO_8_RX_PPDU_DURATION_LSB \
46*5113495bSYour Name 	RXPCU_PPDU_END_INFO_RX_PPDU_DURATION_LSB
47*5113495bSYour Name #define UNIFIED_PHYRX_HT_SIG_0_HT_SIG_INFO_PHYRX_HT_SIG_INFO_DETAILS_OFFSET \
48*5113495bSYour Name 	PHYRX_HT_SIG_PHYRX_HT_SIG_INFO_DETAILS_MCS_OFFSET
49*5113495bSYour Name #define UNIFIED_PHYRX_L_SIG_B_0_L_SIG_B_INFO_PHYRX_L_SIG_B_INFO_DETAILS_OFFSET \
50*5113495bSYour Name 	PHYRX_L_SIG_B_PHYRX_L_SIG_B_INFO_DETAILS_RATE_OFFSET
51*5113495bSYour Name #define UNIFIED_PHYRX_L_SIG_A_0_L_SIG_A_INFO_PHYRX_L_SIG_A_INFO_DETAILS_OFFSET \
52*5113495bSYour Name 	PHYRX_L_SIG_A_PHYRX_L_SIG_A_INFO_DETAILS_RATE_OFFSET
53*5113495bSYour Name #define UNIFIED_PHYRX_VHT_SIG_A_0_VHT_SIG_A_INFO_PHYRX_VHT_SIG_A_INFO_DETAILS_OFFSET \
54*5113495bSYour Name 	PHYRX_VHT_SIG_A_PHYRX_VHT_SIG_A_INFO_DETAILS_BANDWIDTH_OFFSET
55*5113495bSYour Name #define UNIFIED_PHYRX_HE_SIG_A_SU_0_HE_SIG_A_SU_INFO_PHYRX_HE_SIG_A_SU_INFO_DETAILS_OFFSET \
56*5113495bSYour Name 	PHYRX_HE_SIG_A_SU_PHYRX_HE_SIG_A_SU_INFO_DETAILS_FORMAT_INDICATION_OFFSET
57*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 \
58*5113495bSYour Name 	PHYRX_HE_SIG_A_MU_DL_PHYRX_HE_SIG_A_MU_DL_INFO_DETAILS_DL_UL_FLAG_OFFSET
59*5113495bSYour Name #define UNIFIED_PHYRX_HE_SIG_B1_MU_0_HE_SIG_B1_MU_INFO_PHYRX_HE_SIG_B1_MU_INFO_DETAILS_OFFSET \
60*5113495bSYour Name 	PHYRX_HE_SIG_B1_MU_PHYRX_HE_SIG_B1_MU_INFO_DETAILS_RU_ALLOCATION_OFFSET
61*5113495bSYour Name #define UNIFIED_PHYRX_HE_SIG_B2_MU_0_HE_SIG_B2_MU_INFO_PHYRX_HE_SIG_B2_MU_INFO_DETAILS_OFFSET \
62*5113495bSYour Name 	PHYRX_HE_SIG_B2_MU_PHYRX_HE_SIG_B2_MU_INFO_DETAILS_STA_ID_OFFSET
63*5113495bSYour Name #define UNIFIED_PHYRX_HE_SIG_B2_OFDMA_0_HE_SIG_B2_OFDMA_INFO_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS_OFFSET \
64*5113495bSYour Name 	PHYRX_HE_SIG_B2_OFDMA_PHYRX_HE_SIG_B2_OFDMA_INFO_DETAILS_STA_ID_OFFSET
65*5113495bSYour Name #define UNIFIED_PHYRX_RSSI_LEGACY_3_RECEIVE_RSSI_INFO_PRE_RSSI_INFO_DETAILS_OFFSET \
66*5113495bSYour Name 	PHYRX_RSSI_LEGACY_PRE_RSSI_INFO_DETAILS_RSSI_PRI20_CHAIN0_OFFSET
67*5113495bSYour Name #define UNIFIED_PHYRX_RSSI_LEGACY_19_RECEIVE_RSSI_INFO_PREAMBLE_RSSI_INFO_DETAILS_OFFSET \
68*5113495bSYour Name 	PHYRX_RSSI_LEGACY_PREAMBLE_RSSI_INFO_DETAILS_RSSI_PRI20_CHAIN0_OFFSET
69*5113495bSYour Name #define UNIFIED_RX_MPDU_START_0_RX_MPDU_INFO_RX_MPDU_INFO_DETAILS_OFFSET \
70*5113495bSYour Name 	RX_MPDU_START_0_RX_MPDU_INFO_DETAILS_RXPT_CLASSIFY_INFO_DETAILS_REO_DESTINATION_INDICATION_OFFSET
71*5113495bSYour Name #define UNIFIED_RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET \
72*5113495bSYour Name 	RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET
73*5113495bSYour Name #define UNIFIED_RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_RX_MSDU_DESC_INFO_DETAILS_OFFSET \
74*5113495bSYour Name 	RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_RX_MSDU_DESC_INFO_DETAILS_OFFSET
75*5113495bSYour Name #define UNIFIED_RX_MPDU_DETAILS_2_RX_MPDU_DESC_INFO_RX_MPDU_DESC_INFO_DETAILS_OFFSET \
76*5113495bSYour Name 	RX_MPDU_DETAILS_2_RX_MPDU_DESC_INFO_RX_MPDU_DESC_INFO_DETAILS_OFFSET
77*5113495bSYour Name #define UNIFIED_REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_RX_MPDU_DESC_INFO_DETAILS_OFFSET \
78*5113495bSYour Name 	REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_RX_MPDU_DESC_INFO_DETAILS_OFFSET
79*5113495bSYour Name #define UNIFORM_REO_STATUS_HEADER_STATUS_HEADER_GENERIC \
80*5113495bSYour Name 	UNIFORM_REO_STATUS_HEADER_STATUS_HEADER
81*5113495bSYour Name #define UNIFIED_RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_RX_MSDU_DESC_INFO_DETAILS_OFFSET \
82*5113495bSYour Name 	RX_MSDU_DETAILS_2_RX_MSDU_DESC_INFO_RX_MSDU_DESC_INFO_DETAILS_OFFSET
83*5113495bSYour Name #define UNIFIED_RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET \
84*5113495bSYour Name 	RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET
85*5113495bSYour Name #define UNIFIED_TCL_DATA_CMD_0_BUFFER_ADDR_INFO_BUF_ADDR_INFO_OFFSET \
86*5113495bSYour Name 	TCL_DATA_CMD_BUF_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET
87*5113495bSYour Name #define UNIFIED_TCL_DATA_CMD_1_BUFFER_ADDR_INFO_BUF_ADDR_INFO_OFFSET \
88*5113495bSYour Name 	TCL_DATA_CMD_BUF_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET
89*5113495bSYour Name #define UNIFIED_TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_OFFSET \
90*5113495bSYour Name 	TCL_DATA_CMD_BUF_OR_EXT_DESC_TYPE_OFFSET
91*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_0_BUFFER_ADDR_31_0_LSB \
92*5113495bSYour Name 	BUFFER_ADDR_INFO_BUFFER_ADDR_31_0_LSB
93*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_0_BUFFER_ADDR_31_0_MASK \
94*5113495bSYour Name 	BUFFER_ADDR_INFO_BUFFER_ADDR_31_0_MASK
95*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_BUFFER_ADDR_39_32_LSB \
96*5113495bSYour Name 	BUFFER_ADDR_INFO_BUFFER_ADDR_39_32_LSB
97*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_BUFFER_ADDR_39_32_MASK \
98*5113495bSYour Name 	BUFFER_ADDR_INFO_BUFFER_ADDR_39_32_MASK
99*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_RETURN_BUFFER_MANAGER_LSB \
100*5113495bSYour Name 	BUFFER_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB
101*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_RETURN_BUFFER_MANAGER_MASK \
102*5113495bSYour Name 	BUFFER_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK
103*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_SW_BUFFER_COOKIE_LSB \
104*5113495bSYour Name 	BUFFER_ADDR_INFO_SW_BUFFER_COOKIE_LSB
105*5113495bSYour Name #define UNIFIED_BUFFER_ADDR_INFO_1_SW_BUFFER_COOKIE_MASK \
106*5113495bSYour Name 	BUFFER_ADDR_INFO_SW_BUFFER_COOKIE_MASK
107*5113495bSYour Name #define UNIFIED_TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_LSB \
108*5113495bSYour Name 	TCL_DATA_CMD_BUF_OR_EXT_DESC_TYPE_LSB
109*5113495bSYour Name #define UNIFIED_TCL_DATA_CMD_2_BUF_OR_EXT_DESC_TYPE_MASK \
110*5113495bSYour Name 	TCL_DATA_CMD_BUF_OR_EXT_DESC_TYPE_MASK
111*5113495bSYour Name #define UNIFIED_WBM_RELEASE_RING_6_TX_RATE_STATS_INFO_TX_RATE_STATS_MASK \
112*5113495bSYour Name 	WBM2SW_COMPLETION_RING_TX_TX_RATE_STATS_PPDU_TRANSMISSION_TSF_MASK
113*5113495bSYour Name #define UNIFIED_WBM_RELEASE_RING_6_TX_RATE_STATS_INFO_TX_RATE_STATS_OFFSET \
114*5113495bSYour Name 	WBM2SW_COMPLETION_RING_TX_TX_RATE_STATS_PPDU_TRANSMISSION_TSF_OFFSET
115*5113495bSYour Name #define UNIFIED_WBM_RELEASE_RING_6_TX_RATE_STATS_INFO_TX_RATE_STATS_LSB \
116*5113495bSYour Name 	WBM2SW_COMPLETION_RING_TX_TX_RATE_STATS_PPDU_TRANSMISSION_TSF_LSB
117*5113495bSYour Name 
118*5113495bSYour Name #include "hal_kiwi_tx.h"
119*5113495bSYour Name #include "hal_kiwi_rx.h"
120*5113495bSYour Name 
121*5113495bSYour Name #include "hal_be_rx_tlv.h"
122*5113495bSYour Name 
123*5113495bSYour Name #include <hal_generic_api.h>
124*5113495bSYour Name #include "hal_be_api_mon.h"
125*5113495bSYour Name #include <hal_be_generic_api.h>
126*5113495bSYour Name 
127*5113495bSYour Name #define LINK_DESC_SIZE (NUM_OF_DWORDS_RX_MSDU_LINK << 2)
128*5113495bSYour Name 
129*5113495bSYour Name /* For Berryllium sw2rxdma ring size increased to 20 bits */
130*5113495bSYour Name #define HAL_RXDMA_MAX_RING_SIZE_BE 0xFFFFF
131*5113495bSYour Name 
132*5113495bSYour Name #ifdef QCA_GET_TSF_VIA_REG
133*5113495bSYour Name #define PCIE_PCIE_MHI_TIME_LOW 0xA28
134*5113495bSYour Name #define PCIE_PCIE_MHI_TIME_HIGH 0xA2C
135*5113495bSYour Name 
136*5113495bSYour Name #define PMM_REG_BASE 0xB500FC
137*5113495bSYour Name 
138*5113495bSYour Name #define FW_QTIME_CYCLES_PER_10_USEC 192
139*5113495bSYour Name #endif
140*5113495bSYour Name 
141*5113495bSYour Name struct wbm2sw_completion_ring_tx gwbm2sw_tx_comp_symbol __attribute__((used));
142*5113495bSYour Name struct wbm2sw_completion_ring_rx gwbm2sw_rx_comp_symbol __attribute__((used));
143*5113495bSYour Name 
hal_get_link_desc_size_kiwi(void)144*5113495bSYour Name static uint32_t hal_get_link_desc_size_kiwi(void)
145*5113495bSYour Name {
146*5113495bSYour Name 	return LINK_DESC_SIZE;
147*5113495bSYour Name }
148*5113495bSYour Name 
149*5113495bSYour Name /**
150*5113495bSYour Name  * hal_rx_dump_msdu_end_tlv_kiwi() - dump RX msdu_end TLV in structured
151*5113495bSYour Name  *			     human readable format.
152*5113495bSYour Name  * @msduend: pointer the msdu_end TLV in pkt.
153*5113495bSYour Name  * @dbg_level: log level.
154*5113495bSYour Name  *
155*5113495bSYour Name  * Return: void
156*5113495bSYour Name  */
157*5113495bSYour Name #ifdef QCA_WIFI_KIWI_V2
hal_rx_dump_msdu_end_tlv_kiwi(void * msduend,uint8_t dbg_level)158*5113495bSYour Name static void hal_rx_dump_msdu_end_tlv_kiwi(void *msduend,
159*5113495bSYour Name 					  uint8_t dbg_level)
160*5113495bSYour Name {
161*5113495bSYour Name 	struct rx_msdu_end *msdu_end = (struct rx_msdu_end *)msduend;
162*5113495bSYour Name 
163*5113495bSYour Name 	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_HAL,
164*5113495bSYour Name 			"rx_msdu_end tlv (1/5)- "
165*5113495bSYour Name 			"rxpcu_mpdu_filter_in_category :%x "
166*5113495bSYour Name 			"sw_frame_group_id :%x "
167*5113495bSYour Name 			"reserved_0 :%x "
168*5113495bSYour Name 			"phy_ppdu_id :%x "
169*5113495bSYour Name 			"ip_hdr_chksum :%x "
170*5113495bSYour Name 			"reported_mpdu_length :%x "
171*5113495bSYour Name 			"reserved_1a :%x "
172*5113495bSYour Name 			"reserved_2a :%x "
173*5113495bSYour Name 			"cce_super_rule :%x "
174*5113495bSYour Name 			"cce_classify_not_done_truncate :%x "
175*5113495bSYour Name 			"cce_classify_not_done_cce_dis :%x "
176*5113495bSYour Name 			"cumulative_l3_checksum :%x "
177*5113495bSYour Name 			"rule_indication_31_0 :%x "
178*5113495bSYour Name 			"ipv6_options_crc :%x "
179*5113495bSYour Name 			"da_offset :%x "
180*5113495bSYour Name 			"sa_offset :%x "
181*5113495bSYour Name 			"da_offset_valid :%x "
182*5113495bSYour Name 			"sa_offset_valid :%x "
183*5113495bSYour Name 			"reserved_5a :%x "
184*5113495bSYour Name 			"l3_type :%x",
185*5113495bSYour Name 			msdu_end->rxpcu_mpdu_filter_in_category,
186*5113495bSYour Name 			msdu_end->sw_frame_group_id,
187*5113495bSYour Name 			msdu_end->reserved_0,
188*5113495bSYour Name 			msdu_end->phy_ppdu_id,
189*5113495bSYour Name 			msdu_end->ip_hdr_chksum,
190*5113495bSYour Name 			msdu_end->reported_mpdu_length,
191*5113495bSYour Name 			msdu_end->reserved_1a,
192*5113495bSYour Name 			msdu_end->reserved_2a,
193*5113495bSYour Name 			msdu_end->cce_super_rule,
194*5113495bSYour Name 			msdu_end->cce_classify_not_done_truncate,
195*5113495bSYour Name 			msdu_end->cce_classify_not_done_cce_dis,
196*5113495bSYour Name 			msdu_end->cumulative_l3_checksum,
197*5113495bSYour Name 			msdu_end->rule_indication_31_0,
198*5113495bSYour Name 			msdu_end->ipv6_options_crc,
199*5113495bSYour Name 			msdu_end->da_offset,
200*5113495bSYour Name 			msdu_end->sa_offset,
201*5113495bSYour Name 			msdu_end->da_offset_valid,
202*5113495bSYour Name 			msdu_end->sa_offset_valid,
203*5113495bSYour Name 			msdu_end->reserved_5a,
204*5113495bSYour Name 			msdu_end->l3_type);
205*5113495bSYour Name 
206*5113495bSYour Name 	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_HAL,
207*5113495bSYour Name 			"rx_msdu_end tlv (2/5)- "
208*5113495bSYour Name 			"rule_indication_63_32 :%x "
209*5113495bSYour Name 			"tcp_seq_number :%x "
210*5113495bSYour Name 			"tcp_ack_number :%x "
211*5113495bSYour Name 			"tcp_flag :%x "
212*5113495bSYour Name 			"lro_eligible :%x "
213*5113495bSYour Name 			"reserved_9a :%x "
214*5113495bSYour Name 			"window_size :%x "
215*5113495bSYour Name 			"sa_sw_peer_id :%x "
216*5113495bSYour Name 			"sa_idx_timeout :%x "
217*5113495bSYour Name 			"da_idx_timeout :%x "
218*5113495bSYour Name 			"to_ds :%x "
219*5113495bSYour Name 			"tid :%x "
220*5113495bSYour Name 			"sa_is_valid :%x "
221*5113495bSYour Name 			"da_is_valid :%x "
222*5113495bSYour Name 			"da_is_mcbc :%x "
223*5113495bSYour Name 			"l3_header_padding :%x "
224*5113495bSYour Name 			"first_msdu :%x "
225*5113495bSYour Name 			"last_msdu :%x "
226*5113495bSYour Name 			"fr_ds :%x "
227*5113495bSYour Name 			"ip_chksum_fail_copy :%x "
228*5113495bSYour Name 			"sa_idx :%x "
229*5113495bSYour Name 			"da_idx_or_sw_peer_id :%x",
230*5113495bSYour Name 			msdu_end->rule_indication_63_32,
231*5113495bSYour Name 			msdu_end->tcp_seq_number,
232*5113495bSYour Name 			msdu_end->tcp_ack_number,
233*5113495bSYour Name 			msdu_end->tcp_flag,
234*5113495bSYour Name 			msdu_end->lro_eligible,
235*5113495bSYour Name 			msdu_end->reserved_9a,
236*5113495bSYour Name 			msdu_end->window_size,
237*5113495bSYour Name 			msdu_end->sa_sw_peer_id,
238*5113495bSYour Name 			msdu_end->sa_idx_timeout,
239*5113495bSYour Name 			msdu_end->da_idx_timeout,
240*5113495bSYour Name 			msdu_end->to_ds,
241*5113495bSYour Name 			msdu_end->tid,
242*5113495bSYour Name 			msdu_end->sa_is_valid,
243*5113495bSYour Name 			msdu_end->da_is_valid,
244*5113495bSYour Name 			msdu_end->da_is_mcbc,
245*5113495bSYour Name 			msdu_end->l3_header_padding,
246*5113495bSYour Name 			msdu_end->first_msdu,
247*5113495bSYour Name 			msdu_end->last_msdu,
248*5113495bSYour Name 			msdu_end->fr_ds,
249*5113495bSYour Name 			msdu_end->ip_chksum_fail_copy,
250*5113495bSYour Name 			msdu_end->sa_idx,
251*5113495bSYour Name 			msdu_end->da_idx_or_sw_peer_id);
252*5113495bSYour Name 
253*5113495bSYour Name 	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_HAL,
254*5113495bSYour Name 			"rx_msdu_end tlv (3/5)- "
255*5113495bSYour Name 			"msdu_drop :%x "
256*5113495bSYour Name 			"reo_destination_indication :%x "
257*5113495bSYour Name 			"flow_idx :%x "
258*5113495bSYour Name 			"use_ppe :%x "
259*5113495bSYour Name 			"vlan_ctag_stripped :%x "
260*5113495bSYour Name 			"vlan_stag_stripped :%x "
261*5113495bSYour Name 			"fragment_flag :%x "
262*5113495bSYour Name 			"fse_metadata :%x "
263*5113495bSYour Name 			"cce_metadata :%x "
264*5113495bSYour Name 			"tcp_udp_chksum :%x "
265*5113495bSYour Name 			"aggregation_count :%x "
266*5113495bSYour Name 			"flow_aggregation_continuation :%x "
267*5113495bSYour Name 			"fisa_timeout :%x "
268*5113495bSYour Name 			"tcp_udp_chksum_fail_copy :%x "
269*5113495bSYour Name 			"msdu_limit_error :%x "
270*5113495bSYour Name 			"flow_idx_timeout :%x "
271*5113495bSYour Name 			"flow_idx_invalid :%x "
272*5113495bSYour Name 			"cce_match :%x "
273*5113495bSYour Name 			"amsdu_parser_error :%x "
274*5113495bSYour Name 			"cumulative_ip_length :%x "
275*5113495bSYour Name 			"key_id_octet :%x "
276*5113495bSYour Name 			"reserved_16a :%x "
277*5113495bSYour Name 			"reserved_17a :%x "
278*5113495bSYour Name 			"service_code :%x "
279*5113495bSYour Name 			"priority_valid :%x "
280*5113495bSYour Name 			"intra_bss :%x "
281*5113495bSYour Name 			"dest_chip_id :%x "
282*5113495bSYour Name 			"multicast_echo :%x "
283*5113495bSYour Name 			"wds_learning_event :%x "
284*5113495bSYour Name 			"wds_roaming_event :%x "
285*5113495bSYour Name 			"wds_keep_alive_event :%x "
286*5113495bSYour Name 			"reserved_17b :%x",
287*5113495bSYour Name 			msdu_end->msdu_drop,
288*5113495bSYour Name 			msdu_end->reo_destination_indication,
289*5113495bSYour Name 			msdu_end->flow_idx,
290*5113495bSYour Name 			msdu_end->use_ppe,
291*5113495bSYour Name 			msdu_end->vlan_ctag_stripped,
292*5113495bSYour Name 			msdu_end->vlan_stag_stripped,
293*5113495bSYour Name 			msdu_end->fragment_flag,
294*5113495bSYour Name 			msdu_end->fse_metadata,
295*5113495bSYour Name 			msdu_end->cce_metadata,
296*5113495bSYour Name 			msdu_end->tcp_udp_chksum,
297*5113495bSYour Name 			msdu_end->aggregation_count,
298*5113495bSYour Name 			msdu_end->flow_aggregation_continuation,
299*5113495bSYour Name 			msdu_end->fisa_timeout,
300*5113495bSYour Name 			msdu_end->tcp_udp_chksum_fail_copy,
301*5113495bSYour Name 			msdu_end->msdu_limit_error,
302*5113495bSYour Name 			msdu_end->flow_idx_timeout,
303*5113495bSYour Name 			msdu_end->flow_idx_invalid,
304*5113495bSYour Name 			msdu_end->cce_match,
305*5113495bSYour Name 			msdu_end->amsdu_parser_error,
306*5113495bSYour Name 			msdu_end->cumulative_ip_length,
307*5113495bSYour Name 			msdu_end->key_id_octet,
308*5113495bSYour Name 			msdu_end->reserved_16a,
309*5113495bSYour Name 			msdu_end->reserved_17a,
310*5113495bSYour Name 			msdu_end->service_code,
311*5113495bSYour Name 			msdu_end->priority_valid,
312*5113495bSYour Name 			msdu_end->intra_bss,
313*5113495bSYour Name 			msdu_end->dest_chip_id,
314*5113495bSYour Name 			msdu_end->multicast_echo,
315*5113495bSYour Name 			msdu_end->wds_learning_event,
316*5113495bSYour Name 			msdu_end->wds_roaming_event,
317*5113495bSYour Name 			msdu_end->wds_keep_alive_event,
318*5113495bSYour Name 			msdu_end->reserved_17b);
319*5113495bSYour Name 
320*5113495bSYour Name 	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_HAL,
321*5113495bSYour Name 			"rx_msdu_end tlv (4/5)- "
322*5113495bSYour Name 			"msdu_length :%x "
323*5113495bSYour Name 			"stbc :%x "
324*5113495bSYour Name 			"ipsec_esp :%x "
325*5113495bSYour Name 			"l3_offset :%x "
326*5113495bSYour Name 			"ipsec_ah :%x "
327*5113495bSYour Name 			"l4_offset :%x "
328*5113495bSYour Name 			"msdu_number :%x "
329*5113495bSYour Name 			"decap_format :%x "
330*5113495bSYour Name 			"ipv4_proto :%x "
331*5113495bSYour Name 			"ipv6_proto :%x "
332*5113495bSYour Name 			"tcp_proto :%x "
333*5113495bSYour Name 			"udp_proto :%x "
334*5113495bSYour Name 			"ip_frag :%x "
335*5113495bSYour Name 			"tcp_only_ack :%x "
336*5113495bSYour Name 			"da_is_bcast_mcast :%x "
337*5113495bSYour Name 			"toeplitz_hash_sel :%x "
338*5113495bSYour Name 			"ip_fixed_header_valid :%x "
339*5113495bSYour Name 			"ip_extn_header_valid :%x "
340*5113495bSYour Name 			"tcp_udp_header_valid :%x "
341*5113495bSYour Name 			"mesh_control_present :%x "
342*5113495bSYour Name 			"ldpc :%x "
343*5113495bSYour Name 			"ip4_protocol_ip6_next_header :%x "
344*5113495bSYour Name 			"vlan_ctag_ci :%x "
345*5113495bSYour Name 			"vlan_stag_ci :%x "
346*5113495bSYour Name 			"peer_meta_data :%x "
347*5113495bSYour Name 			"user_rssi :%x "
348*5113495bSYour Name 			"pkt_type :%x "
349*5113495bSYour Name 			"sgi :%x "
350*5113495bSYour Name 			"rate_mcs :%x "
351*5113495bSYour Name 			"receive_bandwidth :%x "
352*5113495bSYour Name 			"reception_type :%x "
353*5113495bSYour Name 			"mimo_ss_bitmap :%x "
354*5113495bSYour Name 			"msdu_done_copy :%x "
355*5113495bSYour Name 			"flow_id_toeplitz :%x",
356*5113495bSYour Name 			msdu_end->msdu_length,
357*5113495bSYour Name 			msdu_end->stbc,
358*5113495bSYour Name 			msdu_end->ipsec_esp,
359*5113495bSYour Name 			msdu_end->l3_offset,
360*5113495bSYour Name 			msdu_end->ipsec_ah,
361*5113495bSYour Name 			msdu_end->l4_offset,
362*5113495bSYour Name 			msdu_end->msdu_number,
363*5113495bSYour Name 			msdu_end->decap_format,
364*5113495bSYour Name 			msdu_end->ipv4_proto,
365*5113495bSYour Name 			msdu_end->ipv6_proto,
366*5113495bSYour Name 			msdu_end->tcp_proto,
367*5113495bSYour Name 			msdu_end->udp_proto,
368*5113495bSYour Name 			msdu_end->ip_frag,
369*5113495bSYour Name 			msdu_end->tcp_only_ack,
370*5113495bSYour Name 			msdu_end->da_is_bcast_mcast,
371*5113495bSYour Name 			msdu_end->toeplitz_hash_sel,
372*5113495bSYour Name 			msdu_end->ip_fixed_header_valid,
373*5113495bSYour Name 			msdu_end->ip_extn_header_valid,
374*5113495bSYour Name 			msdu_end->tcp_udp_header_valid,
375*5113495bSYour Name 			msdu_end->mesh_control_present,
376*5113495bSYour Name 			msdu_end->ldpc,
377*5113495bSYour Name 			msdu_end->ip4_protocol_ip6_next_header,
378*5113495bSYour Name 			msdu_end->vlan_ctag_ci,
379*5113495bSYour Name 			msdu_end->vlan_stag_ci,
380*5113495bSYour Name 			msdu_end->peer_meta_data,
381*5113495bSYour Name 			msdu_end->user_rssi,
382*5113495bSYour Name 			msdu_end->pkt_type,
383*5113495bSYour Name 			msdu_end->sgi,
384*5113495bSYour Name 			msdu_end->rate_mcs,
385*5113495bSYour Name 			msdu_end->receive_bandwidth,
386*5113495bSYour Name 			msdu_end->reception_type,
387*5113495bSYour Name 			msdu_end->mimo_ss_bitmap,
388*5113495bSYour Name 			msdu_end->msdu_done_copy,
389*5113495bSYour Name 			msdu_end->flow_id_toeplitz);
390*5113495bSYour Name 
391*5113495bSYour Name 	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_HAL,
392*5113495bSYour Name 			"rx_msdu_end tlv (5/5)- "
393*5113495bSYour Name 			"ppdu_start_timestamp_63_32 :%x "
394*5113495bSYour Name 			"sw_phy_meta_data :%x "
395*5113495bSYour Name 			"ppdu_start_timestamp_31_0 :%x "
396*5113495bSYour Name 			"toeplitz_hash_2_or_4 :%x "
397*5113495bSYour Name 			"reserved_28a :%x "
398*5113495bSYour Name 			"sa_15_0 :%x "
399*5113495bSYour Name 			"sa_47_16 :%x "
400*5113495bSYour Name 			"first_mpdu :%x "
401*5113495bSYour Name 			"reserved_30a :%x "
402*5113495bSYour Name 			"mcast_bcast :%x "
403*5113495bSYour Name 			"ast_index_not_found :%x "
404*5113495bSYour Name 			"ast_index_timeout :%x "
405*5113495bSYour Name 			"power_mgmt :%x "
406*5113495bSYour Name 			"non_qos :%x "
407*5113495bSYour Name 			"null_data :%x "
408*5113495bSYour Name 			"mgmt_type :%x "
409*5113495bSYour Name 			"ctrl_type :%x "
410*5113495bSYour Name 			"more_data :%x "
411*5113495bSYour Name 			"eosp :%x "
412*5113495bSYour Name 			"a_msdu_error :%x "
413*5113495bSYour Name 			"reserved_30b :%x "
414*5113495bSYour Name 			"order :%x "
415*5113495bSYour Name 			"wifi_parser_error :%x "
416*5113495bSYour Name 			"overflow_err :%x "
417*5113495bSYour Name 			"msdu_length_err :%x "
418*5113495bSYour Name 			"tcp_udp_chksum_fail :%x "
419*5113495bSYour Name 			"ip_chksum_fail :%x "
420*5113495bSYour Name 			"sa_idx_invalid :%x "
421*5113495bSYour Name 			"da_idx_invalid :%x "
422*5113495bSYour Name 			"amsdu_addr_mismatch :%x "
423*5113495bSYour Name 			"rx_in_tx_decrypt_byp :%x "
424*5113495bSYour Name 			"encrypt_required :%x "
425*5113495bSYour Name 			"directed :%x "
426*5113495bSYour Name 			"buffer_fragment :%x "
427*5113495bSYour Name 			"mpdu_length_err :%x "
428*5113495bSYour Name 			"tkip_mic_err :%x "
429*5113495bSYour Name 			"decrypt_err :%x "
430*5113495bSYour Name 			"unencrypted_frame_err :%x "
431*5113495bSYour Name 			"fcs_err :%x "
432*5113495bSYour Name 			"reserved_31a :%x "
433*5113495bSYour Name 			"decrypt_status_code :%x "
434*5113495bSYour Name 			"rx_bitmap_not_updated :%x "
435*5113495bSYour Name 			"reserved_31b :%x "
436*5113495bSYour Name 			"msdu_done :%x",
437*5113495bSYour Name 			msdu_end->ppdu_start_timestamp_63_32,
438*5113495bSYour Name 			msdu_end->sw_phy_meta_data,
439*5113495bSYour Name 			msdu_end->ppdu_start_timestamp_31_0,
440*5113495bSYour Name 			msdu_end->toeplitz_hash_2_or_4,
441*5113495bSYour Name 			msdu_end->reserved_28a,
442*5113495bSYour Name 			msdu_end->sa_15_0,
443*5113495bSYour Name 			msdu_end->sa_47_16,
444*5113495bSYour Name 			msdu_end->first_mpdu,
445*5113495bSYour Name 			msdu_end->reserved_30a,
446*5113495bSYour Name 			msdu_end->mcast_bcast,
447*5113495bSYour Name 			msdu_end->ast_index_not_found,
448*5113495bSYour Name 			msdu_end->ast_index_timeout,
449*5113495bSYour Name 			msdu_end->power_mgmt,
450*5113495bSYour Name 			msdu_end->non_qos,
451*5113495bSYour Name 			msdu_end->null_data,
452*5113495bSYour Name 			msdu_end->mgmt_type,
453*5113495bSYour Name 			msdu_end->ctrl_type,
454*5113495bSYour Name 			msdu_end->more_data,
455*5113495bSYour Name 			msdu_end->eosp,
456*5113495bSYour Name 			msdu_end->a_msdu_error,
457*5113495bSYour Name 			msdu_end->reserved_30b,
458*5113495bSYour Name 			msdu_end->order,
459*5113495bSYour Name 			msdu_end->wifi_parser_error,
460*5113495bSYour Name 			msdu_end->overflow_err,
461*5113495bSYour Name 			msdu_end->msdu_length_err,
462*5113495bSYour Name 			msdu_end->tcp_udp_chksum_fail,
463*5113495bSYour Name 			msdu_end->ip_chksum_fail,
464*5113495bSYour Name 			msdu_end->sa_idx_invalid,
465*5113495bSYour Name 			msdu_end->da_idx_invalid,
466*5113495bSYour Name 			msdu_end->amsdu_addr_mismatch,
467*5113495bSYour Name 			msdu_end->rx_in_tx_decrypt_byp,
468*5113495bSYour Name 			msdu_end->encrypt_required,
469*5113495bSYour Name 			msdu_end->directed,
470*5113495bSYour Name 			msdu_end->buffer_fragment,
471*5113495bSYour Name 			msdu_end->mpdu_length_err,
472*5113495bSYour Name 			msdu_end->tkip_mic_err,
473*5113495bSYour Name 			msdu_end->decrypt_err,
474*5113495bSYour Name 			msdu_end->unencrypted_frame_err,
475*5113495bSYour Name 			msdu_end->fcs_err,
476*5113495bSYour Name 			msdu_end->reserved_31a,
477*5113495bSYour Name 			msdu_end->decrypt_status_code,
478*5113495bSYour Name 			msdu_end->rx_bitmap_not_updated,
479*5113495bSYour Name 			msdu_end->reserved_31b,
480*5113495bSYour Name 			msdu_end->msdu_done);
481*5113495bSYour Name }
482*5113495bSYour Name #else
hal_rx_dump_msdu_end_tlv_kiwi(void * msduend,uint8_t dbg_level)483*5113495bSYour Name static void hal_rx_dump_msdu_end_tlv_kiwi(void *msduend,
484*5113495bSYour Name 					  uint8_t dbg_level)
485*5113495bSYour Name {
486*5113495bSYour Name 	struct rx_msdu_end *msdu_end = (struct rx_msdu_end *)msduend;
487*5113495bSYour Name 
488*5113495bSYour Name 	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_HAL,
489*5113495bSYour Name 		       "rx_msdu_end tlv (1/7)- "
490*5113495bSYour Name 		       "rxpcu_mpdu_filter_in_category :%x"
491*5113495bSYour Name 		       "sw_frame_group_id :%x"
492*5113495bSYour Name 		       "reserved_0 :%x"
493*5113495bSYour Name 		       "phy_ppdu_id :%x"
494*5113495bSYour Name 		       "ip_hdr_chksum:%x"
495*5113495bSYour Name 		       "reported_mpdu_length :%x"
496*5113495bSYour Name 		       "reserved_1a :%x"
497*5113495bSYour Name 		       "key_id_octet :%x"
498*5113495bSYour Name 		       "cce_super_rule :%x"
499*5113495bSYour Name 		       "cce_classify_not_done_truncate :%x"
500*5113495bSYour Name 		       "cce_classify_not_done_cce_dis:%x"
501*5113495bSYour Name 		       "cumulative_l3_checksum :%x"
502*5113495bSYour Name 		       "rule_indication_31_0 :%x"
503*5113495bSYour Name 		       "rule_indication_63_32:%x"
504*5113495bSYour Name 		       "da_offset :%x"
505*5113495bSYour Name 		       "sa_offset :%x"
506*5113495bSYour Name 		       "da_offset_valid :%x"
507*5113495bSYour Name 		       "sa_offset_valid :%x"
508*5113495bSYour Name 		       "reserved_5a :%x"
509*5113495bSYour Name 		       "l3_type :%x",
510*5113495bSYour Name 			msdu_end->rxpcu_mpdu_filter_in_category,
511*5113495bSYour Name 			msdu_end->sw_frame_group_id,
512*5113495bSYour Name 			msdu_end->reserved_0,
513*5113495bSYour Name 			msdu_end->phy_ppdu_id,
514*5113495bSYour Name 			msdu_end->ip_hdr_chksum,
515*5113495bSYour Name 			msdu_end->reported_mpdu_length,
516*5113495bSYour Name 			msdu_end->reserved_1a,
517*5113495bSYour Name 			msdu_end->key_id_octet,
518*5113495bSYour Name 			msdu_end->cce_super_rule,
519*5113495bSYour Name 			msdu_end->cce_classify_not_done_truncate,
520*5113495bSYour Name 			msdu_end->cce_classify_not_done_cce_dis,
521*5113495bSYour Name 			msdu_end->cumulative_l3_checksum,
522*5113495bSYour Name 			msdu_end->rule_indication_31_0,
523*5113495bSYour Name 			msdu_end->rule_indication_63_32,
524*5113495bSYour Name 			msdu_end->da_offset,
525*5113495bSYour Name 			msdu_end->sa_offset,
526*5113495bSYour Name 			msdu_end->da_offset_valid,
527*5113495bSYour Name 			msdu_end->sa_offset_valid,
528*5113495bSYour Name 			msdu_end->reserved_5a,
529*5113495bSYour Name 			msdu_end->l3_type);
530*5113495bSYour Name 
531*5113495bSYour Name 	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_HAL,
532*5113495bSYour Name 		       "rx_msdu_end tlv (2/7)- "
533*5113495bSYour Name 		       "ipv6_options_crc :%x"
534*5113495bSYour Name 		       "tcp_seq_number :%x"
535*5113495bSYour Name 		       "tcp_ack_number :%x"
536*5113495bSYour Name 		       "tcp_flag :%x"
537*5113495bSYour Name 		       "lro_eligible :%x"
538*5113495bSYour Name 		       "reserved_9a :%x"
539*5113495bSYour Name 		       "window_size :%x"
540*5113495bSYour Name 		       "tcp_udp_chksum :%x"
541*5113495bSYour Name 		       "sa_idx_timeout :%x"
542*5113495bSYour Name 		       "da_idx_timeout :%x"
543*5113495bSYour Name 		       "msdu_limit_error :%x"
544*5113495bSYour Name 		       "flow_idx_timeout :%x"
545*5113495bSYour Name 		       "flow_idx_invalid :%x"
546*5113495bSYour Name 		       "wifi_parser_error :%x"
547*5113495bSYour Name 		       "amsdu_parser_error :%x"
548*5113495bSYour Name 		       "sa_is_valid :%x"
549*5113495bSYour Name 		       "da_is_valid :%x"
550*5113495bSYour Name 		       "da_is_mcbc :%x"
551*5113495bSYour Name 		       "l3_header_padding :%x"
552*5113495bSYour Name 		       "first_msdu :%x"
553*5113495bSYour Name 		       "last_msdu :%x",
554*5113495bSYour Name 		       msdu_end->ipv6_options_crc,
555*5113495bSYour Name 		       msdu_end->tcp_seq_number,
556*5113495bSYour Name 		       msdu_end->tcp_ack_number,
557*5113495bSYour Name 		       msdu_end->tcp_flag,
558*5113495bSYour Name 		       msdu_end->lro_eligible,
559*5113495bSYour Name 		       msdu_end->reserved_9a,
560*5113495bSYour Name 		       msdu_end->window_size,
561*5113495bSYour Name 		       msdu_end->tcp_udp_chksum,
562*5113495bSYour Name 		       msdu_end->sa_idx_timeout,
563*5113495bSYour Name 		       msdu_end->da_idx_timeout,
564*5113495bSYour Name 		       msdu_end->msdu_limit_error,
565*5113495bSYour Name 		       msdu_end->flow_idx_timeout,
566*5113495bSYour Name 		       msdu_end->flow_idx_invalid,
567*5113495bSYour Name 		       msdu_end->wifi_parser_error,
568*5113495bSYour Name 		       msdu_end->amsdu_parser_error,
569*5113495bSYour Name 		       msdu_end->sa_is_valid,
570*5113495bSYour Name 		       msdu_end->da_is_valid,
571*5113495bSYour Name 		       msdu_end->da_is_mcbc,
572*5113495bSYour Name 		       msdu_end->l3_header_padding,
573*5113495bSYour Name 		       msdu_end->first_msdu,
574*5113495bSYour Name 		       msdu_end->last_msdu);
575*5113495bSYour Name 
576*5113495bSYour Name 	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_HAL,
577*5113495bSYour Name 		       "rx_msdu_end tlv (3/7)"
578*5113495bSYour Name 		       "tcp_udp_chksum_fail_copy :%x"
579*5113495bSYour Name 		       "ip_chksum_fail_copy :%x"
580*5113495bSYour Name 		       "sa_idx :%x"
581*5113495bSYour Name 		       "da_idx_or_sw_peer_id :%x"
582*5113495bSYour Name 		       "msdu_drop :%x"
583*5113495bSYour Name 		       "reo_destination_indication :%x"
584*5113495bSYour Name 		       "flow_idx :%x"
585*5113495bSYour Name 		       "reserved_12a :%x"
586*5113495bSYour Name 		       "fse_metadata :%x"
587*5113495bSYour Name 		       "cce_metadata :%x"
588*5113495bSYour Name 		       "sa_sw_peer_id:%x"
589*5113495bSYour Name 		       "aggregation_count :%x"
590*5113495bSYour Name 		       "flow_aggregation_continuation:%x"
591*5113495bSYour Name 		       "fisa_timeout :%x"
592*5113495bSYour Name 		       "reserved_15a :%x"
593*5113495bSYour Name 		       "cumulative_l4_checksum :%x"
594*5113495bSYour Name 		       "cumulative_ip_length :%x"
595*5113495bSYour Name 		       "service_code :%x"
596*5113495bSYour Name 		       "priority_valid :%x",
597*5113495bSYour Name 		       msdu_end->tcp_udp_chksum_fail_copy,
598*5113495bSYour Name 		       msdu_end->ip_chksum_fail_copy,
599*5113495bSYour Name 		       msdu_end->sa_idx,
600*5113495bSYour Name 		       msdu_end->da_idx_or_sw_peer_id,
601*5113495bSYour Name 		       msdu_end->msdu_drop,
602*5113495bSYour Name 		       msdu_end->reo_destination_indication,
603*5113495bSYour Name 		       msdu_end->flow_idx,
604*5113495bSYour Name 		       msdu_end->reserved_12a,
605*5113495bSYour Name 		       msdu_end->fse_metadata,
606*5113495bSYour Name 		       msdu_end->cce_metadata,
607*5113495bSYour Name 		       msdu_end->sa_sw_peer_id,
608*5113495bSYour Name 		       msdu_end->aggregation_count,
609*5113495bSYour Name 		       msdu_end->flow_aggregation_continuation,
610*5113495bSYour Name 		       msdu_end->fisa_timeout,
611*5113495bSYour Name 		       msdu_end->reserved_15a,
612*5113495bSYour Name 		       msdu_end->cumulative_l4_checksum,
613*5113495bSYour Name 		       msdu_end->cumulative_ip_length,
614*5113495bSYour Name 		       msdu_end->service_code,
615*5113495bSYour Name 		       msdu_end->priority_valid);
616*5113495bSYour Name 
617*5113495bSYour Name 	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_HAL,
618*5113495bSYour Name 		       "rx_msdu_end tlv (4/7)"
619*5113495bSYour Name 		       "reserved_17a :%x"
620*5113495bSYour Name 		       "msdu_length :%x"
621*5113495bSYour Name 		       "ipsec_esp :%x"
622*5113495bSYour Name 		       "l3_offset :%x"
623*5113495bSYour Name 		       "ipsec_ah :%x"
624*5113495bSYour Name 		       "l4_offset :%x"
625*5113495bSYour Name 		       "msdu_number :%x"
626*5113495bSYour Name 		       "decap_format :%x"
627*5113495bSYour Name 		       "ipv4_proto :%x"
628*5113495bSYour Name 		       "ipv6_proto :%x"
629*5113495bSYour Name 		       "tcp_proto :%x"
630*5113495bSYour Name 		       "udp_proto :%x"
631*5113495bSYour Name 		       "ip_frag :%x"
632*5113495bSYour Name 		       "tcp_only_ack :%x"
633*5113495bSYour Name 		       "da_is_bcast_mcast :%x"
634*5113495bSYour Name 		       "toeplitz_hash_sel :%x"
635*5113495bSYour Name 		       "ip_fixed_header_valid:%x"
636*5113495bSYour Name 		       "ip_extn_header_valid :%x"
637*5113495bSYour Name 		       "tcp_udp_header_valid :%x",
638*5113495bSYour Name 		       msdu_end->reserved_17a,
639*5113495bSYour Name 		       msdu_end->msdu_length,
640*5113495bSYour Name 		       msdu_end->ipsec_esp,
641*5113495bSYour Name 		       msdu_end->l3_offset,
642*5113495bSYour Name 		       msdu_end->ipsec_ah,
643*5113495bSYour Name 		       msdu_end->l4_offset,
644*5113495bSYour Name 		       msdu_end->msdu_number,
645*5113495bSYour Name 		       msdu_end->decap_format,
646*5113495bSYour Name 		       msdu_end->ipv4_proto,
647*5113495bSYour Name 		       msdu_end->ipv6_proto,
648*5113495bSYour Name 		       msdu_end->tcp_proto,
649*5113495bSYour Name 		       msdu_end->udp_proto,
650*5113495bSYour Name 		       msdu_end->ip_frag,
651*5113495bSYour Name 		       msdu_end->tcp_only_ack,
652*5113495bSYour Name 		       msdu_end->da_is_bcast_mcast,
653*5113495bSYour Name 		       msdu_end->toeplitz_hash_sel,
654*5113495bSYour Name 		       msdu_end->ip_fixed_header_valid,
655*5113495bSYour Name 		       msdu_end->ip_extn_header_valid,
656*5113495bSYour Name 		       msdu_end->tcp_udp_header_valid);
657*5113495bSYour Name 
658*5113495bSYour Name 	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_HAL,
659*5113495bSYour Name 		       "rx_msdu_end tlv (5/7)"
660*5113495bSYour Name 		       "mesh_control_present :%x"
661*5113495bSYour Name 		       "ldpc :%x"
662*5113495bSYour Name 		       "ip4_protocol_ip6_next_header :%x"
663*5113495bSYour Name 		       "toeplitz_hash_2_or_4 :%x"
664*5113495bSYour Name 		       "flow_id_toeplitz :%x"
665*5113495bSYour Name 		       "user_rssi :%x"
666*5113495bSYour Name 		       "pkt_type :%x"
667*5113495bSYour Name 		       "stbc :%x"
668*5113495bSYour Name 		       "sgi :%x"
669*5113495bSYour Name 		       "rate_mcs :%x"
670*5113495bSYour Name 		       "receive_bandwidth :%x"
671*5113495bSYour Name 		       "reception_type :%x"
672*5113495bSYour Name 		       "mimo_ss_bitmap :%x"
673*5113495bSYour Name 		       "ppdu_start_timestamp_31_0 :%x"
674*5113495bSYour Name 		       "ppdu_start_timestamp_63_32 :%x"
675*5113495bSYour Name 		       "sw_phy_meta_data :%x"
676*5113495bSYour Name 		       "vlan_ctag_ci :%x"
677*5113495bSYour Name 		       "vlan_stag_ci :%x"
678*5113495bSYour Name 		       "first_mpdu :%x"
679*5113495bSYour Name 		       "reserved_30a :%x"
680*5113495bSYour Name 		       "mcast_bcast :%x",
681*5113495bSYour Name 		       msdu_end->mesh_control_present,
682*5113495bSYour Name 		       msdu_end->ldpc,
683*5113495bSYour Name 		       msdu_end->ip4_protocol_ip6_next_header,
684*5113495bSYour Name 		       msdu_end->toeplitz_hash_2_or_4,
685*5113495bSYour Name 		       msdu_end->flow_id_toeplitz,
686*5113495bSYour Name 		       msdu_end->user_rssi,
687*5113495bSYour Name 		       msdu_end->pkt_type,
688*5113495bSYour Name 		       msdu_end->stbc,
689*5113495bSYour Name 		       msdu_end->sgi,
690*5113495bSYour Name 		       msdu_end->rate_mcs,
691*5113495bSYour Name 		       msdu_end->receive_bandwidth,
692*5113495bSYour Name 		       msdu_end->reception_type,
693*5113495bSYour Name 		       msdu_end->mimo_ss_bitmap,
694*5113495bSYour Name 		       msdu_end->ppdu_start_timestamp_31_0,
695*5113495bSYour Name 		       msdu_end->ppdu_start_timestamp_63_32,
696*5113495bSYour Name 		       msdu_end->sw_phy_meta_data,
697*5113495bSYour Name 		       msdu_end->vlan_ctag_ci,
698*5113495bSYour Name 		       msdu_end->vlan_stag_ci,
699*5113495bSYour Name 		       msdu_end->first_mpdu,
700*5113495bSYour Name 		       msdu_end->reserved_30a,
701*5113495bSYour Name 		       msdu_end->mcast_bcast);
702*5113495bSYour Name 
703*5113495bSYour Name 	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_HAL,
704*5113495bSYour Name 		       "rx_msdu_end tlv (6/7)"
705*5113495bSYour Name 		       "ast_index_not_found :%x"
706*5113495bSYour Name 		       "ast_index_timeout :%x"
707*5113495bSYour Name 		       "power_mgmt :%x"
708*5113495bSYour Name 		       "non_qos :%x"
709*5113495bSYour Name 		       "null_data :%x"
710*5113495bSYour Name 		       "mgmt_type :%x"
711*5113495bSYour Name 		       "ctrl_type :%x"
712*5113495bSYour Name 		       "more_data :%x"
713*5113495bSYour Name 		       "eosp :%x"
714*5113495bSYour Name 		       "a_msdu_error :%x"
715*5113495bSYour Name 		       "fragment_flag:%x"
716*5113495bSYour Name 		       "order:%x"
717*5113495bSYour Name 		       "cce_match :%x"
718*5113495bSYour Name 		       "overflow_err :%x"
719*5113495bSYour Name 		       "msdu_length_err :%x"
720*5113495bSYour Name 		       "tcp_udp_chksum_fail :%x"
721*5113495bSYour Name 		       "ip_chksum_fail :%x"
722*5113495bSYour Name 		       "sa_idx_invalid :%x"
723*5113495bSYour Name 		       "da_idx_invalid :%x"
724*5113495bSYour Name 		       "reserved_30b :%x",
725*5113495bSYour Name 		       msdu_end->ast_index_not_found,
726*5113495bSYour Name 		       msdu_end->ast_index_timeout,
727*5113495bSYour Name 		       msdu_end->power_mgmt,
728*5113495bSYour Name 		       msdu_end->non_qos,
729*5113495bSYour Name 		       msdu_end->null_data,
730*5113495bSYour Name 		       msdu_end->mgmt_type,
731*5113495bSYour Name 		       msdu_end->ctrl_type,
732*5113495bSYour Name 		       msdu_end->more_data,
733*5113495bSYour Name 		       msdu_end->eosp,
734*5113495bSYour Name 		       msdu_end->a_msdu_error,
735*5113495bSYour Name 		       msdu_end->fragment_flag,
736*5113495bSYour Name 		       msdu_end->order,
737*5113495bSYour Name 		       msdu_end->cce_match,
738*5113495bSYour Name 		       msdu_end->overflow_err,
739*5113495bSYour Name 		       msdu_end->msdu_length_err,
740*5113495bSYour Name 		       msdu_end->tcp_udp_chksum_fail,
741*5113495bSYour Name 		       msdu_end->ip_chksum_fail,
742*5113495bSYour Name 		       msdu_end->sa_idx_invalid,
743*5113495bSYour Name 		       msdu_end->da_idx_invalid,
744*5113495bSYour Name 		       msdu_end->reserved_30b);
745*5113495bSYour Name 
746*5113495bSYour Name 	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_HAL,
747*5113495bSYour Name 		       "rx_msdu_end tlv (7/7)"
748*5113495bSYour Name 		       "rx_in_tx_decrypt_byp :%x"
749*5113495bSYour Name 		       "encrypt_required :%x"
750*5113495bSYour Name 		       "directed :%x"
751*5113495bSYour Name 		       "buffer_fragment :%x"
752*5113495bSYour Name 		       "mpdu_length_err :%x"
753*5113495bSYour Name 		       "tkip_mic_err :%x"
754*5113495bSYour Name 		       "decrypt_err :%x"
755*5113495bSYour Name 		       "unencrypted_frame_err:%x"
756*5113495bSYour Name 		       "fcs_err :%x"
757*5113495bSYour Name 		       "reserved_31a :%x"
758*5113495bSYour Name 		       "decrypt_status_code :%x"
759*5113495bSYour Name 		       "rx_bitmap_not_updated:%x"
760*5113495bSYour Name 		       "reserved_31b :%x"
761*5113495bSYour Name 		       "msdu_done :%x",
762*5113495bSYour Name 		       msdu_end->rx_in_tx_decrypt_byp,
763*5113495bSYour Name 		       msdu_end->encrypt_required,
764*5113495bSYour Name 		       msdu_end->directed,
765*5113495bSYour Name 		       msdu_end->buffer_fragment,
766*5113495bSYour Name 		       msdu_end->mpdu_length_err,
767*5113495bSYour Name 		       msdu_end->tkip_mic_err,
768*5113495bSYour Name 		       msdu_end->decrypt_err,
769*5113495bSYour Name 		       msdu_end->unencrypted_frame_err,
770*5113495bSYour Name 		       msdu_end->fcs_err,
771*5113495bSYour Name 		       msdu_end->reserved_31a,
772*5113495bSYour Name 		       msdu_end->decrypt_status_code,
773*5113495bSYour Name 		       msdu_end->rx_bitmap_not_updated,
774*5113495bSYour Name 		       msdu_end->reserved_31b,
775*5113495bSYour Name 		       msdu_end->msdu_done);
776*5113495bSYour Name }
777*5113495bSYour Name #endif
778*5113495bSYour Name 
779*5113495bSYour Name #ifdef NO_RX_PKT_HDR_TLV
hal_rx_dump_pkt_hdr_tlv_kiwi(struct rx_pkt_tlvs * pkt_tlvs,uint8_t dbg_level)780*5113495bSYour Name static inline void hal_rx_dump_pkt_hdr_tlv_kiwi(struct rx_pkt_tlvs *pkt_tlvs,
781*5113495bSYour Name 						uint8_t dbg_level)
782*5113495bSYour Name {
783*5113495bSYour Name }
784*5113495bSYour Name 
785*5113495bSYour Name static inline
hal_register_rx_pkt_hdr_tlv_api_kiwi(struct hal_soc * hal_soc)786*5113495bSYour Name void hal_register_rx_pkt_hdr_tlv_api_kiwi(struct hal_soc *hal_soc)
787*5113495bSYour Name {
788*5113495bSYour Name }
789*5113495bSYour Name 
hal_rx_desc_get_80211_hdr_be(void * hw_desc_addr)790*5113495bSYour Name static uint8_t *hal_rx_desc_get_80211_hdr_be(void *hw_desc_addr)
791*5113495bSYour Name {
792*5113495bSYour Name 	uint8_t *rx_pkt_hdr;
793*5113495bSYour Name 	struct rx_mon_pkt_tlvs *rx_desc =
794*5113495bSYour Name 					(struct rx_mon_pkt_tlvs *)hw_desc_addr;
795*5113495bSYour Name 
796*5113495bSYour Name 	rx_pkt_hdr = &rx_desc->pkt_hdr_tlv.rx_pkt_hdr[0];
797*5113495bSYour Name 
798*5113495bSYour Name 	return rx_pkt_hdr;
799*5113495bSYour Name }
800*5113495bSYour Name #else
hal_rx_desc_get_80211_hdr_be(void * hw_desc_addr)801*5113495bSYour Name static uint8_t *hal_rx_desc_get_80211_hdr_be(void *hw_desc_addr)
802*5113495bSYour Name {
803*5113495bSYour Name 	struct rx_pkt_tlvs *rx_desc = (struct rx_pkt_tlvs *)hw_desc_addr;
804*5113495bSYour Name 	uint8_t *rx_pkt_hdr;
805*5113495bSYour Name 
806*5113495bSYour Name 	rx_pkt_hdr = &rx_desc->pkt_hdr_tlv.rx_pkt_hdr[0];
807*5113495bSYour Name 
808*5113495bSYour Name 	return rx_pkt_hdr;
809*5113495bSYour Name }
810*5113495bSYour Name 
811*5113495bSYour Name /**
812*5113495bSYour Name  * hal_rx_dump_pkt_hdr_tlv_kiwi() - dump RX pkt header TLV in hex format
813*5113495bSYour Name  * @pkt_tlvs: pointer the pkt_hdr_tlv in pkt.
814*5113495bSYour Name  * @dbg_level: log level.
815*5113495bSYour Name  *
816*5113495bSYour Name  * Return: void
817*5113495bSYour Name  */
hal_rx_dump_pkt_hdr_tlv_kiwi(struct rx_pkt_tlvs * pkt_tlvs,uint8_t dbg_level)818*5113495bSYour Name static inline void hal_rx_dump_pkt_hdr_tlv_kiwi(struct rx_pkt_tlvs *pkt_tlvs,
819*5113495bSYour Name 						uint8_t dbg_level)
820*5113495bSYour Name {
821*5113495bSYour Name 	struct rx_pkt_hdr_tlv *pkt_hdr_tlv = &pkt_tlvs->pkt_hdr_tlv;
822*5113495bSYour Name 
823*5113495bSYour Name 	hal_verbose_debug("\n---------------\n"
824*5113495bSYour Name 			  "rx_pkt_hdr_tlv\n"
825*5113495bSYour Name 			  "---------------\n"
826*5113495bSYour Name 			  "phy_ppdu_id 0x%x ",
827*5113495bSYour Name 			  pkt_hdr_tlv->phy_ppdu_id);
828*5113495bSYour Name 
829*5113495bSYour Name 	hal_verbose_hex_dump(pkt_hdr_tlv->rx_pkt_hdr,
830*5113495bSYour Name 			     sizeof(pkt_hdr_tlv->rx_pkt_hdr));
831*5113495bSYour Name }
832*5113495bSYour Name 
833*5113495bSYour Name /**
834*5113495bSYour Name  * hal_register_rx_pkt_hdr_tlv_api_kiwi: register all rx_pkt_hdr_tlv related api
835*5113495bSYour Name  * @hal_soc: HAL soc handler
836*5113495bSYour Name  *
837*5113495bSYour Name  * Return: none
838*5113495bSYour Name  */
839*5113495bSYour Name static inline
hal_register_rx_pkt_hdr_tlv_api_kiwi(struct hal_soc * hal_soc)840*5113495bSYour Name void hal_register_rx_pkt_hdr_tlv_api_kiwi(struct hal_soc *hal_soc)
841*5113495bSYour Name {
842*5113495bSYour Name 	hal_soc->ops->hal_rx_pkt_tlv_offset_get =
843*5113495bSYour Name 				hal_rx_pkt_tlv_offset_get_generic;
844*5113495bSYour Name }
845*5113495bSYour Name #endif
846*5113495bSYour Name 
847*5113495bSYour Name /**
848*5113495bSYour Name  * hal_rx_dump_mpdu_start_tlv_kiwi(): dump RX mpdu_start TLV in structured
849*5113495bSYour Name  *			       human readable format.
850*5113495bSYour Name  * @mpdustart: pointer the rx_attention TLV in pkt.
851*5113495bSYour Name  * @dbg_level: log level.
852*5113495bSYour Name  *
853*5113495bSYour Name  * Return: void
854*5113495bSYour Name  */
hal_rx_dump_mpdu_start_tlv_kiwi(void * mpdustart,uint8_t dbg_level)855*5113495bSYour Name static inline void hal_rx_dump_mpdu_start_tlv_kiwi(void *mpdustart,
856*5113495bSYour Name 						   uint8_t dbg_level)
857*5113495bSYour Name {
858*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start = (struct rx_mpdu_start *)mpdustart;
859*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info =
860*5113495bSYour Name 		(struct rx_mpdu_info *)&mpdu_start->rx_mpdu_info_details;
861*5113495bSYour Name 
862*5113495bSYour Name 	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_HAL,
863*5113495bSYour Name 		       "rx_mpdu_start tlv (1/5) - "
864*5113495bSYour Name 		       "rx_reo_queue_desc_addr_31_0 :%x"
865*5113495bSYour Name 		       "rx_reo_queue_desc_addr_39_32 :%x"
866*5113495bSYour Name 		       "receive_queue_number:%x "
867*5113495bSYour Name 		       "pre_delim_err_warning:%x "
868*5113495bSYour Name 		       "first_delim_err:%x "
869*5113495bSYour Name 		       "reserved_2a:%x "
870*5113495bSYour Name 		       "pn_31_0:%x "
871*5113495bSYour Name 		       "pn_63_32:%x "
872*5113495bSYour Name 		       "pn_95_64:%x "
873*5113495bSYour Name 		       "pn_127_96:%x "
874*5113495bSYour Name 		       "epd_en:%x "
875*5113495bSYour Name 		       "all_frames_shall_be_encrypted  :%x"
876*5113495bSYour Name 		       "encrypt_type:%x "
877*5113495bSYour Name 		       "wep_key_width_for_variable_key :%x"
878*5113495bSYour Name 		       "bssid_hit:%x "
879*5113495bSYour Name 		       "bssid_number:%x "
880*5113495bSYour Name 		       "tid:%x "
881*5113495bSYour Name 		       "reserved_7a:%x "
882*5113495bSYour Name 		       "peer_meta_data:%x ",
883*5113495bSYour Name 		       mpdu_info->rx_reo_queue_desc_addr_31_0,
884*5113495bSYour Name 		       mpdu_info->rx_reo_queue_desc_addr_39_32,
885*5113495bSYour Name 		       mpdu_info->receive_queue_number,
886*5113495bSYour Name 		       mpdu_info->pre_delim_err_warning,
887*5113495bSYour Name 		       mpdu_info->first_delim_err,
888*5113495bSYour Name 		       mpdu_info->reserved_2a,
889*5113495bSYour Name 		       mpdu_info->pn_31_0,
890*5113495bSYour Name 		       mpdu_info->pn_63_32,
891*5113495bSYour Name 		       mpdu_info->pn_95_64,
892*5113495bSYour Name 		       mpdu_info->pn_127_96,
893*5113495bSYour Name 		       mpdu_info->epd_en,
894*5113495bSYour Name 		       mpdu_info->all_frames_shall_be_encrypted,
895*5113495bSYour Name 		       mpdu_info->encrypt_type,
896*5113495bSYour Name 		       mpdu_info->wep_key_width_for_variable_key,
897*5113495bSYour Name 		       mpdu_info->bssid_hit,
898*5113495bSYour Name 		       mpdu_info->bssid_number,
899*5113495bSYour Name 		       mpdu_info->tid,
900*5113495bSYour Name 		       mpdu_info->reserved_7a,
901*5113495bSYour Name 		       mpdu_info->peer_meta_data);
902*5113495bSYour Name 
903*5113495bSYour Name 	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_HAL,
904*5113495bSYour Name 		       "rx_mpdu_start tlv (2/5) - "
905*5113495bSYour Name 		       "rxpcu_mpdu_filter_in_category  :%x"
906*5113495bSYour Name 		       "sw_frame_group_id:%x "
907*5113495bSYour Name 		       "ndp_frame:%x "
908*5113495bSYour Name 		       "phy_err:%x "
909*5113495bSYour Name 		       "phy_err_during_mpdu_header  :%x"
910*5113495bSYour Name 		       "protocol_version_err:%x "
911*5113495bSYour Name 		       "ast_based_lookup_valid:%x "
912*5113495bSYour Name 		       "reserved_9a:%x "
913*5113495bSYour Name 		       "phy_ppdu_id:%x "
914*5113495bSYour Name 		       "ast_index:%x "
915*5113495bSYour Name 		       "sw_peer_id:%x "
916*5113495bSYour Name 		       "mpdu_frame_control_valid:%x "
917*5113495bSYour Name 		       "mpdu_duration_valid:%x "
918*5113495bSYour Name 		       "mac_addr_ad1_valid:%x "
919*5113495bSYour Name 		       "mac_addr_ad2_valid:%x "
920*5113495bSYour Name 		       "mac_addr_ad3_valid:%x "
921*5113495bSYour Name 		       "mac_addr_ad4_valid:%x "
922*5113495bSYour Name 		       "mpdu_sequence_control_valid :%x"
923*5113495bSYour Name 		       "mpdu_qos_control_valid:%x "
924*5113495bSYour Name 		       "mpdu_ht_control_valid:%x "
925*5113495bSYour Name 		       "frame_encryption_info_valid :%x",
926*5113495bSYour Name 		       mpdu_info->rxpcu_mpdu_filter_in_category,
927*5113495bSYour Name 		       mpdu_info->sw_frame_group_id,
928*5113495bSYour Name 		       mpdu_info->ndp_frame,
929*5113495bSYour Name 		       mpdu_info->phy_err,
930*5113495bSYour Name 		       mpdu_info->phy_err_during_mpdu_header,
931*5113495bSYour Name 		       mpdu_info->protocol_version_err,
932*5113495bSYour Name 		       mpdu_info->ast_based_lookup_valid,
933*5113495bSYour Name 		       mpdu_info->reserved_9a,
934*5113495bSYour Name 		       mpdu_info->phy_ppdu_id,
935*5113495bSYour Name 		       mpdu_info->ast_index,
936*5113495bSYour Name 		       mpdu_info->sw_peer_id,
937*5113495bSYour Name 		       mpdu_info->mpdu_frame_control_valid,
938*5113495bSYour Name 		       mpdu_info->mpdu_duration_valid,
939*5113495bSYour Name 		       mpdu_info->mac_addr_ad1_valid,
940*5113495bSYour Name 		       mpdu_info->mac_addr_ad2_valid,
941*5113495bSYour Name 		       mpdu_info->mac_addr_ad3_valid,
942*5113495bSYour Name 		       mpdu_info->mac_addr_ad4_valid,
943*5113495bSYour Name 		       mpdu_info->mpdu_sequence_control_valid,
944*5113495bSYour Name 		       mpdu_info->mpdu_qos_control_valid,
945*5113495bSYour Name 		       mpdu_info->mpdu_ht_control_valid,
946*5113495bSYour Name 		       mpdu_info->frame_encryption_info_valid);
947*5113495bSYour Name 
948*5113495bSYour Name 	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_HAL,
949*5113495bSYour Name 		       "rx_mpdu_start tlv (3/5) - "
950*5113495bSYour Name 		       "mpdu_fragment_number:%x "
951*5113495bSYour Name 		       "more_fragment_flag:%x "
952*5113495bSYour Name 		       "reserved_11a:%x "
953*5113495bSYour Name 		       "fr_ds:%x "
954*5113495bSYour Name 		       "to_ds:%x "
955*5113495bSYour Name 		       "encrypted:%x "
956*5113495bSYour Name 		       "mpdu_retry:%x "
957*5113495bSYour Name 		       "mpdu_sequence_number:%x "
958*5113495bSYour Name 		       "key_id_octet:%x "
959*5113495bSYour Name 		       "new_peer_entry:%x "
960*5113495bSYour Name 		       "decrypt_needed:%x "
961*5113495bSYour Name 		       "decap_type:%x "
962*5113495bSYour Name 		       "rx_insert_vlan_c_tag_padding :%x"
963*5113495bSYour Name 		       "rx_insert_vlan_s_tag_padding :%x"
964*5113495bSYour Name 		       "strip_vlan_c_tag_decap:%x "
965*5113495bSYour Name 		       "strip_vlan_s_tag_decap:%x "
966*5113495bSYour Name 		       "pre_delim_count:%x "
967*5113495bSYour Name 		       "ampdu_flag:%x "
968*5113495bSYour Name 		       "bar_frame:%x "
969*5113495bSYour Name 		       "raw_mpdu:%x "
970*5113495bSYour Name 		       "reserved_12:%x "
971*5113495bSYour Name 		       "mpdu_length:%x ",
972*5113495bSYour Name 		       mpdu_info->mpdu_fragment_number,
973*5113495bSYour Name 		       mpdu_info->more_fragment_flag,
974*5113495bSYour Name 		       mpdu_info->reserved_11a,
975*5113495bSYour Name 		       mpdu_info->fr_ds,
976*5113495bSYour Name 		       mpdu_info->to_ds,
977*5113495bSYour Name 		       mpdu_info->encrypted,
978*5113495bSYour Name 		       mpdu_info->mpdu_retry,
979*5113495bSYour Name 		       mpdu_info->mpdu_sequence_number,
980*5113495bSYour Name 		       mpdu_info->key_id_octet,
981*5113495bSYour Name 		       mpdu_info->new_peer_entry,
982*5113495bSYour Name 		       mpdu_info->decrypt_needed,
983*5113495bSYour Name 		       mpdu_info->decap_type,
984*5113495bSYour Name 		       mpdu_info->rx_insert_vlan_c_tag_padding,
985*5113495bSYour Name 		       mpdu_info->rx_insert_vlan_s_tag_padding,
986*5113495bSYour Name 		       mpdu_info->strip_vlan_c_tag_decap,
987*5113495bSYour Name 		       mpdu_info->strip_vlan_s_tag_decap,
988*5113495bSYour Name 		       mpdu_info->pre_delim_count,
989*5113495bSYour Name 		       mpdu_info->ampdu_flag,
990*5113495bSYour Name 		       mpdu_info->bar_frame,
991*5113495bSYour Name 		       mpdu_info->raw_mpdu,
992*5113495bSYour Name 		       mpdu_info->reserved_12,
993*5113495bSYour Name 		       mpdu_info->mpdu_length);
994*5113495bSYour Name 
995*5113495bSYour Name 	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_HAL,
996*5113495bSYour Name 		       "rx_mpdu_start tlv (4/5) - "
997*5113495bSYour Name 		       "mpdu_length:%x "
998*5113495bSYour Name 		       "first_mpdu:%x "
999*5113495bSYour Name 		       "mcast_bcast:%x "
1000*5113495bSYour Name 		       "ast_index_not_found:%x "
1001*5113495bSYour Name 		       "ast_index_timeout:%x "
1002*5113495bSYour Name 		       "power_mgmt:%x "
1003*5113495bSYour Name 		       "non_qos:%x "
1004*5113495bSYour Name 		       "null_data:%x "
1005*5113495bSYour Name 		       "mgmt_type:%x "
1006*5113495bSYour Name 		       "ctrl_type:%x "
1007*5113495bSYour Name 		       "more_data:%x "
1008*5113495bSYour Name 		       "eosp:%x "
1009*5113495bSYour Name 		       "fragment_flag:%x "
1010*5113495bSYour Name 		       "order:%x "
1011*5113495bSYour Name 		       "u_apsd_trigger:%x "
1012*5113495bSYour Name 		       "encrypt_required:%x "
1013*5113495bSYour Name 		       "directed:%x "
1014*5113495bSYour Name 		       "amsdu_present:%x "
1015*5113495bSYour Name 		       "reserved_13:%x "
1016*5113495bSYour Name 		       "mpdu_frame_control_field:%x "
1017*5113495bSYour Name 		       "mpdu_duration_field:%x ",
1018*5113495bSYour Name 		       mpdu_info->mpdu_length,
1019*5113495bSYour Name 		       mpdu_info->first_mpdu,
1020*5113495bSYour Name 		       mpdu_info->mcast_bcast,
1021*5113495bSYour Name 		       mpdu_info->ast_index_not_found,
1022*5113495bSYour Name 		       mpdu_info->ast_index_timeout,
1023*5113495bSYour Name 		       mpdu_info->power_mgmt,
1024*5113495bSYour Name 		       mpdu_info->non_qos,
1025*5113495bSYour Name 		       mpdu_info->null_data,
1026*5113495bSYour Name 		       mpdu_info->mgmt_type,
1027*5113495bSYour Name 		       mpdu_info->ctrl_type,
1028*5113495bSYour Name 		       mpdu_info->more_data,
1029*5113495bSYour Name 		       mpdu_info->eosp,
1030*5113495bSYour Name 		       mpdu_info->fragment_flag,
1031*5113495bSYour Name 		       mpdu_info->order,
1032*5113495bSYour Name 		       mpdu_info->u_apsd_trigger,
1033*5113495bSYour Name 		       mpdu_info->encrypt_required,
1034*5113495bSYour Name 		       mpdu_info->directed,
1035*5113495bSYour Name 		       mpdu_info->amsdu_present,
1036*5113495bSYour Name 		       mpdu_info->reserved_13,
1037*5113495bSYour Name 		       mpdu_info->mpdu_frame_control_field,
1038*5113495bSYour Name 		       mpdu_info->mpdu_duration_field);
1039*5113495bSYour Name 
1040*5113495bSYour Name 	__QDF_TRACE_RL(dbg_level, QDF_MODULE_ID_HAL,
1041*5113495bSYour Name 		       "rx_mpdu_start tlv (5/5) - "
1042*5113495bSYour Name 		       "mac_addr_ad1_31_0:%x "
1043*5113495bSYour Name 		       "mac_addr_ad1_47_32:%x "
1044*5113495bSYour Name 		       "mac_addr_ad2_15_0:%x "
1045*5113495bSYour Name 		       "mac_addr_ad2_47_16:%x "
1046*5113495bSYour Name 		       "mac_addr_ad3_31_0:%x "
1047*5113495bSYour Name 		       "mac_addr_ad3_47_32:%x "
1048*5113495bSYour Name 		       "mpdu_sequence_control_field :%x"
1049*5113495bSYour Name 		       "mac_addr_ad4_31_0:%x "
1050*5113495bSYour Name 		       "mac_addr_ad4_47_32:%x "
1051*5113495bSYour Name 		       "mpdu_qos_control_field:%x "
1052*5113495bSYour Name 		       "mpdu_ht_control_field:%x "
1053*5113495bSYour Name 		       "vdev_id:%x "
1054*5113495bSYour Name 		       "service_code:%x "
1055*5113495bSYour Name 		       "priority_valid:%x "
1056*5113495bSYour Name 		       "reserved_23a:%x ",
1057*5113495bSYour Name 		       mpdu_info->mac_addr_ad1_31_0,
1058*5113495bSYour Name 		       mpdu_info->mac_addr_ad1_47_32,
1059*5113495bSYour Name 		       mpdu_info->mac_addr_ad2_15_0,
1060*5113495bSYour Name 		       mpdu_info->mac_addr_ad2_47_16,
1061*5113495bSYour Name 		       mpdu_info->mac_addr_ad3_31_0,
1062*5113495bSYour Name 		       mpdu_info->mac_addr_ad3_47_32,
1063*5113495bSYour Name 		       mpdu_info->mpdu_sequence_control_field,
1064*5113495bSYour Name 		       mpdu_info->mac_addr_ad4_31_0,
1065*5113495bSYour Name 		       mpdu_info->mac_addr_ad4_47_32,
1066*5113495bSYour Name 		       mpdu_info->mpdu_qos_control_field,
1067*5113495bSYour Name 		       mpdu_info->mpdu_ht_control_field,
1068*5113495bSYour Name 		       mpdu_info->vdev_id,
1069*5113495bSYour Name 		       mpdu_info->service_code,
1070*5113495bSYour Name 		       mpdu_info->priority_valid,
1071*5113495bSYour Name 		       mpdu_info->reserved_23a);
1072*5113495bSYour Name }
1073*5113495bSYour Name 
1074*5113495bSYour Name /**
1075*5113495bSYour Name  * hal_rx_dump_pkt_tlvs_kiwi(): API to print RX Pkt TLVS for kiwi
1076*5113495bSYour Name  * @hal_soc_hdl: hal_soc handle
1077*5113495bSYour Name  * @buf: pointer the pkt buffer
1078*5113495bSYour Name  * @dbg_level: log level
1079*5113495bSYour Name  *
1080*5113495bSYour Name  * Return: void
1081*5113495bSYour Name  */
hal_rx_dump_pkt_tlvs_kiwi(hal_soc_handle_t hal_soc_hdl,uint8_t * buf,uint8_t dbg_level)1082*5113495bSYour Name static void hal_rx_dump_pkt_tlvs_kiwi(hal_soc_handle_t hal_soc_hdl,
1083*5113495bSYour Name 				      uint8_t *buf, uint8_t dbg_level)
1084*5113495bSYour Name {
1085*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1086*5113495bSYour Name 	struct rx_msdu_end *msdu_end = &pkt_tlvs->msdu_end_tlv.rx_msdu_end;
1087*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
1088*5113495bSYour Name 				&pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
1089*5113495bSYour Name 
1090*5113495bSYour Name 	hal_rx_dump_msdu_end_tlv_kiwi(msdu_end, dbg_level);
1091*5113495bSYour Name 	hal_rx_dump_mpdu_start_tlv_kiwi(mpdu_start, dbg_level);
1092*5113495bSYour Name 	hal_rx_dump_pkt_hdr_tlv_kiwi(pkt_tlvs, dbg_level);
1093*5113495bSYour Name }
1094*5113495bSYour Name 
1095*5113495bSYour Name /**
1096*5113495bSYour Name  * hal_rx_get_mpdu_flags_from_tlv() - Populate the local mpdu_flags elements
1097*5113495bSYour Name  *				      from the rx tlvs
1098*5113495bSYour Name  * @mpdu_info: buf address to rx_mpdu_info
1099*5113495bSYour Name  *
1100*5113495bSYour Name  * Return: mpdu_flags.
1101*5113495bSYour Name  */
1102*5113495bSYour Name static inline uint32_t
hal_rx_get_mpdu_flags_from_tlv(struct rx_mpdu_info * mpdu_info)1103*5113495bSYour Name hal_rx_get_mpdu_flags_from_tlv(struct rx_mpdu_info *mpdu_info)
1104*5113495bSYour Name {
1105*5113495bSYour Name 	uint32_t mpdu_flags = 0;
1106*5113495bSYour Name 
1107*5113495bSYour Name 	if (mpdu_info->fragment_flag)
1108*5113495bSYour Name 		mpdu_flags |= HAL_MPDU_F_FRAGMENT;
1109*5113495bSYour Name 
1110*5113495bSYour Name 	if (mpdu_info->mpdu_retry)
1111*5113495bSYour Name 		mpdu_flags |= HAL_MPDU_F_RETRY_BIT;
1112*5113495bSYour Name 
1113*5113495bSYour Name 	if (mpdu_info->ampdu_flag)
1114*5113495bSYour Name 		mpdu_flags |= HAL_MPDU_F_AMPDU_FLAG;
1115*5113495bSYour Name 
1116*5113495bSYour Name 	if (mpdu_info->raw_mpdu)
1117*5113495bSYour Name 		mpdu_flags |= HAL_MPDU_F_RAW_AMPDU;
1118*5113495bSYour Name 
1119*5113495bSYour Name 	if (mpdu_info->mpdu_qos_control_valid)
1120*5113495bSYour Name 		mpdu_flags |= HAL_MPDU_F_QOS_CONTROL_VALID;
1121*5113495bSYour Name 
1122*5113495bSYour Name 	return mpdu_flags;
1123*5113495bSYour Name }
1124*5113495bSYour Name 
1125*5113495bSYour Name /**
1126*5113495bSYour Name  * hal_rx_tlv_populate_mpdu_desc_info_kiwi() - Populate the local mpdu_desc_info
1127*5113495bSYour Name  *			elements from the rx tlvs
1128*5113495bSYour Name  * @buf: start address of rx tlvs [Validated by caller]
1129*5113495bSYour Name  * @mpdu_desc_info_hdl: Buffer to populate the mpdu_dsc_info
1130*5113495bSYour Name  *			[To be validated by caller]
1131*5113495bSYour Name  *
1132*5113495bSYour Name  * Return: None
1133*5113495bSYour Name  */
1134*5113495bSYour Name static void
hal_rx_tlv_populate_mpdu_desc_info_kiwi(uint8_t * buf,void * mpdu_desc_info_hdl)1135*5113495bSYour Name hal_rx_tlv_populate_mpdu_desc_info_kiwi(uint8_t *buf,
1136*5113495bSYour Name 					void *mpdu_desc_info_hdl)
1137*5113495bSYour Name {
1138*5113495bSYour Name 	struct hal_rx_mpdu_desc_info *mpdu_desc_info =
1139*5113495bSYour Name 		(struct hal_rx_mpdu_desc_info *)mpdu_desc_info_hdl;
1140*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1141*5113495bSYour Name 	struct rx_mpdu_start *mpdu_start =
1142*5113495bSYour Name 					&pkt_tlvs->mpdu_start_tlv.rx_mpdu_start;
1143*5113495bSYour Name 	struct rx_mpdu_info *mpdu_info = &mpdu_start->rx_mpdu_info_details;
1144*5113495bSYour Name 
1145*5113495bSYour Name 	mpdu_desc_info->mpdu_seq = mpdu_info->mpdu_sequence_number;
1146*5113495bSYour Name 	mpdu_desc_info->mpdu_flags = hal_rx_get_mpdu_flags_from_tlv(mpdu_info);
1147*5113495bSYour Name 	mpdu_desc_info->peer_meta_data = mpdu_info->peer_meta_data;
1148*5113495bSYour Name 	mpdu_desc_info->bar_frame = mpdu_info->bar_frame;
1149*5113495bSYour Name }
1150*5113495bSYour Name 
1151*5113495bSYour Name /**
1152*5113495bSYour Name  * hal_reo_status_get_header_kiwi() - Process reo desc info
1153*5113495bSYour Name  * @ring_desc: Pointer to reo descriptor
1154*5113495bSYour Name  * @b: tlv type info
1155*5113495bSYour Name  * @h1: Pointer to hal_reo_status_header where info to be stored
1156*5113495bSYour Name  *
1157*5113495bSYour Name  * Return: none.
1158*5113495bSYour Name  *
1159*5113495bSYour Name  */
hal_reo_status_get_header_kiwi(hal_ring_desc_t ring_desc,int b,void * h1)1160*5113495bSYour Name static void hal_reo_status_get_header_kiwi(hal_ring_desc_t ring_desc, int b,
1161*5113495bSYour Name 					   void *h1)
1162*5113495bSYour Name {
1163*5113495bSYour Name 	uint64_t *d = (uint64_t *)ring_desc;
1164*5113495bSYour Name 	uint64_t val1 = 0;
1165*5113495bSYour Name 	struct hal_reo_status_header *h =
1166*5113495bSYour Name 			(struct hal_reo_status_header *)h1;
1167*5113495bSYour Name 
1168*5113495bSYour Name 	/* Offsets of descriptor fields defined in HW headers start
1169*5113495bSYour Name 	 * from the field after TLV header
1170*5113495bSYour Name 	 */
1171*5113495bSYour Name 	d += HAL_GET_NUM_QWORDS(sizeof(struct tlv_32_hdr));
1172*5113495bSYour Name 
1173*5113495bSYour Name 	switch (b) {
1174*5113495bSYour Name 	case HAL_REO_QUEUE_STATS_STATUS_TLV:
1175*5113495bSYour Name 		val1 = d[HAL_OFFSET_QW(REO_GET_QUEUE_STATS_STATUS,
1176*5113495bSYour Name 			STATUS_HEADER_REO_STATUS_NUMBER)];
1177*5113495bSYour Name 		break;
1178*5113495bSYour Name 	case HAL_REO_FLUSH_QUEUE_STATUS_TLV:
1179*5113495bSYour Name 		val1 = d[HAL_OFFSET_QW(REO_FLUSH_QUEUE_STATUS,
1180*5113495bSYour Name 			STATUS_HEADER_REO_STATUS_NUMBER)];
1181*5113495bSYour Name 		break;
1182*5113495bSYour Name 	case HAL_REO_FLUSH_CACHE_STATUS_TLV:
1183*5113495bSYour Name 		val1 = d[HAL_OFFSET_QW(REO_FLUSH_CACHE_STATUS,
1184*5113495bSYour Name 			STATUS_HEADER_REO_STATUS_NUMBER)];
1185*5113495bSYour Name 		break;
1186*5113495bSYour Name 	case HAL_REO_UNBLK_CACHE_STATUS_TLV:
1187*5113495bSYour Name 		val1 = d[HAL_OFFSET_QW(REO_UNBLOCK_CACHE_STATUS,
1188*5113495bSYour Name 			STATUS_HEADER_REO_STATUS_NUMBER)];
1189*5113495bSYour Name 		break;
1190*5113495bSYour Name 	case HAL_REO_TIMOUT_LIST_STATUS_TLV:
1191*5113495bSYour Name 		val1 = d[HAL_OFFSET_QW(REO_FLUSH_TIMEOUT_LIST_STATUS,
1192*5113495bSYour Name 			STATUS_HEADER_REO_STATUS_NUMBER)];
1193*5113495bSYour Name 		break;
1194*5113495bSYour Name 	case HAL_REO_DESC_THRES_STATUS_TLV:
1195*5113495bSYour Name 		val1 =
1196*5113495bSYour Name 		  d[HAL_OFFSET_QW(REO_DESCRIPTOR_THRESHOLD_REACHED_STATUS,
1197*5113495bSYour Name 		  STATUS_HEADER_REO_STATUS_NUMBER)];
1198*5113495bSYour Name 		break;
1199*5113495bSYour Name 	case HAL_REO_UPDATE_RX_QUEUE_STATUS_TLV:
1200*5113495bSYour Name 		val1 = d[HAL_OFFSET_QW(REO_UPDATE_RX_REO_QUEUE_STATUS,
1201*5113495bSYour Name 			STATUS_HEADER_REO_STATUS_NUMBER)];
1202*5113495bSYour Name 		break;
1203*5113495bSYour Name 	default:
1204*5113495bSYour Name 		qdf_nofl_err("ERROR: Unknown tlv\n");
1205*5113495bSYour Name 		break;
1206*5113495bSYour Name 	}
1207*5113495bSYour Name 	h->cmd_num =
1208*5113495bSYour Name 		HAL_GET_FIELD(
1209*5113495bSYour Name 			      UNIFORM_REO_STATUS_HEADER, REO_STATUS_NUMBER,
1210*5113495bSYour Name 			      val1);
1211*5113495bSYour Name 	h->exec_time =
1212*5113495bSYour Name 		HAL_GET_FIELD(UNIFORM_REO_STATUS_HEADER,
1213*5113495bSYour Name 			      CMD_EXECUTION_TIME, val1);
1214*5113495bSYour Name 	h->status =
1215*5113495bSYour Name 		HAL_GET_FIELD(UNIFORM_REO_STATUS_HEADER,
1216*5113495bSYour Name 			      REO_CMD_EXECUTION_STATUS, val1);
1217*5113495bSYour Name 	switch (b) {
1218*5113495bSYour Name 	case HAL_REO_QUEUE_STATS_STATUS_TLV:
1219*5113495bSYour Name 		val1 = d[HAL_OFFSET_QW(REO_GET_QUEUE_STATS_STATUS,
1220*5113495bSYour Name 			STATUS_HEADER_TIMESTAMP)];
1221*5113495bSYour Name 		break;
1222*5113495bSYour Name 	case HAL_REO_FLUSH_QUEUE_STATUS_TLV:
1223*5113495bSYour Name 		val1 = d[HAL_OFFSET_QW(REO_FLUSH_QUEUE_STATUS,
1224*5113495bSYour Name 			STATUS_HEADER_TIMESTAMP)];
1225*5113495bSYour Name 		break;
1226*5113495bSYour Name 	case HAL_REO_FLUSH_CACHE_STATUS_TLV:
1227*5113495bSYour Name 		val1 = d[HAL_OFFSET_QW(REO_FLUSH_CACHE_STATUS,
1228*5113495bSYour Name 			STATUS_HEADER_TIMESTAMP)];
1229*5113495bSYour Name 		break;
1230*5113495bSYour Name 	case HAL_REO_UNBLK_CACHE_STATUS_TLV:
1231*5113495bSYour Name 		val1 = d[HAL_OFFSET_QW(REO_UNBLOCK_CACHE_STATUS,
1232*5113495bSYour Name 			STATUS_HEADER_TIMESTAMP)];
1233*5113495bSYour Name 		break;
1234*5113495bSYour Name 	case HAL_REO_TIMOUT_LIST_STATUS_TLV:
1235*5113495bSYour Name 		val1 = d[HAL_OFFSET_QW(REO_FLUSH_TIMEOUT_LIST_STATUS,
1236*5113495bSYour Name 			STATUS_HEADER_TIMESTAMP)];
1237*5113495bSYour Name 		break;
1238*5113495bSYour Name 	case HAL_REO_DESC_THRES_STATUS_TLV:
1239*5113495bSYour Name 		val1 =
1240*5113495bSYour Name 		  d[HAL_OFFSET_QW(REO_DESCRIPTOR_THRESHOLD_REACHED_STATUS,
1241*5113495bSYour Name 		  STATUS_HEADER_TIMESTAMP)];
1242*5113495bSYour Name 		break;
1243*5113495bSYour Name 	case HAL_REO_UPDATE_RX_QUEUE_STATUS_TLV:
1244*5113495bSYour Name 		val1 = d[HAL_OFFSET_QW(REO_UPDATE_RX_REO_QUEUE_STATUS,
1245*5113495bSYour Name 			STATUS_HEADER_TIMESTAMP)];
1246*5113495bSYour Name 		break;
1247*5113495bSYour Name 	default:
1248*5113495bSYour Name 		qdf_nofl_err("ERROR: Unknown tlv\n");
1249*5113495bSYour Name 		break;
1250*5113495bSYour Name 	}
1251*5113495bSYour Name 	h->tstamp =
1252*5113495bSYour Name 		HAL_GET_FIELD(UNIFORM_REO_STATUS_HEADER, TIMESTAMP, val1);
1253*5113495bSYour Name }
1254*5113495bSYour Name 
1255*5113495bSYour Name static
hal_rx_msdu0_buffer_addr_lsb_kiwi(void * link_desc_va)1256*5113495bSYour Name void *hal_rx_msdu0_buffer_addr_lsb_kiwi(void *link_desc_va)
1257*5113495bSYour Name {
1258*5113495bSYour Name 	return (void *)HAL_RX_MSDU0_BUFFER_ADDR_LSB(link_desc_va);
1259*5113495bSYour Name }
1260*5113495bSYour Name 
1261*5113495bSYour Name static
hal_rx_msdu_desc_info_ptr_get_kiwi(void * msdu0)1262*5113495bSYour Name void *hal_rx_msdu_desc_info_ptr_get_kiwi(void *msdu0)
1263*5113495bSYour Name {
1264*5113495bSYour Name 	return (void *)HAL_RX_MSDU_DESC_INFO_PTR_GET(msdu0);
1265*5113495bSYour Name }
1266*5113495bSYour Name 
1267*5113495bSYour Name static
hal_ent_mpdu_desc_info_kiwi(void * ent_ring_desc)1268*5113495bSYour Name void *hal_ent_mpdu_desc_info_kiwi(void *ent_ring_desc)
1269*5113495bSYour Name {
1270*5113495bSYour Name 	return (void *)HAL_ENT_MPDU_DESC_INFO(ent_ring_desc);
1271*5113495bSYour Name }
1272*5113495bSYour Name 
1273*5113495bSYour Name static
hal_dst_mpdu_desc_info_kiwi(void * dst_ring_desc)1274*5113495bSYour Name void *hal_dst_mpdu_desc_info_kiwi(void *dst_ring_desc)
1275*5113495bSYour Name {
1276*5113495bSYour Name 	return (void *)HAL_DST_MPDU_DESC_INFO(dst_ring_desc);
1277*5113495bSYour Name }
1278*5113495bSYour Name 
1279*5113495bSYour Name /**
1280*5113495bSYour Name  * hal_rx_get_tlv_kiwi() - API to get the tlv
1281*5113495bSYour Name  * @rx_tlv: TLV data extracted from the rx packet
1282*5113495bSYour Name  *
1283*5113495bSYour Name  * Return: uint8_t
1284*5113495bSYour Name  */
hal_rx_get_tlv_kiwi(void * rx_tlv)1285*5113495bSYour Name static uint8_t hal_rx_get_tlv_kiwi(void *rx_tlv)
1286*5113495bSYour Name {
1287*5113495bSYour Name 	return HAL_RX_GET(rx_tlv, PHYRX_RSSI_LEGACY, RECEIVE_BANDWIDTH);
1288*5113495bSYour Name }
1289*5113495bSYour Name 
1290*5113495bSYour Name /**
1291*5113495bSYour Name  * hal_rx_phy_legacy_get_rssi_kiwi() - API to get RSSI from TLV
1292*5113495bSYour Name  *                                     WIFIPHYRX_RSSI_LEGACY_E
1293*5113495bSYour Name  * @buf: pointer to the start of WIFIPHYRX_RSSI_LEGACY_E TLV
1294*5113495bSYour Name  *
1295*5113495bSYour Name  * Return: value of RSSI
1296*5113495bSYour Name  */
hal_rx_phy_legacy_get_rssi_kiwi(uint8_t * buf)1297*5113495bSYour Name static int8_t hal_rx_phy_legacy_get_rssi_kiwi(uint8_t *buf)
1298*5113495bSYour Name {
1299*5113495bSYour Name 	return HAL_RX_GET_64(buf, PHYRX_RSSI_LEGACY, RSSI_COMB_PPDU);
1300*5113495bSYour Name }
1301*5113495bSYour Name 
1302*5113495bSYour Name /**
1303*5113495bSYour Name  * hal_rx_proc_phyrx_other_receive_info_tlv_kiwi()
1304*5113495bSYour Name  *				    - process other receive info TLV
1305*5113495bSYour Name  * @rx_tlv_hdr: pointer to TLV header
1306*5113495bSYour Name  * @ppdu_info_handle: pointer to ppdu_info
1307*5113495bSYour Name  *
1308*5113495bSYour Name  * Return: None
1309*5113495bSYour Name  */
1310*5113495bSYour Name static
hal_rx_proc_phyrx_other_receive_info_tlv_kiwi(void * rx_tlv_hdr,void * ppdu_info_handle)1311*5113495bSYour Name void hal_rx_proc_phyrx_other_receive_info_tlv_kiwi(void *rx_tlv_hdr,
1312*5113495bSYour Name 						   void *ppdu_info_handle)
1313*5113495bSYour Name {
1314*5113495bSYour Name 	uint32_t tlv_tag, tlv_len;
1315*5113495bSYour Name 	uint32_t temp_len, other_tlv_len, other_tlv_tag;
1316*5113495bSYour Name 	void *rx_tlv = (uint8_t *)rx_tlv_hdr + HAL_RX_TLV32_HDR_SIZE;
1317*5113495bSYour Name 	void *other_tlv_hdr = NULL;
1318*5113495bSYour Name 	void *other_tlv = NULL;
1319*5113495bSYour Name 
1320*5113495bSYour Name 	tlv_tag = HAL_RX_GET_USER_TLV32_TYPE(rx_tlv_hdr);
1321*5113495bSYour Name 	tlv_len = HAL_RX_GET_USER_TLV32_LEN(rx_tlv_hdr);
1322*5113495bSYour Name 	temp_len = 0;
1323*5113495bSYour Name 
1324*5113495bSYour Name 	other_tlv_hdr = rx_tlv + HAL_RX_TLV32_HDR_SIZE;
1325*5113495bSYour Name 
1326*5113495bSYour Name 	other_tlv_tag = HAL_RX_GET_USER_TLV32_TYPE(other_tlv_hdr);
1327*5113495bSYour Name 	other_tlv_len = HAL_RX_GET_USER_TLV32_LEN(other_tlv_hdr);
1328*5113495bSYour Name 	temp_len += other_tlv_len;
1329*5113495bSYour Name 	other_tlv = other_tlv_hdr + HAL_RX_TLV32_HDR_SIZE;
1330*5113495bSYour Name 
1331*5113495bSYour Name 	switch (other_tlv_tag) {
1332*5113495bSYour Name 	default:
1333*5113495bSYour Name 		hal_err_rl("unhandled TLV type: %d, TLV len:%d",
1334*5113495bSYour Name 			   other_tlv_tag, other_tlv_len);
1335*5113495bSYour Name 		break;
1336*5113495bSYour Name 	}
1337*5113495bSYour Name }
1338*5113495bSYour Name 
1339*5113495bSYour Name /**
1340*5113495bSYour Name  * hal_reo_config_kiwi(): Set reo config parameters
1341*5113495bSYour Name  * @soc: hal soc handle
1342*5113495bSYour Name  * @reg_val: value to be set
1343*5113495bSYour Name  * @reo_params: reo parameters
1344*5113495bSYour Name  *
1345*5113495bSYour Name  * Return: void
1346*5113495bSYour Name  */
1347*5113495bSYour Name static
hal_reo_config_kiwi(struct hal_soc * soc,uint32_t reg_val,struct hal_reo_params * reo_params)1348*5113495bSYour Name void hal_reo_config_kiwi(struct hal_soc *soc,
1349*5113495bSYour Name 			 uint32_t reg_val,
1350*5113495bSYour Name 			 struct hal_reo_params *reo_params)
1351*5113495bSYour Name {
1352*5113495bSYour Name 	HAL_REO_R0_CONFIG(soc, reg_val, reo_params);
1353*5113495bSYour Name }
1354*5113495bSYour Name 
1355*5113495bSYour Name /**
1356*5113495bSYour Name  * hal_rx_msdu_desc_info_get_ptr_kiwi() - Get msdu desc info ptr
1357*5113495bSYour Name  * @msdu_details_ptr: Pointer to msdu_details_ptr
1358*5113495bSYour Name  *
1359*5113495bSYour Name  * Return: Pointer to rx_msdu_desc_info structure.
1360*5113495bSYour Name  *
1361*5113495bSYour Name  */
hal_rx_msdu_desc_info_get_ptr_kiwi(void * msdu_details_ptr)1362*5113495bSYour Name static void *hal_rx_msdu_desc_info_get_ptr_kiwi(void *msdu_details_ptr)
1363*5113495bSYour Name {
1364*5113495bSYour Name 	return HAL_RX_MSDU_DESC_INFO_GET(msdu_details_ptr);
1365*5113495bSYour Name }
1366*5113495bSYour Name 
1367*5113495bSYour Name /**
1368*5113495bSYour Name  * hal_rx_link_desc_msdu0_ptr_kiwi() - Get pointer to rx_msdu details
1369*5113495bSYour Name  * @link_desc: Pointer to link desc
1370*5113495bSYour Name  *
1371*5113495bSYour Name  * Return: Pointer to rx_msdu_details structure
1372*5113495bSYour Name  *
1373*5113495bSYour Name  */
hal_rx_link_desc_msdu0_ptr_kiwi(void * link_desc)1374*5113495bSYour Name static void *hal_rx_link_desc_msdu0_ptr_kiwi(void *link_desc)
1375*5113495bSYour Name {
1376*5113495bSYour Name 	return HAL_RX_LINK_DESC_MSDU0_PTR(link_desc);
1377*5113495bSYour Name }
1378*5113495bSYour Name 
1379*5113495bSYour Name /**
1380*5113495bSYour Name  * hal_get_window_address_kiwi(): Function to get hp/tp address
1381*5113495bSYour Name  * @hal_soc: Pointer to hal_soc
1382*5113495bSYour Name  * @addr: address offset of register
1383*5113495bSYour Name  *
1384*5113495bSYour Name  * Return: modified address offset of register
1385*5113495bSYour Name  */
hal_get_window_address_kiwi(struct hal_soc * hal_soc,qdf_iomem_t addr)1386*5113495bSYour Name static inline qdf_iomem_t hal_get_window_address_kiwi(struct hal_soc *hal_soc,
1387*5113495bSYour Name 						      qdf_iomem_t addr)
1388*5113495bSYour Name {
1389*5113495bSYour Name 	return addr;
1390*5113495bSYour Name }
1391*5113495bSYour Name 
1392*5113495bSYour Name /**
1393*5113495bSYour Name  * hal_reo_set_err_dst_remap_kiwi(): Function to set REO error destination
1394*5113495bSYour Name  *				     ring remap register
1395*5113495bSYour Name  * @hal_soc: Pointer to hal_soc
1396*5113495bSYour Name  *
1397*5113495bSYour Name  * Return: none.
1398*5113495bSYour Name  */
1399*5113495bSYour Name static void
hal_reo_set_err_dst_remap_kiwi(void * hal_soc)1400*5113495bSYour Name hal_reo_set_err_dst_remap_kiwi(void *hal_soc)
1401*5113495bSYour Name {
1402*5113495bSYour Name 	/*
1403*5113495bSYour Name 	 * Set REO error 2k jump (error code 5) / OOR (error code 7)
1404*5113495bSYour Name 	 * frame routed to REO2SW0 ring.
1405*5113495bSYour Name 	 */
1406*5113495bSYour Name 	uint32_t dst_remap_ix0 =
1407*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_TCL, 0) |
1408*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_TCL, 1) |
1409*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_TCL, 2) |
1410*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_TCL, 3) |
1411*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_TCL, 4) |
1412*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_TCL, 5) |
1413*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_TCL, 6) |
1414*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX0(REO_REMAP_TCL, 7);
1415*5113495bSYour Name 
1416*5113495bSYour Name 	uint32_t dst_remap_ix1 =
1417*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX1(REO_REMAP_TCL, 14) |
1418*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX1(REO_REMAP_TCL, 13) |
1419*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX1(REO_REMAP_TCL, 12) |
1420*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX1(REO_REMAP_TCL, 11) |
1421*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX1(REO_REMAP_TCL, 10) |
1422*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX1(REO_REMAP_TCL, 9) |
1423*5113495bSYour Name 		HAL_REO_ERR_REMAP_IX1(REO_REMAP_TCL, 8);
1424*5113495bSYour Name 
1425*5113495bSYour Name 		HAL_REG_WRITE(hal_soc,
1426*5113495bSYour Name 			      HWIO_REO_R0_ERROR_DESTINATION_MAPPING_IX_0_ADDR(
1427*5113495bSYour Name 			      REO_REG_REG_BASE),
1428*5113495bSYour Name 			      dst_remap_ix0);
1429*5113495bSYour Name 
1430*5113495bSYour Name 		hal_info("HWIO_REO_R0_ERROR_DESTINATION_MAPPING_IX_0 0x%x",
1431*5113495bSYour Name 			 HAL_REG_READ(
1432*5113495bSYour Name 			 hal_soc,
1433*5113495bSYour Name 			 HWIO_REO_R0_ERROR_DESTINATION_MAPPING_IX_0_ADDR(
1434*5113495bSYour Name 			 REO_REG_REG_BASE)));
1435*5113495bSYour Name 
1436*5113495bSYour Name 		HAL_REG_WRITE(hal_soc,
1437*5113495bSYour Name 			      HWIO_REO_R0_ERROR_DESTINATION_MAPPING_IX_1_ADDR(
1438*5113495bSYour Name 			      REO_REG_REG_BASE),
1439*5113495bSYour Name 			      dst_remap_ix1);
1440*5113495bSYour Name 
1441*5113495bSYour Name 		hal_info("HWIO_REO_R0_ERROR_DESTINATION_MAPPING_IX_1 0x%x",
1442*5113495bSYour Name 			 HAL_REG_READ(
1443*5113495bSYour Name 			 hal_soc,
1444*5113495bSYour Name 			 HWIO_REO_R0_ERROR_DESTINATION_MAPPING_IX_1_ADDR(
1445*5113495bSYour Name 			 REO_REG_REG_BASE)));
1446*5113495bSYour Name }
1447*5113495bSYour Name 
1448*5113495bSYour Name /**
1449*5113495bSYour Name  * hal_reo_enable_pn_in_dest_kiwi() - Set the REO register to enable previous PN
1450*5113495bSYour Name  *				for OOR and 2K-jump frames
1451*5113495bSYour Name  * @hal_soc: HAL SoC handle
1452*5113495bSYour Name  *
1453*5113495bSYour Name  * Return: 1, since the register is set.
1454*5113495bSYour Name  */
hal_reo_enable_pn_in_dest_kiwi(void * hal_soc)1455*5113495bSYour Name static uint8_t hal_reo_enable_pn_in_dest_kiwi(void *hal_soc)
1456*5113495bSYour Name {
1457*5113495bSYour Name 	HAL_REG_WRITE(hal_soc, HWIO_REO_R0_PN_IN_DEST_ADDR(REO_REG_REG_BASE),
1458*5113495bSYour Name 		      1);
1459*5113495bSYour Name 	return 1;
1460*5113495bSYour Name }
1461*5113495bSYour Name 
1462*5113495bSYour Name /**
1463*5113495bSYour Name  * hal_rx_flow_setup_fse_kiwi() - Setup a flow search entry in HW FST
1464*5113495bSYour Name  * @rx_fst: Pointer to the Rx Flow Search Table
1465*5113495bSYour Name  * @table_offset: offset into the table where the flow is to be setup
1466*5113495bSYour Name  * @rx_flow: Flow Parameters
1467*5113495bSYour Name  *
1468*5113495bSYour Name  * Flow table entry fields are updated in host byte order, little endian order.
1469*5113495bSYour Name  *
1470*5113495bSYour Name  * Return: Success/Failure
1471*5113495bSYour Name  */
1472*5113495bSYour Name static void *
hal_rx_flow_setup_fse_kiwi(uint8_t * rx_fst,uint32_t table_offset,uint8_t * rx_flow)1473*5113495bSYour Name hal_rx_flow_setup_fse_kiwi(uint8_t *rx_fst, uint32_t table_offset,
1474*5113495bSYour Name 			   uint8_t *rx_flow)
1475*5113495bSYour Name {
1476*5113495bSYour Name 	struct hal_rx_fst *fst = (struct hal_rx_fst *)rx_fst;
1477*5113495bSYour Name 	struct hal_rx_flow *flow = (struct hal_rx_flow *)rx_flow;
1478*5113495bSYour Name 	uint8_t *fse;
1479*5113495bSYour Name 	bool fse_valid;
1480*5113495bSYour Name 
1481*5113495bSYour Name 	if (table_offset >= fst->max_entries) {
1482*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
1483*5113495bSYour Name 			  "HAL FSE table offset %u exceeds max entries %u",
1484*5113495bSYour Name 			  table_offset, fst->max_entries);
1485*5113495bSYour Name 		return NULL;
1486*5113495bSYour Name 	}
1487*5113495bSYour Name 
1488*5113495bSYour Name 	fse = (uint8_t *)fst->base_vaddr +
1489*5113495bSYour Name 		(table_offset * HAL_RX_FST_ENTRY_SIZE);
1490*5113495bSYour Name 
1491*5113495bSYour Name 	fse_valid = HAL_GET_FLD(fse, RX_FLOW_SEARCH_ENTRY, VALID);
1492*5113495bSYour Name 
1493*5113495bSYour Name 	if (fse_valid) {
1494*5113495bSYour Name 		QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_DEBUG,
1495*5113495bSYour Name 			  "HAL FSE %pK already valid", fse);
1496*5113495bSYour Name 		return NULL;
1497*5113495bSYour Name 	}
1498*5113495bSYour Name 
1499*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY, SRC_IP_127_96) =
1500*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, SRC_IP_127_96,
1501*5113495bSYour Name 			       (flow->tuple_info.src_ip_127_96));
1502*5113495bSYour Name 
1503*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY, SRC_IP_95_64) =
1504*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, SRC_IP_95_64,
1505*5113495bSYour Name 			       (flow->tuple_info.src_ip_95_64));
1506*5113495bSYour Name 
1507*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY, SRC_IP_63_32) =
1508*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, SRC_IP_63_32,
1509*5113495bSYour Name 			       (flow->tuple_info.src_ip_63_32));
1510*5113495bSYour Name 
1511*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY, SRC_IP_31_0) =
1512*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, SRC_IP_31_0,
1513*5113495bSYour Name 			       (flow->tuple_info.src_ip_31_0));
1514*5113495bSYour Name 
1515*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY, DEST_IP_127_96) =
1516*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, DEST_IP_127_96,
1517*5113495bSYour Name 			       (flow->tuple_info.dest_ip_127_96));
1518*5113495bSYour Name 
1519*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY, DEST_IP_95_64) =
1520*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, DEST_IP_95_64,
1521*5113495bSYour Name 			       (flow->tuple_info.dest_ip_95_64));
1522*5113495bSYour Name 
1523*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY, DEST_IP_63_32) =
1524*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, DEST_IP_63_32,
1525*5113495bSYour Name 			       (flow->tuple_info.dest_ip_63_32));
1526*5113495bSYour Name 
1527*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY, DEST_IP_31_0) =
1528*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, DEST_IP_31_0,
1529*5113495bSYour Name 			       (flow->tuple_info.dest_ip_31_0));
1530*5113495bSYour Name 
1531*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY, DEST_PORT);
1532*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY, DEST_PORT) |=
1533*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, DEST_PORT,
1534*5113495bSYour Name 			       (flow->tuple_info.dest_port));
1535*5113495bSYour Name 
1536*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY, SRC_PORT);
1537*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY, SRC_PORT) |=
1538*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, SRC_PORT,
1539*5113495bSYour Name 			       (flow->tuple_info.src_port));
1540*5113495bSYour Name 
1541*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY, L4_PROTOCOL);
1542*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY, L4_PROTOCOL) |=
1543*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, L4_PROTOCOL,
1544*5113495bSYour Name 			       flow->tuple_info.l4_protocol);
1545*5113495bSYour Name 
1546*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY, REO_DESTINATION_HANDLER);
1547*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY, REO_DESTINATION_HANDLER) |=
1548*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, REO_DESTINATION_HANDLER,
1549*5113495bSYour Name 			       flow->reo_destination_handler);
1550*5113495bSYour Name 
1551*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY, VALID);
1552*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY, VALID) |=
1553*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, VALID, 1);
1554*5113495bSYour Name 
1555*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY, METADATA);
1556*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY, METADATA) =
1557*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, METADATA,
1558*5113495bSYour Name 			       (flow->fse_metadata));
1559*5113495bSYour Name 
1560*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY, REO_DESTINATION_INDICATION);
1561*5113495bSYour Name 	HAL_SET_FLD(fse, RX_FLOW_SEARCH_ENTRY, REO_DESTINATION_INDICATION) |=
1562*5113495bSYour Name 		HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY,
1563*5113495bSYour Name 			       REO_DESTINATION_INDICATION,
1564*5113495bSYour Name 			       flow->reo_destination_indication);
1565*5113495bSYour Name 
1566*5113495bSYour Name 	/* Reset all the other fields in FSE */
1567*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY, RESERVED_9);
1568*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY, MSDU_DROP);
1569*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY, MSDU_COUNT);
1570*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY, MSDU_BYTE_COUNT);
1571*5113495bSYour Name 	HAL_CLR_FLD(fse, RX_FLOW_SEARCH_ENTRY, TIMESTAMP);
1572*5113495bSYour Name 
1573*5113495bSYour Name 	return fse;
1574*5113495bSYour Name }
1575*5113495bSYour Name 
1576*5113495bSYour Name /**
1577*5113495bSYour Name  * hal_rx_flow_setup_cmem_fse_kiwi() - Setup a flow search entry in HW CMEM FST
1578*5113495bSYour Name  * @hal_soc: hal_soc reference
1579*5113495bSYour Name  * @cmem_ba: CMEM base address
1580*5113495bSYour Name  * @table_offset: offset into the table where the flow is to be setup
1581*5113495bSYour Name  * @rx_flow: Flow Parameters
1582*5113495bSYour Name  *
1583*5113495bSYour Name  * Return: Success/Failure
1584*5113495bSYour Name  */
1585*5113495bSYour Name static uint32_t
hal_rx_flow_setup_cmem_fse_kiwi(struct hal_soc * hal_soc,uint32_t cmem_ba,uint32_t table_offset,uint8_t * rx_flow)1586*5113495bSYour Name hal_rx_flow_setup_cmem_fse_kiwi(struct hal_soc *hal_soc, uint32_t cmem_ba,
1587*5113495bSYour Name 				uint32_t table_offset, uint8_t *rx_flow)
1588*5113495bSYour Name {
1589*5113495bSYour Name 	struct hal_rx_flow *flow = (struct hal_rx_flow *)rx_flow;
1590*5113495bSYour Name 	uint32_t fse_offset;
1591*5113495bSYour Name 	uint32_t value;
1592*5113495bSYour Name 
1593*5113495bSYour Name 	fse_offset = cmem_ba + (table_offset * HAL_RX_FST_ENTRY_SIZE);
1594*5113495bSYour Name 
1595*5113495bSYour Name 	/* Reset the Valid bit */
1596*5113495bSYour Name 	HAL_CMEM_WRITE(hal_soc, fse_offset + HAL_OFFSET(RX_FLOW_SEARCH_ENTRY,
1597*5113495bSYour Name 							VALID), 0);
1598*5113495bSYour Name 
1599*5113495bSYour Name 	value  = HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, SRC_IP_127_96,
1600*5113495bSYour Name 				(flow->tuple_info.src_ip_127_96));
1601*5113495bSYour Name 	HAL_CMEM_WRITE(hal_soc, fse_offset + HAL_OFFSET(RX_FLOW_SEARCH_ENTRY,
1602*5113495bSYour Name 							SRC_IP_127_96), value);
1603*5113495bSYour Name 
1604*5113495bSYour Name 	value  = HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, SRC_IP_95_64,
1605*5113495bSYour Name 				(flow->tuple_info.src_ip_95_64));
1606*5113495bSYour Name 	HAL_CMEM_WRITE(hal_soc, fse_offset + HAL_OFFSET(RX_FLOW_SEARCH_ENTRY,
1607*5113495bSYour Name 							SRC_IP_95_64), value);
1608*5113495bSYour Name 
1609*5113495bSYour Name 	value  = HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, SRC_IP_63_32,
1610*5113495bSYour Name 				(flow->tuple_info.src_ip_63_32));
1611*5113495bSYour Name 	HAL_CMEM_WRITE(hal_soc, fse_offset + HAL_OFFSET(RX_FLOW_SEARCH_ENTRY,
1612*5113495bSYour Name 							SRC_IP_63_32), value);
1613*5113495bSYour Name 
1614*5113495bSYour Name 	value  = HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, SRC_IP_31_0,
1615*5113495bSYour Name 				(flow->tuple_info.src_ip_31_0));
1616*5113495bSYour Name 	HAL_CMEM_WRITE(hal_soc, fse_offset + HAL_OFFSET(RX_FLOW_SEARCH_ENTRY,
1617*5113495bSYour Name 							SRC_IP_31_0), value);
1618*5113495bSYour Name 
1619*5113495bSYour Name 	value  = HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, DEST_IP_127_96,
1620*5113495bSYour Name 				(flow->tuple_info.dest_ip_127_96));
1621*5113495bSYour Name 	HAL_CMEM_WRITE(hal_soc, fse_offset + HAL_OFFSET(RX_FLOW_SEARCH_ENTRY,
1622*5113495bSYour Name 							DEST_IP_127_96), value);
1623*5113495bSYour Name 
1624*5113495bSYour Name 	value  = HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, DEST_IP_95_64,
1625*5113495bSYour Name 				(flow->tuple_info.dest_ip_95_64));
1626*5113495bSYour Name 	HAL_CMEM_WRITE(hal_soc, fse_offset + HAL_OFFSET(RX_FLOW_SEARCH_ENTRY,
1627*5113495bSYour Name 							DEST_IP_95_64), value);
1628*5113495bSYour Name 
1629*5113495bSYour Name 	value  = HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, DEST_IP_63_32,
1630*5113495bSYour Name 				(flow->tuple_info.dest_ip_63_32));
1631*5113495bSYour Name 	HAL_CMEM_WRITE(hal_soc, fse_offset + HAL_OFFSET(RX_FLOW_SEARCH_ENTRY,
1632*5113495bSYour Name 							DEST_IP_63_32), value);
1633*5113495bSYour Name 
1634*5113495bSYour Name 	value  = HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, DEST_IP_31_0,
1635*5113495bSYour Name 				(flow->tuple_info.dest_ip_31_0));
1636*5113495bSYour Name 	HAL_CMEM_WRITE(hal_soc, fse_offset + HAL_OFFSET(RX_FLOW_SEARCH_ENTRY,
1637*5113495bSYour Name 							DEST_IP_31_0), value);
1638*5113495bSYour Name 
1639*5113495bSYour Name 	value = 0 | HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, DEST_PORT,
1640*5113495bSYour Name 				(flow->tuple_info.dest_port));
1641*5113495bSYour Name 	value |= HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, SRC_PORT,
1642*5113495bSYour Name 				(flow->tuple_info.src_port));
1643*5113495bSYour Name 	HAL_CMEM_WRITE(hal_soc, fse_offset + HAL_OFFSET(RX_FLOW_SEARCH_ENTRY,
1644*5113495bSYour Name 							SRC_PORT), value);
1645*5113495bSYour Name 
1646*5113495bSYour Name 	value  = HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, METADATA,
1647*5113495bSYour Name 				(flow->fse_metadata));
1648*5113495bSYour Name 	HAL_CMEM_WRITE(hal_soc, fse_offset + HAL_OFFSET(RX_FLOW_SEARCH_ENTRY,
1649*5113495bSYour Name 							METADATA), value);
1650*5113495bSYour Name 
1651*5113495bSYour Name 	/* Reset all the other fields in FSE */
1652*5113495bSYour Name 	HAL_CMEM_WRITE(hal_soc, fse_offset + HAL_OFFSET(RX_FLOW_SEARCH_ENTRY,
1653*5113495bSYour Name 							MSDU_COUNT), 0);
1654*5113495bSYour Name 	HAL_CMEM_WRITE(hal_soc, fse_offset + HAL_OFFSET(RX_FLOW_SEARCH_ENTRY,
1655*5113495bSYour Name 							MSDU_BYTE_COUNT), 0);
1656*5113495bSYour Name 	HAL_CMEM_WRITE(hal_soc, fse_offset + HAL_OFFSET(RX_FLOW_SEARCH_ENTRY,
1657*5113495bSYour Name 							TIMESTAMP), 0);
1658*5113495bSYour Name 
1659*5113495bSYour Name 	value = 0 | HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, L4_PROTOCOL,
1660*5113495bSYour Name 				   flow->tuple_info.l4_protocol);
1661*5113495bSYour Name 	value |= HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, REO_DESTINATION_HANDLER,
1662*5113495bSYour Name 				flow->reo_destination_handler);
1663*5113495bSYour Name 	value |= HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY,
1664*5113495bSYour Name 				REO_DESTINATION_INDICATION,
1665*5113495bSYour Name 				flow->reo_destination_indication);
1666*5113495bSYour Name 	value |= HAL_SET_FLD_SM(RX_FLOW_SEARCH_ENTRY, VALID, 1);
1667*5113495bSYour Name 	HAL_CMEM_WRITE(hal_soc, fse_offset + HAL_OFFSET(RX_FLOW_SEARCH_ENTRY,
1668*5113495bSYour Name 							L4_PROTOCOL), value);
1669*5113495bSYour Name 
1670*5113495bSYour Name 	return fse_offset;
1671*5113495bSYour Name }
1672*5113495bSYour Name 
1673*5113495bSYour Name /**
1674*5113495bSYour Name  * hal_rx_flow_get_cmem_fse_ts_kiwi() - Get timestamp field from CMEM FSE
1675*5113495bSYour Name  * @hal_soc: hal_soc reference
1676*5113495bSYour Name  * @fse_offset: CMEM FSE offset
1677*5113495bSYour Name  *
1678*5113495bSYour Name  * Return: Timestamp
1679*5113495bSYour Name  */
hal_rx_flow_get_cmem_fse_ts_kiwi(struct hal_soc * hal_soc,uint32_t fse_offset)1680*5113495bSYour Name static uint32_t hal_rx_flow_get_cmem_fse_ts_kiwi(struct hal_soc *hal_soc,
1681*5113495bSYour Name 						 uint32_t fse_offset)
1682*5113495bSYour Name {
1683*5113495bSYour Name 	return HAL_CMEM_READ(hal_soc, fse_offset +
1684*5113495bSYour Name 			     HAL_OFFSET(RX_FLOW_SEARCH_ENTRY, TIMESTAMP));
1685*5113495bSYour Name }
1686*5113495bSYour Name 
1687*5113495bSYour Name /**
1688*5113495bSYour Name  * hal_rx_flow_get_cmem_fse_kiwi() - Get FSE from CMEM
1689*5113495bSYour Name  * @hal_soc: hal_soc reference
1690*5113495bSYour Name  * @fse_offset: CMEM FSE offset
1691*5113495bSYour Name  * @fse: reference where FSE will be copied
1692*5113495bSYour Name  * @len: length of FSE
1693*5113495bSYour Name  *
1694*5113495bSYour Name  * Return: If read is successful or not
1695*5113495bSYour Name  */
1696*5113495bSYour Name static void
hal_rx_flow_get_cmem_fse_kiwi(struct hal_soc * hal_soc,uint32_t fse_offset,uint32_t * fse,qdf_size_t len)1697*5113495bSYour Name hal_rx_flow_get_cmem_fse_kiwi(struct hal_soc *hal_soc, uint32_t fse_offset,
1698*5113495bSYour Name 			      uint32_t *fse, qdf_size_t len)
1699*5113495bSYour Name {
1700*5113495bSYour Name 	int i;
1701*5113495bSYour Name 
1702*5113495bSYour Name 	if (len != HAL_RX_FST_ENTRY_SIZE)
1703*5113495bSYour Name 		return;
1704*5113495bSYour Name 
1705*5113495bSYour Name 	for (i = 0; i < NUM_OF_DWORDS_RX_FLOW_SEARCH_ENTRY; i++)
1706*5113495bSYour Name 		fse[i] = HAL_CMEM_READ(hal_soc, fse_offset + i * 4);
1707*5113495bSYour Name }
1708*5113495bSYour Name 
1709*5113495bSYour Name static
hal_compute_reo_remap_ix2_ix3_kiwi(uint32_t * ring_map,uint32_t num_rings,uint32_t * remap1,uint32_t * remap2)1710*5113495bSYour Name void hal_compute_reo_remap_ix2_ix3_kiwi(uint32_t *ring_map,
1711*5113495bSYour Name 					uint32_t num_rings, uint32_t *remap1,
1712*5113495bSYour Name 					uint32_t *remap2)
1713*5113495bSYour Name {
1714*5113495bSYour Name 
1715*5113495bSYour Name 	switch (num_rings) {
1716*5113495bSYour Name 	/* should we have all the different possible ring configs */
1717*5113495bSYour Name 	default:
1718*5113495bSYour Name 	case 3:
1719*5113495bSYour Name 		*remap1 = HAL_REO_REMAP_IX2(ring_map[0], 16) |
1720*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[1], 17) |
1721*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[2], 18) |
1722*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[0], 19) |
1723*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[1], 20) |
1724*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[2], 21) |
1725*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[0], 22) |
1726*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[1], 23);
1727*5113495bSYour Name 
1728*5113495bSYour Name 		*remap2 = HAL_REO_REMAP_IX3(ring_map[2], 24) |
1729*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[0], 25) |
1730*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[1], 26) |
1731*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[2], 27) |
1732*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[0], 28) |
1733*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[1], 29) |
1734*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[2], 30) |
1735*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[0], 31);
1736*5113495bSYour Name 		break;
1737*5113495bSYour Name 	case 4:
1738*5113495bSYour Name 		*remap1 = HAL_REO_REMAP_IX2(ring_map[0], 16) |
1739*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[1], 17) |
1740*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[2], 18) |
1741*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[3], 19) |
1742*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[0], 20) |
1743*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[1], 21) |
1744*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[2], 22) |
1745*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[3], 23);
1746*5113495bSYour Name 
1747*5113495bSYour Name 		*remap2 = HAL_REO_REMAP_IX3(ring_map[0], 24) |
1748*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[1], 25) |
1749*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[2], 26) |
1750*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[3], 27) |
1751*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[0], 28) |
1752*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[1], 29) |
1753*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[2], 30) |
1754*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[3], 31);
1755*5113495bSYour Name 		break;
1756*5113495bSYour Name 	case 6:
1757*5113495bSYour Name 		*remap1 = HAL_REO_REMAP_IX2(ring_map[0], 16) |
1758*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[1], 17) |
1759*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[2], 18) |
1760*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[3], 19) |
1761*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[4], 20) |
1762*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[5], 21) |
1763*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[0], 22) |
1764*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[1], 23);
1765*5113495bSYour Name 
1766*5113495bSYour Name 		*remap2 = HAL_REO_REMAP_IX3(ring_map[2], 24) |
1767*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[3], 25) |
1768*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[4], 26) |
1769*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[5], 27) |
1770*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[0], 28) |
1771*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[1], 29) |
1772*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[2], 30) |
1773*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[3], 31);
1774*5113495bSYour Name 		break;
1775*5113495bSYour Name 	case 8:
1776*5113495bSYour Name 		*remap1 = HAL_REO_REMAP_IX2(ring_map[0], 16) |
1777*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[1], 17) |
1778*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[2], 18) |
1779*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[3], 19) |
1780*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[4], 20) |
1781*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[5], 21) |
1782*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[6], 22) |
1783*5113495bSYour Name 			  HAL_REO_REMAP_IX2(ring_map[7], 23);
1784*5113495bSYour Name 
1785*5113495bSYour Name 		*remap2 = HAL_REO_REMAP_IX3(ring_map[0], 24) |
1786*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[1], 25) |
1787*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[2], 26) |
1788*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[3], 27) |
1789*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[4], 28) |
1790*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[5], 29) |
1791*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[6], 30) |
1792*5113495bSYour Name 			  HAL_REO_REMAP_IX3(ring_map[7], 31);
1793*5113495bSYour Name 		break;
1794*5113495bSYour Name 	}
1795*5113495bSYour Name }
1796*5113495bSYour Name 
1797*5113495bSYour Name /* NUM TCL Bank registers in KIWI */
1798*5113495bSYour Name #define HAL_NUM_TCL_BANKS_KIWI 8
1799*5113495bSYour Name 
1800*5113495bSYour Name /**
1801*5113495bSYour Name  * hal_tx_get_num_tcl_banks_kiwi() - Get number of banks in target
1802*5113495bSYour Name  *
1803*5113495bSYour Name  * Returns: number of bank
1804*5113495bSYour Name  */
hal_tx_get_num_tcl_banks_kiwi(void)1805*5113495bSYour Name static uint8_t hal_tx_get_num_tcl_banks_kiwi(void)
1806*5113495bSYour Name {
1807*5113495bSYour Name 	return HAL_NUM_TCL_BANKS_KIWI;
1808*5113495bSYour Name }
1809*5113495bSYour Name 
1810*5113495bSYour Name /**
1811*5113495bSYour Name  * hal_rx_reo_prev_pn_get_kiwi() - Get the previous PN from the REO ring desc.
1812*5113495bSYour Name  * @ring_desc: REO ring descriptor [To be validated by caller ]
1813*5113495bSYour Name  * @prev_pn: Buffer where the previous PN is to be populated.
1814*5113495bSYour Name  *		[To be validated by caller]
1815*5113495bSYour Name  *
1816*5113495bSYour Name  * Return: None
1817*5113495bSYour Name  */
hal_rx_reo_prev_pn_get_kiwi(void * ring_desc,uint64_t * prev_pn)1818*5113495bSYour Name static void hal_rx_reo_prev_pn_get_kiwi(void *ring_desc,
1819*5113495bSYour Name 					uint64_t *prev_pn)
1820*5113495bSYour Name {
1821*5113495bSYour Name 	struct reo_destination_ring_with_pn *reo_desc =
1822*5113495bSYour Name 		(struct reo_destination_ring_with_pn *)ring_desc;
1823*5113495bSYour Name 
1824*5113495bSYour Name 	*prev_pn = reo_desc->prev_pn_23_0;
1825*5113495bSYour Name 	*prev_pn |= ((uint64_t)reo_desc->prev_pn_55_24 << 24);
1826*5113495bSYour Name }
1827*5113495bSYour Name 
1828*5113495bSYour Name /**
1829*5113495bSYour Name  * hal_cmem_write_kiwi() - function for CMEM buffer writing
1830*5113495bSYour Name  * @hal_soc_hdl: HAL SOC handle
1831*5113495bSYour Name  * @offset: CMEM address
1832*5113495bSYour Name  * @value: value to write
1833*5113495bSYour Name  *
1834*5113495bSYour Name  * Return: None.
1835*5113495bSYour Name  */
hal_cmem_write_kiwi(hal_soc_handle_t hal_soc_hdl,uint32_t offset,uint32_t value)1836*5113495bSYour Name static inline void hal_cmem_write_kiwi(hal_soc_handle_t hal_soc_hdl,
1837*5113495bSYour Name 				       uint32_t offset,
1838*5113495bSYour Name 				       uint32_t value)
1839*5113495bSYour Name {
1840*5113495bSYour Name 	struct hal_soc *hal = (struct hal_soc *)hal_soc_hdl;
1841*5113495bSYour Name 
1842*5113495bSYour Name 	hal_write32_mb(hal, offset, value);
1843*5113495bSYour Name }
1844*5113495bSYour Name 
1845*5113495bSYour Name /**
1846*5113495bSYour Name  * hal_get_idle_link_bm_id_kiwi() - Get idle link BM id from chid_id
1847*5113495bSYour Name  * @chip_id: mlo chip_id
1848*5113495bSYour Name  *
1849*5113495bSYour Name  * Returns: RBM ID
1850*5113495bSYour Name  */
hal_get_idle_link_bm_id_kiwi(uint8_t chip_id)1851*5113495bSYour Name static uint8_t hal_get_idle_link_bm_id_kiwi(uint8_t chip_id)
1852*5113495bSYour Name {
1853*5113495bSYour Name 	return WBM_IDLE_DESC_LIST;
1854*5113495bSYour Name }
1855*5113495bSYour Name 
1856*5113495bSYour Name #ifdef WLAN_FEATURE_MARK_FIRST_WAKEUP_PACKET
1857*5113495bSYour Name /**
1858*5113495bSYour Name  * hal_get_first_wow_wakeup_packet_kiwi(): Function to get if the buffer
1859*5113495bSYour Name  * is the first one that wakes up host from WoW.
1860*5113495bSYour Name  *
1861*5113495bSYour Name  * @buf: network buffer
1862*5113495bSYour Name  *
1863*5113495bSYour Name  * Dummy function for KIWI
1864*5113495bSYour Name  *
1865*5113495bSYour Name  * Returns: 1 to indicate it is first packet received that wakes up host from
1866*5113495bSYour Name  *	    WoW. Otherwise 0
1867*5113495bSYour Name  */
hal_get_first_wow_wakeup_packet_kiwi(uint8_t * buf)1868*5113495bSYour Name static inline uint8_t hal_get_first_wow_wakeup_packet_kiwi(uint8_t *buf)
1869*5113495bSYour Name {
1870*5113495bSYour Name 	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
1871*5113495bSYour Name 
1872*5113495bSYour Name 	return HAL_RX_TLV_FIRST_WAKEUP_PKT_GET(pkt_tlvs);
1873*5113495bSYour Name }
1874*5113495bSYour Name #endif
1875*5113495bSYour Name 
hal_get_rx_max_ba_window_kiwi(int tid)1876*5113495bSYour Name static uint16_t hal_get_rx_max_ba_window_kiwi(int tid)
1877*5113495bSYour Name {
1878*5113495bSYour Name 	return HAL_RX_BA_WINDOW_1024;
1879*5113495bSYour Name }
1880*5113495bSYour Name 
1881*5113495bSYour Name /**
1882*5113495bSYour Name  * hal_get_reo_qdesc_size_kiwi()- Get the reo queue descriptor size
1883*5113495bSYour Name  *				  from the give Block-Ack window size
1884*5113495bSYour Name  * @ba_window_size: Block-Ack window size
1885*5113495bSYour Name  * @tid: TID
1886*5113495bSYour Name  *
1887*5113495bSYour Name  * Return: reo queue descriptor size
1888*5113495bSYour Name  */
hal_get_reo_qdesc_size_kiwi(uint32_t ba_window_size,int tid)1889*5113495bSYour Name static uint32_t hal_get_reo_qdesc_size_kiwi(uint32_t ba_window_size, int tid)
1890*5113495bSYour Name {
1891*5113495bSYour Name 	/* Hardcode the ba_window_size to HAL_RX_MAX_BA_WINDOW for
1892*5113495bSYour Name 	 * NON_QOS_TID until HW issues are resolved.
1893*5113495bSYour Name 	 */
1894*5113495bSYour Name 	if (tid != HAL_NON_QOS_TID)
1895*5113495bSYour Name 		ba_window_size = hal_get_rx_max_ba_window_kiwi(tid);
1896*5113495bSYour Name 
1897*5113495bSYour Name 	/* Return descriptor size corresponding to window size of 2 since
1898*5113495bSYour Name 	 * we set ba_window_size to 2 while setting up REO descriptors as
1899*5113495bSYour Name 	 * a WAR to get 2k jump exception aggregates are received without
1900*5113495bSYour Name 	 * a BA session.
1901*5113495bSYour Name 	 */
1902*5113495bSYour Name 	if (ba_window_size <= 1) {
1903*5113495bSYour Name 		if (tid != HAL_NON_QOS_TID)
1904*5113495bSYour Name 			return sizeof(struct rx_reo_queue) +
1905*5113495bSYour Name 				sizeof(struct rx_reo_queue_ext);
1906*5113495bSYour Name 		else
1907*5113495bSYour Name 			return sizeof(struct rx_reo_queue);
1908*5113495bSYour Name 	}
1909*5113495bSYour Name 
1910*5113495bSYour Name 	if (ba_window_size <= 105)
1911*5113495bSYour Name 		return sizeof(struct rx_reo_queue) +
1912*5113495bSYour Name 			sizeof(struct rx_reo_queue_ext);
1913*5113495bSYour Name 
1914*5113495bSYour Name 	if (ba_window_size <= 210)
1915*5113495bSYour Name 		return sizeof(struct rx_reo_queue) +
1916*5113495bSYour Name 			(2 * sizeof(struct rx_reo_queue_ext));
1917*5113495bSYour Name 
1918*5113495bSYour Name 	if (ba_window_size <= 256)
1919*5113495bSYour Name 		return sizeof(struct rx_reo_queue) +
1920*5113495bSYour Name 			(3 * sizeof(struct rx_reo_queue_ext));
1921*5113495bSYour Name 
1922*5113495bSYour Name 	return sizeof(struct rx_reo_queue) +
1923*5113495bSYour Name 		(10 * sizeof(struct rx_reo_queue_ext)) +
1924*5113495bSYour Name 		sizeof(struct rx_reo_queue_1k);
1925*5113495bSYour Name }
1926*5113495bSYour Name 
1927*5113495bSYour Name #ifdef QCA_GET_TSF_VIA_REG
1928*5113495bSYour Name static inline uint32_t
hal_tsf_read_scratch_reg(struct hal_soc * soc,enum hal_scratch_reg_enum reg_enum)1929*5113495bSYour Name hal_tsf_read_scratch_reg(struct hal_soc *soc,
1930*5113495bSYour Name 			 enum hal_scratch_reg_enum reg_enum)
1931*5113495bSYour Name {
1932*5113495bSYour Name 	return hal_read32_mb(soc, PMM_REG_BASE + (reg_enum * 4));
1933*5113495bSYour Name }
1934*5113495bSYour Name 
1935*5113495bSYour Name static inline
hal_tsf_get_fw_time(struct hal_soc * soc)1936*5113495bSYour Name uint64_t hal_tsf_get_fw_time(struct hal_soc *soc)
1937*5113495bSYour Name {
1938*5113495bSYour Name 	uint64_t fw_time_low;
1939*5113495bSYour Name 	uint64_t fw_time_high;
1940*5113495bSYour Name 
1941*5113495bSYour Name 	fw_time_low = hal_read32_mb(soc, PCIE_PCIE_MHI_TIME_LOW);
1942*5113495bSYour Name 	fw_time_high = hal_read32_mb(soc, PCIE_PCIE_MHI_TIME_HIGH);
1943*5113495bSYour Name 	return (fw_time_high << 32 | fw_time_low);
1944*5113495bSYour Name }
1945*5113495bSYour Name 
1946*5113495bSYour Name static inline
hal_fw_qtime_to_usecs(uint64_t time)1947*5113495bSYour Name uint64_t hal_fw_qtime_to_usecs(uint64_t time)
1948*5113495bSYour Name {
1949*5113495bSYour Name 	/*
1950*5113495bSYour Name 	 * Try to preserve precision by multiplying by 10 first.
1951*5113495bSYour Name 	 * If that would cause a wrap around, divide first instead.
1952*5113495bSYour Name 	 */
1953*5113495bSYour Name 	if (time * 10 < time) {
1954*5113495bSYour Name 		time = qdf_do_div(time, FW_QTIME_CYCLES_PER_10_USEC);
1955*5113495bSYour Name 		return time * 10;
1956*5113495bSYour Name 	}
1957*5113495bSYour Name 
1958*5113495bSYour Name 	time = time * 10;
1959*5113495bSYour Name 	time = qdf_do_div(time, FW_QTIME_CYCLES_PER_10_USEC);
1960*5113495bSYour Name 
1961*5113495bSYour Name 	return time;
1962*5113495bSYour Name }
1963*5113495bSYour Name 
1964*5113495bSYour Name /**
1965*5113495bSYour Name  * hal_get_tsf_time_kiwi() - Get tsf time from scratch register
1966*5113495bSYour Name  * @hal_soc_hdl: HAL soc handle
1967*5113495bSYour Name  * @tsf_id: TSF id
1968*5113495bSYour Name  * @mac_id: mac_id
1969*5113495bSYour Name  * @tsf: pointer to update tsf value
1970*5113495bSYour Name  * @tsf_sync_soc_time: pointer to update tsf sync time
1971*5113495bSYour Name  *
1972*5113495bSYour Name  * Return: None.
1973*5113495bSYour Name  */
1974*5113495bSYour Name static void
hal_get_tsf_time_kiwi(hal_soc_handle_t hal_soc_hdl,uint32_t tsf_id,uint32_t mac_id,uint64_t * tsf,uint64_t * tsf_sync_soc_time)1975*5113495bSYour Name hal_get_tsf_time_kiwi(hal_soc_handle_t hal_soc_hdl, uint32_t tsf_id,
1976*5113495bSYour Name 		      uint32_t mac_id, uint64_t *tsf,
1977*5113495bSYour Name 		      uint64_t *tsf_sync_soc_time)
1978*5113495bSYour Name {
1979*5113495bSYour Name 	struct hal_soc *soc = (struct hal_soc *)hal_soc_hdl;
1980*5113495bSYour Name 	uint64_t global_time_low_offset, global_time_high_offset;
1981*5113495bSYour Name 	uint64_t tsf_offset_low, tsf_offset_hi;
1982*5113495bSYour Name 	uint64_t fw_time, global_time, sync_time;
1983*5113495bSYour Name 	enum hal_scratch_reg_enum tsf_enum_low = 0, tsf_enum_high = 0;
1984*5113495bSYour Name 
1985*5113495bSYour Name 	if (hif_force_wake_request(soc->hif_handle))
1986*5113495bSYour Name 		return;
1987*5113495bSYour Name 
1988*5113495bSYour Name 	hal_get_tsf_enum(tsf_id, mac_id, &tsf_enum_low, &tsf_enum_high);
1989*5113495bSYour Name 	sync_time = qdf_get_log_timestamp();
1990*5113495bSYour Name 	fw_time = hal_tsf_get_fw_time(soc);
1991*5113495bSYour Name 
1992*5113495bSYour Name 	global_time_low_offset =
1993*5113495bSYour Name 		hal_tsf_read_scratch_reg(soc, PMM_QTIMER_GLOBAL_OFFSET_LO_US);
1994*5113495bSYour Name 	global_time_high_offset =
1995*5113495bSYour Name 		hal_tsf_read_scratch_reg(soc, PMM_QTIMER_GLOBAL_OFFSET_HI_US);
1996*5113495bSYour Name 
1997*5113495bSYour Name 	tsf_offset_low = hal_tsf_read_scratch_reg(soc, tsf_enum_low);
1998*5113495bSYour Name 	tsf_offset_hi = hal_tsf_read_scratch_reg(soc, tsf_enum_high);
1999*5113495bSYour Name 
2000*5113495bSYour Name 	fw_time = hal_fw_qtime_to_usecs(fw_time);
2001*5113495bSYour Name 	global_time = fw_time +
2002*5113495bSYour Name 		      (global_time_low_offset |
2003*5113495bSYour Name 		      (global_time_high_offset << 32));
2004*5113495bSYour Name 
2005*5113495bSYour Name 	*tsf = global_time + (tsf_offset_low | (tsf_offset_hi << 32));
2006*5113495bSYour Name 	*tsf_sync_soc_time = qdf_log_timestamp_to_usecs(sync_time);
2007*5113495bSYour Name 
2008*5113495bSYour Name 	hif_force_wake_release(soc->hif_handle);
2009*5113495bSYour Name }
2010*5113495bSYour Name #else
2011*5113495bSYour Name static inline void
hal_get_tsf_time_kiwi(hal_soc_handle_t hal_soc_hdl,uint32_t tsf_id,uint32_t mac_id,uint64_t * tsf,uint64_t * tsf_sync_soc_time)2012*5113495bSYour Name hal_get_tsf_time_kiwi(hal_soc_handle_t hal_soc_hdl, uint32_t tsf_id,
2013*5113495bSYour Name 		      uint32_t mac_id, uint64_t *tsf,
2014*5113495bSYour Name 		      uint64_t *tsf_sync_soc_time)
2015*5113495bSYour Name {
2016*5113495bSYour Name }
2017*5113495bSYour Name #endif
2018*5113495bSYour Name 
hal_rx_reo_ent_get_src_link_id_kiwi(hal_rxdma_desc_t rx_desc,uint8_t * src_link_id)2019*5113495bSYour Name static QDF_STATUS hal_rx_reo_ent_get_src_link_id_kiwi(hal_rxdma_desc_t rx_desc,
2020*5113495bSYour Name 						      uint8_t *src_link_id)
2021*5113495bSYour Name {
2022*5113495bSYour Name 	struct reo_entrance_ring *reo_ent_desc =
2023*5113495bSYour Name 					(struct reo_entrance_ring *)rx_desc;
2024*5113495bSYour Name 
2025*5113495bSYour Name 	*src_link_id = reo_ent_desc->src_link_id;
2026*5113495bSYour Name 
2027*5113495bSYour Name 	return QDF_STATUS_SUCCESS;
2028*5113495bSYour Name }
2029*5113495bSYour Name 
2030*5113495bSYour Name /**
2031*5113495bSYour Name  * hal_rx_en_mcast_fp_data_filter_kiwi() - Is mcast filter pass enabled
2032*5113495bSYour Name  *
2033*5113495bSYour Name  * Return: false for BE MCC
2034*5113495bSYour Name  */
2035*5113495bSYour Name static inline
hal_rx_en_mcast_fp_data_filter_kiwi(void)2036*5113495bSYour Name bool hal_rx_en_mcast_fp_data_filter_kiwi(void)
2037*5113495bSYour Name {
2038*5113495bSYour Name 	return false;
2039*5113495bSYour Name }
2040*5113495bSYour Name 
2041*5113495bSYour Name #ifdef QCA_WIFI_KIWI_V2
2042*5113495bSYour Name /**
2043*5113495bSYour Name  * hal_srng_dst_hw_init_misc_1_kiwi() - Function to initialize MISC_1 register
2044*5113495bSYour Name  *                                      of destination ring HW
2045*5113495bSYour Name  * @srng: SRNG ring pointer
2046*5113495bSYour Name  *
2047*5113495bSYour Name  * Return: None
2048*5113495bSYour Name  */
2049*5113495bSYour Name static inline
hal_srng_dst_hw_init_misc_1_kiwi(struct hal_srng * srng)2050*5113495bSYour Name void hal_srng_dst_hw_init_misc_1_kiwi(struct hal_srng *srng)
2051*5113495bSYour Name {
2052*5113495bSYour Name 	uint32_t reg_val = 0;
2053*5113495bSYour Name 
2054*5113495bSYour Name 	/* number threshold for pointer update */
2055*5113495bSYour Name 	if (srng->pointer_num_threshold)
2056*5113495bSYour Name 		reg_val |= SRNG_SM(SRNG_DST_HW_FLD(MISC_1,
2057*5113495bSYour Name 						   NUM_THRESHOLD_TO_UPDATE),
2058*5113495bSYour Name 				   srng->pointer_num_threshold);
2059*5113495bSYour Name 	/* timer threshold for pointer update */
2060*5113495bSYour Name 	if (srng->pointer_timer_threshold)
2061*5113495bSYour Name 		reg_val |= SRNG_SM(SRNG_DST_HW_FLD(MISC_1,
2062*5113495bSYour Name 						   TIME_THRESHOLD_TO_UPDATE),
2063*5113495bSYour Name 				   srng->pointer_timer_threshold);
2064*5113495bSYour Name 
2065*5113495bSYour Name 	if (reg_val)
2066*5113495bSYour Name 		SRNG_DST_REG_WRITE(srng, MISC_1, reg_val);
2067*5113495bSYour Name }
2068*5113495bSYour Name 
2069*5113495bSYour Name /**
2070*5113495bSYour Name  * hal_srng_hw_reg_offset_init_misc_1_kiwi() - Initialize the HW srng register
2071*5113495bSYour Name  *                                             offset of MISC_1
2072*5113495bSYour Name  * @hal_soc: HAL Soc handle
2073*5113495bSYour Name  *
2074*5113495bSYour Name  * Return: None
2075*5113495bSYour Name  */
2076*5113495bSYour Name static inline
hal_srng_hw_reg_offset_init_misc_1_kiwi(struct hal_soc * hal_soc)2077*5113495bSYour Name void hal_srng_hw_reg_offset_init_misc_1_kiwi(struct hal_soc *hal_soc)
2078*5113495bSYour Name {
2079*5113495bSYour Name 	int32_t *hw_reg_offset = hal_soc->hal_hw_reg_offset;
2080*5113495bSYour Name 
2081*5113495bSYour Name 	hw_reg_offset[DST_MISC_1] = REG_OFFSET(DST, MISC_1);
2082*5113495bSYour Name }
2083*5113495bSYour Name #else
2084*5113495bSYour Name static inline
hal_srng_dst_hw_init_misc_1_kiwi(struct hal_srng * srng)2085*5113495bSYour Name void hal_srng_dst_hw_init_misc_1_kiwi(struct hal_srng *srng)
2086*5113495bSYour Name {
2087*5113495bSYour Name }
2088*5113495bSYour Name 
2089*5113495bSYour Name static inline
hal_srng_hw_reg_offset_init_misc_1_kiwi(struct hal_soc * hal_soc)2090*5113495bSYour Name void hal_srng_hw_reg_offset_init_misc_1_kiwi(struct hal_soc *hal_soc)
2091*5113495bSYour Name {
2092*5113495bSYour Name }
2093*5113495bSYour Name #endif
2094*5113495bSYour Name 
2095*5113495bSYour Name /**
2096*5113495bSYour Name  * hal_srng_dst_hw_init_kiwi() - Function to initialize SRNG
2097*5113495bSYour Name  *                               destination ring HW
2098*5113495bSYour Name  * @hal_soc: HAL SOC handle
2099*5113495bSYour Name  * @srng: SRNG ring pointer
2100*5113495bSYour Name  * @idle_check: Check if ring is idle
2101*5113495bSYour Name  * @idx: Ring index
2102*5113495bSYour Name  *
2103*5113495bSYour Name  * Return: None
2104*5113495bSYour Name  */
2105*5113495bSYour Name static inline
hal_srng_dst_hw_init_kiwi(struct hal_soc * hal_soc,struct hal_srng * srng,bool idle_check,uint32_t idx)2106*5113495bSYour Name void hal_srng_dst_hw_init_kiwi(struct hal_soc *hal_soc,
2107*5113495bSYour Name 			       struct hal_srng *srng,
2108*5113495bSYour Name 			       bool idle_check,
2109*5113495bSYour Name 			       uint32_t idx)
2110*5113495bSYour Name {
2111*5113495bSYour Name 	hal_srng_dst_hw_init_misc_1_kiwi(srng);
2112*5113495bSYour Name 
2113*5113495bSYour Name 	hal_srng_dst_hw_init_generic(hal_soc, srng, idle_check, idx);
2114*5113495bSYour Name }
2115*5113495bSYour Name 
hal_hw_txrx_ops_attach_kiwi(struct hal_soc * hal_soc)2116*5113495bSYour Name static void hal_hw_txrx_ops_attach_kiwi(struct hal_soc *hal_soc)
2117*5113495bSYour Name {
2118*5113495bSYour Name 	/* init and setup */
2119*5113495bSYour Name 	hal_soc->ops->hal_srng_dst_hw_init = hal_srng_dst_hw_init_kiwi;
2120*5113495bSYour Name 	hal_soc->ops->hal_srng_src_hw_init = hal_srng_src_hw_init_generic;
2121*5113495bSYour Name 	hal_soc->ops->hal_get_hw_hptp = hal_get_hw_hptp_generic;
2122*5113495bSYour Name 	hal_soc->ops->hal_get_window_address = hal_get_window_address_kiwi;
2123*5113495bSYour Name 	hal_soc->ops->hal_reo_set_err_dst_remap =
2124*5113495bSYour Name 						hal_reo_set_err_dst_remap_kiwi;
2125*5113495bSYour Name 	hal_soc->ops->hal_reo_enable_pn_in_dest =
2126*5113495bSYour Name 						hal_reo_enable_pn_in_dest_kiwi;
2127*5113495bSYour Name 	/* Overwrite the default BE ops */
2128*5113495bSYour Name 	hal_soc->ops->hal_get_rx_max_ba_window = hal_get_rx_max_ba_window_kiwi;
2129*5113495bSYour Name 	hal_soc->ops->hal_get_reo_qdesc_size = hal_get_reo_qdesc_size_kiwi;
2130*5113495bSYour Name 
2131*5113495bSYour Name 	/* tx */
2132*5113495bSYour Name 	hal_soc->ops->hal_tx_set_dscp_tid_map = hal_tx_set_dscp_tid_map_kiwi;
2133*5113495bSYour Name 	hal_soc->ops->hal_tx_update_dscp_tid = hal_tx_update_dscp_tid_kiwi;
2134*5113495bSYour Name 	hal_soc->ops->hal_tx_comp_get_status =
2135*5113495bSYour Name 					hal_tx_comp_get_status_generic_be;
2136*5113495bSYour Name 	hal_soc->ops->hal_tx_init_cmd_credit_ring =
2137*5113495bSYour Name 					hal_tx_init_cmd_credit_ring_kiwi;
2138*5113495bSYour Name 	hal_soc->ops->hal_tx_config_rbm_mapping_be =
2139*5113495bSYour Name 				hal_tx_config_rbm_mapping_be_kiwi;
2140*5113495bSYour Name 
2141*5113495bSYour Name 	/* rx */
2142*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_start_nss_get = hal_rx_tlv_nss_get_be;
2143*5113495bSYour Name 	hal_soc->ops->hal_rx_mon_hw_desc_get_mpdu_status =
2144*5113495bSYour Name 		hal_rx_mon_hw_desc_get_mpdu_status_be;
2145*5113495bSYour Name 	hal_soc->ops->hal_rx_get_tlv = hal_rx_get_tlv_kiwi;
2146*5113495bSYour Name 	hal_soc->ops->hal_rx_pkt_hdr_get = hal_rx_pkt_hdr_get_be;
2147*5113495bSYour Name 	hal_soc->ops->hal_rx_proc_phyrx_other_receive_info_tlv =
2148*5113495bSYour Name 		hal_rx_proc_phyrx_other_receive_info_tlv_kiwi;
2149*5113495bSYour Name 
2150*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_msdu_end_tlv = hal_rx_dump_msdu_end_tlv_kiwi;
2151*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_mpdu_start_tlv =
2152*5113495bSYour Name 					hal_rx_dump_mpdu_start_tlv_kiwi;
2153*5113495bSYour Name 	hal_soc->ops->hal_rx_dump_pkt_tlvs = hal_rx_dump_pkt_tlvs_kiwi;
2154*5113495bSYour Name 	hal_soc->ops->hal_rx_desc_get_80211_hdr = hal_rx_desc_get_80211_hdr_be;
2155*5113495bSYour Name 
2156*5113495bSYour Name 	hal_soc->ops->hal_get_link_desc_size = hal_get_link_desc_size_kiwi;
2157*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_tid_get = hal_rx_tlv_tid_get_be;
2158*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_start_reception_type_get =
2159*5113495bSYour Name 		hal_rx_tlv_reception_type_get_be;
2160*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_da_idx_get =
2161*5113495bSYour Name 					hal_rx_msdu_end_da_idx_get_be;
2162*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_desc_info_get_ptr =
2163*5113495bSYour Name 					hal_rx_msdu_desc_info_get_ptr_kiwi;
2164*5113495bSYour Name 	hal_soc->ops->hal_rx_link_desc_msdu0_ptr =
2165*5113495bSYour Name 					hal_rx_link_desc_msdu0_ptr_kiwi;
2166*5113495bSYour Name 	hal_soc->ops->hal_reo_status_get_header =
2167*5113495bSYour Name 					hal_reo_status_get_header_kiwi;
2168*5113495bSYour Name 	hal_soc->ops->hal_rx_status_get_tlv_info =
2169*5113495bSYour Name 					hal_rx_status_get_tlv_info_wrapper_be;
2170*5113495bSYour Name 	hal_soc->ops->hal_rx_wbm_err_info_get =
2171*5113495bSYour Name 					hal_rx_wbm_err_info_get_generic_be;
2172*5113495bSYour Name 	hal_soc->ops->hal_rx_priv_info_set_in_tlv =
2173*5113495bSYour Name 					hal_rx_priv_info_set_in_tlv_be;
2174*5113495bSYour Name 	hal_soc->ops->hal_rx_priv_info_get_from_tlv =
2175*5113495bSYour Name 					hal_rx_priv_info_get_from_tlv_be;
2176*5113495bSYour Name 
2177*5113495bSYour Name 	hal_soc->ops->hal_tx_set_pcp_tid_map =
2178*5113495bSYour Name 					hal_tx_set_pcp_tid_map_generic_be;
2179*5113495bSYour Name 	hal_soc->ops->hal_tx_update_pcp_tid_map =
2180*5113495bSYour Name 					hal_tx_update_pcp_tid_generic_be;
2181*5113495bSYour Name 	hal_soc->ops->hal_tx_set_tidmap_prty =
2182*5113495bSYour Name 					hal_tx_update_tidmap_prty_generic_be;
2183*5113495bSYour Name 	hal_soc->ops->hal_rx_get_rx_fragment_number =
2184*5113495bSYour Name 					hal_rx_get_rx_fragment_number_be;
2185*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_da_is_mcbc_get =
2186*5113495bSYour Name 					hal_rx_tlv_da_is_mcbc_get_be;
2187*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_sa_is_valid_get =
2188*5113495bSYour Name 		hal_rx_tlv_sa_is_valid_get_be;
2189*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_sa_idx_get = hal_rx_tlv_sa_idx_get_be,
2190*5113495bSYour Name 	hal_soc->ops->hal_rx_desc_is_first_msdu =
2191*5113495bSYour Name 					hal_rx_desc_is_first_msdu_be;
2192*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_l3_hdr_padding_get =
2193*5113495bSYour Name 		hal_rx_tlv_l3_hdr_padding_get_be;
2194*5113495bSYour Name 	hal_soc->ops->hal_rx_encryption_info_valid =
2195*5113495bSYour Name 					hal_rx_encryption_info_valid_be;
2196*5113495bSYour Name 	hal_soc->ops->hal_rx_print_pn = hal_rx_print_pn_be;
2197*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_first_msdu_get =
2198*5113495bSYour Name 					hal_rx_tlv_first_msdu_get_be;
2199*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_da_is_valid_get =
2200*5113495bSYour Name 		hal_rx_tlv_da_is_valid_get_be;
2201*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_last_msdu_get =
2202*5113495bSYour Name 					hal_rx_tlv_last_msdu_get_be;
2203*5113495bSYour Name 	hal_soc->ops->hal_rx_get_mpdu_mac_ad4_valid =
2204*5113495bSYour Name 					hal_rx_get_mpdu_mac_ad4_valid_be;
2205*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_sw_peer_id_get =
2206*5113495bSYour Name 		hal_rx_mpdu_start_sw_peer_id_get_be;
2207*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_peer_meta_data_get =
2208*5113495bSYour Name 		hal_rx_mpdu_peer_meta_data_get_be;
2209*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_to_ds = hal_rx_mpdu_get_to_ds_be;
2210*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_fr_ds = hal_rx_mpdu_get_fr_ds_be;
2211*5113495bSYour Name 	hal_soc->ops->hal_rx_get_mpdu_frame_control_valid =
2212*5113495bSYour Name 		hal_rx_get_mpdu_frame_control_valid_be;
2213*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_addr1 = hal_rx_mpdu_get_addr1_be;
2214*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_addr2 = hal_rx_mpdu_get_addr2_be;
2215*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_addr3 = hal_rx_mpdu_get_addr3_be;
2216*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_get_addr4 = hal_rx_mpdu_get_addr4_be;
2217*5113495bSYour Name 	hal_soc->ops->hal_rx_get_mpdu_sequence_control_valid =
2218*5113495bSYour Name 		hal_rx_get_mpdu_sequence_control_valid_be;
2219*5113495bSYour Name 	hal_soc->ops->hal_rx_is_unicast = hal_rx_is_unicast_be;
2220*5113495bSYour Name 	hal_soc->ops->hal_rx_tid_get = hal_rx_tid_get_be;
2221*5113495bSYour Name 	hal_soc->ops->hal_rx_hw_desc_get_ppduid_get =
2222*5113495bSYour Name 					hal_rx_hw_desc_get_ppduid_get_be;
2223*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu0_buffer_addr_lsb =
2224*5113495bSYour Name 					hal_rx_msdu0_buffer_addr_lsb_kiwi;
2225*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_desc_info_ptr_get =
2226*5113495bSYour Name 					hal_rx_msdu_desc_info_ptr_get_kiwi;
2227*5113495bSYour Name 	hal_soc->ops->hal_ent_mpdu_desc_info = hal_ent_mpdu_desc_info_kiwi;
2228*5113495bSYour Name 	hal_soc->ops->hal_dst_mpdu_desc_info = hal_dst_mpdu_desc_info_kiwi;
2229*5113495bSYour Name 	hal_soc->ops->hal_rx_phy_legacy_get_rssi =
2230*5113495bSYour Name 					hal_rx_phy_legacy_get_rssi_kiwi;
2231*5113495bSYour Name 	hal_soc->ops->hal_rx_get_fc_valid = hal_rx_get_fc_valid_be;
2232*5113495bSYour Name 	hal_soc->ops->hal_rx_get_to_ds_flag = hal_rx_get_to_ds_flag_be;
2233*5113495bSYour Name 	hal_soc->ops->hal_rx_get_mac_addr2_valid =
2234*5113495bSYour Name 					hal_rx_get_mac_addr2_valid_be;
2235*5113495bSYour Name 	hal_soc->ops->hal_rx_get_filter_category =
2236*5113495bSYour Name 					hal_rx_get_filter_category_be;
2237*5113495bSYour Name 	hal_soc->ops->hal_rx_get_ppdu_id = hal_rx_get_ppdu_id_be;
2238*5113495bSYour Name 	hal_soc->ops->hal_reo_config = hal_reo_config_kiwi;
2239*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_flow_idx_get = hal_rx_msdu_flow_idx_get_be;
2240*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_flow_idx_invalid =
2241*5113495bSYour Name 					hal_rx_msdu_flow_idx_invalid_be;
2242*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_flow_idx_timeout =
2243*5113495bSYour Name 					hal_rx_msdu_flow_idx_timeout_be;
2244*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_fse_metadata_get =
2245*5113495bSYour Name 					hal_rx_msdu_fse_metadata_get_be;
2246*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_cce_match_get =
2247*5113495bSYour Name 					hal_rx_msdu_cce_match_get_be;
2248*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_cce_metadata_get =
2249*5113495bSYour Name 					hal_rx_msdu_cce_metadata_get_be;
2250*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_get_flow_params =
2251*5113495bSYour Name 					hal_rx_msdu_get_flow_params_be;
2252*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_get_tcp_chksum =
2253*5113495bSYour Name 					hal_rx_tlv_get_tcp_chksum_be;
2254*5113495bSYour Name 	hal_soc->ops->hal_rx_get_rx_sequence = hal_rx_get_rx_sequence_be;
2255*5113495bSYour Name #if defined(QCA_WIFI_KIWI) && defined(WLAN_CFR_ENABLE) && \
2256*5113495bSYour Name 	defined(WLAN_ENH_CFR_ENABLE)
2257*5113495bSYour Name 	hal_soc->ops->hal_rx_get_bb_info = hal_rx_get_bb_info_kiwi;
2258*5113495bSYour Name 	hal_soc->ops->hal_rx_get_rtt_info = hal_rx_get_rtt_info_kiwi;
2259*5113495bSYour Name #else
2260*5113495bSYour Name 	hal_soc->ops->hal_rx_get_bb_info = NULL;
2261*5113495bSYour Name 	hal_soc->ops->hal_rx_get_rtt_info = NULL;
2262*5113495bSYour Name #endif
2263*5113495bSYour Name 	/* rx - msdu end fast path info fields */
2264*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_packet_metadata_get =
2265*5113495bSYour Name 		hal_rx_msdu_packet_metadata_get_generic_be;
2266*5113495bSYour Name 	hal_soc->ops->hal_rx_get_fisa_cumulative_l4_checksum =
2267*5113495bSYour Name 		hal_rx_get_fisa_cumulative_l4_checksum_be;
2268*5113495bSYour Name 	hal_soc->ops->hal_rx_get_fisa_cumulative_ip_length =
2269*5113495bSYour Name 		hal_rx_get_fisa_cumulative_ip_length_be;
2270*5113495bSYour Name 	hal_soc->ops->hal_rx_get_udp_proto = hal_rx_get_udp_proto_be;
2271*5113495bSYour Name 	hal_soc->ops->hal_rx_get_fisa_flow_agg_continuation =
2272*5113495bSYour Name 		hal_rx_get_flow_agg_continuation_be;
2273*5113495bSYour Name 	hal_soc->ops->hal_rx_get_fisa_flow_agg_count =
2274*5113495bSYour Name 					hal_rx_get_flow_agg_count_be;
2275*5113495bSYour Name 	hal_soc->ops->hal_rx_get_fisa_timeout = hal_rx_get_fisa_timeout_be;
2276*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_tlv_tag_valid =
2277*5113495bSYour Name 		hal_rx_mpdu_start_tlv_tag_valid_be;
2278*5113495bSYour Name 	hal_soc->ops->hal_rx_reo_prev_pn_get = hal_rx_reo_prev_pn_get_kiwi;
2279*5113495bSYour Name 
2280*5113495bSYour Name 	/* rx - TLV struct offsets */
2281*5113495bSYour Name 	hal_register_rx_pkt_hdr_tlv_api_kiwi(hal_soc);
2282*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_end_offset_get =
2283*5113495bSYour Name 					hal_rx_msdu_end_offset_get_generic;
2284*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_start_offset_get =
2285*5113495bSYour Name 					hal_rx_mpdu_start_offset_get_generic;
2286*5113495bSYour Name 	hal_soc->ops->hal_rx_flow_setup_fse = hal_rx_flow_setup_fse_kiwi;
2287*5113495bSYour Name 	hal_soc->ops->hal_rx_flow_get_tuple_info =
2288*5113495bSYour Name 					hal_rx_flow_get_tuple_info_be;
2289*5113495bSYour Name 	hal_soc->ops->hal_rx_flow_delete_entry =
2290*5113495bSYour Name 					hal_rx_flow_delete_entry_be;
2291*5113495bSYour Name 	hal_soc->ops->hal_rx_fst_get_fse_size = hal_rx_fst_get_fse_size_be;
2292*5113495bSYour Name 	hal_soc->ops->hal_compute_reo_remap_ix2_ix3 =
2293*5113495bSYour Name 					hal_compute_reo_remap_ix2_ix3_kiwi;
2294*5113495bSYour Name 	hal_soc->ops->hal_rx_flow_setup_cmem_fse =
2295*5113495bSYour Name 						hal_rx_flow_setup_cmem_fse_kiwi;
2296*5113495bSYour Name 	hal_soc->ops->hal_rx_flow_get_cmem_fse_ts =
2297*5113495bSYour Name 					hal_rx_flow_get_cmem_fse_ts_kiwi;
2298*5113495bSYour Name 	hal_soc->ops->hal_rx_flow_get_cmem_fse = hal_rx_flow_get_cmem_fse_kiwi;
2299*5113495bSYour Name 	hal_soc->ops->hal_cmem_write = hal_cmem_write_kiwi;
2300*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_get_reo_destination_indication =
2301*5113495bSYour Name 		hal_rx_msdu_get_reo_destination_indication_be;
2302*5113495bSYour Name 	hal_soc->ops->hal_tx_get_num_tcl_banks = hal_tx_get_num_tcl_banks_kiwi;
2303*5113495bSYour Name 	hal_soc->ops->hal_rx_get_tlv_size = hal_rx_get_tlv_size_generic_be;
2304*5113495bSYour Name 	hal_soc->ops->hal_rx_msdu_is_wlan_mcast =
2305*5113495bSYour Name 					hal_rx_msdu_is_wlan_mcast_generic_be;
2306*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_bw_get =
2307*5113495bSYour Name 					hal_rx_tlv_bw_get_be;
2308*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_get_is_decrypted =
2309*5113495bSYour Name 						hal_rx_tlv_get_is_decrypted_be;
2310*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_mic_err_get = hal_rx_tlv_mic_err_get_be;
2311*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_get_pkt_type = hal_rx_tlv_get_pkt_type_be;
2312*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_get_freq = hal_rx_tlv_get_freq_be;
2313*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_get_freq = hal_rx_tlv_get_freq_be;
2314*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_mpdu_len_err_get =
2315*5113495bSYour Name 					hal_rx_tlv_mpdu_len_err_get_be;
2316*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_mpdu_fcs_err_get =
2317*5113495bSYour Name 					hal_rx_tlv_mpdu_fcs_err_get_be;
2318*5113495bSYour Name 
2319*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_first_mpdu_get = hal_rx_tlv_first_mpdu_get_be;
2320*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_decrypt_err_get =
2321*5113495bSYour Name 					hal_rx_tlv_decrypt_err_get_be;
2322*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_rate_mcs_get = hal_rx_tlv_rate_mcs_get_be;
2323*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_sgi_get = hal_rx_tlv_sgi_get_be;
2324*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_decap_format_get =
2325*5113495bSYour Name 					hal_rx_tlv_decap_format_get_be;
2326*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_get_offload_info =
2327*5113495bSYour Name 					hal_rx_tlv_get_offload_info_be;
2328*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_phy_ppdu_id_get =
2329*5113495bSYour Name 					hal_rx_attn_phy_ppdu_id_get_be;
2330*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_msdu_done_get = hal_rx_tlv_msdu_done_get_be;
2331*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_msdu_len_get =
2332*5113495bSYour Name 					hal_rx_msdu_start_msdu_len_get_be;
2333*5113495bSYour Name 	hal_soc->ops->hal_rx_get_frame_ctrl_field =
2334*5113495bSYour Name 					hal_rx_get_frame_ctrl_field_be;
2335*5113495bSYour Name 	hal_soc->ops->hal_rx_get_proto_params = hal_rx_get_proto_params_be;
2336*5113495bSYour Name 	hal_soc->ops->hal_rx_get_l3_l4_offsets = hal_rx_get_l3_l4_offsets_be;
2337*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_csum_err_get = hal_rx_tlv_csum_err_get_be;
2338*5113495bSYour Name 	hal_soc->ops->hal_rx_mpdu_info_ampdu_flag_get =
2339*5113495bSYour Name 					hal_rx_mpdu_info_ampdu_flag_get_be;
2340*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_msdu_len_set =
2341*5113495bSYour Name 					hal_rx_msdu_start_msdu_len_set_be;
2342*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_populate_mpdu_desc_info =
2343*5113495bSYour Name 				hal_rx_tlv_populate_mpdu_desc_info_kiwi;
2344*5113495bSYour Name 	hal_soc->ops->hal_get_idle_link_bm_id = hal_get_idle_link_bm_id_kiwi;
2345*5113495bSYour Name #ifdef WLAN_FEATURE_MARK_FIRST_WAKEUP_PACKET
2346*5113495bSYour Name 	hal_soc->ops->hal_get_first_wow_wakeup_packet =
2347*5113495bSYour Name 		hal_get_first_wow_wakeup_packet_kiwi;
2348*5113495bSYour Name #endif
2349*5113495bSYour Name 	hal_soc->ops->hal_compute_reo_remap_ix0 = NULL;
2350*5113495bSYour Name 
2351*5113495bSYour Name 	hal_soc->ops->hal_rx_tlv_l3_type_get = hal_rx_tlv_l3_type_get_be;
2352*5113495bSYour Name 	hal_soc->ops->hal_tx_vdev_mismatch_routing_set =
2353*5113495bSYour Name 		hal_tx_vdev_mismatch_routing_set_generic_be;
2354*5113495bSYour Name 	hal_soc->ops->hal_tx_mcast_mlo_reinject_routing_set =
2355*5113495bSYour Name 		hal_tx_mcast_mlo_reinject_routing_set_generic_be;
2356*5113495bSYour Name 	hal_soc->ops->hal_get_ba_aging_timeout =
2357*5113495bSYour Name 		hal_get_ba_aging_timeout_be_generic;
2358*5113495bSYour Name 	hal_soc->ops->hal_setup_link_idle_list =
2359*5113495bSYour Name 		hal_setup_link_idle_list_generic_be;
2360*5113495bSYour Name 	hal_soc->ops->hal_cookie_conversion_reg_cfg_be =
2361*5113495bSYour Name 		hal_cookie_conversion_reg_cfg_generic_be;
2362*5113495bSYour Name 	hal_soc->ops->hal_set_ba_aging_timeout =
2363*5113495bSYour Name 		hal_set_ba_aging_timeout_be_generic;
2364*5113495bSYour Name 	hal_soc->ops->hal_tx_populate_bank_register =
2365*5113495bSYour Name 		hal_tx_populate_bank_register_be;
2366*5113495bSYour Name 	hal_soc->ops->hal_tx_vdev_mcast_ctrl_set =
2367*5113495bSYour Name 		hal_tx_vdev_mcast_ctrl_set_be;
2368*5113495bSYour Name 	hal_soc->ops->hal_get_tsf_time = hal_get_tsf_time_kiwi;
2369*5113495bSYour Name 	hal_soc->ops->hal_rx_reo_ent_get_src_link_id =
2370*5113495bSYour Name 					hal_rx_reo_ent_get_src_link_id_kiwi;
2371*5113495bSYour Name #ifdef FEATURE_DIRECT_LINK
2372*5113495bSYour Name 	hal_soc->ops->hal_srng_set_msi_config = hal_srng_set_msi_config;
2373*5113495bSYour Name #endif
2374*5113495bSYour Name 	hal_soc->ops->hal_rx_en_mcast_fp_data_filter =
2375*5113495bSYour Name 					hal_rx_en_mcast_fp_data_filter_kiwi;
2376*5113495bSYour Name #ifdef WLAN_PKT_CAPTURE_TX_2_0
2377*5113495bSYour Name 	hal_soc->ops->hal_txmon_is_mon_buf_addr_tlv =
2378*5113495bSYour Name 				hal_txmon_is_mon_buf_addr_tlv_generic_be;
2379*5113495bSYour Name 	hal_soc->ops->hal_txmon_populate_packet_info =
2380*5113495bSYour Name 				hal_txmon_populate_packet_info_generic_be;
2381*5113495bSYour Name 	hal_soc->ops->hal_txmon_status_parse_tlv =
2382*5113495bSYour Name 				hal_txmon_status_parse_tlv_generic_be;
2383*5113495bSYour Name 	hal_soc->ops->hal_txmon_status_get_num_users =
2384*5113495bSYour Name 				hal_txmon_status_get_num_users_generic_be;
2385*5113495bSYour Name #endif /* WLAN_PKT_CAPTURE_TX_2_0 */
2386*5113495bSYour Name };
2387*5113495bSYour Name 
2388*5113495bSYour Name struct hal_hw_srng_config hw_srng_table_kiwi[] = {
2389*5113495bSYour Name 	/* TODO: max_rings can populated by querying HW capabilities */
2390*5113495bSYour Name 	{ /* REO_DST */
2391*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO2SW1,
2392*5113495bSYour Name 		.max_rings = 8,
2393*5113495bSYour Name 		.entry_size = sizeof(struct reo_destination_ring) >> 2,
2394*5113495bSYour Name 		.lmac_ring = FALSE,
2395*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
2396*5113495bSYour Name 		.nf_irq_support = true,
2397*5113495bSYour Name 		.reg_start = {
2398*5113495bSYour Name 			HWIO_REO_R0_REO2SW1_RING_BASE_LSB_ADDR(
2399*5113495bSYour Name 				REO_REG_REG_BASE),
2400*5113495bSYour Name 			HWIO_REO_R2_REO2SW1_RING_HP_ADDR(
2401*5113495bSYour Name 				REO_REG_REG_BASE)
2402*5113495bSYour Name 		},
2403*5113495bSYour Name 		.reg_size = {
2404*5113495bSYour Name 			HWIO_REO_R0_REO2SW2_RING_BASE_LSB_ADDR(0) -
2405*5113495bSYour Name 				HWIO_REO_R0_REO2SW1_RING_BASE_LSB_ADDR(0),
2406*5113495bSYour Name 			HWIO_REO_R2_REO2SW2_RING_HP_ADDR(0) -
2407*5113495bSYour Name 				HWIO_REO_R2_REO2SW1_RING_HP_ADDR(0),
2408*5113495bSYour Name 		},
2409*5113495bSYour Name 		.max_size =
2410*5113495bSYour Name 			HWIO_REO_R0_REO2SW1_RING_BASE_MSB_RING_SIZE_BMSK >>
2411*5113495bSYour Name 			HWIO_REO_R0_REO2SW1_RING_BASE_MSB_RING_SIZE_SHFT,
2412*5113495bSYour Name 	},
2413*5113495bSYour Name 	{ /* REO_EXCEPTION */
2414*5113495bSYour Name 		/* Designating REO2SW0 ring as exception ring. */
2415*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO2SW0,
2416*5113495bSYour Name 		.max_rings = 1,
2417*5113495bSYour Name 		.entry_size = sizeof(struct reo_destination_ring) >> 2,
2418*5113495bSYour Name 		.lmac_ring = FALSE,
2419*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
2420*5113495bSYour Name 		.reg_start = {
2421*5113495bSYour Name 			HWIO_REO_R0_REO2SW0_RING_BASE_LSB_ADDR(
2422*5113495bSYour Name 				REO_REG_REG_BASE),
2423*5113495bSYour Name 			HWIO_REO_R2_REO2SW0_RING_HP_ADDR(
2424*5113495bSYour Name 				REO_REG_REG_BASE)
2425*5113495bSYour Name 		},
2426*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
2427*5113495bSYour Name 		 * type are supported
2428*5113495bSYour Name 		 */
2429*5113495bSYour Name 		.reg_size = {},
2430*5113495bSYour Name 		.max_size =
2431*5113495bSYour Name 			HWIO_REO_R0_REO2SW0_RING_BASE_MSB_RING_SIZE_BMSK >>
2432*5113495bSYour Name 			HWIO_REO_R0_REO2SW0_RING_BASE_MSB_RING_SIZE_SHFT,
2433*5113495bSYour Name 	},
2434*5113495bSYour Name 	{ /* REO_REINJECT */
2435*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2REO,
2436*5113495bSYour Name 		.max_rings = 1,
2437*5113495bSYour Name 		.entry_size = sizeof(struct reo_entrance_ring) >> 2,
2438*5113495bSYour Name 		.lmac_ring = FALSE,
2439*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2440*5113495bSYour Name 		.reg_start = {
2441*5113495bSYour Name 			HWIO_REO_R0_SW2REO_RING_BASE_LSB_ADDR(
2442*5113495bSYour Name 				REO_REG_REG_BASE),
2443*5113495bSYour Name 			HWIO_REO_R2_SW2REO_RING_HP_ADDR(
2444*5113495bSYour Name 				REO_REG_REG_BASE)
2445*5113495bSYour Name 		},
2446*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
2447*5113495bSYour Name 		 * type are supported
2448*5113495bSYour Name 		 */
2449*5113495bSYour Name 		.reg_size = {},
2450*5113495bSYour Name 		.max_size = HWIO_REO_R0_SW2REO_RING_BASE_MSB_RING_SIZE_BMSK >>
2451*5113495bSYour Name 				HWIO_REO_R0_SW2REO_RING_BASE_MSB_RING_SIZE_SHFT,
2452*5113495bSYour Name 	},
2453*5113495bSYour Name 	{ /* REO_CMD */
2454*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO_CMD,
2455*5113495bSYour Name 		.max_rings = 1,
2456*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
2457*5113495bSYour Name 			sizeof(struct reo_get_queue_stats)) >> 2,
2458*5113495bSYour Name 		.lmac_ring = FALSE,
2459*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2460*5113495bSYour Name 		.reg_start = {
2461*5113495bSYour Name 			HWIO_REO_R0_REO_CMD_RING_BASE_LSB_ADDR(
2462*5113495bSYour Name 				REO_REG_REG_BASE),
2463*5113495bSYour Name 			HWIO_REO_R2_REO_CMD_RING_HP_ADDR(
2464*5113495bSYour Name 				REO_REG_REG_BASE),
2465*5113495bSYour Name 		},
2466*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
2467*5113495bSYour Name 		 * type are supported
2468*5113495bSYour Name 		 */
2469*5113495bSYour Name 		.reg_size = {},
2470*5113495bSYour Name 		.max_size =
2471*5113495bSYour Name 			HWIO_REO_R0_REO_CMD_RING_BASE_MSB_RING_SIZE_BMSK >>
2472*5113495bSYour Name 			HWIO_REO_R0_REO_CMD_RING_BASE_MSB_RING_SIZE_SHFT,
2473*5113495bSYour Name 	},
2474*5113495bSYour Name 	{ /* REO_STATUS */
2475*5113495bSYour Name 		.start_ring_id = HAL_SRNG_REO_STATUS,
2476*5113495bSYour Name 		.max_rings = 1,
2477*5113495bSYour Name 		.entry_size = (sizeof(struct tlv_32_hdr) +
2478*5113495bSYour Name 			sizeof(struct reo_get_queue_stats_status)) >> 2,
2479*5113495bSYour Name 		.lmac_ring = FALSE,
2480*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
2481*5113495bSYour Name 		.reg_start = {
2482*5113495bSYour Name 			HWIO_REO_R0_REO_STATUS_RING_BASE_LSB_ADDR(
2483*5113495bSYour Name 				REO_REG_REG_BASE),
2484*5113495bSYour Name 			HWIO_REO_R2_REO_STATUS_RING_HP_ADDR(
2485*5113495bSYour Name 				REO_REG_REG_BASE),
2486*5113495bSYour Name 		},
2487*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
2488*5113495bSYour Name 		 * type are supported
2489*5113495bSYour Name 		 */
2490*5113495bSYour Name 		.reg_size = {},
2491*5113495bSYour Name 		.max_size =
2492*5113495bSYour Name 			HWIO_REO_R0_REO_STATUS_RING_BASE_MSB_RING_SIZE_BMSK >>
2493*5113495bSYour Name 			HWIO_REO_R0_REO_STATUS_RING_BASE_MSB_RING_SIZE_SHFT,
2494*5113495bSYour Name 	},
2495*5113495bSYour Name 	{ /* TCL_DATA */
2496*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2TCL1,
2497*5113495bSYour Name 		.max_rings = 5,
2498*5113495bSYour Name 		.entry_size = sizeof(struct tcl_data_cmd) >> 2,
2499*5113495bSYour Name 		.lmac_ring = FALSE,
2500*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2501*5113495bSYour Name 		.reg_start = {
2502*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL1_RING_BASE_LSB_ADDR(
2503*5113495bSYour Name 				MAC_TCL_REG_REG_BASE),
2504*5113495bSYour Name 			HWIO_TCL_R2_SW2TCL1_RING_HP_ADDR(
2505*5113495bSYour Name 				MAC_TCL_REG_REG_BASE),
2506*5113495bSYour Name 		},
2507*5113495bSYour Name 		.reg_size = {
2508*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL2_RING_BASE_LSB_ADDR(0) -
2509*5113495bSYour Name 				HWIO_TCL_R0_SW2TCL1_RING_BASE_LSB_ADDR(0),
2510*5113495bSYour Name 			HWIO_TCL_R2_SW2TCL2_RING_HP_ADDR(0) -
2511*5113495bSYour Name 				HWIO_TCL_R2_SW2TCL1_RING_HP_ADDR(0),
2512*5113495bSYour Name 		},
2513*5113495bSYour Name 		.max_size =
2514*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL1_RING_BASE_MSB_RING_SIZE_BMSK >>
2515*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL1_RING_BASE_MSB_RING_SIZE_SHFT,
2516*5113495bSYour Name 	},
2517*5113495bSYour Name 	{ /* TCL_CMD */
2518*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2TCL_CMD,
2519*5113495bSYour Name #ifndef WLAN_DP_DISABLE_TCL_CMD_CRED_SRNG
2520*5113495bSYour Name 		.max_rings = 1,
2521*5113495bSYour Name #else
2522*5113495bSYour Name 		.max_rings = 0,
2523*5113495bSYour Name #endif
2524*5113495bSYour Name 		.entry_size = sizeof(struct tcl_gse_cmd) >> 2,
2525*5113495bSYour Name 		.lmac_ring =  FALSE,
2526*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2527*5113495bSYour Name 		.reg_start = {
2528*5113495bSYour Name 			HWIO_TCL_R0_SW2TCL_CREDIT_RING_BASE_LSB_ADDR(
2529*5113495bSYour Name 				MAC_TCL_REG_REG_BASE),
2530*5113495bSYour Name 			HWIO_TCL_R2_SW2TCL_CREDIT_RING_HP_ADDR(
2531*5113495bSYour Name 				MAC_TCL_REG_REG_BASE),
2532*5113495bSYour Name 		},
2533*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
2534*5113495bSYour Name 		 * type are supported
2535*5113495bSYour Name 		 */
2536*5113495bSYour Name 		.reg_size = {},
2537*5113495bSYour Name 		.max_size =
2538*5113495bSYour Name 		      HWIO_TCL_R0_SW2TCL_CREDIT_RING_BASE_MSB_RING_SIZE_BMSK >>
2539*5113495bSYour Name 		      HWIO_TCL_R0_SW2TCL_CREDIT_RING_BASE_MSB_RING_SIZE_SHFT,
2540*5113495bSYour Name 	},
2541*5113495bSYour Name 	{ /* TCL_STATUS */
2542*5113495bSYour Name 		.start_ring_id = HAL_SRNG_TCL_STATUS,
2543*5113495bSYour Name #ifndef WLAN_DP_DISABLE_TCL_CMD_CRED_SRNG
2544*5113495bSYour Name 		.max_rings = 1,
2545*5113495bSYour Name #else
2546*5113495bSYour Name 		.max_rings = 0,
2547*5113495bSYour Name #endif
2548*5113495bSYour Name 		/* confirm that TLV header is needed */
2549*5113495bSYour Name 		.entry_size = sizeof(struct tcl_status_ring) >> 2,
2550*5113495bSYour Name 		.lmac_ring = FALSE,
2551*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
2552*5113495bSYour Name 		.reg_start = {
2553*5113495bSYour Name 			HWIO_TCL_R0_TCL_STATUS1_RING_BASE_LSB_ADDR(
2554*5113495bSYour Name 				MAC_TCL_REG_REG_BASE),
2555*5113495bSYour Name 			HWIO_TCL_R2_TCL_STATUS1_RING_HP_ADDR(
2556*5113495bSYour Name 				MAC_TCL_REG_REG_BASE),
2557*5113495bSYour Name 		},
2558*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
2559*5113495bSYour Name 		 * type are supported
2560*5113495bSYour Name 		 */
2561*5113495bSYour Name 		.reg_size = {},
2562*5113495bSYour Name 		.max_size =
2563*5113495bSYour Name 			HWIO_TCL_R0_TCL_STATUS1_RING_BASE_MSB_RING_SIZE_BMSK >>
2564*5113495bSYour Name 			HWIO_TCL_R0_TCL_STATUS1_RING_BASE_MSB_RING_SIZE_SHFT,
2565*5113495bSYour Name 	},
2566*5113495bSYour Name 	{ /* CE_SRC */
2567*5113495bSYour Name 		.start_ring_id = HAL_SRNG_CE_0_SRC,
2568*5113495bSYour Name 		.max_rings = 12,
2569*5113495bSYour Name 		.entry_size = sizeof(struct ce_src_desc) >> 2,
2570*5113495bSYour Name 		.lmac_ring = FALSE,
2571*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2572*5113495bSYour Name 		.reg_start = {
2573*5113495bSYour Name 		HWIO_SOC_CE_0_SRC_WFSS_CE_CHANNEL_SRC_R0_SRC_RING_BASE_LSB_ADDR,
2574*5113495bSYour Name 		HWIO_SOC_CE_0_SRC_WFSS_CE_CHANNEL_SRC_R2_SRC_RING_HP_ADDR,
2575*5113495bSYour Name 		},
2576*5113495bSYour Name 		.reg_size = {
2577*5113495bSYour Name 		SOC_CE_1_SRC_WFSS_CE_1_CHANNEL_SRC_REG_REG_BASE -
2578*5113495bSYour Name 		SOC_CE_0_SRC_WFSS_CE_0_CHANNEL_SRC_REG_REG_BASE,
2579*5113495bSYour Name 		SOC_CE_1_SRC_WFSS_CE_1_CHANNEL_SRC_REG_REG_BASE -
2580*5113495bSYour Name 		SOC_CE_0_SRC_WFSS_CE_0_CHANNEL_SRC_REG_REG_BASE,
2581*5113495bSYour Name 		},
2582*5113495bSYour Name 		.max_size =
2583*5113495bSYour Name 		HWIO_SOC_CE_0_SRC_WFSS_CE_CHANNEL_SRC_R0_SRC_RING_BASE_MSB_RING_SIZE_BMSK >>
2584*5113495bSYour Name 		HWIO_SOC_CE_0_SRC_WFSS_CE_CHANNEL_SRC_R0_SRC_RING_BASE_MSB_RING_SIZE_SHFT,
2585*5113495bSYour Name 	},
2586*5113495bSYour Name 	{ /* CE_DST */
2587*5113495bSYour Name 		.start_ring_id = HAL_SRNG_CE_0_DST,
2588*5113495bSYour Name 		.max_rings = 12,
2589*5113495bSYour Name 		.entry_size = 8 >> 2,
2590*5113495bSYour Name 		/*TODO: entry_size above should actually be
2591*5113495bSYour Name 		 * sizeof(struct ce_dst_desc) >> 2, but couldn't find definition
2592*5113495bSYour Name 		 * of struct ce_dst_desc in HW header files
2593*5113495bSYour Name 		 */
2594*5113495bSYour Name 		.lmac_ring = FALSE,
2595*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2596*5113495bSYour Name 		.reg_start = {
2597*5113495bSYour Name 		HWIO_SOC_CE_0_DST_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_LSB_ADDR,
2598*5113495bSYour Name 		HWIO_SOC_CE_0_DST_WFSS_CE_CHANNEL_DST_R2_DEST_RING_HP_ADDR,
2599*5113495bSYour Name 		},
2600*5113495bSYour Name 		.reg_size = {
2601*5113495bSYour Name 		SOC_CE_1_DST_WFSS_CE_1_CHANNEL_DST_REG_REG_BASE -
2602*5113495bSYour Name 		SOC_CE_0_DST_WFSS_CE_0_CHANNEL_DST_REG_REG_BASE,
2603*5113495bSYour Name 		SOC_CE_1_DST_WFSS_CE_1_CHANNEL_DST_REG_REG_BASE -
2604*5113495bSYour Name 		SOC_CE_0_DST_WFSS_CE_0_CHANNEL_DST_REG_REG_BASE,
2605*5113495bSYour Name 		},
2606*5113495bSYour Name 		.max_size =
2607*5113495bSYour Name 		HWIO_SOC_CE_0_DST_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_MSB_RING_SIZE_BMSK >>
2608*5113495bSYour Name 		HWIO_SOC_CE_0_DST_WFSS_CE_CHANNEL_DST_R0_DEST_RING_BASE_MSB_RING_SIZE_SHFT,
2609*5113495bSYour Name 	},
2610*5113495bSYour Name 	{ /* CE_DST_STATUS */
2611*5113495bSYour Name 		.start_ring_id = HAL_SRNG_CE_0_DST_STATUS,
2612*5113495bSYour Name 		.max_rings = 12,
2613*5113495bSYour Name 		.entry_size = sizeof(struct ce_stat_desc) >> 2,
2614*5113495bSYour Name 		.lmac_ring = FALSE,
2615*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
2616*5113495bSYour Name 		.reg_start = {
2617*5113495bSYour Name 		HWIO_SOC_CE_0_DST_WFSS_CE_CHANNEL_DST_R0_STATUS_RING_BASE_LSB_ADDR,
2618*5113495bSYour Name 		HWIO_SOC_CE_0_DST_WFSS_CE_CHANNEL_DST_R2_STATUS_RING_HP_ADDR,
2619*5113495bSYour Name 		},
2620*5113495bSYour Name 		.reg_size = {
2621*5113495bSYour Name 		SOC_CE_1_DST_WFSS_CE_1_CHANNEL_DST_REG_REG_BASE -
2622*5113495bSYour Name 		SOC_CE_0_DST_WFSS_CE_0_CHANNEL_DST_REG_REG_BASE,
2623*5113495bSYour Name 		SOC_CE_1_DST_WFSS_CE_1_CHANNEL_DST_REG_REG_BASE -
2624*5113495bSYour Name 		SOC_CE_0_DST_WFSS_CE_0_CHANNEL_DST_REG_REG_BASE,
2625*5113495bSYour Name 		},
2626*5113495bSYour Name 		.max_size =
2627*5113495bSYour Name 		HWIO_SOC_CE_0_DST_WFSS_CE_CHANNEL_DST_R0_STATUS_RING_BASE_MSB_RING_SIZE_BMSK >>
2628*5113495bSYour Name 		HWIO_SOC_CE_0_DST_WFSS_CE_CHANNEL_DST_R0_STATUS_RING_BASE_MSB_RING_SIZE_SHFT,
2629*5113495bSYour Name 	},
2630*5113495bSYour Name 	{ /* WBM_IDLE_LINK */
2631*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WBM_IDLE_LINK,
2632*5113495bSYour Name 		.max_rings = 1,
2633*5113495bSYour Name 		.entry_size = sizeof(struct wbm_link_descriptor_ring) >> 2,
2634*5113495bSYour Name 		.lmac_ring = FALSE,
2635*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2636*5113495bSYour Name 		.reg_start = {
2637*5113495bSYour Name 		HWIO_WBM_R0_WBM_IDLE_LINK_RING_BASE_LSB_ADDR(WBM_REG_REG_BASE),
2638*5113495bSYour Name 		HWIO_WBM_R2_WBM_IDLE_LINK_RING_HP_ADDR(WBM_REG_REG_BASE),
2639*5113495bSYour Name 		},
2640*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
2641*5113495bSYour Name 		 * type are supported
2642*5113495bSYour Name 		 */
2643*5113495bSYour Name 		.reg_size = {},
2644*5113495bSYour Name 		.max_size =
2645*5113495bSYour Name 		HWIO_WBM_R0_WBM_IDLE_LINK_RING_BASE_MSB_RING_SIZE_BMSK >>
2646*5113495bSYour Name 		HWIO_WBM_R0_WBM_IDLE_LINK_RING_BASE_MSB_RING_SIZE_SHFT,
2647*5113495bSYour Name 	},
2648*5113495bSYour Name 	{ /* SW2WBM_RELEASE */
2649*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WBM_SW_RELEASE,
2650*5113495bSYour Name 		.max_rings = 1,
2651*5113495bSYour Name 		.entry_size = sizeof(struct wbm_release_ring) >> 2,
2652*5113495bSYour Name 		.lmac_ring = FALSE,
2653*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2654*5113495bSYour Name 		.reg_start = {
2655*5113495bSYour Name 		HWIO_WBM_R0_SW_RELEASE_RING_BASE_LSB_ADDR(WBM_REG_REG_BASE),
2656*5113495bSYour Name 		HWIO_WBM_R2_SW_RELEASE_RING_HP_ADDR(WBM_REG_REG_BASE),
2657*5113495bSYour Name 		},
2658*5113495bSYour Name 		/* Single ring - provide ring size if multiple rings of this
2659*5113495bSYour Name 		 * type are supported
2660*5113495bSYour Name 		 */
2661*5113495bSYour Name 		.reg_size = {},
2662*5113495bSYour Name 		.max_size =
2663*5113495bSYour Name 		HWIO_WBM_R0_SW_RELEASE_RING_BASE_MSB_RING_SIZE_BMSK >>
2664*5113495bSYour Name 		HWIO_WBM_R0_SW_RELEASE_RING_BASE_MSB_RING_SIZE_SHFT,
2665*5113495bSYour Name 	},
2666*5113495bSYour Name 	{ /* WBM2SW_RELEASE */
2667*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WBM2SW0_RELEASE,
2668*5113495bSYour Name 		.max_rings = 8,
2669*5113495bSYour Name 		.entry_size = sizeof(struct wbm_release_ring) >> 2,
2670*5113495bSYour Name 		.lmac_ring = FALSE,
2671*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
2672*5113495bSYour Name 		.nf_irq_support = true,
2673*5113495bSYour Name 		.reg_start = {
2674*5113495bSYour Name 		HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_LSB_ADDR(WBM_REG_REG_BASE),
2675*5113495bSYour Name 		HWIO_WBM_R2_WBM2SW0_RELEASE_RING_HP_ADDR(WBM_REG_REG_BASE),
2676*5113495bSYour Name 		},
2677*5113495bSYour Name 		.reg_size = {
2678*5113495bSYour Name 		HWIO_WBM_R0_WBM2SW1_RELEASE_RING_BASE_LSB_ADDR(WBM_REG_REG_BASE) -
2679*5113495bSYour Name 		HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_LSB_ADDR(WBM_REG_REG_BASE),
2680*5113495bSYour Name 		HWIO_WBM_R2_WBM2SW1_RELEASE_RING_HP_ADDR(WBM_REG_REG_BASE) -
2681*5113495bSYour Name 		HWIO_WBM_R2_WBM2SW0_RELEASE_RING_HP_ADDR(WBM_REG_REG_BASE),
2682*5113495bSYour Name 		},
2683*5113495bSYour Name 		.max_size =
2684*5113495bSYour Name 		HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_MSB_RING_SIZE_BMSK >>
2685*5113495bSYour Name 		HWIO_WBM_R0_WBM2SW0_RELEASE_RING_BASE_MSB_RING_SIZE_SHFT,
2686*5113495bSYour Name 	},
2687*5113495bSYour Name 	{ /* RXDMA_BUF */
2688*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA0_BUF0,
2689*5113495bSYour Name #if defined(IPA_OFFLOAD) && defined(FEATURE_DIRECT_LINK)
2690*5113495bSYour Name 		.max_rings = 4,
2691*5113495bSYour Name #elif defined(IPA_OFFLOAD) || defined(FEATURE_DIRECT_LINK)
2692*5113495bSYour Name 		.max_rings = 3,
2693*5113495bSYour Name #else
2694*5113495bSYour Name 		.max_rings = 2,
2695*5113495bSYour Name #endif
2696*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
2697*5113495bSYour Name 		.lmac_ring = TRUE,
2698*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2699*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2700*5113495bSYour Name 		 * from host
2701*5113495bSYour Name 		 */
2702*5113495bSYour Name 		.reg_start = {},
2703*5113495bSYour Name 		.reg_size = {},
2704*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
2705*5113495bSYour Name 	},
2706*5113495bSYour Name 	{ /* RXDMA_DST */
2707*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_RXDMA2SW0,
2708*5113495bSYour Name 		.max_rings = 1,
2709*5113495bSYour Name 		.entry_size = sizeof(struct reo_entrance_ring) >> 2,
2710*5113495bSYour Name 		.lmac_ring =  TRUE,
2711*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
2712*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2713*5113495bSYour Name 		 * from host
2714*5113495bSYour Name 		 */
2715*5113495bSYour Name 		.reg_start = {},
2716*5113495bSYour Name 		.reg_size = {},
2717*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
2718*5113495bSYour Name 	},
2719*5113495bSYour Name 	{ /* RXDMA_MONITOR_BUF */
2720*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA2_BUF,
2721*5113495bSYour Name 		.max_rings = 1,
2722*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
2723*5113495bSYour Name 		.lmac_ring = TRUE,
2724*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2725*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2726*5113495bSYour Name 		 * from host
2727*5113495bSYour Name 		 */
2728*5113495bSYour Name 		.reg_start = {},
2729*5113495bSYour Name 		.reg_size = {},
2730*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
2731*5113495bSYour Name 	},
2732*5113495bSYour Name 	{ /* RXDMA_MONITOR_STATUS */
2733*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA1_STATBUF,
2734*5113495bSYour Name 		.max_rings = 1,
2735*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
2736*5113495bSYour Name 		.lmac_ring = TRUE,
2737*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2738*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2739*5113495bSYour Name 		 * from host
2740*5113495bSYour Name 		 */
2741*5113495bSYour Name 		.reg_start = {},
2742*5113495bSYour Name 		.reg_size = {},
2743*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
2744*5113495bSYour Name 	},
2745*5113495bSYour Name 	{ /* RXDMA_MONITOR_DST */
2746*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_RXDMA2SW1,
2747*5113495bSYour Name 		.max_rings = 1,
2748*5113495bSYour Name 		.entry_size = sizeof(struct reo_entrance_ring) >> 2,
2749*5113495bSYour Name 		.lmac_ring = TRUE,
2750*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
2751*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2752*5113495bSYour Name 		 * from host
2753*5113495bSYour Name 		 */
2754*5113495bSYour Name 		.reg_start = {},
2755*5113495bSYour Name 		.reg_size = {},
2756*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
2757*5113495bSYour Name 	},
2758*5113495bSYour Name 	{ /* RXDMA_MONITOR_DESC */
2759*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_SW2RXDMA1_DESC,
2760*5113495bSYour Name 		.max_rings = 1,
2761*5113495bSYour Name 		.entry_size = sizeof(struct wbm_buffer_ring) >> 2,
2762*5113495bSYour Name 		.lmac_ring = TRUE,
2763*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2764*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2765*5113495bSYour Name 		 * from host
2766*5113495bSYour Name 		 */
2767*5113495bSYour Name 		.reg_start = {},
2768*5113495bSYour Name 		.reg_size = {},
2769*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
2770*5113495bSYour Name 	},
2771*5113495bSYour Name 	{ /* DIR_BUF_RX_DMA_SRC */
2772*5113495bSYour Name 		.start_ring_id = HAL_SRNG_DIR_BUF_RX_SRC_DMA_RING,
2773*5113495bSYour Name 		/*
2774*5113495bSYour Name 		 * one ring is for spectral scan
2775*5113495bSYour Name 		 * the other is for cfr
2776*5113495bSYour Name 		 */
2777*5113495bSYour Name 		.max_rings = 2,
2778*5113495bSYour Name 		.entry_size = 2,
2779*5113495bSYour Name 		.lmac_ring = TRUE,
2780*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2781*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2782*5113495bSYour Name 		 * from host
2783*5113495bSYour Name 		 */
2784*5113495bSYour Name 		.reg_start = {},
2785*5113495bSYour Name 		.reg_size = {},
2786*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
2787*5113495bSYour Name 	},
2788*5113495bSYour Name #ifdef WLAN_FEATURE_CIF_CFR
2789*5113495bSYour Name 	{ /* WIFI_POS_SRC */
2790*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WIFI_POS_SRC_DMA_RING,
2791*5113495bSYour Name 		.max_rings = 1,
2792*5113495bSYour Name 		.entry_size = sizeof(wmi_oem_dma_buf_release_entry)  >> 2,
2793*5113495bSYour Name 		.lmac_ring = TRUE,
2794*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2795*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2796*5113495bSYour Name 		 * from host
2797*5113495bSYour Name 		 */
2798*5113495bSYour Name 		.reg_start = {},
2799*5113495bSYour Name 		.reg_size = {},
2800*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE,
2801*5113495bSYour Name 	},
2802*5113495bSYour Name #endif
2803*5113495bSYour Name 	{ /* REO2PPE */ 0},
2804*5113495bSYour Name 	{ /* PPE2TCL */ 0},
2805*5113495bSYour Name 	{ /* PPE_RELEASE */ 0},
2806*5113495bSYour Name #ifdef WLAN_PKT_CAPTURE_TX_2_0
2807*5113495bSYour Name 	{ /* TX_MONITOR_BUF */
2808*5113495bSYour Name 		.start_ring_id = HAL_SRNG_SW2TXMON_BUF0,
2809*5113495bSYour Name 		.max_rings = 1,
2810*5113495bSYour Name 		.entry_size = sizeof(struct mon_ingress_ring) >> 2,
2811*5113495bSYour Name 		.lmac_ring = TRUE,
2812*5113495bSYour Name 		.ring_dir = HAL_SRNG_SRC_RING,
2813*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2814*5113495bSYour Name 		 * from host
2815*5113495bSYour Name 		 */
2816*5113495bSYour Name 		.reg_start = {},
2817*5113495bSYour Name 		.reg_size = {},
2818*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
2819*5113495bSYour Name 	},
2820*5113495bSYour Name 	{ /* TX_MONITOR_DST */
2821*5113495bSYour Name 		.start_ring_id = HAL_SRNG_WMAC1_TXMON2SW0,
2822*5113495bSYour Name 		.max_rings = 2,
2823*5113495bSYour Name 		.entry_size = sizeof(struct mon_destination_ring) >> 2,
2824*5113495bSYour Name 		.lmac_ring = TRUE,
2825*5113495bSYour Name 		.ring_dir = HAL_SRNG_DST_RING,
2826*5113495bSYour Name 		/* reg_start is not set because LMAC rings are not accessed
2827*5113495bSYour Name 		 * from host
2828*5113495bSYour Name 		 */
2829*5113495bSYour Name 		.reg_start = {},
2830*5113495bSYour Name 		.reg_size = {},
2831*5113495bSYour Name 		.max_size = HAL_RXDMA_MAX_RING_SIZE_BE,
2832*5113495bSYour Name 	},
2833*5113495bSYour Name #else
2834*5113495bSYour Name 	{0},
2835*5113495bSYour Name 	{0},
2836*5113495bSYour Name #endif
2837*5113495bSYour Name 	{ /* SW2RXDMA_NEW */ 0},
2838*5113495bSYour Name 	{ /* SW2RXDMA_LINK_RELEASE */ 0},
2839*5113495bSYour Name };
2840*5113495bSYour Name 
2841*5113495bSYour Name /**
2842*5113495bSYour Name  * hal_srng_hw_reg_offset_init_kiwi() - Initialize the HW srng reg offset
2843*5113495bSYour Name  *				applicable only for KIWI
2844*5113495bSYour Name  * @hal_soc: HAL Soc handle
2845*5113495bSYour Name  *
2846*5113495bSYour Name  * Return: None
2847*5113495bSYour Name  */
hal_srng_hw_reg_offset_init_kiwi(struct hal_soc * hal_soc)2848*5113495bSYour Name static inline void hal_srng_hw_reg_offset_init_kiwi(struct hal_soc *hal_soc)
2849*5113495bSYour Name {
2850*5113495bSYour Name 	int32_t *hw_reg_offset = hal_soc->hal_hw_reg_offset;
2851*5113495bSYour Name 
2852*5113495bSYour Name 	hw_reg_offset[DST_MSI2_BASE_LSB] = REG_OFFSET(DST, MSI2_BASE_LSB),
2853*5113495bSYour Name 	hw_reg_offset[DST_MSI2_BASE_MSB] = REG_OFFSET(DST, MSI2_BASE_MSB),
2854*5113495bSYour Name 	hw_reg_offset[DST_MSI2_DATA] = REG_OFFSET(DST, MSI2_DATA),
2855*5113495bSYour Name 	hw_reg_offset[DST_PRODUCER_INT2_SETUP] =
2856*5113495bSYour Name 					REG_OFFSET(DST, PRODUCER_INT2_SETUP);
2857*5113495bSYour Name 	hal_srng_hw_reg_offset_init_misc_1_kiwi(hal_soc);
2858*5113495bSYour Name }
2859*5113495bSYour Name 
hal_kiwi_attach(struct hal_soc * hal_soc)2860*5113495bSYour Name void hal_kiwi_attach(struct hal_soc *hal_soc)
2861*5113495bSYour Name {
2862*5113495bSYour Name 	hal_soc->hw_srng_table = hw_srng_table_kiwi;
2863*5113495bSYour Name 
2864*5113495bSYour Name 	hal_srng_hw_reg_offset_init_generic(hal_soc);
2865*5113495bSYour Name 	hal_srng_hw_reg_offset_init_kiwi(hal_soc);
2866*5113495bSYour Name 	hal_hw_txrx_default_ops_attach_be(hal_soc);
2867*5113495bSYour Name 	hal_hw_txrx_ops_attach_kiwi(hal_soc);
2868*5113495bSYour Name }
2869