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