1 /* 2 * Copyright (c) 2020 The Linux Foundation. All rights reserved. 3 * 4 * Permission to use, copy, modify, and/or distribute this software for 5 * any purpose with or without fee is hereby granted, provided that the 6 * above copyright notice and this permission notice appear in all 7 * copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 11 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 12 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 13 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 14 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 15 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16 * PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19 // 20 // DO NOT EDIT! This file is automatically generated 21 // These definitions are tied to a particular hardware layout 22 23 24 #ifndef _REO_DESTINATION_RING_H_ 25 #define _REO_DESTINATION_RING_H_ 26 #if !defined(__ASSEMBLER__) 27 #endif 28 29 #include "buffer_addr_info.h" 30 #include "rx_mpdu_desc_info.h" 31 #include "rx_msdu_desc_info.h" 32 33 // ################ START SUMMARY ################# 34 // 35 // Dword Fields 36 // 0-1 struct buffer_addr_info buf_or_link_desc_addr_info; 37 // 2-3 struct rx_mpdu_desc_info rx_mpdu_desc_info_details; 38 // 4-5 struct rx_msdu_desc_info rx_msdu_desc_info_details; 39 // 6 rx_reo_queue_desc_addr_31_0[31:0] 40 // 7 rx_reo_queue_desc_addr_39_32[7:0], reo_dest_buffer_type[8], reo_push_reason[10:9], reo_error_code[15:11], receive_queue_number[31:16] 41 // 8 soft_reorder_info_valid[0], reorder_opcode[4:1], reorder_slot_index[12:5], mpdu_fragment_number[16:13], captured_msdu_data_size[20:17], sw_exception[21], reserved_8a[31:22] 42 // 9 reo_destination_struct_signature[31:0] 43 // 10 reserved_10a[31:0] 44 // 11 reserved_11a[31:0] 45 // 12 reserved_12a[31:0] 46 // 13 reserved_13a[31:0] 47 // 14 reserved_14a[31:0] 48 // 15 reserved_15[19:0], ring_id[27:20], looping_count[31:28] 49 // 50 // ################ END SUMMARY ################# 51 52 #define NUM_OF_DWORDS_REO_DESTINATION_RING 16 53 54 struct reo_destination_ring { 55 struct buffer_addr_info buf_or_link_desc_addr_info; 56 struct rx_mpdu_desc_info rx_mpdu_desc_info_details; 57 struct rx_msdu_desc_info rx_msdu_desc_info_details; 58 uint32_t rx_reo_queue_desc_addr_31_0 : 32; //[31:0] 59 uint32_t rx_reo_queue_desc_addr_39_32 : 8, //[7:0] 60 reo_dest_buffer_type : 1, //[8] 61 reo_push_reason : 2, //[10:9] 62 reo_error_code : 5, //[15:11] 63 receive_queue_number : 16; //[31:16] 64 uint32_t soft_reorder_info_valid : 1, //[0] 65 reorder_opcode : 4, //[4:1] 66 reorder_slot_index : 8, //[12:5] 67 mpdu_fragment_number : 4, //[16:13] 68 captured_msdu_data_size : 4, //[20:17] 69 sw_exception : 1, //[21] 70 reserved_8a : 10; //[31:22] 71 uint32_t reo_destination_struct_signature: 32; //[31:0] 72 uint32_t reserved_10a : 32; //[31:0] 73 uint32_t reserved_11a : 32; //[31:0] 74 uint32_t reserved_12a : 32; //[31:0] 75 uint32_t reserved_13a : 32; //[31:0] 76 uint32_t reserved_14a : 32; //[31:0] 77 uint32_t reserved_15 : 20, //[19:0] 78 ring_id : 8, //[27:20] 79 looping_count : 4; //[31:28] 80 }; 81 82 /* 83 84 struct buffer_addr_info buf_or_link_desc_addr_info 85 86 Consumer: REO/SW/FW 87 88 Producer: RXDMA 89 90 91 92 Details of the physical address of the a buffer or MSDU 93 link descriptor 94 95 struct rx_mpdu_desc_info rx_mpdu_desc_info_details 96 97 Consumer: REO/SW/FW 98 99 Producer: RXDMA 100 101 102 103 General information related to the MPDU that is passed 104 on from REO entrance ring to the REO destination ring 105 106 struct rx_msdu_desc_info rx_msdu_desc_info_details 107 108 General information related to the MSDU that is passed 109 on from RXDMA all the way to to the REO destination ring. 110 111 rx_reo_queue_desc_addr_31_0 112 113 Consumer: REO 114 115 Producer: RXDMA 116 117 118 119 Address (lower 32 bits) of the REO queue descriptor. 120 121 <legal all> 122 123 rx_reo_queue_desc_addr_39_32 124 125 Consumer: REO 126 127 Producer: RXDMA 128 129 130 131 Address (upper 8 bits) of the REO queue descriptor. 132 133 <legal all> 134 135 reo_dest_buffer_type 136 137 Indicates the type of address provided in the 138 'Buf_or_link_desc_addr_info' 139 140 141 142 <enum 0 MSDU_buf_address> The address of an MSDU buffer 143 144 <enum 1 MSDU_link_desc_address> The address of the MSDU 145 link descriptor. 146 147 148 149 <legal all> 150 151 reo_push_reason 152 153 Indicates why REO pushed the frame to this exit ring 154 155 156 157 <enum 0 reo_error_detected> Reo detected an error an 158 pushed this frame to this queue 159 160 <enum 1 reo_routing_instruction> Reo pushed the frame to 161 this queue per received routing instructions. No error 162 within REO was detected 163 164 165 166 167 168 <legal 0 - 1> 169 170 reo_error_code 171 172 Field only valid when 'Reo_push_reason' set to 173 'reo_error_detected'. 174 175 176 177 <enum 0 reo_queue_desc_addr_zero> Reo queue descriptor 178 provided in the REO_ENTRANCE ring is set to 0 179 180 <enum 1 reo_queue_desc_not_valid> Reo queue descriptor 181 valid bit is NOT set 182 183 <enum 2 ampdu_in_non_ba> AMPDU frame received without BA 184 session having been setup. 185 186 <enum 3 non_ba_duplicate> Non-BA session, SN equal to 187 SSN, Retry bit set: duplicate frame 188 189 <enum 4 ba_duplicate> BA session, duplicate frame 190 191 <enum 5 regular_frame_2k_jump> A normal (management/data 192 frame) received with 2K jump in SN 193 194 <enum 6 bar_frame_2k_jump> A bar received with 2K jump 195 in SSN 196 197 <enum 7 regular_frame_OOR> A normal (management/data 198 frame) received with SN falling within the OOR window 199 200 <enum 8 bar_frame_OOR> A bar received with SSN falling 201 within the OOR window 202 203 <enum 9 bar_frame_no_ba_session> A bar received without 204 a BA session 205 206 <enum 10 bar_frame_sn_equals_ssn> A bar received with 207 SSN equal to SN 208 209 <enum 11 pn_check_failed> PN Check Failed packet. 210 211 <enum 12 2k_error_handling_flag_set> Frame is forwarded 212 as a result of the 'Seq_2k_error_detected_flag' been set in 213 the REO Queue descriptor 214 215 <enum 13 pn_error_handling_flag_set> Frame is forwarded 216 as a result of the 'pn_error_detected_flag' been set in the 217 REO Queue descriptor 218 219 <enum 14 queue_descriptor_blocked_set> Frame is 220 forwarded as a result of the queue descriptor(address) being 221 blocked as SW/FW seems to be currently in the process of 222 making updates to this descriptor... 223 224 225 226 <legal 0-14> 227 228 receive_queue_number 229 230 This field in NOT valid (should be set to 0), when 231 SW_exception is set. 232 233 This field indicates the REO MPDU reorder queue ID from 234 which this frame originated. This field is populated from a 235 field with the same name in the RX_REO_QUEUE descriptor. 236 237 <legal all> 238 239 soft_reorder_info_valid 240 241 This field in NOT valid (should be set to 0), when 242 SW_exception is set. 243 244 When set, REO has been instructed to not perform the 245 actual re-ordering of frames for this queue, but just to 246 insert the reorder opcodes 247 248 <legal all> 249 250 reorder_opcode 251 252 Field is valid when 'Soft_reorder_info_valid' is set. 253 This field is always valid for debug purpose as well. 254 255 Details are in the MLD. 256 257 258 259 <enum 0 invalid> 260 261 <enum 1 fwdcur_fwdbuf> 262 263 <enum 2 fwdbuf_fwdcur> 264 265 <enum 3 qcur> 266 267 <enum 4 fwdbuf_qcur> 268 269 <enum 5 fwdbuf_drop> 270 271 <enum 6 fwdall_drop> 272 273 <enum 7 fwdall_qcur> 274 275 <enum 8 reserved_reo_opcode_1> 276 277 <enum 9 dropcur> the error reason code is in 278 reo_error_code field. 279 280 <enum 10 reserved_reo_opcode_2> 281 282 <enum 11 reserved_reo_opcode_3> 283 284 <enum 12 reserved_reo_opcode_4> 285 286 <enum 13 reserved_reo_opcode_5> 287 288 <enum 14 reserved_reo_opcode_6> 289 290 <enum 15 reserved_reo_opcode_7> 291 292 293 294 <legal all> 295 296 reorder_slot_index 297 298 Field only valid when 'Soft_reorder_info_valid' is set. 299 300 301 302 TODO: add description 303 304 305 306 <legal all> 307 308 mpdu_fragment_number 309 310 Field only valid when Rx_mpdu_desc_info_details. 311 Fragment_flag is set. 312 313 314 315 The fragment number from the 802.11 header. 316 317 318 319 Note that the sequence number is embedded in the field: 320 Rx_mpdu_desc_info_details. Mpdu_sequence_number 321 322 323 324 <legal all> 325 326 captured_msdu_data_size 327 328 The number of following REO_DESTINATION STRUCTs that 329 have been replaced with msdu_data extracted from the 330 msdu_buffer and copied into the ring for easy FW/SW access. 331 332 Note that it is possible that these STRUCTs wrap around 333 the end of the ring. 334 335 Feature supported only in HastingsPrime 336 337 <legal 0-4> 338 339 sw_exception 340 341 This field has the same setting as the SW_exception 342 field in the corresponding REO_entrance_ring descriptor. 343 344 When set, the REO entrance descriptor is generated by 345 FW, and the MPDU was processed in the following way: 346 347 - NO re-order function is needed. 348 349 - MPDU delinking is determined by the setting of 350 Entrance ring field: SW_excection_mpdu_delink 351 352 - Destination ring selection is based on the setting of 353 354 Feature supported only in HastingsPrime 355 356 <legal all> 357 358 reserved_8a 359 360 <legal 0> 361 362 reo_destination_struct_signature 363 364 Set to value 0x8888_88888 when msdu capture mode is 365 enabled for this ring (supported only in HastingsPrime) 366 367 <legal 0, 2290649224 > 368 369 reserved_10a 370 371 <legal 0> 372 373 reserved_11a 374 375 <legal 0> 376 377 reserved_12a 378 379 <legal 0> 380 381 reserved_13a 382 383 <legal 0> 384 385 reserved_14a 386 387 <legal 0> 388 389 reserved_15 390 391 <legal 0> 392 393 ring_id 394 395 The buffer pointer ring ID. 396 397 0 refers to the IDLE ring 398 399 1 - N refers to other rings 400 401 402 403 Helps with debugging when dumping ring contents. 404 405 <legal all> 406 407 looping_count 408 409 A count value that indicates the number of times the 410 producer of entries into this Ring has looped around the 411 ring. 412 413 At initialization time, this value is set to 0. On the 414 first loop, this value is set to 1. After the max value is 415 reached allowed by the number of bits for this field, the 416 count value continues with 0 again. 417 418 In case SW is the consumer of the ring entries, it can 419 use this field to figure out up to where the producer of 420 entries has created new entries. This eliminates the need to 421 check where the head pointer' of the ring is located once 422 the SW starts processing an interrupt indicating that new 423 entries have been put into this ring... 424 425 426 427 Also note that SW if it wants only needs to look at the 428 LSB bit of this count value. 429 430 <legal all> 431 */ 432 433 434 /* EXTERNAL REFERENCE : struct buffer_addr_info buf_or_link_desc_addr_info */ 435 436 437 /* Description REO_DESTINATION_RING_0_BUF_OR_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0 438 439 Address (lower 32 bits) of the MSDU buffer OR 440 MSDU_EXTENSION descriptor OR Link Descriptor 441 442 443 444 In case of 'NULL' pointer, this field is set to 0 445 446 <legal all> 447 */ 448 #define REO_DESTINATION_RING_0_BUF_OR_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET 0x00000000 449 #define REO_DESTINATION_RING_0_BUF_OR_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_LSB 0 450 #define REO_DESTINATION_RING_0_BUF_OR_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_MASK 0xffffffff 451 452 /* Description REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32 453 454 Address (upper 8 bits) of the MSDU buffer OR 455 MSDU_EXTENSION descriptor OR Link Descriptor 456 457 458 459 In case of 'NULL' pointer, this field is set to 0 460 461 <legal all> 462 */ 463 #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET 0x00000004 464 #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_LSB 0 465 #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_MASK 0x000000ff 466 467 /* Description REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER 468 469 Consumer: WBM 470 471 Producer: SW/FW 472 473 474 475 In case of 'NULL' pointer, this field is set to 0 476 477 478 479 Indicates to which buffer manager the buffer OR 480 MSDU_EXTENSION descriptor OR link descriptor that is being 481 pointed to shall be returned after the frame has been 482 processed. It is used by WBM for routing purposes. 483 484 485 486 <enum 0 WBM_IDLE_BUF_LIST> This buffer shall be returned 487 to the WMB buffer idle list 488 489 <enum 1 WBM_IDLE_DESC_LIST> This buffer shall be 490 returned to the WMB idle link descriptor idle list 491 492 <enum 2 FW_BM> This buffer shall be returned to the FW 493 494 <enum 3 SW0_BM> This buffer shall be returned to the SW, 495 ring 0 496 497 <enum 4 SW1_BM> This buffer shall be returned to the SW, 498 ring 1 499 500 <enum 5 SW2_BM> This buffer shall be returned to the SW, 501 ring 2 502 503 <enum 6 SW3_BM> This buffer shall be returned to the SW, 504 ring 3 505 506 <enum 7 SW4_BM> This buffer shall be returned to the SW, 507 ring 4 508 509 510 511 <legal all> 512 */ 513 #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET 0x00000004 514 #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB 8 515 #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK 0x00000700 516 517 /* Description REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE 518 519 Cookie field exclusively used by SW. 520 521 522 523 In case of 'NULL' pointer, this field is set to 0 524 525 526 527 HW ignores the contents, accept that it passes the 528 programmed value on to other descriptors together with the 529 physical address 530 531 532 533 Field can be used by SW to for example associate the 534 buffers physical address with the virtual address 535 536 The bit definitions as used by SW are within SW HLD 537 specification 538 539 540 541 NOTE: 542 543 The three most significant bits can have a special 544 meaning in case this struct is embedded in a TX_MPDU_DETAILS 545 STRUCT, and field transmit_bw_restriction is set 546 547 548 549 In case of NON punctured transmission: 550 551 Sw_buffer_cookie[20:19] = 2'b00: 20 MHz TX only 552 553 Sw_buffer_cookie[20:19] = 2'b01: 40 MHz TX only 554 555 Sw_buffer_cookie[20:19] = 2'b10: 80 MHz TX only 556 557 Sw_buffer_cookie[20:19] = 2'b11: 160 MHz TX only 558 559 560 561 In case of punctured transmission: 562 563 Sw_buffer_cookie[20:18] = 3'b000: pattern 0 only 564 565 Sw_buffer_cookie[20:18] = 3'b001: pattern 1 only 566 567 Sw_buffer_cookie[20:18] = 3'b010: pattern 2 only 568 569 Sw_buffer_cookie[20:18] = 3'b011: pattern 3 only 570 571 Sw_buffer_cookie[20:18] = 3'b100: pattern 4 only 572 573 Sw_buffer_cookie[20:18] = 3'b101: pattern 5 only 574 575 Sw_buffer_cookie[20:18] = 3'b110: pattern 6 only 576 577 Sw_buffer_cookie[20:18] = 3'b111: pattern 7 only 578 579 580 581 Note: a punctured transmission is indicated by the 582 presence of TLV TX_PUNCTURE_SETUP embedded in the scheduler 583 TLV 584 585 586 587 <legal all> 588 */ 589 #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET 0x00000004 590 #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_LSB 11 591 #define REO_DESTINATION_RING_1_BUF_OR_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_MASK 0xfffff800 592 593 /* EXTERNAL REFERENCE : struct rx_mpdu_desc_info rx_mpdu_desc_info_details */ 594 595 596 /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT 597 598 Consumer: REO/SW/FW 599 600 Producer: RXDMA 601 602 603 604 The number of MSDUs within the MPDU 605 606 <legal all> 607 */ 608 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_OFFSET 0x00000008 609 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_LSB 0 610 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_MASK 0x000000ff 611 612 /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MPDU_SEQUENCE_NUMBER 613 614 Consumer: REO/SW/FW 615 616 Producer: RXDMA 617 618 619 620 The field can have two different meanings based on the 621 setting of field 'BAR_frame': 622 623 624 625 'BAR_frame' is NOT set: 626 627 The MPDU sequence number of the received frame. 628 629 630 631 'BAR_frame' is set. 632 633 The MPDU Start sequence number from the BAR frame 634 635 <legal all> 636 */ 637 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MPDU_SEQUENCE_NUMBER_OFFSET 0x00000008 638 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MPDU_SEQUENCE_NUMBER_LSB 8 639 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MPDU_SEQUENCE_NUMBER_MASK 0x000fff00 640 641 /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG 642 643 Consumer: REO/SW/FW 644 645 Producer: RXDMA 646 647 648 649 When set, this MPDU is a fragment and REO should forward 650 this fragment MPDU to the REO destination ring without any 651 reorder checks, pn checks or bitmap update. This implies 652 that REO is forwarding the pointer to the MSDU link 653 descriptor. The destination ring is coming from a 654 programmable register setting in REO 655 656 657 658 <legal all> 659 */ 660 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_OFFSET 0x00000008 661 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_LSB 20 662 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_MASK 0x00100000 663 664 /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT 665 666 Consumer: REO/SW/FW 667 668 Producer: RXDMA 669 670 671 672 The retry bit setting from the MPDU header of the 673 received frame 674 675 <legal all> 676 */ 677 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_OFFSET 0x00000008 678 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_LSB 21 679 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_MASK 0x00200000 680 681 /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG 682 683 Consumer: REO/SW/FW 684 685 Producer: RXDMA 686 687 688 689 When set, the MPDU was received as part of an A-MPDU. 690 691 <legal all> 692 */ 693 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_OFFSET 0x00000008 694 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_LSB 22 695 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_MASK 0x00400000 696 697 /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME 698 699 Consumer: REO/SW/FW 700 701 Producer: RXDMA 702 703 704 705 When set, the received frame is a BAR frame. After 706 processing, this frame shall be pushed to SW or deleted. 707 708 <legal all> 709 */ 710 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_OFFSET 0x00000008 711 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_LSB 23 712 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_MASK 0x00800000 713 714 /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO 715 716 Consumer: REO/SW/FW 717 718 Producer: RXDMA 719 720 721 722 Copied here by RXDMA from RX_MPDU_END 723 724 When not set, REO will Not perform a PN sequence number 725 check 726 */ 727 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_OFFSET 0x00000008 728 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_LSB 24 729 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_MASK 0x01000000 730 731 /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_SA_IS_VALID 732 733 When set, OLE found a valid SA entry for all MSDUs in 734 this MPDU 735 736 <legal all> 737 */ 738 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_SA_IS_VALID_OFFSET 0x00000008 739 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_SA_IS_VALID_LSB 25 740 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_SA_IS_VALID_MASK 0x02000000 741 742 /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT 743 744 When set, at least 1 MSDU within the MPDU has an 745 unsuccessful MAC source address search due to the expiration 746 of the search timer. 747 748 <legal all> 749 */ 750 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_OFFSET 0x00000008 751 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_LSB 26 752 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_MASK 0x04000000 753 754 /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IS_VALID 755 756 When set, OLE found a valid DA entry for all MSDUs in 757 this MPDU 758 759 <legal all> 760 */ 761 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IS_VALID_OFFSET 0x00000008 762 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IS_VALID_LSB 27 763 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IS_VALID_MASK 0x08000000 764 765 /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IS_MCBC 766 767 Field Only valid if da_is_valid is set 768 769 770 771 When set, at least one of the DA addresses is a 772 Multicast or Broadcast address. 773 774 <legal all> 775 */ 776 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IS_MCBC_OFFSET 0x00000008 777 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IS_MCBC_LSB 28 778 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IS_MCBC_MASK 0x10000000 779 780 /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT 781 782 When set, at least 1 MSDU within the MPDU has an 783 unsuccessful MAC destination address search due to the 784 expiration of the search timer. 785 786 <legal all> 787 */ 788 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_OFFSET 0x00000008 789 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_LSB 29 790 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_MASK 0x20000000 791 792 /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU 793 794 Field only valid when first_msdu_in_mpdu_flag is set. 795 796 797 798 When set, the contents in the MSDU buffer contains a 799 'RAW' MPDU. This 'RAW' MPDU might be spread out over 800 multiple MSDU buffers. 801 802 <legal all> 803 */ 804 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_OFFSET 0x00000008 805 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_LSB 30 806 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_MASK 0x40000000 807 808 /* Description REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG 809 810 The More Fragment bit setting from the MPDU header of 811 the received frame 812 813 814 815 <legal all> 816 */ 817 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_OFFSET 0x00000008 818 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_LSB 31 819 #define REO_DESTINATION_RING_2_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_MASK 0x80000000 820 821 /* Description REO_DESTINATION_RING_3_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA 822 823 Meta data that SW has programmed in the Peer table entry 824 of the transmitting STA. 825 826 <legal all> 827 */ 828 #define REO_DESTINATION_RING_3_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_OFFSET 0x0000000c 829 #define REO_DESTINATION_RING_3_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_LSB 0 830 #define REO_DESTINATION_RING_3_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_MASK 0xffffffff 831 832 /* EXTERNAL REFERENCE : struct rx_msdu_desc_info rx_msdu_desc_info_details */ 833 834 835 /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG 836 837 Parsed from RX_MSDU_END TLV . In the case MSDU spans 838 over multiple buffers, this field will be valid in the Last 839 buffer used by the MSDU 840 841 842 843 <enum 0 Not_first_msdu> This is not the first MSDU in 844 the MPDU. 845 846 <enum 1 first_msdu> This MSDU is the first one in the 847 MPDU. 848 849 850 851 <legal all> 852 */ 853 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG_OFFSET 0x00000010 854 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG_LSB 0 855 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_FIRST_MSDU_IN_MPDU_FLAG_MASK 0x00000001 856 857 /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_LAST_MSDU_IN_MPDU_FLAG 858 859 Consumer: WBM/REO/SW/FW 860 861 Producer: RXDMA 862 863 864 865 Parsed from RX_MSDU_END TLV . In the case MSDU spans 866 over multiple buffers, this field will be valid in the Last 867 buffer used by the MSDU 868 869 870 871 <enum 0 Not_last_msdu> There are more MSDUs linked to 872 this MSDU that belongs to this MPDU 873 874 <enum 1 Last_msdu> this MSDU is the last one in the 875 MPDU. This setting is only allowed in combination with 876 'Msdu_continuation' set to 0. This implies that when an msdu 877 is spread out over multiple buffers and thus 878 msdu_continuation is set, only for the very last buffer of 879 the msdu, can the 'last_msdu_in_mpdu_flag' be set. 880 881 882 883 When both first_msdu_in_mpdu_flag and 884 last_msdu_in_mpdu_flag are set, the MPDU that this MSDU 885 belongs to only contains a single MSDU. 886 887 888 889 890 891 <legal all> 892 */ 893 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_LAST_MSDU_IN_MPDU_FLAG_OFFSET 0x00000010 894 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_LAST_MSDU_IN_MPDU_FLAG_LSB 1 895 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_LAST_MSDU_IN_MPDU_FLAG_MASK 0x00000002 896 897 /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_CONTINUATION 898 899 When set, this MSDU buffer was not able to hold the 900 entire MSDU. The next buffer will therefor contain 901 additional information related to this MSDU. 902 903 904 905 <legal all> 906 */ 907 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_CONTINUATION_OFFSET 0x00000010 908 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_CONTINUATION_LSB 2 909 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_CONTINUATION_MASK 0x00000004 910 911 /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_LENGTH 912 913 Parsed from RX_MSDU_START TLV . In the case MSDU spans 914 over multiple buffers, this field will be valid in the First 915 buffer used by MSDU. 916 917 918 919 Full MSDU length in bytes after decapsulation. 920 921 922 923 This field is still valid for MPDU frames without 924 A-MSDU. It still represents MSDU length after decapsulation 925 926 927 928 Or in case of RAW MPDUs, it indicates the length of the 929 entire MPDU (without FCS field) 930 931 <legal all> 932 */ 933 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_LENGTH_OFFSET 0x00000010 934 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_LENGTH_LSB 3 935 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_LENGTH_MASK 0x0001fff8 936 937 /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_REO_DESTINATION_INDICATION 938 939 Parsed from RX_MSDU_END TLV . In the case MSDU spans 940 over multiple buffers, this field will be valid in the Last 941 buffer used by the MSDU 942 943 944 945 The ID of the REO exit ring where the MSDU frame shall 946 push after (MPDU level) reordering has finished. 947 948 949 950 <enum 0 reo_destination_tcl> Reo will push the frame 951 into the REO2TCL ring 952 953 <enum 1 reo_destination_sw1> Reo will push the frame 954 into the REO2SW1 ring 955 956 <enum 2 reo_destination_sw2> Reo will push the frame 957 into the REO2SW2 ring 958 959 <enum 3 reo_destination_sw3> Reo will push the frame 960 into the REO2SW3 ring 961 962 <enum 4 reo_destination_sw4> Reo will push the frame 963 into the REO2SW4 ring 964 965 <enum 5 reo_destination_release> Reo will push the frame 966 into the REO_release ring 967 968 <enum 6 reo_destination_fw> Reo will push the frame into 969 the REO2FW ring 970 971 <enum 7 reo_destination_sw5> Reo will push the frame 972 into the REO2SW5 ring (REO remaps this in chips without 973 REO2SW5 ring, e.g. Pine) 974 975 <enum 8 reo_destination_sw6> Reo will push the frame 976 into the REO2SW6 ring (REO remaps this in chips without 977 REO2SW6 ring, e.g. Pine) 978 979 <enum 9 reo_destination_9> REO remaps this <enum 10 980 reo_destination_10> REO remaps this 981 982 <enum 11 reo_destination_11> REO remaps this 983 984 <enum 12 reo_destination_12> REO remaps this <enum 13 985 reo_destination_13> REO remaps this 986 987 <enum 14 reo_destination_14> REO remaps this 988 989 <enum 15 reo_destination_15> REO remaps this 990 991 <enum 16 reo_destination_16> REO remaps this 992 993 <enum 17 reo_destination_17> REO remaps this 994 995 <enum 18 reo_destination_18> REO remaps this 996 997 <enum 19 reo_destination_19> REO remaps this 998 999 <enum 20 reo_destination_20> REO remaps this 1000 1001 <enum 21 reo_destination_21> REO remaps this 1002 1003 <enum 22 reo_destination_22> REO remaps this 1004 1005 <enum 23 reo_destination_23> REO remaps this 1006 1007 <enum 24 reo_destination_24> REO remaps this 1008 1009 <enum 25 reo_destination_25> REO remaps this 1010 1011 <enum 26 reo_destination_26> REO remaps this 1012 1013 <enum 27 reo_destination_27> REO remaps this 1014 1015 <enum 28 reo_destination_28> REO remaps this 1016 1017 <enum 29 reo_destination_29> REO remaps this 1018 1019 <enum 30 reo_destination_30> REO remaps this 1020 1021 <enum 31 reo_destination_31> REO remaps this 1022 1023 1024 1025 <legal all> 1026 */ 1027 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_REO_DESTINATION_INDICATION_OFFSET 0x00000010 1028 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_REO_DESTINATION_INDICATION_LSB 17 1029 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_REO_DESTINATION_INDICATION_MASK 0x003e0000 1030 1031 /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_DROP 1032 1033 Parsed from RX_MSDU_END TLV . In the case MSDU spans 1034 over multiple buffers, this field will be valid in the Last 1035 buffer used by the MSDU 1036 1037 1038 1039 When set, REO shall drop this MSDU and not forward it to 1040 any other ring... 1041 1042 <legal all> 1043 */ 1044 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_DROP_OFFSET 0x00000010 1045 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_DROP_LSB 22 1046 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_MSDU_DROP_MASK 0x00400000 1047 1048 /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_SA_IS_VALID 1049 1050 Parsed from RX_MSDU_END TLV . In the case MSDU spans 1051 over multiple buffers, this field will be valid in the Last 1052 buffer used by the MSDU 1053 1054 1055 1056 Indicates that OLE found a valid SA entry for this MSDU 1057 1058 <legal all> 1059 */ 1060 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_SA_IS_VALID_OFFSET 0x00000010 1061 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_SA_IS_VALID_LSB 23 1062 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_SA_IS_VALID_MASK 0x00800000 1063 1064 /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT 1065 1066 Parsed from RX_MSDU_END TLV . In the case MSDU spans 1067 over multiple buffers, this field will be valid in the Last 1068 buffer used by the MSDU 1069 1070 1071 1072 Indicates an unsuccessful MAC source address search due 1073 to the expiring of the search timer for this MSDU 1074 1075 <legal all> 1076 */ 1077 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_OFFSET 0x00000010 1078 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_LSB 24 1079 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_SA_IDX_TIMEOUT_MASK 0x01000000 1080 1081 /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IS_VALID 1082 1083 Parsed from RX_MSDU_END TLV . In the case MSDU spans 1084 over multiple buffers, this field will be valid in the Last 1085 buffer used by the MSDU 1086 1087 1088 1089 Indicates that OLE found a valid DA entry for this MSDU 1090 1091 <legal all> 1092 */ 1093 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IS_VALID_OFFSET 0x00000010 1094 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IS_VALID_LSB 25 1095 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IS_VALID_MASK 0x02000000 1096 1097 /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IS_MCBC 1098 1099 Field Only valid if da_is_valid is set 1100 1101 1102 1103 Indicates the DA address was a Multicast of Broadcast 1104 address for this MSDU 1105 1106 <legal all> 1107 */ 1108 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IS_MCBC_OFFSET 0x00000010 1109 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IS_MCBC_LSB 26 1110 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IS_MCBC_MASK 0x04000000 1111 1112 /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT 1113 1114 Parsed from RX_MSDU_END TLV . In the case MSDU spans 1115 over multiple buffers, this field will be valid in the Last 1116 buffer used by the MSDU 1117 1118 1119 1120 Indicates an unsuccessful MAC destination address search 1121 due to the expiring of the search timer for this MSDU 1122 1123 <legal all> 1124 */ 1125 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_OFFSET 0x00000010 1126 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_LSB 27 1127 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_DA_IDX_TIMEOUT_MASK 0x08000000 1128 1129 /* Description REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_RESERVED_0A 1130 1131 <legal 0> 1132 */ 1133 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_RESERVED_0A_OFFSET 0x00000010 1134 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_RESERVED_0A_LSB 28 1135 #define REO_DESTINATION_RING_4_RX_MSDU_DESC_INFO_DETAILS_RESERVED_0A_MASK 0xf0000000 1136 1137 /* Description REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_RESERVED_1A 1138 1139 <legal 0> 1140 */ 1141 #define REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_RESERVED_1A_OFFSET 0x00000014 1142 #define REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_RESERVED_1A_LSB 0 1143 #define REO_DESTINATION_RING_5_RX_MSDU_DESC_INFO_DETAILS_RESERVED_1A_MASK 0xffffffff 1144 1145 /* Description REO_DESTINATION_RING_6_RX_REO_QUEUE_DESC_ADDR_31_0 1146 1147 Consumer: REO 1148 1149 Producer: RXDMA 1150 1151 1152 1153 Address (lower 32 bits) of the REO queue descriptor. 1154 1155 <legal all> 1156 */ 1157 #define REO_DESTINATION_RING_6_RX_REO_QUEUE_DESC_ADDR_31_0_OFFSET 0x00000018 1158 #define REO_DESTINATION_RING_6_RX_REO_QUEUE_DESC_ADDR_31_0_LSB 0 1159 #define REO_DESTINATION_RING_6_RX_REO_QUEUE_DESC_ADDR_31_0_MASK 0xffffffff 1160 1161 /* Description REO_DESTINATION_RING_7_RX_REO_QUEUE_DESC_ADDR_39_32 1162 1163 Consumer: REO 1164 1165 Producer: RXDMA 1166 1167 1168 1169 Address (upper 8 bits) of the REO queue descriptor. 1170 1171 <legal all> 1172 */ 1173 #define REO_DESTINATION_RING_7_RX_REO_QUEUE_DESC_ADDR_39_32_OFFSET 0x0000001c 1174 #define REO_DESTINATION_RING_7_RX_REO_QUEUE_DESC_ADDR_39_32_LSB 0 1175 #define REO_DESTINATION_RING_7_RX_REO_QUEUE_DESC_ADDR_39_32_MASK 0x000000ff 1176 1177 /* Description REO_DESTINATION_RING_7_REO_DEST_BUFFER_TYPE 1178 1179 Indicates the type of address provided in the 1180 'Buf_or_link_desc_addr_info' 1181 1182 1183 1184 <enum 0 MSDU_buf_address> The address of an MSDU buffer 1185 1186 <enum 1 MSDU_link_desc_address> The address of the MSDU 1187 link descriptor. 1188 1189 1190 1191 <legal all> 1192 */ 1193 #define REO_DESTINATION_RING_7_REO_DEST_BUFFER_TYPE_OFFSET 0x0000001c 1194 #define REO_DESTINATION_RING_7_REO_DEST_BUFFER_TYPE_LSB 8 1195 #define REO_DESTINATION_RING_7_REO_DEST_BUFFER_TYPE_MASK 0x00000100 1196 1197 /* Description REO_DESTINATION_RING_7_REO_PUSH_REASON 1198 1199 Indicates why REO pushed the frame to this exit ring 1200 1201 1202 1203 <enum 0 reo_error_detected> Reo detected an error an 1204 pushed this frame to this queue 1205 1206 <enum 1 reo_routing_instruction> Reo pushed the frame to 1207 this queue per received routing instructions. No error 1208 within REO was detected 1209 1210 1211 1212 1213 1214 <legal 0 - 1> 1215 */ 1216 #define REO_DESTINATION_RING_7_REO_PUSH_REASON_OFFSET 0x0000001c 1217 #define REO_DESTINATION_RING_7_REO_PUSH_REASON_LSB 9 1218 #define REO_DESTINATION_RING_7_REO_PUSH_REASON_MASK 0x00000600 1219 1220 /* Description REO_DESTINATION_RING_7_REO_ERROR_CODE 1221 1222 Field only valid when 'Reo_push_reason' set to 1223 'reo_error_detected'. 1224 1225 1226 1227 <enum 0 reo_queue_desc_addr_zero> Reo queue descriptor 1228 provided in the REO_ENTRANCE ring is set to 0 1229 1230 <enum 1 reo_queue_desc_not_valid> Reo queue descriptor 1231 valid bit is NOT set 1232 1233 <enum 2 ampdu_in_non_ba> AMPDU frame received without BA 1234 session having been setup. 1235 1236 <enum 3 non_ba_duplicate> Non-BA session, SN equal to 1237 SSN, Retry bit set: duplicate frame 1238 1239 <enum 4 ba_duplicate> BA session, duplicate frame 1240 1241 <enum 5 regular_frame_2k_jump> A normal (management/data 1242 frame) received with 2K jump in SN 1243 1244 <enum 6 bar_frame_2k_jump> A bar received with 2K jump 1245 in SSN 1246 1247 <enum 7 regular_frame_OOR> A normal (management/data 1248 frame) received with SN falling within the OOR window 1249 1250 <enum 8 bar_frame_OOR> A bar received with SSN falling 1251 within the OOR window 1252 1253 <enum 9 bar_frame_no_ba_session> A bar received without 1254 a BA session 1255 1256 <enum 10 bar_frame_sn_equals_ssn> A bar received with 1257 SSN equal to SN 1258 1259 <enum 11 pn_check_failed> PN Check Failed packet. 1260 1261 <enum 12 2k_error_handling_flag_set> Frame is forwarded 1262 as a result of the 'Seq_2k_error_detected_flag' been set in 1263 the REO Queue descriptor 1264 1265 <enum 13 pn_error_handling_flag_set> Frame is forwarded 1266 as a result of the 'pn_error_detected_flag' been set in the 1267 REO Queue descriptor 1268 1269 <enum 14 queue_descriptor_blocked_set> Frame is 1270 forwarded as a result of the queue descriptor(address) being 1271 blocked as SW/FW seems to be currently in the process of 1272 making updates to this descriptor... 1273 1274 1275 1276 <legal 0-14> 1277 */ 1278 #define REO_DESTINATION_RING_7_REO_ERROR_CODE_OFFSET 0x0000001c 1279 #define REO_DESTINATION_RING_7_REO_ERROR_CODE_LSB 11 1280 #define REO_DESTINATION_RING_7_REO_ERROR_CODE_MASK 0x0000f800 1281 1282 /* Description REO_DESTINATION_RING_7_RECEIVE_QUEUE_NUMBER 1283 1284 This field in NOT valid (should be set to 0), when 1285 SW_exception is set. 1286 1287 This field indicates the REO MPDU reorder queue ID from 1288 which this frame originated. This field is populated from a 1289 field with the same name in the RX_REO_QUEUE descriptor. 1290 1291 <legal all> 1292 */ 1293 #define REO_DESTINATION_RING_7_RECEIVE_QUEUE_NUMBER_OFFSET 0x0000001c 1294 #define REO_DESTINATION_RING_7_RECEIVE_QUEUE_NUMBER_LSB 16 1295 #define REO_DESTINATION_RING_7_RECEIVE_QUEUE_NUMBER_MASK 0xffff0000 1296 1297 /* Description REO_DESTINATION_RING_8_SOFT_REORDER_INFO_VALID 1298 1299 This field in NOT valid (should be set to 0), when 1300 SW_exception is set. 1301 1302 When set, REO has been instructed to not perform the 1303 actual re-ordering of frames for this queue, but just to 1304 insert the reorder opcodes 1305 1306 <legal all> 1307 */ 1308 #define REO_DESTINATION_RING_8_SOFT_REORDER_INFO_VALID_OFFSET 0x00000020 1309 #define REO_DESTINATION_RING_8_SOFT_REORDER_INFO_VALID_LSB 0 1310 #define REO_DESTINATION_RING_8_SOFT_REORDER_INFO_VALID_MASK 0x00000001 1311 1312 /* Description REO_DESTINATION_RING_8_REORDER_OPCODE 1313 1314 Field is valid when 'Soft_reorder_info_valid' is set. 1315 This field is always valid for debug purpose as well. 1316 1317 Details are in the MLD. 1318 1319 1320 1321 <enum 0 invalid> 1322 1323 <enum 1 fwdcur_fwdbuf> 1324 1325 <enum 2 fwdbuf_fwdcur> 1326 1327 <enum 3 qcur> 1328 1329 <enum 4 fwdbuf_qcur> 1330 1331 <enum 5 fwdbuf_drop> 1332 1333 <enum 6 fwdall_drop> 1334 1335 <enum 7 fwdall_qcur> 1336 1337 <enum 8 reserved_reo_opcode_1> 1338 1339 <enum 9 dropcur> the error reason code is in 1340 reo_error_code field. 1341 1342 <enum 10 reserved_reo_opcode_2> 1343 1344 <enum 11 reserved_reo_opcode_3> 1345 1346 <enum 12 reserved_reo_opcode_4> 1347 1348 <enum 13 reserved_reo_opcode_5> 1349 1350 <enum 14 reserved_reo_opcode_6> 1351 1352 <enum 15 reserved_reo_opcode_7> 1353 1354 1355 1356 <legal all> 1357 */ 1358 #define REO_DESTINATION_RING_8_REORDER_OPCODE_OFFSET 0x00000020 1359 #define REO_DESTINATION_RING_8_REORDER_OPCODE_LSB 1 1360 #define REO_DESTINATION_RING_8_REORDER_OPCODE_MASK 0x0000001e 1361 1362 /* Description REO_DESTINATION_RING_8_REORDER_SLOT_INDEX 1363 1364 Field only valid when 'Soft_reorder_info_valid' is set. 1365 1366 1367 1368 TODO: add description 1369 1370 1371 1372 <legal all> 1373 */ 1374 #define REO_DESTINATION_RING_8_REORDER_SLOT_INDEX_OFFSET 0x00000020 1375 #define REO_DESTINATION_RING_8_REORDER_SLOT_INDEX_LSB 5 1376 #define REO_DESTINATION_RING_8_REORDER_SLOT_INDEX_MASK 0x00001fe0 1377 1378 /* Description REO_DESTINATION_RING_8_MPDU_FRAGMENT_NUMBER 1379 1380 Field only valid when Rx_mpdu_desc_info_details. 1381 Fragment_flag is set. 1382 1383 1384 1385 The fragment number from the 802.11 header. 1386 1387 1388 1389 Note that the sequence number is embedded in the field: 1390 Rx_mpdu_desc_info_details. Mpdu_sequence_number 1391 1392 1393 1394 <legal all> 1395 */ 1396 #define REO_DESTINATION_RING_8_MPDU_FRAGMENT_NUMBER_OFFSET 0x00000020 1397 #define REO_DESTINATION_RING_8_MPDU_FRAGMENT_NUMBER_LSB 13 1398 #define REO_DESTINATION_RING_8_MPDU_FRAGMENT_NUMBER_MASK 0x0001e000 1399 1400 /* Description REO_DESTINATION_RING_8_CAPTURED_MSDU_DATA_SIZE 1401 1402 The number of following REO_DESTINATION STRUCTs that 1403 have been replaced with msdu_data extracted from the 1404 msdu_buffer and copied into the ring for easy FW/SW access. 1405 1406 Note that it is possible that these STRUCTs wrap around 1407 the end of the ring. 1408 1409 Feature supported only in HastingsPrime 1410 1411 <legal 0-4> 1412 */ 1413 #define REO_DESTINATION_RING_8_CAPTURED_MSDU_DATA_SIZE_OFFSET 0x00000020 1414 #define REO_DESTINATION_RING_8_CAPTURED_MSDU_DATA_SIZE_LSB 17 1415 #define REO_DESTINATION_RING_8_CAPTURED_MSDU_DATA_SIZE_MASK 0x001e0000 1416 1417 /* Description REO_DESTINATION_RING_8_SW_EXCEPTION 1418 1419 This field has the same setting as the SW_exception 1420 field in the corresponding REO_entrance_ring descriptor. 1421 1422 When set, the REO entrance descriptor is generated by 1423 FW, and the MPDU was processed in the following way: 1424 1425 - NO re-order function is needed. 1426 1427 - MPDU delinking is determined by the setting of 1428 Entrance ring field: SW_excection_mpdu_delink 1429 1430 - Destination ring selection is based on the setting of 1431 1432 Feature supported only in HastingsPrime 1433 1434 <legal all> 1435 */ 1436 #define REO_DESTINATION_RING_8_SW_EXCEPTION_OFFSET 0x00000020 1437 #define REO_DESTINATION_RING_8_SW_EXCEPTION_LSB 21 1438 #define REO_DESTINATION_RING_8_SW_EXCEPTION_MASK 0x00200000 1439 1440 /* Description REO_DESTINATION_RING_8_RESERVED_8A 1441 1442 <legal 0> 1443 */ 1444 #define REO_DESTINATION_RING_8_RESERVED_8A_OFFSET 0x00000020 1445 #define REO_DESTINATION_RING_8_RESERVED_8A_LSB 22 1446 #define REO_DESTINATION_RING_8_RESERVED_8A_MASK 0xffc00000 1447 1448 /* Description REO_DESTINATION_RING_9_REO_DESTINATION_STRUCT_SIGNATURE 1449 1450 Set to value 0x8888_88888 when msdu capture mode is 1451 enabled for this ring (supported only in HastingsPrime) 1452 1453 <legal 0, 2290649224 > 1454 */ 1455 #define REO_DESTINATION_RING_9_REO_DESTINATION_STRUCT_SIGNATURE_OFFSET 0x00000024 1456 #define REO_DESTINATION_RING_9_REO_DESTINATION_STRUCT_SIGNATURE_LSB 0 1457 #define REO_DESTINATION_RING_9_REO_DESTINATION_STRUCT_SIGNATURE_MASK 0xffffffff 1458 1459 /* Description REO_DESTINATION_RING_10_RESERVED_10A 1460 1461 <legal 0> 1462 */ 1463 #define REO_DESTINATION_RING_10_RESERVED_10A_OFFSET 0x00000028 1464 #define REO_DESTINATION_RING_10_RESERVED_10A_LSB 0 1465 #define REO_DESTINATION_RING_10_RESERVED_10A_MASK 0xffffffff 1466 1467 /* Description REO_DESTINATION_RING_11_RESERVED_11A 1468 1469 <legal 0> 1470 */ 1471 #define REO_DESTINATION_RING_11_RESERVED_11A_OFFSET 0x0000002c 1472 #define REO_DESTINATION_RING_11_RESERVED_11A_LSB 0 1473 #define REO_DESTINATION_RING_11_RESERVED_11A_MASK 0xffffffff 1474 1475 /* Description REO_DESTINATION_RING_12_RESERVED_12A 1476 1477 <legal 0> 1478 */ 1479 #define REO_DESTINATION_RING_12_RESERVED_12A_OFFSET 0x00000030 1480 #define REO_DESTINATION_RING_12_RESERVED_12A_LSB 0 1481 #define REO_DESTINATION_RING_12_RESERVED_12A_MASK 0xffffffff 1482 1483 /* Description REO_DESTINATION_RING_13_RESERVED_13A 1484 1485 <legal 0> 1486 */ 1487 #define REO_DESTINATION_RING_13_RESERVED_13A_OFFSET 0x00000034 1488 #define REO_DESTINATION_RING_13_RESERVED_13A_LSB 0 1489 #define REO_DESTINATION_RING_13_RESERVED_13A_MASK 0xffffffff 1490 1491 /* Description REO_DESTINATION_RING_14_RESERVED_14A 1492 1493 <legal 0> 1494 */ 1495 #define REO_DESTINATION_RING_14_RESERVED_14A_OFFSET 0x00000038 1496 #define REO_DESTINATION_RING_14_RESERVED_14A_LSB 0 1497 #define REO_DESTINATION_RING_14_RESERVED_14A_MASK 0xffffffff 1498 1499 /* Description REO_DESTINATION_RING_15_RESERVED_15 1500 1501 <legal 0> 1502 */ 1503 #define REO_DESTINATION_RING_15_RESERVED_15_OFFSET 0x0000003c 1504 #define REO_DESTINATION_RING_15_RESERVED_15_LSB 0 1505 #define REO_DESTINATION_RING_15_RESERVED_15_MASK 0x000fffff 1506 1507 /* Description REO_DESTINATION_RING_15_RING_ID 1508 1509 The buffer pointer ring ID. 1510 1511 0 refers to the IDLE ring 1512 1513 1 - N refers to other rings 1514 1515 1516 1517 Helps with debugging when dumping ring contents. 1518 1519 <legal all> 1520 */ 1521 #define REO_DESTINATION_RING_15_RING_ID_OFFSET 0x0000003c 1522 #define REO_DESTINATION_RING_15_RING_ID_LSB 20 1523 #define REO_DESTINATION_RING_15_RING_ID_MASK 0x0ff00000 1524 1525 /* Description REO_DESTINATION_RING_15_LOOPING_COUNT 1526 1527 A count value that indicates the number of times the 1528 producer of entries into this Ring has looped around the 1529 ring. 1530 1531 At initialization time, this value is set to 0. On the 1532 first loop, this value is set to 1. After the max value is 1533 reached allowed by the number of bits for this field, the 1534 count value continues with 0 again. 1535 1536 In case SW is the consumer of the ring entries, it can 1537 use this field to figure out up to where the producer of 1538 entries has created new entries. This eliminates the need to 1539 check where the head pointer' of the ring is located once 1540 the SW starts processing an interrupt indicating that new 1541 entries have been put into this ring... 1542 1543 1544 1545 Also note that SW if it wants only needs to look at the 1546 LSB bit of this count value. 1547 1548 <legal all> 1549 */ 1550 #define REO_DESTINATION_RING_15_LOOPING_COUNT_OFFSET 0x0000003c 1551 #define REO_DESTINATION_RING_15_LOOPING_COUNT_LSB 28 1552 #define REO_DESTINATION_RING_15_LOOPING_COUNT_MASK 0xf0000000 1553 1554 1555 #endif // _REO_DESTINATION_RING_H_ 1556