/*
 * Copyright (c) 2019, The Linux Foundation. All rights reserved.
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#ifndef _RX_REO_QUEUE_H_
#define _RX_REO_QUEUE_H_
#if !defined(__ASSEMBLER__)
#endif

#include "uniform_descriptor_header.h"

// ################ START SUMMARY #################
//
//	Dword	Fields
//	0	struct uniform_descriptor_header descriptor_header;
//	1	receive_queue_number[15:0], reserved_1b[31:16]
//	2	vld[0], associated_link_descriptor_counter[2:1], disable_duplicate_detection[3], soft_reorder_enable[4], ac[6:5], bar[7], rty[8], chk_2k_mode[9], oor_mode[10], ba_window_size[18:11], pn_check_needed[19], pn_shall_be_even[20], pn_shall_be_uneven[21], pn_handling_enable[22], pn_size[24:23], ignore_ampdu_flag[25], reserved_2b[31:26]
//	3	svld[0], ssn[12:1], current_index[20:13], seq_2k_error_detected_flag[21], pn_error_detected_flag[22], reserved_3a[30:23], pn_valid[31]
//	4	pn_31_0[31:0]
//	5	pn_63_32[31:0]
//	6	pn_95_64[31:0]
//	7	pn_127_96[31:0]
//	8	last_rx_enqueue_timestamp[31:0]
//	9	last_rx_dequeue_timestamp[31:0]
//	10	ptr_to_next_aging_queue_31_0[31:0]
//	11	ptr_to_next_aging_queue_39_32[7:0], reserved_11a[31:8]
//	12	ptr_to_previous_aging_queue_31_0[31:0]
//	13	ptr_to_previous_aging_queue_39_32[7:0], reserved_13a[31:8]
//	14	rx_bitmap_31_0[31:0]
//	15	rx_bitmap_63_32[31:0]
//	16	rx_bitmap_95_64[31:0]
//	17	rx_bitmap_127_96[31:0]
//	18	rx_bitmap_159_128[31:0]
//	19	rx_bitmap_191_160[31:0]
//	20	rx_bitmap_223_192[31:0]
//	21	rx_bitmap_255_224[31:0]
//	22	current_mpdu_count[6:0], current_msdu_count[31:7]
//	23	reserved_23[3:0], timeout_count[9:4], forward_due_to_bar_count[15:10], duplicate_count[31:16]
//	24	frames_in_order_count[23:0], bar_received_count[31:24]
//	25	mpdu_frames_processed_count[31:0]
//	26	msdu_frames_processed_count[31:0]
//	27	total_processed_byte_count[31:0]
//	28	late_receive_mpdu_count[11:0], window_jump_2k[15:12], hole_count[31:16]
//	29	reserved_29[31:0]
//	30	reserved_30[31:0]
//	31	reserved_31[31:0]
//
// ################ END SUMMARY #################

#define NUM_OF_DWORDS_RX_REO_QUEUE 32

struct rx_reo_queue {
    struct            uniform_descriptor_header                       descriptor_header;
             uint32_t receive_queue_number            : 16, //[15:0]
                      reserved_1b                     : 16; //[31:16]
             uint32_t vld                             :  1, //[0]
                      associated_link_descriptor_counter:  2, //[2:1]
                      disable_duplicate_detection     :  1, //[3]
                      soft_reorder_enable             :  1, //[4]
                      ac                              :  2, //[6:5]
                      bar                             :  1, //[7]
                      rty                             :  1, //[8]
                      chk_2k_mode                     :  1, //[9]
                      oor_mode                        :  1, //[10]
                      ba_window_size                  :  8, //[18:11]
                      pn_check_needed                 :  1, //[19]
                      pn_shall_be_even                :  1, //[20]
                      pn_shall_be_uneven              :  1, //[21]
                      pn_handling_enable              :  1, //[22]
                      pn_size                         :  2, //[24:23]
                      ignore_ampdu_flag               :  1, //[25]
                      reserved_2b                     :  6; //[31:26]
             uint32_t svld                            :  1, //[0]
                      ssn                             : 12, //[12:1]
                      current_index                   :  8, //[20:13]
                      seq_2k_error_detected_flag      :  1, //[21]
                      pn_error_detected_flag          :  1, //[22]
                      reserved_3a                     :  8, //[30:23]
                      pn_valid                        :  1; //[31]
             uint32_t pn_31_0                         : 32; //[31:0]
             uint32_t pn_63_32                        : 32; //[31:0]
             uint32_t pn_95_64                        : 32; //[31:0]
             uint32_t pn_127_96                       : 32; //[31:0]
             uint32_t last_rx_enqueue_timestamp       : 32; //[31:0]
             uint32_t last_rx_dequeue_timestamp       : 32; //[31:0]
             uint32_t ptr_to_next_aging_queue_31_0    : 32; //[31:0]
             uint32_t ptr_to_next_aging_queue_39_32   :  8, //[7:0]
                      reserved_11a                    : 24; //[31:8]
             uint32_t ptr_to_previous_aging_queue_31_0: 32; //[31:0]
             uint32_t ptr_to_previous_aging_queue_39_32:  8, //[7:0]
                      reserved_13a                    : 24; //[31:8]
             uint32_t rx_bitmap_31_0                  : 32; //[31:0]
             uint32_t rx_bitmap_63_32                 : 32; //[31:0]
             uint32_t rx_bitmap_95_64                 : 32; //[31:0]
             uint32_t rx_bitmap_127_96                : 32; //[31:0]
             uint32_t rx_bitmap_159_128               : 32; //[31:0]
             uint32_t rx_bitmap_191_160               : 32; //[31:0]
             uint32_t rx_bitmap_223_192               : 32; //[31:0]
             uint32_t rx_bitmap_255_224               : 32; //[31:0]
             uint32_t current_mpdu_count              :  7, //[6:0]
                      current_msdu_count              : 25; //[31:7]
             uint32_t reserved_23                     :  4, //[3:0]
                      timeout_count                   :  6, //[9:4]
                      forward_due_to_bar_count        :  6, //[15:10]
                      duplicate_count                 : 16; //[31:16]
             uint32_t frames_in_order_count           : 24, //[23:0]
                      bar_received_count              :  8; //[31:24]
             uint32_t mpdu_frames_processed_count     : 32; //[31:0]
             uint32_t msdu_frames_processed_count     : 32; //[31:0]
             uint32_t total_processed_byte_count      : 32; //[31:0]
             uint32_t late_receive_mpdu_count         : 12, //[11:0]
                      window_jump_2k                  :  4, //[15:12]
                      hole_count                      : 16; //[31:16]
             uint32_t reserved_29                     : 32; //[31:0]
             uint32_t reserved_30                     : 32; //[31:0]
             uint32_t reserved_31                     : 32; //[31:0]
};

/*

struct uniform_descriptor_header descriptor_header
			
			Details about which module owns this struct.
			
			Note that sub field Buffer_type shall be set to
			Receive_REO_queue_descriptor

receive_queue_number
			
			Indicates the MPDU queue ID to which this MPDU link
			descriptor belongs
			
			Used for tracking and debugging
			
			<legal all>

reserved_1b
			
			<legal 0>

vld
			
			Valid bit indicating a session is established and the
			queue descriptor is valid(Filled by SW)
			
			<legal all>

associated_link_descriptor_counter
			
			Indicates which of the 3 link descriptor counters shall
			be incremented or decremented when link descriptors are
			added or removed from this flow queue.
			
			MSDU link descriptors related with MPDUs stored in the
			re-order buffer shall also be included in this count.
			
			
			
			<legal 0-2>

disable_duplicate_detection
			
			When set, do not perform any duplicate detection.
			
			
			
			<legal all>

soft_reorder_enable
			
			When set, REO has been instructed to not perform the
			actual re-ordering of frames for this queue, but just to
			insert the reorder opcodes.
			
			
			
			Note that this implies that REO is also not going to
			perform any MSDU level operations, and the entire MPDU (and
			thus pointer to the MSDU link descriptor) will be pushed to
			a destination ring that SW has programmed in a SW
			programmable configuration register in REO
			
			
			
			<legal all>

ac
			
			Indicates which access category the queue descriptor
			belongs to(filled by SW)
			
			<legal all>

bar
			
			Indicates if  BAR has been received (mostly used for
			debug purpose and this is filled by REO)
			
			<legal all>

rty
			
			Retry bit is checked if this bit is set.  
			
			<legal all>

chk_2k_mode
			
			Indicates what type of operation is expected from Reo
			when the received frame SN falls within the 2K window
			
			
			
			See REO MLD document for programming details.
			
			<legal all>

oor_mode
			
			Out of Order mode:
			
			Indicates what type of operation is expected when the
			received frame falls within the OOR window.
			
			
			
			See REO MLD document for programming details.
			
			<legal all>

ba_window_size
			
			Indicates the negotiated (window size + 1). 
			
			it can go up to Max of 256bits.
			
			
			
			A value 255 means 256 bitmap, 63 means 64 bitmap, 0
			(means non-BA session, with window size of 0). The 3 values
			here are the main values validated, but other values should
			work as well.
			
			
			
			A BA window size of 0 (=> one frame entry bitmat), means
			that there is NO RX_REO_QUEUE_EXT descriptor following this
			RX_REO_QUEUE STRUCT in memory
			
			
			
			A BA window size of 1 - 105, means that there is 1
			RX_REO_QUEUE_EXT descriptor directly following this
			RX_REO_QUEUE STRUCT in memory.
			
			
			
			A BA window size of 106 - 210, means that there are 2
			RX_REO_QUEUE_EXT descriptors directly following this
			RX_REO_QUEUE STRUCT in memory
			
			
			
			A BA window size of 211 - 256, means that there are 3
			RX_REO_QUEUE_EXT descriptors directly following this
			RX_REO_QUEUE STRUCT in memory
			
			
			
			<legal 0 - 255>

pn_check_needed
			
			When set, REO shall perform the PN increment check
			
			<legal all>

pn_shall_be_even
			
			Field only valid when 'pn_check_needed' is set.
			
			
			
			When set, REO shall confirm that the received PN number
			is not only incremented, but also always an even number
			
			<legal all>

pn_shall_be_uneven
			
			Field only valid when 'pn_check_needed' is set.
			
			
			
			When set, REO shall confirm that the received PN number
			is not only incremented, but also always an uneven number
			
			<legal all>

pn_handling_enable
			
			Field only valid when 'pn_check_needed' is set.
			
			
			
			When set, and REO detected a PN error, HW shall set the
			'pn_error_detected_flag'.
			
			<legal all>

pn_size
			
			Size of the PN field check.
			
			Needed for wrap around handling...
			
			
			
			<enum 0     pn_size_24>
			
			<enum 1     pn_size_48>
			
			<enum 2     pn_size_128>
			
			
			
			<legal 0-2>

ignore_ampdu_flag
			
			When set, REO shall ignore the ampdu_flag on the
			entrance descriptor for this queue.
			
			<legal all>

reserved_2b
			
			<legal 0>

svld
			
			Sequence number in next field is valid one. It can be
			filled by SW if the want to fill in the any negotiated SSN,
			otherwise REO will fill the sequence number of first
			received packet and set this bit to 1.
			
			<legal all>

ssn
			
			Starting Sequence number of the session, this changes
			whenever window moves. (can be filled by SW then maintained
			by REO)
			
			<legal all>

current_index
			
			Points to last forwarded packet
			
			<legal all>

seq_2k_error_detected_flag
			
			Set by REO, can only be cleared by SW
			
			
			
			When set, REO has detected a 2k error jump in the
			sequence number and from that moment forward, all new frames
			are forwarded directly to FW, without duplicate detect,
			reordering, etc.
			
			<legal all>

pn_error_detected_flag
			
			Set by REO, can only be cleared by SW
			
			
			
			When set, REO has detected a PN error and from that
			moment forward, all new frames are forwarded directly to FW,
			without duplicate detect, reordering, etc.
			
			<legal all>

reserved_3a
			
			<legal 0>

pn_valid
			
			PN number in next fields are valid. It can be filled by
			SW if it wants to fill in the any negotiated SSN, otherwise
			REO will fill the pn based on the first received packet and
			set this bit to 1.
			
			<legal all>

pn_31_0
			
			
			<legal all>

pn_63_32
			
			Bits [63:32] of the PN number.  
			
			<legal all> 

pn_95_64
			
			Bits [95:64] of the PN number.  
			
			<legal all>

pn_127_96
			
			Bits [127:96] of the PN number.  
			
			<legal all>

last_rx_enqueue_timestamp
			
			This timestamp is updated when an MPDU is received and
			accesses this Queue Descriptor. It does not include the
			access due to Command TLVs or Aging (which will be updated
			in Last_rx_dequeue_timestamp).
			
			<legal all>

last_rx_dequeue_timestamp
			
			This timestamp is used for Aging. When an MPDU or
			multiple MPDUs are forwarded, either due to window movement,
			bar, aging or command flush, this timestamp is updated. Also
			when the bitmap is all zero and the first time an MPDU is
			queued (opcode=QCUR), this timestamp is updated for aging.
			
			<legal all>

ptr_to_next_aging_queue_31_0
			
			Address  (address bits 31-0)of next RX_REO_QUEUE
			descriptor in the 'receive timestamp' ordered list.
			
			From it the Position of this queue descriptor in the per
			AC aging waitlist  can be derived.
			
			Value 0x0 indicates the 'NULL' pointer which implies
			that this is the last entry in the list.
			
			<legal all>

ptr_to_next_aging_queue_39_32
			
			Address  (address bits 39-32)of next RX_REO_QUEUE
			descriptor in the 'receive timestamp' ordered list.
			
			From it the Position of this queue descriptor in the per
			AC aging waitlist  can be derived.
			
			Value 0x0 indicates the 'NULL' pointer which implies
			that this is the last entry in the list.
			
			<legal all>

reserved_11a
			
			<legal 0>

ptr_to_previous_aging_queue_31_0
			
			Address  (address bits 31-0)of next RX_REO_QUEUE
			descriptor in the 'receive timestamp' ordered list.
			
			From it the Position of this queue descriptor in the per
			AC aging waitlist  can be derived.
			
			Value 0x0 indicates the 'NULL' pointer which implies
			that this is the first entry in the list.
			
			<legal all>

ptr_to_previous_aging_queue_39_32
			
			Address  (address bits 39-32)of next RX_REO_QUEUE
			descriptor in the 'receive timestamp' ordered list.
			
			From it the Position of this queue descriptor in the per
			AC aging waitlist  can be derived.
			
			Value 0x0 indicates the 'NULL' pointer which implies
			that this is the first entry in the list.
			
			<legal all>

reserved_13a
			
			<legal 0>

rx_bitmap_31_0
			
			When a bit is set, the corresponding frame is currently
			held in the re-order queue.
			
			The bitmap  is Fully managed by HW. 
			
			SW shall init this to 0, and then never ever change it
			
			<legal all>

rx_bitmap_63_32
			
			See Rx_bitmap_31_0 description
			
			<legal all>

rx_bitmap_95_64
			
			See Rx_bitmap_31_0 description
			
			<legal all>

rx_bitmap_127_96
			
			See Rx_bitmap_31_0 description
			
			<legal all>

rx_bitmap_159_128
			
			See Rx_bitmap_31_0 description
			
			<legal all>

rx_bitmap_191_160
			
			See Rx_bitmap_31_0 description
			
			<legal all>

rx_bitmap_223_192
			
			See Rx_bitmap_31_0 description
			
			<legal all>

rx_bitmap_255_224
			
			See Rx_bitmap_31_0 description
			
			<legal all>

current_mpdu_count
			
			The number of MPDUs in the queue.
			
			
			
			<legal all>

current_msdu_count
			
			The number of MSDUs in the queue.
			
			<legal all>

reserved_23
			
			<legal 0>

timeout_count
			
			The number of times that REO started forwarding frames
			even though there is a hole in the bitmap. Forwarding reason
			is Timeout
			
			
			
			The counter saturates and freezes at 0x3F
			
			
			
			<legal all>

forward_due_to_bar_count
			
			The number of times that REO started forwarding frames
			even though there is a hole in the bitmap. Forwarding reason
			is reception of BAR frame.
			
			
			
			The counter saturates and freezes at 0x3F
			
			
			
			<legal all>

duplicate_count
			
			The number of duplicate frames that have been detected
			
			<legal all>

frames_in_order_count
			
			The number of frames that have been received in order
			(without a hole that prevented them from being forwarded
			immediately)
			
			
			
			This corresponds to the Reorder opcodes:
			
			'FWDCUR' and 'FWD BUF'
			
			
			
			<legal all>

bar_received_count
			
			The number of times a BAR frame is received.
			
			
			
			This corresponds to the Reorder opcodes with 'DROP'
			
			
			
			The counter saturates and freezes at 0xFF
			
			<legal all>

mpdu_frames_processed_count
			
			The total number of MPDU frames that have been processed
			by REO. 'Processing' here means that REO has received them
			out of the entrance ring, and retrieved the corresponding
			RX_REO_QUEUE Descriptor. 
			
			
			
			Note that this count includes duplicates, frames that
			later had errors, etc.
			
			
			
			Note that field 'Duplicate_count' indicates how many of
			these MPDUs were duplicates.
			
			
			
			<legal all>

msdu_frames_processed_count
			
			The total number of MSDU frames that have been processed
			by REO. 'Processing' here means that REO has received them
			out of the entrance ring, and retrieved the corresponding
			RX_REO_QUEUE Descriptor. 
			
			
			
			Note that this count includes duplicates, frames that
			later had errors, etc.
			
			
			
			<legal all>

total_processed_byte_count
			
			An approximation of the number of bytes processed for
			this queue. 
			
			'Processing' here means that REO has received them out
			of the entrance ring, and retrieved the corresponding
			RX_REO_QUEUE Descriptor. 
			
			
			
			Note that this count includes duplicates, frames that
			later had errors, etc.
			
			
			
			In 64 byte units
			
			<legal all>

late_receive_mpdu_count
			
			The number of MPDUs received after the window had
			already moved on. The 'late' sequence window is defined as
			(Window SSN - 256) - (Window SSN - 1)
			
			
			
			This corresponds with Out of order detection in
			duplicate detect FSM
			
			
			
			The counter saturates and freezes at 0xFFF
			
			
			
			<legal all>

window_jump_2k
			
			The number of times the window moved more then 2K
			
			
			
			The counter saturates and freezes at 0xF
			
			
			
			(Note: field name can not start with number: previous
			2k_window_jump)
			
			
			
			<legal all>

hole_count
			
			The number of times a hole was created in the receive
			bitmap.
			
			
			
			This corresponds to the Reorder opcodes with 'QCUR'
			
			
			
			<legal all>

reserved_29
			
			<legal 0>

reserved_30
			
			<legal 0>

reserved_31
			
			<legal 0>
*/


 /* EXTERNAL REFERENCE : struct uniform_descriptor_header descriptor_header */ 


/* Description		RX_REO_QUEUE_0_DESCRIPTOR_HEADER_OWNER
			
			Consumer: In DEBUG mode: WBM, TQM, TXDMA, RXDMA, REO
			
			Producer: In DEBUG mode: WBM, TQM, TXDMA, RXDMA, REO 
			
			
			
			The owner of this data structure:
			
			<enum 0 WBM_owned> Buffer Manager currently owns this
			data structure.
			
			<enum 1 SW_OR_FW_owned> Software of FW currently owns
			this data structure.
			
			<enum 2 TQM_owned> Transmit Queue Manager currently owns
			this data structure.
			
			<enum 3 RXDMA_owned> Receive DMA currently owns this
			data structure.
			
			<enum 4 REO_owned> Reorder currently owns this data
			structure.
			
			<enum 5 SWITCH_owned> SWITCH currently owns this data
			structure.
			
			
			
			<legal 0-5> 
*/
#define RX_REO_QUEUE_0_DESCRIPTOR_HEADER_OWNER_OFFSET                0x00000000
#define RX_REO_QUEUE_0_DESCRIPTOR_HEADER_OWNER_LSB                   0
#define RX_REO_QUEUE_0_DESCRIPTOR_HEADER_OWNER_MASK                  0x0000000f

/* Description		RX_REO_QUEUE_0_DESCRIPTOR_HEADER_BUFFER_TYPE
			
			Consumer: In DEBUG mode: WBM, TQM, TXDMA, RXDMA, REO
			
			Producer: In DEBUG mode: WBM, TQM, TXDMA, RXDMA, REO 
			
			
			
			Field describing what contents format is of this
			descriptor
			
			
			
			<enum 0 Transmit_MSDU_Link_descriptor > 
			
			<enum 1 Transmit_MPDU_Link_descriptor > 
			
			<enum 2 Transmit_MPDU_Queue_head_descriptor>
			
			<enum 3 Transmit_MPDU_Queue_ext_descriptor>
			
			<enum 4 Transmit_flow_descriptor>
			
			<enum 5 Transmit_buffer > NOT TO BE USED: 
			
			
			
			<enum 6 Receive_MSDU_Link_descriptor >
			
			<enum 7 Receive_MPDU_Link_descriptor >
			
			<enum 8 Receive_REO_queue_descriptor >
			
			<enum 9 Receive_REO_queue_ext_descriptor >
			
			
			
			<enum 10 Receive_buffer >
			
			
			
			<enum 11 Idle_link_list_entry>
			
			
			
			<legal 0-11> 
*/
#define RX_REO_QUEUE_0_DESCRIPTOR_HEADER_BUFFER_TYPE_OFFSET          0x00000000
#define RX_REO_QUEUE_0_DESCRIPTOR_HEADER_BUFFER_TYPE_LSB             4
#define RX_REO_QUEUE_0_DESCRIPTOR_HEADER_BUFFER_TYPE_MASK            0x000000f0

/* Description		RX_REO_QUEUE_0_DESCRIPTOR_HEADER_RESERVED_0A
			
			<legal 0>
*/
#define RX_REO_QUEUE_0_DESCRIPTOR_HEADER_RESERVED_0A_OFFSET          0x00000000
#define RX_REO_QUEUE_0_DESCRIPTOR_HEADER_RESERVED_0A_LSB             8
#define RX_REO_QUEUE_0_DESCRIPTOR_HEADER_RESERVED_0A_MASK            0xffffff00

/* Description		RX_REO_QUEUE_1_RECEIVE_QUEUE_NUMBER
			
			Indicates the MPDU queue ID to which this MPDU link
			descriptor belongs
			
			Used for tracking and debugging
			
			<legal all>
*/
#define RX_REO_QUEUE_1_RECEIVE_QUEUE_NUMBER_OFFSET                   0x00000004
#define RX_REO_QUEUE_1_RECEIVE_QUEUE_NUMBER_LSB                      0
#define RX_REO_QUEUE_1_RECEIVE_QUEUE_NUMBER_MASK                     0x0000ffff

/* Description		RX_REO_QUEUE_1_RESERVED_1B
			
			<legal 0>
*/
#define RX_REO_QUEUE_1_RESERVED_1B_OFFSET                            0x00000004
#define RX_REO_QUEUE_1_RESERVED_1B_LSB                               16
#define RX_REO_QUEUE_1_RESERVED_1B_MASK                              0xffff0000

/* Description		RX_REO_QUEUE_2_VLD
			
			Valid bit indicating a session is established and the
			queue descriptor is valid(Filled by SW)
			
			<legal all>
*/
#define RX_REO_QUEUE_2_VLD_OFFSET                                    0x00000008
#define RX_REO_QUEUE_2_VLD_LSB                                       0
#define RX_REO_QUEUE_2_VLD_MASK                                      0x00000001

/* Description		RX_REO_QUEUE_2_ASSOCIATED_LINK_DESCRIPTOR_COUNTER
			
			Indicates which of the 3 link descriptor counters shall
			be incremented or decremented when link descriptors are
			added or removed from this flow queue.
			
			MSDU link descriptors related with MPDUs stored in the
			re-order buffer shall also be included in this count.
			
			
			
			<legal 0-2>
*/
#define RX_REO_QUEUE_2_ASSOCIATED_LINK_DESCRIPTOR_COUNTER_OFFSET     0x00000008
#define RX_REO_QUEUE_2_ASSOCIATED_LINK_DESCRIPTOR_COUNTER_LSB        1
#define RX_REO_QUEUE_2_ASSOCIATED_LINK_DESCRIPTOR_COUNTER_MASK       0x00000006

/* Description		RX_REO_QUEUE_2_DISABLE_DUPLICATE_DETECTION
			
			When set, do not perform any duplicate detection.
			
			
			
			<legal all>
*/
#define RX_REO_QUEUE_2_DISABLE_DUPLICATE_DETECTION_OFFSET            0x00000008
#define RX_REO_QUEUE_2_DISABLE_DUPLICATE_DETECTION_LSB               3
#define RX_REO_QUEUE_2_DISABLE_DUPLICATE_DETECTION_MASK              0x00000008

/* Description		RX_REO_QUEUE_2_SOFT_REORDER_ENABLE
			
			When set, REO has been instructed to not perform the
			actual re-ordering of frames for this queue, but just to
			insert the reorder opcodes.
			
			
			
			Note that this implies that REO is also not going to
			perform any MSDU level operations, and the entire MPDU (and
			thus pointer to the MSDU link descriptor) will be pushed to
			a destination ring that SW has programmed in a SW
			programmable configuration register in REO
			
			
			
			<legal all>
*/
#define RX_REO_QUEUE_2_SOFT_REORDER_ENABLE_OFFSET                    0x00000008
#define RX_REO_QUEUE_2_SOFT_REORDER_ENABLE_LSB                       4
#define RX_REO_QUEUE_2_SOFT_REORDER_ENABLE_MASK                      0x00000010

/* Description		RX_REO_QUEUE_2_AC
			
			Indicates which access category the queue descriptor
			belongs to(filled by SW)
			
			<legal all>
*/
#define RX_REO_QUEUE_2_AC_OFFSET                                     0x00000008
#define RX_REO_QUEUE_2_AC_LSB                                        5
#define RX_REO_QUEUE_2_AC_MASK                                       0x00000060

/* Description		RX_REO_QUEUE_2_BAR
			
			Indicates if  BAR has been received (mostly used for
			debug purpose and this is filled by REO)
			
			<legal all>
*/
#define RX_REO_QUEUE_2_BAR_OFFSET                                    0x00000008
#define RX_REO_QUEUE_2_BAR_LSB                                       7
#define RX_REO_QUEUE_2_BAR_MASK                                      0x00000080

/* Description		RX_REO_QUEUE_2_RTY
			
			Retry bit is checked if this bit is set.  
			
			<legal all>
*/
#define RX_REO_QUEUE_2_RTY_OFFSET                                    0x00000008
#define RX_REO_QUEUE_2_RTY_LSB                                       8
#define RX_REO_QUEUE_2_RTY_MASK                                      0x00000100

/* Description		RX_REO_QUEUE_2_CHK_2K_MODE
			
			Indicates what type of operation is expected from Reo
			when the received frame SN falls within the 2K window
			
			
			
			See REO MLD document for programming details.
			
			<legal all>
*/
#define RX_REO_QUEUE_2_CHK_2K_MODE_OFFSET                            0x00000008
#define RX_REO_QUEUE_2_CHK_2K_MODE_LSB                               9
#define RX_REO_QUEUE_2_CHK_2K_MODE_MASK                              0x00000200

/* Description		RX_REO_QUEUE_2_OOR_MODE
			
			Out of Order mode:
			
			Indicates what type of operation is expected when the
			received frame falls within the OOR window.
			
			
			
			See REO MLD document for programming details.
			
			<legal all>
*/
#define RX_REO_QUEUE_2_OOR_MODE_OFFSET                               0x00000008
#define RX_REO_QUEUE_2_OOR_MODE_LSB                                  10
#define RX_REO_QUEUE_2_OOR_MODE_MASK                                 0x00000400

/* Description		RX_REO_QUEUE_2_BA_WINDOW_SIZE
			
			Indicates the negotiated (window size + 1). 
			
			it can go up to Max of 256bits.
			
			
			
			A value 255 means 256 bitmap, 63 means 64 bitmap, 0
			(means non-BA session, with window size of 0). The 3 values
			here are the main values validated, but other values should
			work as well.
			
			
			
			A BA window size of 0 (=> one frame entry bitmat), means
			that there is NO RX_REO_QUEUE_EXT descriptor following this
			RX_REO_QUEUE STRUCT in memory
			
			
			
			A BA window size of 1 - 105, means that there is 1
			RX_REO_QUEUE_EXT descriptor directly following this
			RX_REO_QUEUE STRUCT in memory.
			
			
			
			A BA window size of 106 - 210, means that there are 2
			RX_REO_QUEUE_EXT descriptors directly following this
			RX_REO_QUEUE STRUCT in memory
			
			
			
			A BA window size of 211 - 256, means that there are 3
			RX_REO_QUEUE_EXT descriptors directly following this
			RX_REO_QUEUE STRUCT in memory
			
			
			
			<legal 0 - 255>
*/
#define RX_REO_QUEUE_2_BA_WINDOW_SIZE_OFFSET                         0x00000008
#define RX_REO_QUEUE_2_BA_WINDOW_SIZE_LSB                            11
#define RX_REO_QUEUE_2_BA_WINDOW_SIZE_MASK                           0x0007f800

/* Description		RX_REO_QUEUE_2_PN_CHECK_NEEDED
			
			When set, REO shall perform the PN increment check
			
			<legal all>
*/
#define RX_REO_QUEUE_2_PN_CHECK_NEEDED_OFFSET                        0x00000008
#define RX_REO_QUEUE_2_PN_CHECK_NEEDED_LSB                           19
#define RX_REO_QUEUE_2_PN_CHECK_NEEDED_MASK                          0x00080000

/* Description		RX_REO_QUEUE_2_PN_SHALL_BE_EVEN
			
			Field only valid when 'pn_check_needed' is set.
			
			
			
			When set, REO shall confirm that the received PN number
			is not only incremented, but also always an even number
			
			<legal all>
*/
#define RX_REO_QUEUE_2_PN_SHALL_BE_EVEN_OFFSET                       0x00000008
#define RX_REO_QUEUE_2_PN_SHALL_BE_EVEN_LSB                          20
#define RX_REO_QUEUE_2_PN_SHALL_BE_EVEN_MASK                         0x00100000

/* Description		RX_REO_QUEUE_2_PN_SHALL_BE_UNEVEN
			
			Field only valid when 'pn_check_needed' is set.
			
			
			
			When set, REO shall confirm that the received PN number
			is not only incremented, but also always an uneven number
			
			<legal all>
*/
#define RX_REO_QUEUE_2_PN_SHALL_BE_UNEVEN_OFFSET                     0x00000008
#define RX_REO_QUEUE_2_PN_SHALL_BE_UNEVEN_LSB                        21
#define RX_REO_QUEUE_2_PN_SHALL_BE_UNEVEN_MASK                       0x00200000

/* Description		RX_REO_QUEUE_2_PN_HANDLING_ENABLE
			
			Field only valid when 'pn_check_needed' is set.
			
			
			
			When set, and REO detected a PN error, HW shall set the
			'pn_error_detected_flag'.
			
			<legal all>
*/
#define RX_REO_QUEUE_2_PN_HANDLING_ENABLE_OFFSET                     0x00000008
#define RX_REO_QUEUE_2_PN_HANDLING_ENABLE_LSB                        22
#define RX_REO_QUEUE_2_PN_HANDLING_ENABLE_MASK                       0x00400000

/* Description		RX_REO_QUEUE_2_PN_SIZE
			
			Size of the PN field check.
			
			Needed for wrap around handling...
			
			
			
			<enum 0     pn_size_24>
			
			<enum 1     pn_size_48>
			
			<enum 2     pn_size_128>
			
			
			
			<legal 0-2>
*/
#define RX_REO_QUEUE_2_PN_SIZE_OFFSET                                0x00000008
#define RX_REO_QUEUE_2_PN_SIZE_LSB                                   23
#define RX_REO_QUEUE_2_PN_SIZE_MASK                                  0x01800000

/* Description		RX_REO_QUEUE_2_IGNORE_AMPDU_FLAG
			
			When set, REO shall ignore the ampdu_flag on the
			entrance descriptor for this queue.
			
			<legal all>
*/
#define RX_REO_QUEUE_2_IGNORE_AMPDU_FLAG_OFFSET                      0x00000008
#define RX_REO_QUEUE_2_IGNORE_AMPDU_FLAG_LSB                         25
#define RX_REO_QUEUE_2_IGNORE_AMPDU_FLAG_MASK                        0x02000000

/* Description		RX_REO_QUEUE_2_RESERVED_2B
			
			<legal 0>
*/
#define RX_REO_QUEUE_2_RESERVED_2B_OFFSET                            0x00000008
#define RX_REO_QUEUE_2_RESERVED_2B_LSB                               26
#define RX_REO_QUEUE_2_RESERVED_2B_MASK                              0xfc000000

/* Description		RX_REO_QUEUE_3_SVLD
			
			Sequence number in next field is valid one. It can be
			filled by SW if the want to fill in the any negotiated SSN,
			otherwise REO will fill the sequence number of first
			received packet and set this bit to 1.
			
			<legal all>
*/
#define RX_REO_QUEUE_3_SVLD_OFFSET                                   0x0000000c
#define RX_REO_QUEUE_3_SVLD_LSB                                      0
#define RX_REO_QUEUE_3_SVLD_MASK                                     0x00000001

/* Description		RX_REO_QUEUE_3_SSN
			
			Starting Sequence number of the session, this changes
			whenever window moves. (can be filled by SW then maintained
			by REO)
			
			<legal all>
*/
#define RX_REO_QUEUE_3_SSN_OFFSET                                    0x0000000c
#define RX_REO_QUEUE_3_SSN_LSB                                       1
#define RX_REO_QUEUE_3_SSN_MASK                                      0x00001ffe

/* Description		RX_REO_QUEUE_3_CURRENT_INDEX
			
			Points to last forwarded packet
			
			<legal all>
*/
#define RX_REO_QUEUE_3_CURRENT_INDEX_OFFSET                          0x0000000c
#define RX_REO_QUEUE_3_CURRENT_INDEX_LSB                             13
#define RX_REO_QUEUE_3_CURRENT_INDEX_MASK                            0x001fe000

/* Description		RX_REO_QUEUE_3_SEQ_2K_ERROR_DETECTED_FLAG
			
			Set by REO, can only be cleared by SW
			
			
			
			When set, REO has detected a 2k error jump in the
			sequence number and from that moment forward, all new frames
			are forwarded directly to FW, without duplicate detect,
			reordering, etc.
			
			<legal all>
*/
#define RX_REO_QUEUE_3_SEQ_2K_ERROR_DETECTED_FLAG_OFFSET             0x0000000c
#define RX_REO_QUEUE_3_SEQ_2K_ERROR_DETECTED_FLAG_LSB                21
#define RX_REO_QUEUE_3_SEQ_2K_ERROR_DETECTED_FLAG_MASK               0x00200000

/* Description		RX_REO_QUEUE_3_PN_ERROR_DETECTED_FLAG
			
			Set by REO, can only be cleared by SW
			
			
			
			When set, REO has detected a PN error and from that
			moment forward, all new frames are forwarded directly to FW,
			without duplicate detect, reordering, etc.
			
			<legal all>
*/
#define RX_REO_QUEUE_3_PN_ERROR_DETECTED_FLAG_OFFSET                 0x0000000c
#define RX_REO_QUEUE_3_PN_ERROR_DETECTED_FLAG_LSB                    22
#define RX_REO_QUEUE_3_PN_ERROR_DETECTED_FLAG_MASK                   0x00400000

/* Description		RX_REO_QUEUE_3_RESERVED_3A
			
			<legal 0>
*/
#define RX_REO_QUEUE_3_RESERVED_3A_OFFSET                            0x0000000c
#define RX_REO_QUEUE_3_RESERVED_3A_LSB                               23
#define RX_REO_QUEUE_3_RESERVED_3A_MASK                              0x7f800000

/* Description		RX_REO_QUEUE_3_PN_VALID
			
			PN number in next fields are valid. It can be filled by
			SW if it wants to fill in the any negotiated SSN, otherwise
			REO will fill the pn based on the first received packet and
			set this bit to 1.
			
			<legal all>
*/
#define RX_REO_QUEUE_3_PN_VALID_OFFSET                               0x0000000c
#define RX_REO_QUEUE_3_PN_VALID_LSB                                  31
#define RX_REO_QUEUE_3_PN_VALID_MASK                                 0x80000000

/* Description		RX_REO_QUEUE_4_PN_31_0
			
			
			<legal all>
*/
#define RX_REO_QUEUE_4_PN_31_0_OFFSET                                0x00000010
#define RX_REO_QUEUE_4_PN_31_0_LSB                                   0
#define RX_REO_QUEUE_4_PN_31_0_MASK                                  0xffffffff

/* Description		RX_REO_QUEUE_5_PN_63_32
			
			Bits [63:32] of the PN number.  
			
			<legal all> 
*/
#define RX_REO_QUEUE_5_PN_63_32_OFFSET                               0x00000014
#define RX_REO_QUEUE_5_PN_63_32_LSB                                  0
#define RX_REO_QUEUE_5_PN_63_32_MASK                                 0xffffffff

/* Description		RX_REO_QUEUE_6_PN_95_64
			
			Bits [95:64] of the PN number.  
			
			<legal all>
*/
#define RX_REO_QUEUE_6_PN_95_64_OFFSET                               0x00000018
#define RX_REO_QUEUE_6_PN_95_64_LSB                                  0
#define RX_REO_QUEUE_6_PN_95_64_MASK                                 0xffffffff

/* Description		RX_REO_QUEUE_7_PN_127_96
			
			Bits [127:96] of the PN number.  
			
			<legal all>
*/
#define RX_REO_QUEUE_7_PN_127_96_OFFSET                              0x0000001c
#define RX_REO_QUEUE_7_PN_127_96_LSB                                 0
#define RX_REO_QUEUE_7_PN_127_96_MASK                                0xffffffff

/* Description		RX_REO_QUEUE_8_LAST_RX_ENQUEUE_TIMESTAMP
			
			This timestamp is updated when an MPDU is received and
			accesses this Queue Descriptor. It does not include the
			access due to Command TLVs or Aging (which will be updated
			in Last_rx_dequeue_timestamp).
			
			<legal all>
*/
#define RX_REO_QUEUE_8_LAST_RX_ENQUEUE_TIMESTAMP_OFFSET              0x00000020
#define RX_REO_QUEUE_8_LAST_RX_ENQUEUE_TIMESTAMP_LSB                 0
#define RX_REO_QUEUE_8_LAST_RX_ENQUEUE_TIMESTAMP_MASK                0xffffffff

/* Description		RX_REO_QUEUE_9_LAST_RX_DEQUEUE_TIMESTAMP
			
			This timestamp is used for Aging. When an MPDU or
			multiple MPDUs are forwarded, either due to window movement,
			bar, aging or command flush, this timestamp is updated. Also
			when the bitmap is all zero and the first time an MPDU is
			queued (opcode=QCUR), this timestamp is updated for aging.
			
			<legal all>
*/
#define RX_REO_QUEUE_9_LAST_RX_DEQUEUE_TIMESTAMP_OFFSET              0x00000024
#define RX_REO_QUEUE_9_LAST_RX_DEQUEUE_TIMESTAMP_LSB                 0
#define RX_REO_QUEUE_9_LAST_RX_DEQUEUE_TIMESTAMP_MASK                0xffffffff

/* Description		RX_REO_QUEUE_10_PTR_TO_NEXT_AGING_QUEUE_31_0
			
			Address  (address bits 31-0)of next RX_REO_QUEUE
			descriptor in the 'receive timestamp' ordered list.
			
			From it the Position of this queue descriptor in the per
			AC aging waitlist  can be derived.
			
			Value 0x0 indicates the 'NULL' pointer which implies
			that this is the last entry in the list.
			
			<legal all>
*/
#define RX_REO_QUEUE_10_PTR_TO_NEXT_AGING_QUEUE_31_0_OFFSET          0x00000028
#define RX_REO_QUEUE_10_PTR_TO_NEXT_AGING_QUEUE_31_0_LSB             0
#define RX_REO_QUEUE_10_PTR_TO_NEXT_AGING_QUEUE_31_0_MASK            0xffffffff

/* Description		RX_REO_QUEUE_11_PTR_TO_NEXT_AGING_QUEUE_39_32
			
			Address  (address bits 39-32)of next RX_REO_QUEUE
			descriptor in the 'receive timestamp' ordered list.
			
			From it the Position of this queue descriptor in the per
			AC aging waitlist  can be derived.
			
			Value 0x0 indicates the 'NULL' pointer which implies
			that this is the last entry in the list.
			
			<legal all>
*/
#define RX_REO_QUEUE_11_PTR_TO_NEXT_AGING_QUEUE_39_32_OFFSET         0x0000002c
#define RX_REO_QUEUE_11_PTR_TO_NEXT_AGING_QUEUE_39_32_LSB            0
#define RX_REO_QUEUE_11_PTR_TO_NEXT_AGING_QUEUE_39_32_MASK           0x000000ff

/* Description		RX_REO_QUEUE_11_RESERVED_11A
			
			<legal 0>
*/
#define RX_REO_QUEUE_11_RESERVED_11A_OFFSET                          0x0000002c
#define RX_REO_QUEUE_11_RESERVED_11A_LSB                             8
#define RX_REO_QUEUE_11_RESERVED_11A_MASK                            0xffffff00

/* Description		RX_REO_QUEUE_12_PTR_TO_PREVIOUS_AGING_QUEUE_31_0
			
			Address  (address bits 31-0)of next RX_REO_QUEUE
			descriptor in the 'receive timestamp' ordered list.
			
			From it the Position of this queue descriptor in the per
			AC aging waitlist  can be derived.
			
			Value 0x0 indicates the 'NULL' pointer which implies
			that this is the first entry in the list.
			
			<legal all>
*/
#define RX_REO_QUEUE_12_PTR_TO_PREVIOUS_AGING_QUEUE_31_0_OFFSET      0x00000030
#define RX_REO_QUEUE_12_PTR_TO_PREVIOUS_AGING_QUEUE_31_0_LSB         0
#define RX_REO_QUEUE_12_PTR_TO_PREVIOUS_AGING_QUEUE_31_0_MASK        0xffffffff

/* Description		RX_REO_QUEUE_13_PTR_TO_PREVIOUS_AGING_QUEUE_39_32
			
			Address  (address bits 39-32)of next RX_REO_QUEUE
			descriptor in the 'receive timestamp' ordered list.
			
			From it the Position of this queue descriptor in the per
			AC aging waitlist  can be derived.
			
			Value 0x0 indicates the 'NULL' pointer which implies
			that this is the first entry in the list.
			
			<legal all>
*/
#define RX_REO_QUEUE_13_PTR_TO_PREVIOUS_AGING_QUEUE_39_32_OFFSET     0x00000034
#define RX_REO_QUEUE_13_PTR_TO_PREVIOUS_AGING_QUEUE_39_32_LSB        0
#define RX_REO_QUEUE_13_PTR_TO_PREVIOUS_AGING_QUEUE_39_32_MASK       0x000000ff

/* Description		RX_REO_QUEUE_13_RESERVED_13A
			
			<legal 0>
*/
#define RX_REO_QUEUE_13_RESERVED_13A_OFFSET                          0x00000034
#define RX_REO_QUEUE_13_RESERVED_13A_LSB                             8
#define RX_REO_QUEUE_13_RESERVED_13A_MASK                            0xffffff00

/* Description		RX_REO_QUEUE_14_RX_BITMAP_31_0
			
			When a bit is set, the corresponding frame is currently
			held in the re-order queue.
			
			The bitmap  is Fully managed by HW. 
			
			SW shall init this to 0, and then never ever change it
			
			<legal all>
*/
#define RX_REO_QUEUE_14_RX_BITMAP_31_0_OFFSET                        0x00000038
#define RX_REO_QUEUE_14_RX_BITMAP_31_0_LSB                           0
#define RX_REO_QUEUE_14_RX_BITMAP_31_0_MASK                          0xffffffff

/* Description		RX_REO_QUEUE_15_RX_BITMAP_63_32
			
			See Rx_bitmap_31_0 description
			
			<legal all>
*/
#define RX_REO_QUEUE_15_RX_BITMAP_63_32_OFFSET                       0x0000003c
#define RX_REO_QUEUE_15_RX_BITMAP_63_32_LSB                          0
#define RX_REO_QUEUE_15_RX_BITMAP_63_32_MASK                         0xffffffff

/* Description		RX_REO_QUEUE_16_RX_BITMAP_95_64
			
			See Rx_bitmap_31_0 description
			
			<legal all>
*/
#define RX_REO_QUEUE_16_RX_BITMAP_95_64_OFFSET                       0x00000040
#define RX_REO_QUEUE_16_RX_BITMAP_95_64_LSB                          0
#define RX_REO_QUEUE_16_RX_BITMAP_95_64_MASK                         0xffffffff

/* Description		RX_REO_QUEUE_17_RX_BITMAP_127_96
			
			See Rx_bitmap_31_0 description
			
			<legal all>
*/
#define RX_REO_QUEUE_17_RX_BITMAP_127_96_OFFSET                      0x00000044
#define RX_REO_QUEUE_17_RX_BITMAP_127_96_LSB                         0
#define RX_REO_QUEUE_17_RX_BITMAP_127_96_MASK                        0xffffffff

/* Description		RX_REO_QUEUE_18_RX_BITMAP_159_128
			
			See Rx_bitmap_31_0 description
			
			<legal all>
*/
#define RX_REO_QUEUE_18_RX_BITMAP_159_128_OFFSET                     0x00000048
#define RX_REO_QUEUE_18_RX_BITMAP_159_128_LSB                        0
#define RX_REO_QUEUE_18_RX_BITMAP_159_128_MASK                       0xffffffff

/* Description		RX_REO_QUEUE_19_RX_BITMAP_191_160
			
			See Rx_bitmap_31_0 description
			
			<legal all>
*/
#define RX_REO_QUEUE_19_RX_BITMAP_191_160_OFFSET                     0x0000004c
#define RX_REO_QUEUE_19_RX_BITMAP_191_160_LSB                        0
#define RX_REO_QUEUE_19_RX_BITMAP_191_160_MASK                       0xffffffff

/* Description		RX_REO_QUEUE_20_RX_BITMAP_223_192
			
			See Rx_bitmap_31_0 description
			
			<legal all>
*/
#define RX_REO_QUEUE_20_RX_BITMAP_223_192_OFFSET                     0x00000050
#define RX_REO_QUEUE_20_RX_BITMAP_223_192_LSB                        0
#define RX_REO_QUEUE_20_RX_BITMAP_223_192_MASK                       0xffffffff

/* Description		RX_REO_QUEUE_21_RX_BITMAP_255_224
			
			See Rx_bitmap_31_0 description
			
			<legal all>
*/
#define RX_REO_QUEUE_21_RX_BITMAP_255_224_OFFSET                     0x00000054
#define RX_REO_QUEUE_21_RX_BITMAP_255_224_LSB                        0
#define RX_REO_QUEUE_21_RX_BITMAP_255_224_MASK                       0xffffffff

/* Description		RX_REO_QUEUE_22_CURRENT_MPDU_COUNT
			
			The number of MPDUs in the queue.
			
			
			
			<legal all>
*/
#define RX_REO_QUEUE_22_CURRENT_MPDU_COUNT_OFFSET                    0x00000058
#define RX_REO_QUEUE_22_CURRENT_MPDU_COUNT_LSB                       0
#define RX_REO_QUEUE_22_CURRENT_MPDU_COUNT_MASK                      0x0000007f

/* Description		RX_REO_QUEUE_22_CURRENT_MSDU_COUNT
			
			The number of MSDUs in the queue.
			
			<legal all>
*/
#define RX_REO_QUEUE_22_CURRENT_MSDU_COUNT_OFFSET                    0x00000058
#define RX_REO_QUEUE_22_CURRENT_MSDU_COUNT_LSB                       7
#define RX_REO_QUEUE_22_CURRENT_MSDU_COUNT_MASK                      0xffffff80

/* Description		RX_REO_QUEUE_23_RESERVED_23
			
			<legal 0>
*/
#define RX_REO_QUEUE_23_RESERVED_23_OFFSET                           0x0000005c
#define RX_REO_QUEUE_23_RESERVED_23_LSB                              0
#define RX_REO_QUEUE_23_RESERVED_23_MASK                             0x0000000f

/* Description		RX_REO_QUEUE_23_TIMEOUT_COUNT
			
			The number of times that REO started forwarding frames
			even though there is a hole in the bitmap. Forwarding reason
			is Timeout
			
			
			
			The counter saturates and freezes at 0x3F
			
			
			
			<legal all>
*/
#define RX_REO_QUEUE_23_TIMEOUT_COUNT_OFFSET                         0x0000005c
#define RX_REO_QUEUE_23_TIMEOUT_COUNT_LSB                            4
#define RX_REO_QUEUE_23_TIMEOUT_COUNT_MASK                           0x000003f0

/* Description		RX_REO_QUEUE_23_FORWARD_DUE_TO_BAR_COUNT
			
			The number of times that REO started forwarding frames
			even though there is a hole in the bitmap. Forwarding reason
			is reception of BAR frame.
			
			
			
			The counter saturates and freezes at 0x3F
			
			
			
			<legal all>
*/
#define RX_REO_QUEUE_23_FORWARD_DUE_TO_BAR_COUNT_OFFSET              0x0000005c
#define RX_REO_QUEUE_23_FORWARD_DUE_TO_BAR_COUNT_LSB                 10
#define RX_REO_QUEUE_23_FORWARD_DUE_TO_BAR_COUNT_MASK                0x0000fc00

/* Description		RX_REO_QUEUE_23_DUPLICATE_COUNT
			
			The number of duplicate frames that have been detected
			
			<legal all>
*/
#define RX_REO_QUEUE_23_DUPLICATE_COUNT_OFFSET                       0x0000005c
#define RX_REO_QUEUE_23_DUPLICATE_COUNT_LSB                          16
#define RX_REO_QUEUE_23_DUPLICATE_COUNT_MASK                         0xffff0000

/* Description		RX_REO_QUEUE_24_FRAMES_IN_ORDER_COUNT
			
			The number of frames that have been received in order
			(without a hole that prevented them from being forwarded
			immediately)
			
			
			
			This corresponds to the Reorder opcodes:
			
			'FWDCUR' and 'FWD BUF'
			
			
			
			<legal all>
*/
#define RX_REO_QUEUE_24_FRAMES_IN_ORDER_COUNT_OFFSET                 0x00000060
#define RX_REO_QUEUE_24_FRAMES_IN_ORDER_COUNT_LSB                    0
#define RX_REO_QUEUE_24_FRAMES_IN_ORDER_COUNT_MASK                   0x00ffffff

/* Description		RX_REO_QUEUE_24_BAR_RECEIVED_COUNT
			
			The number of times a BAR frame is received.
			
			
			
			This corresponds to the Reorder opcodes with 'DROP'
			
			
			
			The counter saturates and freezes at 0xFF
			
			<legal all>
*/
#define RX_REO_QUEUE_24_BAR_RECEIVED_COUNT_OFFSET                    0x00000060
#define RX_REO_QUEUE_24_BAR_RECEIVED_COUNT_LSB                       24
#define RX_REO_QUEUE_24_BAR_RECEIVED_COUNT_MASK                      0xff000000

/* Description		RX_REO_QUEUE_25_MPDU_FRAMES_PROCESSED_COUNT
			
			The total number of MPDU frames that have been processed
			by REO. 'Processing' here means that REO has received them
			out of the entrance ring, and retrieved the corresponding
			RX_REO_QUEUE Descriptor. 
			
			
			
			Note that this count includes duplicates, frames that
			later had errors, etc.
			
			
			
			Note that field 'Duplicate_count' indicates how many of
			these MPDUs were duplicates.
			
			
			
			<legal all>
*/
#define RX_REO_QUEUE_25_MPDU_FRAMES_PROCESSED_COUNT_OFFSET           0x00000064
#define RX_REO_QUEUE_25_MPDU_FRAMES_PROCESSED_COUNT_LSB              0
#define RX_REO_QUEUE_25_MPDU_FRAMES_PROCESSED_COUNT_MASK             0xffffffff

/* Description		RX_REO_QUEUE_26_MSDU_FRAMES_PROCESSED_COUNT
			
			The total number of MSDU frames that have been processed
			by REO. 'Processing' here means that REO has received them
			out of the entrance ring, and retrieved the corresponding
			RX_REO_QUEUE Descriptor. 
			
			
			
			Note that this count includes duplicates, frames that
			later had errors, etc.
			
			
			
			<legal all>
*/
#define RX_REO_QUEUE_26_MSDU_FRAMES_PROCESSED_COUNT_OFFSET           0x00000068
#define RX_REO_QUEUE_26_MSDU_FRAMES_PROCESSED_COUNT_LSB              0
#define RX_REO_QUEUE_26_MSDU_FRAMES_PROCESSED_COUNT_MASK             0xffffffff

/* Description		RX_REO_QUEUE_27_TOTAL_PROCESSED_BYTE_COUNT
			
			An approximation of the number of bytes processed for
			this queue. 
			
			'Processing' here means that REO has received them out
			of the entrance ring, and retrieved the corresponding
			RX_REO_QUEUE Descriptor. 
			
			
			
			Note that this count includes duplicates, frames that
			later had errors, etc.
			
			
			
			In 64 byte units
			
			<legal all>
*/
#define RX_REO_QUEUE_27_TOTAL_PROCESSED_BYTE_COUNT_OFFSET            0x0000006c
#define RX_REO_QUEUE_27_TOTAL_PROCESSED_BYTE_COUNT_LSB               0
#define RX_REO_QUEUE_27_TOTAL_PROCESSED_BYTE_COUNT_MASK              0xffffffff

/* Description		RX_REO_QUEUE_28_LATE_RECEIVE_MPDU_COUNT
			
			The number of MPDUs received after the window had
			already moved on. The 'late' sequence window is defined as
			(Window SSN - 256) - (Window SSN - 1)
			
			
			
			This corresponds with Out of order detection in
			duplicate detect FSM
			
			
			
			The counter saturates and freezes at 0xFFF
			
			
			
			<legal all>
*/
#define RX_REO_QUEUE_28_LATE_RECEIVE_MPDU_COUNT_OFFSET               0x00000070
#define RX_REO_QUEUE_28_LATE_RECEIVE_MPDU_COUNT_LSB                  0
#define RX_REO_QUEUE_28_LATE_RECEIVE_MPDU_COUNT_MASK                 0x00000fff

/* Description		RX_REO_QUEUE_28_WINDOW_JUMP_2K
			
			The number of times the window moved more then 2K
			
			
			
			The counter saturates and freezes at 0xF
			
			
			
			(Note: field name can not start with number: previous
			2k_window_jump)
			
			
			
			<legal all>
*/
#define RX_REO_QUEUE_28_WINDOW_JUMP_2K_OFFSET                        0x00000070
#define RX_REO_QUEUE_28_WINDOW_JUMP_2K_LSB                           12
#define RX_REO_QUEUE_28_WINDOW_JUMP_2K_MASK                          0x0000f000

/* Description		RX_REO_QUEUE_28_HOLE_COUNT
			
			The number of times a hole was created in the receive
			bitmap.
			
			
			
			This corresponds to the Reorder opcodes with 'QCUR'
			
			
			
			<legal all>
*/
#define RX_REO_QUEUE_28_HOLE_COUNT_OFFSET                            0x00000070
#define RX_REO_QUEUE_28_HOLE_COUNT_LSB                               16
#define RX_REO_QUEUE_28_HOLE_COUNT_MASK                              0xffff0000

/* Description		RX_REO_QUEUE_29_RESERVED_29
			
			<legal 0>
*/
#define RX_REO_QUEUE_29_RESERVED_29_OFFSET                           0x00000074
#define RX_REO_QUEUE_29_RESERVED_29_LSB                              0
#define RX_REO_QUEUE_29_RESERVED_29_MASK                             0xffffffff

/* Description		RX_REO_QUEUE_30_RESERVED_30
			
			<legal 0>
*/
#define RX_REO_QUEUE_30_RESERVED_30_OFFSET                           0x00000078
#define RX_REO_QUEUE_30_RESERVED_30_LSB                              0
#define RX_REO_QUEUE_30_RESERVED_30_MASK                             0xffffffff

/* Description		RX_REO_QUEUE_31_RESERVED_31
			
			<legal 0>
*/
#define RX_REO_QUEUE_31_RESERVED_31_OFFSET                           0x0000007c
#define RX_REO_QUEUE_31_RESERVED_31_LSB                              0
#define RX_REO_QUEUE_31_RESERVED_31_MASK                             0xffffffff


#endif // _RX_REO_QUEUE_H_
