xref: /wlan-driver/fw-api/hw/qca6390/v1/rx_mpdu_desc_info.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1 /*
2  * Copyright (c) 2018 The Linux Foundation. All rights reserved.
3  *
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18 
19 #ifndef _RX_MPDU_DESC_INFO_H_
20 #define _RX_MPDU_DESC_INFO_H_
21 #if !defined(__ASSEMBLER__)
22 #endif
23 
24 
25 // ################ START SUMMARY #################
26 //
27 //	Dword	Fields
28 //	0	msdu_count[7:0], mpdu_sequence_number[19:8], fragment_flag[20], mpdu_retry_bit[21], ampdu_flag[22], bar_frame[23], pn_fields_contain_valid_info[24], sa_is_valid[25], sa_idx_timeout[26], da_is_valid[27], da_is_mcbc[28], da_idx_timeout[29], raw_mpdu[30], more_fragment_flag[31]
29 //	1	peer_meta_data[31:0]
30 //
31 // ################ END SUMMARY #################
32 
33 #define NUM_OF_DWORDS_RX_MPDU_DESC_INFO 2
34 
35 struct rx_mpdu_desc_info {
36              uint32_t msdu_count                      :  8, //[7:0]
37                       mpdu_sequence_number            : 12, //[19:8]
38                       fragment_flag                   :  1, //[20]
39                       mpdu_retry_bit                  :  1, //[21]
40                       ampdu_flag                      :  1, //[22]
41                       bar_frame                       :  1, //[23]
42                       pn_fields_contain_valid_info    :  1, //[24]
43                       sa_is_valid                     :  1, //[25]
44                       sa_idx_timeout                  :  1, //[26]
45                       da_is_valid                     :  1, //[27]
46                       da_is_mcbc                      :  1, //[28]
47                       da_idx_timeout                  :  1, //[29]
48                       raw_mpdu                        :  1, //[30]
49                       more_fragment_flag              :  1; //[31]
50              uint32_t peer_meta_data                  : 32; //[31:0]
51 };
52 
53 /*
54 
55 msdu_count
56 
57 			Consumer: REO/SW/FW
58 
59 			Producer: RXDMA
60 
61 
62 
63 			The number of MSDUs within the MPDU
64 
65 			<legal all>
66 
67 mpdu_sequence_number
68 
69 			Consumer: REO/SW/FW
70 
71 			Producer: RXDMA
72 
73 
74 
75 			The field can have two different meanings based on the
76 			setting of field 'BAR_frame':
77 
78 
79 
80 			'BAR_frame' is NOT set:
81 
82 			The MPDU sequence number of the received frame.
83 
84 
85 
86 			'BAR_frame' is set.
87 
88 			The MPDU Start sequence number from the BAR frame
89 
90 			<legal all>
91 
92 fragment_flag
93 
94 			Consumer: REO/SW/FW
95 
96 			Producer: RXDMA
97 
98 
99 
100 			When set, this MPDU is a fragment and REO should forward
101 			this fragment MPDU to the REO destination ring without any
102 			reorder checks, pn checks or bitmap update. This implies
103 			that REO is forwarding the pointer to the MSDU link
104 			descriptor. The destination ring is coming from a
105 			programmable register setting in REO
106 
107 
108 
109 			<legal all>
110 
111 mpdu_retry_bit
112 
113 			Consumer: REO/SW/FW
114 
115 			Producer: RXDMA
116 
117 
118 
119 			The retry bit setting from the MPDU header of the
120 			received frame
121 
122 			<legal all>
123 
124 ampdu_flag
125 
126 			Consumer: REO/SW/FW
127 
128 			Producer: RXDMA
129 
130 
131 
132 			When set, the MPDU was received as part of an A-MPDU.
133 
134 			<legal all>
135 
136 bar_frame
137 
138 			Consumer: REO/SW/FW
139 
140 			Producer: RXDMA
141 
142 
143 
144 			When set, the received frame is a BAR frame. After
145 			processing, this frame shall be pushed to SW or deleted.
146 
147 			<legal all>
148 
149 pn_fields_contain_valid_info
150 
151 			Consumer: REO/SW/FW
152 
153 			Producer: RXDMA
154 
155 
156 
157 			Copied here by RXDMA from RX_MPDU_END
158 
159 			When not set, REO will Not perform a PN sequence number
160 			check
161 
162 sa_is_valid
163 
164 			When set, OLE found a valid SA entry for all MSDUs in
165 			this MPDU
166 
167 			<legal all>
168 
169 sa_idx_timeout
170 
171 			When set, at least 1 MSDU within the MPDU has an
172 			unsuccessful MAC source address search due to the expiration
173 			of the search timer.
174 
175 			<legal all>
176 
177 da_is_valid
178 
179 			When set, OLE found a valid DA entry for all MSDUs in
180 			this MPDU
181 
182 			<legal all>
183 
184 da_is_mcbc
185 
186 			Field Only valid if da_is_valid is set
187 
188 
189 
190 			When set, at least one of the DA addresses is a
191 			Multicast or Broadcast address.
192 
193 			<legal all>
194 
195 da_idx_timeout
196 
197 			When set, at least 1 MSDU within the MPDU has an
198 			unsuccessful MAC destination address search due to the
199 			expiration of the search timer.
200 
201 			<legal all>
202 
203 raw_mpdu
204 
205 			Field only valid when first_msdu_in_mpdu_flag is set.
206 
207 
208 
209 			When set, the contents in the MSDU buffer contains a
210 			'RAW' MPDU. This 'RAW' MPDU might be spread out over
211 			multiple MSDU buffers.
212 
213 			<legal all>
214 
215 more_fragment_flag
216 
217 			The More Fragment bit setting from the MPDU header of
218 			the received frame
219 
220 
221 
222 			<legal all>
223 
224 peer_meta_data
225 
226 			Meta data that SW has programmed in the Peer table entry
227 			of the transmitting STA.
228 
229 			<legal all>
230 */
231 
232 
233 /* Description		RX_MPDU_DESC_INFO_0_MSDU_COUNT
234 
235 			Consumer: REO/SW/FW
236 
237 			Producer: RXDMA
238 
239 
240 
241 			The number of MSDUs within the MPDU
242 
243 			<legal all>
244 */
245 #define RX_MPDU_DESC_INFO_0_MSDU_COUNT_OFFSET                        0x00000000
246 #define RX_MPDU_DESC_INFO_0_MSDU_COUNT_LSB                           0
247 #define RX_MPDU_DESC_INFO_0_MSDU_COUNT_MASK                          0x000000ff
248 
249 /* Description		RX_MPDU_DESC_INFO_0_MPDU_SEQUENCE_NUMBER
250 
251 			Consumer: REO/SW/FW
252 
253 			Producer: RXDMA
254 
255 
256 
257 			The field can have two different meanings based on the
258 			setting of field 'BAR_frame':
259 
260 
261 
262 			'BAR_frame' is NOT set:
263 
264 			The MPDU sequence number of the received frame.
265 
266 
267 
268 			'BAR_frame' is set.
269 
270 			The MPDU Start sequence number from the BAR frame
271 
272 			<legal all>
273 */
274 #define RX_MPDU_DESC_INFO_0_MPDU_SEQUENCE_NUMBER_OFFSET              0x00000000
275 #define RX_MPDU_DESC_INFO_0_MPDU_SEQUENCE_NUMBER_LSB                 8
276 #define RX_MPDU_DESC_INFO_0_MPDU_SEQUENCE_NUMBER_MASK                0x000fff00
277 
278 /* Description		RX_MPDU_DESC_INFO_0_FRAGMENT_FLAG
279 
280 			Consumer: REO/SW/FW
281 
282 			Producer: RXDMA
283 
284 
285 
286 			When set, this MPDU is a fragment and REO should forward
287 			this fragment MPDU to the REO destination ring without any
288 			reorder checks, pn checks or bitmap update. This implies
289 			that REO is forwarding the pointer to the MSDU link
290 			descriptor. The destination ring is coming from a
291 			programmable register setting in REO
292 
293 
294 
295 			<legal all>
296 */
297 #define RX_MPDU_DESC_INFO_0_FRAGMENT_FLAG_OFFSET                     0x00000000
298 #define RX_MPDU_DESC_INFO_0_FRAGMENT_FLAG_LSB                        20
299 #define RX_MPDU_DESC_INFO_0_FRAGMENT_FLAG_MASK                       0x00100000
300 
301 /* Description		RX_MPDU_DESC_INFO_0_MPDU_RETRY_BIT
302 
303 			Consumer: REO/SW/FW
304 
305 			Producer: RXDMA
306 
307 
308 
309 			The retry bit setting from the MPDU header of the
310 			received frame
311 
312 			<legal all>
313 */
314 #define RX_MPDU_DESC_INFO_0_MPDU_RETRY_BIT_OFFSET                    0x00000000
315 #define RX_MPDU_DESC_INFO_0_MPDU_RETRY_BIT_LSB                       21
316 #define RX_MPDU_DESC_INFO_0_MPDU_RETRY_BIT_MASK                      0x00200000
317 
318 /* Description		RX_MPDU_DESC_INFO_0_AMPDU_FLAG
319 
320 			Consumer: REO/SW/FW
321 
322 			Producer: RXDMA
323 
324 
325 
326 			When set, the MPDU was received as part of an A-MPDU.
327 
328 			<legal all>
329 */
330 #define RX_MPDU_DESC_INFO_0_AMPDU_FLAG_OFFSET                        0x00000000
331 #define RX_MPDU_DESC_INFO_0_AMPDU_FLAG_LSB                           22
332 #define RX_MPDU_DESC_INFO_0_AMPDU_FLAG_MASK                          0x00400000
333 
334 /* Description		RX_MPDU_DESC_INFO_0_BAR_FRAME
335 
336 			Consumer: REO/SW/FW
337 
338 			Producer: RXDMA
339 
340 
341 
342 			When set, the received frame is a BAR frame. After
343 			processing, this frame shall be pushed to SW or deleted.
344 
345 			<legal all>
346 */
347 #define RX_MPDU_DESC_INFO_0_BAR_FRAME_OFFSET                         0x00000000
348 #define RX_MPDU_DESC_INFO_0_BAR_FRAME_LSB                            23
349 #define RX_MPDU_DESC_INFO_0_BAR_FRAME_MASK                           0x00800000
350 
351 /* Description		RX_MPDU_DESC_INFO_0_PN_FIELDS_CONTAIN_VALID_INFO
352 
353 			Consumer: REO/SW/FW
354 
355 			Producer: RXDMA
356 
357 
358 
359 			Copied here by RXDMA from RX_MPDU_END
360 
361 			When not set, REO will Not perform a PN sequence number
362 			check
363 */
364 #define RX_MPDU_DESC_INFO_0_PN_FIELDS_CONTAIN_VALID_INFO_OFFSET      0x00000000
365 #define RX_MPDU_DESC_INFO_0_PN_FIELDS_CONTAIN_VALID_INFO_LSB         24
366 #define RX_MPDU_DESC_INFO_0_PN_FIELDS_CONTAIN_VALID_INFO_MASK        0x01000000
367 
368 /* Description		RX_MPDU_DESC_INFO_0_SA_IS_VALID
369 
370 			When set, OLE found a valid SA entry for all MSDUs in
371 			this MPDU
372 
373 			<legal all>
374 */
375 #define RX_MPDU_DESC_INFO_0_SA_IS_VALID_OFFSET                       0x00000000
376 #define RX_MPDU_DESC_INFO_0_SA_IS_VALID_LSB                          25
377 #define RX_MPDU_DESC_INFO_0_SA_IS_VALID_MASK                         0x02000000
378 
379 /* Description		RX_MPDU_DESC_INFO_0_SA_IDX_TIMEOUT
380 
381 			When set, at least 1 MSDU within the MPDU has an
382 			unsuccessful MAC source address search due to the expiration
383 			of the search timer.
384 
385 			<legal all>
386 */
387 #define RX_MPDU_DESC_INFO_0_SA_IDX_TIMEOUT_OFFSET                    0x00000000
388 #define RX_MPDU_DESC_INFO_0_SA_IDX_TIMEOUT_LSB                       26
389 #define RX_MPDU_DESC_INFO_0_SA_IDX_TIMEOUT_MASK                      0x04000000
390 
391 /* Description		RX_MPDU_DESC_INFO_0_DA_IS_VALID
392 
393 			When set, OLE found a valid DA entry for all MSDUs in
394 			this MPDU
395 
396 			<legal all>
397 */
398 #define RX_MPDU_DESC_INFO_0_DA_IS_VALID_OFFSET                       0x00000000
399 #define RX_MPDU_DESC_INFO_0_DA_IS_VALID_LSB                          27
400 #define RX_MPDU_DESC_INFO_0_DA_IS_VALID_MASK                         0x08000000
401 
402 /* Description		RX_MPDU_DESC_INFO_0_DA_IS_MCBC
403 
404 			Field Only valid if da_is_valid is set
405 
406 
407 
408 			When set, at least one of the DA addresses is a
409 			Multicast or Broadcast address.
410 
411 			<legal all>
412 */
413 #define RX_MPDU_DESC_INFO_0_DA_IS_MCBC_OFFSET                        0x00000000
414 #define RX_MPDU_DESC_INFO_0_DA_IS_MCBC_LSB                           28
415 #define RX_MPDU_DESC_INFO_0_DA_IS_MCBC_MASK                          0x10000000
416 
417 /* Description		RX_MPDU_DESC_INFO_0_DA_IDX_TIMEOUT
418 
419 			When set, at least 1 MSDU within the MPDU has an
420 			unsuccessful MAC destination address search due to the
421 			expiration of the search timer.
422 
423 			<legal all>
424 */
425 #define RX_MPDU_DESC_INFO_0_DA_IDX_TIMEOUT_OFFSET                    0x00000000
426 #define RX_MPDU_DESC_INFO_0_DA_IDX_TIMEOUT_LSB                       29
427 #define RX_MPDU_DESC_INFO_0_DA_IDX_TIMEOUT_MASK                      0x20000000
428 
429 /* Description		RX_MPDU_DESC_INFO_0_RAW_MPDU
430 
431 			Field only valid when first_msdu_in_mpdu_flag is set.
432 
433 
434 
435 			When set, the contents in the MSDU buffer contains a
436 			'RAW' MPDU. This 'RAW' MPDU might be spread out over
437 			multiple MSDU buffers.
438 
439 			<legal all>
440 */
441 #define RX_MPDU_DESC_INFO_0_RAW_MPDU_OFFSET                          0x00000000
442 #define RX_MPDU_DESC_INFO_0_RAW_MPDU_LSB                             30
443 #define RX_MPDU_DESC_INFO_0_RAW_MPDU_MASK                            0x40000000
444 
445 /* Description		RX_MPDU_DESC_INFO_0_MORE_FRAGMENT_FLAG
446 
447 			The More Fragment bit setting from the MPDU header of
448 			the received frame
449 
450 
451 
452 			<legal all>
453 */
454 #define RX_MPDU_DESC_INFO_0_MORE_FRAGMENT_FLAG_OFFSET                0x00000000
455 #define RX_MPDU_DESC_INFO_0_MORE_FRAGMENT_FLAG_LSB                   31
456 #define RX_MPDU_DESC_INFO_0_MORE_FRAGMENT_FLAG_MASK                  0x80000000
457 
458 /* Description		RX_MPDU_DESC_INFO_1_PEER_META_DATA
459 
460 			Meta data that SW has programmed in the Peer table entry
461 			of the transmitting STA.
462 
463 			<legal all>
464 */
465 #define RX_MPDU_DESC_INFO_1_PEER_META_DATA_OFFSET                    0x00000004
466 #define RX_MPDU_DESC_INFO_1_PEER_META_DATA_LSB                       0
467 #define RX_MPDU_DESC_INFO_1_PEER_META_DATA_MASK                      0xffffffff
468 
469 
470 #endif // _RX_MPDU_DESC_INFO_H_
471