Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/dev/athk/ath12k/hal_rx.h
48375 views
1
/* SPDX-License-Identifier: BSD-3-Clause-Clear */
2
/*
3
* Copyright (c) 2018-2021 The Linux Foundation. All rights reserved.
4
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
5
*/
6
7
#ifndef ATH12K_HAL_RX_H
8
#define ATH12K_HAL_RX_H
9
10
struct hal_rx_wbm_rel_info {
11
u32 cookie;
12
enum hal_wbm_rel_src_module err_rel_src;
13
enum hal_reo_dest_ring_push_reason push_reason;
14
u32 err_code;
15
bool first_msdu;
16
bool last_msdu;
17
bool continuation;
18
void *rx_desc;
19
bool hw_cc_done;
20
};
21
22
#define HAL_INVALID_PEERID 0xffff
23
#define VHT_SIG_SU_NSS_MASK 0x7
24
25
#define HAL_RX_MAX_MCS 12
26
#define HAL_RX_MAX_NSS 8
27
28
#define HAL_RX_MPDU_INFO_PN_GET_BYTE1(__val) \
29
le32_get_bits((__val), GENMASK(7, 0))
30
31
#define HAL_RX_MPDU_INFO_PN_GET_BYTE2(__val) \
32
le32_get_bits((__val), GENMASK(15, 8))
33
34
#define HAL_RX_MPDU_INFO_PN_GET_BYTE3(__val) \
35
le32_get_bits((__val), GENMASK(23, 16))
36
37
#define HAL_RX_MPDU_INFO_PN_GET_BYTE4(__val) \
38
le32_get_bits((__val), GENMASK(31, 24))
39
40
struct hal_rx_mon_status_tlv_hdr {
41
u32 hdr;
42
u8 value[];
43
};
44
45
enum hal_rx_su_mu_coding {
46
HAL_RX_SU_MU_CODING_BCC,
47
HAL_RX_SU_MU_CODING_LDPC,
48
HAL_RX_SU_MU_CODING_MAX,
49
};
50
51
enum hal_rx_gi {
52
HAL_RX_GI_0_8_US,
53
HAL_RX_GI_0_4_US,
54
HAL_RX_GI_1_6_US,
55
HAL_RX_GI_3_2_US,
56
HAL_RX_GI_MAX,
57
};
58
59
enum hal_rx_bw {
60
HAL_RX_BW_20MHZ,
61
HAL_RX_BW_40MHZ,
62
HAL_RX_BW_80MHZ,
63
HAL_RX_BW_160MHZ,
64
HAL_RX_BW_MAX,
65
};
66
67
enum hal_rx_preamble {
68
HAL_RX_PREAMBLE_11A,
69
HAL_RX_PREAMBLE_11B,
70
HAL_RX_PREAMBLE_11N,
71
HAL_RX_PREAMBLE_11AC,
72
HAL_RX_PREAMBLE_11AX,
73
HAL_RX_PREAMBLE_MAX,
74
};
75
76
enum hal_rx_reception_type {
77
HAL_RX_RECEPTION_TYPE_SU,
78
HAL_RX_RECEPTION_TYPE_MU_MIMO,
79
HAL_RX_RECEPTION_TYPE_MU_OFDMA,
80
HAL_RX_RECEPTION_TYPE_MU_OFDMA_MIMO,
81
HAL_RX_RECEPTION_TYPE_MAX,
82
};
83
84
enum hal_rx_legacy_rate {
85
HAL_RX_LEGACY_RATE_1_MBPS,
86
HAL_RX_LEGACY_RATE_2_MBPS,
87
HAL_RX_LEGACY_RATE_5_5_MBPS,
88
HAL_RX_LEGACY_RATE_6_MBPS,
89
HAL_RX_LEGACY_RATE_9_MBPS,
90
HAL_RX_LEGACY_RATE_11_MBPS,
91
HAL_RX_LEGACY_RATE_12_MBPS,
92
HAL_RX_LEGACY_RATE_18_MBPS,
93
HAL_RX_LEGACY_RATE_24_MBPS,
94
HAL_RX_LEGACY_RATE_36_MBPS,
95
HAL_RX_LEGACY_RATE_48_MBPS,
96
HAL_RX_LEGACY_RATE_54_MBPS,
97
HAL_RX_LEGACY_RATE_INVALID,
98
};
99
100
#define HAL_TLV_STATUS_PPDU_NOT_DONE 0
101
#define HAL_TLV_STATUS_PPDU_DONE 1
102
#define HAL_TLV_STATUS_BUF_DONE 2
103
#define HAL_TLV_STATUS_PPDU_NON_STD_DONE 3
104
#define HAL_RX_FCS_LEN 4
105
106
enum hal_rx_mon_status {
107
HAL_RX_MON_STATUS_PPDU_NOT_DONE,
108
HAL_RX_MON_STATUS_PPDU_DONE,
109
HAL_RX_MON_STATUS_BUF_DONE,
110
};
111
112
#define HAL_RX_MAX_MPDU 256
113
#define HAL_RX_NUM_WORDS_PER_PPDU_BITMAP (HAL_RX_MAX_MPDU >> 5)
114
115
struct hal_rx_user_status {
116
u32 mcs:4,
117
nss:3,
118
ofdma_info_valid:1,
119
ul_ofdma_ru_start_index:7,
120
ul_ofdma_ru_width:7,
121
ul_ofdma_ru_size:8;
122
u32 ul_ofdma_user_v0_word0;
123
u32 ul_ofdma_user_v0_word1;
124
u32 ast_index;
125
u32 tid;
126
u16 tcp_msdu_count;
127
u16 tcp_ack_msdu_count;
128
u16 udp_msdu_count;
129
u16 other_msdu_count;
130
u16 frame_control;
131
u8 frame_control_info_valid;
132
u8 data_sequence_control_info_valid;
133
u16 first_data_seq_ctrl;
134
u32 preamble_type;
135
u16 ht_flags;
136
u16 vht_flags;
137
u16 he_flags;
138
u8 rs_flags;
139
u8 ldpc;
140
u32 mpdu_cnt_fcs_ok;
141
u32 mpdu_cnt_fcs_err;
142
u32 mpdu_fcs_ok_bitmap[HAL_RX_NUM_WORDS_PER_PPDU_BITMAP];
143
u32 mpdu_ok_byte_count;
144
u32 mpdu_err_byte_count;
145
};
146
147
#define HAL_MAX_UL_MU_USERS 37
148
149
struct hal_rx_mon_ppdu_info {
150
u32 ppdu_id;
151
u32 last_ppdu_id;
152
u64 ppdu_ts;
153
u32 num_mpdu_fcs_ok;
154
u32 num_mpdu_fcs_err;
155
u32 preamble_type;
156
u32 mpdu_len;
157
u16 chan_num;
158
u16 tcp_msdu_count;
159
u16 tcp_ack_msdu_count;
160
u16 udp_msdu_count;
161
u16 other_msdu_count;
162
u16 peer_id;
163
u8 rate;
164
u8 mcs;
165
u8 nss;
166
u8 bw;
167
u8 vht_flag_values1;
168
u8 vht_flag_values2;
169
u8 vht_flag_values3[4];
170
u8 vht_flag_values4;
171
u8 vht_flag_values5;
172
u16 vht_flag_values6;
173
u8 is_stbc;
174
u8 gi;
175
u8 sgi;
176
u8 ldpc;
177
u8 beamformed;
178
u8 rssi_comb;
179
u16 tid;
180
u8 fc_valid;
181
u16 ht_flags;
182
u16 vht_flags;
183
u16 he_flags;
184
u16 he_mu_flags;
185
u8 dcm;
186
u8 ru_alloc;
187
u8 reception_type;
188
u64 tsft;
189
u64 rx_duration;
190
u16 frame_control;
191
u32 ast_index;
192
u8 rs_fcs_err;
193
u8 rs_flags;
194
u8 cck_flag;
195
u8 ofdm_flag;
196
u8 ulofdma_flag;
197
u8 frame_control_info_valid;
198
u16 he_per_user_1;
199
u16 he_per_user_2;
200
u8 he_per_user_position;
201
u8 he_per_user_known;
202
u16 he_flags1;
203
u16 he_flags2;
204
u8 he_RU[4];
205
u16 he_data1;
206
u16 he_data2;
207
u16 he_data3;
208
u16 he_data4;
209
u16 he_data5;
210
u16 he_data6;
211
u32 ppdu_len;
212
u32 prev_ppdu_id;
213
u32 device_id;
214
u16 first_data_seq_ctrl;
215
u8 monitor_direct_used;
216
u8 data_sequence_control_info_valid;
217
u8 ltf_size;
218
u8 rxpcu_filter_pass;
219
s8 rssi_chain[8][8];
220
u32 num_users;
221
u32 mpdu_fcs_ok_bitmap[HAL_RX_NUM_WORDS_PER_PPDU_BITMAP];
222
u8 addr1[ETH_ALEN];
223
u8 addr2[ETH_ALEN];
224
u8 addr3[ETH_ALEN];
225
u8 addr4[ETH_ALEN];
226
struct hal_rx_user_status userstats[HAL_MAX_UL_MU_USERS];
227
u8 userid;
228
u16 ampdu_id[HAL_MAX_UL_MU_USERS];
229
bool first_msdu_in_mpdu;
230
bool is_ampdu;
231
u8 medium_prot_type;
232
};
233
234
#define HAL_RX_PPDU_START_INFO0_PPDU_ID GENMASK(15, 0)
235
236
struct hal_rx_ppdu_start {
237
__le32 info0;
238
__le32 chan_num;
239
__le32 ppdu_start_ts;
240
} __packed;
241
242
#define HAL_RX_PPDU_END_USER_STATS_INFO0_MPDU_CNT_FCS_ERR GENMASK(25, 16)
243
244
#define HAL_RX_PPDU_END_USER_STATS_INFO1_MPDU_CNT_FCS_OK GENMASK(8, 0)
245
#define HAL_RX_PPDU_END_USER_STATS_INFO1_FC_VALID BIT(9)
246
#define HAL_RX_PPDU_END_USER_STATS_INFO1_QOS_CTRL_VALID BIT(10)
247
#define HAL_RX_PPDU_END_USER_STATS_INFO1_HT_CTRL_VALID BIT(11)
248
#define HAL_RX_PPDU_END_USER_STATS_INFO1_PKT_TYPE GENMASK(23, 20)
249
250
#define HAL_RX_PPDU_END_USER_STATS_INFO2_AST_INDEX GENMASK(15, 0)
251
#define HAL_RX_PPDU_END_USER_STATS_INFO2_FRAME_CTRL GENMASK(31, 16)
252
253
#define HAL_RX_PPDU_END_USER_STATS_INFO3_QOS_CTRL GENMASK(31, 16)
254
255
#define HAL_RX_PPDU_END_USER_STATS_INFO4_UDP_MSDU_CNT GENMASK(15, 0)
256
#define HAL_RX_PPDU_END_USER_STATS_INFO4_TCP_MSDU_CNT GENMASK(31, 16)
257
258
#define HAL_RX_PPDU_END_USER_STATS_INFO5_OTHER_MSDU_CNT GENMASK(15, 0)
259
#define HAL_RX_PPDU_END_USER_STATS_INFO5_TCP_ACK_MSDU_CNT GENMASK(31, 16)
260
261
#define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_BITMAP GENMASK(15, 0)
262
#define HAL_RX_PPDU_END_USER_STATS_INFO6_TID_EOSP_BITMAP GENMASK(31, 16)
263
264
#define HAL_RX_PPDU_END_USER_STATS_MPDU_DELIM_OK_BYTE_COUNT GENMASK(24, 0)
265
#define HAL_RX_PPDU_END_USER_STATS_MPDU_DELIM_ERR_BYTE_COUNT GENMASK(24, 0)
266
267
struct hal_rx_ppdu_end_user_stats {
268
__le32 rsvd0[2];
269
__le32 info0;
270
__le32 info1;
271
__le32 info2;
272
__le32 info3;
273
__le32 ht_ctrl;
274
__le32 rsvd1[2];
275
__le32 info4;
276
__le32 info5;
277
__le32 usr_resp_ref;
278
__le32 info6;
279
__le32 rsvd3[4];
280
__le32 mpdu_ok_cnt;
281
__le32 rsvd4;
282
__le32 mpdu_err_cnt;
283
__le32 rsvd5[2];
284
__le32 usr_resp_ref_ext;
285
__le32 rsvd6;
286
} __packed;
287
288
struct hal_rx_ppdu_end_user_stats_ext {
289
__le32 info0;
290
__le32 info1;
291
__le32 info2;
292
__le32 info3;
293
__le32 info4;
294
__le32 info5;
295
__le32 info6;
296
} __packed;
297
298
#define HAL_RX_HT_SIG_INFO_INFO0_MCS GENMASK(6, 0)
299
#define HAL_RX_HT_SIG_INFO_INFO0_BW BIT(7)
300
301
#define HAL_RX_HT_SIG_INFO_INFO1_STBC GENMASK(5, 4)
302
#define HAL_RX_HT_SIG_INFO_INFO1_FEC_CODING BIT(6)
303
#define HAL_RX_HT_SIG_INFO_INFO1_GI BIT(7)
304
305
struct hal_rx_ht_sig_info {
306
__le32 info0;
307
__le32 info1;
308
} __packed;
309
310
#define HAL_RX_LSIG_B_INFO_INFO0_RATE GENMASK(3, 0)
311
#define HAL_RX_LSIG_B_INFO_INFO0_LEN GENMASK(15, 4)
312
313
struct hal_rx_lsig_b_info {
314
__le32 info0;
315
} __packed;
316
317
#define HAL_RX_LSIG_A_INFO_INFO0_RATE GENMASK(3, 0)
318
#define HAL_RX_LSIG_A_INFO_INFO0_LEN GENMASK(16, 5)
319
#define HAL_RX_LSIG_A_INFO_INFO0_PKT_TYPE GENMASK(27, 24)
320
321
struct hal_rx_lsig_a_info {
322
__le32 info0;
323
} __packed;
324
325
#define HAL_RX_VHT_SIG_A_INFO_INFO0_BW GENMASK(1, 0)
326
#define HAL_RX_VHT_SIG_A_INFO_INFO0_STBC BIT(3)
327
#define HAL_RX_VHT_SIG_A_INFO_INFO0_GROUP_ID GENMASK(9, 4)
328
#define HAL_RX_VHT_SIG_A_INFO_INFO0_NSTS GENMASK(21, 10)
329
330
#define HAL_RX_VHT_SIG_A_INFO_INFO1_GI_SETTING GENMASK(1, 0)
331
#define HAL_RX_VHT_SIG_A_INFO_INFO1_SU_MU_CODING BIT(2)
332
#define HAL_RX_VHT_SIG_A_INFO_INFO1_MCS GENMASK(7, 4)
333
#define HAL_RX_VHT_SIG_A_INFO_INFO1_BEAMFORMED BIT(8)
334
335
struct hal_rx_vht_sig_a_info {
336
__le32 info0;
337
__le32 info1;
338
} __packed;
339
340
enum hal_rx_vht_sig_a_gi_setting {
341
HAL_RX_VHT_SIG_A_NORMAL_GI = 0,
342
HAL_RX_VHT_SIG_A_SHORT_GI = 1,
343
HAL_RX_VHT_SIG_A_SHORT_GI_AMBIGUITY = 3,
344
};
345
346
#define HE_GI_0_8 0
347
#define HE_GI_0_4 1
348
#define HE_GI_1_6 2
349
#define HE_GI_3_2 3
350
351
#define HE_LTF_1_X 0
352
#define HE_LTF_2_X 1
353
#define HE_LTF_4_X 2
354
355
#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_TRANSMIT_MCS GENMASK(6, 3)
356
#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_DCM BIT(7)
357
#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_TRANSMIT_BW GENMASK(20, 19)
358
#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_CP_LTF_SIZE GENMASK(22, 21)
359
#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_NSTS GENMASK(25, 23)
360
#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_BSS_COLOR GENMASK(13, 8)
361
#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_SPATIAL_REUSE GENMASK(18, 15)
362
#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_FORMAT_IND BIT(0)
363
#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_BEAM_CHANGE BIT(1)
364
#define HAL_RX_HE_SIG_A_SU_INFO_INFO0_DL_UL_FLAG BIT(2)
365
366
#define HAL_RX_HE_SIG_A_SU_INFO_INFO1_TXOP_DURATION GENMASK(6, 0)
367
#define HAL_RX_HE_SIG_A_SU_INFO_INFO1_CODING BIT(7)
368
#define HAL_RX_HE_SIG_A_SU_INFO_INFO1_LDPC_EXTRA BIT(8)
369
#define HAL_RX_HE_SIG_A_SU_INFO_INFO1_STBC BIT(9)
370
#define HAL_RX_HE_SIG_A_SU_INFO_INFO1_TXBF BIT(10)
371
#define HAL_RX_HE_SIG_A_SU_INFO_INFO1_PKT_EXT_FACTOR GENMASK(12, 11)
372
#define HAL_RX_HE_SIG_A_SU_INFO_INFO1_PKT_EXT_PE_DISAM BIT(13)
373
#define HAL_RX_HE_SIG_A_SU_INFO_INFO1_DOPPLER_IND BIT(15)
374
375
struct hal_rx_he_sig_a_su_info {
376
__le32 info0;
377
__le32 info1;
378
} __packed;
379
380
#define HAL_RX_HE_SIG_A_MU_DL_INFO0_UL_FLAG BIT(1)
381
#define HAL_RX_HE_SIG_A_MU_DL_INFO0_MCS_OF_SIGB GENMASK(3, 1)
382
#define HAL_RX_HE_SIG_A_MU_DL_INFO0_DCM_OF_SIGB BIT(4)
383
#define HAL_RX_HE_SIG_A_MU_DL_INFO0_BSS_COLOR GENMASK(10, 5)
384
#define HAL_RX_HE_SIG_A_MU_DL_INFO0_SPATIAL_REUSE GENMASK(14, 11)
385
#define HAL_RX_HE_SIG_A_MU_DL_INFO0_TRANSMIT_BW GENMASK(17, 15)
386
#define HAL_RX_HE_SIG_A_MU_DL_INFO0_NUM_SIGB_SYMB GENMASK(21, 18)
387
#define HAL_RX_HE_SIG_A_MU_DL_INFO0_COMP_MODE_SIGB BIT(22)
388
#define HAL_RX_HE_SIG_A_MU_DL_INFO0_CP_LTF_SIZE GENMASK(24, 23)
389
#define HAL_RX_HE_SIG_A_MU_DL_INFO0_DOPPLER_INDICATION BIT(25)
390
391
#define HAL_RX_HE_SIG_A_MU_DL_INFO1_TXOP_DURATION GENMASK(6, 0)
392
#define HAL_RX_HE_SIG_A_MU_DL_INFO1_CODING BIT(7)
393
#define HAL_RX_HE_SIG_A_MU_DL_INFO1_NUM_LTF_SYMB GENMASK(10, 8)
394
#define HAL_RX_HE_SIG_A_MU_DL_INFO1_LDPC_EXTRA BIT(11)
395
#define HAL_RX_HE_SIG_A_MU_DL_INFO1_STBC BIT(12)
396
#define HAL_RX_HE_SIG_A_MU_DL_INFO1_TXBF BIT(10)
397
#define HAL_RX_HE_SIG_A_MU_DL_INFO1_PKT_EXT_FACTOR GENMASK(14, 13)
398
#define HAL_RX_HE_SIG_A_MU_DL_INFO1_PKT_EXT_PE_DISAM BIT(15)
399
400
struct hal_rx_he_sig_a_mu_dl_info {
401
__le32 info0;
402
__le32 info1;
403
} __packed;
404
405
#define HAL_RX_HE_SIG_B1_MU_INFO_INFO0_RU_ALLOCATION GENMASK(7, 0)
406
407
struct hal_rx_he_sig_b1_mu_info {
408
__le32 info0;
409
} __packed;
410
411
#define HAL_RX_HE_SIG_B2_MU_INFO_INFO0_STA_ID GENMASK(10, 0)
412
#define HAL_RX_HE_SIG_B2_MU_INFO_INFO0_STA_MCS GENMASK(18, 15)
413
#define HAL_RX_HE_SIG_B2_MU_INFO_INFO0_STA_CODING BIT(20)
414
#define HAL_RX_HE_SIG_B2_MU_INFO_INFO0_STA_NSTS GENMASK(31, 29)
415
416
struct hal_rx_he_sig_b2_mu_info {
417
__le32 info0;
418
} __packed;
419
420
#define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_ID GENMASK(10, 0)
421
#define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_NSTS GENMASK(13, 11)
422
#define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_TXBF BIT(19)
423
#define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_MCS GENMASK(18, 15)
424
#define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_DCM BIT(19)
425
#define HAL_RX_HE_SIG_B2_OFDMA_INFO_INFO0_STA_CODING BIT(20)
426
427
struct hal_rx_he_sig_b2_ofdma_info {
428
__le32 info0;
429
} __packed;
430
431
enum hal_rx_ul_reception_type {
432
HAL_RECEPTION_TYPE_ULOFMDA,
433
HAL_RECEPTION_TYPE_ULMIMO,
434
HAL_RECEPTION_TYPE_OTHER,
435
HAL_RECEPTION_TYPE_FRAMELESS
436
};
437
438
#define HAL_RX_PHYRX_RSSI_LEGACY_INFO_INFO0_RSSI_COMB GENMASK(15, 8)
439
#define HAL_RX_PHYRX_RSSI_LEGACY_INFO_RSVD1_RECEPTION GENMASK(3, 0)
440
441
struct hal_rx_phyrx_rssi_legacy_info {
442
__le32 rsvd[35];
443
__le32 info0;
444
} __packed;
445
446
#define HAL_RX_MPDU_START_INFO0_PPDU_ID GENMASK(31, 16)
447
#define HAL_RX_MPDU_START_INFO1_PEERID GENMASK(31, 16)
448
#define HAL_RX_MPDU_START_INFO2_MPDU_LEN GENMASK(13, 0)
449
struct hal_rx_mpdu_start {
450
__le32 info0;
451
__le32 info1;
452
__le32 rsvd1[11];
453
__le32 info2;
454
__le32 rsvd2[9];
455
} __packed;
456
457
#define HAL_RX_PPDU_END_DURATION GENMASK(23, 0)
458
struct hal_rx_ppdu_end_duration {
459
__le32 rsvd0[9];
460
__le32 info0;
461
__le32 rsvd1[4];
462
} __packed;
463
464
struct hal_rx_rxpcu_classification_overview {
465
u32 rsvd0;
466
} __packed;
467
468
struct hal_rx_msdu_desc_info {
469
u32 msdu_flags;
470
u16 msdu_len; /* 14 bits for length */
471
};
472
473
#define HAL_RX_NUM_MSDU_DESC 6
474
struct hal_rx_msdu_list {
475
struct hal_rx_msdu_desc_info msdu_info[HAL_RX_NUM_MSDU_DESC];
476
u32 sw_cookie[HAL_RX_NUM_MSDU_DESC];
477
u8 rbm[HAL_RX_NUM_MSDU_DESC];
478
};
479
480
#define HAL_RX_FBM_ACK_INFO0_ADDR1_31_0 GENMASK(31, 0)
481
#define HAL_RX_FBM_ACK_INFO1_ADDR1_47_32 GENMASK(15, 0)
482
#define HAL_RX_FBM_ACK_INFO1_ADDR2_15_0 GENMASK(31, 16)
483
#define HAL_RX_FBM_ACK_INFO2_ADDR2_47_16 GENMASK(31, 0)
484
485
struct hal_rx_frame_bitmap_ack {
486
__le32 reserved;
487
__le32 info0;
488
__le32 info1;
489
__le32 info2;
490
__le32 reserved1[10];
491
} __packed;
492
493
#define HAL_RX_RESP_REQ_INFO0_PPDU_ID GENMASK(15, 0)
494
#define HAL_RX_RESP_REQ_INFO0_RECEPTION_TYPE BIT(16)
495
#define HAL_RX_RESP_REQ_INFO1_DURATION GENMASK(15, 0)
496
#define HAL_RX_RESP_REQ_INFO1_RATE_MCS GENMASK(24, 21)
497
#define HAL_RX_RESP_REQ_INFO1_SGI GENMASK(26, 25)
498
#define HAL_RX_RESP_REQ_INFO1_STBC BIT(27)
499
#define HAL_RX_RESP_REQ_INFO1_LDPC BIT(28)
500
#define HAL_RX_RESP_REQ_INFO1_IS_AMPDU BIT(29)
501
#define HAL_RX_RESP_REQ_INFO2_NUM_USER GENMASK(6, 0)
502
#define HAL_RX_RESP_REQ_INFO3_ADDR1_31_0 GENMASK(31, 0)
503
#define HAL_RX_RESP_REQ_INFO4_ADDR1_47_32 GENMASK(15, 0)
504
#define HAL_RX_RESP_REQ_INFO4_ADDR1_15_0 GENMASK(31, 16)
505
#define HAL_RX_RESP_REQ_INFO5_ADDR1_47_16 GENMASK(31, 0)
506
507
struct hal_rx_resp_req_info {
508
__le32 info0;
509
__le32 reserved[1];
510
__le32 info1;
511
__le32 info2;
512
__le32 reserved1[2];
513
__le32 info3;
514
__le32 info4;
515
__le32 info5;
516
__le32 reserved2[5];
517
} __packed;
518
519
#define REO_QUEUE_DESC_MAGIC_DEBUG_PATTERN_0 0xDDBEEF
520
#define REO_QUEUE_DESC_MAGIC_DEBUG_PATTERN_1 0xADBEEF
521
#define REO_QUEUE_DESC_MAGIC_DEBUG_PATTERN_2 0xBDBEEF
522
#define REO_QUEUE_DESC_MAGIC_DEBUG_PATTERN_3 0xCDBEEF
523
524
#define HAL_RX_UL_OFDMA_USER_INFO_V0_W0_VALID BIT(30)
525
#define HAL_RX_UL_OFDMA_USER_INFO_V0_W0_VER BIT(31)
526
#define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_NSS GENMASK(2, 0)
527
#define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_MCS GENMASK(6, 3)
528
#define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_LDPC BIT(7)
529
#define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_DCM BIT(8)
530
#define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_RU_START GENMASK(15, 9)
531
#define HAL_RX_UL_OFDMA_USER_INFO_V0_W1_RU_SIZE GENMASK(18, 16)
532
533
/* HE Radiotap data1 Mask */
534
#define HE_SU_FORMAT_TYPE 0x0000
535
#define HE_EXT_SU_FORMAT_TYPE 0x0001
536
#define HE_MU_FORMAT_TYPE 0x0002
537
#define HE_TRIG_FORMAT_TYPE 0x0003
538
#define HE_BEAM_CHANGE_KNOWN 0x0008
539
#define HE_DL_UL_KNOWN 0x0010
540
#define HE_MCS_KNOWN 0x0020
541
#define HE_DCM_KNOWN 0x0040
542
#define HE_CODING_KNOWN 0x0080
543
#define HE_LDPC_EXTRA_SYMBOL_KNOWN 0x0100
544
#define HE_STBC_KNOWN 0x0200
545
#define HE_DATA_BW_RU_KNOWN 0x4000
546
#define HE_DOPPLER_KNOWN 0x8000
547
#define HE_BSS_COLOR_KNOWN 0x0004
548
549
/* HE Radiotap data2 Mask */
550
#define HE_GI_KNOWN 0x0002
551
#define HE_TXBF_KNOWN 0x0010
552
#define HE_PE_DISAMBIGUITY_KNOWN 0x0020
553
#define HE_TXOP_KNOWN 0x0040
554
#define HE_LTF_SYMBOLS_KNOWN 0x0004
555
#define HE_PRE_FEC_PADDING_KNOWN 0x0008
556
#define HE_MIDABLE_PERIODICITY_KNOWN 0x0080
557
558
/* HE radiotap data3 shift values */
559
#define HE_BEAM_CHANGE_SHIFT 6
560
#define HE_DL_UL_SHIFT 7
561
#define HE_TRANSMIT_MCS_SHIFT 8
562
#define HE_DCM_SHIFT 12
563
#define HE_CODING_SHIFT 13
564
#define HE_LDPC_EXTRA_SYMBOL_SHIFT 14
565
#define HE_STBC_SHIFT 15
566
567
/* HE radiotap data4 shift values */
568
#define HE_STA_ID_SHIFT 4
569
570
/* HE radiotap data5 */
571
#define HE_GI_SHIFT 4
572
#define HE_LTF_SIZE_SHIFT 6
573
#define HE_LTF_SYM_SHIFT 8
574
#define HE_TXBF_SHIFT 14
575
#define HE_PE_DISAMBIGUITY_SHIFT 15
576
#define HE_PRE_FEC_PAD_SHIFT 12
577
578
/* HE radiotap data6 */
579
#define HE_DOPPLER_SHIFT 4
580
#define HE_TXOP_SHIFT 8
581
582
/* HE radiotap HE-MU flags1 */
583
#define HE_SIG_B_MCS_KNOWN 0x0010
584
#define HE_SIG_B_DCM_KNOWN 0x0040
585
#define HE_SIG_B_SYM_NUM_KNOWN 0x8000
586
#define HE_RU_0_KNOWN 0x0100
587
#define HE_RU_1_KNOWN 0x0200
588
#define HE_RU_2_KNOWN 0x0400
589
#define HE_RU_3_KNOWN 0x0800
590
#define HE_DCM_FLAG_1_SHIFT 5
591
#define HE_SPATIAL_REUSE_MU_KNOWN 0x0100
592
#define HE_SIG_B_COMPRESSION_FLAG_1_KNOWN 0x4000
593
594
/* HE radiotap HE-MU flags2 */
595
#define HE_SIG_B_COMPRESSION_FLAG_2_SHIFT 3
596
#define HE_BW_KNOWN 0x0004
597
#define HE_NUM_SIG_B_SYMBOLS_SHIFT 4
598
#define HE_SIG_B_COMPRESSION_FLAG_2_KNOWN 0x0100
599
#define HE_NUM_SIG_B_FLAG_2_SHIFT 9
600
#define HE_LTF_FLAG_2_SYMBOLS_SHIFT 12
601
#define HE_LTF_KNOWN 0x8000
602
603
/* HE radiotap per_user_1 */
604
#define HE_STA_SPATIAL_SHIFT 11
605
#define HE_TXBF_SHIFT 14
606
#define HE_RESERVED_SET_TO_1_SHIFT 19
607
#define HE_STA_CODING_SHIFT 20
608
609
/* HE radiotap per_user_2 */
610
#define HE_STA_MCS_SHIFT 4
611
#define HE_STA_DCM_SHIFT 5
612
613
/* HE radiotap per user known */
614
#define HE_USER_FIELD_POSITION_KNOWN 0x01
615
#define HE_STA_ID_PER_USER_KNOWN 0x02
616
#define HE_STA_NSTS_KNOWN 0x04
617
#define HE_STA_TX_BF_KNOWN 0x08
618
#define HE_STA_SPATIAL_CONFIG_KNOWN 0x10
619
#define HE_STA_MCS_KNOWN 0x20
620
#define HE_STA_DCM_KNOWN 0x40
621
#define HE_STA_CODING_KNOWN 0x80
622
623
#define HAL_RX_MPDU_ERR_FCS BIT(0)
624
#define HAL_RX_MPDU_ERR_DECRYPT BIT(1)
625
#define HAL_RX_MPDU_ERR_TKIP_MIC BIT(2)
626
#define HAL_RX_MPDU_ERR_AMSDU_ERR BIT(3)
627
#define HAL_RX_MPDU_ERR_OVERFLOW BIT(4)
628
#define HAL_RX_MPDU_ERR_MSDU_LEN BIT(5)
629
#define HAL_RX_MPDU_ERR_MPDU_LEN BIT(6)
630
#define HAL_RX_MPDU_ERR_UNENCRYPTED_FRAME BIT(7)
631
632
static inline
633
enum nl80211_he_ru_alloc ath12k_he_ru_tones_to_nl80211_he_ru_alloc(u16 ru_tones)
634
{
635
enum nl80211_he_ru_alloc ret;
636
637
switch (ru_tones) {
638
case RU_52:
639
ret = NL80211_RATE_INFO_HE_RU_ALLOC_52;
640
break;
641
case RU_106:
642
ret = NL80211_RATE_INFO_HE_RU_ALLOC_106;
643
break;
644
case RU_242:
645
ret = NL80211_RATE_INFO_HE_RU_ALLOC_242;
646
break;
647
case RU_484:
648
ret = NL80211_RATE_INFO_HE_RU_ALLOC_484;
649
break;
650
case RU_996:
651
ret = NL80211_RATE_INFO_HE_RU_ALLOC_996;
652
break;
653
case RU_26:
654
fallthrough;
655
default:
656
ret = NL80211_RATE_INFO_HE_RU_ALLOC_26;
657
break;
658
}
659
return ret;
660
}
661
662
void ath12k_hal_reo_status_queue_stats(struct ath12k_base *ab,
663
struct hal_tlv_64_hdr *tlv,
664
struct hal_reo_status *status);
665
void ath12k_hal_reo_flush_queue_status(struct ath12k_base *ab,
666
struct hal_tlv_64_hdr *tlv,
667
struct hal_reo_status *status);
668
void ath12k_hal_reo_flush_cache_status(struct ath12k_base *ab,
669
struct hal_tlv_64_hdr *tlv,
670
struct hal_reo_status *status);
671
void ath12k_hal_reo_unblk_cache_status(struct ath12k_base *ab,
672
struct hal_tlv_64_hdr *tlv,
673
struct hal_reo_status *status);
674
void ath12k_hal_reo_flush_timeout_list_status(struct ath12k_base *ab,
675
struct hal_tlv_64_hdr *tlv,
676
struct hal_reo_status *status);
677
void ath12k_hal_reo_desc_thresh_reached_status(struct ath12k_base *ab,
678
struct hal_tlv_64_hdr *tlv,
679
struct hal_reo_status *status);
680
void ath12k_hal_reo_update_rx_reo_queue_status(struct ath12k_base *ab,
681
struct hal_tlv_64_hdr *tlv,
682
struct hal_reo_status *status);
683
void ath12k_hal_rx_msdu_link_info_get(struct hal_rx_msdu_link *link, u32 *num_msdus,
684
u32 *msdu_cookies,
685
enum hal_rx_buf_return_buf_manager *rbm);
686
void ath12k_hal_rx_msdu_link_desc_set(struct ath12k_base *ab,
687
struct hal_wbm_release_ring *dst_desc,
688
struct hal_wbm_release_ring *src_desc,
689
enum hal_wbm_rel_bm_act action);
690
void ath12k_hal_rx_buf_addr_info_set(struct ath12k_buffer_addr *binfo,
691
dma_addr_t paddr, u32 cookie, u8 manager);
692
void ath12k_hal_rx_buf_addr_info_get(struct ath12k_buffer_addr *binfo,
693
dma_addr_t *paddr,
694
u32 *cookie, u8 *rbm);
695
int ath12k_hal_desc_reo_parse_err(struct ath12k_base *ab,
696
struct hal_reo_dest_ring *desc,
697
dma_addr_t *paddr, u32 *desc_bank);
698
int ath12k_hal_wbm_desc_parse_err(struct ath12k_base *ab, void *desc,
699
struct hal_rx_wbm_rel_info *rel_info);
700
void ath12k_hal_rx_reo_ent_paddr_get(struct ath12k_base *ab,
701
struct ath12k_buffer_addr *buff_addr,
702
dma_addr_t *paddr, u32 *cookie);
703
704
#endif
705
706