1 /* 2 * Copyright (c) 2019-2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for 6 * any purpose with or without fee is hereby granted, provided that the 7 * above copyright notice and this permission notice appear in all 8 * copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20 #ifndef _TARGET_IF_CFR_ENH_H_ 21 #define _TARGET_IF_CFR_ENH_H_ 22 23 #ifdef WLAN_ENH_CFR_ENABLE 24 /* 25 * Memory requirements : 26 * 27 * 1. DMA header : 28 * 29 * Legacy DMA header(QCA8074V2) : 2 words (length = 8 bytes) 30 * Enhanced DMA header(QCA6018) : Upto 16 words depending on no. of MU users 31 * in UL-MU-PPDU (Max length = 64 bytes) 32 * 33 * Fixed 4 words for whal_cfir_enhanced_hdr + freeze TLV 34 * + uplink_user_info TLV (MAX 4) 35 * 36 * mu_rx_num_users -> No. of words in CFR DMA header 37 * 0 -> 12 = 4 + 7(freeze TLV) + 1(for 64-bit alignment) 38 * 1 -> 12 = 4 + 7(freeze TLV) + 1(user1) 39 * 2 -> 14 = 4 + 7(freeze TLV) + 2(users 1,2) + 1(for 64-bit alignment) 40 * 3 -> 14 = 4 + 7(freeze TLV) + 3(users 1,2,3) 41 * 4 -> 16 = 4 + 7(freeze TLV) + 4(users 1,2,3,4) + 1(for 64-bit alignment) 42 * 43 * 44 * 2. CFR data size for max BW/Nss/Nrx 45 * 46 * Cypress : Max BW = 80 MHz 47 * NSS = 2 48 * Nrx = 2 49 * Size of one tone = 4 bytes 50 * 51 * a. RTT-H - 2048 bytes 52 * 53 * b. Debug-H (MIMO CFR) - 16016 bytes 54 * 55 * c. RTT-H + CIR - 10240 bytes = 2048(RTT-H) + 8192(CIR) 56 */ 57 58 /* Max 4 users in MU case */ 59 #define CYP_CFR_MU_USERS 4 60 61 #define CYP_MAX_HEADER_LENGTH_WORDS 16 62 63 /* payload_len = Max(2048, 16016, 10240) = 16064 (64-bit alignment) */ 64 #define CYP_MAX_DATA_LENGTH_BYTES 16064 65 66 /* in ms */ 67 #define LUT_AGE_TIMER 3000 68 #define LUT_AGE_THRESHOLD 3000 69 70 /* Max size : 71 * sizeof(csi_cfr_header) + 64 bytes(cfr header) + 16064 bytes(cfr payload) 72 */ 73 #define STREAMFS_MAX_SUBBUF_CYP \ 74 (sizeof(struct csi_cfr_header) + \ 75 (CYP_MAX_HEADER_LENGTH_WORDS * 4) + \ 76 CYP_MAX_DATA_LENGTH_BYTES) 77 78 #define STREAMFS_NUM_SUBBUF_CYP 255 79 80 /* Max 37 users in MU case for Pine */ 81 #define PINE_CFR_MU_USERS 37 82 83 #define PINE_MAX_HEADER_LENGTH_WORDS 50 84 85 #define PINE_MAX_DATA_LENGTH_BYTES 16384 86 87 /* Max size : 88 * sizeof(csi_cfr_header) + 200 bytes(cfr header) + 16384 bytes(cfr payload) 89 */ 90 #define STREAMFS_MAX_SUBBUF_PINE \ 91 (sizeof(struct csi_cfr_header) + \ 92 (PINE_MAX_HEADER_LENGTH_WORDS * 4) + \ 93 PINE_MAX_DATA_LENGTH_BYTES) 94 95 #define STREAMFS_NUM_SUBBUF_PINE 255 96 97 /* Max 37 users in MU case for Waikiki */ 98 #define WAIKIKI_CFR_MU_USERS 37 99 100 #define WAIKIKI_MAX_HEADER_LENGTH_WORDS 88 101 102 #define WAIKIKI_MAX_DATA_LENGTH_BYTES 64512 103 104 /* Max size : 105 * sizeof(csi_cfr_header) + 352 bytes(cfr header) + 64512 bytes(cfr payload) 106 * where cfr_header size = rtt upload header len + freeze_tlv len + 107 * uplink user setup info + alignment/reserved bytes 108 * = 16bytes + 32bytes + (8bytes * 37users) + 8bytes 109 */ 110 #define STREAMFS_MAX_SUBBUF_WAIKIKI \ 111 (sizeof(struct csi_cfr_header) + \ 112 (WAIKIKI_MAX_HEADER_LENGTH_WORDS * 4) + \ 113 WAIKIKI_MAX_DATA_LENGTH_BYTES) 114 115 #define STREAMFS_NUM_SUBBUF_WAIKIKI 127 116 117 /* Max 4 users in MU case for Spruce */ 118 #define SPRUCE_CFR_MU_USERS 4 119 120 #define SPRUCE_MAX_HEADER_LENGTH_WORDS 16 121 122 #define SPRUCE_MAX_DATA_LENGTH_BYTES 16384 123 124 /* Max size : 125 * sizeof(csi_cfr_header) + 200 bytes(cfr header) + 16384 bytes(cfr payload) 126 */ 127 #define STREAMFS_MAX_SUBBUF_SPRUCE \ 128 (sizeof(struct csi_cfr_header) + \ 129 (SPRUCE_MAX_HEADER_LENGTH_WORDS * 4) + \ 130 SPRUCE_MAX_DATA_LENGTH_BYTES) 131 132 #define STREAMFS_NUM_SUBBUF_SPRUCE 255 133 134 /* Max 8 users in MU case for QCN6432 */ 135 #define QCN6432_CFR_MU_USERS 8 136 137 /* uCode header = (14 + (max number of MU users supported *2))*4 Bytes */ 138 #define QCN6432_MAX_HEADER_LENGTH_WORDS 30 139 140 /* Maximum number of tones that can be uploaded is 1001 141 * Max data len = Num tones per stream per chain * max chains 142 * max nss * size of tone 143 * = 1001 * 2 * 4 * 4 = 32032 Bytes 144 * Total length = Max data len + ucode header 145 * = 32032 + 120 = 32152 Bytes 146 */ 147 #define QCN6432_MAX_DATA_LENGTH_BYTES 32152 148 149 /* Max size : 150 * sizeof(csi_cfr_header) + 120 bytes(ucode header) + 32152 bytes(cfr payload) 151 */ 152 #define STREAMFS_MAX_SUBBUF_QCN6432 \ 153 (sizeof(struct csi_cfr_header) + \ 154 (QCN6432_MAX_HEADER_LENGTH_WORDS * 4) + \ 155 QCN6432_MAX_DATA_LENGTH_BYTES) 156 157 /* The number of buffers allotted by two IPC rings is 103. 158 * Hence, the relayFS should be have more than 103 buffers. 159 * Considering the maximum size of CFR log size to be 8MB 160 * and which should be multiple of relayFS buffer pool memory. 161 * 162 * Size of a relayFS buffer = csi metadata + QCN6432_MAX_DATA_LENGTH_BYTES 163 * = 310 + 32152 164 * = 32462 Bytes 165 * 166 * Num of streamfs sub buffers = 4MB / 32462B 167 * = 128 (approax) 168 */ 169 #define STREAMFS_NUM_SUBBUF_QCN6432 128 170 171 /* Max 4 users in MU case for QCA5332 */ 172 #define QCA5332_CFR_MU_USERS 4 173 174 #define QCA5332_MAX_HEADER_LENGTH_WORDS 22 175 176 #define QCA5332_MAX_DATA_LENGTH_BYTES 8192 177 178 /* Max size : 179 * sizeof(csi_cfr_header) + 88 bytes(cfr header) + 8192 bytes(cfr payload) 180 * where cfr_header size = rtt upload header len + freeze_tlv len + 181 * uplink user setup info + alignment/reserved bytes 182 * = 16bytes + 32bytes + (8bytes * 4users) + 8bytes 183 */ 184 #define STREAMFS_MAX_SUBBUF_QCA5332 \ 185 (sizeof(struct csi_cfr_header) + \ 186 (QCA5332_MAX_HEADER_LENGTH_WORDS * 4) + \ 187 QCA5332_MAX_DATA_LENGTH_BYTES) 188 189 #define STREAMFS_NUM_SUBBUF_QCA5332 255 190 191 /* enum macrx_freeze_tlv_version: Reported by uCode in enh_dma_header 192 * MACRX_FREEZE_TLV_VERSION_1: Single MU UL user info reported by MAC. 193 * This is used in Cypress/HastingsPrime chips. Corresponding structures are 194 * macrx_freeze_capture_channel and 1 uplink_user_setup_info. 195 * 196 * MACRX_FREEZE_TLV_VERSION_2: Upto 4 MU UL user info reported by MAC. 197 * This is used in Maple/Spruce/Moselle chips. Corresponding structures are 198 * macrx_freeze_capture_channel and 2 uplink_user_setup_info. 199 * 200 * MACRX_FREEZE_TLV_VERSION_3: Upto 37 MU UL user info reported by MAC. 201 * This is used in Pine chip. The corresponding structures are 202 * macrx_freeze_capture_channel_v3 and 37 uplink_user_setup_info. 203 * 204 * MACRX_FREEZE_TLV_VERSION_4: Upto 37 MU UL user info reported by MAC. 205 * This is used in Hamilton 1/2. 206 * 207 * MACRX_FREEZE_TLV_VERSION_5: Upto 37 MU UL user info reported by MAC. 208 * This is used in Waikiki chipsets. 209 */ 210 enum macrx_freeze_tlv_version { 211 MACRX_FREEZE_TLV_VERSION_1 = 1, 212 MACRX_FREEZE_TLV_VERSION_2 = 2, 213 MACRX_FREEZE_TLV_VERSION_3 = 3, 214 MACRX_FREEZE_TLV_VERSION_4 = 4, 215 MACRX_FREEZE_TLV_VERSION_5 = 5, 216 MACRX_FREEZE_TLV_VERSION_MAX 217 }; 218 219 /* Max 4 users in MU case for Maple */ 220 #define MAPLE_CFR_MU_USERS 4 221 222 #define MAPLE_MAX_HEADER_LENGTH_WORDS 16 223 224 #define MAPLE_MAX_DATA_LENGTH_BYTES 4096 225 226 /* Max size : 227 * sizeof(csi_cfr_header) + 64 bytes(cfr uCode header) + 228 * 4096 bytes(cfr payload) 229 */ 230 #define STREAMFS_MAX_SUBBUF_MAPLE \ 231 (sizeof(struct csi_cfr_header) + \ 232 (MAPLE_MAX_HEADER_LENGTH_WORDS * 4) + \ 233 MAPLE_MAX_DATA_LENGTH_BYTES) 234 235 /* 236 * RelayFS memory required: 237 * Max sub buffer size * Number of sub buffers 238 * 239 * Cascade: (2200B * 1100) ~= 2MB 240 * Dakota: (1100B * 2200) ~= 2MB 241 * Hawkeye: (8200B * 255 ) ~= 2MB 242 * Cypress: (16438B * 255 ) ~= 4MB 243 * Pine : (16894B * 255 ) ~= 4MB 244 * Maple : (4470B * 255 ) ~= 1MB 245 * 246 */ 247 #define STREAMFS_NUM_SUBBUF_MAPLE 255 248 249 enum UCODE_UPLOAD_HEADER_VERSION { 250 UPLOAD_HEADER_VERSION_1 = 1, 251 UPLOAD_HEADER_VERSION_2 = 2, 252 UPLOAD_HEADER_VERSION_3 = 3, 253 UPLOAD_HEADER_VERSION_4 = 4, 254 UPLOAD_HEADER_VERSION_8 = 8, 255 UPLOAD_HEADER_VERSION_9 = 9, 256 UPLOAD_HEADER_VERSION_MAX 257 }; 258 259 /* 260 * @tag: ucode fills this with 0xBA 261 * 262 * @length: length of CFR header in words (32-bit) 263 * 264 * @upload_done: ucode sets this to 1 to indicate DMA completion 265 * 266 * @capture_type: 267 * 268 * 0 - None 269 * 1 - RTT-H (Nss = 1, Nrx) 270 * 2 - Debug-H (Nss, Nrx) 271 * 3 - Reserved 272 * 5 - RTT-H + CIR(Nss, Nrx) 273 * 274 * @preamble_type: 275 * 276 * 0 - Legacy 277 * 1 - HT 278 * 2 - VHT 279 * 3 - HE 280 * 281 * @nss: 282 * 283 * 0 - 1-stream 284 * 1 - 2-stream 285 * .. .. 286 * 7 - 8-stream 287 * 288 *@num_chains: 289 * 290 * 0 - 1-chain 291 * 1 - 2-chain 292 * .. .. 293 * 7 - 8-chain 294 * 295 *@upload_bw_pkt: 296 * 297 * 0 - 20 MHz 298 * 1 - 40 MHz 299 * 2 - 80 MHz 300 * 3 - 160 MHz 301 * 302 * @sw_peer_id_valid: Indicates whether sw_peer_id field is valid or not, 303 * sent from MAC to PHY via the MACRX_FREEZE_CAPTURE_CHANNEL TLV 304 * 305 * @sw_peer_id: Indicates peer id based on AST search, sent from MAC to PHY 306 * via the MACRX_FREEZE_CAPTURE_CHANNEL TLV 307 * 308 * @phy_ppdu_id: sent from PHY to MAC, copied to MACRX_FREEZE_CAPTURE_CHANNEL 309 * TLV 310 * 311 * @total_bytes: Total size of CFR payload (FFT bins) 312 * 313 * @header_version: 314 * 315 * 1 - HKV2/Hastings 316 * 2 - Cypress 317 * 3 - Hasting Prime 318 * 4 - Pine 319 * 8 - Hamilton 320 * 9 - Waikiki 321 * 322 * @target_id: 323 * 324 * 1 - Hastings 325 * 2 - Cypress 326 * 3 - Hastings Prime 327 * 4 - Pine 328 * 329 * @cfr_fmt: 330 * 331 * 0 - raw (32-bit format) 332 * 1 - compressed (24-bit format) 333 * 334 * @mu_rx_data_incl: Indicates whether CFR header contains UL-MU-MIMO info 335 * 336 * @freeze_data_incl: Indicates whether CFR header contains 337 * MACRX_FREEZE_CAPTURE_CHANNEL TLV 338 * 339 * @freeze_tlv_version: Indicates the version of freeze_tlv 340 * 1 - HSP, Cypress 341 * 2 - Maple/Spruce/Moselle 342 * 3 - Pine 343 * 344 * @decimation_factor: FFT bins decimation 345 * @mu_rx_num_users: Number of users in UL-MU-PPDU 346 */ 347 struct whal_cfir_enhanced_hdr { 348 uint16_t tag : 8, 349 length : 6, 350 rsvd1 : 2; 351 352 uint16_t upload_done : 1, 353 capture_type : 3, 354 preamble_type : 2, 355 nss : 3, 356 num_chains : 3, 357 upload_pkt_bw : 3, 358 sw_peer_id_valid : 1; 359 360 uint16_t sw_peer_id : 16; 361 362 uint16_t phy_ppdu_id : 16; 363 364 uint16_t total_bytes; 365 366 uint16_t header_version :4, 367 target_id :4, 368 cfr_fmt :1, 369 rsvd2 :1, 370 mu_rx_data_incl :1, 371 freeze_data_incl :1, 372 freeze_tlv_version :4; 373 374 uint16_t mu_rx_num_users :8, 375 decimation_factor :4, 376 rsvd3 :4; 377 378 uint16_t rsvd4; 379 }; 380 381 /* 382 * freeze_tlv v1/v2 used by Hastings/Cypress/Maple/Spruce/Moselle supports upto 383 * 4 UL MU users 384 * 385 * @freeze: 386 * 0: Allow channel capture 387 * 1: Freeze channel capture 388 * 389 * @capture_reason: Field only valid when the freeze field is 1. Indicates why 390 * the MAC asked to capture the channel 391 * 0: freeze_reason_TM 392 * 1: freeze_reason_FTM 393 * 2: freeze_reason_ACK_resp_to_TM_FTM 394 * 3: freeze_reason_TA_RA_TYPE_FILTER 395 * 4: freeze readon NDP_NDP 396 * 5: freeze_reason_ALL_PACKET 397 * 398 * @packet_type: Packet type of captured packets. 399 * 0: Management 400 * 1: Control 401 * 2: Data 402 * 3: Extension 403 * 404 * @packet_sub_type: packet subtype of the captured packets. 405 * @sw_peer_id_valid: It is valid only when the freeze field is set to 1. 406 * 0: no TA address search on the received frame has been 407 * performed. This is due to the frame not having a TA address 408 * (like ACK frame), or the received frame being from an other 409 * AP to which this device is not associated. 410 * 1: field sw_peer_id will contain valid information. 411 * This implies that a (successful) address search has been 412 * performed on the TA address of the received frame. 413 * 414 * @sw_peer_id: Valid only when sw_peer_id_valid field is set. It is an 415 * identifier that allows SW to double check that the CSI info stored belongs 416 * to the device with this SW identifier. 417 * 418 * @phy_ppdu_id: ppdu_id of ppdu which has channel capture performed. Field 419 * only valid when the freeze field is set to 1. 420 * 421 * @packet_ta_lower_16: Packet’s lower 16bits transmit address in MAC header. 422 * 423 * @packet_ta_mid_16: Packet’s middle 16bits transmit address in MAC header. 424 * 425 * @packet_ta_upper_16: Packet’s upper 16bits transmit address in MAC header. 426 * 427 * @packet_ra_lower_16: Packet’s lower 16bits receive address in MAC header. 428 * 429 * @packet_ra_mid_16: Packet’s middle 16bits receive address in MAC header. 430 * 431 * @packet_ra_upper_16: Packet’s upper 16bits receive address in MAC header. 432 * 433 * @tsf_timestamp_15_0: MAC side 64bit TSF timestamp when this TLV is sent to 434 * PHY. Bits [15:0]. 435 * 436 * @tsf_timestamp_31_16: MAC side 64bit TSF timestamp when this TLV is sent to 437 * PHY. Bits [31:16]. 438 * 439 * @tsf_timestamp_47_32: MAC side 64bit TSF timestamp when this TLV is sent to 440 * PHY. Bits [47:32]. 441 * 442 * @tsf_timestamp_63_48: MAC side 64bit TSF timestamp when this TLV is sent to 443 * PHY. Bits [63:48]. 444 * 445 * @user_index_or_user_mask_5_0: When freeze_tlv_version is 1, this field from 446 * MAC, indicate to PHY which user's channel information need to be uploaded. 447 * When freeze_tlv_version is 2 & MU_SUPPORT_IN_TLV is 1, this field indicates 448 * bitmap of users upto 4 to which channel capture need to be uploaded. And if 449 * freeze_tlv_version is 2 & MU_SUPPORT_IN_TLV is 0, this field indicate to PHY 450 * which user's channel information need to be uploaded 451 * 452 * @directed: Indicate the frame is directed to us or not when NDPA/NDP capture 453 * or FTM/TM/ACK capture. 1=directed. For other modes, it is 0. 454 */ 455 struct macrx_freeze_capture_channel { 456 uint16_t freeze : 1, //[0] 457 capture_reason : 3, //[3:1] 458 packet_type : 2, //[5:4] 459 packet_sub_type : 4, //[9:6] 460 reserved : 5, //[14:10] 461 sw_peer_id_valid : 1; //[15] 462 uint16_t sw_peer_id : 16; //[15:0] 463 uint16_t phy_ppdu_id : 16; //[15:0] 464 uint16_t packet_ta_lower_16 : 16; //[15:0] 465 uint16_t packet_ta_mid_16 : 16; //[15:0] 466 uint16_t packet_ta_upper_16 : 16; //[15:0] 467 uint16_t packet_ra_lower_16 : 16; //[15:0] 468 uint16_t packet_ra_mid_16 : 16; //[15:0] 469 uint16_t packet_ra_upper_16 : 16; //[15:0] 470 uint16_t tsf_timestamp_15_0 : 16; //[15:0] 471 uint16_t tsf_timestamp_31_16 : 16; //[15:0] 472 uint16_t tsf_timestamp_47_32 : 16; //[15:0] 473 uint16_t tsf_timestamp_63_48 : 16; //[15:0] 474 uint16_t user_index_or_user_mask_5_0 : 6, //[5:0] 475 directed : 1, //[6] 476 reserved_13 : 9; //[15:7] 477 }; 478 479 /* 480 * freeze_tlv v3 used by Pine 481 * 482 * @freeze: 483 * 0: Allow channel capture 484 * 1: Freeze channel capture 485 * 486 * @capture_reason: Field only valid when the freeze field is 1. Indicates why 487 * the MAC asked to capture the channel 488 * 0: freeze_reason_TM 489 * 1: freeze_reason_FTM 490 * 2: freeze_reason_ACK_resp_to_TM_FTM 491 * 3: freeze_reason_TA_RA_TYPE_FILTER 492 * 4: freeze readon NDP_NDP 493 * 5: freeze_reason_ALL_PACKET 494 * 495 * @packet_type: Packet type of captured packets. 496 * 0: Management 497 * 1: Control 498 * 2: Data 499 * 3: Extension 500 * 501 * @packet_sub_type: packet subtype of the captured packets. 502 * 503 * @directed: Indicate the frame is directed to us or not when NDPA/NDP capture 504 * or FTM/TM/ACK capture. 1=directed. For other modes, it is 0. 505 * 506 * @sw_peer_id_valid: It is valid only when the freeze field is set to 1. 507 * 0: no TA address search on the received frame has been 508 * performed. This is due to the frame not having a TA address 509 * (like ACK frame), or the received frame being from an other 510 * AP to which this device is not associated. 511 * 1: field sw_peer_id will contain valid information. 512 * This implies that a (successful) address search has been 513 * performed on the TA address of the received frame. 514 * 515 * @sw_peer_id: Valid only when sw_peer_id_valid field is set. It is an 516 * identifier that allows SW to double check that the CSI info stored belongs 517 * to the device with this SW identifier. 518 * 519 * @phy_ppdu_id: ppdu_id of ppdu which has channel capture performed. Field 520 * only valid when the freeze field is set to 1. 521 * 522 * @packet_ta_lower_16: Packet’s lower 16bits transmit address in MAC header. 523 * 524 * @packet_ta_mid_16: Packet’s middle 16bits transmit address in MAC header. 525 * 526 * @packet_ta_upper_16: Packet’s upper 16bits transmit address in MAC header. 527 * 528 * @packet_ra_lower_16: Packet’s lower 16bits receive address in MAC header. 529 * 530 * @packet_ra_mid_16: Packet’s middle 16bits receive address in MAC header. 531 * 532 * @packet_ra_upper_16: Packet’s upper 16bits receive address in MAC header. 533 * 534 * @tsf_timestamp_15_0: MAC side 64bit TSF timestamp when this TLV is sent to 535 * PHY. Bits [15:0]. 536 * 537 * @tsf_timestamp_31_16: MAC side 64bit TSF timestamp when this TLV is sent to 538 * PHY. Bits [31:16]. 539 * 540 * @tsf_timestamp_47_32: MAC side 64bit TSF timestamp when this TLV is sent to 541 * PHY. Bits [47:32]. 542 * 543 * @tsf_63_48_or_user_mask_36_32: Indicates to PHY which user's channel info 544 * need to be uploaded. Only valid in UL MU case with MU_SUPPORT_IN_TLV = 1. 545 * Otherwise this indicates to PHY MSBs 63:48 of the MAC side 64bit TSF 546 * timestamp when this TLV is sent to PHY. 547 * 548 * @user_index_or_user_mask_15_0: Indicate to PHY which user's channel info 549 * need to be uploaded in UL MU case with MU_SUPPORT_IN_TLV = 1. Otherwise it 550 * indicate PHY which user’s channel information need to be uploaded. 551 * 552 * @user_mask_31_16: Indicate to PHY which user’s channel information need to 553 * be uploaded. Only valid in UL MU case with MU_SUPPORT_IN_TLV = 1. 554 */ 555 struct macrx_freeze_capture_channel_v3 { 556 uint16_t freeze : 1, //[0] 557 capture_reason : 3, //[3:1] 558 packet_type : 2, //[5:4] 559 packet_sub_type : 4, //[9:6] 560 directed : 1, //[10] 561 reserved : 4, //[14:11] 562 sw_peer_id_valid : 1; //[15] 563 uint16_t sw_peer_id : 16; //[15:0] 564 uint16_t phy_ppdu_id : 16; //[15:0] 565 uint16_t packet_ta_lower_16 : 16; //[15:0] 566 uint16_t packet_ta_mid_16 : 16; //[15:0] 567 uint16_t packet_ta_upper_16 : 16; //[15:0] 568 uint16_t packet_ra_lower_16 : 16; //[15:0] 569 uint16_t packet_ra_mid_16 : 16; //[15:0] 570 uint16_t packet_ra_upper_16 : 16; //[15:0] 571 uint16_t tsf_timestamp_15_0 : 16; //[15:0] 572 uint16_t tsf_timestamp_31_16 : 16; //[15:0] 573 uint16_t tsf_timestamp_47_32 : 16; //[15:0] 574 uint16_t tsf_63_48_or_user_mask_36_32 : 16; //[15:0] 575 uint16_t user_index_or_user_mask_15_0 : 16; //[15:0] 576 uint16_t user_mask_31_16 : 16; //[15:0] 577 }; 578 579 struct uplink_user_setup_info { 580 uint32_t bw_info_valid : 1, //[0] 581 uplink_receive_type : 2, //[2:1] 582 reserved_0a : 1, //[3] 583 uplink_11ax_mcs : 4, //[7:4] 584 ru_width : 7, //[14:8] 585 reserved_0b : 1, //[15] 586 nss : 3, //[18:16] 587 stream_offset : 3, //[21:19] 588 sta_dcm : 1, //[22] 589 sta_coding : 1, //[23] 590 ru_start_index : 7, //[30:24] 591 reserved_0c : 1; //[31] 592 }; 593 594 struct macrx_freeze_capture_channel_v5 { 595 uint16_t freeze : 1, //[0] 596 capture_reason : 3, //[3:1] 597 packet_type : 2, //[5:4] 598 packet_sub_type : 4, //[9:6] 599 reserved : 5, //[14:10] 600 sw_peer_id_valid : 1; //[15] 601 uint16_t sw_peer_id : 16; //[15:0] 602 uint16_t phy_ppdu_id : 16; //[15:0] 603 uint16_t packet_ta_lower_16 : 16; //[15:0] 604 uint16_t packet_ta_mid_16 : 16; //[15:0] 605 uint16_t packet_ta_upper_16 : 16; //[15:0] 606 uint16_t packet_ra_lower_16 : 16; //[15:0] 607 uint16_t packet_ra_mid_16 : 16; //[15:0] 608 uint16_t packet_ra_upper_16 : 16; //[15:0] 609 uint16_t tsf_timestamp_15_0 : 16; //[15:0] 610 uint16_t tsf_timestamp_31_16 : 16; //[15:0] 611 uint16_t tsf_timestamp_47_32 : 16; //[15:0] 612 uint16_t tsf_timestamp_63_48 : 16; //[15:0] 613 uint16_t user_index_or_user_mask_5_0 : 6, //[5:0] 614 directed : 1, //[6] 615 reserved_13 : 9; //[15:7] 616 uint16_t user_mask_21_6 : 16; //[15:0] 617 uint16_t user_mask_36_22 : 15, //[14:0] 618 reserved_15a : 1; //[15] 619 }; 620 621 struct uplink_user_setup_info_v2 { 622 uint32_t bw_info_valid : 1, //[0] 623 uplink_receive_type : 2, //[2:1] 624 reserved_0a : 1, //[3] 625 uplink_11ax_mcs : 4, //[7:4] 626 nss : 3, //[10:8] 627 stream_offset : 3, //[13:11] 628 sta_dcm : 1, //[14] 629 sta_coding : 1, //[15] 630 ru_type_80_0 : 4, //[19:16] 631 ru_type_80_1 : 4, //[23:20] 632 ru_type_80_2 : 4, //[27:24] 633 ru_type_80_3 : 4; //[31:28] 634 uint32_t ru_start_index_80_0 : 6, //[5:0] 635 reserved_1a : 2, //[7:6] 636 ru_start_index_80_1 : 6, //[13:8] 637 reserved_1b : 2, //[15:14] 638 ru_start_index_80_2 : 6, //[21:16] 639 reserved_1c : 2, //[23:22] 640 ru_start_index_80_3 : 6, //[29:24] 641 reserved_1d : 2; //[31-30] 642 }; 643 644 /** 645 * cfr_enh_init_pdev() - Inits cfr pdev and registers necessary handlers. 646 * @psoc: pointer to psoc object 647 * @pdev: pointer to pdev object 648 * 649 * Return: Registration status for necessary handlers 650 */ 651 QDF_STATUS cfr_enh_init_pdev( 652 struct wlan_objmgr_psoc *psoc, 653 struct wlan_objmgr_pdev *pdev); 654 655 /** 656 * cfr_enh_deinit_pdev() - De-inits corresponding pdev and handlers. 657 * @psoc: pointer to psoc object 658 * @pdev: pointer to pdev object 659 * 660 * Return: De-registration status for necessary handlers 661 */ 662 QDF_STATUS cfr_enh_deinit_pdev( 663 struct wlan_objmgr_psoc *psoc, 664 struct wlan_objmgr_pdev *pdev); 665 666 /** 667 * target_if_cfr_start_lut_age_timer() - Start timer to flush aged-out LUT 668 * entries 669 * @pdev: pointer to pdev object 670 * 671 * Return: None 672 */ 673 void target_if_cfr_start_lut_age_timer(struct wlan_objmgr_pdev *pdev); 674 675 /** 676 * target_if_cfr_stop_lut_age_timer() - Stop timer to flush aged-out LUT 677 * entries 678 * @pdev: pointer to pdev object 679 * 680 * Return: None 681 */ 682 void target_if_cfr_stop_lut_age_timer(struct wlan_objmgr_pdev *pdev); 683 684 /** 685 * target_if_cfr_dump_lut_enh() - Dump all valid LUT entries 686 * @pdev: objmgr PDEV 687 * 688 * Return: none 689 */ 690 void target_if_cfr_dump_lut_enh(struct wlan_objmgr_pdev *pdev); 691 692 /** 693 * target_if_cfr_config_rcc() - Start repetitive channel capture 694 * @pdev: pointer to pdev object 695 * @rcc_param: rcc configurations 696 * 697 * Return: Success/Failure status 698 */ 699 QDF_STATUS target_if_cfr_config_rcc(struct wlan_objmgr_pdev *pdev, 700 struct cfr_rcc_param *rcc_param); 701 702 /** 703 * target_if_cfr_default_ta_ra_config() - Configure default values to all 704 * params(BW/NSS/TA/RA) in TA_RA mode 705 * @rcc_param: rcc configurations 706 * @allvalid: Indicates whether all TA_RA params are valid or not. 707 * It could be either 0 or 1. 708 * 1: should be sent to FW during CFR initialization 709 * 0: should be set, after a successful commit session. 710 * @reset_cfg: This bitmap is being used to determine which groups' 711 * parameters are needed to be reset to its default state. 712 */ 713 void target_if_cfr_default_ta_ra_config(struct cfr_rcc_param *rcc_param, 714 bool allvalid, uint16_t reset_cfg); 715 716 /** 717 * target_if_cfr_rx_tlv_process() - Process PPDU status TLVs and store info in 718 * lookup table 719 * @pdev: PDEV object 720 * @nbuf: ppdu info 721 * 722 * Return: none 723 */ 724 void target_if_cfr_rx_tlv_process(struct wlan_objmgr_pdev *pdev, void *nbuf); 725 726 /** 727 * target_if_cfr_update_global_cfg() - Update global config after a successful 728 * commit 729 * @pdev: pointer to pdev object 730 * 731 * Return: None 732 */ 733 void target_if_cfr_update_global_cfg(struct wlan_objmgr_pdev *pdev); 734 #else 735 static inline QDF_STATUS cfr_enh_init_pdev( 736 struct wlan_objmgr_psoc *psoc, 737 struct wlan_objmgr_pdev *pdev) 738 { 739 return QDF_STATUS_SUCCESS; 740 } 741 742 static inline QDF_STATUS cfr_enh_deinit_pdev( 743 struct wlan_objmgr_psoc *psoc, 744 struct wlan_objmgr_pdev *pdev) 745 { 746 return QDF_STATUS_SUCCESS; 747 } 748 #endif 749 #endif 750