linux/drivers/net/ethernet/marvell/octeontx2/nic/otx2_struct.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/* Marvell OcteonTx2 RVU Ethernet driver
   3 *
   4 * Copyright (C) 2020 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 OTX2_STRUCT_H
  12#define OTX2_STRUCT_H
  13
  14/* NIX WQE/CQE size 128 byte or 512 byte */
  15enum nix_cqesz_e {
  16        NIX_XQESZ_W64 = 0x0,
  17        NIX_XQESZ_W16 = 0x1,
  18};
  19
  20enum nix_sqes_e {
  21        NIX_SQESZ_W16 = 0x0,
  22        NIX_SQESZ_W8 = 0x1,
  23};
  24
  25enum nix_send_ldtype {
  26        NIX_SEND_LDTYPE_LDD  = 0x0,
  27        NIX_SEND_LDTYPE_LDT  = 0x1,
  28        NIX_SEND_LDTYPE_LDWB = 0x2,
  29};
  30
  31/* CSUM offload */
  32enum nix_sendl3type {
  33        NIX_SENDL3TYPE_NONE = 0x0,
  34        NIX_SENDL3TYPE_IP4 = 0x2,
  35        NIX_SENDL3TYPE_IP4_CKSUM = 0x3,
  36        NIX_SENDL3TYPE_IP6 = 0x4,
  37};
  38
  39enum nix_sendl4type {
  40        NIX_SENDL4TYPE_NONE,
  41        NIX_SENDL4TYPE_TCP_CKSUM,
  42        NIX_SENDL4TYPE_SCTP_CKSUM,
  43        NIX_SENDL4TYPE_UDP_CKSUM,
  44};
  45
  46/* NIX wqe/cqe types */
  47enum nix_xqe_type {
  48        NIX_XQE_TYPE_INVALID   = 0x0,
  49        NIX_XQE_TYPE_RX        = 0x1,
  50        NIX_XQE_TYPE_RX_IPSECS = 0x2,
  51        NIX_XQE_TYPE_RX_IPSECH = 0x3,
  52        NIX_XQE_TYPE_RX_IPSECD = 0x4,
  53        NIX_XQE_TYPE_SEND      = 0x8,
  54};
  55
  56/* NIX CQE/SQE subdescriptor types */
  57enum nix_subdc {
  58        NIX_SUBDC_NOP  = 0x0,
  59        NIX_SUBDC_EXT  = 0x1,
  60        NIX_SUBDC_CRC  = 0x2,
  61        NIX_SUBDC_IMM  = 0x3,
  62        NIX_SUBDC_SG   = 0x4,
  63        NIX_SUBDC_MEM  = 0x5,
  64        NIX_SUBDC_JUMP = 0x6,
  65        NIX_SUBDC_WORK = 0x7,
  66        NIX_SUBDC_SOD  = 0xf,
  67};
  68
  69/* Algorithm for nix_sqe_mem_s header (value of the `alg` field) */
  70enum nix_sendmemalg {
  71        NIX_SENDMEMALG_E_SET       = 0x0,
  72        NIX_SENDMEMALG_E_SETTSTMP  = 0x1,
  73        NIX_SENDMEMALG_E_SETRSLT   = 0x2,
  74        NIX_SENDMEMALG_E_ADD       = 0x8,
  75        NIX_SENDMEMALG_E_SUB       = 0x9,
  76        NIX_SENDMEMALG_E_ADDLEN    = 0xa,
  77        NIX_SENDMEMALG_E_SUBLEN    = 0xb,
  78        NIX_SENDMEMALG_E_ADDMBUF   = 0xc,
  79        NIX_SENDMEMALG_E_SUBMBUF   = 0xd,
  80        NIX_SENDMEMALG_E_ENUM_LAST = 0xe,
  81};
  82
  83/* NIX CQE header structure */
  84struct nix_cqe_hdr_s {
  85        u64 flow_tag              : 32;
  86        u64 q                     : 20;
  87        u64 reserved_52_57        : 6;
  88        u64 node                  : 2;
  89        u64 cqe_type              : 4;
  90};
  91
  92/* NIX CQE RX parse structure */
  93struct nix_rx_parse_s {
  94        u64 chan         : 12;
  95        u64 desc_sizem1  : 5;
  96        u64 rsvd_17      : 1;
  97        u64 express      : 1;
  98        u64 wqwd         : 1;
  99        u64 errlev       : 4;
 100        u64 errcode      : 8;
 101        u64 latype       : 4;
 102        u64 lbtype       : 4;
 103        u64 lctype       : 4;
 104        u64 ldtype       : 4;
 105        u64 letype       : 4;
 106        u64 lftype       : 4;
 107        u64 lgtype       : 4;
 108        u64 lhtype       : 4;
 109        u64 pkt_lenm1    : 16; /* W1 */
 110        u64 l2m          : 1;
 111        u64 l2b          : 1;
 112        u64 l3m          : 1;
 113        u64 l3b          : 1;
 114        u64 vtag0_valid  : 1;
 115        u64 vtag0_gone   : 1;
 116        u64 vtag1_valid  : 1;
 117        u64 vtag1_gone   : 1;
 118        u64 pkind        : 6;
 119        u64 rsvd_95_94   : 2;
 120        u64 vtag0_tci    : 16;
 121        u64 vtag1_tci    : 16;
 122        u64 laflags      : 8; /* W2 */
 123        u64 lbflags      : 8;
 124        u64 lcflags      : 8;
 125        u64 ldflags      : 8;
 126        u64 leflags      : 8;
 127        u64 lfflags      : 8;
 128        u64 lgflags      : 8;
 129        u64 lhflags      : 8;
 130        u64 eoh_ptr      : 8; /* W3 */
 131        u64 wqe_aura     : 20;
 132        u64 pb_aura      : 20;
 133        u64 match_id     : 16;
 134        u64 laptr        : 8; /* W4 */
 135        u64 lbptr        : 8;
 136        u64 lcptr        : 8;
 137        u64 ldptr        : 8;
 138        u64 leptr        : 8;
 139        u64 lfptr        : 8;
 140        u64 lgptr        : 8;
 141        u64 lhptr        : 8;
 142        u64 vtag0_ptr    : 8; /* W5 */
 143        u64 vtag1_ptr    : 8;
 144        u64 flow_key_alg : 5;
 145        u64 rsvd_359_341 : 19;
 146        u64 color        : 2;
 147        u64 rsvd_383_362 : 22;
 148        u64 rsvd_447_384;     /* W6 */
 149};
 150
 151/* NIX CQE RX scatter/gather subdescriptor structure */
 152struct nix_rx_sg_s {
 153        u64 seg_size   : 16; /* W0 */
 154        u64 seg2_size  : 16;
 155        u64 seg3_size  : 16;
 156        u64 segs       : 2;
 157        u64 rsvd_59_50 : 10;
 158        u64 subdc      : 4;
 159        u64 seg_addr;
 160        u64 seg2_addr;
 161        u64 seg3_addr;
 162};
 163
 164struct nix_send_comp_s {
 165        u64 status      : 8;
 166        u64 sqe_id      : 16;
 167        u64 rsvd_24_63  : 40;
 168};
 169
 170struct nix_cqe_rx_s {
 171        struct nix_cqe_hdr_s  hdr;
 172        struct nix_rx_parse_s parse;
 173        struct nix_rx_sg_s sg;
 174};
 175
 176struct nix_cqe_tx_s {
 177        struct nix_cqe_hdr_s  hdr;
 178        struct nix_send_comp_s comp;
 179};
 180
 181/* NIX SQE header structure */
 182struct nix_sqe_hdr_s {
 183        u64 total               : 18; /* W0 */
 184        u64 reserved_18         : 1;
 185        u64 df                  : 1;
 186        u64 aura                : 20;
 187        u64 sizem1              : 3;
 188        u64 pnc                 : 1;
 189        u64 sq                  : 20;
 190        u64 ol3ptr              : 8; /* W1 */
 191        u64 ol4ptr              : 8;
 192        u64 il3ptr              : 8;
 193        u64 il4ptr              : 8;
 194        u64 ol3type             : 4;
 195        u64 ol4type             : 4;
 196        u64 il3type             : 4;
 197        u64 il4type             : 4;
 198        u64 sqe_id              : 16;
 199
 200};
 201
 202/* NIX send extended header subdescriptor structure */
 203struct nix_sqe_ext_s {
 204        u64 lso_mps       : 14; /* W0 */
 205        u64 lso           : 1;
 206        u64 tstmp         : 1;
 207        u64 lso_sb        : 8;
 208        u64 lso_format    : 5;
 209        u64 rsvd_31_29    : 3;
 210        u64 shp_chg       : 9;
 211        u64 shp_dis       : 1;
 212        u64 shp_ra        : 2;
 213        u64 markptr       : 8;
 214        u64 markform      : 7;
 215        u64 mark_en       : 1;
 216        u64 subdc         : 4;
 217        u64 vlan0_ins_ptr : 8; /* W1 */
 218        u64 vlan0_ins_tci : 16;
 219        u64 vlan1_ins_ptr : 8;
 220        u64 vlan1_ins_tci : 16;
 221        u64 vlan0_ins_ena : 1;
 222        u64 vlan1_ins_ena : 1;
 223        u64 init_color    : 2;
 224        u64 rsvd_127_116  : 12;
 225};
 226
 227struct nix_sqe_sg_s {
 228        u64 seg1_size   : 16;
 229        u64 seg2_size   : 16;
 230        u64 seg3_size   : 16;
 231        u64 segs        : 2;
 232        u64 rsvd_54_50  : 5;
 233        u64 i1          : 1;
 234        u64 i2          : 1;
 235        u64 i3          : 1;
 236        u64 ld_type     : 2;
 237        u64 subdc       : 4;
 238};
 239
 240/* NIX send memory subdescriptor structure */
 241struct nix_sqe_mem_s {
 242        u64 offset        : 16; /* W0 */
 243        u64 rsvd_51_16    : 36;
 244        u64 per_lso_seg   : 1;
 245        u64 wmem          : 1;
 246        u64 dsz           : 2;
 247        u64 alg           : 4;
 248        u64 subdc         : 4;
 249        u64 addr; /* W1 */
 250};
 251
 252enum nix_cqerrint_e {
 253        NIX_CQERRINT_DOOR_ERR = 0,
 254        NIX_CQERRINT_WR_FULL = 1,
 255        NIX_CQERRINT_CQE_FAULT = 2,
 256};
 257
 258#define NIX_CQERRINT_BITS (BIT_ULL(NIX_CQERRINT_DOOR_ERR) | \
 259                           BIT_ULL(NIX_CQERRINT_CQE_FAULT))
 260
 261enum nix_rqint_e {
 262        NIX_RQINT_DROP = 0,
 263        NIX_RQINT_RED = 1,
 264};
 265
 266#define NIX_RQINT_BITS (BIT_ULL(NIX_RQINT_DROP) | BIT_ULL(NIX_RQINT_RED))
 267
 268enum nix_sqint_e {
 269        NIX_SQINT_LMT_ERR = 0,
 270        NIX_SQINT_MNQ_ERR = 1,
 271        NIX_SQINT_SEND_ERR = 2,
 272        NIX_SQINT_SQB_ALLOC_FAIL = 3,
 273};
 274
 275#define NIX_SQINT_BITS (BIT_ULL(NIX_SQINT_LMT_ERR) | \
 276                        BIT_ULL(NIX_SQINT_MNQ_ERR) | \
 277                        BIT_ULL(NIX_SQINT_SEND_ERR) | \
 278                        BIT_ULL(NIX_SQINT_SQB_ALLOC_FAIL))
 279
 280#endif /* OTX2_STRUCT_H */
 281