xref: /wlan-driver/qcacld-3.0/core/dp/htt/rx_desc.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name /*
2*5113495bSYour Name  * Copyright (c) 2011-2015, 2017 The Linux Foundation. All rights reserved.
3*5113495bSYour Name  *
4*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for
5*5113495bSYour Name  * any purpose with or without fee is hereby granted, provided that the
6*5113495bSYour Name  * above copyright notice and this permission notice appear in all
7*5113495bSYour Name  * copies.
8*5113495bSYour Name  *
9*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10*5113495bSYour Name  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11*5113495bSYour Name  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12*5113495bSYour Name  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13*5113495bSYour Name  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14*5113495bSYour Name  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15*5113495bSYour Name  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16*5113495bSYour Name  * PERFORMANCE OF THIS SOFTWARE.
17*5113495bSYour Name  */
18*5113495bSYour Name 
19*5113495bSYour Name #ifndef _RX_DESC_H_
20*5113495bSYour Name #define _RX_DESC_H_
21*5113495bSYour Name 
22*5113495bSYour Name /*
23*5113495bSYour Name  * REMIND: Copy one of rx_desc related structures here for export,
24*5113495bSYour Name  *         hopes they are always the same between Peregrine and Rome in future
25*5113495bSYour Name  */
26*5113495bSYour Name struct rx_attention {
27*5113495bSYour Name 	volatile
28*5113495bSYour Name 	uint32_t first_mpdu:1, /* [0] */
29*5113495bSYour Name 		last_mpdu:1, /* [1] */
30*5113495bSYour Name 		mcast_bcast:1, /* [2] */
31*5113495bSYour Name 		peer_idx_invalid:1, /* [3] */
32*5113495bSYour Name 		peer_idx_timeout:1, /* [4] */
33*5113495bSYour Name 		power_mgmt:1, /* [5] */
34*5113495bSYour Name 		non_qos:1, /* [6] */
35*5113495bSYour Name 		null_data:1, /* [7] */
36*5113495bSYour Name 		mgmt_type:1, /* [8] */
37*5113495bSYour Name 		ctrl_type:1, /* [9] */
38*5113495bSYour Name 		more_data:1, /* [10] */
39*5113495bSYour Name 		eosp:1, /* [11] */
40*5113495bSYour Name 		u_apsd_trigger:1, /* [12] */
41*5113495bSYour Name 		fragment:1, /* [13] */
42*5113495bSYour Name 		order:1, /* [14] */
43*5113495bSYour Name 		classification:1, /* [15] */
44*5113495bSYour Name 		overflow_err:1, /* [16] */
45*5113495bSYour Name 		msdu_length_err:1, /* [17] */
46*5113495bSYour Name 		tcp_udp_chksum_fail:1, /* [18] */
47*5113495bSYour Name 		ip_chksum_fail:1, /* [19] */
48*5113495bSYour Name 		sa_idx_invalid:1, /* [20] */
49*5113495bSYour Name 		da_idx_invalid:1, /* [21] */
50*5113495bSYour Name 		sa_idx_timeout:1, /* [22] */
51*5113495bSYour Name 		da_idx_timeout:1, /* [23] */
52*5113495bSYour Name 		encrypt_required:1, /* [24] */
53*5113495bSYour Name 		directed:1, /* [25] */
54*5113495bSYour Name 		buffer_fragment:1, /* [26] */
55*5113495bSYour Name 		mpdu_length_err:1, /* [27] */
56*5113495bSYour Name 		tkip_mic_err:1, /* [28] */
57*5113495bSYour Name 		decrypt_err:1, /* [29] */
58*5113495bSYour Name 		fcs_err:1, /* [30] */
59*5113495bSYour Name 		msdu_done:1; /* [31] */
60*5113495bSYour Name };
61*5113495bSYour Name 
62*5113495bSYour Name struct rx_frag_info {
63*5113495bSYour Name 	volatile
64*5113495bSYour Name 	uint32_t ring0_more_count:8,   /* [7:0] */
65*5113495bSYour Name 		ring1_more_count:8, /* [15:8] */
66*5113495bSYour Name 		ring2_more_count:8, /* [23:16] */
67*5113495bSYour Name 		ring3_more_count:8; /* [31:24] */
68*5113495bSYour Name 	volatile
69*5113495bSYour Name 	uint32_t ring4_more_count:8, /* [7:0] */
70*5113495bSYour Name 		ring5_more_count:8, /* [15:8] */
71*5113495bSYour Name 		ring6_more_count:8, /* [23:16] */
72*5113495bSYour Name 		ring7_more_count:8; /* [31:24] */
73*5113495bSYour Name };
74*5113495bSYour Name 
75*5113495bSYour Name struct rx_msdu_start {
76*5113495bSYour Name 	volatile
77*5113495bSYour Name 	uint32_t msdu_length:14, /* [13:0] */
78*5113495bSYour Name #if defined(HELIUMPLUS)
79*5113495bSYour Name 		l3_offset:7, /* [20:14] */
80*5113495bSYour Name 		ipsec_ah:1, /* [21] */
81*5113495bSYour Name 		reserved_0a:2, /* [23:22] */
82*5113495bSYour Name 		l4_offset:7, /* [30:24] */
83*5113495bSYour Name 		ipsec_esp:1; /* [31] */
84*5113495bSYour Name #else
85*5113495bSYour Name 		ip_offset:6, /* [19:14] */
86*5113495bSYour Name 		ring_mask:4, /* [23:20] */
87*5113495bSYour Name 		tcp_udp_offset:7, /* [30:24] */
88*5113495bSYour Name 		reserved_0c:1; /* [31] */
89*5113495bSYour Name #endif /* defined(HELIUMPLUS) */
90*5113495bSYour Name #if defined(HELIUMPLUS)
91*5113495bSYour Name 	volatile uint32_t flow_id_toeplitz:32; /* [31:0] */
92*5113495bSYour Name #else
93*5113495bSYour Name 	volatile uint32_t flow_id_crc:32; /* [31:0] */
94*5113495bSYour Name #endif /* defined(HELIUMPLUS) */
95*5113495bSYour Name 	volatile
96*5113495bSYour Name 	uint32_t msdu_number:8, /* [7:0] */
97*5113495bSYour Name 		decap_format:2, /* [9:8] */
98*5113495bSYour Name 		ipv4_proto:1, /* [10] */
99*5113495bSYour Name 		ipv6_proto:1, /* [11] */
100*5113495bSYour Name 		tcp_proto:1, /* [12] */
101*5113495bSYour Name 		udp_proto:1, /* [13] */
102*5113495bSYour Name 		ip_frag:1, /* [14] */
103*5113495bSYour Name 		tcp_only_ack:1, /* [15] */
104*5113495bSYour Name 		sa_idx:11, /* [26:16] */
105*5113495bSYour Name 		reserved_2b:5; /* [31:27] */
106*5113495bSYour Name #if defined(HELIUMPLUS)
107*5113495bSYour Name 	volatile
108*5113495bSYour Name 	uint32_t da_idx:11, /* [10:0] */
109*5113495bSYour Name 		da_is_bcast_mcast:1, /* [11] */
110*5113495bSYour Name 		reserved_3a:4, /* [15:12] */
111*5113495bSYour Name 		ip4_protocol_ip6_next_header:8, /* [23:16] */
112*5113495bSYour Name 		ring_mask:8; /* [31:24] */
113*5113495bSYour Name 	volatile uint32_t toeplitz_hash_2_or_4:32; /* [31:0] */
114*5113495bSYour Name #endif /* defined(HELIUMPLUS) */
115*5113495bSYour Name };
116*5113495bSYour Name 
117*5113495bSYour Name struct rx_msdu_end {
118*5113495bSYour Name 	volatile
119*5113495bSYour Name 	uint32_t ip_hdr_chksum:16, /* [15:0] */
120*5113495bSYour Name 		tcp_udp_chksum:16; /* [31:16] */
121*5113495bSYour Name 	volatile
122*5113495bSYour Name 	uint32_t key_id_octet:8, /* [7:0] */
123*5113495bSYour Name #if defined(HELIUMPLUS)
124*5113495bSYour Name 		classification_rule:6, /* [13:8] */
125*5113495bSYour Name 		classify_not_done_truncate:1, /* [14] */
126*5113495bSYour Name 		classify_not_done_cce_dis:1, /* [15] */
127*5113495bSYour Name #else
128*5113495bSYour Name 		classification_filter:8, /* [15:8] */
129*5113495bSYour Name #endif /* defined(HELIUMPLUS) */
130*5113495bSYour Name 	ext_wapi_pn_63_48:16; /* [31:16] */
131*5113495bSYour Name 	volatile uint32_t ext_wapi_pn_95_64:32; /* [31:0] */
132*5113495bSYour Name 	volatile uint32_t ext_wapi_pn_127_96:32; /* [31:0] */
133*5113495bSYour Name 	volatile
134*5113495bSYour Name 	uint32_t reported_mpdu_length:14, /* [13:0] */
135*5113495bSYour Name 		first_msdu:1, /* [14] */
136*5113495bSYour Name 		last_msdu:1, /* [15] */
137*5113495bSYour Name #if defined(HELIUMPLUS)
138*5113495bSYour Name 		sa_idx_timeout:1, /* [16] */
139*5113495bSYour Name 		da_idx_timeout:1, /* [17] */
140*5113495bSYour Name 		msdu_limit_error:1, /* [18] */
141*5113495bSYour Name 		classify_ring_mask:8, /* [26:19] */
142*5113495bSYour Name #endif /* defined(HELIUMPLUS) */
143*5113495bSYour Name 		reserved_3a:3, /* [29:27] */
144*5113495bSYour Name 		pre_delim_err:1, /* [30] */
145*5113495bSYour Name 		reserved_3b:1; /* [31] */
146*5113495bSYour Name #if defined(HELIUMPLUS)
147*5113495bSYour Name 	volatile uint32_t ipv6_options_crc:32;
148*5113495bSYour Name 	volatile uint32_t tcp_seq_number:32;
149*5113495bSYour Name 	volatile uint32_t tcp_ack_number:32;
150*5113495bSYour Name 	volatile
151*5113495bSYour Name 	uint32_t tcp_flag:9, /* [8:0] */
152*5113495bSYour Name 		lro_eligible:1, /* [9] */
153*5113495bSYour Name 		l3_header_padding:3, /* [12:10] */
154*5113495bSYour Name 		reserved_8a:3, /* [15:13] */
155*5113495bSYour Name 		window_size:16; /* [31:16] */
156*5113495bSYour Name 	volatile
157*5113495bSYour Name 	uint32_t da_offset:6, /* [5:0] */
158*5113495bSYour Name 		sa_offset:6, /* [11:6] */
159*5113495bSYour Name 		da_offset_valid:1, /* [12] */
160*5113495bSYour Name 		sa_offset_valid:1, /* [13] */
161*5113495bSYour Name 		type_offset:7, /* [20:14] */
162*5113495bSYour Name 		reserved_9a:11; /* [31:21] */
163*5113495bSYour Name 	volatile uint32_t rule_indication_31_0:32;
164*5113495bSYour Name 	volatile uint32_t rule_indication_63_32:32;
165*5113495bSYour Name 	volatile uint32_t rule_indication_95_64:32;
166*5113495bSYour Name 	volatile uint32_t rule_indication_127_96:32;
167*5113495bSYour Name #endif /* defined(HELIUMPLUS) */
168*5113495bSYour Name };
169*5113495bSYour Name 
170*5113495bSYour Name struct rx_mpdu_end {
171*5113495bSYour Name 	volatile
172*5113495bSYour Name 	uint32_t reserved_0:13, /* [12:0] */
173*5113495bSYour Name 		overflow_err:1, /* [13] */
174*5113495bSYour Name 		last_mpdu:1, /* [14] */
175*5113495bSYour Name 		post_delim_err:1, /* [15] */
176*5113495bSYour Name 		post_delim_cnt:12, /* [27:16] */
177*5113495bSYour Name 		mpdu_length_err:1, /* [28] */
178*5113495bSYour Name 		tkip_mic_err:1, /* [29] */
179*5113495bSYour Name 		decrypt_err:1, /* [30] */
180*5113495bSYour Name 		fcs_err:1; /* [31] */
181*5113495bSYour Name };
182*5113495bSYour Name 
183*5113495bSYour Name 
184*5113495bSYour Name #if defined(HELIUMPLUS)
185*5113495bSYour Name 
186*5113495bSYour Name struct rx_mpdu_start {
187*5113495bSYour Name 	volatile
188*5113495bSYour Name 	uint32_t peer_idx:11, /* [10:0] */
189*5113495bSYour Name 		fr_ds:1, /* [11] */
190*5113495bSYour Name 		to_ds:1, /* [12] */
191*5113495bSYour Name 		encrypted:1, /* [13] */
192*5113495bSYour Name 		retry:1, /* [14] */
193*5113495bSYour Name 		reserved:1, /* [15] */
194*5113495bSYour Name 		seq_num:12, /* [27:16] */
195*5113495bSYour Name 		encrypt_type:4; /* [31:28] */
196*5113495bSYour Name 	volatile uint32_t pn_31_0:32; /* [31:0] */
197*5113495bSYour Name 	volatile
198*5113495bSYour Name 	uint32_t pn_47_32:16, /* [15:0] */
199*5113495bSYour Name 		toeplitz_hash:2, /* [17:16] */
200*5113495bSYour Name 		reserved_2:10, /* [27:18] */
201*5113495bSYour Name 		tid:4; /* [31:28] */
202*5113495bSYour Name };
203*5113495bSYour Name 
204*5113495bSYour Name 
205*5113495bSYour Name struct rx_ppdu_start {
206*5113495bSYour Name 	volatile
207*5113495bSYour Name 	uint32_t rssi_pri_chain0:8, /* [7:0] */
208*5113495bSYour Name 		rssi_sec20_chain0:8, /* [15:8] */
209*5113495bSYour Name 		rssi_sec40_chain0:8, /* [23:16] */
210*5113495bSYour Name 		rssi_sec80_chain0:8; /* [31:24] */
211*5113495bSYour Name 	volatile
212*5113495bSYour Name 	uint32_t rssi_pri_chain1:8, /* [7:0] */
213*5113495bSYour Name 		rssi_sec20_chain1:8, /* [15:8] */
214*5113495bSYour Name 		rssi_sec40_chain1:8, /* [23:16] */
215*5113495bSYour Name 		rssi_sec80_chain1:8; /* [31:24] */
216*5113495bSYour Name 	volatile
217*5113495bSYour Name 	uint32_t rssi_pri_chain2:8, /* [7:0] */
218*5113495bSYour Name 		rssi_sec20_chain2:8, /* [15:8] */
219*5113495bSYour Name 		rssi_sec40_chain2:8, /* [23:16] */
220*5113495bSYour Name 		rssi_sec80_chain2:8; /* [31:24] */
221*5113495bSYour Name 	volatile
222*5113495bSYour Name 	uint32_t rssi_pri_chain3:8, /* [7:0] */
223*5113495bSYour Name 		rssi_sec20_chain3:8, /* [15:8] */
224*5113495bSYour Name 		rssi_sec40_chain3:8, /* [23:16] */
225*5113495bSYour Name 		rssi_sec80_chain3:8; /* [31:24] */
226*5113495bSYour Name 	volatile
227*5113495bSYour Name 	uint32_t rssi_comb:8, /* [7:0] */
228*5113495bSYour Name 		bandwidth:3, /* [10:8] */
229*5113495bSYour Name 		reserved_4a:5, /* [15:11] */
230*5113495bSYour Name 		rssi_comb_ht:8, /* [23:16] */
231*5113495bSYour Name 		reserved_4b:8; /* [31:24] */
232*5113495bSYour Name 	volatile
233*5113495bSYour Name 	uint32_t l_sig_rate:4, /*[3:0] */
234*5113495bSYour Name 		l_sig_rate_select:1, /* [4] */
235*5113495bSYour Name 		l_sig_length:12, /* [16:5] */
236*5113495bSYour Name 		l_sig_parity:1, /* [17] */
237*5113495bSYour Name 		l_sig_tail:6, /* [23:18] */
238*5113495bSYour Name 		preamble_type:8; /* [31:24] */
239*5113495bSYour Name 	volatile
240*5113495bSYour Name 	uint32_t ht_sig_vht_sig_ah_sig_a_1:24, /* [23:0] */
241*5113495bSYour Name 		captured_implicit_sounding:1, /* [24] */
242*5113495bSYour Name 		reserved_6:7; /* [31:25] */
243*5113495bSYour Name 	volatile
244*5113495bSYour Name 	uint32_t ht_sig_vht_sig_ah_sig_a_2:24, /* [23:0] */
245*5113495bSYour Name 		reserved_7:8; /* [31:24] */
246*5113495bSYour Name 	volatile uint32_t vht_sig_b:32; /* [31:0] */
247*5113495bSYour Name 	volatile
248*5113495bSYour Name 	uint32_t service:16, /* [15:0] */
249*5113495bSYour Name 		reserved_9:16; /* [31:16] */
250*5113495bSYour Name };
251*5113495bSYour Name 
252*5113495bSYour Name #define VHT_SIG_A_1(rx_desc) ((rx_desc)->ppdu_start.ht_sig_vht_sig_ah_sig_a_1)
253*5113495bSYour Name #define VHT_SIG_A_2(rx_desc) ((rx_desc)->ppdu_start.ht_sig_vht_sig_ah_sig_a_2)
254*5113495bSYour Name #define TSF_TIMESTAMP(rx_desc) \
255*5113495bSYour Name ((rx_desc)->ppdu_end.rx_pkt_end.phy_timestamp_1_lower_32)
256*5113495bSYour Name 
257*5113495bSYour Name struct rx_location_info {
258*5113495bSYour Name 	volatile
259*5113495bSYour Name 	uint32_t rtt_fac_legacy:14, /* [13:0] */
260*5113495bSYour Name 		rtt_fac_legacy_status:1, /* [14] */
261*5113495bSYour Name 		rtt_fac_vht:14, /* [28:15] */
262*5113495bSYour Name 		rtt_fac_vht_status:1, /* [29] */
263*5113495bSYour Name 		rtt_cfr_status:1, /* [30] */
264*5113495bSYour Name 		rtt_cir_status:1; /* [31] */
265*5113495bSYour Name 	volatile
266*5113495bSYour Name 	uint32_t rtt_fac_sifs:10, /* [9:0] */
267*5113495bSYour Name 		rtt_fac_sifs_status:2, /* [11:10] */
268*5113495bSYour Name 		rtt_channel_dump_size:11, /* [22:12] */
269*5113495bSYour Name 		rtt_mac_phy_phase:2, /* [24:23] */
270*5113495bSYour Name 		rtt_hw_ifft_mode:1, /* [25] */
271*5113495bSYour Name 		rtt_btcf_status:1, /* [26] */
272*5113495bSYour Name 		rtt_preamble_type:2, /* [28:27] */
273*5113495bSYour Name 		rtt_pkt_bw:2, /* [30:29] */
274*5113495bSYour Name 		rtt_gi_type:1; /* [31] */
275*5113495bSYour Name 	volatile
276*5113495bSYour Name 	uint32_t rtt_mcs_rate:4, /* [3:0] */
277*5113495bSYour Name 		rtt_strongest_chain:2, /* [5:4] */
278*5113495bSYour Name 		rtt_phase_jump:7, /* [12:6] */
279*5113495bSYour Name 		rtt_rx_chain_mask:4, /* [16:13] */
280*5113495bSYour Name 		rtt_tx_data_start_x_phase:1, /* [17] */
281*5113495bSYour Name 		reserved_2:13, /* [30:18] */
282*5113495bSYour Name 		rx_location_info_valid:1; /* [31] */
283*5113495bSYour Name };
284*5113495bSYour Name 
285*5113495bSYour Name struct rx_pkt_end {
286*5113495bSYour Name 	volatile
287*5113495bSYour Name 	uint32_t rx_success:1, /* [0] */
288*5113495bSYour Name 		reserved_0a:2, /* [2:1] */
289*5113495bSYour Name 		error_tx_interrupt_rx:1, /* [3] */
290*5113495bSYour Name 		error_ofdm_power_drop:1, /* [4] */
291*5113495bSYour Name 		error_ofdm_restart:1, /* [5] */
292*5113495bSYour Name 		error_cck_power_drop:1, /* [6] */
293*5113495bSYour Name 		error_cck_restart:1, /* [7] */
294*5113495bSYour Name 		reserved_0b:24; /* [31:8] */
295*5113495bSYour Name 	volatile uint32_t phy_timestamp_1_lower_32:32; /* [31:0] */
296*5113495bSYour Name 	volatile uint32_t phy_timestamp_1_upper_32:32; /* [31:0] */
297*5113495bSYour Name 	volatile uint32_t phy_timestamp_2_lower_32:32; /* [31:0] */
298*5113495bSYour Name 	volatile uint32_t phy_timestamp_2_upper_32:32; /* [31:0] */
299*5113495bSYour Name 	struct rx_location_info rx_location_info;
300*5113495bSYour Name };
301*5113495bSYour Name 
302*5113495bSYour Name struct rx_phy_ppdu_end {
303*5113495bSYour Name 	volatile
304*5113495bSYour Name 	uint32_t reserved_0a:2, /* [1:0] */
305*5113495bSYour Name 		error_radar:1, /* [2] */
306*5113495bSYour Name 		error_rx_abort:1, /* [3] */
307*5113495bSYour Name 		error_rx_nap:1, /* [4] */
308*5113495bSYour Name 		error_ofdm_timing:1, /* [5] */
309*5113495bSYour Name 		error_ofdm_signal_parity:1, /* [6] */
310*5113495bSYour Name 		error_ofdm_rate_illegal:1, /* [7] */
311*5113495bSYour Name 		error_ofdm_length_illegal:1, /* [8] */
312*5113495bSYour Name 		error_ppdu_ofdm_restart:1, /* [9] */
313*5113495bSYour Name 		error_ofdm_service:1, /* [10] */
314*5113495bSYour Name 		error_ppdu_ofdm_power_drop:1, /* [11] */
315*5113495bSYour Name 		error_cck_blocker:1, /* [12] */
316*5113495bSYour Name 		error_cck_timing:1, /* [13] */
317*5113495bSYour Name 		error_cck_header_crc:1, /* [14] */
318*5113495bSYour Name 		error_cck_rate_illegal:1, /* [15] */
319*5113495bSYour Name 		error_cck_length_illegal:1, /* [16] */
320*5113495bSYour Name 		error_ppdu_cck_restart:1, /* [17] */
321*5113495bSYour Name 		error_cck_service:1, /* [18] */
322*5113495bSYour Name 		error_ppdu_cck_power_drop:1, /* [19] */
323*5113495bSYour Name 		error_ht_crc_err:1, /* [20] */
324*5113495bSYour Name 		error_ht_length_illegal:1, /* [21] */
325*5113495bSYour Name 		error_ht_rate_illegal:1, /* [22] */
326*5113495bSYour Name 		error_ht_zlf:1, /* [23] */
327*5113495bSYour Name 		error_false_radar_ext:1, /* [24] */
328*5113495bSYour Name 		error_green_field:1, /* [25] */
329*5113495bSYour Name 		error_spectral_scan:1, /* [26] */
330*5113495bSYour Name 		error_rx_bw_gt_dyn_bw:1, /* [27] */
331*5113495bSYour Name 		error_leg_ht_mismatch:1, /* [28] */
332*5113495bSYour Name 		error_vht_crc_error:1, /* [29] */
333*5113495bSYour Name 		error_vht_siga_unsupported:1, /* [30] */
334*5113495bSYour Name 		error_vht_lsig_len_invalid:1; /* [31] */
335*5113495bSYour Name 	volatile
336*5113495bSYour Name 	uint32_t error_vht_ndp_or_zlf:1, /* [0] */
337*5113495bSYour Name 		error_vht_nsym_lt_zero:1, /* [1] */
338*5113495bSYour Name 		error_vht_rx_extra_symbol_mismatch:1, /* [2] */
339*5113495bSYour Name 		error_vht_rx_skip_group_id0:1, /* [3] */
340*5113495bSYour Name 		error_vht_rx_skip_group_id1to62:1, /* [4] */
341*5113495bSYour Name 		error_vht_rx_skip_group_id63:1, /* [5] */
342*5113495bSYour Name 		error_ofdm_ldpc_decoder_disabled:1, /* [6] */
343*5113495bSYour Name 		error_defer_nap:1, /* [7] */
344*5113495bSYour Name 		error_fdomain_timeout:1, /* [8] */
345*5113495bSYour Name 		error_lsig_rel_check:1, /* [9] */
346*5113495bSYour Name 		error_bt_collision:1, /* [10] */
347*5113495bSYour Name 		error_unsupported_mu_feedback:1, /* [11] */
348*5113495bSYour Name 		error_ppdu_tx_interrupt_rx:1, /* [12] */
349*5113495bSYour Name 		error_rx_unsupported_cbf:1, /* [13] */
350*5113495bSYour Name 		reserved_1:18; /* [31:14] */
351*5113495bSYour Name };
352*5113495bSYour Name 
353*5113495bSYour Name struct rx_timing_offset {
354*5113495bSYour Name 	volatile
355*5113495bSYour Name 	uint32_t timing_offset:12, /* [11:0] */
356*5113495bSYour Name 		reserved:20; /* [31:12] */
357*5113495bSYour Name };
358*5113495bSYour Name 
359*5113495bSYour Name struct rx_ppdu_end {
360*5113495bSYour Name 	volatile uint32_t evm_p0:32;
361*5113495bSYour Name 	volatile uint32_t evm_p1:32;
362*5113495bSYour Name 	volatile uint32_t evm_p2:32;
363*5113495bSYour Name 	volatile uint32_t evm_p3:32;
364*5113495bSYour Name 	volatile uint32_t evm_p4:32;
365*5113495bSYour Name 	volatile uint32_t evm_p5:32;
366*5113495bSYour Name 	volatile uint32_t evm_p6:32;
367*5113495bSYour Name 	volatile uint32_t evm_p7:32;
368*5113495bSYour Name 	volatile uint32_t evm_p8:32;
369*5113495bSYour Name 	volatile uint32_t evm_p9:32;
370*5113495bSYour Name 	volatile uint32_t evm_p10:32;
371*5113495bSYour Name 	volatile uint32_t evm_p11:32;
372*5113495bSYour Name 	volatile uint32_t evm_p12:32;
373*5113495bSYour Name 	volatile uint32_t evm_p13:32;
374*5113495bSYour Name 	volatile uint32_t evm_p14:32;
375*5113495bSYour Name 	volatile uint32_t evm_p15:32;
376*5113495bSYour Name 	volatile uint32_t reserved_16:32;
377*5113495bSYour Name 	volatile uint32_t reserved_17:32;
378*5113495bSYour Name 	volatile uint32_t wb_timestamp_lower_32:32;
379*5113495bSYour Name 	volatile uint32_t wb_timestamp_upper_32:32;
380*5113495bSYour Name 	struct rx_pkt_end rx_pkt_end;
381*5113495bSYour Name 	struct rx_phy_ppdu_end rx_phy_ppdu_end;
382*5113495bSYour Name 	struct rx_timing_offset rx_timing_offset;
383*5113495bSYour Name 	volatile
384*5113495bSYour Name 	uint32_t rx_antenna:24, /* [23:0] */
385*5113495bSYour Name 		tx_ht_vht_ack:1, /* [24] */
386*5113495bSYour Name 		rx_pkt_end_valid:1, /* [25] */
387*5113495bSYour Name 		rx_phy_ppdu_end_valid:1, /* [26] */
388*5113495bSYour Name 		rx_timing_offset_valid:1, /* [27] */
389*5113495bSYour Name 		bb_captured_channel:1, /* [28] */
390*5113495bSYour Name 		unsupported_mu_nc:1, /* [29] */
391*5113495bSYour Name 		otp_txbf_disable:1, /* [30] */
392*5113495bSYour Name 		reserved_31:1; /* [31] */
393*5113495bSYour Name 	volatile
394*5113495bSYour Name 	uint32_t coex_bt_tx_from_start_of_rx:1, /* [0] */
395*5113495bSYour Name 		coex_bt_tx_after_start_of_rx:1, /* [1] */
396*5113495bSYour Name 		coex_wan_tx_from_start_of_rx:1, /* [2] */
397*5113495bSYour Name 		coex_wan_tx_after_start_of_rx:1, /* [3] */
398*5113495bSYour Name 		coex_wlan_tx_from_start_of_rx:1, /* [4] */
399*5113495bSYour Name 		coex_wlan_tx_after_start_of_rx:1, /* [5] */
400*5113495bSYour Name 		mpdu_delimiter_errors_seen:1, /* [6] */
401*5113495bSYour Name 		ftm:1, /* [7] */
402*5113495bSYour Name 		ftm_dialog_token:8, /* [15:8] */
403*5113495bSYour Name 		ftm_follow_up_dialog_token:8, /* [23:16] */
404*5113495bSYour Name 		reserved_32:8; /* [31:24] */
405*5113495bSYour Name 	volatile
406*5113495bSYour Name 	uint32_t before_mpdu_cnt_passing_fcs:8, /* [7:0] */
407*5113495bSYour Name 		before_mpdu_cnt_failing_fcs:8, /* [15:8] */
408*5113495bSYour Name 		after_mpdu_cnt_passing_fcs:8, /* [23:16] */
409*5113495bSYour Name 		after_mpdu_cnt_failing_fcs:8; /* [31:24] */
410*5113495bSYour Name 	volatile uint32_t phy_timestamp_tx_lower_32:32; /* [31:0] */
411*5113495bSYour Name 	volatile uint32_t phy_timestamp_tx_upper_32:32; /* [31:0] */
412*5113495bSYour Name 	volatile
413*5113495bSYour Name 	uint32_t bb_length:16, /* [15:0] */
414*5113495bSYour Name 		bb_data:1, /* [16] */
415*5113495bSYour Name 		peer_idx_valid:1, /* [17] */
416*5113495bSYour Name 		peer_idx:11, /* [28:18] */
417*5113495bSYour Name 		reserved_26:2, /* [30:29] */
418*5113495bSYour Name 		ppdu_done:1; /* [31] */
419*5113495bSYour Name };
420*5113495bSYour Name #else
421*5113495bSYour Name struct rx_ppdu_start {
422*5113495bSYour Name 	volatile
423*5113495bSYour Name 	uint32_t rssi_chain0_pri20:8, /* [7:0] */
424*5113495bSYour Name 		rssi_chain0_sec20:8, /* [15:8] */
425*5113495bSYour Name 		rssi_chain0_sec40:8, /* [23:16] */
426*5113495bSYour Name 		rssi_chain0_sec80:8; /* [31:24] */
427*5113495bSYour Name 	volatile
428*5113495bSYour Name 	uint32_t rssi_chain1_pri20:8, /* [7:0] */
429*5113495bSYour Name 		rssi_chain1_sec20:8, /* [15:8] */
430*5113495bSYour Name 		rssi_chain1_sec40:8, /* [23:16] */
431*5113495bSYour Name 		rssi_chain1_sec80:8; /* [31:24] */
432*5113495bSYour Name 	volatile
433*5113495bSYour Name 	uint32_t rssi_chain2_pri20:8, /* [7:0] */
434*5113495bSYour Name 		rssi_chain2_sec20:8, /* [15:8] */
435*5113495bSYour Name 		rssi_chain2_sec40:8, /* [23:16] */
436*5113495bSYour Name 		rssi_chain2_sec80:8; /* [31:24] */
437*5113495bSYour Name 	volatile
438*5113495bSYour Name 	uint32_t rssi_chain3_pri20:8, /* [7:0] */
439*5113495bSYour Name 		rssi_chain3_sec20:8, /* [15:8] */
440*5113495bSYour Name 		rssi_chain3_sec40:8, /* [23:16] */
441*5113495bSYour Name 		rssi_chain3_sec80:8; /* [31:24] */
442*5113495bSYour Name 	volatile
443*5113495bSYour Name 	uint32_t rssi_comb:8,  /* [7:0] */
444*5113495bSYour Name 		reserved_4a:16, /* [23:8] */
445*5113495bSYour Name 		is_greenfield:1, /* [24] */
446*5113495bSYour Name 		reserved_4b:7; /* [31:25] */
447*5113495bSYour Name 	volatile
448*5113495bSYour Name 	uint32_t l_sig_rate:4, /* [3:0] */
449*5113495bSYour Name 		l_sig_rate_select:1, /* [4] */
450*5113495bSYour Name 		l_sig_length:12, /* [16:5] */
451*5113495bSYour Name 		l_sig_parity:1, /* [17] */
452*5113495bSYour Name 		l_sig_tail:6, /* [23:18] */
453*5113495bSYour Name 		preamble_type:8; /* [31:24] */
454*5113495bSYour Name 	volatile
455*5113495bSYour Name 	uint32_t ht_sig_vht_sig_a_1:24, /* [23:0] */
456*5113495bSYour Name 		reserved_6:8; /* [31:24] */
457*5113495bSYour Name 	volatile
458*5113495bSYour Name 	uint32_t ht_sig_vht_sig_a_2:24, /* [23:0] */
459*5113495bSYour Name 		txbf_h_info:1, /* [24] */
460*5113495bSYour Name 		reserved_7:7; /* [31:25] */
461*5113495bSYour Name 	volatile
462*5113495bSYour Name 	uint32_t vht_sig_b:29, /* [28:0] */
463*5113495bSYour Name 		reserved_8:3; /* [31:29] */
464*5113495bSYour Name 	volatile
465*5113495bSYour Name 	uint32_t service:16,   /* [15:0] */
466*5113495bSYour Name 		reserved_9:16; /* [31:16] */
467*5113495bSYour Name };
468*5113495bSYour Name 
469*5113495bSYour Name #define VHT_SIG_A_1(rx_desc) ((rx_desc)->ppdu_start.ht_sig_vht_sig_a_1)
470*5113495bSYour Name #define VHT_SIG_A_2(rx_desc) ((rx_desc)->ppdu_start.ht_sig_vht_sig_a_2)
471*5113495bSYour Name 
472*5113495bSYour Name #define TSF_TIMESTAMP(rx_desc) ((rx_desc)->ppdu_end.tsf_timestamp)
473*5113495bSYour Name 
474*5113495bSYour Name struct rx_mpdu_start {
475*5113495bSYour Name 	volatile
476*5113495bSYour Name 	uint32_t peer_idx:11,  /* [10:0] */
477*5113495bSYour Name 		fr_ds:1, /* [11] */
478*5113495bSYour Name 		to_ds:1, /* [12] */
479*5113495bSYour Name 		encrypted:1, /* [13] */
480*5113495bSYour Name 		retry:1, /* [14] */
481*5113495bSYour Name 		txbf_h_info:1, /* [15] */
482*5113495bSYour Name 		seq_num:12, /* [27:16] */
483*5113495bSYour Name 		encrypt_type:4; /* [31:28] */
484*5113495bSYour Name 	volatile uint32_t pn_31_0:32;   /* [31:0] */
485*5113495bSYour Name 	volatile
486*5113495bSYour Name 	uint32_t pn_47_32:16,  /* [15:0] */
487*5113495bSYour Name 		directed:1, /* [16] */
488*5113495bSYour Name 		reserved_2:11, /* [27:17] */
489*5113495bSYour Name 		tid:4; /* [31:28] */
490*5113495bSYour Name };
491*5113495bSYour Name 
492*5113495bSYour Name struct rx_ppdu_end {
493*5113495bSYour Name 	volatile uint32_t evm_p0:32;    /* [31:0] */
494*5113495bSYour Name 	volatile uint32_t evm_p1:32;    /* [31:0] */
495*5113495bSYour Name 	volatile uint32_t evm_p2:32;    /* [31:0] */
496*5113495bSYour Name 	volatile uint32_t evm_p3:32;    /* [31:0] */
497*5113495bSYour Name 	volatile uint32_t evm_p4:32;    /* [31:0] */
498*5113495bSYour Name 	volatile uint32_t evm_p5:32;    /* [31:0] */
499*5113495bSYour Name 	volatile uint32_t evm_p6:32;    /* [31:0] */
500*5113495bSYour Name 	volatile uint32_t evm_p7:32;    /* [31:0] */
501*5113495bSYour Name 	volatile uint32_t evm_p8:32;    /* [31:0] */
502*5113495bSYour Name 	volatile uint32_t evm_p9:32;    /* [31:0] */
503*5113495bSYour Name 	volatile uint32_t evm_p10:32;   /* [31:0] */
504*5113495bSYour Name 	volatile uint32_t evm_p11:32;   /* [31:0] */
505*5113495bSYour Name 	volatile uint32_t evm_p12:32;   /* [31:0] */
506*5113495bSYour Name 	volatile uint32_t evm_p13:32;   /* [31:0] */
507*5113495bSYour Name 	volatile uint32_t evm_p14:32;   /* [31:0] */
508*5113495bSYour Name 	volatile uint32_t evm_p15:32;   /* [31:0] */
509*5113495bSYour Name 	volatile uint32_t tsf_timestamp:32; /* [31:0] */
510*5113495bSYour Name 	volatile uint32_t wb_timestamp:32; /* [31:0] */
511*5113495bSYour Name 	volatile
512*5113495bSYour Name 	uint32_t locationing_timestamp:8, /* [7:0] */
513*5113495bSYour Name 		phy_err_code:8, /* [15:8] */
514*5113495bSYour Name 		phy_err:1, /* [16] */
515*5113495bSYour Name 		rx_location:1, /* [17] */
516*5113495bSYour Name 		txbf_h_info:1, /* [18] */
517*5113495bSYour Name 		reserved_18:13; /* [31:19] */
518*5113495bSYour Name 	volatile
519*5113495bSYour Name 	uint32_t rx_antenna:24, /* [23:0] */
520*5113495bSYour Name 		tx_ht_vht_ack:1, /* [24] */
521*5113495bSYour Name 		bb_captured_channel:1, /* [25] */
522*5113495bSYour Name 		reserved_19:6; /* [31:26] */
523*5113495bSYour Name 	volatile
524*5113495bSYour Name 	uint32_t rtt_correction_value:24, /* [23:0] */
525*5113495bSYour Name 		reserved_20:7, /* [30:24] */
526*5113495bSYour Name 		rtt_normal_mode:1; /* [31] */
527*5113495bSYour Name 	volatile
528*5113495bSYour Name 	uint32_t bb_length:16, /* [15:0] */
529*5113495bSYour Name 		reserved_21:15, /* [30:16] */
530*5113495bSYour Name 		ppdu_done:1; /* [31] */
531*5113495bSYour Name };
532*5113495bSYour Name #endif /* defined(HELIUMPLUS) */
533*5113495bSYour Name 
534*5113495bSYour Name #endif /*_RX_DESC_H_*/
535