xref: /wlan-driver/fw-api/hw/qca5332/sw_monitor_ring.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1*5113495bSYour Name 
2*5113495bSYour Name /* Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
3*5113495bSYour Name  *
4*5113495bSYour Name  * Permission to use, copy, modify, and/or distribute this software for any
5*5113495bSYour Name  * purpose with or without fee is hereby granted, provided that the above
6*5113495bSYour Name  * copyright notice and this permission notice appear in all copies.
7*5113495bSYour Name  *
8*5113495bSYour Name  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9*5113495bSYour Name  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10*5113495bSYour Name  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11*5113495bSYour Name  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12*5113495bSYour Name  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13*5113495bSYour Name  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14*5113495bSYour Name  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15*5113495bSYour Name  */
16*5113495bSYour Name 
17*5113495bSYour Name 
18*5113495bSYour Name 
19*5113495bSYour Name 
20*5113495bSYour Name 
21*5113495bSYour Name 
22*5113495bSYour Name 
23*5113495bSYour Name 
24*5113495bSYour Name 
25*5113495bSYour Name 
26*5113495bSYour Name #ifndef _SW_MONITOR_RING_H_
27*5113495bSYour Name #define _SW_MONITOR_RING_H_
28*5113495bSYour Name #if !defined(__ASSEMBLER__)
29*5113495bSYour Name #endif
30*5113495bSYour Name 
31*5113495bSYour Name #include "buffer_addr_info.h"
32*5113495bSYour Name #include "rx_mpdu_details.h"
33*5113495bSYour Name #define NUM_OF_DWORDS_SW_MONITOR_RING 8
34*5113495bSYour Name 
35*5113495bSYour Name 
36*5113495bSYour Name struct sw_monitor_ring {
37*5113495bSYour Name #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
38*5113495bSYour Name              struct   rx_mpdu_details                                           reo_level_mpdu_frame_info;
39*5113495bSYour Name              struct   buffer_addr_info                                          status_buff_addr_info;
40*5113495bSYour Name              uint32_t rxdma_push_reason                                       :  2, // [1:0]
41*5113495bSYour Name                       rxdma_error_code                                        :  5, // [6:2]
42*5113495bSYour Name                       mpdu_fragment_number                                    :  4, // [10:7]
43*5113495bSYour Name                       frameless_bar                                           :  1, // [11:11]
44*5113495bSYour Name                       status_buf_count                                        :  4, // [15:12]
45*5113495bSYour Name                       end_of_ppdu                                             :  1, // [16:16]
46*5113495bSYour Name                       reserved_6a                                             : 15; // [31:17]
47*5113495bSYour Name              uint32_t phy_ppdu_id                                             : 16, // [15:0]
48*5113495bSYour Name                       reserved_7a                                             :  4, // [19:16]
49*5113495bSYour Name                       ring_id                                                 :  8, // [27:20]
50*5113495bSYour Name                       looping_count                                           :  4; // [31:28]
51*5113495bSYour Name #else
52*5113495bSYour Name              struct   rx_mpdu_details                                           reo_level_mpdu_frame_info;
53*5113495bSYour Name              struct   buffer_addr_info                                          status_buff_addr_info;
54*5113495bSYour Name              uint32_t reserved_6a                                             : 15, // [31:17]
55*5113495bSYour Name                       end_of_ppdu                                             :  1, // [16:16]
56*5113495bSYour Name                       status_buf_count                                        :  4, // [15:12]
57*5113495bSYour Name                       frameless_bar                                           :  1, // [11:11]
58*5113495bSYour Name                       mpdu_fragment_number                                    :  4, // [10:7]
59*5113495bSYour Name                       rxdma_error_code                                        :  5, // [6:2]
60*5113495bSYour Name                       rxdma_push_reason                                       :  2; // [1:0]
61*5113495bSYour Name              uint32_t looping_count                                           :  4, // [31:28]
62*5113495bSYour Name                       ring_id                                                 :  8, // [27:20]
63*5113495bSYour Name                       reserved_7a                                             :  4, // [19:16]
64*5113495bSYour Name                       phy_ppdu_id                                             : 16; // [15:0]
65*5113495bSYour Name #endif
66*5113495bSYour Name };
67*5113495bSYour Name 
68*5113495bSYour Name 
69*5113495bSYour Name /* Description		REO_LEVEL_MPDU_FRAME_INFO
70*5113495bSYour Name 
71*5113495bSYour Name 			Consumer: SW
72*5113495bSYour Name 			Producer: RXDMA
73*5113495bSYour Name 
74*5113495bSYour Name 			Details related to the MPDU being pushed to SW, valid only
75*5113495bSYour Name 			 if end_of_ppdu is set to 0
76*5113495bSYour Name */
77*5113495bSYour Name 
78*5113495bSYour Name 
79*5113495bSYour Name /* Description		MSDU_LINK_DESC_ADDR_INFO
80*5113495bSYour Name 
81*5113495bSYour Name 			Consumer: REO/SW/FW
82*5113495bSYour Name 			Producer: RXDMA
83*5113495bSYour Name 
84*5113495bSYour Name 			Details of the physical address of the MSDU link descriptor
85*5113495bSYour Name 			 that contains pointers to MSDUs related to this MPDU
86*5113495bSYour Name */
87*5113495bSYour Name 
88*5113495bSYour Name 
89*5113495bSYour Name /* Description		BUFFER_ADDR_31_0
90*5113495bSYour Name 
91*5113495bSYour Name 			Address (lower 32 bits) of the MSDU buffer OR MSDU_EXTENSION
92*5113495bSYour Name 			 descriptor OR Link Descriptor
93*5113495bSYour Name 
94*5113495bSYour Name 			In case of 'NULL' pointer, this field is set to 0
95*5113495bSYour Name 			<legal all>
96*5113495bSYour Name */
97*5113495bSYour Name 
98*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET 0x00000000
99*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_LSB 0
100*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_MSB 31
101*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_31_0_MASK 0xffffffff
102*5113495bSYour Name 
103*5113495bSYour Name 
104*5113495bSYour Name /* Description		BUFFER_ADDR_39_32
105*5113495bSYour Name 
106*5113495bSYour Name 			Address (upper 8 bits) of the MSDU buffer OR MSDU_EXTENSION
107*5113495bSYour Name 			 descriptor OR Link Descriptor
108*5113495bSYour Name 
109*5113495bSYour Name 			In case of 'NULL' pointer, this field is set to 0
110*5113495bSYour Name 			<legal all>
111*5113495bSYour Name */
112*5113495bSYour Name 
113*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET 0x00000004
114*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_LSB 0
115*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_MSB 7
116*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_BUFFER_ADDR_39_32_MASK 0x000000ff
117*5113495bSYour Name 
118*5113495bSYour Name 
119*5113495bSYour Name /* Description		RETURN_BUFFER_MANAGER
120*5113495bSYour Name 
121*5113495bSYour Name 			Consumer: WBM
122*5113495bSYour Name 			Producer: SW/FW
123*5113495bSYour Name 
124*5113495bSYour Name 			In case of 'NULL' pointer, this field is set to 0
125*5113495bSYour Name 
126*5113495bSYour Name 			Indicates to which buffer manager the buffer OR MSDU_EXTENSION
127*5113495bSYour Name 			 descriptor OR link descriptor that is being pointed to
128*5113495bSYour Name 			shall be returned after the frame has been processed. It
129*5113495bSYour Name 			 is used by WBM for routing purposes.
130*5113495bSYour Name 
131*5113495bSYour Name 			<enum 0 WBM_IDLE_BUF_LIST> This buffer shall be returned
132*5113495bSYour Name 			 to the WMB buffer idle list
133*5113495bSYour Name 			<enum 1 WBM_CHIP0_IDLE_DESC_LIST> This buffer shall be returned
134*5113495bSYour Name 			 to the WBM idle link descriptor idle list, where the chip
135*5113495bSYour Name 			 0 WBM is chosen in case of a multi-chip config
136*5113495bSYour Name 			<enum 2 WBM_CHIP1_IDLE_DESC_LIST> This buffer shall be returned
137*5113495bSYour Name 			 to the chip 1 WBM idle link descriptor idle list
138*5113495bSYour Name 			<enum 3 WBM_CHIP2_IDLE_DESC_LIST> This buffer shall be returned
139*5113495bSYour Name 			 to the chip 2 WBM idle link descriptor idle list
140*5113495bSYour Name 			<enum 12 WBM_CHIP3_IDLE_DESC_LIST> This buffer shall be
141*5113495bSYour Name 			returned to chip 3 WBM idle link descriptor idle list
142*5113495bSYour Name 			<enum 4 FW_BM> This buffer shall be returned to the FW
143*5113495bSYour Name 			<enum 5 SW0_BM> This buffer shall be returned to the SW,
144*5113495bSYour Name 			ring 0
145*5113495bSYour Name 			<enum 6 SW1_BM> This buffer shall be returned to the SW,
146*5113495bSYour Name 			ring 1
147*5113495bSYour Name 			<enum 7 SW2_BM> This buffer shall be returned to the SW,
148*5113495bSYour Name 			ring 2
149*5113495bSYour Name 			<enum 8 SW3_BM> This buffer shall be returned to the SW,
150*5113495bSYour Name 			ring 3
151*5113495bSYour Name 			<enum 9 SW4_BM> This buffer shall be returned to the SW,
152*5113495bSYour Name 			ring 4
153*5113495bSYour Name 			<enum 10 SW5_BM> This buffer shall be returned to the SW,
154*5113495bSYour Name 			ring 5
155*5113495bSYour Name 			<enum 11 SW6_BM> This buffer shall be returned to the SW,
156*5113495bSYour Name 			ring 6
157*5113495bSYour Name 
158*5113495bSYour Name 			<legal 0-12>
159*5113495bSYour Name */
160*5113495bSYour Name 
161*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET 0x00000004
162*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB 8
163*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_MSB 11
164*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK 0x00000f00
165*5113495bSYour Name 
166*5113495bSYour Name 
167*5113495bSYour Name /* Description		SW_BUFFER_COOKIE
168*5113495bSYour Name 
169*5113495bSYour Name 			Cookie field exclusively used by SW.
170*5113495bSYour Name 
171*5113495bSYour Name 			In case of 'NULL' pointer, this field is set to 0
172*5113495bSYour Name 
173*5113495bSYour Name 			HW ignores the contents, accept that it passes the programmed
174*5113495bSYour Name 			 value on to other descriptors together with the physical
175*5113495bSYour Name 			 address
176*5113495bSYour Name 
177*5113495bSYour Name 			Field can be used by SW to for example associate the buffers
178*5113495bSYour Name 			 physical address with the virtual address
179*5113495bSYour Name 			The bit definitions as used by SW are within SW HLD specification
180*5113495bSYour Name 
181*5113495bSYour Name 
182*5113495bSYour Name 			NOTE1:
183*5113495bSYour Name 			The three most significant bits can have a special meaning
184*5113495bSYour Name 			 in case this struct is embedded in a TX_MPDU_DETAILS STRUCT,
185*5113495bSYour Name 			and field transmit_bw_restriction is set
186*5113495bSYour Name 
187*5113495bSYour Name 			In case of NON punctured transmission:
188*5113495bSYour Name 			Sw_buffer_cookie[19:17] = 3'b000: 20 MHz TX only
189*5113495bSYour Name 			Sw_buffer_cookie[19:17] = 3'b001: 40 MHz TX only
190*5113495bSYour Name 			Sw_buffer_cookie[19:17] = 3'b010: 80 MHz TX only
191*5113495bSYour Name 			Sw_buffer_cookie[19:17] = 3'b011: 160 MHz TX only
192*5113495bSYour Name 			Sw_buffer_cookie[19:17] = 3'b101: 240 MHz TX only
193*5113495bSYour Name 			Sw_buffer_cookie[19:17] = 3'b100: 320 MHz TX only
194*5113495bSYour Name 			Sw_buffer_cookie[19:18] = 2'b11: reserved
195*5113495bSYour Name 
196*5113495bSYour Name 			In case of punctured transmission:
197*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b0000: pattern 0 only
198*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b0001: pattern 1 only
199*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b0010: pattern 2 only
200*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b0011: pattern 3 only
201*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b0100: pattern 4 only
202*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b0101: pattern 5 only
203*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b0110: pattern 6 only
204*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b0111: pattern 7 only
205*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b1000: pattern 8 only
206*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b1001: pattern 9 only
207*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b1010: pattern 10 only
208*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b1011: pattern 11 only
209*5113495bSYour Name 			Sw_buffer_cookie[19:18] = 2'b11: reserved
210*5113495bSYour Name 
211*5113495bSYour Name 			Note: a punctured transmission is indicated by the presence
212*5113495bSYour Name 			 of TLV TX_PUNCTURE_SETUP embedded in the scheduler TLV
213*5113495bSYour Name 
214*5113495bSYour Name 			<legal all>
215*5113495bSYour Name */
216*5113495bSYour Name 
217*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET 0x00000004
218*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_LSB 12
219*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_MSB 31
220*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_MSDU_LINK_DESC_ADDR_INFO_SW_BUFFER_COOKIE_MASK 0xfffff000
221*5113495bSYour Name 
222*5113495bSYour Name 
223*5113495bSYour Name /* Description		RX_MPDU_DESC_INFO_DETAILS
224*5113495bSYour Name 
225*5113495bSYour Name 			Consumer: REO/SW/FW
226*5113495bSYour Name 			Producer: RXDMA
227*5113495bSYour Name 
228*5113495bSYour Name 			General information related to the MPDU that should be passed
229*5113495bSYour Name 			 on from REO entrance ring to the REO destination ring
230*5113495bSYour Name */
231*5113495bSYour Name 
232*5113495bSYour Name 
233*5113495bSYour Name /* Description		MSDU_COUNT
234*5113495bSYour Name 
235*5113495bSYour Name 			Consumer: REO/SW/FW
236*5113495bSYour Name 			Producer: RXDMA
237*5113495bSYour Name 
238*5113495bSYour Name 			The number of MSDUs within the MPDU
239*5113495bSYour Name 			<legal all>
240*5113495bSYour Name */
241*5113495bSYour Name 
242*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_OFFSET 0x00000008
243*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_LSB 0
244*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_MSB 7
245*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MSDU_COUNT_MASK 0x000000ff
246*5113495bSYour Name 
247*5113495bSYour Name 
248*5113495bSYour Name /* Description		FRAGMENT_FLAG
249*5113495bSYour Name 
250*5113495bSYour Name 			Consumer: REO/SW/FW
251*5113495bSYour Name 			Producer: RXDMA
252*5113495bSYour Name 
253*5113495bSYour Name 			When set, this MPDU is a fragment and REO should forward
254*5113495bSYour Name 			 this fragment MPDU to the REO destination ring without
255*5113495bSYour Name 			any reorder checks, pn checks or bitmap update. This implies
256*5113495bSYour Name 			 that REO is forwarding the pointer to the MSDU link descriptor.
257*5113495bSYour Name 			The destination ring is coming from a programmable register
258*5113495bSYour Name 			 setting in REO
259*5113495bSYour Name 
260*5113495bSYour Name 			<legal all>
261*5113495bSYour Name */
262*5113495bSYour Name 
263*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_OFFSET 0x00000008
264*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_LSB 8
265*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_MSB 8
266*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_FRAGMENT_FLAG_MASK 0x00000100
267*5113495bSYour Name 
268*5113495bSYour Name 
269*5113495bSYour Name /* Description		MPDU_RETRY_BIT
270*5113495bSYour Name 
271*5113495bSYour Name 			Consumer: REO/SW/FW
272*5113495bSYour Name 			Producer: RXDMA
273*5113495bSYour Name 
274*5113495bSYour Name 			The retry bit setting from the MPDU header of the received
275*5113495bSYour Name 			 frame
276*5113495bSYour Name 			<legal all>
277*5113495bSYour Name */
278*5113495bSYour Name 
279*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_OFFSET 0x00000008
280*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_LSB 9
281*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_MSB 9
282*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_RETRY_BIT_MASK 0x00000200
283*5113495bSYour Name 
284*5113495bSYour Name 
285*5113495bSYour Name /* Description		AMPDU_FLAG
286*5113495bSYour Name 
287*5113495bSYour Name 			Consumer: REO/SW/FW
288*5113495bSYour Name 			Producer: RXDMA
289*5113495bSYour Name 
290*5113495bSYour Name 			When set, the MPDU was received as part of an A-MPDU.
291*5113495bSYour Name 			<legal all>
292*5113495bSYour Name */
293*5113495bSYour Name 
294*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_OFFSET 0x00000008
295*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_LSB 10
296*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_MSB 10
297*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_AMPDU_FLAG_MASK 0x00000400
298*5113495bSYour Name 
299*5113495bSYour Name 
300*5113495bSYour Name /* Description		BAR_FRAME
301*5113495bSYour Name 
302*5113495bSYour Name 			Consumer: REO/SW/FW
303*5113495bSYour Name 			Producer: RXDMA
304*5113495bSYour Name 
305*5113495bSYour Name 			When set, the received frame is a BAR frame. After processing,
306*5113495bSYour Name 			this frame shall be pushed to SW or deleted.
307*5113495bSYour Name 			<legal all>
308*5113495bSYour Name */
309*5113495bSYour Name 
310*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_OFFSET 0x00000008
311*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_LSB 11
312*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_MSB 11
313*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_BAR_FRAME_MASK 0x00000800
314*5113495bSYour Name 
315*5113495bSYour Name 
316*5113495bSYour Name /* Description		PN_FIELDS_CONTAIN_VALID_INFO
317*5113495bSYour Name 
318*5113495bSYour Name 			Consumer: REO/SW/FW
319*5113495bSYour Name 			Producer: RXDMA
320*5113495bSYour Name 
321*5113495bSYour Name 			Copied here by RXDMA from RX_MPDU_END
322*5113495bSYour Name 			When not set, REO will Not perform a PN sequence number
323*5113495bSYour Name 			check
324*5113495bSYour Name */
325*5113495bSYour Name 
326*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_OFFSET 0x00000008
327*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_LSB 12
328*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_MSB 12
329*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PN_FIELDS_CONTAIN_VALID_INFO_MASK 0x00001000
330*5113495bSYour Name 
331*5113495bSYour Name 
332*5113495bSYour Name /* Description		RAW_MPDU
333*5113495bSYour Name 
334*5113495bSYour Name 			Field only valid when first_msdu_in_mpdu_flag is set.
335*5113495bSYour Name 
336*5113495bSYour Name 			When set, the contents in the MSDU buffer contains a 'RAW'
337*5113495bSYour Name 			MPDU. This 'RAW' MPDU might be spread out over multiple
338*5113495bSYour Name 			MSDU buffers.
339*5113495bSYour Name 			<legal all>
340*5113495bSYour Name */
341*5113495bSYour Name 
342*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_OFFSET 0x00000008
343*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_LSB 13
344*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_MSB 13
345*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_RAW_MPDU_MASK 0x00002000
346*5113495bSYour Name 
347*5113495bSYour Name 
348*5113495bSYour Name /* Description		MORE_FRAGMENT_FLAG
349*5113495bSYour Name 
350*5113495bSYour Name 			The More Fragment bit setting from the MPDU header of the
351*5113495bSYour Name 			 received frame
352*5113495bSYour Name 
353*5113495bSYour Name 			<legal all>
354*5113495bSYour Name */
355*5113495bSYour Name 
356*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_OFFSET 0x00000008
357*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_LSB 14
358*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_MSB 14
359*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MORE_FRAGMENT_FLAG_MASK 0x00004000
360*5113495bSYour Name 
361*5113495bSYour Name 
362*5113495bSYour Name /* Description		SRC_INFO
363*5113495bSYour Name 
364*5113495bSYour Name 			Source (virtual) device/interface info. associated with
365*5113495bSYour Name 			this peer
366*5113495bSYour Name 
367*5113495bSYour Name 			This field gets passed on by REO to PPE in the EDMA descriptor
368*5113495bSYour Name 			 ('REO_TO_PPE_RING').
369*5113495bSYour Name 
370*5113495bSYour Name 			Hamilton v1 used this for 'vdev_id' instead.
371*5113495bSYour Name 			<legal all>
372*5113495bSYour Name */
373*5113495bSYour Name 
374*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SRC_INFO_OFFSET 0x00000008
375*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SRC_INFO_LSB 15
376*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SRC_INFO_MSB 26
377*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_SRC_INFO_MASK 0x07ff8000
378*5113495bSYour Name 
379*5113495bSYour Name 
380*5113495bSYour Name /* Description		MPDU_QOS_CONTROL_VALID
381*5113495bSYour Name 
382*5113495bSYour Name 			When set, the MPDU has a QoS control field.
383*5113495bSYour Name 
384*5113495bSYour Name 			In case of ndp or phy_err, this field will never be set.
385*5113495bSYour Name 
386*5113495bSYour Name 			<legal all>
387*5113495bSYour Name */
388*5113495bSYour Name 
389*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_QOS_CONTROL_VALID_OFFSET 0x00000008
390*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_QOS_CONTROL_VALID_LSB 27
391*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_QOS_CONTROL_VALID_MSB 27
392*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_MPDU_QOS_CONTROL_VALID_MASK 0x08000000
393*5113495bSYour Name 
394*5113495bSYour Name 
395*5113495bSYour Name /* Description		TID
396*5113495bSYour Name 
397*5113495bSYour Name 			Field only valid when mpdu_qos_control_valid is set
398*5113495bSYour Name 
399*5113495bSYour Name 			The TID field in the QoS control field
400*5113495bSYour Name 			<legal all>
401*5113495bSYour Name */
402*5113495bSYour Name 
403*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_TID_OFFSET 0x00000008
404*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_TID_LSB 28
405*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_TID_MSB 31
406*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_TID_MASK 0xf0000000
407*5113495bSYour Name 
408*5113495bSYour Name 
409*5113495bSYour Name /* Description		PEER_META_DATA
410*5113495bSYour Name 
411*5113495bSYour Name 			Meta data that SW has programmed in the Peer table entry
412*5113495bSYour Name 			 of the transmitting STA.
413*5113495bSYour Name 			<legal all>
414*5113495bSYour Name */
415*5113495bSYour Name 
416*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_OFFSET 0x0000000c
417*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_LSB 0
418*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_MSB 31
419*5113495bSYour Name #define SW_MONITOR_RING_REO_LEVEL_MPDU_FRAME_INFO_RX_MPDU_DESC_INFO_DETAILS_PEER_META_DATA_MASK 0xffffffff
420*5113495bSYour Name 
421*5113495bSYour Name 
422*5113495bSYour Name /* Description		STATUS_BUFF_ADDR_INFO
423*5113495bSYour Name 
424*5113495bSYour Name 			Consumer: SW
425*5113495bSYour Name 			Producer: RXDMA
426*5113495bSYour Name 
427*5113495bSYour Name 			Details of the physical address of the first status buffer
428*5113495bSYour Name 			 used for the PPDU (either the PPDU that included the MPDU
429*5113495bSYour Name 			 being pushed to SW if end_of_ppdu = 0, or the PPDU whose
430*5113495bSYour Name 			 end is indicated through end_of_ppdu = 1)
431*5113495bSYour Name */
432*5113495bSYour Name 
433*5113495bSYour Name 
434*5113495bSYour Name /* Description		BUFFER_ADDR_31_0
435*5113495bSYour Name 
436*5113495bSYour Name 			Address (lower 32 bits) of the MSDU buffer OR MSDU_EXTENSION
437*5113495bSYour Name 			 descriptor OR Link Descriptor
438*5113495bSYour Name 
439*5113495bSYour Name 			In case of 'NULL' pointer, this field is set to 0
440*5113495bSYour Name 			<legal all>
441*5113495bSYour Name */
442*5113495bSYour Name 
443*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_31_0_OFFSET               0x00000010
444*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_31_0_LSB                  0
445*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_31_0_MSB                  31
446*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_31_0_MASK                 0xffffffff
447*5113495bSYour Name 
448*5113495bSYour Name 
449*5113495bSYour Name /* Description		BUFFER_ADDR_39_32
450*5113495bSYour Name 
451*5113495bSYour Name 			Address (upper 8 bits) of the MSDU buffer OR MSDU_EXTENSION
452*5113495bSYour Name 			 descriptor OR Link Descriptor
453*5113495bSYour Name 
454*5113495bSYour Name 			In case of 'NULL' pointer, this field is set to 0
455*5113495bSYour Name 			<legal all>
456*5113495bSYour Name */
457*5113495bSYour Name 
458*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_39_32_OFFSET              0x00000014
459*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_39_32_LSB                 0
460*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_39_32_MSB                 7
461*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_BUFFER_ADDR_39_32_MASK                0x000000ff
462*5113495bSYour Name 
463*5113495bSYour Name 
464*5113495bSYour Name /* Description		RETURN_BUFFER_MANAGER
465*5113495bSYour Name 
466*5113495bSYour Name 			Consumer: WBM
467*5113495bSYour Name 			Producer: SW/FW
468*5113495bSYour Name 
469*5113495bSYour Name 			In case of 'NULL' pointer, this field is set to 0
470*5113495bSYour Name 
471*5113495bSYour Name 			Indicates to which buffer manager the buffer OR MSDU_EXTENSION
472*5113495bSYour Name 			 descriptor OR link descriptor that is being pointed to
473*5113495bSYour Name 			shall be returned after the frame has been processed. It
474*5113495bSYour Name 			 is used by WBM for routing purposes.
475*5113495bSYour Name 
476*5113495bSYour Name 			<enum 0 WBM_IDLE_BUF_LIST> This buffer shall be returned
477*5113495bSYour Name 			 to the WMB buffer idle list
478*5113495bSYour Name 			<enum 1 WBM_CHIP0_IDLE_DESC_LIST> This buffer shall be returned
479*5113495bSYour Name 			 to the WBM idle link descriptor idle list, where the chip
480*5113495bSYour Name 			 0 WBM is chosen in case of a multi-chip config
481*5113495bSYour Name 			<enum 2 WBM_CHIP1_IDLE_DESC_LIST> This buffer shall be returned
482*5113495bSYour Name 			 to the chip 1 WBM idle link descriptor idle list
483*5113495bSYour Name 			<enum 3 WBM_CHIP2_IDLE_DESC_LIST> This buffer shall be returned
484*5113495bSYour Name 			 to the chip 2 WBM idle link descriptor idle list
485*5113495bSYour Name 			<enum 12 WBM_CHIP3_IDLE_DESC_LIST> This buffer shall be
486*5113495bSYour Name 			returned to chip 3 WBM idle link descriptor idle list
487*5113495bSYour Name 			<enum 4 FW_BM> This buffer shall be returned to the FW
488*5113495bSYour Name 			<enum 5 SW0_BM> This buffer shall be returned to the SW,
489*5113495bSYour Name 			ring 0
490*5113495bSYour Name 			<enum 6 SW1_BM> This buffer shall be returned to the SW,
491*5113495bSYour Name 			ring 1
492*5113495bSYour Name 			<enum 7 SW2_BM> This buffer shall be returned to the SW,
493*5113495bSYour Name 			ring 2
494*5113495bSYour Name 			<enum 8 SW3_BM> This buffer shall be returned to the SW,
495*5113495bSYour Name 			ring 3
496*5113495bSYour Name 			<enum 9 SW4_BM> This buffer shall be returned to the SW,
497*5113495bSYour Name 			ring 4
498*5113495bSYour Name 			<enum 10 SW5_BM> This buffer shall be returned to the SW,
499*5113495bSYour Name 			ring 5
500*5113495bSYour Name 			<enum 11 SW6_BM> This buffer shall be returned to the SW,
501*5113495bSYour Name 			ring 6
502*5113495bSYour Name 
503*5113495bSYour Name 			<legal 0-12>
504*5113495bSYour Name */
505*5113495bSYour Name 
506*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_RETURN_BUFFER_MANAGER_OFFSET          0x00000014
507*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_RETURN_BUFFER_MANAGER_LSB             8
508*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_RETURN_BUFFER_MANAGER_MSB             11
509*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_RETURN_BUFFER_MANAGER_MASK            0x00000f00
510*5113495bSYour Name 
511*5113495bSYour Name 
512*5113495bSYour Name /* Description		SW_BUFFER_COOKIE
513*5113495bSYour Name 
514*5113495bSYour Name 			Cookie field exclusively used by SW.
515*5113495bSYour Name 
516*5113495bSYour Name 			In case of 'NULL' pointer, this field is set to 0
517*5113495bSYour Name 
518*5113495bSYour Name 			HW ignores the contents, accept that it passes the programmed
519*5113495bSYour Name 			 value on to other descriptors together with the physical
520*5113495bSYour Name 			 address
521*5113495bSYour Name 
522*5113495bSYour Name 			Field can be used by SW to for example associate the buffers
523*5113495bSYour Name 			 physical address with the virtual address
524*5113495bSYour Name 			The bit definitions as used by SW are within SW HLD specification
525*5113495bSYour Name 
526*5113495bSYour Name 
527*5113495bSYour Name 			NOTE1:
528*5113495bSYour Name 			The three most significant bits can have a special meaning
529*5113495bSYour Name 			 in case this struct is embedded in a TX_MPDU_DETAILS STRUCT,
530*5113495bSYour Name 			and field transmit_bw_restriction is set
531*5113495bSYour Name 
532*5113495bSYour Name 			In case of NON punctured transmission:
533*5113495bSYour Name 			Sw_buffer_cookie[19:17] = 3'b000: 20 MHz TX only
534*5113495bSYour Name 			Sw_buffer_cookie[19:17] = 3'b001: 40 MHz TX only
535*5113495bSYour Name 			Sw_buffer_cookie[19:17] = 3'b010: 80 MHz TX only
536*5113495bSYour Name 			Sw_buffer_cookie[19:17] = 3'b011: 160 MHz TX only
537*5113495bSYour Name 			Sw_buffer_cookie[19:17] = 3'b101: 240 MHz TX only
538*5113495bSYour Name 			Sw_buffer_cookie[19:17] = 3'b100: 320 MHz TX only
539*5113495bSYour Name 			Sw_buffer_cookie[19:18] = 2'b11: reserved
540*5113495bSYour Name 
541*5113495bSYour Name 			In case of punctured transmission:
542*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b0000: pattern 0 only
543*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b0001: pattern 1 only
544*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b0010: pattern 2 only
545*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b0011: pattern 3 only
546*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b0100: pattern 4 only
547*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b0101: pattern 5 only
548*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b0110: pattern 6 only
549*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b0111: pattern 7 only
550*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b1000: pattern 8 only
551*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b1001: pattern 9 only
552*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b1010: pattern 10 only
553*5113495bSYour Name 			Sw_buffer_cookie[19:16] = 4'b1011: pattern 11 only
554*5113495bSYour Name 			Sw_buffer_cookie[19:18] = 2'b11: reserved
555*5113495bSYour Name 
556*5113495bSYour Name 			Note: a punctured transmission is indicated by the presence
557*5113495bSYour Name 			 of TLV TX_PUNCTURE_SETUP embedded in the scheduler TLV
558*5113495bSYour Name 
559*5113495bSYour Name 			<legal all>
560*5113495bSYour Name */
561*5113495bSYour Name 
562*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_SW_BUFFER_COOKIE_OFFSET               0x00000014
563*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_SW_BUFFER_COOKIE_LSB                  12
564*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_SW_BUFFER_COOKIE_MSB                  31
565*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUFF_ADDR_INFO_SW_BUFFER_COOKIE_MASK                 0xfffff000
566*5113495bSYour Name 
567*5113495bSYour Name 
568*5113495bSYour Name /* Description		RXDMA_PUSH_REASON
569*5113495bSYour Name 
570*5113495bSYour Name 			Indicates why RXDMA pushed the frame to this ring
571*5113495bSYour Name 
572*5113495bSYour Name 			<enum 0 rxdma_error_detected> RXDMA detected an error an
573*5113495bSYour Name 			 pushed this frame to this queue
574*5113495bSYour Name 			<enum 1 rxdma_routing_instruction> RXDMA pushed the frame
575*5113495bSYour Name 			 to this queue per received routing instructions. No error
576*5113495bSYour Name 			 within RXDMA was detected
577*5113495bSYour Name 			<enum 2 rxdma_rx_flush> RXDMA received an RX_FLUSH. As a
578*5113495bSYour Name 			 result the MSDU link descriptor might not have the "last_msdu_in_mpdu_flag"
579*5113495bSYour Name 			set, but instead WBM might just see a NULL pointer in the
580*5113495bSYour Name 			 MSDU link descriptor. This is to be considered a normal
581*5113495bSYour Name 			 condition for this scenario.
582*5113495bSYour Name 
583*5113495bSYour Name 			<legal 0 - 2>
584*5113495bSYour Name */
585*5113495bSYour Name 
586*5113495bSYour Name #define SW_MONITOR_RING_RXDMA_PUSH_REASON_OFFSET                                    0x00000018
587*5113495bSYour Name #define SW_MONITOR_RING_RXDMA_PUSH_REASON_LSB                                       0
588*5113495bSYour Name #define SW_MONITOR_RING_RXDMA_PUSH_REASON_MSB                                       1
589*5113495bSYour Name #define SW_MONITOR_RING_RXDMA_PUSH_REASON_MASK                                      0x00000003
590*5113495bSYour Name 
591*5113495bSYour Name 
592*5113495bSYour Name /* Description		RXDMA_ERROR_CODE
593*5113495bSYour Name 
594*5113495bSYour Name 			Field only valid when rxdma_push_reason is set to 'rxdma_error_detected.'
595*5113495bSYour Name 
596*5113495bSYour Name 
597*5113495bSYour Name 			<enum 0 rxdma_overflow_err>MPDU frame is not complete due
598*5113495bSYour Name 			 to a FIFO overflow error in RXPCU.
599*5113495bSYour Name 			<enum 1 rxdma_mpdu_length_err>MPDU frame is not complete
600*5113495bSYour Name 			 due to receiving incomplete MPDU from the PHY
601*5113495bSYour Name 			<enum 2 rxdma_fcs_err>FCS check on the MPDU frame failed
602*5113495bSYour Name 
603*5113495bSYour Name 			<enum 3 rxdma_decrypt_err>CRYPTO reported a decryption error
604*5113495bSYour Name 			 or CRYPTO received an encrypted frame, but did not get
605*5113495bSYour Name 			a valid corresponding key id in the peer entry.
606*5113495bSYour Name 			<enum 4 rxdma_tkip_mic_err>CRYPTO reported a TKIP MIC error
607*5113495bSYour Name 
608*5113495bSYour Name 			<enum 5 rxdma_unecrypted_err>CRYPTO reported an unencrypted
609*5113495bSYour Name 			 frame error when encrypted was expected
610*5113495bSYour Name 			<enum 6 rxdma_msdu_len_err>RX OLE reported an MSDU length
611*5113495bSYour Name 			 error
612*5113495bSYour Name 			<enum 7 rxdma_msdu_limit_err>RX OLE reported that max number
613*5113495bSYour Name 			 of MSDUs allowed in an MPDU got exceeded
614*5113495bSYour Name 			<enum 8 rxdma_wifi_parse_err>RX OLE reported a parsing error
615*5113495bSYour Name 
616*5113495bSYour Name 			<enum 9 rxdma_amsdu_parse_err>RX OLE reported an A-MSDU
617*5113495bSYour Name 			parsing error
618*5113495bSYour Name 			<enum 10 rxdma_sa_timeout_err>RX OLE reported a timeout
619*5113495bSYour Name 			during SA search
620*5113495bSYour Name 			<enum 11 rxdma_da_timeout_err>RX OLE reported a timeout
621*5113495bSYour Name 			during DA search
622*5113495bSYour Name 			<enum 12 rxdma_flow_timeout_err>RX OLE reported a timeout
623*5113495bSYour Name 			 during flow search
624*5113495bSYour Name 			<enum 13 rxdma_flush_request>RXDMA received a flush request
625*5113495bSYour Name 
626*5113495bSYour Name 			<enum 14 rxdma_amsdu_fragment_err>Rx PCU reported A-MSDU
627*5113495bSYour Name 			 present as well as a fragmented MPDU. A-MSDU defragmentation
628*5113495bSYour Name 			 is not supported in Lithium SW so this is treated as an
629*5113495bSYour Name 			 error.
630*5113495bSYour Name 			<enum 15 rxdma_multicast_echo_err>RX OLE reported a multicast
631*5113495bSYour Name 			 echo
632*5113495bSYour Name 			<enum 16 rxdma_amsdu_addr_mismatch_err>RX OLE reported an
633*5113495bSYour Name 			 A-MSDU with either 'from DS = 0' with an SA mismatching
634*5113495bSYour Name 			 TA or 'to DS = 0' with a DA mismatching RA.
635*5113495bSYour Name 			<enum 17 rxdma_unauthorized_wds_err>RX PCU reported that
636*5113495bSYour Name 			 Rx peer entry did not indicate 'authorized_to_send_WDS'
637*5113495bSYour Name 			and also indicated 'from DS = to DS = 1.'
638*5113495bSYour Name 			<enum 18 rxdma_groupcast_amsdu_or_wds_err>RX PCU reported
639*5113495bSYour Name 			 a broadcast or multicast RA as well as either A-MSDU present
640*5113495bSYour Name 			 or 'from DS = to DS = 1.'
641*5113495bSYour Name */
642*5113495bSYour Name 
643*5113495bSYour Name #define SW_MONITOR_RING_RXDMA_ERROR_CODE_OFFSET                                     0x00000018
644*5113495bSYour Name #define SW_MONITOR_RING_RXDMA_ERROR_CODE_LSB                                        2
645*5113495bSYour Name #define SW_MONITOR_RING_RXDMA_ERROR_CODE_MSB                                        6
646*5113495bSYour Name #define SW_MONITOR_RING_RXDMA_ERROR_CODE_MASK                                       0x0000007c
647*5113495bSYour Name 
648*5113495bSYour Name 
649*5113495bSYour Name /* Description		MPDU_FRAGMENT_NUMBER
650*5113495bSYour Name 
651*5113495bSYour Name 			Field only valid when Reo_level_mpdu_frame_info. Rx_mpdu_desc_info_details.Fragment_flag
652*5113495bSYour Name 			 is set and end_of_ppdu is set to 0.
653*5113495bSYour Name 
654*5113495bSYour Name 			The fragment number from the 802.11 header.
655*5113495bSYour Name 
656*5113495bSYour Name 			Note that the sequence number is embedded in the field:
657*5113495bSYour Name 			Reo_level_mpdu_frame_info. Rx_mpdu_desc_info_details. Mpdu_sequence_number
658*5113495bSYour Name 
659*5113495bSYour Name 
660*5113495bSYour Name 			<legal all>
661*5113495bSYour Name */
662*5113495bSYour Name 
663*5113495bSYour Name #define SW_MONITOR_RING_MPDU_FRAGMENT_NUMBER_OFFSET                                 0x00000018
664*5113495bSYour Name #define SW_MONITOR_RING_MPDU_FRAGMENT_NUMBER_LSB                                    7
665*5113495bSYour Name #define SW_MONITOR_RING_MPDU_FRAGMENT_NUMBER_MSB                                    10
666*5113495bSYour Name #define SW_MONITOR_RING_MPDU_FRAGMENT_NUMBER_MASK                                   0x00000780
667*5113495bSYour Name 
668*5113495bSYour Name 
669*5113495bSYour Name /* Description		FRAMELESS_BAR
670*5113495bSYour Name 
671*5113495bSYour Name 			When set, this SW monitor ring struct contains BAR info
672*5113495bSYour Name 			from a multi TID BAR frame. The original multi TID BAR frame
673*5113495bSYour Name 			 itself contained all the REO info for the first TID, but
674*5113495bSYour Name 			 all the subsequent TID info and their linkage to the REO
675*5113495bSYour Name 			 descriptors is passed down as 'frameless' BAR info.
676*5113495bSYour Name 
677*5113495bSYour Name 			The only fields valid in this descriptor when this bit is
678*5113495bSYour Name 			 within the
679*5113495bSYour Name 			Reo_level_mpdu_frame_info:
680*5113495bSYour Name 			   Within Rx_mpdu_desc_info_details:
681*5113495bSYour Name 			Mpdu_Sequence_number
682*5113495bSYour Name 			BAR_frame
683*5113495bSYour Name 			Peer_meta_data
684*5113495bSYour Name 			All other fields shall be set to 0.
685*5113495bSYour Name 
686*5113495bSYour Name 			<legal all>
687*5113495bSYour Name */
688*5113495bSYour Name 
689*5113495bSYour Name #define SW_MONITOR_RING_FRAMELESS_BAR_OFFSET                                        0x00000018
690*5113495bSYour Name #define SW_MONITOR_RING_FRAMELESS_BAR_LSB                                           11
691*5113495bSYour Name #define SW_MONITOR_RING_FRAMELESS_BAR_MSB                                           11
692*5113495bSYour Name #define SW_MONITOR_RING_FRAMELESS_BAR_MASK                                          0x00000800
693*5113495bSYour Name 
694*5113495bSYour Name 
695*5113495bSYour Name /* Description		STATUS_BUF_COUNT
696*5113495bSYour Name 
697*5113495bSYour Name 			A count of status buffers used so far for the PPDU (either
698*5113495bSYour Name 			 the PPDU that included the MPDU being pushed to SW if end_of_ppdu
699*5113495bSYour Name 			 = 0, or the PPDU whose end is indicated through end_of_ppdu
700*5113495bSYour Name 			 = 1)
701*5113495bSYour Name */
702*5113495bSYour Name 
703*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUF_COUNT_OFFSET                                     0x00000018
704*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUF_COUNT_LSB                                        12
705*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUF_COUNT_MSB                                        15
706*5113495bSYour Name #define SW_MONITOR_RING_STATUS_BUF_COUNT_MASK                                       0x0000f000
707*5113495bSYour Name 
708*5113495bSYour Name 
709*5113495bSYour Name /* Description		END_OF_PPDU
710*5113495bSYour Name 
711*5113495bSYour Name 			Pine RXDMA can be configured to generate a separate 'SW_MONITOR_RING'
712*5113495bSYour Name 			descriptor at the end of a PPDU (either through an 'RX_PPDU_END'
713*5113495bSYour Name 			TLV or through an 'RX_FLUSH') to demarcate PPDUs.
714*5113495bSYour Name 
715*5113495bSYour Name 			For such a descriptor, this bit is set to 1 and fields Reo_level_mpdu_frame_info,
716*5113495bSYour Name 			mpdu_fragment_number and Frameless_bar are all set to 0.
717*5113495bSYour Name 
718*5113495bSYour Name 
719*5113495bSYour Name 			Otherwise this bit is set to 0.
720*5113495bSYour Name */
721*5113495bSYour Name 
722*5113495bSYour Name #define SW_MONITOR_RING_END_OF_PPDU_OFFSET                                          0x00000018
723*5113495bSYour Name #define SW_MONITOR_RING_END_OF_PPDU_LSB                                             16
724*5113495bSYour Name #define SW_MONITOR_RING_END_OF_PPDU_MSB                                             16
725*5113495bSYour Name #define SW_MONITOR_RING_END_OF_PPDU_MASK                                            0x00010000
726*5113495bSYour Name 
727*5113495bSYour Name 
728*5113495bSYour Name /* Description		RESERVED_6A
729*5113495bSYour Name 
730*5113495bSYour Name 			<legal 0>
731*5113495bSYour Name */
732*5113495bSYour Name 
733*5113495bSYour Name #define SW_MONITOR_RING_RESERVED_6A_OFFSET                                          0x00000018
734*5113495bSYour Name #define SW_MONITOR_RING_RESERVED_6A_LSB                                             17
735*5113495bSYour Name #define SW_MONITOR_RING_RESERVED_6A_MSB                                             31
736*5113495bSYour Name #define SW_MONITOR_RING_RESERVED_6A_MASK                                            0xfffe0000
737*5113495bSYour Name 
738*5113495bSYour Name 
739*5113495bSYour Name /* Description		PHY_PPDU_ID
740*5113495bSYour Name 
741*5113495bSYour Name 			A PPDU counter value that PHY increments for every PPDU
742*5113495bSYour Name 			received
743*5113495bSYour Name 			The counter value wraps around. Pine RXDMA can be configured
744*5113495bSYour Name 			 to copy this from the RX_PPDU_START TLV for every output
745*5113495bSYour Name 			 descriptor.
746*5113495bSYour Name 
747*5113495bSYour Name 			<legal all>
748*5113495bSYour Name */
749*5113495bSYour Name 
750*5113495bSYour Name #define SW_MONITOR_RING_PHY_PPDU_ID_OFFSET                                          0x0000001c
751*5113495bSYour Name #define SW_MONITOR_RING_PHY_PPDU_ID_LSB                                             0
752*5113495bSYour Name #define SW_MONITOR_RING_PHY_PPDU_ID_MSB                                             15
753*5113495bSYour Name #define SW_MONITOR_RING_PHY_PPDU_ID_MASK                                            0x0000ffff
754*5113495bSYour Name 
755*5113495bSYour Name 
756*5113495bSYour Name /* Description		RESERVED_7A
757*5113495bSYour Name 
758*5113495bSYour Name 			<legal 0>
759*5113495bSYour Name */
760*5113495bSYour Name 
761*5113495bSYour Name #define SW_MONITOR_RING_RESERVED_7A_OFFSET                                          0x0000001c
762*5113495bSYour Name #define SW_MONITOR_RING_RESERVED_7A_LSB                                             16
763*5113495bSYour Name #define SW_MONITOR_RING_RESERVED_7A_MSB                                             19
764*5113495bSYour Name #define SW_MONITOR_RING_RESERVED_7A_MASK                                            0x000f0000
765*5113495bSYour Name 
766*5113495bSYour Name 
767*5113495bSYour Name /* Description		RING_ID
768*5113495bSYour Name 
769*5113495bSYour Name 			Consumer: SW/REO/DEBUG
770*5113495bSYour Name 			Producer: SRNG (of RXDMA)
771*5113495bSYour Name 
772*5113495bSYour Name 			For debugging.
773*5113495bSYour Name 			This field is filled in by the SRNG module.
774*5113495bSYour Name 			It help to identify the ring that is being looked <legal
775*5113495bSYour Name 			 all>
776*5113495bSYour Name */
777*5113495bSYour Name 
778*5113495bSYour Name #define SW_MONITOR_RING_RING_ID_OFFSET                                              0x0000001c
779*5113495bSYour Name #define SW_MONITOR_RING_RING_ID_LSB                                                 20
780*5113495bSYour Name #define SW_MONITOR_RING_RING_ID_MSB                                                 27
781*5113495bSYour Name #define SW_MONITOR_RING_RING_ID_MASK                                                0x0ff00000
782*5113495bSYour Name 
783*5113495bSYour Name 
784*5113495bSYour Name /* Description		LOOPING_COUNT
785*5113495bSYour Name 
786*5113495bSYour Name 			Consumer: SW/REO/DEBUG
787*5113495bSYour Name 			Producer: SRNG (of RXDMA)
788*5113495bSYour Name 
789*5113495bSYour Name 			For debugging.
790*5113495bSYour Name 			This field is filled in by the SRNG module.
791*5113495bSYour Name 
792*5113495bSYour Name 			A count value that indicates the number of times the producer
793*5113495bSYour Name 			 of entries into this Ring has looped around the ring.
794*5113495bSYour Name 			At initialization time, this value is set to 0. On the first
795*5113495bSYour Name 			 loop, this value is set to 1. After the max value is reached
796*5113495bSYour Name 			 allowed by the number of bits for this field, the count
797*5113495bSYour Name 			 value continues with 0 again.
798*5113495bSYour Name 
799*5113495bSYour Name 			In case SW is the consumer of the ring entries, it can use
800*5113495bSYour Name 			 this field to figure out up to where the producer of entries
801*5113495bSYour Name 			 has created new entries. This eliminates the need to check
802*5113495bSYour Name 			 where the "head pointer' of the ring is located once the
803*5113495bSYour Name 			 SW starts processing an interrupt indicating that new entries
804*5113495bSYour Name 			 have been put into this ring...
805*5113495bSYour Name 
806*5113495bSYour Name 			Also note that SW if it wants only needs to look at the
807*5113495bSYour Name 			LSB bit of this count value.
808*5113495bSYour Name 			<legal all>
809*5113495bSYour Name */
810*5113495bSYour Name 
811*5113495bSYour Name #define SW_MONITOR_RING_LOOPING_COUNT_OFFSET                                        0x0000001c
812*5113495bSYour Name #define SW_MONITOR_RING_LOOPING_COUNT_LSB                                           28
813*5113495bSYour Name #define SW_MONITOR_RING_LOOPING_COUNT_MSB                                           31
814*5113495bSYour Name #define SW_MONITOR_RING_LOOPING_COUNT_MASK                                          0xf0000000
815*5113495bSYour Name 
816*5113495bSYour Name 
817*5113495bSYour Name 
818*5113495bSYour Name #endif   // SW_MONITOR_RING
819