]> asedeno.scripts.mit.edu Git - linux.git/blob - drivers/net/ethernet/marvell/octeontx2/af/rvu_struct.h
92aac444cd0a508f191a23af2dc09a369025e6d9
[linux.git] / drivers / net / ethernet / marvell / octeontx2 / af / rvu_struct.h
1 /* SPDX-License-Identifier: GPL-2.0
2  * Marvell OcteonTx2 RVU Admin Function driver
3  *
4  * Copyright (C) 2018 Marvell International Ltd.
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  */
10
11 #ifndef RVU_STRUCT_H
12 #define RVU_STRUCT_H
13
14 /* RVU Block Address Enumeration */
15 enum rvu_block_addr_e {
16         BLKADDR_RVUM    = 0x0ULL,
17         BLKADDR_LMT     = 0x1ULL,
18         BLKADDR_MSIX    = 0x2ULL,
19         BLKADDR_NPA     = 0x3ULL,
20         BLKADDR_NIX0    = 0x4ULL,
21         BLKADDR_NIX1    = 0x5ULL,
22         BLKADDR_NPC     = 0x6ULL,
23         BLKADDR_SSO     = 0x7ULL,
24         BLKADDR_SSOW    = 0x8ULL,
25         BLKADDR_TIM     = 0x9ULL,
26         BLKADDR_CPT0    = 0xaULL,
27         BLKADDR_CPT1    = 0xbULL,
28         BLKADDR_NDC0    = 0xcULL,
29         BLKADDR_NDC1    = 0xdULL,
30         BLKADDR_NDC2    = 0xeULL,
31         BLK_COUNT       = 0xfULL,
32 };
33
34 /* RVU Block Type Enumeration */
35 enum rvu_block_type_e {
36         BLKTYPE_RVUM = 0x0,
37         BLKTYPE_MSIX = 0x1,
38         BLKTYPE_LMT  = 0x2,
39         BLKTYPE_NIX  = 0x3,
40         BLKTYPE_NPA  = 0x4,
41         BLKTYPE_NPC  = 0x5,
42         BLKTYPE_SSO  = 0x6,
43         BLKTYPE_SSOW = 0x7,
44         BLKTYPE_TIM  = 0x8,
45         BLKTYPE_CPT  = 0x9,
46         BLKTYPE_NDC  = 0xa,
47         BLKTYPE_MAX  = 0xa,
48 };
49
50 /* RVU Admin function Interrupt Vector Enumeration */
51 enum rvu_af_int_vec_e {
52         RVU_AF_INT_VEC_POISON = 0x0,
53         RVU_AF_INT_VEC_PFFLR  = 0x1,
54         RVU_AF_INT_VEC_PFME   = 0x2,
55         RVU_AF_INT_VEC_GEN    = 0x3,
56         RVU_AF_INT_VEC_MBOX   = 0x4,
57         RVU_AF_INT_VEC_CNT    = 0x5,
58 };
59
60 /**
61  * RVU PF Interrupt Vector Enumeration
62  */
63 enum rvu_pf_int_vec_e {
64         RVU_PF_INT_VEC_VFFLR0     = 0x0,
65         RVU_PF_INT_VEC_VFFLR1     = 0x1,
66         RVU_PF_INT_VEC_VFME0      = 0x2,
67         RVU_PF_INT_VEC_VFME1      = 0x3,
68         RVU_PF_INT_VEC_VFPF_MBOX0 = 0x4,
69         RVU_PF_INT_VEC_VFPF_MBOX1 = 0x5,
70         RVU_PF_INT_VEC_AFPF_MBOX  = 0x6,
71         RVU_PF_INT_VEC_CNT        = 0x7,
72 };
73
74 /* NPA admin queue completion enumeration */
75 enum npa_aq_comp {
76         NPA_AQ_COMP_NOTDONE    = 0x0,
77         NPA_AQ_COMP_GOOD       = 0x1,
78         NPA_AQ_COMP_SWERR      = 0x2,
79         NPA_AQ_COMP_CTX_POISON = 0x3,
80         NPA_AQ_COMP_CTX_FAULT  = 0x4,
81         NPA_AQ_COMP_LOCKERR    = 0x5,
82 };
83
84 /* NPA admin queue context types */
85 enum npa_aq_ctype {
86         NPA_AQ_CTYPE_AURA = 0x0,
87         NPA_AQ_CTYPE_POOL = 0x1,
88 };
89
90 /* NPA admin queue instruction opcodes */
91 enum npa_aq_instop {
92         NPA_AQ_INSTOP_NOP    = 0x0,
93         NPA_AQ_INSTOP_INIT   = 0x1,
94         NPA_AQ_INSTOP_WRITE  = 0x2,
95         NPA_AQ_INSTOP_READ   = 0x3,
96         NPA_AQ_INSTOP_LOCK   = 0x4,
97         NPA_AQ_INSTOP_UNLOCK = 0x5,
98 };
99
100 /* NPA admin queue instruction structure */
101 struct npa_aq_inst_s {
102 #if defined(__BIG_ENDIAN_BITFIELD)
103         u64 doneint               : 1;  /* W0 */
104         u64 reserved_44_62        : 19;
105         u64 cindex                : 20;
106         u64 reserved_17_23        : 7;
107         u64 lf                    : 9;
108         u64 ctype                 : 4;
109         u64 op                    : 4;
110 #else
111         u64 op                    : 4;
112         u64 ctype                 : 4;
113         u64 lf                    : 9;
114         u64 reserved_17_23        : 7;
115         u64 cindex                : 20;
116         u64 reserved_44_62        : 19;
117         u64 doneint               : 1;
118 #endif
119         u64 res_addr;                   /* W1 */
120 };
121
122 /* NPA admin queue result structure */
123 struct npa_aq_res_s {
124 #if defined(__BIG_ENDIAN_BITFIELD)
125         u64 reserved_17_63        : 47; /* W0 */
126         u64 doneint               : 1;
127         u64 compcode              : 8;
128         u64 ctype                 : 4;
129         u64 op                    : 4;
130 #else
131         u64 op                    : 4;
132         u64 ctype                 : 4;
133         u64 compcode              : 8;
134         u64 doneint               : 1;
135         u64 reserved_17_63        : 47;
136 #endif
137         u64 reserved_64_127;            /* W1 */
138 };
139
140 struct npa_aura_s {
141         u64 pool_addr;                  /* W0 */
142 #if defined(__BIG_ENDIAN_BITFIELD)      /* W1 */
143         u64 avg_level             : 8;
144         u64 reserved_118_119      : 2;
145         u64 shift                 : 6;
146         u64 aura_drop             : 8;
147         u64 reserved_98_103       : 6;
148         u64 bp_ena                : 2;
149         u64 aura_drop_ena         : 1;
150         u64 pool_drop_ena         : 1;
151         u64 reserved_93           : 1;
152         u64 avg_con               : 9;
153         u64 pool_way_mask         : 16;
154         u64 pool_caching          : 1;
155         u64 reserved_65           : 2;
156         u64 ena                   : 1;
157 #else
158         u64 ena                   : 1;
159         u64 reserved_65           : 2;
160         u64 pool_caching          : 1;
161         u64 pool_way_mask         : 16;
162         u64 avg_con               : 9;
163         u64 reserved_93           : 1;
164         u64 pool_drop_ena         : 1;
165         u64 aura_drop_ena         : 1;
166         u64 bp_ena                : 2;
167         u64 reserved_98_103       : 6;
168         u64 aura_drop             : 8;
169         u64 shift                 : 6;
170         u64 reserved_118_119      : 2;
171         u64 avg_level             : 8;
172 #endif
173 #if defined(__BIG_ENDIAN_BITFIELD)      /* W2 */
174         u64 reserved_189_191      : 3;
175         u64 nix1_bpid             : 9;
176         u64 reserved_177_179      : 3;
177         u64 nix0_bpid             : 9;
178         u64 reserved_164_167      : 4;
179         u64 count                 : 36;
180 #else
181         u64 count                 : 36;
182         u64 reserved_164_167      : 4;
183         u64 nix0_bpid             : 9;
184         u64 reserved_177_179      : 3;
185         u64 nix1_bpid             : 9;
186         u64 reserved_189_191      : 3;
187 #endif
188 #if defined(__BIG_ENDIAN_BITFIELD)      /* W3 */
189         u64 reserved_252_255      : 4;
190         u64 fc_hyst_bits          : 4;
191         u64 fc_stype              : 2;
192         u64 fc_up_crossing        : 1;
193         u64 fc_ena                : 1;
194         u64 reserved_240_243      : 4;
195         u64 bp                    : 8;
196         u64 reserved_228_231      : 4;
197         u64 limit                 : 36;
198 #else
199         u64 limit                 : 36;
200         u64 reserved_228_231      : 4;
201         u64 bp                    : 8;
202         u64 reserved_240_243      : 4;
203         u64 fc_ena                : 1;
204         u64 fc_up_crossing        : 1;
205         u64 fc_stype              : 2;
206         u64 fc_hyst_bits          : 4;
207         u64 reserved_252_255      : 4;
208 #endif
209         u64 fc_addr;                    /* W4 */
210 #if defined(__BIG_ENDIAN_BITFIELD)      /* W5 */
211         u64 reserved_379_383      : 5;
212         u64 err_qint_idx          : 7;
213         u64 reserved_371          : 1;
214         u64 thresh_qint_idx       : 7;
215         u64 reserved_363          : 1;
216         u64 thresh_up             : 1;
217         u64 thresh_int_ena        : 1;
218         u64 thresh_int            : 1;
219         u64 err_int_ena           : 8;
220         u64 err_int               : 8;
221         u64 update_time           : 16;
222         u64 pool_drop             : 8;
223 #else
224         u64 pool_drop             : 8;
225         u64 update_time           : 16;
226         u64 err_int               : 8;
227         u64 err_int_ena           : 8;
228         u64 thresh_int            : 1;
229         u64 thresh_int_ena        : 1;
230         u64 thresh_up             : 1;
231         u64 reserved_363          : 1;
232         u64 thresh_qint_idx       : 7;
233         u64 reserved_371          : 1;
234         u64 err_qint_idx          : 7;
235         u64 reserved_379_383      : 5;
236 #endif
237 #if defined(__BIG_ENDIAN_BITFIELD)      /* W6 */
238         u64 reserved_420_447      : 28;
239         u64 thresh                : 36;
240 #else
241         u64 thresh                : 36;
242         u64 reserved_420_447      : 28;
243 #endif
244         u64 reserved_448_511;           /* W7 */
245 };
246
247 struct npa_pool_s {
248         u64 stack_base;                 /* W0 */
249 #if defined(__BIG_ENDIAN_BITFIELD)      /* W1 */
250         u64 reserved_115_127      : 13;
251         u64 buf_size              : 11;
252         u64 reserved_100_103      : 4;
253         u64 buf_offset            : 12;
254         u64 stack_way_mask        : 16;
255         u64 reserved_70_71        : 3;
256         u64 stack_caching         : 1;
257         u64 reserved_66_67        : 2;
258         u64 nat_align             : 1;
259         u64 ena                   : 1;
260 #else
261         u64 ena                   : 1;
262         u64 nat_align             : 1;
263         u64 reserved_66_67        : 2;
264         u64 stack_caching         : 1;
265         u64 reserved_70_71        : 3;
266         u64 stack_way_mask        : 16;
267         u64 buf_offset            : 12;
268         u64 reserved_100_103      : 4;
269         u64 buf_size              : 11;
270         u64 reserved_115_127      : 13;
271 #endif
272 #if defined(__BIG_ENDIAN_BITFIELD)      /* W2 */
273         u64 stack_pages           : 32;
274         u64 stack_max_pages       : 32;
275 #else
276         u64 stack_max_pages       : 32;
277         u64 stack_pages           : 32;
278 #endif
279 #if defined(__BIG_ENDIAN_BITFIELD)      /* W3 */
280         u64 reserved_240_255      : 16;
281         u64 op_pc                 : 48;
282 #else
283         u64 op_pc                 : 48;
284         u64 reserved_240_255      : 16;
285 #endif
286 #if defined(__BIG_ENDIAN_BITFIELD)      /* W4 */
287         u64 reserved_316_319      : 4;
288         u64 update_time           : 16;
289         u64 reserved_297_299      : 3;
290         u64 fc_up_crossing        : 1;
291         u64 fc_hyst_bits          : 4;
292         u64 fc_stype              : 2;
293         u64 fc_ena                : 1;
294         u64 avg_con               : 9;
295         u64 avg_level             : 8;
296         u64 reserved_270_271      : 2;
297         u64 shift                 : 6;
298         u64 reserved_260_263      : 4;
299         u64 stack_offset          : 4;
300 #else
301         u64 stack_offset          : 4;
302         u64 reserved_260_263      : 4;
303         u64 shift                 : 6;
304         u64 reserved_270_271      : 2;
305         u64 avg_level             : 8;
306         u64 avg_con               : 9;
307         u64 fc_ena                : 1;
308         u64 fc_stype              : 2;
309         u64 fc_hyst_bits          : 4;
310         u64 fc_up_crossing        : 1;
311         u64 reserved_297_299      : 3;
312         u64 update_time           : 16;
313         u64 reserved_316_319      : 4;
314 #endif
315         u64 fc_addr;                    /* W5 */
316         u64 ptr_start;                  /* W6 */
317         u64 ptr_end;                    /* W7 */
318 #if defined(__BIG_ENDIAN_BITFIELD)      /* W8 */
319         u64 reserved_571_575      : 5;
320         u64 err_qint_idx          : 7;
321         u64 reserved_563          : 1;
322         u64 thresh_qint_idx       : 7;
323         u64 reserved_555          : 1;
324         u64 thresh_up             : 1;
325         u64 thresh_int_ena        : 1;
326         u64 thresh_int            : 1;
327         u64 err_int_ena           : 8;
328         u64 err_int               : 8;
329         u64 reserved_512_535      : 24;
330 #else
331         u64 reserved_512_535      : 24;
332         u64 err_int               : 8;
333         u64 err_int_ena           : 8;
334         u64 thresh_int            : 1;
335         u64 thresh_int_ena        : 1;
336         u64 thresh_up             : 1;
337         u64 reserved_555          : 1;
338         u64 thresh_qint_idx       : 7;
339         u64 reserved_563          : 1;
340         u64 err_qint_idx          : 7;
341         u64 reserved_571_575      : 5;
342 #endif
343 #if defined(__BIG_ENDIAN_BITFIELD)      /* W9 */
344         u64 reserved_612_639      : 28;
345         u64 thresh                : 36;
346 #else
347         u64 thresh                : 36;
348         u64 reserved_612_639      : 28;
349 #endif
350         u64 reserved_640_703;           /* W10 */
351         u64 reserved_704_767;           /* W11 */
352         u64 reserved_768_831;           /* W12 */
353         u64 reserved_832_895;           /* W13 */
354         u64 reserved_896_959;           /* W14 */
355         u64 reserved_960_1023;          /* W15 */
356 };
357
358 /* NIX admin queue completion status */
359 enum nix_aq_comp {
360         NIX_AQ_COMP_NOTDONE        = 0x0,
361         NIX_AQ_COMP_GOOD           = 0x1,
362         NIX_AQ_COMP_SWERR          = 0x2,
363         NIX_AQ_COMP_CTX_POISON     = 0x3,
364         NIX_AQ_COMP_CTX_FAULT      = 0x4,
365         NIX_AQ_COMP_LOCKERR        = 0x5,
366         NIX_AQ_COMP_SQB_ALLOC_FAIL = 0x6,
367 };
368
369 /* NIX admin queue context types */
370 enum nix_aq_ctype {
371         NIX_AQ_CTYPE_RQ   = 0x0,
372         NIX_AQ_CTYPE_SQ   = 0x1,
373         NIX_AQ_CTYPE_CQ   = 0x2,
374         NIX_AQ_CTYPE_MCE  = 0x3,
375         NIX_AQ_CTYPE_RSS  = 0x4,
376         NIX_AQ_CTYPE_DYNO = 0x5,
377 };
378
379 /* NIX admin queue instruction opcodes */
380 enum nix_aq_instop {
381         NIX_AQ_INSTOP_NOP    = 0x0,
382         NIX_AQ_INSTOP_INIT   = 0x1,
383         NIX_AQ_INSTOP_WRITE  = 0x2,
384         NIX_AQ_INSTOP_READ   = 0x3,
385         NIX_AQ_INSTOP_LOCK   = 0x4,
386         NIX_AQ_INSTOP_UNLOCK = 0x5,
387 };
388
389 /* NIX admin queue instruction structure */
390 struct nix_aq_inst_s {
391 #if defined(__BIG_ENDIAN_BITFIELD)
392         u64 doneint             : 1;    /* W0 */
393         u64 reserved_44_62      : 19;
394         u64 cindex              : 20;
395         u64 reserved_15_23      : 9;
396         u64 lf                  : 7;
397         u64 ctype               : 4;
398         u64 op                  : 4;
399 #else
400         u64 op                  : 4;
401         u64 ctype               : 4;
402         u64 lf                  : 7;
403         u64 reserved_15_23      : 9;
404         u64 cindex              : 20;
405         u64 reserved_44_62      : 19;
406         u64 doneint             : 1;
407 #endif
408         u64 res_addr;                   /* W1 */
409 };
410
411 /* NIX admin queue result structure */
412 struct nix_aq_res_s {
413 #if defined(__BIG_ENDIAN_BITFIELD)
414         u64 reserved_17_63      : 47;   /* W0 */
415         u64 doneint             : 1;
416         u64 compcode            : 8;
417         u64 ctype               : 4;
418         u64 op                  : 4;
419 #else
420         u64 op                  : 4;
421         u64 ctype               : 4;
422         u64 compcode            : 8;
423         u64 doneint             : 1;
424         u64 reserved_17_63      : 47;
425 #endif
426         u64 reserved_64_127;            /* W1 */
427 };
428
429 /* NIX Completion queue context structure */
430 struct nix_cq_ctx_s {
431         u64 base;
432 #if defined(__BIG_ENDIAN_BITFIELD)      /* W1 */
433         u64 wrptr               : 20;
434         u64 avg_con             : 9;
435         u64 cint_idx            : 7;
436         u64 cq_err              : 1;
437         u64 qint_idx            : 7;
438         u64 rsvd_81_83          : 3;
439         u64 bpid                : 9;
440         u64 rsvd_69_71          : 3;
441         u64 bp_ena              : 1;
442         u64 rsvd_64_67          : 4;
443 #else
444         u64 rsvd_64_67          : 4;
445         u64 bp_ena              : 1;
446         u64 rsvd_69_71          : 3;
447         u64 bpid                : 9;
448         u64 rsvd_81_83          : 3;
449         u64 qint_idx            : 7;
450         u64 cq_err              : 1;
451         u64 cint_idx            : 7;
452         u64 avg_con             : 9;
453         u64 wrptr               : 20;
454 #endif
455 #if defined(__BIG_ENDIAN_BITFIELD)  /* W2 */
456         u64 update_time         : 16;
457         u64 avg_level           : 8;
458         u64 head                : 20;
459         u64 tail                : 20;
460 #else
461         u64 tail                : 20;
462         u64 head                : 20;
463         u64 avg_level           : 8;
464         u64 update_time         : 16;
465 #endif
466 #if defined(__BIG_ENDIAN_BITFIELD)  /* W3 */
467         u64 cq_err_int_ena      : 8;
468         u64 cq_err_int          : 8;
469         u64 qsize               : 4;
470         u64 rsvd_233_235        : 3;
471         u64 caching             : 1;
472         u64 substream           : 20;
473         u64 rsvd_210_211        : 2;
474         u64 ena                 : 1;
475         u64 drop_ena            : 1;
476         u64 drop                : 8;
477         u64 bp                  : 8;
478 #else
479         u64 bp                  : 8;
480         u64 drop                : 8;
481         u64 drop_ena            : 1;
482         u64 ena                 : 1;
483         u64 rsvd_210_211        : 2;
484         u64 substream           : 20;
485         u64 caching             : 1;
486         u64 rsvd_233_235        : 3;
487         u64 qsize               : 4;
488         u64 cq_err_int          : 8;
489         u64 cq_err_int_ena      : 8;
490 #endif
491 };
492
493 /* NIX Receive queue context structure */
494 struct nix_rq_ctx_s {
495 #if defined(__BIG_ENDIAN_BITFIELD)  /* W0 */
496         u64 wqe_aura      : 20;
497         u64 substream     : 20;
498         u64 cq            : 20;
499         u64 ena_wqwd      : 1;
500         u64 ipsech_ena    : 1;
501         u64 sso_ena       : 1;
502         u64 ena           : 1;
503 #else
504         u64 ena           : 1;
505         u64 sso_ena       : 1;
506         u64 ipsech_ena    : 1;
507         u64 ena_wqwd      : 1;
508         u64 cq            : 20;
509         u64 substream     : 20;
510         u64 wqe_aura      : 20;
511 #endif
512 #if defined(__BIG_ENDIAN_BITFIELD)  /* W1 */
513         u64 rsvd_127_122  : 6;
514         u64 lpb_drop_ena  : 1;
515         u64 spb_drop_ena  : 1;
516         u64 xqe_drop_ena  : 1;
517         u64 wqe_caching   : 1;
518         u64 pb_caching    : 2;
519         u64 sso_tt        : 2;
520         u64 sso_grp       : 10;
521         u64 lpb_aura      : 20;
522         u64 spb_aura      : 20;
523 #else
524         u64 spb_aura      : 20;
525         u64 lpb_aura      : 20;
526         u64 sso_grp       : 10;
527         u64 sso_tt        : 2;
528         u64 pb_caching    : 2;
529         u64 wqe_caching   : 1;
530         u64 xqe_drop_ena  : 1;
531         u64 spb_drop_ena  : 1;
532         u64 lpb_drop_ena  : 1;
533         u64 rsvd_127_122  : 6;
534 #endif
535 #if defined(__BIG_ENDIAN_BITFIELD)  /* W2 */
536         u64 xqe_hdr_split : 1;
537         u64 xqe_imm_copy  : 1;
538         u64 rsvd_189_184  : 6;
539         u64 xqe_imm_size  : 6;
540         u64 later_skip    : 6;
541         u64 rsvd_171      : 1;
542         u64 first_skip    : 7;
543         u64 lpb_sizem1    : 12;
544         u64 spb_ena       : 1;
545         u64 rsvd_150_148  : 3;
546         u64 wqe_skip      : 2;
547         u64 spb_sizem1    : 6;
548         u64 rsvd_139_128  : 12;
549 #else
550         u64 rsvd_139_128  : 12;
551         u64 spb_sizem1    : 6;
552         u64 wqe_skip      : 2;
553         u64 rsvd_150_148  : 3;
554         u64 spb_ena       : 1;
555         u64 lpb_sizem1    : 12;
556         u64 first_skip    : 7;
557         u64 rsvd_171      : 1;
558         u64 later_skip    : 6;
559         u64 xqe_imm_size  : 6;
560         u64 rsvd_189_184  : 6;
561         u64 xqe_imm_copy  : 1;
562         u64 xqe_hdr_split : 1;
563 #endif
564 #if defined(__BIG_ENDIAN_BITFIELD)  /* W3 */
565         u64 spb_pool_pass : 8;
566         u64 spb_pool_drop : 8;
567         u64 spb_aura_pass : 8;
568         u64 spb_aura_drop : 8;
569         u64 wqe_pool_pass : 8;
570         u64 wqe_pool_drop : 8;
571         u64 xqe_pass      : 8;
572         u64 xqe_drop      : 8;
573 #else
574         u64 xqe_drop      : 8;
575         u64 xqe_pass      : 8;
576         u64 wqe_pool_drop : 8;
577         u64 wqe_pool_pass : 8;
578         u64 spb_aura_drop : 8;
579         u64 spb_aura_pass : 8;
580         u64 spb_pool_drop : 8;
581         u64 spb_pool_pass : 8;
582 #endif
583 #if defined(__BIG_ENDIAN_BITFIELD)  /* W4 */
584         u64 rsvd_319_315  : 5;
585         u64 qint_idx      : 7;
586         u64 rq_int_ena    : 8;
587         u64 rq_int        : 8;
588         u64 rsvd_291_288  : 4;
589         u64 lpb_pool_pass : 8;
590         u64 lpb_pool_drop : 8;
591         u64 lpb_aura_pass : 8;
592         u64 lpb_aura_drop : 8;
593 #else
594         u64 lpb_aura_drop : 8;
595         u64 lpb_aura_pass : 8;
596         u64 lpb_pool_drop : 8;
597         u64 lpb_pool_pass : 8;
598         u64 rsvd_291_288  : 4;
599         u64 rq_int        : 8;
600         u64 rq_int_ena    : 8;
601         u64 qint_idx      : 7;
602         u64 rsvd_319_315  : 5;
603 #endif
604 #if defined(__BIG_ENDIAN_BITFIELD)  /* W5 */
605         u64 rsvd_383_366  : 18;
606         u64 flow_tagw     : 6;
607         u64 bad_utag      : 8;
608         u64 good_utag     : 8;
609         u64 ltag          : 24;
610 #else
611         u64 ltag          : 24;
612         u64 good_utag     : 8;
613         u64 bad_utag      : 8;
614         u64 flow_tagw     : 6;
615         u64 rsvd_383_366  : 18;
616 #endif
617 #if defined(__BIG_ENDIAN_BITFIELD)  /* W6 */
618         u64 rsvd_447_432  : 16;
619         u64 octs          : 48;
620 #else
621         u64 octs          : 48;
622         u64 rsvd_447_432  : 16;
623 #endif
624 #if defined(__BIG_ENDIAN_BITFIELD)  /* W7 */
625         u64 rsvd_511_496  : 16;
626         u64 pkts          : 48;
627 #else
628         u64 pkts          : 48;
629         u64 rsvd_511_496  : 16;
630 #endif
631 #if defined(__BIG_ENDIAN_BITFIELD)  /* W8 */
632         u64 rsvd_575_560  : 16;
633         u64 drop_octs     : 48;
634 #else
635         u64 drop_octs     : 48;
636         u64 rsvd_575_560  : 16;
637 #endif
638 #if defined(__BIG_ENDIAN_BITFIELD)      /* W9 */
639         u64 rsvd_639_624  : 16;
640         u64 drop_pkts     : 48;
641 #else
642         u64 drop_pkts     : 48;
643         u64 rsvd_639_624  : 16;
644 #endif
645 #if defined(__BIG_ENDIAN_BITFIELD)      /* W10 */
646         u64 rsvd_703_688  : 16;
647         u64 re_pkts       : 48;
648 #else
649         u64 re_pkts       : 48;
650         u64 rsvd_703_688  : 16;
651 #endif
652         u64 rsvd_767_704;               /* W11 */
653         u64 rsvd_831_768;               /* W12 */
654         u64 rsvd_895_832;               /* W13 */
655         u64 rsvd_959_896;               /* W14 */
656         u64 rsvd_1023_960;              /* W15 */
657 };
658
659 /* NIX sqe sizes */
660 enum nix_maxsqesz {
661         NIX_MAXSQESZ_W16 = 0x0,
662         NIX_MAXSQESZ_W8  = 0x1,
663 };
664
665 /* NIX SQB caching type */
666 enum nix_stype {
667         NIX_STYPE_STF = 0x0,
668         NIX_STYPE_STT = 0x1,
669         NIX_STYPE_STP = 0x2,
670 };
671
672 /* NIX Send queue context structure */
673 struct nix_sq_ctx_s {
674 #if defined(__BIG_ENDIAN_BITFIELD)  /* W0 */
675         u64 sqe_way_mask          : 16;
676         u64 cq                    : 20;
677         u64 sdp_mcast             : 1;
678         u64 substream             : 20;
679         u64 qint_idx              : 6;
680         u64 ena                   : 1;
681 #else
682         u64 ena                   : 1;
683         u64 qint_idx              : 6;
684         u64 substream             : 20;
685         u64 sdp_mcast             : 1;
686         u64 cq                    : 20;
687         u64 sqe_way_mask          : 16;
688 #endif
689 #if defined(__BIG_ENDIAN_BITFIELD)  /* W1 */
690         u64 sqb_count             : 16;
691         u64 default_chan          : 12;
692         u64 smq_rr_quantum        : 24;
693         u64 sso_ena               : 1;
694         u64 xoff                  : 1;
695         u64 cq_ena                : 1;
696         u64 smq                   : 9;
697 #else
698         u64 smq                   : 9;
699         u64 cq_ena                : 1;
700         u64 xoff                  : 1;
701         u64 sso_ena               : 1;
702         u64 smq_rr_quantum        : 24;
703         u64 default_chan          : 12;
704         u64 sqb_count             : 16;
705 #endif
706 #if defined(__BIG_ENDIAN_BITFIELD)  /* W2 */
707         u64 rsvd_191              : 1;
708         u64 sqe_stype             : 2;
709         u64 sq_int_ena            : 8;
710         u64 sq_int                : 8;
711         u64 sqb_aura              : 20;
712         u64 smq_rr_count          : 25;
713 #else
714         u64 smq_rr_count          : 25;
715         u64 sqb_aura              : 20;
716         u64 sq_int                : 8;
717         u64 sq_int_ena            : 8;
718         u64 sqe_stype             : 2;
719         u64 rsvd_191              : 1;
720 #endif
721 #if defined(__BIG_ENDIAN_BITFIELD)  /* W3 */
722         u64 rsvd_255_253          : 3;
723         u64 smq_next_sq_vld       : 1;
724         u64 smq_pend              : 1;
725         u64 smenq_next_sqb_vld    : 1;
726         u64 head_offset           : 6;
727         u64 smenq_offset          : 6;
728         u64 tail_offset           : 6;
729         u64 smq_lso_segnum        : 8;
730         u64 smq_next_sq           : 20;
731         u64 mnq_dis               : 1;
732         u64 lmt_dis               : 1;
733         u64 cq_limit              : 8;
734         u64 max_sqe_size          : 2;
735 #else
736         u64 max_sqe_size          : 2;
737         u64 cq_limit              : 8;
738         u64 lmt_dis               : 1;
739         u64 mnq_dis               : 1;
740         u64 smq_next_sq           : 20;
741         u64 smq_lso_segnum        : 8;
742         u64 tail_offset           : 6;
743         u64 smenq_offset          : 6;
744         u64 head_offset           : 6;
745         u64 smenq_next_sqb_vld    : 1;
746         u64 smq_pend              : 1;
747         u64 smq_next_sq_vld       : 1;
748         u64 rsvd_255_253          : 3;
749 #endif
750         u64 next_sqb              : 64;/* W4 */
751         u64 tail_sqb              : 64;/* W5 */
752         u64 smenq_sqb             : 64;/* W6 */
753         u64 smenq_next_sqb        : 64;/* W7 */
754         u64 head_sqb              : 64;/* W8 */
755 #if defined(__BIG_ENDIAN_BITFIELD)  /* W9 */
756         u64 rsvd_639_630          : 10;
757         u64 vfi_lso_vld           : 1;
758         u64 vfi_lso_vlan1_ins_ena : 1;
759         u64 vfi_lso_vlan0_ins_ena : 1;
760         u64 vfi_lso_mps           : 14;
761         u64 vfi_lso_sb            : 8;
762         u64 vfi_lso_sizem1        : 3;
763         u64 vfi_lso_total         : 18;
764         u64 rsvd_583_576          : 8;
765 #else
766         u64 rsvd_583_576          : 8;
767         u64 vfi_lso_total         : 18;
768         u64 vfi_lso_sizem1        : 3;
769         u64 vfi_lso_sb            : 8;
770         u64 vfi_lso_mps           : 14;
771         u64 vfi_lso_vlan0_ins_ena : 1;
772         u64 vfi_lso_vlan1_ins_ena : 1;
773         u64 vfi_lso_vld           : 1;
774         u64 rsvd_639_630          : 10;
775 #endif
776 #if defined(__BIG_ENDIAN_BITFIELD) /* W10 */
777         u64 rsvd_703_658          : 46;
778         u64 scm_lso_rem           : 18;
779 #else
780         u64 scm_lso_rem           : 18;
781         u64 rsvd_703_658          : 46;
782 #endif
783 #if defined(__BIG_ENDIAN_BITFIELD) /* W11 */
784         u64 rsvd_767_752          : 16;
785         u64 octs                  : 48;
786 #else
787         u64 octs                  : 48;
788         u64 rsvd_767_752          : 16;
789 #endif
790 #if defined(__BIG_ENDIAN_BITFIELD) /* W12 */
791         u64 rsvd_831_816          : 16;
792         u64 pkts                  : 48;
793 #else
794         u64 pkts                  : 48;
795         u64 rsvd_831_816          : 16;
796 #endif
797         u64 rsvd_895_832          : 64;/* W13 */
798 #if defined(__BIG_ENDIAN_BITFIELD) /* W14 */
799         u64 rsvd_959_944          : 16;
800         u64 dropped_octs          : 48;
801 #else
802         u64 dropped_octs          : 48;
803         u64 rsvd_959_944          : 16;
804 #endif
805 #if defined(__BIG_ENDIAN_BITFIELD) /* W15 */
806         u64 rsvd_1023_1008        : 16;
807         u64 dropped_pkts          : 48;
808 #else
809         u64 dropped_pkts          : 48;
810         u64 rsvd_1023_1008        : 16;
811 #endif
812 };
813
814 /* NIX Receive side scaling entry structure*/
815 struct nix_rsse_s {
816 #if defined(__BIG_ENDIAN_BITFIELD)
817         uint32_t reserved_20_31         : 12;
818         uint32_t rq                     : 20;
819 #else
820         uint32_t rq                     : 20;
821         uint32_t reserved_20_31         : 12;
822
823 #endif
824 };
825
826 /* NIX receive multicast/mirror entry structure */
827 struct nix_rx_mce_s {
828 #if defined(__BIG_ENDIAN_BITFIELD)  /* W0 */
829         uint64_t next       : 16;
830         uint64_t pf_func    : 16;
831         uint64_t rsvd_31_24 : 8;
832         uint64_t index      : 20;
833         uint64_t eol        : 1;
834         uint64_t rsvd_2     : 1;
835         uint64_t op         : 2;
836 #else
837         uint64_t op         : 2;
838         uint64_t rsvd_2     : 1;
839         uint64_t eol        : 1;
840         uint64_t index      : 20;
841         uint64_t rsvd_31_24 : 8;
842         uint64_t pf_func    : 16;
843         uint64_t next       : 16;
844 #endif
845 };
846
847 enum nix_lsoalg {
848         NIX_LSOALG_NOP,
849         NIX_LSOALG_ADD_SEGNUM,
850         NIX_LSOALG_ADD_PAYLEN,
851         NIX_LSOALG_ADD_OFFSET,
852         NIX_LSOALG_TCP_FLAGS,
853 };
854
855 enum nix_txlayer {
856         NIX_TXLAYER_OL3,
857         NIX_TXLAYER_OL4,
858         NIX_TXLAYER_IL3,
859         NIX_TXLAYER_IL4,
860 };
861
862 struct nix_lso_format {
863 #if defined(__BIG_ENDIAN_BITFIELD)
864         u64 rsvd_19_63          : 45;
865         u64 alg                 : 3;
866         u64 rsvd_14_15          : 2;
867         u64 sizem1              : 2;
868         u64 rsvd_10_11          : 2;
869         u64 layer               : 2;
870         u64 offset              : 8;
871 #else
872         u64 offset              : 8;
873         u64 layer               : 2;
874         u64 rsvd_10_11          : 2;
875         u64 sizem1              : 2;
876         u64 rsvd_14_15          : 2;
877         u64 alg                 : 3;
878         u64 rsvd_19_63          : 45;
879 #endif
880 };
881
882 struct nix_rx_flowkey_alg {
883 #if defined(__BIG_ENDIAN_BITFIELD)
884         u64 reserved_35_63      :29;
885         u64 ltype_match         :4;
886         u64 ltype_mask          :4;
887         u64 sel_chan            :1;
888         u64 ena                 :1;
889         u64 reserved_24_24      :1;
890         u64 lid                 :3;
891         u64 bytesm1             :5;
892         u64 hdr_offset          :8;
893         u64 fn_mask             :1;
894         u64 ln_mask             :1;
895         u64 key_offset          :6;
896 #else
897         u64 key_offset          :6;
898         u64 ln_mask             :1;
899         u64 fn_mask             :1;
900         u64 hdr_offset          :8;
901         u64 bytesm1             :5;
902         u64 lid                 :3;
903         u64 reserved_24_24      :1;
904         u64 ena                 :1;
905         u64 sel_chan            :1;
906         u64 ltype_mask          :4;
907         u64 ltype_match         :4;
908         u64 reserved_35_63      :29;
909 #endif
910 };
911
912 /* NIX VTAG size */
913 enum nix_vtag_size {
914         VTAGSIZE_T4   = 0x0,
915         VTAGSIZE_T8   = 0x1,
916 };
917 #endif /* RVU_STRUCT_H */