Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /* Marvell RVU Admin Function driver
0003  *
0004  * Copyright (C) 2018 Marvell.
0005  *
0006  */
0007 
0008 #ifndef RVU_STRUCT_H
0009 #define RVU_STRUCT_H
0010 
0011 /* RVU Block revision IDs */
0012 #define RVU_BLK_RVUM_REVID      0x01
0013 
0014 #define RVU_MULTI_BLK_VER       0x7ULL
0015 
0016 /* RVU Block Address Enumeration */
0017 enum rvu_block_addr_e {
0018     BLKADDR_RVUM        = 0x0ULL,
0019     BLKADDR_LMT     = 0x1ULL,
0020     BLKADDR_MSIX        = 0x2ULL,
0021     BLKADDR_NPA     = 0x3ULL,
0022     BLKADDR_NIX0        = 0x4ULL,
0023     BLKADDR_NIX1        = 0x5ULL,
0024     BLKADDR_NPC     = 0x6ULL,
0025     BLKADDR_SSO     = 0x7ULL,
0026     BLKADDR_SSOW        = 0x8ULL,
0027     BLKADDR_TIM     = 0x9ULL,
0028     BLKADDR_CPT0        = 0xaULL,
0029     BLKADDR_CPT1        = 0xbULL,
0030     BLKADDR_NDC_NIX0_RX = 0xcULL,
0031     BLKADDR_NDC_NIX0_TX = 0xdULL,
0032     BLKADDR_NDC_NPA0    = 0xeULL,
0033     BLKADDR_NDC_NIX1_RX = 0x10ULL,
0034     BLKADDR_NDC_NIX1_TX = 0x11ULL,
0035     BLKADDR_APR     = 0x16ULL,
0036     BLK_COUNT       = 0x17ULL,
0037 };
0038 
0039 /* RVU Block Type Enumeration */
0040 enum rvu_block_type_e {
0041     BLKTYPE_RVUM = 0x0,
0042     BLKTYPE_MSIX = 0x1,
0043     BLKTYPE_LMT  = 0x2,
0044     BLKTYPE_NIX  = 0x3,
0045     BLKTYPE_NPA  = 0x4,
0046     BLKTYPE_NPC  = 0x5,
0047     BLKTYPE_SSO  = 0x6,
0048     BLKTYPE_SSOW = 0x7,
0049     BLKTYPE_TIM  = 0x8,
0050     BLKTYPE_CPT  = 0x9,
0051     BLKTYPE_NDC  = 0xa,
0052     BLKTYPE_MAX  = 0xa,
0053 };
0054 
0055 /* RVU Admin function Interrupt Vector Enumeration */
0056 enum rvu_af_int_vec_e {
0057     RVU_AF_INT_VEC_POISON = 0x0,
0058     RVU_AF_INT_VEC_PFFLR  = 0x1,
0059     RVU_AF_INT_VEC_PFME   = 0x2,
0060     RVU_AF_INT_VEC_GEN    = 0x3,
0061     RVU_AF_INT_VEC_MBOX   = 0x4,
0062     RVU_AF_INT_VEC_CNT    = 0x5,
0063 };
0064 
0065 /* CPT Admin function Interrupt Vector Enumeration */
0066 enum cpt_af_int_vec_e {
0067     CPT_AF_INT_VEC_FLT0 = 0x0,
0068     CPT_AF_INT_VEC_FLT1 = 0x1,
0069     CPT_AF_INT_VEC_RVU  = 0x2,
0070     CPT_AF_INT_VEC_RAS  = 0x3,
0071     CPT_AF_INT_VEC_CNT  = 0x4,
0072 };
0073 
0074 enum cpt_10k_af_int_vec_e {
0075     CPT_10K_AF_INT_VEC_FLT0 = 0x0,
0076     CPT_10K_AF_INT_VEC_FLT1 = 0x1,
0077     CPT_10K_AF_INT_VEC_FLT2 = 0x2,
0078     CPT_10K_AF_INT_VEC_RVU  = 0x3,
0079     CPT_10K_AF_INT_VEC_RAS  = 0x4,
0080     CPT_10K_AF_INT_VEC_CNT  = 0x5,
0081 };
0082 
0083 /* NPA Admin function Interrupt Vector Enumeration */
0084 enum npa_af_int_vec_e {
0085     NPA_AF_INT_VEC_RVU  = 0x0,
0086     NPA_AF_INT_VEC_GEN  = 0x1,
0087     NPA_AF_INT_VEC_AQ_DONE  = 0x2,
0088     NPA_AF_INT_VEC_AF_ERR   = 0x3,
0089     NPA_AF_INT_VEC_POISON   = 0x4,
0090     NPA_AF_INT_VEC_CNT  = 0x5,
0091 };
0092 
0093 /* NIX Admin function Interrupt Vector Enumeration */
0094 enum nix_af_int_vec_e {
0095     NIX_AF_INT_VEC_RVU  = 0x0,
0096     NIX_AF_INT_VEC_GEN  = 0x1,
0097     NIX_AF_INT_VEC_AQ_DONE  = 0x2,
0098     NIX_AF_INT_VEC_AF_ERR   = 0x3,
0099     NIX_AF_INT_VEC_POISON   = 0x4,
0100     NIX_AF_INT_VEC_CNT  = 0x5,
0101 };
0102 
0103 /**
0104  * RVU PF Interrupt Vector Enumeration
0105  */
0106 enum rvu_pf_int_vec_e {
0107     RVU_PF_INT_VEC_VFFLR0     = 0x0,
0108     RVU_PF_INT_VEC_VFFLR1     = 0x1,
0109     RVU_PF_INT_VEC_VFME0      = 0x2,
0110     RVU_PF_INT_VEC_VFME1      = 0x3,
0111     RVU_PF_INT_VEC_VFPF_MBOX0 = 0x4,
0112     RVU_PF_INT_VEC_VFPF_MBOX1 = 0x5,
0113     RVU_PF_INT_VEC_AFPF_MBOX  = 0x6,
0114     RVU_PF_INT_VEC_CNT    = 0x7,
0115 };
0116 
0117 /* NPA admin queue completion enumeration */
0118 enum npa_aq_comp {
0119     NPA_AQ_COMP_NOTDONE    = 0x0,
0120     NPA_AQ_COMP_GOOD       = 0x1,
0121     NPA_AQ_COMP_SWERR      = 0x2,
0122     NPA_AQ_COMP_CTX_POISON = 0x3,
0123     NPA_AQ_COMP_CTX_FAULT  = 0x4,
0124     NPA_AQ_COMP_LOCKERR    = 0x5,
0125 };
0126 
0127 /* NPA admin queue context types */
0128 enum npa_aq_ctype {
0129     NPA_AQ_CTYPE_AURA = 0x0,
0130     NPA_AQ_CTYPE_POOL = 0x1,
0131 };
0132 
0133 /* NPA admin queue instruction opcodes */
0134 enum npa_aq_instop {
0135     NPA_AQ_INSTOP_NOP    = 0x0,
0136     NPA_AQ_INSTOP_INIT   = 0x1,
0137     NPA_AQ_INSTOP_WRITE  = 0x2,
0138     NPA_AQ_INSTOP_READ   = 0x3,
0139     NPA_AQ_INSTOP_LOCK   = 0x4,
0140     NPA_AQ_INSTOP_UNLOCK = 0x5,
0141 };
0142 
0143 /* ALLOC/FREE input queues Enumeration from coprocessors */
0144 enum npa_inpq {
0145     NPA_INPQ_NIX0_RX       = 0x0,
0146     NPA_INPQ_NIX0_TX       = 0x1,
0147     NPA_INPQ_NIX1_RX       = 0x2,
0148     NPA_INPQ_NIX1_TX       = 0x3,
0149     NPA_INPQ_SSO           = 0x4,
0150     NPA_INPQ_TIM           = 0x5,
0151     NPA_INPQ_DPI           = 0x6,
0152     NPA_INPQ_AURA_OP       = 0xe,
0153     NPA_INPQ_INTERNAL_RSV  = 0xf,
0154 };
0155 
0156 /* NPA admin queue instruction structure */
0157 struct npa_aq_inst_s {
0158     u64 op                    : 4; /* W0 */
0159     u64 ctype                 : 4;
0160     u64 lf                    : 9;
0161     u64 reserved_17_23        : 7;
0162     u64 cindex                : 20;
0163     u64 reserved_44_62        : 19;
0164     u64 doneint               : 1;
0165     u64 res_addr;           /* W1 */
0166 };
0167 
0168 /* NPA admin queue result structure */
0169 struct npa_aq_res_s {
0170     u64 op                    : 4; /* W0 */
0171     u64 ctype                 : 4;
0172     u64 compcode              : 8;
0173     u64 doneint               : 1;
0174     u64 reserved_17_63        : 47;
0175     u64 reserved_64_127;        /* W1 */
0176 };
0177 
0178 struct npa_aura_s {
0179     u64 pool_addr;          /* W0 */
0180     u64 ena                   : 1;  /* W1 */
0181     u64 reserved_65           : 2;
0182     u64 pool_caching          : 1;
0183     u64 pool_way_mask         : 16;
0184     u64 avg_con               : 9;
0185     u64 reserved_93           : 1;
0186     u64 pool_drop_ena         : 1;
0187     u64 aura_drop_ena         : 1;
0188     u64 bp_ena                : 2;
0189     u64 reserved_98_103       : 6;
0190     u64 aura_drop             : 8;
0191     u64 shift                 : 6;
0192     u64 reserved_118_119      : 2;
0193     u64 avg_level             : 8;
0194     u64 count                 : 36; /* W2 */
0195     u64 reserved_164_167      : 4;
0196     u64 nix0_bpid             : 9;
0197     u64 reserved_177_179      : 3;
0198     u64 nix1_bpid             : 9;
0199     u64 reserved_189_191      : 3;
0200     u64 limit                 : 36; /* W3 */
0201     u64 reserved_228_231      : 4;
0202     u64 bp                    : 8;
0203     u64 reserved_241_243      : 3;
0204     u64 fc_be                 : 1;
0205     u64 fc_ena                : 1;
0206     u64 fc_up_crossing        : 1;
0207     u64 fc_stype              : 2;
0208     u64 fc_hyst_bits          : 4;
0209     u64 reserved_252_255      : 4;
0210     u64 fc_addr;            /* W4 */
0211     u64 pool_drop             : 8;  /* W5 */
0212     u64 update_time           : 16;
0213     u64 err_int               : 8;
0214     u64 err_int_ena           : 8;
0215     u64 thresh_int            : 1;
0216     u64 thresh_int_ena        : 1;
0217     u64 thresh_up             : 1;
0218     u64 reserved_363          : 1;
0219     u64 thresh_qint_idx       : 7;
0220     u64 reserved_371          : 1;
0221     u64 err_qint_idx          : 7;
0222     u64 reserved_379_383      : 5;
0223     u64 thresh                : 36; /* W6*/
0224     u64 rsvd_423_420          : 4;
0225     u64 fc_msh_dst            : 11;
0226     u64 reserved_435_447      : 13;
0227     u64 reserved_448_511;       /* W7 */
0228 };
0229 
0230 struct npa_pool_s {
0231     u64 stack_base;         /* W0 */
0232     u64 ena                   : 1;
0233     u64 nat_align             : 1;
0234     u64 reserved_66_67        : 2;
0235     u64 stack_caching         : 1;
0236     u64 reserved_70_71        : 3;
0237     u64 stack_way_mask        : 16;
0238     u64 buf_offset            : 12;
0239     u64 reserved_100_103      : 4;
0240     u64 buf_size              : 11;
0241     u64 reserved_115_127      : 13;
0242     u64 stack_max_pages       : 32;
0243     u64 stack_pages           : 32;
0244     u64 op_pc                 : 48;
0245     u64 reserved_240_255      : 16;
0246     u64 stack_offset          : 4;
0247     u64 reserved_260_263      : 4;
0248     u64 shift                 : 6;
0249     u64 reserved_270_271      : 2;
0250     u64 avg_level             : 8;
0251     u64 avg_con               : 9;
0252     u64 fc_ena                : 1;
0253     u64 fc_stype              : 2;
0254     u64 fc_hyst_bits          : 4;
0255     u64 fc_up_crossing        : 1;
0256     u64 fc_be         : 1;
0257     u64 reserved_298_299      : 2;
0258     u64 update_time           : 16;
0259     u64 reserved_316_319      : 4;
0260     u64 fc_addr;            /* W5 */
0261     u64 ptr_start;          /* W6 */
0262     u64 ptr_end;            /* W7 */
0263     u64 reserved_512_535      : 24;
0264     u64 err_int               : 8;
0265     u64 err_int_ena           : 8;
0266     u64 thresh_int            : 1;
0267     u64 thresh_int_ena        : 1;
0268     u64 thresh_up             : 1;
0269     u64 reserved_555          : 1;
0270     u64 thresh_qint_idx       : 7;
0271     u64 reserved_563          : 1;
0272     u64 err_qint_idx          : 7;
0273     u64 reserved_571_575      : 5;
0274     u64 thresh                : 36;
0275     u64 rsvd_615_612      : 4;
0276     u64 fc_msh_dst        : 11;
0277     u64 reserved_627_639      : 13;
0278     u64 reserved_640_703;       /* W10 */
0279     u64 reserved_704_767;       /* W11 */
0280     u64 reserved_768_831;       /* W12 */
0281     u64 reserved_832_895;       /* W13 */
0282     u64 reserved_896_959;       /* W14 */
0283     u64 reserved_960_1023;      /* W15 */
0284 };
0285 
0286 /* NIX admin queue completion status */
0287 enum nix_aq_comp {
0288     NIX_AQ_COMP_NOTDONE        = 0x0,
0289     NIX_AQ_COMP_GOOD           = 0x1,
0290     NIX_AQ_COMP_SWERR          = 0x2,
0291     NIX_AQ_COMP_CTX_POISON     = 0x3,
0292     NIX_AQ_COMP_CTX_FAULT      = 0x4,
0293     NIX_AQ_COMP_LOCKERR        = 0x5,
0294     NIX_AQ_COMP_SQB_ALLOC_FAIL = 0x6,
0295 };
0296 
0297 /* NIX admin queue context types */
0298 enum nix_aq_ctype {
0299     NIX_AQ_CTYPE_RQ   = 0x0,
0300     NIX_AQ_CTYPE_SQ   = 0x1,
0301     NIX_AQ_CTYPE_CQ   = 0x2,
0302     NIX_AQ_CTYPE_MCE  = 0x3,
0303     NIX_AQ_CTYPE_RSS  = 0x4,
0304     NIX_AQ_CTYPE_DYNO = 0x5,
0305     NIX_AQ_CTYPE_BANDPROF = 0x6,
0306 };
0307 
0308 /* NIX admin queue instruction opcodes */
0309 enum nix_aq_instop {
0310     NIX_AQ_INSTOP_NOP    = 0x0,
0311     NIX_AQ_INSTOP_INIT   = 0x1,
0312     NIX_AQ_INSTOP_WRITE  = 0x2,
0313     NIX_AQ_INSTOP_READ   = 0x3,
0314     NIX_AQ_INSTOP_LOCK   = 0x4,
0315     NIX_AQ_INSTOP_UNLOCK = 0x5,
0316 };
0317 
0318 /* NIX admin queue instruction structure */
0319 struct nix_aq_inst_s {
0320     u64 op          : 4;
0321     u64 ctype       : 4;
0322     u64 lf          : 9;
0323     u64 reserved_17_23  : 7;
0324     u64 cindex      : 20;
0325     u64 reserved_44_62  : 19;
0326     u64 doneint     : 1;
0327     u64 res_addr;           /* W1 */
0328 };
0329 
0330 /* NIX admin queue result structure */
0331 struct nix_aq_res_s {
0332     u64 op          : 4;
0333     u64 ctype       : 4;
0334     u64 compcode        : 8;
0335     u64 doneint     : 1;
0336     u64 reserved_17_63  : 47;
0337     u64 reserved_64_127;        /* W1 */
0338 };
0339 
0340 /* NIX Completion queue context structure */
0341 struct nix_cq_ctx_s {
0342     u64 base;
0343     u64 rsvd_64_67      : 4;
0344     u64 bp_ena      : 1;
0345     u64 rsvd_69_71      : 3;
0346     u64 bpid        : 9;
0347     u64 rsvd_81_83      : 3;
0348     u64 qint_idx        : 7;
0349     u64 cq_err      : 1;
0350     u64 cint_idx        : 7;
0351     u64 avg_con     : 9;
0352     u64 wrptr       : 20;
0353     u64 tail        : 20;
0354     u64 head        : 20;
0355     u64 avg_level       : 8;
0356     u64 update_time     : 16;
0357     u64 bp          : 8;
0358     u64 drop        : 8;
0359     u64 drop_ena        : 1;
0360     u64 ena         : 1;
0361     u64 rsvd_210_211    : 2;
0362     u64 substream       : 20;
0363     u64 caching     : 1;
0364     u64 rsvd_233_235    : 3;
0365     u64 qsize       : 4;
0366     u64 cq_err_int      : 8;
0367     u64 cq_err_int_ena  : 8;
0368 };
0369 
0370 /* CN10K NIX Receive queue context structure */
0371 struct nix_cn10k_rq_ctx_s {
0372     u64 ena         : 1;
0373     u64 sso_ena     : 1;
0374     u64 ipsech_ena      : 1;
0375     u64 ena_wqwd        : 1;
0376     u64 cq          : 20;
0377     u64 rsvd_36_24      : 13;
0378     u64 lenerr_dis      : 1;
0379     u64 csum_il4_dis    : 1;
0380     u64 csum_ol4_dis    : 1;
0381     u64 len_il4_dis     : 1;
0382     u64 len_il3_dis     : 1;
0383     u64 len_ol4_dis     : 1;
0384     u64 len_ol3_dis     : 1;
0385     u64 wqe_aura        : 20;
0386     u64 spb_aura        : 20;
0387     u64 lpb_aura        : 20;
0388     u64 sso_grp     : 10;
0389     u64 sso_tt      : 2;
0390     u64 pb_caching      : 2;
0391     u64 wqe_caching     : 1;
0392     u64 xqe_drop_ena    : 1;
0393     u64 spb_drop_ena    : 1;
0394     u64 lpb_drop_ena    : 1;
0395     u64 pb_stashing     : 1;
0396     u64 ipsecd_drop_ena : 1;
0397     u64 chi_ena     : 1;
0398     u64 rsvd_127_125    : 3;
0399     u64 band_prof_id    : 10; /* W2 */
0400     u64 rsvd_138        : 1;
0401     u64 policer_ena     : 1;
0402     u64 spb_sizem1      : 6;
0403     u64 wqe_skip        : 2;
0404     u64 rsvd_150_148    : 3;
0405     u64 spb_ena     : 1;
0406     u64 lpb_sizem1      : 12;
0407     u64 first_skip      : 7;
0408     u64 rsvd_171        : 1;
0409     u64 later_skip      : 6;
0410     u64 xqe_imm_size    : 6;
0411     u64 rsvd_189_184    : 6;
0412     u64 xqe_imm_copy    : 1;
0413     u64 xqe_hdr_split   : 1;
0414     u64 xqe_drop        : 8; /* W3 */
0415     u64 xqe_pass        : 8;
0416     u64 wqe_pool_drop   : 8;
0417     u64 wqe_pool_pass   : 8;
0418     u64 spb_aura_drop   : 8;
0419     u64 spb_aura_pass   : 8;
0420     u64 spb_pool_drop   : 8;
0421     u64 spb_pool_pass   : 8;
0422     u64 lpb_aura_drop   : 8; /* W4 */
0423     u64 lpb_aura_pass   : 8;
0424     u64 lpb_pool_drop   : 8;
0425     u64 lpb_pool_pass   : 8;
0426     u64 rsvd_291_288    : 4;
0427     u64 rq_int      : 8;
0428     u64 rq_int_ena      : 8;
0429     u64 qint_idx        : 7;
0430     u64 rsvd_319_315    : 5;
0431     u64 ltag        : 24; /* W5 */
0432     u64 good_utag       : 8;
0433     u64 bad_utag        : 8;
0434     u64 flow_tagw       : 6;
0435     u64 ipsec_vwqe      : 1;
0436     u64 vwqe_ena        : 1;
0437     u64 vwqe_wait       : 8;
0438     u64 max_vsize_exp   : 4;
0439     u64 vwqe_skip       : 2;
0440     u64 rsvd_383_382    : 2;
0441     u64 octs        : 48; /* W6 */
0442     u64 rsvd_447_432    : 16;
0443     u64 pkts        : 48; /* W7 */
0444     u64 rsvd_511_496    : 16;
0445     u64 drop_octs       : 48; /* W8 */
0446     u64 rsvd_575_560    : 16;
0447     u64 drop_pkts       : 48; /* W9 */
0448     u64 rsvd_639_624    : 16;
0449     u64 re_pkts     : 48; /* W10 */
0450     u64 rsvd_703_688    : 16;
0451     u64 rsvd_767_704;       /* W11 */
0452     u64 rsvd_831_768;       /* W12 */
0453     u64 rsvd_895_832;       /* W13 */
0454     u64 rsvd_959_896;       /* W14 */
0455     u64 rsvd_1023_960;      /* W15 */
0456 };
0457 
0458 /* CN10K NIX Send queue context structure */
0459 struct nix_cn10k_sq_ctx_s {
0460     u64 ena                   : 1;
0461     u64 qint_idx              : 6;
0462     u64 substream             : 20;
0463     u64 sdp_mcast             : 1;
0464     u64 cq                    : 20;
0465     u64 sqe_way_mask          : 16;
0466     u64 smq                   : 10; /* W1 */
0467     u64 cq_ena                : 1;
0468     u64 xoff                  : 1;
0469     u64 sso_ena               : 1;
0470     u64 smq_rr_weight         : 14;
0471     u64 default_chan          : 12;
0472     u64 sqb_count             : 16;
0473     u64 rsvd_120_119          : 2;
0474     u64 smq_rr_count_lb       : 7;
0475     u64 smq_rr_count_ub       : 25; /* W2 */
0476     u64 sqb_aura              : 20;
0477     u64 sq_int                : 8;
0478     u64 sq_int_ena            : 8;
0479     u64 sqe_stype             : 2;
0480     u64 rsvd_191              : 1;
0481     u64 max_sqe_size          : 2; /* W3 */
0482     u64 cq_limit              : 8;
0483     u64 lmt_dis               : 1;
0484     u64 mnq_dis               : 1;
0485     u64 smq_next_sq           : 20;
0486     u64 smq_lso_segnum        : 8;
0487     u64 tail_offset           : 6;
0488     u64 smenq_offset          : 6;
0489     u64 head_offset           : 6;
0490     u64 smenq_next_sqb_vld    : 1;
0491     u64 smq_pend              : 1;
0492     u64 smq_next_sq_vld       : 1;
0493     u64 rsvd_255_253          : 3;
0494     u64 next_sqb              : 64; /* W4 */
0495     u64 tail_sqb              : 64; /* W5 */
0496     u64 smenq_sqb             : 64; /* W6 */
0497     u64 smenq_next_sqb        : 64; /* W7 */
0498     u64 head_sqb              : 64; /* W8 */
0499     u64 rsvd_583_576          : 8;  /* W9 */
0500     u64 vfi_lso_total         : 18;
0501     u64 vfi_lso_sizem1        : 3;
0502     u64 vfi_lso_sb            : 8;
0503     u64 vfi_lso_mps           : 14;
0504     u64 vfi_lso_vlan0_ins_ena : 1;
0505     u64 vfi_lso_vlan1_ins_ena : 1;
0506     u64 vfi_lso_vld           : 1;
0507     u64 rsvd_639_630          : 10;
0508     u64 scm_lso_rem           : 18; /* W10 */
0509     u64 rsvd_703_658          : 46;
0510     u64 octs                  : 48; /* W11 */
0511     u64 rsvd_767_752          : 16;
0512     u64 pkts                  : 48; /* W12 */
0513     u64 rsvd_831_816          : 16;
0514     u64 rsvd_895_832          : 64; /* W13 */
0515     u64 dropped_octs          : 48;
0516     u64 rsvd_959_944          : 16;
0517     u64 dropped_pkts          : 48;
0518     u64 rsvd_1023_1008        : 16;
0519 };
0520 
0521 /* NIX Receive queue context structure */
0522 struct nix_rq_ctx_s {
0523     u64 ena           : 1;
0524     u64 sso_ena       : 1;
0525     u64 ipsech_ena    : 1;
0526     u64 ena_wqwd      : 1;
0527     u64 cq            : 20;
0528     u64 substream     : 20;
0529     u64 wqe_aura      : 20;
0530     u64 spb_aura      : 20;
0531     u64 lpb_aura      : 20;
0532     u64 sso_grp       : 10;
0533     u64 sso_tt        : 2;
0534     u64 pb_caching    : 2;
0535     u64 wqe_caching   : 1;
0536     u64 xqe_drop_ena  : 1;
0537     u64 spb_drop_ena  : 1;
0538     u64 lpb_drop_ena  : 1;
0539     u64 rsvd_127_122  : 6;
0540     u64 rsvd_139_128  : 12; /* W2 */
0541     u64 spb_sizem1    : 6;
0542     u64 wqe_skip      : 2;
0543     u64 rsvd_150_148  : 3;
0544     u64 spb_ena       : 1;
0545     u64 lpb_sizem1    : 12;
0546     u64 first_skip    : 7;
0547     u64 rsvd_171      : 1;
0548     u64 later_skip    : 6;
0549     u64 xqe_imm_size  : 6;
0550     u64 rsvd_189_184  : 6;
0551     u64 xqe_imm_copy  : 1;
0552     u64 xqe_hdr_split : 1;
0553     u64 xqe_drop      : 8; /* W3*/
0554     u64 xqe_pass      : 8;
0555     u64 wqe_pool_drop : 8;
0556     u64 wqe_pool_pass : 8;
0557     u64 spb_aura_drop : 8;
0558     u64 spb_aura_pass : 8;
0559     u64 spb_pool_drop : 8;
0560     u64 spb_pool_pass : 8;
0561     u64 lpb_aura_drop : 8; /* W4 */
0562     u64 lpb_aura_pass : 8;
0563     u64 lpb_pool_drop : 8;
0564     u64 lpb_pool_pass : 8;
0565     u64 rsvd_291_288  : 4;
0566     u64 rq_int        : 8;
0567     u64 rq_int_ena    : 8;
0568     u64 qint_idx      : 7;
0569     u64 rsvd_319_315  : 5;
0570     u64 ltag          : 24; /* W5 */
0571     u64 good_utag     : 8;
0572     u64 bad_utag      : 8;
0573     u64 flow_tagw     : 6;
0574     u64 rsvd_383_366  : 18;
0575     u64 octs          : 48; /* W6 */
0576     u64 rsvd_447_432  : 16;
0577     u64 pkts          : 48; /* W7 */
0578     u64 rsvd_511_496  : 16;
0579     u64 drop_octs     : 48; /* W8 */
0580     u64 rsvd_575_560  : 16;
0581     u64 drop_pkts     : 48; /* W9 */
0582     u64 rsvd_639_624  : 16;
0583     u64 re_pkts       : 48; /* W10 */
0584     u64 rsvd_703_688  : 16;
0585     u64 rsvd_767_704;       /* W11 */
0586     u64 rsvd_831_768;       /* W12 */
0587     u64 rsvd_895_832;       /* W13 */
0588     u64 rsvd_959_896;       /* W14 */
0589     u64 rsvd_1023_960;      /* W15 */
0590 };
0591 
0592 /* NIX sqe sizes */
0593 enum nix_maxsqesz {
0594     NIX_MAXSQESZ_W16 = 0x0,
0595     NIX_MAXSQESZ_W8  = 0x1,
0596 };
0597 
0598 /* NIX SQB caching type */
0599 enum nix_stype {
0600     NIX_STYPE_STF = 0x0,
0601     NIX_STYPE_STT = 0x1,
0602     NIX_STYPE_STP = 0x2,
0603 };
0604 
0605 /* NIX Send queue context structure */
0606 struct nix_sq_ctx_s {
0607     u64 ena                   : 1;
0608     u64 qint_idx              : 6;
0609     u64 substream             : 20;
0610     u64 sdp_mcast             : 1;
0611     u64 cq                    : 20;
0612     u64 sqe_way_mask          : 16;
0613     u64 smq                   : 9;
0614     u64 cq_ena                : 1;
0615     u64 xoff                  : 1;
0616     u64 sso_ena               : 1;
0617     u64 smq_rr_quantum        : 24;
0618     u64 default_chan          : 12;
0619     u64 sqb_count             : 16;
0620     u64 smq_rr_count          : 25;
0621     u64 sqb_aura              : 20;
0622     u64 sq_int                : 8;
0623     u64 sq_int_ena            : 8;
0624     u64 sqe_stype             : 2;
0625     u64 rsvd_191              : 1;
0626     u64 max_sqe_size          : 2;
0627     u64 cq_limit              : 8;
0628     u64 lmt_dis               : 1;
0629     u64 mnq_dis               : 1;
0630     u64 smq_next_sq           : 20;
0631     u64 smq_lso_segnum        : 8;
0632     u64 tail_offset           : 6;
0633     u64 smenq_offset          : 6;
0634     u64 head_offset           : 6;
0635     u64 smenq_next_sqb_vld    : 1;
0636     u64 smq_pend              : 1;
0637     u64 smq_next_sq_vld       : 1;
0638     u64 rsvd_255_253          : 3;
0639     u64 next_sqb              : 64;/* W4 */
0640     u64 tail_sqb              : 64;/* W5 */
0641     u64 smenq_sqb             : 64;/* W6 */
0642     u64 smenq_next_sqb        : 64;/* W7 */
0643     u64 head_sqb              : 64;/* W8 */
0644     u64 rsvd_583_576          : 8;
0645     u64 vfi_lso_total         : 18;
0646     u64 vfi_lso_sizem1        : 3;
0647     u64 vfi_lso_sb            : 8;
0648     u64 vfi_lso_mps           : 14;
0649     u64 vfi_lso_vlan0_ins_ena : 1;
0650     u64 vfi_lso_vlan1_ins_ena : 1;
0651     u64 vfi_lso_vld           : 1;
0652     u64 rsvd_639_630          : 10;
0653     u64 scm_lso_rem           : 18;
0654     u64 rsvd_703_658          : 46;
0655     u64 octs                  : 48;
0656     u64 rsvd_767_752          : 16;
0657     u64 pkts                  : 48;
0658     u64 rsvd_831_816          : 16;
0659     u64 rsvd_895_832          : 64;/* W13 */
0660     u64 dropped_octs          : 48;
0661     u64 rsvd_959_944          : 16;
0662     u64 dropped_pkts          : 48;
0663     u64 rsvd_1023_1008        : 16;
0664 };
0665 
0666 /* NIX Receive side scaling entry structure*/
0667 struct nix_rsse_s {
0668     uint32_t rq         : 20;
0669     uint32_t reserved_20_31     : 12;
0670 
0671 };
0672 
0673 /* NIX receive multicast/mirror entry structure */
0674 struct nix_rx_mce_s {
0675     uint64_t op         : 2;
0676     uint64_t rsvd_2     : 1;
0677     uint64_t eol        : 1;
0678     uint64_t index      : 20;
0679     uint64_t rsvd_31_24 : 8;
0680     uint64_t pf_func    : 16;
0681     uint64_t next       : 16;
0682 };
0683 
0684 enum nix_band_prof_layers {
0685     BAND_PROF_LEAF_LAYER = 0,
0686     BAND_PROF_INVAL_LAYER = 1,
0687     BAND_PROF_MID_LAYER = 2,
0688     BAND_PROF_TOP_LAYER = 3,
0689     BAND_PROF_NUM_LAYERS = 4,
0690 };
0691 
0692 enum NIX_RX_BAND_PROF_ACTIONRESULT_E {
0693     NIX_RX_BAND_PROF_ACTIONRESULT_PASS = 0x0,
0694     NIX_RX_BAND_PROF_ACTIONRESULT_DROP = 0x1,
0695     NIX_RX_BAND_PROF_ACTIONRESULT_RED = 0x2,
0696 };
0697 
0698 enum nix_band_prof_pc_mode {
0699     NIX_RX_PC_MODE_VLAN = 0,
0700     NIX_RX_PC_MODE_DSCP = 1,
0701     NIX_RX_PC_MODE_GEN = 2,
0702     NIX_RX_PC_MODE_RSVD = 3,
0703 };
0704 
0705 /* NIX ingress policer bandwidth profile structure */
0706 struct nix_bandprof_s {
0707     uint64_t pc_mode                     :  2; /* W0 */
0708     uint64_t icolor                      :  2;
0709     uint64_t tnl_ena                     :  1;
0710     uint64_t reserved_5_7                :  3;
0711     uint64_t peir_exponent               :  5;
0712     uint64_t reserved_13_15              :  3;
0713     uint64_t pebs_exponent               :  5;
0714     uint64_t reserved_21_23              :  3;
0715     uint64_t cir_exponent                :  5;
0716     uint64_t reserved_29_31              :  3;
0717     uint64_t cbs_exponent                :  5;
0718     uint64_t reserved_37_39              :  3;
0719     uint64_t peir_mantissa               :  8;
0720     uint64_t pebs_mantissa               :  8;
0721     uint64_t cir_mantissa                :  8;
0722     uint64_t cbs_mantissa                :  8; /* W1 */
0723     uint64_t lmode                       :  1;
0724     uint64_t l_sellect                   :  3;
0725     uint64_t rdiv                        :  4;
0726     uint64_t adjust_exponent             :  5;
0727     uint64_t reserved_85_86              :  2;
0728     uint64_t adjust_mantissa             :  9;
0729     uint64_t gc_action                   :  2;
0730     uint64_t yc_action                   :  2;
0731     uint64_t rc_action                   :  2;
0732     uint64_t meter_algo                  :  2;
0733     uint64_t band_prof_id                :  7;
0734     uint64_t reserved_111_118            :  8;
0735     uint64_t hl_en                       :  1;
0736     uint64_t reserved_120_127            :  8;
0737     uint64_t ts                          : 48; /* W2 */
0738     uint64_t reserved_176_191            : 16;
0739     uint64_t pe_accum                    : 32; /* W3 */
0740     uint64_t c_accum                     : 32;
0741     uint64_t green_pkt_pass              : 48; /* W4 */
0742     uint64_t reserved_304_319            : 16;
0743     uint64_t yellow_pkt_pass             : 48; /* W5 */
0744     uint64_t reserved_368_383            : 16;
0745     uint64_t red_pkt_pass                : 48; /* W6 */
0746     uint64_t reserved_432_447            : 16;
0747     uint64_t green_octs_pass             : 48; /* W7 */
0748     uint64_t reserved_496_511            : 16;
0749     uint64_t yellow_octs_pass            : 48; /* W8 */
0750     uint64_t reserved_560_575            : 16;
0751     uint64_t red_octs_pass               : 48; /* W9 */
0752     uint64_t reserved_624_639            : 16;
0753     uint64_t green_pkt_drop              : 48; /* W10 */
0754     uint64_t reserved_688_703            : 16;
0755     uint64_t yellow_pkt_drop             : 48; /* W11 */
0756     uint64_t reserved_752_767            : 16;
0757     uint64_t red_pkt_drop                : 48; /* W12 */
0758     uint64_t reserved_816_831            : 16;
0759     uint64_t green_octs_drop             : 48; /* W13 */
0760     uint64_t reserved_880_895            : 16;
0761     uint64_t yellow_octs_drop            : 48; /* W14 */
0762     uint64_t reserved_944_959            : 16;
0763     uint64_t red_octs_drop               : 48; /* W15 */
0764     uint64_t reserved_1008_1023          : 16;
0765 };
0766 
0767 enum nix_lsoalg {
0768     NIX_LSOALG_NOP,
0769     NIX_LSOALG_ADD_SEGNUM,
0770     NIX_LSOALG_ADD_PAYLEN,
0771     NIX_LSOALG_ADD_OFFSET,
0772     NIX_LSOALG_TCP_FLAGS,
0773 };
0774 
0775 enum nix_txlayer {
0776     NIX_TXLAYER_OL3,
0777     NIX_TXLAYER_OL4,
0778     NIX_TXLAYER_IL3,
0779     NIX_TXLAYER_IL4,
0780 };
0781 
0782 struct nix_lso_format {
0783     u64 offset      : 8;
0784     u64 layer       : 2;
0785     u64 rsvd_10_11      : 2;
0786     u64 sizem1      : 2;
0787     u64 rsvd_14_15      : 2;
0788     u64 alg         : 3;
0789     u64 rsvd_19_63      : 45;
0790 };
0791 
0792 struct nix_rx_flowkey_alg {
0793     u64 key_offset      :6;
0794     u64 ln_mask     :1;
0795     u64 fn_mask     :1;
0796     u64 hdr_offset      :8;
0797     u64 bytesm1     :5;
0798     u64 lid         :3;
0799     u64 reserved_24_24  :1;
0800     u64 ena         :1;
0801     u64 sel_chan        :1;
0802     u64 ltype_mask      :4;
0803     u64 ltype_match     :4;
0804     u64 reserved_35_63  :29;
0805 };
0806 
0807 /* NIX VTAG size */
0808 enum nix_vtag_size {
0809     VTAGSIZE_T4   = 0x0,
0810     VTAGSIZE_T8   = 0x1,
0811 };
0812 
0813 enum nix_tx_vtag_op {
0814     NOP     = 0x0,
0815     VTAG_INSERT = 0x1,
0816     VTAG_REPLACE    = 0x2,
0817 };
0818 
0819 /* NIX RX VTAG actions */
0820 #define VTAG_STRIP  BIT_ULL(4)
0821 #define VTAG_CAPTURE    BIT_ULL(5)
0822 
0823 #endif /* RVU_STRUCT_H */