xref: /linux/drivers/net/wireless/ath/ath12k/wifi7/hal_rx.h (revision 37a93dd5c49b5fda807fd204edf2547c3493319c)
1 /* SPDX-License-Identifier: BSD-3-Clause-Clear */
2 /*
3  * Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
4  * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
5  */
6 
7 #ifndef ATH12K_HAL_RX_H
8 #define ATH12K_HAL_RX_H
9 
10 #include "hal_desc.h"
11 
12 struct hal_reo_status;
13 
14 struct hal_rx_wbm_rel_info {
15 	u32 cookie;
16 	enum hal_wbm_rel_src_module err_rel_src;
17 	enum hal_reo_dest_ring_push_reason push_reason;
18 	u32 err_code;
19 	bool first_msdu;
20 	bool last_msdu;
21 	bool continuation;
22 	void *rx_desc;
23 	bool hw_cc_done;
24 	__le32 peer_metadata;
25 };
26 
27 #define HAL_RX_MPDU_INFO_PN_GET_BYTE1(__val) \
28 	le32_get_bits((__val), GENMASK(7, 0))
29 
30 #define HAL_RX_MPDU_INFO_PN_GET_BYTE2(__val) \
31 	le32_get_bits((__val), GENMASK(15, 8))
32 
33 #define HAL_RX_MPDU_INFO_PN_GET_BYTE3(__val) \
34 	le32_get_bits((__val), GENMASK(23, 16))
35 
36 #define HAL_RX_MPDU_INFO_PN_GET_BYTE4(__val) \
37 	le32_get_bits((__val), GENMASK(31, 24))
38 
39 struct hal_rx_mon_status_tlv_hdr {
40 	u32 hdr;
41 	u8 value[];
42 };
43 
44 #define HAL_TLV_STATUS_PPDU_NOT_DONE            0
45 #define HAL_TLV_STATUS_PPDU_DONE                1
46 #define HAL_TLV_STATUS_BUF_DONE                 2
47 #define HAL_TLV_STATUS_PPDU_NON_STD_DONE        3
48 
49 enum hal_rx_mon_status {
50 	HAL_RX_MON_STATUS_PPDU_NOT_DONE,
51 	HAL_RX_MON_STATUS_PPDU_DONE,
52 	HAL_RX_MON_STATUS_BUF_DONE,
53 	HAL_RX_MON_STATUS_BUF_ADDR,
54 	HAL_RX_MON_STATUS_MPDU_START,
55 	HAL_RX_MON_STATUS_MPDU_END,
56 	HAL_RX_MON_STATUS_MSDU_END,
57 };
58 
59 #define HAL_RX_PPDU_START_INFO0_PPDU_ID			GENMASK(15, 0)
60 #define HAL_RX_PPDU_START_INFO1_CHAN_NUM		GENMASK(15, 0)
61 #define HAL_RX_PPDU_START_INFO1_CHAN_FREQ		GENMASK(31, 16)
62 
63 struct hal_rx_ppdu_start {
64 	__le32 info0;
65 	__le32 info1;
66 	__le32 ppdu_start_ts_31_0;
67 	__le32 ppdu_start_ts_63_32;
68 	__le32 rsvd[2];
69 } __packed;
70 
71 #define HAL_RX_PPDU_END_USER_STATS_INFO0_PEER_ID		GENMASK(13, 0)
72 #define HAL_RX_PPDU_END_USER_STATS_INFO0_DEVICE_ID		GENMASK(15, 14)
73 #define HAL_RX_PPDU_END_USER_STATS_INFO0_MPDU_CNT_FCS_ERR	GENMASK(26, 16)
74 
75 #define HAL_RX_PPDU_END_USER_STATS_INFO1_MPDU_CNT_FCS_OK	GENMASK(10, 0)
76 #define HAL_RX_PPDU_END_USER_STATS_INFO1_FC_VALID		BIT(11)
77 #define HAL_RX_PPDU_END_USER_STATS_INFO1_QOS_CTRL_VALID		BIT(12)
78 #define HAL_RX_PPDU_END_USER_STATS_INFO1_HT_CTRL_VALID		BIT(13)
79 #define HAL_RX_PPDU_END_USER_STATS_INFO1_PKT_TYPE              GENMASK(24, 21)
80 
81 #define HAL_RX_PPDU_END_USER_STATS_INFO2_AST_INDEX		GENMASK(15, 0)
82 #define HAL_RX_PPDU_END_USER_STATS_INFO2_FRAME_CTRL		GENMASK(31, 16)
83 
84 #define HAL_RX_PPDU_END_USER_STATS_INFO3_QOS_CTRL		GENMASK(31, 16)
85 
86 #define HAL_RX_PPDU_END_USER_STATS_INFO4_UDP_MSDU_CNT		GENMASK(15, 0)
87 #define HAL_RX_PPDU_END_USER_STATS_INFO4_TCP_MSDU_CNT		GENMASK(31, 16)
88 
89 #define HAL_RX_PPDU_END_USER_STATS_INFO5_OTHER_MSDU_CNT		GENMASK(15, 0)
90 #define HAL_RX_PPDU_END_USER_STATS_INFO5_TCP_ACK_MSDU_CNT	GENMASK(31, 16)
91 
92 #define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_BITMAP		GENMASK(15, 0)
93 #define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_EOSP_BITMAP	GENMASK(31, 16)
94 
95 #define HAL_RX_PPDU_END_USER_STATS_INFO7_MPDU_OK_BYTE_COUNT    GENMASK(24, 0)
96 #define HAL_RX_PPDU_END_USER_STATS_INFO8_MPDU_ERR_BYTE_COUNT   GENMASK(24, 0)
97 
98 struct hal_rx_ppdu_end_user_stats {
99 	__le32 rsvd0[2];
100 	__le32 info0;
101 	__le32 info1;
102 	__le32 info2;
103 	__le32 info3;
104 	__le32 ht_ctrl;
105 	__le32 rsvd1[2];
106 	__le32 info4;
107 	__le32 info5;
108 	__le32 usr_resp_ref;
109 	__le32 info6;
110 	__le32 rsvd3[4];
111 	__le32 info7;
112 	__le32 rsvd4;
113 	__le32 info8;
114 	__le32 rsvd5[2];
115 	__le32 usr_resp_ref_ext;
116 	__le32 rsvd6;
117 } __packed;
118 
119 struct hal_rx_ppdu_end_user_stats_ext {
120 	__le32 info0;
121 	__le32 info1;
122 	__le32 info2;
123 	__le32 info3;
124 	__le32 info4;
125 	__le32 info5;
126 	__le32 info6;
127 	__le32 rsvd;
128 } __packed;
129 
130 #define HAL_RX_HT_SIG_INFO_INFO0_MCS		GENMASK(6, 0)
131 #define HAL_RX_HT_SIG_INFO_INFO0_BW		BIT(7)
132 
133 #define HAL_RX_HT_SIG_INFO_INFO1_STBC		GENMASK(5, 4)
134 #define HAL_RX_HT_SIG_INFO_INFO1_FEC_CODING	BIT(6)
135 #define HAL_RX_HT_SIG_INFO_INFO1_GI		BIT(7)
136 
137 struct hal_rx_ht_sig_info {
138 	__le32 info0;
139 	__le32 info1;
140 } __packed;
141 
142 #define HAL_RX_LSIG_B_INFO_INFO0_RATE	GENMASK(3, 0)
143 #define HAL_RX_LSIG_B_INFO_INFO0_LEN	GENMASK(15, 4)
144 
145 struct hal_rx_lsig_b_info {
146 	__le32 info0;
147 } __packed;
148 
149 #define HAL_RX_LSIG_A_INFO_INFO0_RATE		GENMASK(3, 0)
150 #define HAL_RX_LSIG_A_INFO_INFO0_LEN		GENMASK(16, 5)
151 #define HAL_RX_LSIG_A_INFO_INFO0_PKT_TYPE	GENMASK(27, 24)
152 
153 struct hal_rx_lsig_a_info {
154 	__le32 info0;
155 } __packed;
156 
157 #define HAL_RX_VHT_SIG_A_INFO_INFO0_BW		GENMASK(1, 0)
158 #define HAL_RX_VHT_SIG_A_INFO_INFO0_STBC	BIT(3)
159 #define HAL_RX_VHT_SIG_A_INFO_INFO0_GROUP_ID	GENMASK(9, 4)
160 #define HAL_RX_VHT_SIG_A_INFO_INFO0_NSTS	GENMASK(21, 10)
161 
162 #define HAL_RX_VHT_SIG_A_INFO_INFO1_GI_SETTING		GENMASK(1, 0)
163 #define HAL_RX_VHT_SIG_A_INFO_INFO1_SU_MU_CODING	BIT(2)
164 #define HAL_RX_VHT_SIG_A_INFO_INFO1_MCS			GENMASK(7, 4)
165 #define HAL_RX_VHT_SIG_A_INFO_INFO1_BEAMFORMED		BIT(8)
166 
167 struct hal_rx_vht_sig_a_info {
168 	__le32 info0;
169 	__le32 info1;
170 } __packed;
171 
172 enum hal_rx_vht_sig_a_gi_setting {
173 	HAL_RX_VHT_SIG_A_NORMAL_GI = 0,
174 	HAL_RX_VHT_SIG_A_SHORT_GI = 1,
175 	HAL_RX_VHT_SIG_A_SHORT_GI_AMBIGUITY = 3,
176 };
177 
178 #define HE_GI_0_8 0
179 #define HE_GI_0_4 1
180 #define HE_GI_1_6 2
181 #define HE_GI_3_2 3
182 
183 #define HE_LTF_1_X 0
184 #define HE_LTF_2_X 1
185 #define HE_LTF_4_X 2
186 
187 #define HAL_RX_HE_SIG_A_SU_INFO_INFO0_TRANSMIT_MCS	GENMASK(6, 3)
188 #define HAL_RX_HE_SIG_A_SU_INFO_INFO0_DCM		BIT(7)
189 #define HAL_RX_HE_SIG_A_SU_INFO_INFO0_TRANSMIT_BW	GENMASK(20, 19)
190 #define HAL_RX_HE_SIG_A_SU_INFO_INFO0_CP_LTF_SIZE	GENMASK(22, 21)
191 #define HAL_RX_HE_SIG_A_SU_INFO_INFO0_NSTS		GENMASK(25, 23)
192 #define HAL_RX_HE_SIG_A_SU_INFO_INFO0_BSS_COLOR		GENMASK(13, 8)
193 #define HAL_RX_HE_SIG_A_SU_INFO_INFO0_SPATIAL_REUSE	GENMASK(18, 15)
194 #define HAL_RX_HE_SIG_A_SU_INFO_INFO0_FORMAT_IND	BIT(0)
195 #define HAL_RX_HE_SIG_A_SU_INFO_INFO0_BEAM_CHANGE	BIT(1)
196 #define HAL_RX_HE_SIG_A_SU_INFO_INFO0_DL_UL_FLAG	BIT(2)
197 
198 #define HAL_RX_HE_SIG_A_SU_INFO_INFO1_TXOP_DURATION	GENMASK(6, 0)
199 #define HAL_RX_HE_SIG_A_SU_INFO_INFO1_CODING		BIT(7)
200 #define HAL_RX_HE_SIG_A_SU_INFO_INFO1_LDPC_EXTRA	BIT(8)
201 #define HAL_RX_HE_SIG_A_SU_INFO_INFO1_STBC		BIT(9)
202 #define HAL_RX_HE_SIG_A_SU_INFO_INFO1_TXBF		BIT(10)
203 #define HAL_RX_HE_SIG_A_SU_INFO_INFO1_PKT_EXT_FACTOR	GENMASK(12, 11)
204 #define HAL_RX_HE_SIG_A_SU_INFO_INFO1_PKT_EXT_PE_DISAM	BIT(13)
205 #define HAL_RX_HE_SIG_A_SU_INFO_INFO1_DOPPLER_IND	BIT(15)
206 
207 struct hal_rx_he_sig_a_su_info {
208 	__le32 info0;
209 	__le32 info1;
210 } __packed;
211 
212 #define HAL_RX_HE_SIG_A_MU_DL_INFO0_UL_FLAG		BIT(1)
213 #define HAL_RX_HE_SIG_A_MU_DL_INFO0_MCS_OF_SIGB		GENMASK(3, 1)
214 #define HAL_RX_HE_SIG_A_MU_DL_INFO0_DCM_OF_SIGB		BIT(4)
215 #define HAL_RX_HE_SIG_A_MU_DL_INFO0_BSS_COLOR		GENMASK(10, 5)
216 #define HAL_RX_HE_SIG_A_MU_DL_INFO0_SPATIAL_REUSE	GENMASK(14, 11)
217 #define HAL_RX_HE_SIG_A_MU_DL_INFO0_TRANSMIT_BW		GENMASK(17, 15)
218 #define HAL_RX_HE_SIG_A_MU_DL_INFO0_NUM_SIGB_SYMB	GENMASK(21, 18)
219 #define HAL_RX_HE_SIG_A_MU_DL_INFO0_COMP_MODE_SIGB	BIT(22)
220 #define HAL_RX_HE_SIG_A_MU_DL_INFO0_CP_LTF_SIZE		GENMASK(24, 23)
221 #define HAL_RX_HE_SIG_A_MU_DL_INFO0_DOPPLER_INDICATION	BIT(25)
222 
223 #define HAL_RX_HE_SIG_A_MU_DL_INFO1_TXOP_DURATION	GENMASK(6, 0)
224 #define HAL_RX_HE_SIG_A_MU_DL_INFO1_NUM_LTF_SYMB	GENMASK(10, 8)
225 #define HAL_RX_HE_SIG_A_MU_DL_INFO1_LDPC_EXTRA		BIT(11)
226 #define HAL_RX_HE_SIG_A_MU_DL_INFO1_STBC		BIT(12)
227 #define HAL_RX_HE_SIG_A_MU_DL_INFO1_PKT_EXT_FACTOR	GENMASK(14, 13)
228 #define HAL_RX_HE_SIG_A_MU_DL_INFO1_PKT_EXT_PE_DISAM	BIT(15)
229 
230 struct hal_rx_he_sig_a_mu_dl_info {
231 	__le32 info0;
232 	__le32 info1;
233 } __packed;
234 
235 #define HAL_RX_HE_SIG_B1_MU_INFO_INFO0_RU_ALLOCATION	GENMASK(7, 0)
236 
237 struct hal_rx_he_sig_b1_mu_info {
238 	__le32 info0;
239 } __packed;
240 
241 #define HAL_RX_HE_SIG_B2_MU_INFO_INFO0_STA_ID           GENMASK(10, 0)
242 #define HAL_RX_HE_SIG_B2_MU_INFO_INFO0_STA_MCS		GENMASK(18, 15)
243 #define HAL_RX_HE_SIG_B2_MU_INFO_INFO0_STA_CODING	BIT(20)
244 #define HAL_RX_HE_SIG_B2_MU_INFO_INFO0_STA_NSTS		GENMASK(31, 29)
245 
246 struct hal_rx_he_sig_b2_mu_info {
247 	__le32 info0;
248 } __packed;
249 
250 #define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_ID	GENMASK(10, 0)
251 #define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_NSTS	GENMASK(13, 11)
252 #define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_TXBF	BIT(14)
253 #define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_MCS	GENMASK(18, 15)
254 #define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_DCM	BIT(19)
255 #define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_CODING	BIT(20)
256 
257 struct hal_rx_he_sig_b2_ofdma_info {
258 	__le32 info0;
259 } __packed;
260 
261 enum hal_rx_ul_reception_type {
262 	HAL_RECEPTION_TYPE_ULOFMDA,
263 	HAL_RECEPTION_TYPE_ULMIMO,
264 	HAL_RECEPTION_TYPE_OTHER,
265 	HAL_RECEPTION_TYPE_FRAMELESS
266 };
267 
268 #define HAL_RX_RSSI_LEGACY_INFO_INFO0_RECEPTION		GENMASK(3, 0)
269 #define HAL_RX_RSSI_LEGACY_INFO_INFO0_RX_BW		GENMASK(7, 5)
270 #define HAL_RX_RSSI_LEGACY_INFO_INFO1_RSSI_COMB		GENMASK(15, 8)
271 #define HAL_RX_RSSI_LEGACY_INFO_INFO2_RSSI_COMB_PPDU	GENMASK(7, 0)
272 
273 struct hal_rx_phyrx_rssi_legacy_info {
274 	__le32 info0;
275 	__le32 rsvd0[39];
276 	__le32 info1;
277 	__le32 info2;
278 } __packed;
279 
280 #define HAL_RX_MPDU_START_INFO0_PPDU_ID			GENMASK(31, 16)
281 #define HAL_RX_MPDU_START_INFO1_PEERID			GENMASK(29, 16)
282 #define HAL_RX_MPDU_START_INFO1_DEVICE_ID		GENMASK(31, 30)
283 #define HAL_RX_MPDU_START_INFO2_MPDU_LEN		GENMASK(13, 0)
284 struct hal_rx_mpdu_start {
285 	__le32 rsvd0[9];
286 	__le32 info0;
287 	__le32 info1;
288 	__le32 rsvd1[2];
289 	__le32 info2;
290 	__le32 rsvd2[16];
291 } __packed;
292 
293 struct hal_rx_msdu_end {
294 	__le32 info0;
295 	__le32 rsvd0[9];
296 	__le16 info00;
297 	__le16 info01;
298 	__le32 rsvd00[8];
299 	__le32 info1;
300 	__le32 rsvd1[10];
301 	__le32 info2;
302 	__le32 rsvd2;
303 } __packed;
304 
305 #define HAL_RX_PPDU_END_DURATION	GENMASK(23, 0)
306 struct hal_rx_ppdu_end_duration {
307 	__le32 rsvd0[9];
308 	__le32 info0;
309 	__le32 rsvd1[18];
310 } __packed;
311 
312 struct hal_rx_rxpcu_classification_overview {
313 	u32 rsvd0;
314 } __packed;
315 
316 #define HAL_RX_NUM_MSDU_DESC 6
317 struct hal_rx_msdu_list {
318 	struct hal_rx_msdu_desc_info msdu_info[HAL_RX_NUM_MSDU_DESC];
319 	u64 paddr[HAL_RX_NUM_MSDU_DESC];
320 	u32 sw_cookie[HAL_RX_NUM_MSDU_DESC];
321 	u8 rbm[HAL_RX_NUM_MSDU_DESC];
322 };
323 
324 #define HAL_RX_FBM_ACK_INFO0_ADDR1_31_0		GENMASK(31, 0)
325 #define HAL_RX_FBM_ACK_INFO1_ADDR1_47_32	GENMASK(15, 0)
326 #define HAL_RX_FBM_ACK_INFO1_ADDR2_15_0		GENMASK(31, 16)
327 #define HAL_RX_FBM_ACK_INFO2_ADDR2_47_16	GENMASK(31, 0)
328 
329 struct hal_rx_frame_bitmap_ack {
330 	__le32 reserved;
331 	__le32 info0;
332 	__le32 info1;
333 	__le32 info2;
334 	__le32 reserved1[10];
335 } __packed;
336 
337 #define HAL_RX_RESP_REQ_INFO0_PPDU_ID		GENMASK(15, 0)
338 #define HAL_RX_RESP_REQ_INFO0_RECEPTION_TYPE	BIT(16)
339 #define HAL_RX_RESP_REQ_INFO1_DURATION		GENMASK(15, 0)
340 #define HAL_RX_RESP_REQ_INFO1_RATE_MCS		GENMASK(24, 21)
341 #define HAL_RX_RESP_REQ_INFO1_SGI		GENMASK(26, 25)
342 #define HAL_RX_RESP_REQ_INFO1_STBC		BIT(27)
343 #define HAL_RX_RESP_REQ_INFO1_LDPC		BIT(28)
344 #define HAL_RX_RESP_REQ_INFO1_IS_AMPDU		BIT(29)
345 #define HAL_RX_RESP_REQ_INFO2_NUM_USER		GENMASK(6, 0)
346 #define HAL_RX_RESP_REQ_INFO3_ADDR1_31_0	GENMASK(31, 0)
347 #define HAL_RX_RESP_REQ_INFO4_ADDR1_47_32	GENMASK(15, 0)
348 #define HAL_RX_RESP_REQ_INFO4_ADDR1_15_0	GENMASK(31, 16)
349 #define HAL_RX_RESP_REQ_INFO5_ADDR1_47_16	GENMASK(31, 0)
350 
351 struct hal_rx_resp_req_info {
352 	__le32 info0;
353 	__le32 reserved[1];
354 	__le32 info1;
355 	__le32 info2;
356 	__le32 reserved1[2];
357 	__le32 info3;
358 	__le32 info4;
359 	__le32 info5;
360 	__le32 reserved2[5];
361 } __packed;
362 
363 #define REO_QUEUE_DESC_MAGIC_DEBUG_PATTERN_0 0xDDBEEF
364 #define REO_QUEUE_DESC_MAGIC_DEBUG_PATTERN_1 0xADBEEF
365 #define REO_QUEUE_DESC_MAGIC_DEBUG_PATTERN_2 0xBDBEEF
366 #define REO_QUEUE_DESC_MAGIC_DEBUG_PATTERN_3 0xCDBEEF
367 
368 /* HE Radiotap data1 Mask */
369 #define HE_SU_FORMAT_TYPE 0x0000
370 #define HE_EXT_SU_FORMAT_TYPE 0x0001
371 #define HE_MU_FORMAT_TYPE  0x0002
372 #define HE_TRIG_FORMAT_TYPE  0x0003
373 #define HE_BEAM_CHANGE_KNOWN 0x0008
374 #define HE_DL_UL_KNOWN 0x0010
375 #define HE_MCS_KNOWN 0x0020
376 #define HE_DCM_KNOWN 0x0040
377 #define HE_CODING_KNOWN 0x0080
378 #define HE_LDPC_EXTRA_SYMBOL_KNOWN 0x0100
379 #define HE_STBC_KNOWN 0x0200
380 #define HE_DATA_BW_RU_KNOWN 0x4000
381 #define HE_DOPPLER_KNOWN 0x8000
382 #define HE_BSS_COLOR_KNOWN 0x0004
383 
384 /* HE Radiotap data2 Mask */
385 #define HE_GI_KNOWN 0x0002
386 #define HE_TXBF_KNOWN 0x0010
387 #define HE_PE_DISAMBIGUITY_KNOWN 0x0020
388 #define HE_TXOP_KNOWN 0x0040
389 #define HE_LTF_SYMBOLS_KNOWN 0x0004
390 #define HE_PRE_FEC_PADDING_KNOWN 0x0008
391 #define HE_MIDABLE_PERIODICITY_KNOWN 0x0080
392 
393 /* HE radiotap data3 shift values */
394 #define HE_BEAM_CHANGE_SHIFT 6
395 #define HE_DL_UL_SHIFT 7
396 #define HE_TRANSMIT_MCS_SHIFT 8
397 #define HE_DCM_SHIFT 12
398 #define HE_CODING_SHIFT 13
399 #define HE_LDPC_EXTRA_SYMBOL_SHIFT 14
400 #define HE_STBC_SHIFT 15
401 
402 /* HE radiotap data4 shift values */
403 #define HE_STA_ID_SHIFT 4
404 
405 /* HE radiotap data5 */
406 #define HE_GI_SHIFT 4
407 #define HE_LTF_SIZE_SHIFT 6
408 #define HE_LTF_SYM_SHIFT 8
409 #define HE_TXBF_SHIFT 14
410 #define HE_PE_DISAMBIGUITY_SHIFT 15
411 #define HE_PRE_FEC_PAD_SHIFT 12
412 
413 /* HE radiotap data6 */
414 #define HE_DOPPLER_SHIFT 4
415 #define HE_TXOP_SHIFT 8
416 
417 /* HE radiotap HE-MU flags1 */
418 #define HE_SIG_B_MCS_KNOWN 0x0010
419 #define HE_SIG_B_DCM_KNOWN 0x0040
420 #define HE_SIG_B_SYM_NUM_KNOWN 0x8000
421 #define HE_RU_0_KNOWN 0x0100
422 #define HE_RU_1_KNOWN 0x0200
423 #define HE_RU_2_KNOWN 0x0400
424 #define HE_RU_3_KNOWN 0x0800
425 #define HE_DCM_FLAG_1_SHIFT 5
426 #define HE_SPATIAL_REUSE_MU_KNOWN 0x0100
427 #define HE_SIG_B_COMPRESSION_FLAG_1_KNOWN 0x4000
428 
429 /* HE radiotap HE-MU flags2 */
430 #define HE_SIG_B_COMPRESSION_FLAG_2_SHIFT 3
431 #define HE_BW_KNOWN 0x0004
432 #define HE_NUM_SIG_B_SYMBOLS_SHIFT 4
433 #define HE_SIG_B_COMPRESSION_FLAG_2_KNOWN 0x0100
434 #define HE_NUM_SIG_B_FLAG_2_SHIFT 9
435 #define HE_LTF_FLAG_2_SYMBOLS_SHIFT 12
436 #define HE_LTF_KNOWN 0x8000
437 
438 /* HE radiotap per_user_1 */
439 #define HE_STA_SPATIAL_SHIFT 11
440 #define HE_TXBF_SHIFT 14
441 #define HE_RESERVED_SET_TO_1_SHIFT 19
442 #define HE_STA_CODING_SHIFT 20
443 
444 /* HE radiotap per_user_2 */
445 #define HE_STA_MCS_SHIFT 4
446 #define HE_STA_DCM_SHIFT 5
447 
448 /* HE radiotap per user known */
449 #define HE_USER_FIELD_POSITION_KNOWN 0x01
450 #define HE_STA_ID_PER_USER_KNOWN 0x02
451 #define HE_STA_NSTS_KNOWN 0x04
452 #define HE_STA_TX_BF_KNOWN 0x08
453 #define HE_STA_SPATIAL_CONFIG_KNOWN 0x10
454 #define HE_STA_MCS_KNOWN 0x20
455 #define HE_STA_DCM_KNOWN 0x40
456 #define HE_STA_CODING_KNOWN 0x80
457 
458 #define HAL_RX_MPDU_ERR_FCS			BIT(0)
459 #define HAL_RX_MPDU_ERR_DECRYPT			BIT(1)
460 #define HAL_RX_MPDU_ERR_TKIP_MIC		BIT(2)
461 #define HAL_RX_MPDU_ERR_AMSDU_ERR		BIT(3)
462 #define HAL_RX_MPDU_ERR_OVERFLOW		BIT(4)
463 #define HAL_RX_MPDU_ERR_MSDU_LEN		BIT(5)
464 #define HAL_RX_MPDU_ERR_MPDU_LEN		BIT(6)
465 #define HAL_RX_MPDU_ERR_UNENCRYPTED_FRAME	BIT(7)
466 
467 #define HAL_RX_CMN_USR_INFO0_CP_SETTING			GENMASK(17, 16)
468 #define HAL_RX_CMN_USR_INFO0_LTF_SIZE			GENMASK(19, 18)
469 
470 struct hal_phyrx_common_user_info {
471 	__le32 rsvd[2];
472 	__le32 info0;
473 	__le32 rsvd1;
474 } __packed;
475 
476 #define HAL_RX_EHT_SIG_NDP_CMN_INFO0_SPATIAL_REUSE	GENMASK(3, 0)
477 #define HAL_RX_EHT_SIG_NDP_CMN_INFO0_GI_LTF		GENMASK(5, 4)
478 #define HAL_RX_EHT_SIG_NDP_CMN_INFO0_NUM_LTF_SYM	GENMASK(8, 6)
479 #define HAL_RX_EHT_SIG_NDP_CMN_INFO0_NSS		GENMASK(10, 7)
480 #define HAL_RX_EHT_SIG_NDP_CMN_INFO0_BEAMFORMED		BIT(11)
481 #define HAL_RX_EHT_SIG_NDP_CMN_INFO0_DISREGARD		GENMASK(13, 12)
482 #define HAL_RX_EHT_SIG_NDP_CMN_INFO0_CRC		GENMASK(17, 14)
483 
484 struct hal_eht_sig_ndp_cmn_eb {
485 	__le32 info0;
486 } __packed;
487 
488 #define HAL_RX_EHT_SIG_OVERFLOW_INFO0_SPATIAL_REUSE		GENMASK(3, 0)
489 #define HAL_RX_EHT_SIG_OVERFLOW_INFO0_GI_LTF			GENMASK(5, 4)
490 #define HAL_RX_EHT_SIG_OVERFLOW_INFO0_NUM_LTF_SYM		GENMASK(8, 6)
491 #define HAL_RX_EHT_SIG_OVERFLOW_INFO0_LDPC_EXTA_SYM		BIT(9)
492 #define HAL_RX_EHT_SIG_OVERFLOW_INFO0_PRE_FEC_PAD_FACTOR	GENMASK(11, 10)
493 #define HAL_RX_EHT_SIG_OVERFLOW_INFO0_DISAMBIGUITY		BIT(12)
494 #define HAL_RX_EHT_SIG_OVERFLOW_INFO0_DISREGARD			GENMASK(16, 13)
495 
496 struct hal_eht_sig_usig_overflow {
497 	__le32 info0;
498 } __packed;
499 
500 #define HAL_RX_EHT_SIG_NON_MUMIMO_USER_INFO0_STA_ID	GENMASK(10, 0)
501 #define HAL_RX_EHT_SIG_NON_MUMIMO_USER_INFO0_MCS	GENMASK(14, 11)
502 #define HAL_RX_EHT_SIG_NON_MUMIMO_USER_INFO0_VALIDATE	BIT(15)
503 #define HAL_RX_EHT_SIG_NON_MUMIMO_USER_INFO0_NSS	GENMASK(19, 16)
504 #define HAL_RX_EHT_SIG_NON_MUMIMO_USER_INFO0_BEAMFORMED	BIT(20)
505 #define HAL_RX_EHT_SIG_NON_MUMIMO_USER_INFO0_CODING	BIT(21)
506 #define HAL_RX_EHT_SIG_NON_MUMIMO_USER_INFO0_CRC	GENMASK(25, 22)
507 
508 struct hal_eht_sig_non_mu_mimo {
509 	__le32 info0;
510 } __packed;
511 
512 #define HAL_RX_EHT_SIG_MUMIMO_USER_INFO0_STA_ID		GENMASK(10, 0)
513 #define HAL_RX_EHT_SIG_MUMIMO_USER_INFO0_MCS		GENMASK(14, 11)
514 #define HAL_RX_EHT_SIG_MUMIMO_USER_INFO0_CODING		BIT(15)
515 #define HAL_RX_EHT_SIG_MUMIMO_USER_INFO0_SPATIAL_CODING	GENMASK(22, 16)
516 #define HAL_RX_EHT_SIG_MUMIMO_USER_INFO0_CRC		GENMASK(26, 23)
517 
518 struct hal_eht_sig_mu_mimo {
519 	__le32 info0;
520 } __packed;
521 
522 union hal_eht_sig_user_field {
523 	struct hal_eht_sig_mu_mimo mu_mimo;
524 	struct hal_eht_sig_non_mu_mimo n_mu_mimo;
525 };
526 
527 #define HAL_RX_EHT_SIG_NON_OFDMA_INFO0_SPATIAL_REUSE		GENMASK(3, 0)
528 #define HAL_RX_EHT_SIG_NON_OFDMA_INFO0_GI_LTF			GENMASK(5, 4)
529 #define HAL_RX_EHT_SIG_NON_OFDMA_INFO0_NUM_LTF_SYM		GENMASK(8, 6)
530 #define HAL_RX_EHT_SIG_NON_OFDMA_INFO0_LDPC_EXTA_SYM		BIT(9)
531 #define HAL_RX_EHT_SIG_NON_OFDMA_INFO0_PRE_FEC_PAD_FACTOR	GENMASK(11, 10)
532 #define HAL_RX_EHT_SIG_NON_OFDMA_INFO0_DISAMBIGUITY		BIT(12)
533 #define HAL_RX_EHT_SIG_NON_OFDMA_INFO0_DISREGARD		GENMASK(16, 13)
534 #define HAL_RX_EHT_SIG_NON_OFDMA_INFO0_NUM_USERS		GENMASK(19, 17)
535 
536 struct hal_eht_sig_non_ofdma_cmn_eb {
537 	__le32 info0;
538 	union hal_eht_sig_user_field user_field;
539 } __packed;
540 
541 #define HAL_RX_EHT_SIG_OFDMA_EB1_SPATIAL_REUSE		GENMASK_ULL(3, 0)
542 #define HAL_RX_EHT_SIG_OFDMA_EB1_GI_LTF			GENMASK_ULL(5, 4)
543 #define HAL_RX_EHT_SIG_OFDMA_EB1_NUM_LFT_SYM		GENMASK_ULL(8, 6)
544 #define HAL_RX_EHT_SIG_OFDMA_EB1_LDPC_EXTRA_SYM		BIT(9)
545 #define HAL_RX_EHT_SIG_OFDMA_EB1_PRE_FEC_PAD_FACTOR	GENMASK_ULL(11, 10)
546 #define HAL_RX_EHT_SIG_OFDMA_EB1_PRE_DISAMBIGUITY	BIT(12)
547 #define HAL_RX_EHT_SIG_OFDMA_EB1_DISREGARD		GENMASK_ULL(16, 13)
548 #define HAL_RX_EHT_SIG_OFDMA_EB1_RU_ALLOC_1_1		GENMASK_ULL(25, 17)
549 #define HAL_RX_EHT_SIG_OFDMA_EB1_RU_ALLOC_1_2		GENMASK_ULL(34, 26)
550 #define HAL_RX_EHT_SIG_OFDMA_EB1_CRC			GENMASK_ULL(30, 27)
551 
552 struct hal_eht_sig_ofdma_cmn_eb1 {
553 	__le64 info0;
554 } __packed;
555 
556 #define HAL_RX_EHT_SIG_OFDMA_EB2_RU_ALLOC_2_1		GENMASK_ULL(8, 0)
557 #define HAL_RX_EHT_SIG_OFDMA_EB2_RU_ALLOC_2_2		GENMASK_ULL(17, 9)
558 #define HAL_RX_EHT_SIG_OFDMA_EB2_RU_ALLOC_2_3		GENMASK_ULL(26, 18)
559 #define HAL_RX_EHT_SIG_OFDMA_EB2_RU_ALLOC_2_4		GENMASK_ULL(35, 27)
560 #define HAL_RX_EHT_SIG_OFDMA_EB2_RU_ALLOC_2_5		GENMASK_ULL(44, 36)
561 #define HAL_RX_EHT_SIG_OFDMA_EB2_RU_ALLOC_2_6		GENMASK_ULL(53, 45)
562 #define HAL_RX_EHT_SIG_OFDMA_EB2_MCS			GNEMASK_ULL(57, 54)
563 
564 struct hal_eht_sig_ofdma_cmn_eb2 {
565 	__le64 info0;
566 } __packed;
567 
568 struct hal_eht_sig_ofdma_cmn_eb {
569 	struct hal_eht_sig_ofdma_cmn_eb1 eb1;
570 	struct hal_eht_sig_ofdma_cmn_eb2 eb2;
571 	union hal_eht_sig_user_field user_field;
572 } __packed;
573 
574 enum hal_eht_bw {
575 	HAL_EHT_BW_20,
576 	HAL_EHT_BW_40,
577 	HAL_EHT_BW_80,
578 	HAL_EHT_BW_160,
579 	HAL_EHT_BW_320_1,
580 	HAL_EHT_BW_320_2,
581 };
582 
583 #define HAL_RX_USIG_CMN_INFO0_PHY_VERSION	GENMASK(2, 0)
584 #define HAL_RX_USIG_CMN_INFO0_BW		GENMASK(5, 3)
585 #define HAL_RX_USIG_CMN_INFO0_UL_DL		BIT(6)
586 #define HAL_RX_USIG_CMN_INFO0_BSS_COLOR		GENMASK(12, 7)
587 #define HAL_RX_USIG_CMN_INFO0_TXOP		GENMASK(19, 13)
588 #define HAL_RX_USIG_CMN_INFO0_DISREGARD		GENMASK(25, 20)
589 #define HAL_RX_USIG_CMN_INFO0_VALIDATE		BIT(26)
590 
591 struct hal_mon_usig_cmn {
592 	__le32 info0;
593 } __packed;
594 
595 #define HAL_RX_USIG_TB_INFO0_PPDU_TYPE_COMP_MODE	GENMASK(1, 0)
596 #define HAL_RX_USIG_TB_INFO0_VALIDATE			BIT(2)
597 #define HAL_RX_USIG_TB_INFO0_SPATIAL_REUSE_1		GENMASK(6, 3)
598 #define HAL_RX_USIG_TB_INFO0_SPATIAL_REUSE_2		GENMASK(10, 7)
599 #define HAL_RX_USIG_TB_INFO0_DISREGARD_1		GENMASK(15, 11)
600 #define HAL_RX_USIG_TB_INFO0_CRC			GENMASK(19, 16)
601 #define HAL_RX_USIG_TB_INFO0_TAIL			GENMASK(25, 20)
602 #define HAL_RX_USIG_TB_INFO0_RX_INTEG_CHECK_PASS	BIT(31)
603 
604 struct hal_mon_usig_tb {
605 	__le32 info0;
606 } __packed;
607 
608 #define HAL_RX_USIG_MU_INFO0_PPDU_TYPE_COMP_MODE	GENMASK(1, 0)
609 #define HAL_RX_USIG_MU_INFO0_VALIDATE_1			BIT(2)
610 #define HAL_RX_USIG_MU_INFO0_PUNC_CH_INFO		GENMASK(7, 3)
611 #define HAL_RX_USIG_MU_INFO0_VALIDATE_2			BIT(8)
612 #define HAL_RX_USIG_MU_INFO0_EHT_SIG_MCS		GENMASK(10, 9)
613 #define HAL_RX_USIG_MU_INFO0_NUM_EHT_SIG_SYM		GENMASK(15, 11)
614 #define HAL_RX_USIG_MU_INFO0_CRC			GENMASK(20, 16)
615 #define HAL_RX_USIG_MU_INFO0_TAIL			GENMASK(26, 21)
616 #define HAL_RX_USIG_MU_INFO0_RX_INTEG_CHECK_PASS	BIT(31)
617 
618 struct hal_mon_usig_mu {
619 	__le32 info0;
620 } __packed;
621 
622 union hal_mon_usig_non_cmn {
623 	struct hal_mon_usig_tb tb;
624 	struct hal_mon_usig_mu mu;
625 };
626 
627 struct hal_mon_usig_hdr {
628 	struct hal_mon_usig_cmn cmn;
629 	union hal_mon_usig_non_cmn non_cmn;
630 } __packed;
631 
632 #define HAL_RX_USR_INFO0_PHY_PPDU_ID		GENMASK(15, 0)
633 #define HAL_RX_USR_INFO0_USR_RSSI		GENMASK(23, 16)
634 #define HAL_RX_USR_INFO0_PKT_TYPE		GENMASK(27, 24)
635 #define HAL_RX_USR_INFO0_STBC			BIT(28)
636 #define HAL_RX_USR_INFO0_RECEPTION_TYPE		GENMASK(31, 29)
637 
638 #define HAL_RX_USR_INFO1_MCS			GENMASK(3, 0)
639 #define HAL_RX_USR_INFO1_SGI			GENMASK(5, 4)
640 #define HAL_RX_USR_INFO1_HE_RANGING_NDP		BIT(6)
641 #define HAL_RX_USR_INFO1_MIMO_SS_BITMAP		GENMASK(15, 8)
642 #define HAL_RX_USR_INFO1_RX_BW			GENMASK(18, 16)
643 #define HAL_RX_USR_INFO1_DL_OFMDA_USR_IDX	GENMASK(31, 24)
644 
645 #define HAL_RX_USR_INFO2_DL_OFDMA_CONTENT_CHAN	BIT(0)
646 #define HAL_RX_USR_INFO2_NSS			GENMASK(10, 8)
647 #define HAL_RX_USR_INFO2_STREAM_OFFSET		GENMASK(13, 11)
648 #define HAL_RX_USR_INFO2_STA_DCM		BIT(14)
649 #define HAL_RX_USR_INFO2_LDPC			BIT(15)
650 #define HAL_RX_USR_INFO2_RU_TYPE_80_0		GENMASK(19, 16)
651 #define HAL_RX_USR_INFO2_RU_TYPE_80_1		GENMASK(23, 20)
652 #define HAL_RX_USR_INFO2_RU_TYPE_80_2		GENMASK(27, 24)
653 #define HAL_RX_USR_INFO2_RU_TYPE_80_3		GENMASK(31, 28)
654 
655 #define HAL_RX_USR_INFO3_RU_START_IDX_80_0	GENMASK(5, 0)
656 #define HAL_RX_USR_INFO3_RU_START_IDX_80_1	GENMASK(13, 8)
657 #define HAL_RX_USR_INFO3_RU_START_IDX_80_2	GENMASK(21, 16)
658 #define HAL_RX_USR_INFO3_RU_START_IDX_80_3	GENMASK(29, 24)
659 
660 struct hal_receive_user_info {
661 	__le32 info0;
662 	__le32 info1;
663 	__le32 info2;
664 	__le32 info3;
665 	__le32 user_fd_rssi_seg0;
666 	__le32 user_fd_rssi_seg1;
667 	__le32 user_fd_rssi_seg2;
668 	__le32 user_fd_rssi_seg3;
669 } __packed;
670 
671 enum hal_mon_reception_type {
672 	HAL_RECEPTION_TYPE_SU,
673 	HAL_RECEPTION_TYPE_DL_MU_MIMO,
674 	HAL_RECEPTION_TYPE_DL_MU_OFMA,
675 	HAL_RECEPTION_TYPE_DL_MU_OFDMA_MIMO,
676 	HAL_RECEPTION_TYPE_UL_MU_MIMO,
677 	HAL_RECEPTION_TYPE_UL_MU_OFDMA,
678 	HAL_RECEPTION_TYPE_UL_MU_OFDMA_MIMO,
679 };
680 
681 /* Different allowed RU in 11BE */
682 #define HAL_EHT_RU_26		0ULL
683 #define HAL_EHT_RU_52		1ULL
684 #define HAL_EHT_RU_78		2ULL
685 #define HAL_EHT_RU_106		3ULL
686 #define HAL_EHT_RU_132		4ULL
687 #define HAL_EHT_RU_242		5ULL
688 #define HAL_EHT_RU_484		6ULL
689 #define HAL_EHT_RU_726		7ULL
690 #define HAL_EHT_RU_996		8ULL
691 #define HAL_EHT_RU_996x2	9ULL
692 #define HAL_EHT_RU_996x3	10ULL
693 #define HAL_EHT_RU_996x4	11ULL
694 #define HAL_EHT_RU_NONE		15ULL
695 #define HAL_EHT_RU_INVALID	31ULL
696 /* MRUs spanning above 80Mhz
697  * HAL_EHT_RU_996_484 = HAL_EHT_RU_484 + HAL_EHT_RU_996 + 4 (reserved)
698  */
699 #define HAL_EHT_RU_996_484	18ULL
700 #define HAL_EHT_RU_996x2_484	28ULL
701 #define HAL_EHT_RU_996x3_484	40ULL
702 #define HAL_EHT_RU_996_484_242	23ULL
703 
704 #define NUM_RU_BITS_PER80	16
705 #define NUM_RU_BITS_PER20	4
706 
707 /* Different per_80Mhz band in 320Mhz bandwidth */
708 #define HAL_80_0	0
709 #define HAL_80_1	1
710 #define HAL_80_2	2
711 #define HAL_80_3	3
712 
713 #define HAL_RU_80MHZ(num_band)		((num_band) * NUM_RU_BITS_PER80)
714 #define HAL_RU_20MHZ(idx_per_80)	((idx_per_80) * NUM_RU_BITS_PER20)
715 
716 #define HAL_RU_SHIFT(num_band, idx_per_80)	\
717 		(HAL_RU_80MHZ(num_band) + HAL_RU_20MHZ(idx_per_80))
718 
719 #define HAL_RU(ru, num_band, idx_per_80)	\
720 		((u64)(ru) << HAL_RU_SHIFT(num_band, idx_per_80))
721 
722 /* MRU-996+484 */
723 #define HAL_EHT_RU_996_484_0	(HAL_RU(HAL_EHT_RU_484, HAL_80_0, 1) |	\
724 				 HAL_RU(HAL_EHT_RU_996, HAL_80_1, 0))
725 #define HAL_EHT_RU_996_484_1	(HAL_RU(HAL_EHT_RU_484, HAL_80_0, 0) |	\
726 				 HAL_RU(HAL_EHT_RU_996, HAL_80_1, 0))
727 #define HAL_EHT_RU_996_484_2	(HAL_RU(HAL_EHT_RU_996, HAL_80_0, 0) |	\
728 				 HAL_RU(HAL_EHT_RU_484, HAL_80_1, 1))
729 #define HAL_EHT_RU_996_484_3	(HAL_RU(HAL_EHT_RU_996, HAL_80_0, 0) |	\
730 				 HAL_RU(HAL_EHT_RU_484, HAL_80_1, 0))
731 #define HAL_EHT_RU_996_484_4	(HAL_RU(HAL_EHT_RU_484, HAL_80_2, 1) |	\
732 				 HAL_RU(HAL_EHT_RU_996, HAL_80_3, 0))
733 #define HAL_EHT_RU_996_484_5	(HAL_RU(HAL_EHT_RU_484, HAL_80_2, 0) |	\
734 				 HAL_RU(HAL_EHT_RU_996, HAL_80_3, 0))
735 #define HAL_EHT_RU_996_484_6	(HAL_RU(HAL_EHT_RU_996, HAL_80_2, 0) |	\
736 				 HAL_RU(HAL_EHT_RU_484, HAL_80_3, 1))
737 #define HAL_EHT_RU_996_484_7	(HAL_RU(HAL_EHT_RU_996, HAL_80_2, 0) |	\
738 				 HAL_RU(HAL_EHT_RU_484, HAL_80_3, 0))
739 
740 /* MRU-996x2+484 */
741 #define HAL_EHT_RU_996x2_484_0	(HAL_RU(HAL_EHT_RU_484, HAL_80_0, 1) |	\
742 				 HAL_RU(HAL_EHT_RU_996x2, HAL_80_1, 0) |	\
743 				 HAL_RU(HAL_EHT_RU_996x2, HAL_80_2, 0))
744 #define HAL_EHT_RU_996x2_484_1	(HAL_RU(HAL_EHT_RU_484, HAL_80_0, 0) |	\
745 				 HAL_RU(HAL_EHT_RU_996x2, HAL_80_1, 0) |	\
746 				 HAL_RU(HAL_EHT_RU_996x2, HAL_80_2, 0))
747 #define HAL_EHT_RU_996x2_484_2	(HAL_RU(HAL_EHT_RU_996x2, HAL_80_0, 0) |	\
748 				 HAL_RU(HAL_EHT_RU_484, HAL_80_1, 1) |	\
749 				 HAL_RU(HAL_EHT_RU_996x2, HAL_80_2, 0))
750 #define HAL_EHT_RU_996x2_484_3	(HAL_RU(HAL_EHT_RU_996x2, HAL_80_0, 0) |	\
751 				 HAL_RU(HAL_EHT_RU_484, HAL_80_1, 0) |	\
752 				 HAL_RU(HAL_EHT_RU_996x2, HAL_80_2, 0))
753 #define HAL_EHT_RU_996x2_484_4	(HAL_RU(HAL_EHT_RU_996x2, HAL_80_0, 0) |	\
754 				 HAL_RU(HAL_EHT_RU_996x2, HAL_80_1, 0) |	\
755 				 HAL_RU(HAL_EHT_RU_484, HAL_80_2, 1))
756 #define HAL_EHT_RU_996x2_484_5	(HAL_RU(HAL_EHT_RU_996x2, HAL_80_0, 0) |	\
757 				 HAL_RU(HAL_EHT_RU_996x2, HAL_80_1, 0) |	\
758 				 HAL_RU(HAL_EHT_RU_484, HAL_80_2, 0))
759 #define HAL_EHT_RU_996x2_484_6	(HAL_RU(HAL_EHT_RU_484, HAL_80_1, 1) |	\
760 				 HAL_RU(HAL_EHT_RU_996x2, HAL_80_2, 0) |	\
761 				 HAL_RU(HAL_EHT_RU_996x2, HAL_80_3, 0))
762 #define HAL_EHT_RU_996x2_484_7	(HAL_RU(HAL_EHT_RU_484, HAL_80_1, 0) |	\
763 				 HAL_RU(HAL_EHT_RU_996x2, HAL_80_2, 0) |	\
764 				 HAL_RU(HAL_EHT_RU_996x2, HAL_80_3, 0))
765 #define HAL_EHT_RU_996x2_484_8	(HAL_RU(HAL_EHT_RU_996x2, HAL_80_1, 0) |	\
766 				 HAL_RU(HAL_EHT_RU_484, HAL_80_2, 1) |	\
767 				 HAL_RU(HAL_EHT_RU_996x2, HAL_80_3, 0))
768 #define HAL_EHT_RU_996x2_484_9	(HAL_RU(HAL_EHT_RU_996x2, HAL_80_1, 0) |	\
769 				 HAL_RU(HAL_EHT_RU_484, HAL_80_2, 0) |	\
770 				 HAL_RU(HAL_EHT_RU_996x2, HAL_80_3, 0))
771 #define HAL_EHT_RU_996x2_484_10	(HAL_RU(HAL_EHT_RU_996x2, HAL_80_1, 0) |	\
772 				 HAL_RU(HAL_EHT_RU_996x2, HAL_80_2, 0) |	\
773 				 HAL_RU(HAL_EHT_RU_484, HAL_80_3, 1))
774 #define HAL_EHT_RU_996x2_484_11	(HAL_RU(HAL_EHT_RU_996x2, HAL_80_1, 0) |	\
775 				 HAL_RU(HAL_EHT_RU_996x2, HAL_80_2, 0) |	\
776 				 HAL_RU(HAL_EHT_RU_484, HAL_80_3, 0))
777 
778 /* MRU-996x3+484 */
779 #define HAL_EHT_RU_996x3_484_0	(HAL_RU(HAL_EHT_RU_484, HAL_80_0, 1) |	\
780 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_1, 0) |	\
781 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_2, 0) |	\
782 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_3, 0))
783 #define HAL_EHT_RU_996x3_484_1	(HAL_RU(HAL_EHT_RU_484, HAL_80_0, 0) |	\
784 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_1, 0) |	\
785 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_2, 0) |	\
786 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_3, 0))
787 #define HAL_EHT_RU_996x3_484_2	(HAL_RU(HAL_EHT_RU_996x3, HAL_80_0, 0) |	\
788 				 HAL_RU(HAL_EHT_RU_484, HAL_80_1, 1) |	\
789 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_2, 0) |	\
790 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_3, 0))
791 #define HAL_EHT_RU_996x3_484_3	(HAL_RU(HAL_EHT_RU_996x3, HAL_80_0, 0) |	\
792 				 HAL_RU(HAL_EHT_RU_484, HAL_80_1, 0) |	\
793 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_2, 0) |	\
794 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_3, 0))
795 #define HAL_EHT_RU_996x3_484_4	(HAL_RU(HAL_EHT_RU_996x3, HAL_80_0, 0) |	\
796 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_1, 0) |	\
797 				 HAL_RU(HAL_EHT_RU_484, HAL_80_2, 1) |	\
798 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_3, 0))
799 #define HAL_EHT_RU_996x3_484_5	(HAL_RU(HAL_EHT_RU_996x3, HAL_80_0, 0) |	\
800 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_1, 0) |	\
801 				 HAL_RU(HAL_EHT_RU_484, HAL_80_2, 0) |	\
802 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_3, 0))
803 #define HAL_EHT_RU_996x3_484_6	(HAL_RU(HAL_EHT_RU_996x3, HAL_80_0, 0) |	\
804 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_1, 0) |	\
805 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_2, 0) |	\
806 				 HAL_RU(HAL_EHT_RU_484, HAL_80_3, 1))
807 #define HAL_EHT_RU_996x3_484_7	(HAL_RU(HAL_EHT_RU_996x3, HAL_80_0, 0) |	\
808 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_1, 0) |	\
809 				 HAL_RU(HAL_EHT_RU_996x3, HAL_80_2, 0) |	\
810 				 HAL_RU(HAL_EHT_RU_484, HAL_80_3, 0))
811 
812 #define HAL_RU_PER80(ru_per80, num_80mhz, ru_idx_per80mhz) \
813 			(HAL_RU(ru_per80, num_80mhz, ru_idx_per80mhz))
814 
815 void ath12k_wifi7_hal_reo_status_queue_stats(struct ath12k_base *ab,
816 					     struct hal_reo_get_queue_stats_status *desc,
817 					     struct hal_reo_status *status);
818 void ath12k_wifi7_hal_reo_flush_queue_status(struct ath12k_base *ab,
819 					     struct hal_reo_flush_queue_status *desc,
820 					     struct hal_reo_status *status);
821 void ath12k_wifi7_hal_reo_flush_cache_status(struct ath12k_base *ab,
822 					     struct hal_reo_flush_cache_status *desc,
823 					     struct hal_reo_status *status);
824 void ath12k_wifi7_hal_reo_unblk_cache_status(struct ath12k_base *ab,
825 					     struct hal_reo_unblock_cache_status *desc,
826 					     struct hal_reo_status *status);
827 void
828 ath12k_wifi7_hal_reo_flush_timeout_list_status(struct ath12k_base *ab,
829 					       struct hal_reo_flush_timeout_list_status *desc,
830 					       struct hal_reo_status *status);
831 void
832 ath12k_wifi7_hal_reo_desc_thresh_reached_status(struct ath12k_base *ab,
833 						struct hal_reo_desc_thresh_reached_status *desc,
834 						struct hal_reo_status *status);
835 void ath12k_wifi7_hal_reo_update_rx_reo_queue_status(struct ath12k_base *ab,
836 						     struct hal_reo_status_hdr *desc,
837 						     struct hal_reo_status *status);
838 void ath12k_wifi7_hal_rx_msdu_link_info_get(struct hal_rx_msdu_link *link, u32 *num_msdus,
839 					    u32 *msdu_cookies,
840 					    enum hal_rx_buf_return_buf_manager *rbm);
841 void ath12k_wifi7_hal_rx_msdu_link_desc_set(struct ath12k_base *ab,
842 					    struct hal_wbm_release_ring *desc,
843 					    struct ath12k_buffer_addr *buf_addr_info,
844 					    enum hal_wbm_rel_bm_act action);
845 void ath12k_wifi7_hal_rx_buf_addr_info_set(struct ath12k_buffer_addr *binfo,
846 					   dma_addr_t paddr, u32 cookie, u8 manager);
847 void ath12k_wifi7_hal_rx_buf_addr_info_get(struct ath12k_buffer_addr *binfo,
848 					   dma_addr_t *paddr,
849 					   u32 *cookie, u8 *rbm);
850 int ath12k_wifi7_hal_desc_reo_parse_err(struct ath12k_dp *dp,
851 					struct hal_reo_dest_ring *desc,
852 					dma_addr_t *paddr, u32 *desc_bank);
853 int ath12k_wifi7_hal_wbm_desc_parse_err(struct ath12k_dp *dp, void *desc,
854 					struct hal_rx_wbm_rel_info *rel_info);
855 void ath12k_wifi7_hal_rx_reo_ent_paddr_get(struct ath12k_buffer_addr *buff_addr,
856 					   dma_addr_t *paddr, u32 *cookie);
857 void ath12k_wifi7_hal_rx_reo_ent_buf_paddr_get(void *rx_desc, dma_addr_t *paddr,
858 					       u32 *sw_cookie,
859 					       struct ath12k_buffer_addr **pp_buf_addr,
860 					       u8 *rbm, u32 *msdu_cnt);
861 void ath12k_wifi7_hal_rx_msdu_list_get(struct ath12k *ar,
862 				       void *link_desc,
863 				       void *msdu_list_opaque,
864 				       u16 *num_msdus);
865 void ath12k_wifi7_hal_reo_init_cmd_ring_tlv64(struct ath12k_base *ab,
866 					      struct hal_srng *srng);
867 void ath12k_wifi7_hal_reo_init_cmd_ring_tlv32(struct ath12k_base *ab,
868 					      struct hal_srng *srng);
869 void ath12k_wifi7_hal_reo_shared_qaddr_cache_clear(struct ath12k_base *ab);
870 void ath12k_wifi7_hal_reo_hw_setup(struct ath12k_base *ab, u32 ring_hash_map);
871 void ath12k_wifi7_hal_reo_qdesc_setup(struct hal_rx_reo_queue *qdesc,
872 				      int tid, u32 ba_window_size,
873 				      u32 start_seq, enum hal_pn_type type);
874 
875 #endif
876