xref: /wlan-driver/fw-api/hw/qca6290/11ax/v1/rx_msdu_link.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1 /*
2  * Copyright (c) 2016-2017 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_MSDU_LINK_H_
20 #define _RX_MSDU_LINK_H_
21 #if !defined(__ASSEMBLER__)
22 #endif
23 
24 #include "uniform_descriptor_header.h"
25 #include "buffer_addr_info.h"
26 #include "rx_msdu_details.h"
27 
28 // ################ START SUMMARY #################
29 //
30 //	Dword	Fields
31 //	0	struct uniform_descriptor_header descriptor_header;
32 //	1-2	struct buffer_addr_info next_msdu_link_desc_addr_info;
33 //	3	receive_queue_number[15:0], first_rx_msdu_link_struct[16], reserved_3a[31:17]
34 //	4	pn_31_0[31:0]
35 //	5	pn_63_32[31:0]
36 //	6	pn_95_64[31:0]
37 //	7	pn_127_96[31:0]
38 //	8-11	struct rx_msdu_details msdu_0;
39 //	12-15	struct rx_msdu_details msdu_1;
40 //	16-19	struct rx_msdu_details msdu_2;
41 //	20-23	struct rx_msdu_details msdu_3;
42 //	24-27	struct rx_msdu_details msdu_4;
43 //	28-31	struct rx_msdu_details msdu_5;
44 //
45 // ################ END SUMMARY #################
46 
47 #define NUM_OF_DWORDS_RX_MSDU_LINK 32
48 
49 struct rx_msdu_link {
50     struct            uniform_descriptor_header                       descriptor_header;
51     struct            buffer_addr_info                       next_msdu_link_desc_addr_info;
52              uint32_t receive_queue_number            : 16, //[15:0]
53                       first_rx_msdu_link_struct       :  1, //[16]
54                       reserved_3a                     : 15; //[31:17]
55              uint32_t pn_31_0                         : 32; //[31:0]
56              uint32_t pn_63_32                        : 32; //[31:0]
57              uint32_t pn_95_64                        : 32; //[31:0]
58              uint32_t pn_127_96                       : 32; //[31:0]
59     struct            rx_msdu_details                       msdu_0;
60     struct            rx_msdu_details                       msdu_1;
61     struct            rx_msdu_details                       msdu_2;
62     struct            rx_msdu_details                       msdu_3;
63     struct            rx_msdu_details                       msdu_4;
64     struct            rx_msdu_details                       msdu_5;
65 };
66 
67 /*
68 
69 struct uniform_descriptor_header descriptor_header
70 
71 			Details about which module owns this struct.
72 
73 			Note that sub field Buffer_type shall be set to
74 			Receive_MSDU_Link_descriptor
75 
76 struct buffer_addr_info next_msdu_link_desc_addr_info
77 
78 			Details of the physical address of the next MSDU link
79 			descriptor that contains info about additional MSDUs that
80 			are part of this MPDU.
81 
82 receive_queue_number
83 
84 			Indicates the Receive queue to which this MPDU
85 			descriptor belongs
86 
87 			Used for tracking, finding bugs and debugging.
88 
89 			<legal all>
90 
91 first_rx_msdu_link_struct
92 
93 			When set, this RX_MSDU_link descriptor is the first one
94 			in the MSDU link list. Field MSDU_0 points to the very first
95 			MSDU buffer descriptor in the MPDU
96 
97 			<legal all>
98 
99 reserved_3a
100 
101 			<legal 0>
102 
103 pn_31_0
104 
105 
106 
107 
108 			31-0 bits of the 256-bit packet number bitmap.
109 
110 			<legal all>
111 
112 pn_63_32
113 
114 
115 
116 
117 			63-32 bits of the 256-bit packet number bitmap.
118 
119 			<legal all>
120 
121 pn_95_64
122 
123 
124 
125 
126 			95-64 bits of the 256-bit packet number bitmap.
127 
128 			<legal all>
129 
130 pn_127_96
131 
132 
133 
134 
135 			127-96 bits of the 256-bit packet number bitmap.
136 
137 			<legal all>
138 
139 struct rx_msdu_details msdu_0
140 
141 			When First_RX_MSDU_link_struct  is set, this MSDU is the
142 			first in the MPDU
143 
144 
145 
146 			When First_RX_MSDU_link_struct  is NOT set, this MSDU
147 			follows the last MSDU in the previous RX_MSDU_link data
148 			structure
149 
150 struct rx_msdu_details msdu_1
151 
152 			Details of next MSDU in this (MSDU flow) linked list
153 
154 struct rx_msdu_details msdu_2
155 
156 			Details of next MSDU in this (MSDU flow) linked list
157 
158 struct rx_msdu_details msdu_3
159 
160 			Details of next MSDU in this (MSDU flow) linked list
161 
162 struct rx_msdu_details msdu_4
163 
164 			Details of next MSDU in this (MSDU flow) linked list
165 
166 struct rx_msdu_details msdu_5
167 
168 			Details of next MSDU in this (MSDU flow) linked list
169 */
170 
171 #define RX_MSDU_LINK_0_UNIFORM_DESCRIPTOR_HEADER_DESCRIPTOR_HEADER_OFFSET 0x00000000
172 #define RX_MSDU_LINK_0_UNIFORM_DESCRIPTOR_HEADER_DESCRIPTOR_HEADER_LSB 0
173 #define RX_MSDU_LINK_0_UNIFORM_DESCRIPTOR_HEADER_DESCRIPTOR_HEADER_MASK 0xffffffff
174 #define RX_MSDU_LINK_1_BUFFER_ADDR_INFO_NEXT_MSDU_LINK_DESC_ADDR_INFO_OFFSET 0x00000004
175 #define RX_MSDU_LINK_1_BUFFER_ADDR_INFO_NEXT_MSDU_LINK_DESC_ADDR_INFO_LSB 0
176 #define RX_MSDU_LINK_1_BUFFER_ADDR_INFO_NEXT_MSDU_LINK_DESC_ADDR_INFO_MASK 0xffffffff
177 #define RX_MSDU_LINK_2_BUFFER_ADDR_INFO_NEXT_MSDU_LINK_DESC_ADDR_INFO_OFFSET 0x00000008
178 #define RX_MSDU_LINK_2_BUFFER_ADDR_INFO_NEXT_MSDU_LINK_DESC_ADDR_INFO_LSB 0
179 #define RX_MSDU_LINK_2_BUFFER_ADDR_INFO_NEXT_MSDU_LINK_DESC_ADDR_INFO_MASK 0xffffffff
180 
181 /* Description		RX_MSDU_LINK_3_RECEIVE_QUEUE_NUMBER
182 
183 			Indicates the Receive queue to which this MPDU
184 			descriptor belongs
185 
186 			Used for tracking, finding bugs and debugging.
187 
188 			<legal all>
189 */
190 #define RX_MSDU_LINK_3_RECEIVE_QUEUE_NUMBER_OFFSET                   0x0000000c
191 #define RX_MSDU_LINK_3_RECEIVE_QUEUE_NUMBER_LSB                      0
192 #define RX_MSDU_LINK_3_RECEIVE_QUEUE_NUMBER_MASK                     0x0000ffff
193 
194 /* Description		RX_MSDU_LINK_3_FIRST_RX_MSDU_LINK_STRUCT
195 
196 			When set, this RX_MSDU_link descriptor is the first one
197 			in the MSDU link list. Field MSDU_0 points to the very first
198 			MSDU buffer descriptor in the MPDU
199 
200 			<legal all>
201 */
202 #define RX_MSDU_LINK_3_FIRST_RX_MSDU_LINK_STRUCT_OFFSET              0x0000000c
203 #define RX_MSDU_LINK_3_FIRST_RX_MSDU_LINK_STRUCT_LSB                 16
204 #define RX_MSDU_LINK_3_FIRST_RX_MSDU_LINK_STRUCT_MASK                0x00010000
205 
206 /* Description		RX_MSDU_LINK_3_RESERVED_3A
207 
208 			<legal 0>
209 */
210 #define RX_MSDU_LINK_3_RESERVED_3A_OFFSET                            0x0000000c
211 #define RX_MSDU_LINK_3_RESERVED_3A_LSB                               17
212 #define RX_MSDU_LINK_3_RESERVED_3A_MASK                              0xfffe0000
213 
214 /* Description		RX_MSDU_LINK_4_PN_31_0
215 
216 
217 
218 
219 			31-0 bits of the 256-bit packet number bitmap.
220 
221 			<legal all>
222 */
223 #define RX_MSDU_LINK_4_PN_31_0_OFFSET                                0x00000010
224 #define RX_MSDU_LINK_4_PN_31_0_LSB                                   0
225 #define RX_MSDU_LINK_4_PN_31_0_MASK                                  0xffffffff
226 
227 /* Description		RX_MSDU_LINK_5_PN_63_32
228 
229 
230 
231 
232 			63-32 bits of the 256-bit packet number bitmap.
233 
234 			<legal all>
235 */
236 #define RX_MSDU_LINK_5_PN_63_32_OFFSET                               0x00000014
237 #define RX_MSDU_LINK_5_PN_63_32_LSB                                  0
238 #define RX_MSDU_LINK_5_PN_63_32_MASK                                 0xffffffff
239 
240 /* Description		RX_MSDU_LINK_6_PN_95_64
241 
242 
243 
244 
245 			95-64 bits of the 256-bit packet number bitmap.
246 
247 			<legal all>
248 */
249 #define RX_MSDU_LINK_6_PN_95_64_OFFSET                               0x00000018
250 #define RX_MSDU_LINK_6_PN_95_64_LSB                                  0
251 #define RX_MSDU_LINK_6_PN_95_64_MASK                                 0xffffffff
252 
253 /* Description		RX_MSDU_LINK_7_PN_127_96
254 
255 
256 
257 
258 			127-96 bits of the 256-bit packet number bitmap.
259 
260 			<legal all>
261 */
262 #define RX_MSDU_LINK_7_PN_127_96_OFFSET                              0x0000001c
263 #define RX_MSDU_LINK_7_PN_127_96_LSB                                 0
264 #define RX_MSDU_LINK_7_PN_127_96_MASK                                0xffffffff
265 #define RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_OFFSET                 0x00000020
266 #define RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_LSB                    0
267 #define RX_MSDU_LINK_8_RX_MSDU_DETAILS_MSDU_0_MASK                   0xffffffff
268 #define RX_MSDU_LINK_9_RX_MSDU_DETAILS_MSDU_0_OFFSET                 0x00000024
269 #define RX_MSDU_LINK_9_RX_MSDU_DETAILS_MSDU_0_LSB                    0
270 #define RX_MSDU_LINK_9_RX_MSDU_DETAILS_MSDU_0_MASK                   0xffffffff
271 #define RX_MSDU_LINK_10_RX_MSDU_DETAILS_MSDU_0_OFFSET                0x00000028
272 #define RX_MSDU_LINK_10_RX_MSDU_DETAILS_MSDU_0_LSB                   0
273 #define RX_MSDU_LINK_10_RX_MSDU_DETAILS_MSDU_0_MASK                  0xffffffff
274 #define RX_MSDU_LINK_11_RX_MSDU_DETAILS_MSDU_0_OFFSET                0x0000002c
275 #define RX_MSDU_LINK_11_RX_MSDU_DETAILS_MSDU_0_LSB                   0
276 #define RX_MSDU_LINK_11_RX_MSDU_DETAILS_MSDU_0_MASK                  0xffffffff
277 #define RX_MSDU_LINK_12_RX_MSDU_DETAILS_MSDU_1_OFFSET                0x00000030
278 #define RX_MSDU_LINK_12_RX_MSDU_DETAILS_MSDU_1_LSB                   0
279 #define RX_MSDU_LINK_12_RX_MSDU_DETAILS_MSDU_1_MASK                  0xffffffff
280 #define RX_MSDU_LINK_13_RX_MSDU_DETAILS_MSDU_1_OFFSET                0x00000034
281 #define RX_MSDU_LINK_13_RX_MSDU_DETAILS_MSDU_1_LSB                   0
282 #define RX_MSDU_LINK_13_RX_MSDU_DETAILS_MSDU_1_MASK                  0xffffffff
283 #define RX_MSDU_LINK_14_RX_MSDU_DETAILS_MSDU_1_OFFSET                0x00000038
284 #define RX_MSDU_LINK_14_RX_MSDU_DETAILS_MSDU_1_LSB                   0
285 #define RX_MSDU_LINK_14_RX_MSDU_DETAILS_MSDU_1_MASK                  0xffffffff
286 #define RX_MSDU_LINK_15_RX_MSDU_DETAILS_MSDU_1_OFFSET                0x0000003c
287 #define RX_MSDU_LINK_15_RX_MSDU_DETAILS_MSDU_1_LSB                   0
288 #define RX_MSDU_LINK_15_RX_MSDU_DETAILS_MSDU_1_MASK                  0xffffffff
289 #define RX_MSDU_LINK_16_RX_MSDU_DETAILS_MSDU_2_OFFSET                0x00000040
290 #define RX_MSDU_LINK_16_RX_MSDU_DETAILS_MSDU_2_LSB                   0
291 #define RX_MSDU_LINK_16_RX_MSDU_DETAILS_MSDU_2_MASK                  0xffffffff
292 #define RX_MSDU_LINK_17_RX_MSDU_DETAILS_MSDU_2_OFFSET                0x00000044
293 #define RX_MSDU_LINK_17_RX_MSDU_DETAILS_MSDU_2_LSB                   0
294 #define RX_MSDU_LINK_17_RX_MSDU_DETAILS_MSDU_2_MASK                  0xffffffff
295 #define RX_MSDU_LINK_18_RX_MSDU_DETAILS_MSDU_2_OFFSET                0x00000048
296 #define RX_MSDU_LINK_18_RX_MSDU_DETAILS_MSDU_2_LSB                   0
297 #define RX_MSDU_LINK_18_RX_MSDU_DETAILS_MSDU_2_MASK                  0xffffffff
298 #define RX_MSDU_LINK_19_RX_MSDU_DETAILS_MSDU_2_OFFSET                0x0000004c
299 #define RX_MSDU_LINK_19_RX_MSDU_DETAILS_MSDU_2_LSB                   0
300 #define RX_MSDU_LINK_19_RX_MSDU_DETAILS_MSDU_2_MASK                  0xffffffff
301 #define RX_MSDU_LINK_20_RX_MSDU_DETAILS_MSDU_3_OFFSET                0x00000050
302 #define RX_MSDU_LINK_20_RX_MSDU_DETAILS_MSDU_3_LSB                   0
303 #define RX_MSDU_LINK_20_RX_MSDU_DETAILS_MSDU_3_MASK                  0xffffffff
304 #define RX_MSDU_LINK_21_RX_MSDU_DETAILS_MSDU_3_OFFSET                0x00000054
305 #define RX_MSDU_LINK_21_RX_MSDU_DETAILS_MSDU_3_LSB                   0
306 #define RX_MSDU_LINK_21_RX_MSDU_DETAILS_MSDU_3_MASK                  0xffffffff
307 #define RX_MSDU_LINK_22_RX_MSDU_DETAILS_MSDU_3_OFFSET                0x00000058
308 #define RX_MSDU_LINK_22_RX_MSDU_DETAILS_MSDU_3_LSB                   0
309 #define RX_MSDU_LINK_22_RX_MSDU_DETAILS_MSDU_3_MASK                  0xffffffff
310 #define RX_MSDU_LINK_23_RX_MSDU_DETAILS_MSDU_3_OFFSET                0x0000005c
311 #define RX_MSDU_LINK_23_RX_MSDU_DETAILS_MSDU_3_LSB                   0
312 #define RX_MSDU_LINK_23_RX_MSDU_DETAILS_MSDU_3_MASK                  0xffffffff
313 #define RX_MSDU_LINK_24_RX_MSDU_DETAILS_MSDU_4_OFFSET                0x00000060
314 #define RX_MSDU_LINK_24_RX_MSDU_DETAILS_MSDU_4_LSB                   0
315 #define RX_MSDU_LINK_24_RX_MSDU_DETAILS_MSDU_4_MASK                  0xffffffff
316 #define RX_MSDU_LINK_25_RX_MSDU_DETAILS_MSDU_4_OFFSET                0x00000064
317 #define RX_MSDU_LINK_25_RX_MSDU_DETAILS_MSDU_4_LSB                   0
318 #define RX_MSDU_LINK_25_RX_MSDU_DETAILS_MSDU_4_MASK                  0xffffffff
319 #define RX_MSDU_LINK_26_RX_MSDU_DETAILS_MSDU_4_OFFSET                0x00000068
320 #define RX_MSDU_LINK_26_RX_MSDU_DETAILS_MSDU_4_LSB                   0
321 #define RX_MSDU_LINK_26_RX_MSDU_DETAILS_MSDU_4_MASK                  0xffffffff
322 #define RX_MSDU_LINK_27_RX_MSDU_DETAILS_MSDU_4_OFFSET                0x0000006c
323 #define RX_MSDU_LINK_27_RX_MSDU_DETAILS_MSDU_4_LSB                   0
324 #define RX_MSDU_LINK_27_RX_MSDU_DETAILS_MSDU_4_MASK                  0xffffffff
325 #define RX_MSDU_LINK_28_RX_MSDU_DETAILS_MSDU_5_OFFSET                0x00000070
326 #define RX_MSDU_LINK_28_RX_MSDU_DETAILS_MSDU_5_LSB                   0
327 #define RX_MSDU_LINK_28_RX_MSDU_DETAILS_MSDU_5_MASK                  0xffffffff
328 #define RX_MSDU_LINK_29_RX_MSDU_DETAILS_MSDU_5_OFFSET                0x00000074
329 #define RX_MSDU_LINK_29_RX_MSDU_DETAILS_MSDU_5_LSB                   0
330 #define RX_MSDU_LINK_29_RX_MSDU_DETAILS_MSDU_5_MASK                  0xffffffff
331 #define RX_MSDU_LINK_30_RX_MSDU_DETAILS_MSDU_5_OFFSET                0x00000078
332 #define RX_MSDU_LINK_30_RX_MSDU_DETAILS_MSDU_5_LSB                   0
333 #define RX_MSDU_LINK_30_RX_MSDU_DETAILS_MSDU_5_MASK                  0xffffffff
334 #define RX_MSDU_LINK_31_RX_MSDU_DETAILS_MSDU_5_OFFSET                0x0000007c
335 #define RX_MSDU_LINK_31_RX_MSDU_DETAILS_MSDU_5_LSB                   0
336 #define RX_MSDU_LINK_31_RX_MSDU_DETAILS_MSDU_5_MASK                  0xffffffff
337 
338 
339 #endif // _RX_MSDU_LINK_H_
340