xref: /wlan-driver/fw-api/hw/kiwi/v2/tlv_hdr.h (revision 5113495b16420b49004c444715d2daae2066e7dc)
1 
2 /*
3  * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 
21 
22 #ifndef _TLV_HDR_H_
23 #define _TLV_HDR_H_
24 #if !defined(__ASSEMBLER__)
25 #endif
26 
27 #define _TLV_USERID_WIDTH_      6
28 #define _TLV_DATA_WIDTH_        32
29 #define _TLV_TAG_WIDTH_         9
30 
31 #define _TLV_MRV_EN_LEN_WIDTH_  9
32 #define _TLV_MRV_DIS_LEN_WIDTH_ 12
33 
34 #define _TLV_16_DATA_WIDTH_     16
35 #define _TLV_16_TAG_WIDTH_      5
36 #define _TLV_16_LEN_WIDTH_      4
37 #define _TLV_CTAG_WIDTH_        5
38 #define _TLV_44_DATA_WIDTH_     44
39 #define _TLV_64_DATA_WIDTH_     64
40 #define _TLV_76_DATA_WIDTH_     64
41 #define _TLV_CDATA_WIDTH_       32
42 #define _TLV_CDATA_76_WIDTH_    64
43 
44 struct tlv_usr_16_tlword_t {
45 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
46            uint16_t             tlv_cflg_reserved   :   1,
47                                 tlv_tag             :   _TLV_16_TAG_WIDTH_,
48                                 tlv_len             :   _TLV_16_LEN_WIDTH_,
49                                 tlv_usrid           :   _TLV_USERID_WIDTH_;
50 #else
51            uint16_t             tlv_usrid           :   _TLV_USERID_WIDTH_,
52                                 tlv_len             :   _TLV_16_LEN_WIDTH_,
53                                 tlv_tag             :   _TLV_16_TAG_WIDTH_,
54                                 tlv_cflg_reserved   :   1;
55 #endif
56 };
57 
58 struct tlv_16_tlword_t {
59 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
60            uint16_t             tlv_cflg_reserved   :   1,
61                                 tlv_len             :   _TLV_16_LEN_WIDTH_,
62                                 tlv_tag             :   _TLV_16_TAG_WIDTH_,
63                                 tlv_reserved        :   6;
64 #else
65            uint16_t             tlv_reserved        :   6,
66                                 tlv_tag             :   _TLV_16_TAG_WIDTH_,
67                                 tlv_len             :   _TLV_16_LEN_WIDTH_,
68                                 tlv_cflg_reserved   :   1;
69 #endif
70 };
71 
72 struct tlv_mac_usr_32_tlword_t {
73 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
74            uint32_t             tlv_cflg_reserved   :   1,
75                                 tlv_tag             :   _TLV_TAG_WIDTH_,
76                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
77                                 tlv_src_linkid      :   3,
78                                 tlv_mrv             :   1,
79                                 tlv_usrid           :   _TLV_USERID_WIDTH_;
80 #else
81            uint32_t             tlv_usrid           :   _TLV_USERID_WIDTH_,
82                                 tlv_mrv             :   1,
83                                 tlv_src_linkid      :   3,
84                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
85                                 tlv_tag             :   _TLV_TAG_WIDTH_,
86                                 tlv_cflg_reserved   :   1;
87 #endif
88 };
89 
90 struct tlv_mac_32_tlword_t {
91 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
92            uint32_t             tlv_cflg_reserved   :   1,
93                                 tlv_tag             :   _TLV_TAG_WIDTH_,
94                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
95                                 tlv_src_linkid      :   3,
96                                 tlv_mrv             :   1,
97                                 tlv_reserved        :   6;
98 #else
99            uint32_t             tlv_reserved        :   6,
100                                 tlv_mrv             :   1,
101                                 tlv_src_linkid      :   3,
102                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
103                                 tlv_tag             :   _TLV_TAG_WIDTH_,
104                                 tlv_cflg_reserved   :   1;
105 #endif
106 };
107 
108 struct tlv_mac_usr_64_tlword_t {
109 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
110            uint64_t             tlv_cflg_reserved   :   1,
111                                 tlv_tag             :   _TLV_TAG_WIDTH_,
112                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
113                                 tlv_src_linkid      :   3,
114                                 tlv_mrv             :   1,
115                                 tlv_usrid           :   _TLV_USERID_WIDTH_,
116 #else
117            uint64_t             tlv_usrid           :   _TLV_USERID_WIDTH_,
118                                 tlv_mrv             :   1,
119                                 tlv_src_linkid      :   3,
120                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
121                                 tlv_tag             :   _TLV_TAG_WIDTH_,
122                                 tlv_cflg_reserved   :   1,
123 #endif
124                                 tlv_reserved        :   32;
125 };
126 
127 struct tlv_mac_64_tlword_t {
128 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
129            uint64_t             tlv_cflg_reserved   :   1,
130                                 tlv_tag             :   _TLV_TAG_WIDTH_,
131                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
132                                 tlv_src_linkid      :   3,
133                                 tlv_mrv             :   1,
134                                 tlv_reserved        :   38;
135 #else
136            uint64_t             tlv_usrid_reserved  :   _TLV_USERID_WIDTH_,
137                                 tlv_mrv             :   1,
138                                 tlv_src_linkid      :   3,
139                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
140                                 tlv_tag             :   _TLV_TAG_WIDTH_,
141                                 tlv_cflg_reserved   :   1,
142                                 tlv_reserved        :   32;
143 #endif
144 };
145 
146 struct tlv_mac_usr_44_tlword_t {
147 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
148            uint64_t             tlv_compression     :   1,
149                                 tlv_tag             :   _TLV_TAG_WIDTH_,
150                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
151                                 tlv_src_linkid      :   3,
152                                 tlv_mrv             :   1,
153                                 tlv_usrid           :   _TLV_USERID_WIDTH_,
154                                 tlv_reserved        :   10,
155                                 pad_44to64_bit      :   22;
156 #else
157            uint64_t             tlv_usrid           :   _TLV_USERID_WIDTH_,
158                                 tlv_mrv             :   1,
159                                 tlv_src_linkid      :   3,
160                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
161                                 tlv_tag             :   _TLV_TAG_WIDTH_,
162                                 tlv_compression     :   1,
163                                 pad_44to64_bit      :   22,
164                                 tlv_reserved        :   10;
165 #endif
166 };
167 
168 struct tlv_mac_44_tlword_t {
169 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
170            uint64_t             tlv_compression     :   1,
171                                 tlv_tag             :   _TLV_TAG_WIDTH_,
172                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
173                                 tlv_src_linkid      :   3,
174                                 tlv_mrv             :   1,
175                                 tlv_reserved        :   16,
176                                 pad_44to64_bit      :   22;
177 #else
178            uint64_t             tlv_usrid_reserved  :   _TLV_USERID_WIDTH_,
179                                 tlv_mrv             :   1,
180                                 tlv_src_linkid      :   3,
181                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
182                                 tlv_tag             :   _TLV_TAG_WIDTH_,
183                                 tlv_compression     :   1,
184                                 pad_44to64_bit      :   22,
185                                 tlv_reserved        :   10;
186 #endif
187 };
188 
189 struct tlv_mac_usr_76_tlword_t {
190 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
191            uint64_t             tlv_compression     :   1,
192                                 tlv_tag             :   _TLV_TAG_WIDTH_,
193                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
194                                 tlv_src_linkid      :   3,
195                                 tlv_mrv             :   1,
196                                 tlv_usrid           :   _TLV_USERID_WIDTH_,
197 #else
198            uint64_t             tlv_usrid           :   _TLV_USERID_WIDTH_,
199                                 tlv_mrv             :   1,
200                                 tlv_src_linkid      :   3,
201                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
202                                 tlv_tag             :   _TLV_TAG_WIDTH_,
203                                 tlv_compression     :   1,
204 #endif
205                                 tlv_reserved        :   32;
206            uint64_t             pad_64to128_bit     :   64;
207 };
208 
209 struct tlv_mac_76_tlword_t {
210 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
211            uint64_t             tlv_compression     :   1,
212                                 tlv_tag             :   _TLV_TAG_WIDTH_,
213                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
214                                 tlv_src_linkid      :   3,
215                                 tlv_mrv             :   1,
216                                 tlv_reserved        :   38;
217 #else
218            uint64_t             tlv_usrid_reserved  :   _TLV_USERID_WIDTH_,
219                                 tlv_mrv             :   1,
220                                 tlv_src_linkid      :   3,
221                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
222                                 tlv_tag             :   _TLV_TAG_WIDTH_,
223                                 tlv_compression     :   1,
224                                 tlv_reserved        :   32;
225 #endif
226            uint64_t             pad_64to128_bit     :   64;
227 };
228 
229 struct tlv_usr_c_44_tlword_t {
230 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
231            uint64_t             tlv_compression     :   1,
232                                 tlv_ctag            :   _TLV_CTAG_WIDTH_,
233                                 tlv_usrid           :   _TLV_USERID_WIDTH_,
234                                 tlv_cdata           :   _TLV_CDATA_WIDTH_,
235                                 pad_44to64_bit      :   20;
236 #else
237            uint64_t             tlv_cdata_lower_20  :   20,
238                                 tlv_usrid           :   _TLV_USERID_WIDTH_,
239                                 tlv_ctag            :   _TLV_CTAG_WIDTH_,
240                                 tlv_compression     :   1,
241                                 pad_44to64_bit      :   20,
242                                 tlv_cdata_upper_12  :   12;
243 #endif
244 };
245 
246 struct tlv_usr_c_76_tlword_t {
247 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
248            uint64_t             tlv_compression     :   1,
249                                 tlv_ctag            :   _TLV_CTAG_WIDTH_,
250                                 tlv_usrid           :   _TLV_USERID_WIDTH_,
251                                 tlv_cdata_lower_52  :   52;
252            uint64_t             tlv_cdata_upper_12  :   12,
253                                 pad_76to128_bit     :   52;
254 #else
255            uint64_t             tlv_cdata_lower_20  :   20,
256                                 tlv_usrid           :   _TLV_USERID_WIDTH_,
257                                 tlv_ctag            :   _TLV_CTAG_WIDTH_,
258                                 tlv_compression     :   1,
259                                 tlv_cdata_middle_32 :   32;
260            uint64_t             pad_76to96_bit      :   20,
261                                 tlv_cdata_upper_12  :   12,
262                                 pad_96to128_bit     :   32;
263 #endif
264 };
265 
266 struct tlv_usr_32_hdr {
267 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
268            uint64_t             tlv_cflg_reserved   :   1,
269                                 tlv_tag             :   _TLV_TAG_WIDTH_,
270                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
271                                 tlv_src_linkid      :   3,
272                                 tlv_mrv             :   1,
273                                 tlv_usrid           :   _TLV_USERID_WIDTH_,
274 #else
275            uint32_t             tlv_usrid           :   _TLV_USERID_WIDTH_,
276                                 tlv_mrv             :   1,
277                                 tlv_src_linkid      :   3,
278                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
279                                 tlv_tag             :   _TLV_TAG_WIDTH_,
280                                 tlv_cflg_reserved   :   1,
281 #endif
282                                 tlv_reserved        :   32;
283 };
284 
285 struct tlv_32_hdr {
286 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
287            uint64_t             tlv_cflg_reserved   :   1,
288                                 tlv_tag             :   _TLV_TAG_WIDTH_,
289                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
290                                 tlv_src_linkid      :   3,
291                                 tlv_mrv             :   1,
292                                 tlv_reserved        :   38;
293 #else
294            uint64_t             tlv_usrid_reserved  :   _TLV_USERID_WIDTH_,
295                                 tlv_mrv             :   1,
296                                 tlv_src_linkid      :   3,
297                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
298                                 tlv_tag             :   _TLV_TAG_WIDTH_,
299                                 tlv_cflg_reserved   :   1,
300                                 tlv_reserved        :   32;
301 #endif
302 };
303 
304 struct tlv_mlo_usr_64_tlw32_t {
305 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
306            uint32_t             tlv_cflg_reserved   :   1,
307                                 tlv_tag             :   _TLV_TAG_WIDTH_,
308                                 tlv_len             :   _TLV_MRV_EN_LEN_WIDTH_,
309                                 tlv_dst_linkid      :   3,
310                                 tlv_src_linkid      :   3,
311                                 tlv_mrv             :   1,
312                                 tlv_usrid           :   _TLV_USERID_WIDTH_;
313 #else
314            uint32_t             tlv_usrid           :   _TLV_USERID_WIDTH_,
315                                 tlv_mrv             :   1,
316                                 tlv_src_linkid      :   3,
317                                 tlv_dst_linkid      :   3,
318                                 tlv_len             :   _TLV_MRV_EN_LEN_WIDTH_,
319                                 tlv_tag             :   _TLV_TAG_WIDTH_,
320                                 tlv_cflg_reserved   :   1;
321 #endif
322            uint32_t             pad_32to64_bit      :   32;
323 };
324 
325 struct tlv_mlo_64_tlw32_t {
326 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
327            uint32_t             tlv_cflg_reserved   :   1,
328                                 tlv_tag             :   _TLV_TAG_WIDTH_,
329                                 tlv_len             :   _TLV_MRV_EN_LEN_WIDTH_,
330                                 tlv_dst_linkid      :   3,
331                                 tlv_src_linkid      :   3,
332                                 tlv_mrv             :   1,
333                                 tlv_reserved        :   _TLV_USERID_WIDTH_;
334 #else
335            uint32_t             tlv_reserved        :   _TLV_USERID_WIDTH_,
336                                 tlv_mrv             :   1,
337                                 tlv_src_linkid      :   3,
338                                 tlv_dst_linkid      :   3,
339                                 tlv_len             :   _TLV_MRV_EN_LEN_WIDTH_,
340                                 tlv_tag             :   _TLV_TAG_WIDTH_,
341                                 tlv_cflg_reserved   :   1;
342 #endif
343            uint32_t             pad_32to64_bit      :   32;
344 };
345 
346 struct tlv_mac_usr_64_tlw32_t {
347 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
348            uint32_t             tlv_cflg_reserved   :   1,
349                                 tlv_tag             :   _TLV_TAG_WIDTH_,
350                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
351                                 tlv_src_linkid      :   3,
352                                 tlv_mrv             :   1,
353                                 tlv_usrid           :   _TLV_USERID_WIDTH_;
354 #else
355            uint32_t             tlv_usrid           :   _TLV_USERID_WIDTH_,
356                                 tlv_mrv             :   1,
357                                 tlv_src_linkid      :   3,
358                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
359                                 tlv_tag             :   _TLV_TAG_WIDTH_,
360                                 tlv_cflg_reserved   :   1;
361 #endif
362            uint32_t             pad_32to64_bit      :   32;
363 };
364 
365 struct tlv_mac_64_tlw32_t {
366 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
367            uint32_t             tlv_cflg_reserved   :   1,
368                                 tlv_tag             :   _TLV_TAG_WIDTH_,
369                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
370                                 tlv_src_linkid      :   3,
371                                 tlv_mrv             :   1,
372                                 tlv_reserved        :   _TLV_USERID_WIDTH_;
373 #else
374            uint32_t             tlv_reserved        :   _TLV_USERID_WIDTH_,
375                                 tlv_mrv             :   1,
376                                 tlv_src_linkid      :   3,
377                                 tlv_len             :   _TLV_MRV_DIS_LEN_WIDTH_,
378                                 tlv_tag             :   _TLV_TAG_WIDTH_,
379                                 tlv_cflg_reserved   :   1;
380 #endif
381            uint32_t             pad_32to64_bit      :   32;
382 };
383 
384 struct tlv_usr_c_44_tlw32_t {
385 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
386            uint32_t             tlv_compression     :   1,
387                                 tlv_ctag            :   _TLV_CTAG_WIDTH_,
388                                 tlv_usrid           :   _TLV_USERID_WIDTH_,
389                                 tlv_cdata_lower_20  :   20;
390            uint32_t             tlv_cdata_upper_12  :   12,
391                                 pad_44to64_bit      :   20;
392 #else
393            uint32_t             tlv_cdata_lower_20  :   20,
394                                 tlv_usrid           :   _TLV_USERID_WIDTH_,
395                                 tlv_ctag            :   _TLV_CTAG_WIDTH_,
396                                 tlv_compression     :   1;
397            uint32_t             pad_44to64_bit      :   20,
398                                 tlv_cdata_upper_12  :   12;
399 #endif
400 };
401 
402 struct tlv_usr_c_76_tlw32_t {
403 #ifndef WIFI_BIT_ORDER_BIG_ENDIAN
404            uint32_t             tlv_compression     :   1,
405                                 tlv_ctag            :   _TLV_CTAG_WIDTH_,
406                                 tlv_usrid           :   _TLV_USERID_WIDTH_,
407                                 tlv_cdata_lower_20  :   20;
408            uint32_t             tlv_cdata_middle_32 :   32;
409            uint32_t             tlv_cdata_upper_12  :   12,
410                                 pad_76to96_bit      :   20;
411            uint32_t             pad_96to128_bit     :   32;
412 #else
413            uint32_t             tlv_cdata_lower_20  :   20,
414                                 tlv_usrid           :   _TLV_USERID_WIDTH_,
415                                 tlv_ctag            :   _TLV_CTAG_WIDTH_,
416                                 tlv_compression     :   1;
417            uint32_t             tlv_cdata_middle_32 :   32;
418            uint32_t             pad_76to96_bit      :   20,
419                                 tlv_cdata_upper_12  :   12;
420            uint32_t             pad_96to128_bit     :   32;
421 #endif
422 };
423 
424 #endif
425