The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/vnic/q_struct.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*
    2  * Copyright (C) 2015 Cavium Inc.
    3  * All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer.
   10  * 2. Redistributions in binary form must reproduce the above copyright
   11  *    notice, this list of conditions and the following disclaimer in the
   12  *    documentation and/or other materials provided with the distribution.
   13  *
   14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   24  * SUCH DAMAGE.
   25  *
   26  * $FreeBSD$
   27  *
   28  */
   29 
   30 #ifndef Q_STRUCT_H
   31 #define Q_STRUCT_H
   32 
   33 #define __LITTLE_ENDIAN_BITFIELD
   34 
   35 /* Load transaction types for reading segment bytes specified by
   36  * NIC_SEND_GATHER_S[LD_TYPE].
   37  */
   38 enum nic_send_ld_type_e {
   39         NIC_SEND_LD_TYPE_E_LDD = 0x0,
   40         NIC_SEND_LD_TYPE_E_LDT = 0x1,
   41         NIC_SEND_LD_TYPE_E_LDWB = 0x2,
   42         NIC_SEND_LD_TYPE_E_ENUM_LAST = 0x3,
   43 };
   44 
   45 enum ether_type_algorithm {
   46         ETYPE_ALG_NONE = 0x0,
   47         ETYPE_ALG_SKIP = 0x1,
   48         ETYPE_ALG_ENDPARSE = 0x2,
   49         ETYPE_ALG_VLAN = 0x3,
   50         ETYPE_ALG_VLAN_STRIP = 0x4,
   51 };
   52 
   53 enum layer3_type {
   54         L3TYPE_NONE = 0x00,
   55         L3TYPE_GRH = 0x01,
   56         L3TYPE_IPV4 = 0x04,
   57         L3TYPE_IPV4_OPTIONS = 0x05,
   58         L3TYPE_IPV6 = 0x06,
   59         L3TYPE_IPV6_OPTIONS = 0x07,
   60         L3TYPE_ET_STOP = 0x0D,
   61         L3TYPE_OTHER = 0x0E,
   62 };
   63 
   64 enum layer4_type {
   65         L4TYPE_NONE = 0x00,
   66         L4TYPE_IPSEC_ESP = 0x01,
   67         L4TYPE_IPFRAG = 0x02,
   68         L4TYPE_IPCOMP = 0x03,
   69         L4TYPE_TCP = 0x04,
   70         L4TYPE_UDP = 0x05,
   71         L4TYPE_SCTP = 0x06,
   72         L4TYPE_GRE = 0x07,
   73         L4TYPE_ROCE_BTH = 0x08,
   74         L4TYPE_OTHER = 0x0E,
   75 };
   76 
   77 /* CPI and RSSI configuration */
   78 enum cpi_algorithm_type {
   79         CPI_ALG_NONE = 0x0,
   80         CPI_ALG_VLAN = 0x1,
   81         CPI_ALG_VLAN16 = 0x2,
   82         CPI_ALG_DIFF = 0x3,
   83 };
   84 
   85 enum rss_algorithm_type {
   86         RSS_ALG_NONE = 0x00,
   87         RSS_ALG_PORT = 0x01,
   88         RSS_ALG_IP = 0x02,
   89         RSS_ALG_TCP_IP = 0x03,
   90         RSS_ALG_UDP_IP = 0x04,
   91         RSS_ALG_SCTP_IP = 0x05,
   92         RSS_ALG_GRE_IP = 0x06,
   93         RSS_ALG_ROCE = 0x07,
   94 };
   95 
   96 enum rss_hash_cfg {
   97         RSS_HASH_L2ETC = 0x00,
   98         RSS_HASH_IP = 0x01,
   99         RSS_HASH_TCP = 0x02,
  100         RSS_HASH_TCP_SYN_DIS = 0x03,
  101         RSS_HASH_UDP = 0x04,
  102         RSS_HASH_L4ETC = 0x05,
  103         RSS_HASH_ROCE = 0x06,
  104         RSS_L3_BIDI = 0x07,
  105         RSS_L4_BIDI = 0x08,
  106 };
  107 
  108 /* Completion queue entry types */
  109 enum cqe_type {
  110         CQE_TYPE_INVALID = 0x0,
  111         CQE_TYPE_RX = 0x2,
  112         CQE_TYPE_RX_SPLIT = 0x3,
  113         CQE_TYPE_RX_TCP = 0x4,
  114         CQE_TYPE_SEND = 0x8,
  115         CQE_TYPE_SEND_PTP = 0x9,
  116 };
  117 
  118 enum cqe_rx_tcp_status {
  119         CQE_RX_STATUS_VALID_TCP_CNXT = 0x00,
  120         CQE_RX_STATUS_INVALID_TCP_CNXT = 0x0F,
  121 };
  122 
  123 enum cqe_send_status {
  124         CQE_SEND_STATUS_GOOD = 0x00,
  125         CQE_SEND_STATUS_DESC_FAULT = 0x01,
  126         CQE_SEND_STATUS_HDR_CONS_ERR = 0x11,
  127         CQE_SEND_STATUS_SUBDESC_ERR = 0x12,
  128         CQE_SEND_STATUS_IMM_SIZE_OFLOW = 0x80,
  129         CQE_SEND_STATUS_CRC_SEQ_ERR = 0x81,
  130         CQE_SEND_STATUS_DATA_SEQ_ERR = 0x82,
  131         CQE_SEND_STATUS_MEM_SEQ_ERR = 0x83,
  132         CQE_SEND_STATUS_LOCK_VIOL = 0x84,
  133         CQE_SEND_STATUS_LOCK_UFLOW = 0x85,
  134         CQE_SEND_STATUS_DATA_FAULT = 0x86,
  135         CQE_SEND_STATUS_TSTMP_CONFLICT = 0x87,
  136         CQE_SEND_STATUS_TSTMP_TIMEOUT = 0x88,
  137         CQE_SEND_STATUS_MEM_FAULT = 0x89,
  138         CQE_SEND_STATUS_CSUM_OVERLAP = 0x8A,
  139         CQE_SEND_STATUS_CSUM_OVERFLOW = 0x8B,
  140 };
  141 
  142 enum cqe_rx_tcp_end_reason {
  143         CQE_RX_TCP_END_FIN_FLAG_DET = 0,
  144         CQE_RX_TCP_END_INVALID_FLAG = 1,
  145         CQE_RX_TCP_END_TIMEOUT = 2,
  146         CQE_RX_TCP_END_OUT_OF_SEQ = 3,
  147         CQE_RX_TCP_END_PKT_ERR = 4,
  148         CQE_RX_TCP_END_QS_DISABLED = 0x0F,
  149 };
  150 
  151 /* Packet protocol level error enumeration */
  152 enum cqe_rx_err_level {
  153         CQE_RX_ERRLVL_RE = 0x0,
  154         CQE_RX_ERRLVL_L2 = 0x1,
  155         CQE_RX_ERRLVL_L3 = 0x2,
  156         CQE_RX_ERRLVL_L4 = 0x3,
  157 };
  158 
  159 /* Packet protocol level error type enumeration */
  160 enum cqe_rx_err_opcode {
  161         CQE_RX_ERR_RE_NONE = 0x0,
  162         CQE_RX_ERR_RE_PARTIAL = 0x1,
  163         CQE_RX_ERR_RE_JABBER = 0x2,
  164         CQE_RX_ERR_RE_FCS = 0x7,
  165         CQE_RX_ERR_RE_TERMINATE = 0x9,
  166         CQE_RX_ERR_RE_RX_CTL = 0xb,
  167         CQE_RX_ERR_PREL2_ERR = 0x1f,
  168         CQE_RX_ERR_L2_FRAGMENT = 0x20,
  169         CQE_RX_ERR_L2_OVERRUN = 0x21,
  170         CQE_RX_ERR_L2_PFCS = 0x22,
  171         CQE_RX_ERR_L2_PUNY = 0x23,
  172         CQE_RX_ERR_L2_MAL = 0x24,
  173         CQE_RX_ERR_L2_OVERSIZE = 0x25,
  174         CQE_RX_ERR_L2_UNDERSIZE = 0x26,
  175         CQE_RX_ERR_L2_LENMISM = 0x27,
  176         CQE_RX_ERR_L2_PCLP = 0x28,
  177         CQE_RX_ERR_IP_NOT = 0x41,
  178         CQE_RX_ERR_IP_CHK = 0x42,
  179         CQE_RX_ERR_IP_MAL = 0x43,
  180         CQE_RX_ERR_IP_MALD = 0x44,
  181         CQE_RX_ERR_IP_HOP = 0x45,
  182         CQE_RX_ERR_L3_ICRC = 0x46,
  183         CQE_RX_ERR_L3_PCLP = 0x47,
  184         CQE_RX_ERR_L4_MAL = 0x61,
  185         CQE_RX_ERR_L4_CHK = 0x62,
  186         CQE_RX_ERR_UDP_LEN = 0x63,
  187         CQE_RX_ERR_L4_PORT = 0x64,
  188         CQE_RX_ERR_TCP_FLAG = 0x65,
  189         CQE_RX_ERR_TCP_OFFSET = 0x66,
  190         CQE_RX_ERR_L4_PCLP = 0x67,
  191         CQE_RX_ERR_RBDR_TRUNC = 0x70,
  192 };
  193 
  194 struct cqe_rx_t {
  195 #if defined(__BIG_ENDIAN_BITFIELD)
  196         uint64_t   cqe_type:4; /* W0 */
  197         uint64_t   stdn_fault:1;
  198         uint64_t   rsvd0:1;
  199         uint64_t   rq_qs:7;
  200         uint64_t   rq_idx:3;
  201         uint64_t   rsvd1:12;
  202         uint64_t   rss_alg:4;
  203         uint64_t   rsvd2:4;
  204         uint64_t   rb_cnt:4;
  205         uint64_t   vlan_found:1;
  206         uint64_t   vlan_stripped:1;
  207         uint64_t   vlan2_found:1;
  208         uint64_t   vlan2_stripped:1;
  209         uint64_t   l4_type:4;
  210         uint64_t   l3_type:4;
  211         uint64_t   l2_present:1;
  212         uint64_t   err_level:3;
  213         uint64_t   err_opcode:8;
  214 
  215         uint64_t   pkt_len:16; /* W1 */
  216         uint64_t   l2_ptr:8;
  217         uint64_t   l3_ptr:8;
  218         uint64_t   l4_ptr:8;
  219         uint64_t   cq_pkt_len:8;
  220         uint64_t   align_pad:3;
  221         uint64_t   rsvd3:1;
  222         uint64_t   chan:12;
  223 
  224         uint64_t   rss_tag:32; /* W2 */
  225         uint64_t   vlan_tci:16;
  226         uint64_t   vlan_ptr:8;
  227         uint64_t   vlan2_ptr:8;
  228 
  229         uint64_t   rb3_sz:16; /* W3 */
  230         uint64_t   rb2_sz:16;
  231         uint64_t   rb1_sz:16;
  232         uint64_t   rb0_sz:16;
  233 
  234         uint64_t   rb7_sz:16; /* W4 */
  235         uint64_t   rb6_sz:16;
  236         uint64_t   rb5_sz:16;
  237         uint64_t   rb4_sz:16;
  238 
  239         uint64_t   rb11_sz:16; /* W5 */
  240         uint64_t   rb10_sz:16;
  241         uint64_t   rb9_sz:16;
  242         uint64_t   rb8_sz:16;
  243 #elif defined(__LITTLE_ENDIAN_BITFIELD)
  244         uint64_t   err_opcode:8;
  245         uint64_t   err_level:3;
  246         uint64_t   l2_present:1;
  247         uint64_t   l3_type:4;
  248         uint64_t   l4_type:4;
  249         uint64_t   vlan2_stripped:1;
  250         uint64_t   vlan2_found:1;
  251         uint64_t   vlan_stripped:1;
  252         uint64_t   vlan_found:1;
  253         uint64_t   rb_cnt:4;
  254         uint64_t   rsvd2:4;
  255         uint64_t   rss_alg:4;
  256         uint64_t   rsvd1:12;
  257         uint64_t   rq_idx:3;
  258         uint64_t   rq_qs:7;
  259         uint64_t   rsvd0:1;
  260         uint64_t   stdn_fault:1;
  261         uint64_t   cqe_type:4; /* W0 */
  262         uint64_t   chan:12;
  263         uint64_t   rsvd3:1;
  264         uint64_t   align_pad:3;
  265         uint64_t   cq_pkt_len:8;
  266         uint64_t   l4_ptr:8;
  267         uint64_t   l3_ptr:8;
  268         uint64_t   l2_ptr:8;
  269         uint64_t   pkt_len:16; /* W1 */
  270         uint64_t   vlan2_ptr:8;
  271         uint64_t   vlan_ptr:8;
  272         uint64_t   vlan_tci:16;
  273         uint64_t   rss_tag:32; /* W2 */
  274         uint64_t   rb0_sz:16;
  275         uint64_t   rb1_sz:16;
  276         uint64_t   rb2_sz:16;
  277         uint64_t   rb3_sz:16; /* W3 */
  278         uint64_t   rb4_sz:16;
  279         uint64_t   rb5_sz:16;
  280         uint64_t   rb6_sz:16;
  281         uint64_t   rb7_sz:16; /* W4 */
  282         uint64_t   rb8_sz:16;
  283         uint64_t   rb9_sz:16;
  284         uint64_t   rb10_sz:16;
  285         uint64_t   rb11_sz:16; /* W5 */
  286 #endif
  287         uint64_t   rb0_ptr:64;
  288         uint64_t   rb1_ptr:64;
  289         uint64_t   rb2_ptr:64;
  290         uint64_t   rb3_ptr:64;
  291         uint64_t   rb4_ptr:64;
  292         uint64_t   rb5_ptr:64;
  293         uint64_t   rb6_ptr:64;
  294         uint64_t   rb7_ptr:64;
  295         uint64_t   rb8_ptr:64;
  296         uint64_t   rb9_ptr:64;
  297         uint64_t   rb10_ptr:64;
  298         uint64_t   rb11_ptr:64;
  299 };
  300 
  301 struct cqe_rx_tcp_err_t {
  302 #if defined(__BIG_ENDIAN_BITFIELD)
  303         uint64_t   cqe_type:4; /* W0 */
  304         uint64_t   rsvd0:60;
  305 
  306         uint64_t   rsvd1:4; /* W1 */
  307         uint64_t   partial_first:1;
  308         uint64_t   rsvd2:27;
  309         uint64_t   rbdr_bytes:8;
  310         uint64_t   rsvd3:24;
  311 #elif defined(__LITTLE_ENDIAN_BITFIELD)
  312         uint64_t   rsvd0:60;
  313         uint64_t   cqe_type:4;
  314 
  315         uint64_t   rsvd3:24;
  316         uint64_t   rbdr_bytes:8;
  317         uint64_t   rsvd2:27;
  318         uint64_t   partial_first:1;
  319         uint64_t   rsvd1:4;
  320 #endif
  321 };
  322 
  323 struct cqe_rx_tcp_t {
  324 #if defined(__BIG_ENDIAN_BITFIELD)
  325         uint64_t   cqe_type:4; /* W0 */
  326         uint64_t   rsvd0:52;
  327         uint64_t   cq_tcp_status:8;
  328 
  329         uint64_t   rsvd1:32; /* W1 */
  330         uint64_t   tcp_cntx_bytes:8;
  331         uint64_t   rsvd2:8;
  332         uint64_t   tcp_err_bytes:16;
  333 #elif defined(__LITTLE_ENDIAN_BITFIELD)
  334         uint64_t   cq_tcp_status:8;
  335         uint64_t   rsvd0:52;
  336         uint64_t   cqe_type:4; /* W0 */
  337 
  338         uint64_t   tcp_err_bytes:16;
  339         uint64_t   rsvd2:8;
  340         uint64_t   tcp_cntx_bytes:8;
  341         uint64_t   rsvd1:32; /* W1 */
  342 #endif
  343 };
  344 
  345 struct cqe_send_t {
  346 #if defined(__BIG_ENDIAN_BITFIELD)
  347         uint64_t   cqe_type:4; /* W0 */
  348         uint64_t   rsvd0:4;
  349         uint64_t   sqe_ptr:16;
  350         uint64_t   rsvd1:4;
  351         uint64_t   rsvd2:10;
  352         uint64_t   sq_qs:7;
  353         uint64_t   sq_idx:3;
  354         uint64_t   rsvd3:8;
  355         uint64_t   send_status:8;
  356 
  357         uint64_t   ptp_timestamp:64; /* W1 */
  358 #elif defined(__LITTLE_ENDIAN_BITFIELD)
  359         uint64_t   send_status:8;
  360         uint64_t   rsvd3:8;
  361         uint64_t   sq_idx:3;
  362         uint64_t   sq_qs:7;
  363         uint64_t   rsvd2:10;
  364         uint64_t   rsvd1:4;
  365         uint64_t   sqe_ptr:16;
  366         uint64_t   rsvd0:4;
  367         uint64_t   cqe_type:4; /* W0 */
  368 
  369         uint64_t   ptp_timestamp:64; /* W1 */
  370 #endif
  371 };
  372 
  373 union cq_desc_t {
  374         uint64_t    u[64];
  375         struct cqe_send_t snd_hdr;
  376         struct cqe_rx_t rx_hdr;
  377         struct cqe_rx_tcp_t rx_tcp_hdr;
  378         struct cqe_rx_tcp_err_t rx_tcp_err_hdr;
  379 };
  380 
  381 struct rbdr_entry_t {
  382 #if defined(__BIG_ENDIAN_BITFIELD)
  383         uint64_t   rsvd0:15;
  384         uint64_t   buf_addr:42;
  385         uint64_t   cache_align:7;
  386 #elif defined(__LITTLE_ENDIAN_BITFIELD)
  387         uint64_t   cache_align:7;
  388         uint64_t   buf_addr:42;
  389         uint64_t   rsvd0:15;
  390 #endif
  391 };
  392 
  393 /* TCP reassembly context */
  394 struct rbe_tcp_cnxt_t {
  395 #if defined(__BIG_ENDIAN_BITFIELD)
  396         uint64_t   tcp_pkt_cnt:12;
  397         uint64_t   rsvd1:4;
  398         uint64_t   align_hdr_bytes:4;
  399         uint64_t   align_ptr_bytes:4;
  400         uint64_t   ptr_bytes:16;
  401         uint64_t   rsvd2:24;
  402         uint64_t   cqe_type:4;
  403         uint64_t   rsvd0:54;
  404         uint64_t   tcp_end_reason:2;
  405         uint64_t   tcp_status:4;
  406 #elif defined(__LITTLE_ENDIAN_BITFIELD)
  407         uint64_t   tcp_status:4;
  408         uint64_t   tcp_end_reason:2;
  409         uint64_t   rsvd0:54;
  410         uint64_t   cqe_type:4;
  411         uint64_t   rsvd2:24;
  412         uint64_t   ptr_bytes:16;
  413         uint64_t   align_ptr_bytes:4;
  414         uint64_t   align_hdr_bytes:4;
  415         uint64_t   rsvd1:4;
  416         uint64_t   tcp_pkt_cnt:12;
  417 #endif
  418 };
  419 
  420 /* Always Big endian */
  421 struct rx_hdr_t {
  422         uint64_t   opaque:32;
  423         uint64_t   rss_flow:8;
  424         uint64_t   skip_length:6;
  425         uint64_t   disable_rss:1;
  426         uint64_t   disable_tcp_reassembly:1;
  427         uint64_t   nodrop:1;
  428         uint64_t   dest_alg:2;
  429         uint64_t   rsvd0:2;
  430         uint64_t   dest_rq:11;
  431 };
  432 
  433 enum send_l4_csum_type {
  434         SEND_L4_CSUM_DISABLE = 0x00,
  435         SEND_L4_CSUM_UDP = 0x01,
  436         SEND_L4_CSUM_TCP = 0x02,
  437         SEND_L4_CSUM_SCTP = 0x03,
  438 };
  439 
  440 enum send_crc_alg {
  441         SEND_CRCALG_CRC32 = 0x00,
  442         SEND_CRCALG_CRC32C = 0x01,
  443         SEND_CRCALG_ICRC = 0x02,
  444 };
  445 
  446 enum send_load_type {
  447         SEND_LD_TYPE_LDD = 0x00,
  448         SEND_LD_TYPE_LDT = 0x01,
  449         SEND_LD_TYPE_LDWB = 0x02,
  450 };
  451 
  452 enum send_mem_alg_type {
  453         SEND_MEMALG_SET = 0x00,
  454         SEND_MEMALG_ADD = 0x08,
  455         SEND_MEMALG_SUB = 0x09,
  456         SEND_MEMALG_ADDLEN = 0x0A,
  457         SEND_MEMALG_SUBLEN = 0x0B,
  458 };
  459 
  460 enum send_mem_dsz_type {
  461         SEND_MEMDSZ_B64 = 0x00,
  462         SEND_MEMDSZ_B32 = 0x01,
  463         SEND_MEMDSZ_B8 = 0x03,
  464 };
  465 
  466 enum sq_subdesc_type {
  467         SQ_DESC_TYPE_INVALID = 0x00,
  468         SQ_DESC_TYPE_HEADER = 0x01,
  469         SQ_DESC_TYPE_CRC = 0x02,
  470         SQ_DESC_TYPE_IMMEDIATE = 0x03,
  471         SQ_DESC_TYPE_GATHER = 0x04,
  472         SQ_DESC_TYPE_MEMORY = 0x05,
  473 };
  474 
  475 struct sq_crc_subdesc {
  476 #if defined(__BIG_ENDIAN_BITFIELD)
  477         uint64_t    rsvd1:32;
  478         uint64_t    crc_ival:32;
  479         uint64_t    subdesc_type:4;
  480         uint64_t    crc_alg:2;
  481         uint64_t    rsvd0:10;
  482         uint64_t    crc_insert_pos:16;
  483         uint64_t    hdr_start:16;
  484         uint64_t    crc_len:16;
  485 #elif defined(__LITTLE_ENDIAN_BITFIELD)
  486         uint64_t    crc_len:16;
  487         uint64_t    hdr_start:16;
  488         uint64_t    crc_insert_pos:16;
  489         uint64_t    rsvd0:10;
  490         uint64_t    crc_alg:2;
  491         uint64_t    subdesc_type:4;
  492         uint64_t    crc_ival:32;
  493         uint64_t    rsvd1:32;
  494 #endif
  495 };
  496 
  497 struct sq_gather_subdesc {
  498 #if defined(__BIG_ENDIAN_BITFIELD)
  499         uint64_t    subdesc_type:4; /* W0 */
  500         uint64_t    ld_type:2;
  501         uint64_t    rsvd0:42;
  502         uint64_t    size:16;
  503 
  504         uint64_t    rsvd1:15; /* W1 */
  505         uint64_t    addr:49;
  506 #elif defined(__LITTLE_ENDIAN_BITFIELD)
  507         uint64_t    size:16;
  508         uint64_t    rsvd0:42;
  509         uint64_t    ld_type:2;
  510         uint64_t    subdesc_type:4; /* W0 */
  511 
  512         uint64_t    addr:49;
  513         uint64_t    rsvd1:15; /* W1 */
  514 #endif
  515 };
  516 
  517 /* SQ immediate subdescriptor */
  518 struct sq_imm_subdesc {
  519 #if defined(__BIG_ENDIAN_BITFIELD)
  520         uint64_t    subdesc_type:4; /* W0 */
  521         uint64_t    rsvd0:46;
  522         uint64_t    len:14;
  523 
  524         uint64_t    data:64; /* W1 */
  525 #elif defined(__LITTLE_ENDIAN_BITFIELD)
  526         uint64_t    len:14;
  527         uint64_t    rsvd0:46;
  528         uint64_t    subdesc_type:4; /* W0 */
  529 
  530         uint64_t    data:64; /* W1 */
  531 #endif
  532 };
  533 
  534 struct sq_mem_subdesc {
  535 #if defined(__BIG_ENDIAN_BITFIELD)
  536         uint64_t    subdesc_type:4; /* W0 */
  537         uint64_t    mem_alg:4;
  538         uint64_t    mem_dsz:2;
  539         uint64_t    wmem:1;
  540         uint64_t    rsvd0:21;
  541         uint64_t    offset:32;
  542 
  543         uint64_t    rsvd1:15; /* W1 */
  544         uint64_t    addr:49;
  545 #elif defined(__LITTLE_ENDIAN_BITFIELD)
  546         uint64_t    offset:32;
  547         uint64_t    rsvd0:21;
  548         uint64_t    wmem:1;
  549         uint64_t    mem_dsz:2;
  550         uint64_t    mem_alg:4;
  551         uint64_t    subdesc_type:4; /* W0 */
  552 
  553         uint64_t    addr:49;
  554         uint64_t    rsvd1:15; /* W1 */
  555 #endif
  556 };
  557 
  558 struct sq_hdr_subdesc {
  559 #if defined(__BIG_ENDIAN_BITFIELD)
  560         uint64_t    subdesc_type:4;
  561         uint64_t    tso:1;
  562         uint64_t    post_cqe:1; /* Post CQE on no error also */
  563         uint64_t    dont_send:1;
  564         uint64_t    tstmp:1;
  565         uint64_t    subdesc_cnt:8;
  566         uint64_t    csum_l4:2;
  567         uint64_t    csum_l3:1;
  568         uint64_t    csum_inner_l4:2;
  569         uint64_t    csum_inner_l3:1;
  570         uint64_t    rsvd0:2;
  571         uint64_t    l4_offset:8;
  572         uint64_t    l3_offset:8;
  573         uint64_t    rsvd1:4;
  574         uint64_t    tot_len:20; /* W0 */
  575 
  576         uint64_t    rsvd2:24;
  577         uint64_t    inner_l4_offset:8;
  578         uint64_t    inner_l3_offset:8;
  579         uint64_t    tso_start:8;
  580         uint64_t    rsvd3:2;
  581         uint64_t    tso_max_paysize:14; /* W1 */
  582 #elif defined(__LITTLE_ENDIAN_BITFIELD)
  583         uint64_t    tot_len:20;
  584         uint64_t    rsvd1:4;
  585         uint64_t    l3_offset:8;
  586         uint64_t    l4_offset:8;
  587         uint64_t    rsvd0:2;
  588         uint64_t    csum_inner_l3:1;
  589         uint64_t    csum_inner_l4:2;
  590         uint64_t    csum_l3:1;
  591         uint64_t    csum_l4:2;
  592         uint64_t    subdesc_cnt:8;
  593         uint64_t    tstmp:1;
  594         uint64_t    dont_send:1;
  595         uint64_t    post_cqe:1; /* Post CQE on no error also */
  596         uint64_t    tso:1;
  597         uint64_t    subdesc_type:4; /* W0 */
  598 
  599         uint64_t    tso_max_paysize:14;
  600         uint64_t    rsvd3:2;
  601         uint64_t    tso_start:8;
  602         uint64_t    inner_l3_offset:8;
  603         uint64_t    inner_l4_offset:8;
  604         uint64_t    rsvd2:24;
  605 #endif
  606 };
  607 
  608 /* Queue config register formats */
  609 struct rq_cfg {
  610 #if defined(__BIG_ENDIAN_BITFIELD)
  611         uint64_t reserved_2_63:62;
  612         uint64_t ena:1;
  613         uint64_t tcp_ena:1;
  614 #elif defined(__LITTLE_ENDIAN_BITFIELD)
  615         uint64_t tcp_ena:1;
  616         uint64_t ena:1;
  617         uint64_t reserved_2_63:62;
  618 #endif
  619 };
  620 
  621 struct cq_cfg {
  622 #if defined(__BIG_ENDIAN_BITFIELD)
  623         uint64_t reserved_43_63:21;
  624         uint64_t ena:1;
  625         uint64_t reset:1;
  626         uint64_t caching:1;
  627         uint64_t reserved_35_39:5;
  628         uint64_t qsize:3;
  629         uint64_t reserved_25_31:7;
  630         uint64_t avg_con:9;
  631         uint64_t reserved_0_15:16;
  632 #elif defined(__LITTLE_ENDIAN_BITFIELD)
  633         uint64_t reserved_0_15:16;
  634         uint64_t avg_con:9;
  635         uint64_t reserved_25_31:7;
  636         uint64_t qsize:3;
  637         uint64_t reserved_35_39:5;
  638         uint64_t caching:1;
  639         uint64_t reset:1;
  640         uint64_t ena:1;
  641         uint64_t reserved_43_63:21;
  642 #endif
  643 };
  644 
  645 struct sq_cfg {
  646 #if defined(__BIG_ENDIAN_BITFIELD)
  647         uint64_t reserved_20_63:44;
  648         uint64_t ena:1;
  649         uint64_t reserved_18_18:1;
  650         uint64_t reset:1;
  651         uint64_t ldwb:1;
  652         uint64_t reserved_11_15:5;
  653         uint64_t qsize:3;
  654         uint64_t reserved_3_7:5;
  655         uint64_t tstmp_bgx_intf:3;
  656 #elif defined(__LITTLE_ENDIAN_BITFIELD)
  657         uint64_t tstmp_bgx_intf:3;
  658         uint64_t reserved_3_7:5;
  659         uint64_t qsize:3;
  660         uint64_t reserved_11_15:5;
  661         uint64_t ldwb:1;
  662         uint64_t reset:1;
  663         uint64_t reserved_18_18:1;
  664         uint64_t ena:1;
  665         uint64_t reserved_20_63:44;
  666 #endif
  667 };
  668 
  669 struct rbdr_cfg {
  670 #if defined(__BIG_ENDIAN_BITFIELD)
  671         uint64_t reserved_45_63:19;
  672         uint64_t ena:1;
  673         uint64_t reset:1;
  674         uint64_t ldwb:1;
  675         uint64_t reserved_36_41:6;
  676         uint64_t qsize:4;
  677         uint64_t reserved_25_31:7;
  678         uint64_t avg_con:9;
  679         uint64_t reserved_12_15:4;
  680         uint64_t lines:12;
  681 #elif defined(__LITTLE_ENDIAN_BITFIELD)
  682         uint64_t lines:12;
  683         uint64_t reserved_12_15:4;
  684         uint64_t avg_con:9;
  685         uint64_t reserved_25_31:7;
  686         uint64_t qsize:4;
  687         uint64_t reserved_36_41:6;
  688         uint64_t ldwb:1;
  689         uint64_t reset:1;
  690         uint64_t ena: 1;
  691         uint64_t reserved_45_63:19;
  692 #endif
  693 };
  694 
  695 struct qs_cfg {
  696 #if defined(__BIG_ENDIAN_BITFIELD)
  697         uint64_t reserved_32_63:32;
  698         uint64_t ena:1;
  699         uint64_t reserved_27_30:4;
  700         uint64_t sq_ins_ena:1;
  701         uint64_t sq_ins_pos:6;
  702         uint64_t lock_ena:1;
  703         uint64_t lock_viol_cqe_ena:1;
  704         uint64_t send_tstmp_ena:1;
  705         uint64_t be:1;
  706         uint64_t reserved_7_15:9;
  707         uint64_t vnic:7;
  708 #elif defined(__LITTLE_ENDIAN_BITFIELD)
  709         uint64_t vnic:7;
  710         uint64_t reserved_7_15:9;
  711         uint64_t be:1;
  712         uint64_t send_tstmp_ena:1;
  713         uint64_t lock_viol_cqe_ena:1;
  714         uint64_t lock_ena:1;
  715         uint64_t sq_ins_pos:6;
  716         uint64_t sq_ins_ena:1;
  717         uint64_t reserved_27_30:4;
  718         uint64_t ena:1;
  719         uint64_t reserved_32_63:32;
  720 #endif
  721 };
  722 
  723 #endif /* Q_STRUCT_H */

Cache object: 9f969435054c3b423ae509ad1d961a68


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.