Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /* Marvell RVU Ethernet driver
0003  *
0004  * Copyright (C) 2020 Marvell.
0005  *
0006  */
0007 
0008 #ifndef OTX2_STRUCT_H
0009 #define OTX2_STRUCT_H
0010 
0011 /* NIX WQE/CQE size 128 byte or 512 byte */
0012 enum nix_cqesz_e {
0013     NIX_XQESZ_W64 = 0x0,
0014     NIX_XQESZ_W16 = 0x1,
0015 };
0016 
0017 enum nix_sqes_e {
0018     NIX_SQESZ_W16 = 0x0,
0019     NIX_SQESZ_W8 = 0x1,
0020 };
0021 
0022 enum nix_send_ldtype {
0023     NIX_SEND_LDTYPE_LDD  = 0x0,
0024     NIX_SEND_LDTYPE_LDT  = 0x1,
0025     NIX_SEND_LDTYPE_LDWB = 0x2,
0026 };
0027 
0028 /* CSUM offload */
0029 enum nix_sendl3type {
0030     NIX_SENDL3TYPE_NONE = 0x0,
0031     NIX_SENDL3TYPE_IP4 = 0x2,
0032     NIX_SENDL3TYPE_IP4_CKSUM = 0x3,
0033     NIX_SENDL3TYPE_IP6 = 0x4,
0034 };
0035 
0036 enum nix_sendl4type {
0037     NIX_SENDL4TYPE_NONE,
0038     NIX_SENDL4TYPE_TCP_CKSUM,
0039     NIX_SENDL4TYPE_SCTP_CKSUM,
0040     NIX_SENDL4TYPE_UDP_CKSUM,
0041 };
0042 
0043 /* NIX wqe/cqe types */
0044 enum nix_xqe_type {
0045     NIX_XQE_TYPE_INVALID   = 0x0,
0046     NIX_XQE_TYPE_RX        = 0x1,
0047     NIX_XQE_TYPE_RX_IPSECS = 0x2,
0048     NIX_XQE_TYPE_RX_IPSECH = 0x3,
0049     NIX_XQE_TYPE_RX_IPSECD = 0x4,
0050     NIX_XQE_TYPE_SEND      = 0x8,
0051 };
0052 
0053 /* NIX CQE/SQE subdescriptor types */
0054 enum nix_subdc {
0055     NIX_SUBDC_NOP  = 0x0,
0056     NIX_SUBDC_EXT  = 0x1,
0057     NIX_SUBDC_CRC  = 0x2,
0058     NIX_SUBDC_IMM  = 0x3,
0059     NIX_SUBDC_SG   = 0x4,
0060     NIX_SUBDC_MEM  = 0x5,
0061     NIX_SUBDC_JUMP = 0x6,
0062     NIX_SUBDC_WORK = 0x7,
0063     NIX_SUBDC_SOD  = 0xf,
0064 };
0065 
0066 /* Algorithm for nix_sqe_mem_s header (value of the `alg` field) */
0067 enum nix_sendmemalg {
0068     NIX_SENDMEMALG_E_SET       = 0x0,
0069     NIX_SENDMEMALG_E_SETTSTMP  = 0x1,
0070     NIX_SENDMEMALG_E_SETRSLT   = 0x2,
0071     NIX_SENDMEMALG_E_ADD       = 0x8,
0072     NIX_SENDMEMALG_E_SUB       = 0x9,
0073     NIX_SENDMEMALG_E_ADDLEN    = 0xa,
0074     NIX_SENDMEMALG_E_SUBLEN    = 0xb,
0075     NIX_SENDMEMALG_E_ADDMBUF   = 0xc,
0076     NIX_SENDMEMALG_E_SUBMBUF   = 0xd,
0077     NIX_SENDMEMALG_E_ENUM_LAST = 0xe,
0078 };
0079 
0080 /* NIX CQE header structure */
0081 struct nix_cqe_hdr_s {
0082     u64 flow_tag              : 32;
0083     u64 q                     : 20;
0084     u64 reserved_52_57        : 6;
0085     u64 node                  : 2;
0086     u64 cqe_type              : 4;
0087 };
0088 
0089 /* NIX CQE RX parse structure */
0090 struct nix_rx_parse_s {
0091     u64 chan         : 12;
0092     u64 desc_sizem1  : 5;
0093     u64 rsvd_17      : 1;
0094     u64 express      : 1;
0095     u64 wqwd         : 1;
0096     u64 errlev       : 4;
0097     u64 errcode      : 8;
0098     u64 latype       : 4;
0099     u64 lbtype       : 4;
0100     u64 lctype       : 4;
0101     u64 ldtype       : 4;
0102     u64 letype       : 4;
0103     u64 lftype       : 4;
0104     u64 lgtype       : 4;
0105     u64 lhtype       : 4;
0106     u64 pkt_lenm1    : 16; /* W1 */
0107     u64 l2m          : 1;
0108     u64 l2b          : 1;
0109     u64 l3m          : 1;
0110     u64 l3b          : 1;
0111     u64 vtag0_valid  : 1;
0112     u64 vtag0_gone   : 1;
0113     u64 vtag1_valid  : 1;
0114     u64 vtag1_gone   : 1;
0115     u64 pkind        : 6;
0116     u64 rsvd_95_94   : 2;
0117     u64 vtag0_tci    : 16;
0118     u64 vtag1_tci    : 16;
0119     u64 laflags      : 8; /* W2 */
0120     u64 lbflags      : 8;
0121     u64 lcflags      : 8;
0122     u64 ldflags      : 8;
0123     u64 leflags      : 8;
0124     u64 lfflags      : 8;
0125     u64 lgflags      : 8;
0126     u64 lhflags      : 8;
0127     u64 eoh_ptr      : 8; /* W3 */
0128     u64 wqe_aura     : 20;
0129     u64 pb_aura      : 20;
0130     u64 match_id     : 16;
0131     u64 laptr        : 8; /* W4 */
0132     u64 lbptr        : 8;
0133     u64 lcptr        : 8;
0134     u64 ldptr        : 8;
0135     u64 leptr        : 8;
0136     u64 lfptr        : 8;
0137     u64 lgptr        : 8;
0138     u64 lhptr        : 8;
0139     u64 vtag0_ptr    : 8; /* W5 */
0140     u64 vtag1_ptr    : 8;
0141     u64 flow_key_alg : 5;
0142     u64 rsvd_359_341 : 19;
0143     u64 color    : 2;
0144     u64 rsvd_383_362 : 22;
0145     u64 rsvd_447_384;     /* W6 */
0146 };
0147 
0148 /* NIX CQE RX scatter/gather subdescriptor structure */
0149 struct nix_rx_sg_s {
0150     u64 seg_size   : 16; /* W0 */
0151     u64 seg2_size  : 16;
0152     u64 seg3_size  : 16;
0153     u64 segs       : 2;
0154     u64 rsvd_59_50 : 10;
0155     u64 subdc      : 4;
0156     u64 seg_addr;
0157     u64 seg2_addr;
0158     u64 seg3_addr;
0159 };
0160 
0161 struct nix_send_comp_s {
0162     u64 status  : 8;
0163     u64 sqe_id  : 16;
0164     u64 rsvd_24_63  : 40;
0165 };
0166 
0167 struct nix_cqe_rx_s {
0168     struct nix_cqe_hdr_s  hdr;
0169     struct nix_rx_parse_s parse;
0170     struct nix_rx_sg_s sg;
0171 };
0172 
0173 struct nix_cqe_tx_s {
0174     struct nix_cqe_hdr_s  hdr;
0175     struct nix_send_comp_s comp;
0176 };
0177 
0178 /* NIX SQE header structure */
0179 struct nix_sqe_hdr_s {
0180     u64 total       : 18; /* W0 */
0181     u64 reserved_18     : 1;
0182     u64 df          : 1;
0183     u64 aura        : 20;
0184     u64 sizem1      : 3;
0185     u64 pnc         : 1;
0186     u64 sq          : 20;
0187     u64 ol3ptr      : 8; /* W1 */
0188     u64 ol4ptr      : 8;
0189     u64 il3ptr      : 8;
0190     u64 il4ptr      : 8;
0191     u64 ol3type     : 4;
0192     u64 ol4type     : 4;
0193     u64 il3type     : 4;
0194     u64 il4type     : 4;
0195     u64 sqe_id      : 16;
0196 
0197 };
0198 
0199 /* NIX send extended header subdescriptor structure */
0200 struct nix_sqe_ext_s {
0201     u64 lso_mps       : 14; /* W0 */
0202     u64 lso           : 1;
0203     u64 tstmp         : 1;
0204     u64 lso_sb        : 8;
0205     u64 lso_format    : 5;
0206     u64 rsvd_31_29    : 3;
0207     u64 shp_chg       : 9;
0208     u64 shp_dis       : 1;
0209     u64 shp_ra        : 2;
0210     u64 markptr       : 8;
0211     u64 markform      : 7;
0212     u64 mark_en       : 1;
0213     u64 subdc         : 4;
0214     u64 vlan0_ins_ptr : 8; /* W1 */
0215     u64 vlan0_ins_tci : 16;
0216     u64 vlan1_ins_ptr : 8;
0217     u64 vlan1_ins_tci : 16;
0218     u64 vlan0_ins_ena : 1;
0219     u64 vlan1_ins_ena : 1;
0220     u64 init_color    : 2;
0221     u64 rsvd_127_116  : 12;
0222 };
0223 
0224 struct nix_sqe_sg_s {
0225     u64 seg1_size   : 16;
0226     u64 seg2_size   : 16;
0227     u64 seg3_size   : 16;
0228     u64 segs    : 2;
0229     u64 rsvd_54_50  : 5;
0230     u64 i1      : 1;
0231     u64 i2      : 1;
0232     u64 i3      : 1;
0233     u64 ld_type : 2;
0234     u64 subdc   : 4;
0235 };
0236 
0237 /* NIX send memory subdescriptor structure */
0238 struct nix_sqe_mem_s {
0239     u64 offset        : 16; /* W0 */
0240     u64 rsvd_51_16    : 36;
0241     u64 per_lso_seg   : 1;
0242     u64 wmem          : 1;
0243     u64 dsz           : 2;
0244     u64 alg           : 4;
0245     u64 subdc         : 4;
0246     u64 addr; /* W1 */
0247 };
0248 
0249 enum nix_cqerrint_e {
0250     NIX_CQERRINT_DOOR_ERR = 0,
0251     NIX_CQERRINT_WR_FULL = 1,
0252     NIX_CQERRINT_CQE_FAULT = 2,
0253 };
0254 
0255 #define NIX_CQERRINT_BITS (BIT_ULL(NIX_CQERRINT_DOOR_ERR) | \
0256                BIT_ULL(NIX_CQERRINT_CQE_FAULT))
0257 
0258 enum nix_rqint_e {
0259     NIX_RQINT_DROP = 0,
0260     NIX_RQINT_RED = 1,
0261 };
0262 
0263 #define NIX_RQINT_BITS (BIT_ULL(NIX_RQINT_DROP) | BIT_ULL(NIX_RQINT_RED))
0264 
0265 enum nix_sqint_e {
0266     NIX_SQINT_LMT_ERR = 0,
0267     NIX_SQINT_MNQ_ERR = 1,
0268     NIX_SQINT_SEND_ERR = 2,
0269     NIX_SQINT_SQB_ALLOC_FAIL = 3,
0270 };
0271 
0272 #define NIX_SQINT_BITS (BIT_ULL(NIX_SQINT_LMT_ERR) | \
0273             BIT_ULL(NIX_SQINT_MNQ_ERR) | \
0274             BIT_ULL(NIX_SQINT_SEND_ERR) | \
0275             BIT_ULL(NIX_SQINT_SQB_ALLOC_FAIL))
0276 
0277 #endif /* OTX2_STRUCT_H */