13c0086b8SZbigniew Bodek /* 23c0086b8SZbigniew Bodek * Copyright (C) 2015 Cavium Inc. 33c0086b8SZbigniew Bodek * All rights reserved. 43c0086b8SZbigniew Bodek * 53c0086b8SZbigniew Bodek * Redistribution and use in source and binary forms, with or without 63c0086b8SZbigniew Bodek * modification, are permitted provided that the following conditions 73c0086b8SZbigniew Bodek * are met: 83c0086b8SZbigniew Bodek * 1. Redistributions of source code must retain the above copyright 93c0086b8SZbigniew Bodek * notice, this list of conditions and the following disclaimer. 103c0086b8SZbigniew Bodek * 2. Redistributions in binary form must reproduce the above copyright 113c0086b8SZbigniew Bodek * notice, this list of conditions and the following disclaimer in the 123c0086b8SZbigniew Bodek * documentation and/or other materials provided with the distribution. 133c0086b8SZbigniew Bodek * 143c0086b8SZbigniew Bodek * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 153c0086b8SZbigniew Bodek * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 163c0086b8SZbigniew Bodek * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 173c0086b8SZbigniew Bodek * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 183c0086b8SZbigniew Bodek * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 193c0086b8SZbigniew Bodek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 203c0086b8SZbigniew Bodek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 213c0086b8SZbigniew Bodek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 223c0086b8SZbigniew Bodek * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 233c0086b8SZbigniew Bodek * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 243c0086b8SZbigniew Bodek * SUCH DAMAGE. 253c0086b8SZbigniew Bodek * 263c0086b8SZbigniew Bodek */ 273c0086b8SZbigniew Bodek 283c0086b8SZbigniew Bodek #ifndef Q_STRUCT_H 293c0086b8SZbigniew Bodek #define Q_STRUCT_H 303c0086b8SZbigniew Bodek 312306b72aSZbigniew Bodek #define __LITTLE_ENDIAN_BITFIELD 322306b72aSZbigniew Bodek 333c0086b8SZbigniew Bodek /* Load transaction types for reading segment bytes specified by 343c0086b8SZbigniew Bodek * NIC_SEND_GATHER_S[LD_TYPE]. 353c0086b8SZbigniew Bodek */ 363c0086b8SZbigniew Bodek enum nic_send_ld_type_e { 373c0086b8SZbigniew Bodek NIC_SEND_LD_TYPE_E_LDD = 0x0, 383c0086b8SZbigniew Bodek NIC_SEND_LD_TYPE_E_LDT = 0x1, 393c0086b8SZbigniew Bodek NIC_SEND_LD_TYPE_E_LDWB = 0x2, 403c0086b8SZbigniew Bodek NIC_SEND_LD_TYPE_E_ENUM_LAST = 0x3, 413c0086b8SZbigniew Bodek }; 423c0086b8SZbigniew Bodek 433c0086b8SZbigniew Bodek enum ether_type_algorithm { 443c0086b8SZbigniew Bodek ETYPE_ALG_NONE = 0x0, 453c0086b8SZbigniew Bodek ETYPE_ALG_SKIP = 0x1, 463c0086b8SZbigniew Bodek ETYPE_ALG_ENDPARSE = 0x2, 473c0086b8SZbigniew Bodek ETYPE_ALG_VLAN = 0x3, 483c0086b8SZbigniew Bodek ETYPE_ALG_VLAN_STRIP = 0x4, 493c0086b8SZbigniew Bodek }; 503c0086b8SZbigniew Bodek 513c0086b8SZbigniew Bodek enum layer3_type { 523c0086b8SZbigniew Bodek L3TYPE_NONE = 0x00, 533c0086b8SZbigniew Bodek L3TYPE_GRH = 0x01, 543c0086b8SZbigniew Bodek L3TYPE_IPV4 = 0x04, 553c0086b8SZbigniew Bodek L3TYPE_IPV4_OPTIONS = 0x05, 563c0086b8SZbigniew Bodek L3TYPE_IPV6 = 0x06, 573c0086b8SZbigniew Bodek L3TYPE_IPV6_OPTIONS = 0x07, 583c0086b8SZbigniew Bodek L3TYPE_ET_STOP = 0x0D, 593c0086b8SZbigniew Bodek L3TYPE_OTHER = 0x0E, 603c0086b8SZbigniew Bodek }; 613c0086b8SZbigniew Bodek 623c0086b8SZbigniew Bodek enum layer4_type { 633c0086b8SZbigniew Bodek L4TYPE_NONE = 0x00, 643c0086b8SZbigniew Bodek L4TYPE_IPSEC_ESP = 0x01, 653c0086b8SZbigniew Bodek L4TYPE_IPFRAG = 0x02, 663c0086b8SZbigniew Bodek L4TYPE_IPCOMP = 0x03, 673c0086b8SZbigniew Bodek L4TYPE_TCP = 0x04, 683c0086b8SZbigniew Bodek L4TYPE_UDP = 0x05, 693c0086b8SZbigniew Bodek L4TYPE_SCTP = 0x06, 703c0086b8SZbigniew Bodek L4TYPE_GRE = 0x07, 713c0086b8SZbigniew Bodek L4TYPE_ROCE_BTH = 0x08, 723c0086b8SZbigniew Bodek L4TYPE_OTHER = 0x0E, 733c0086b8SZbigniew Bodek }; 743c0086b8SZbigniew Bodek 753c0086b8SZbigniew Bodek /* CPI and RSSI configuration */ 763c0086b8SZbigniew Bodek enum cpi_algorithm_type { 773c0086b8SZbigniew Bodek CPI_ALG_NONE = 0x0, 783c0086b8SZbigniew Bodek CPI_ALG_VLAN = 0x1, 793c0086b8SZbigniew Bodek CPI_ALG_VLAN16 = 0x2, 803c0086b8SZbigniew Bodek CPI_ALG_DIFF = 0x3, 813c0086b8SZbigniew Bodek }; 823c0086b8SZbigniew Bodek 833c0086b8SZbigniew Bodek enum rss_algorithm_type { 843c0086b8SZbigniew Bodek RSS_ALG_NONE = 0x00, 853c0086b8SZbigniew Bodek RSS_ALG_PORT = 0x01, 863c0086b8SZbigniew Bodek RSS_ALG_IP = 0x02, 873c0086b8SZbigniew Bodek RSS_ALG_TCP_IP = 0x03, 883c0086b8SZbigniew Bodek RSS_ALG_UDP_IP = 0x04, 893c0086b8SZbigniew Bodek RSS_ALG_SCTP_IP = 0x05, 903c0086b8SZbigniew Bodek RSS_ALG_GRE_IP = 0x06, 913c0086b8SZbigniew Bodek RSS_ALG_ROCE = 0x07, 923c0086b8SZbigniew Bodek }; 933c0086b8SZbigniew Bodek 943c0086b8SZbigniew Bodek enum rss_hash_cfg { 953c0086b8SZbigniew Bodek RSS_HASH_L2ETC = 0x00, 963c0086b8SZbigniew Bodek RSS_HASH_IP = 0x01, 973c0086b8SZbigniew Bodek RSS_HASH_TCP = 0x02, 983c0086b8SZbigniew Bodek RSS_HASH_TCP_SYN_DIS = 0x03, 993c0086b8SZbigniew Bodek RSS_HASH_UDP = 0x04, 1003c0086b8SZbigniew Bodek RSS_HASH_L4ETC = 0x05, 1013c0086b8SZbigniew Bodek RSS_HASH_ROCE = 0x06, 1023c0086b8SZbigniew Bodek RSS_L3_BIDI = 0x07, 1033c0086b8SZbigniew Bodek RSS_L4_BIDI = 0x08, 1043c0086b8SZbigniew Bodek }; 1053c0086b8SZbigniew Bodek 1063c0086b8SZbigniew Bodek /* Completion queue entry types */ 1073c0086b8SZbigniew Bodek enum cqe_type { 1083c0086b8SZbigniew Bodek CQE_TYPE_INVALID = 0x0, 1093c0086b8SZbigniew Bodek CQE_TYPE_RX = 0x2, 1103c0086b8SZbigniew Bodek CQE_TYPE_RX_SPLIT = 0x3, 1113c0086b8SZbigniew Bodek CQE_TYPE_RX_TCP = 0x4, 1123c0086b8SZbigniew Bodek CQE_TYPE_SEND = 0x8, 1133c0086b8SZbigniew Bodek CQE_TYPE_SEND_PTP = 0x9, 1143c0086b8SZbigniew Bodek }; 1153c0086b8SZbigniew Bodek 1163c0086b8SZbigniew Bodek enum cqe_rx_tcp_status { 1173c0086b8SZbigniew Bodek CQE_RX_STATUS_VALID_TCP_CNXT = 0x00, 1183c0086b8SZbigniew Bodek CQE_RX_STATUS_INVALID_TCP_CNXT = 0x0F, 1193c0086b8SZbigniew Bodek }; 1203c0086b8SZbigniew Bodek 1213c0086b8SZbigniew Bodek enum cqe_send_status { 1223c0086b8SZbigniew Bodek CQE_SEND_STATUS_GOOD = 0x00, 1233c0086b8SZbigniew Bodek CQE_SEND_STATUS_DESC_FAULT = 0x01, 1243c0086b8SZbigniew Bodek CQE_SEND_STATUS_HDR_CONS_ERR = 0x11, 1253c0086b8SZbigniew Bodek CQE_SEND_STATUS_SUBDESC_ERR = 0x12, 1263c0086b8SZbigniew Bodek CQE_SEND_STATUS_IMM_SIZE_OFLOW = 0x80, 1273c0086b8SZbigniew Bodek CQE_SEND_STATUS_CRC_SEQ_ERR = 0x81, 1283c0086b8SZbigniew Bodek CQE_SEND_STATUS_DATA_SEQ_ERR = 0x82, 1293c0086b8SZbigniew Bodek CQE_SEND_STATUS_MEM_SEQ_ERR = 0x83, 1303c0086b8SZbigniew Bodek CQE_SEND_STATUS_LOCK_VIOL = 0x84, 1313c0086b8SZbigniew Bodek CQE_SEND_STATUS_LOCK_UFLOW = 0x85, 1323c0086b8SZbigniew Bodek CQE_SEND_STATUS_DATA_FAULT = 0x86, 1333c0086b8SZbigniew Bodek CQE_SEND_STATUS_TSTMP_CONFLICT = 0x87, 1343c0086b8SZbigniew Bodek CQE_SEND_STATUS_TSTMP_TIMEOUT = 0x88, 1353c0086b8SZbigniew Bodek CQE_SEND_STATUS_MEM_FAULT = 0x89, 1363c0086b8SZbigniew Bodek CQE_SEND_STATUS_CSUM_OVERLAP = 0x8A, 1373c0086b8SZbigniew Bodek CQE_SEND_STATUS_CSUM_OVERFLOW = 0x8B, 1383c0086b8SZbigniew Bodek }; 1393c0086b8SZbigniew Bodek 1403c0086b8SZbigniew Bodek enum cqe_rx_tcp_end_reason { 1413c0086b8SZbigniew Bodek CQE_RX_TCP_END_FIN_FLAG_DET = 0, 1423c0086b8SZbigniew Bodek CQE_RX_TCP_END_INVALID_FLAG = 1, 1433c0086b8SZbigniew Bodek CQE_RX_TCP_END_TIMEOUT = 2, 1443c0086b8SZbigniew Bodek CQE_RX_TCP_END_OUT_OF_SEQ = 3, 1453c0086b8SZbigniew Bodek CQE_RX_TCP_END_PKT_ERR = 4, 1463c0086b8SZbigniew Bodek CQE_RX_TCP_END_QS_DISABLED = 0x0F, 1473c0086b8SZbigniew Bodek }; 1483c0086b8SZbigniew Bodek 1493c0086b8SZbigniew Bodek /* Packet protocol level error enumeration */ 1503c0086b8SZbigniew Bodek enum cqe_rx_err_level { 1513c0086b8SZbigniew Bodek CQE_RX_ERRLVL_RE = 0x0, 1523c0086b8SZbigniew Bodek CQE_RX_ERRLVL_L2 = 0x1, 1533c0086b8SZbigniew Bodek CQE_RX_ERRLVL_L3 = 0x2, 1543c0086b8SZbigniew Bodek CQE_RX_ERRLVL_L4 = 0x3, 1553c0086b8SZbigniew Bodek }; 1563c0086b8SZbigniew Bodek 1573c0086b8SZbigniew Bodek /* Packet protocol level error type enumeration */ 1583c0086b8SZbigniew Bodek enum cqe_rx_err_opcode { 1593c0086b8SZbigniew Bodek CQE_RX_ERR_RE_NONE = 0x0, 1603c0086b8SZbigniew Bodek CQE_RX_ERR_RE_PARTIAL = 0x1, 1613c0086b8SZbigniew Bodek CQE_RX_ERR_RE_JABBER = 0x2, 1623c0086b8SZbigniew Bodek CQE_RX_ERR_RE_FCS = 0x7, 1633c0086b8SZbigniew Bodek CQE_RX_ERR_RE_TERMINATE = 0x9, 1643c0086b8SZbigniew Bodek CQE_RX_ERR_RE_RX_CTL = 0xb, 1653c0086b8SZbigniew Bodek CQE_RX_ERR_PREL2_ERR = 0x1f, 1663c0086b8SZbigniew Bodek CQE_RX_ERR_L2_FRAGMENT = 0x20, 1673c0086b8SZbigniew Bodek CQE_RX_ERR_L2_OVERRUN = 0x21, 1683c0086b8SZbigniew Bodek CQE_RX_ERR_L2_PFCS = 0x22, 1693c0086b8SZbigniew Bodek CQE_RX_ERR_L2_PUNY = 0x23, 1703c0086b8SZbigniew Bodek CQE_RX_ERR_L2_MAL = 0x24, 1713c0086b8SZbigniew Bodek CQE_RX_ERR_L2_OVERSIZE = 0x25, 1723c0086b8SZbigniew Bodek CQE_RX_ERR_L2_UNDERSIZE = 0x26, 1733c0086b8SZbigniew Bodek CQE_RX_ERR_L2_LENMISM = 0x27, 1743c0086b8SZbigniew Bodek CQE_RX_ERR_L2_PCLP = 0x28, 1753c0086b8SZbigniew Bodek CQE_RX_ERR_IP_NOT = 0x41, 1763c0086b8SZbigniew Bodek CQE_RX_ERR_IP_CHK = 0x42, 1773c0086b8SZbigniew Bodek CQE_RX_ERR_IP_MAL = 0x43, 1783c0086b8SZbigniew Bodek CQE_RX_ERR_IP_MALD = 0x44, 1793c0086b8SZbigniew Bodek CQE_RX_ERR_IP_HOP = 0x45, 1803c0086b8SZbigniew Bodek CQE_RX_ERR_L3_ICRC = 0x46, 1813c0086b8SZbigniew Bodek CQE_RX_ERR_L3_PCLP = 0x47, 1823c0086b8SZbigniew Bodek CQE_RX_ERR_L4_MAL = 0x61, 1833c0086b8SZbigniew Bodek CQE_RX_ERR_L4_CHK = 0x62, 1843c0086b8SZbigniew Bodek CQE_RX_ERR_UDP_LEN = 0x63, 1853c0086b8SZbigniew Bodek CQE_RX_ERR_L4_PORT = 0x64, 1863c0086b8SZbigniew Bodek CQE_RX_ERR_TCP_FLAG = 0x65, 1873c0086b8SZbigniew Bodek CQE_RX_ERR_TCP_OFFSET = 0x66, 1883c0086b8SZbigniew Bodek CQE_RX_ERR_L4_PCLP = 0x67, 1893c0086b8SZbigniew Bodek CQE_RX_ERR_RBDR_TRUNC = 0x70, 1903c0086b8SZbigniew Bodek }; 1913c0086b8SZbigniew Bodek 1923c0086b8SZbigniew Bodek struct cqe_rx_t { 1933c0086b8SZbigniew Bodek #if defined(__BIG_ENDIAN_BITFIELD) 1942306b72aSZbigniew Bodek uint64_t cqe_type:4; /* W0 */ 1952306b72aSZbigniew Bodek uint64_t stdn_fault:1; 1962306b72aSZbigniew Bodek uint64_t rsvd0:1; 1972306b72aSZbigniew Bodek uint64_t rq_qs:7; 1982306b72aSZbigniew Bodek uint64_t rq_idx:3; 1992306b72aSZbigniew Bodek uint64_t rsvd1:12; 2002306b72aSZbigniew Bodek uint64_t rss_alg:4; 2012306b72aSZbigniew Bodek uint64_t rsvd2:4; 2022306b72aSZbigniew Bodek uint64_t rb_cnt:4; 2032306b72aSZbigniew Bodek uint64_t vlan_found:1; 2042306b72aSZbigniew Bodek uint64_t vlan_stripped:1; 2052306b72aSZbigniew Bodek uint64_t vlan2_found:1; 2062306b72aSZbigniew Bodek uint64_t vlan2_stripped:1; 2072306b72aSZbigniew Bodek uint64_t l4_type:4; 2082306b72aSZbigniew Bodek uint64_t l3_type:4; 2092306b72aSZbigniew Bodek uint64_t l2_present:1; 2102306b72aSZbigniew Bodek uint64_t err_level:3; 2112306b72aSZbigniew Bodek uint64_t err_opcode:8; 2123c0086b8SZbigniew Bodek 2132306b72aSZbigniew Bodek uint64_t pkt_len:16; /* W1 */ 2142306b72aSZbigniew Bodek uint64_t l2_ptr:8; 2152306b72aSZbigniew Bodek uint64_t l3_ptr:8; 2162306b72aSZbigniew Bodek uint64_t l4_ptr:8; 2172306b72aSZbigniew Bodek uint64_t cq_pkt_len:8; 2182306b72aSZbigniew Bodek uint64_t align_pad:3; 2192306b72aSZbigniew Bodek uint64_t rsvd3:1; 2202306b72aSZbigniew Bodek uint64_t chan:12; 2213c0086b8SZbigniew Bodek 2222306b72aSZbigniew Bodek uint64_t rss_tag:32; /* W2 */ 2232306b72aSZbigniew Bodek uint64_t vlan_tci:16; 2242306b72aSZbigniew Bodek uint64_t vlan_ptr:8; 2252306b72aSZbigniew Bodek uint64_t vlan2_ptr:8; 2263c0086b8SZbigniew Bodek 2272306b72aSZbigniew Bodek uint64_t rb3_sz:16; /* W3 */ 2282306b72aSZbigniew Bodek uint64_t rb2_sz:16; 2292306b72aSZbigniew Bodek uint64_t rb1_sz:16; 2302306b72aSZbigniew Bodek uint64_t rb0_sz:16; 2313c0086b8SZbigniew Bodek 2322306b72aSZbigniew Bodek uint64_t rb7_sz:16; /* W4 */ 2332306b72aSZbigniew Bodek uint64_t rb6_sz:16; 2342306b72aSZbigniew Bodek uint64_t rb5_sz:16; 2352306b72aSZbigniew Bodek uint64_t rb4_sz:16; 2363c0086b8SZbigniew Bodek 2372306b72aSZbigniew Bodek uint64_t rb11_sz:16; /* W5 */ 2382306b72aSZbigniew Bodek uint64_t rb10_sz:16; 2392306b72aSZbigniew Bodek uint64_t rb9_sz:16; 2402306b72aSZbigniew Bodek uint64_t rb8_sz:16; 2413c0086b8SZbigniew Bodek #elif defined(__LITTLE_ENDIAN_BITFIELD) 2422306b72aSZbigniew Bodek uint64_t err_opcode:8; 2432306b72aSZbigniew Bodek uint64_t err_level:3; 2442306b72aSZbigniew Bodek uint64_t l2_present:1; 2452306b72aSZbigniew Bodek uint64_t l3_type:4; 2462306b72aSZbigniew Bodek uint64_t l4_type:4; 2472306b72aSZbigniew Bodek uint64_t vlan2_stripped:1; 2482306b72aSZbigniew Bodek uint64_t vlan2_found:1; 2492306b72aSZbigniew Bodek uint64_t vlan_stripped:1; 2502306b72aSZbigniew Bodek uint64_t vlan_found:1; 2512306b72aSZbigniew Bodek uint64_t rb_cnt:4; 2522306b72aSZbigniew Bodek uint64_t rsvd2:4; 2532306b72aSZbigniew Bodek uint64_t rss_alg:4; 2542306b72aSZbigniew Bodek uint64_t rsvd1:12; 2552306b72aSZbigniew Bodek uint64_t rq_idx:3; 2562306b72aSZbigniew Bodek uint64_t rq_qs:7; 2572306b72aSZbigniew Bodek uint64_t rsvd0:1; 2582306b72aSZbigniew Bodek uint64_t stdn_fault:1; 2592306b72aSZbigniew Bodek uint64_t cqe_type:4; /* W0 */ 2602306b72aSZbigniew Bodek uint64_t chan:12; 2612306b72aSZbigniew Bodek uint64_t rsvd3:1; 2622306b72aSZbigniew Bodek uint64_t align_pad:3; 2632306b72aSZbigniew Bodek uint64_t cq_pkt_len:8; 2642306b72aSZbigniew Bodek uint64_t l4_ptr:8; 2652306b72aSZbigniew Bodek uint64_t l3_ptr:8; 2662306b72aSZbigniew Bodek uint64_t l2_ptr:8; 2672306b72aSZbigniew Bodek uint64_t pkt_len:16; /* W1 */ 2682306b72aSZbigniew Bodek uint64_t vlan2_ptr:8; 2692306b72aSZbigniew Bodek uint64_t vlan_ptr:8; 2702306b72aSZbigniew Bodek uint64_t vlan_tci:16; 2712306b72aSZbigniew Bodek uint64_t rss_tag:32; /* W2 */ 2722306b72aSZbigniew Bodek uint64_t rb0_sz:16; 2732306b72aSZbigniew Bodek uint64_t rb1_sz:16; 2742306b72aSZbigniew Bodek uint64_t rb2_sz:16; 2752306b72aSZbigniew Bodek uint64_t rb3_sz:16; /* W3 */ 2762306b72aSZbigniew Bodek uint64_t rb4_sz:16; 2772306b72aSZbigniew Bodek uint64_t rb5_sz:16; 2782306b72aSZbigniew Bodek uint64_t rb6_sz:16; 2792306b72aSZbigniew Bodek uint64_t rb7_sz:16; /* W4 */ 2802306b72aSZbigniew Bodek uint64_t rb8_sz:16; 2812306b72aSZbigniew Bodek uint64_t rb9_sz:16; 2822306b72aSZbigniew Bodek uint64_t rb10_sz:16; 2832306b72aSZbigniew Bodek uint64_t rb11_sz:16; /* W5 */ 2843c0086b8SZbigniew Bodek #endif 2852306b72aSZbigniew Bodek uint64_t rb0_ptr:64; 2862306b72aSZbigniew Bodek uint64_t rb1_ptr:64; 2872306b72aSZbigniew Bodek uint64_t rb2_ptr:64; 2882306b72aSZbigniew Bodek uint64_t rb3_ptr:64; 2892306b72aSZbigniew Bodek uint64_t rb4_ptr:64; 2902306b72aSZbigniew Bodek uint64_t rb5_ptr:64; 2912306b72aSZbigniew Bodek uint64_t rb6_ptr:64; 2922306b72aSZbigniew Bodek uint64_t rb7_ptr:64; 2932306b72aSZbigniew Bodek uint64_t rb8_ptr:64; 2942306b72aSZbigniew Bodek uint64_t rb9_ptr:64; 2952306b72aSZbigniew Bodek uint64_t rb10_ptr:64; 2962306b72aSZbigniew Bodek uint64_t rb11_ptr:64; 2973c0086b8SZbigniew Bodek }; 2983c0086b8SZbigniew Bodek 2993c0086b8SZbigniew Bodek struct cqe_rx_tcp_err_t { 3003c0086b8SZbigniew Bodek #if defined(__BIG_ENDIAN_BITFIELD) 3012306b72aSZbigniew Bodek uint64_t cqe_type:4; /* W0 */ 3022306b72aSZbigniew Bodek uint64_t rsvd0:60; 3033c0086b8SZbigniew Bodek 3042306b72aSZbigniew Bodek uint64_t rsvd1:4; /* W1 */ 3052306b72aSZbigniew Bodek uint64_t partial_first:1; 3062306b72aSZbigniew Bodek uint64_t rsvd2:27; 3072306b72aSZbigniew Bodek uint64_t rbdr_bytes:8; 3082306b72aSZbigniew Bodek uint64_t rsvd3:24; 3093c0086b8SZbigniew Bodek #elif defined(__LITTLE_ENDIAN_BITFIELD) 3102306b72aSZbigniew Bodek uint64_t rsvd0:60; 3112306b72aSZbigniew Bodek uint64_t cqe_type:4; 3123c0086b8SZbigniew Bodek 3132306b72aSZbigniew Bodek uint64_t rsvd3:24; 3142306b72aSZbigniew Bodek uint64_t rbdr_bytes:8; 3152306b72aSZbigniew Bodek uint64_t rsvd2:27; 3162306b72aSZbigniew Bodek uint64_t partial_first:1; 3172306b72aSZbigniew Bodek uint64_t rsvd1:4; 3183c0086b8SZbigniew Bodek #endif 3193c0086b8SZbigniew Bodek }; 3203c0086b8SZbigniew Bodek 3213c0086b8SZbigniew Bodek struct cqe_rx_tcp_t { 3223c0086b8SZbigniew Bodek #if defined(__BIG_ENDIAN_BITFIELD) 3232306b72aSZbigniew Bodek uint64_t cqe_type:4; /* W0 */ 3242306b72aSZbigniew Bodek uint64_t rsvd0:52; 3252306b72aSZbigniew Bodek uint64_t cq_tcp_status:8; 3263c0086b8SZbigniew Bodek 3272306b72aSZbigniew Bodek uint64_t rsvd1:32; /* W1 */ 3282306b72aSZbigniew Bodek uint64_t tcp_cntx_bytes:8; 3292306b72aSZbigniew Bodek uint64_t rsvd2:8; 3302306b72aSZbigniew Bodek uint64_t tcp_err_bytes:16; 3313c0086b8SZbigniew Bodek #elif defined(__LITTLE_ENDIAN_BITFIELD) 3322306b72aSZbigniew Bodek uint64_t cq_tcp_status:8; 3332306b72aSZbigniew Bodek uint64_t rsvd0:52; 3342306b72aSZbigniew Bodek uint64_t cqe_type:4; /* W0 */ 3353c0086b8SZbigniew Bodek 3362306b72aSZbigniew Bodek uint64_t tcp_err_bytes:16; 3372306b72aSZbigniew Bodek uint64_t rsvd2:8; 3382306b72aSZbigniew Bodek uint64_t tcp_cntx_bytes:8; 3392306b72aSZbigniew Bodek uint64_t rsvd1:32; /* W1 */ 3403c0086b8SZbigniew Bodek #endif 3413c0086b8SZbigniew Bodek }; 3423c0086b8SZbigniew Bodek 3433c0086b8SZbigniew Bodek struct cqe_send_t { 3443c0086b8SZbigniew Bodek #if defined(__BIG_ENDIAN_BITFIELD) 3452306b72aSZbigniew Bodek uint64_t cqe_type:4; /* W0 */ 3462306b72aSZbigniew Bodek uint64_t rsvd0:4; 3472306b72aSZbigniew Bodek uint64_t sqe_ptr:16; 3482306b72aSZbigniew Bodek uint64_t rsvd1:4; 3492306b72aSZbigniew Bodek uint64_t rsvd2:10; 3502306b72aSZbigniew Bodek uint64_t sq_qs:7; 3512306b72aSZbigniew Bodek uint64_t sq_idx:3; 3522306b72aSZbigniew Bodek uint64_t rsvd3:8; 3532306b72aSZbigniew Bodek uint64_t send_status:8; 3543c0086b8SZbigniew Bodek 3552306b72aSZbigniew Bodek uint64_t ptp_timestamp:64; /* W1 */ 3563c0086b8SZbigniew Bodek #elif defined(__LITTLE_ENDIAN_BITFIELD) 3572306b72aSZbigniew Bodek uint64_t send_status:8; 3582306b72aSZbigniew Bodek uint64_t rsvd3:8; 3592306b72aSZbigniew Bodek uint64_t sq_idx:3; 3602306b72aSZbigniew Bodek uint64_t sq_qs:7; 3612306b72aSZbigniew Bodek uint64_t rsvd2:10; 3622306b72aSZbigniew Bodek uint64_t rsvd1:4; 3632306b72aSZbigniew Bodek uint64_t sqe_ptr:16; 3642306b72aSZbigniew Bodek uint64_t rsvd0:4; 3652306b72aSZbigniew Bodek uint64_t cqe_type:4; /* W0 */ 3663c0086b8SZbigniew Bodek 3672306b72aSZbigniew Bodek uint64_t ptp_timestamp:64; /* W1 */ 3683c0086b8SZbigniew Bodek #endif 3693c0086b8SZbigniew Bodek }; 3703c0086b8SZbigniew Bodek 3713c0086b8SZbigniew Bodek union cq_desc_t { 3722306b72aSZbigniew Bodek uint64_t u[64]; 3733c0086b8SZbigniew Bodek struct cqe_send_t snd_hdr; 3743c0086b8SZbigniew Bodek struct cqe_rx_t rx_hdr; 3753c0086b8SZbigniew Bodek struct cqe_rx_tcp_t rx_tcp_hdr; 3763c0086b8SZbigniew Bodek struct cqe_rx_tcp_err_t rx_tcp_err_hdr; 3773c0086b8SZbigniew Bodek }; 3783c0086b8SZbigniew Bodek 3793c0086b8SZbigniew Bodek struct rbdr_entry_t { 3803c0086b8SZbigniew Bodek #if defined(__BIG_ENDIAN_BITFIELD) 3812306b72aSZbigniew Bodek uint64_t rsvd0:15; 3822306b72aSZbigniew Bodek uint64_t buf_addr:42; 3832306b72aSZbigniew Bodek uint64_t cache_align:7; 3843c0086b8SZbigniew Bodek #elif defined(__LITTLE_ENDIAN_BITFIELD) 3852306b72aSZbigniew Bodek uint64_t cache_align:7; 3862306b72aSZbigniew Bodek uint64_t buf_addr:42; 3872306b72aSZbigniew Bodek uint64_t rsvd0:15; 3883c0086b8SZbigniew Bodek #endif 3893c0086b8SZbigniew Bodek }; 3903c0086b8SZbigniew Bodek 3913c0086b8SZbigniew Bodek /* TCP reassembly context */ 3923c0086b8SZbigniew Bodek struct rbe_tcp_cnxt_t { 3933c0086b8SZbigniew Bodek #if defined(__BIG_ENDIAN_BITFIELD) 3942306b72aSZbigniew Bodek uint64_t tcp_pkt_cnt:12; 3952306b72aSZbigniew Bodek uint64_t rsvd1:4; 3962306b72aSZbigniew Bodek uint64_t align_hdr_bytes:4; 3972306b72aSZbigniew Bodek uint64_t align_ptr_bytes:4; 3982306b72aSZbigniew Bodek uint64_t ptr_bytes:16; 3992306b72aSZbigniew Bodek uint64_t rsvd2:24; 4002306b72aSZbigniew Bodek uint64_t cqe_type:4; 4012306b72aSZbigniew Bodek uint64_t rsvd0:54; 4022306b72aSZbigniew Bodek uint64_t tcp_end_reason:2; 4032306b72aSZbigniew Bodek uint64_t tcp_status:4; 4043c0086b8SZbigniew Bodek #elif defined(__LITTLE_ENDIAN_BITFIELD) 4052306b72aSZbigniew Bodek uint64_t tcp_status:4; 4062306b72aSZbigniew Bodek uint64_t tcp_end_reason:2; 4072306b72aSZbigniew Bodek uint64_t rsvd0:54; 4082306b72aSZbigniew Bodek uint64_t cqe_type:4; 4092306b72aSZbigniew Bodek uint64_t rsvd2:24; 4102306b72aSZbigniew Bodek uint64_t ptr_bytes:16; 4112306b72aSZbigniew Bodek uint64_t align_ptr_bytes:4; 4122306b72aSZbigniew Bodek uint64_t align_hdr_bytes:4; 4132306b72aSZbigniew Bodek uint64_t rsvd1:4; 4142306b72aSZbigniew Bodek uint64_t tcp_pkt_cnt:12; 4153c0086b8SZbigniew Bodek #endif 4163c0086b8SZbigniew Bodek }; 4173c0086b8SZbigniew Bodek 4183c0086b8SZbigniew Bodek /* Always Big endian */ 4193c0086b8SZbigniew Bodek struct rx_hdr_t { 4202306b72aSZbigniew Bodek uint64_t opaque:32; 4212306b72aSZbigniew Bodek uint64_t rss_flow:8; 4222306b72aSZbigniew Bodek uint64_t skip_length:6; 4232306b72aSZbigniew Bodek uint64_t disable_rss:1; 4242306b72aSZbigniew Bodek uint64_t disable_tcp_reassembly:1; 4252306b72aSZbigniew Bodek uint64_t nodrop:1; 4262306b72aSZbigniew Bodek uint64_t dest_alg:2; 4272306b72aSZbigniew Bodek uint64_t rsvd0:2; 4282306b72aSZbigniew Bodek uint64_t dest_rq:11; 4293c0086b8SZbigniew Bodek }; 4303c0086b8SZbigniew Bodek 4313c0086b8SZbigniew Bodek enum send_l4_csum_type { 4323c0086b8SZbigniew Bodek SEND_L4_CSUM_DISABLE = 0x00, 4333c0086b8SZbigniew Bodek SEND_L4_CSUM_UDP = 0x01, 4343c0086b8SZbigniew Bodek SEND_L4_CSUM_TCP = 0x02, 4353c0086b8SZbigniew Bodek SEND_L4_CSUM_SCTP = 0x03, 4363c0086b8SZbigniew Bodek }; 4373c0086b8SZbigniew Bodek 4383c0086b8SZbigniew Bodek enum send_crc_alg { 4393c0086b8SZbigniew Bodek SEND_CRCALG_CRC32 = 0x00, 4403c0086b8SZbigniew Bodek SEND_CRCALG_CRC32C = 0x01, 4413c0086b8SZbigniew Bodek SEND_CRCALG_ICRC = 0x02, 4423c0086b8SZbigniew Bodek }; 4433c0086b8SZbigniew Bodek 4443c0086b8SZbigniew Bodek enum send_load_type { 4453c0086b8SZbigniew Bodek SEND_LD_TYPE_LDD = 0x00, 4463c0086b8SZbigniew Bodek SEND_LD_TYPE_LDT = 0x01, 4473c0086b8SZbigniew Bodek SEND_LD_TYPE_LDWB = 0x02, 4483c0086b8SZbigniew Bodek }; 4493c0086b8SZbigniew Bodek 4503c0086b8SZbigniew Bodek enum send_mem_alg_type { 4513c0086b8SZbigniew Bodek SEND_MEMALG_SET = 0x00, 4523c0086b8SZbigniew Bodek SEND_MEMALG_ADD = 0x08, 4533c0086b8SZbigniew Bodek SEND_MEMALG_SUB = 0x09, 4543c0086b8SZbigniew Bodek SEND_MEMALG_ADDLEN = 0x0A, 4553c0086b8SZbigniew Bodek SEND_MEMALG_SUBLEN = 0x0B, 4563c0086b8SZbigniew Bodek }; 4573c0086b8SZbigniew Bodek 4583c0086b8SZbigniew Bodek enum send_mem_dsz_type { 4593c0086b8SZbigniew Bodek SEND_MEMDSZ_B64 = 0x00, 4603c0086b8SZbigniew Bodek SEND_MEMDSZ_B32 = 0x01, 4613c0086b8SZbigniew Bodek SEND_MEMDSZ_B8 = 0x03, 4623c0086b8SZbigniew Bodek }; 4633c0086b8SZbigniew Bodek 4643c0086b8SZbigniew Bodek enum sq_subdesc_type { 4653c0086b8SZbigniew Bodek SQ_DESC_TYPE_INVALID = 0x00, 4663c0086b8SZbigniew Bodek SQ_DESC_TYPE_HEADER = 0x01, 4673c0086b8SZbigniew Bodek SQ_DESC_TYPE_CRC = 0x02, 4683c0086b8SZbigniew Bodek SQ_DESC_TYPE_IMMEDIATE = 0x03, 4693c0086b8SZbigniew Bodek SQ_DESC_TYPE_GATHER = 0x04, 4703c0086b8SZbigniew Bodek SQ_DESC_TYPE_MEMORY = 0x05, 4713c0086b8SZbigniew Bodek }; 4723c0086b8SZbigniew Bodek 4733c0086b8SZbigniew Bodek struct sq_crc_subdesc { 4743c0086b8SZbigniew Bodek #if defined(__BIG_ENDIAN_BITFIELD) 4752306b72aSZbigniew Bodek uint64_t rsvd1:32; 4762306b72aSZbigniew Bodek uint64_t crc_ival:32; 4772306b72aSZbigniew Bodek uint64_t subdesc_type:4; 4782306b72aSZbigniew Bodek uint64_t crc_alg:2; 4792306b72aSZbigniew Bodek uint64_t rsvd0:10; 4802306b72aSZbigniew Bodek uint64_t crc_insert_pos:16; 4812306b72aSZbigniew Bodek uint64_t hdr_start:16; 4822306b72aSZbigniew Bodek uint64_t crc_len:16; 4833c0086b8SZbigniew Bodek #elif defined(__LITTLE_ENDIAN_BITFIELD) 4842306b72aSZbigniew Bodek uint64_t crc_len:16; 4852306b72aSZbigniew Bodek uint64_t hdr_start:16; 4862306b72aSZbigniew Bodek uint64_t crc_insert_pos:16; 4872306b72aSZbigniew Bodek uint64_t rsvd0:10; 4882306b72aSZbigniew Bodek uint64_t crc_alg:2; 4892306b72aSZbigniew Bodek uint64_t subdesc_type:4; 4902306b72aSZbigniew Bodek uint64_t crc_ival:32; 4912306b72aSZbigniew Bodek uint64_t rsvd1:32; 4923c0086b8SZbigniew Bodek #endif 4933c0086b8SZbigniew Bodek }; 4943c0086b8SZbigniew Bodek 4953c0086b8SZbigniew Bodek struct sq_gather_subdesc { 4963c0086b8SZbigniew Bodek #if defined(__BIG_ENDIAN_BITFIELD) 4972306b72aSZbigniew Bodek uint64_t subdesc_type:4; /* W0 */ 4982306b72aSZbigniew Bodek uint64_t ld_type:2; 4992306b72aSZbigniew Bodek uint64_t rsvd0:42; 5002306b72aSZbigniew Bodek uint64_t size:16; 5013c0086b8SZbigniew Bodek 5022306b72aSZbigniew Bodek uint64_t rsvd1:15; /* W1 */ 5032306b72aSZbigniew Bodek uint64_t addr:49; 5043c0086b8SZbigniew Bodek #elif defined(__LITTLE_ENDIAN_BITFIELD) 5052306b72aSZbigniew Bodek uint64_t size:16; 5062306b72aSZbigniew Bodek uint64_t rsvd0:42; 5072306b72aSZbigniew Bodek uint64_t ld_type:2; 5082306b72aSZbigniew Bodek uint64_t subdesc_type:4; /* W0 */ 5093c0086b8SZbigniew Bodek 5102306b72aSZbigniew Bodek uint64_t addr:49; 5112306b72aSZbigniew Bodek uint64_t rsvd1:15; /* W1 */ 5123c0086b8SZbigniew Bodek #endif 5133c0086b8SZbigniew Bodek }; 5143c0086b8SZbigniew Bodek 5153c0086b8SZbigniew Bodek /* SQ immediate subdescriptor */ 5163c0086b8SZbigniew Bodek struct sq_imm_subdesc { 5173c0086b8SZbigniew Bodek #if defined(__BIG_ENDIAN_BITFIELD) 5182306b72aSZbigniew Bodek uint64_t subdesc_type:4; /* W0 */ 5192306b72aSZbigniew Bodek uint64_t rsvd0:46; 5202306b72aSZbigniew Bodek uint64_t len:14; 5213c0086b8SZbigniew Bodek 5222306b72aSZbigniew Bodek uint64_t data:64; /* W1 */ 5233c0086b8SZbigniew Bodek #elif defined(__LITTLE_ENDIAN_BITFIELD) 5242306b72aSZbigniew Bodek uint64_t len:14; 5252306b72aSZbigniew Bodek uint64_t rsvd0:46; 5262306b72aSZbigniew Bodek uint64_t subdesc_type:4; /* W0 */ 5273c0086b8SZbigniew Bodek 5282306b72aSZbigniew Bodek uint64_t data:64; /* W1 */ 5293c0086b8SZbigniew Bodek #endif 5303c0086b8SZbigniew Bodek }; 5313c0086b8SZbigniew Bodek 5323c0086b8SZbigniew Bodek struct sq_mem_subdesc { 5333c0086b8SZbigniew Bodek #if defined(__BIG_ENDIAN_BITFIELD) 5342306b72aSZbigniew Bodek uint64_t subdesc_type:4; /* W0 */ 5352306b72aSZbigniew Bodek uint64_t mem_alg:4; 5362306b72aSZbigniew Bodek uint64_t mem_dsz:2; 5372306b72aSZbigniew Bodek uint64_t wmem:1; 5382306b72aSZbigniew Bodek uint64_t rsvd0:21; 5392306b72aSZbigniew Bodek uint64_t offset:32; 5403c0086b8SZbigniew Bodek 5412306b72aSZbigniew Bodek uint64_t rsvd1:15; /* W1 */ 5422306b72aSZbigniew Bodek uint64_t addr:49; 5433c0086b8SZbigniew Bodek #elif defined(__LITTLE_ENDIAN_BITFIELD) 5442306b72aSZbigniew Bodek uint64_t offset:32; 5452306b72aSZbigniew Bodek uint64_t rsvd0:21; 5462306b72aSZbigniew Bodek uint64_t wmem:1; 5472306b72aSZbigniew Bodek uint64_t mem_dsz:2; 5482306b72aSZbigniew Bodek uint64_t mem_alg:4; 5492306b72aSZbigniew Bodek uint64_t subdesc_type:4; /* W0 */ 5503c0086b8SZbigniew Bodek 5512306b72aSZbigniew Bodek uint64_t addr:49; 5522306b72aSZbigniew Bodek uint64_t rsvd1:15; /* W1 */ 5533c0086b8SZbigniew Bodek #endif 5543c0086b8SZbigniew Bodek }; 5553c0086b8SZbigniew Bodek 5563c0086b8SZbigniew Bodek struct sq_hdr_subdesc { 5573c0086b8SZbigniew Bodek #if defined(__BIG_ENDIAN_BITFIELD) 5582306b72aSZbigniew Bodek uint64_t subdesc_type:4; 5592306b72aSZbigniew Bodek uint64_t tso:1; 5602306b72aSZbigniew Bodek uint64_t post_cqe:1; /* Post CQE on no error also */ 5612306b72aSZbigniew Bodek uint64_t dont_send:1; 5622306b72aSZbigniew Bodek uint64_t tstmp:1; 5632306b72aSZbigniew Bodek uint64_t subdesc_cnt:8; 5642306b72aSZbigniew Bodek uint64_t csum_l4:2; 5652306b72aSZbigniew Bodek uint64_t csum_l3:1; 566*af8fe8f1SZbigniew Bodek uint64_t csum_inner_l4:2; 567*af8fe8f1SZbigniew Bodek uint64_t csum_inner_l3:1; 568*af8fe8f1SZbigniew Bodek uint64_t rsvd0:2; 5692306b72aSZbigniew Bodek uint64_t l4_offset:8; 5702306b72aSZbigniew Bodek uint64_t l3_offset:8; 5712306b72aSZbigniew Bodek uint64_t rsvd1:4; 5722306b72aSZbigniew Bodek uint64_t tot_len:20; /* W0 */ 5733c0086b8SZbigniew Bodek 574*af8fe8f1SZbigniew Bodek uint64_t rsvd2:24; 575*af8fe8f1SZbigniew Bodek uint64_t inner_l4_offset:8; 576*af8fe8f1SZbigniew Bodek uint64_t inner_l3_offset:8; 577*af8fe8f1SZbigniew Bodek uint64_t tso_start:8; 578*af8fe8f1SZbigniew Bodek uint64_t rsvd3:2; 5792306b72aSZbigniew Bodek uint64_t tso_max_paysize:14; /* W1 */ 5803c0086b8SZbigniew Bodek #elif defined(__LITTLE_ENDIAN_BITFIELD) 5812306b72aSZbigniew Bodek uint64_t tot_len:20; 5822306b72aSZbigniew Bodek uint64_t rsvd1:4; 5832306b72aSZbigniew Bodek uint64_t l3_offset:8; 5842306b72aSZbigniew Bodek uint64_t l4_offset:8; 585*af8fe8f1SZbigniew Bodek uint64_t rsvd0:2; 586*af8fe8f1SZbigniew Bodek uint64_t csum_inner_l3:1; 587*af8fe8f1SZbigniew Bodek uint64_t csum_inner_l4:2; 5882306b72aSZbigniew Bodek uint64_t csum_l3:1; 5892306b72aSZbigniew Bodek uint64_t csum_l4:2; 5902306b72aSZbigniew Bodek uint64_t subdesc_cnt:8; 5912306b72aSZbigniew Bodek uint64_t tstmp:1; 5922306b72aSZbigniew Bodek uint64_t dont_send:1; 5932306b72aSZbigniew Bodek uint64_t post_cqe:1; /* Post CQE on no error also */ 5942306b72aSZbigniew Bodek uint64_t tso:1; 5952306b72aSZbigniew Bodek uint64_t subdesc_type:4; /* W0 */ 5963c0086b8SZbigniew Bodek 5972306b72aSZbigniew Bodek uint64_t tso_max_paysize:14; 598*af8fe8f1SZbigniew Bodek uint64_t rsvd3:2; 599*af8fe8f1SZbigniew Bodek uint64_t tso_start:8; 600*af8fe8f1SZbigniew Bodek uint64_t inner_l3_offset:8; 601*af8fe8f1SZbigniew Bodek uint64_t inner_l4_offset:8; 602*af8fe8f1SZbigniew Bodek uint64_t rsvd2:24; 6033c0086b8SZbigniew Bodek #endif 6043c0086b8SZbigniew Bodek }; 6053c0086b8SZbigniew Bodek 6063c0086b8SZbigniew Bodek /* Queue config register formats */ 6073c0086b8SZbigniew Bodek struct rq_cfg { 6083c0086b8SZbigniew Bodek #if defined(__BIG_ENDIAN_BITFIELD) 6092306b72aSZbigniew Bodek uint64_t reserved_2_63:62; 6102306b72aSZbigniew Bodek uint64_t ena:1; 6112306b72aSZbigniew Bodek uint64_t tcp_ena:1; 6123c0086b8SZbigniew Bodek #elif defined(__LITTLE_ENDIAN_BITFIELD) 6132306b72aSZbigniew Bodek uint64_t tcp_ena:1; 6142306b72aSZbigniew Bodek uint64_t ena:1; 6152306b72aSZbigniew Bodek uint64_t reserved_2_63:62; 6163c0086b8SZbigniew Bodek #endif 6173c0086b8SZbigniew Bodek }; 6183c0086b8SZbigniew Bodek 6193c0086b8SZbigniew Bodek struct cq_cfg { 6203c0086b8SZbigniew Bodek #if defined(__BIG_ENDIAN_BITFIELD) 6212306b72aSZbigniew Bodek uint64_t reserved_43_63:21; 6222306b72aSZbigniew Bodek uint64_t ena:1; 6232306b72aSZbigniew Bodek uint64_t reset:1; 6242306b72aSZbigniew Bodek uint64_t caching:1; 6252306b72aSZbigniew Bodek uint64_t reserved_35_39:5; 6262306b72aSZbigniew Bodek uint64_t qsize:3; 6272306b72aSZbigniew Bodek uint64_t reserved_25_31:7; 6282306b72aSZbigniew Bodek uint64_t avg_con:9; 6292306b72aSZbigniew Bodek uint64_t reserved_0_15:16; 6303c0086b8SZbigniew Bodek #elif defined(__LITTLE_ENDIAN_BITFIELD) 6312306b72aSZbigniew Bodek uint64_t reserved_0_15:16; 6322306b72aSZbigniew Bodek uint64_t avg_con:9; 6332306b72aSZbigniew Bodek uint64_t reserved_25_31:7; 6342306b72aSZbigniew Bodek uint64_t qsize:3; 6352306b72aSZbigniew Bodek uint64_t reserved_35_39:5; 6362306b72aSZbigniew Bodek uint64_t caching:1; 6372306b72aSZbigniew Bodek uint64_t reset:1; 6382306b72aSZbigniew Bodek uint64_t ena:1; 6392306b72aSZbigniew Bodek uint64_t reserved_43_63:21; 6403c0086b8SZbigniew Bodek #endif 6413c0086b8SZbigniew Bodek }; 6423c0086b8SZbigniew Bodek 6433c0086b8SZbigniew Bodek struct sq_cfg { 6443c0086b8SZbigniew Bodek #if defined(__BIG_ENDIAN_BITFIELD) 6452306b72aSZbigniew Bodek uint64_t reserved_20_63:44; 6462306b72aSZbigniew Bodek uint64_t ena:1; 6472306b72aSZbigniew Bodek uint64_t reserved_18_18:1; 6482306b72aSZbigniew Bodek uint64_t reset:1; 6492306b72aSZbigniew Bodek uint64_t ldwb:1; 6502306b72aSZbigniew Bodek uint64_t reserved_11_15:5; 6512306b72aSZbigniew Bodek uint64_t qsize:3; 6522306b72aSZbigniew Bodek uint64_t reserved_3_7:5; 6532306b72aSZbigniew Bodek uint64_t tstmp_bgx_intf:3; 6543c0086b8SZbigniew Bodek #elif defined(__LITTLE_ENDIAN_BITFIELD) 6552306b72aSZbigniew Bodek uint64_t tstmp_bgx_intf:3; 6562306b72aSZbigniew Bodek uint64_t reserved_3_7:5; 6572306b72aSZbigniew Bodek uint64_t qsize:3; 6582306b72aSZbigniew Bodek uint64_t reserved_11_15:5; 6592306b72aSZbigniew Bodek uint64_t ldwb:1; 6602306b72aSZbigniew Bodek uint64_t reset:1; 6612306b72aSZbigniew Bodek uint64_t reserved_18_18:1; 6622306b72aSZbigniew Bodek uint64_t ena:1; 6632306b72aSZbigniew Bodek uint64_t reserved_20_63:44; 6643c0086b8SZbigniew Bodek #endif 6653c0086b8SZbigniew Bodek }; 6663c0086b8SZbigniew Bodek 6673c0086b8SZbigniew Bodek struct rbdr_cfg { 6683c0086b8SZbigniew Bodek #if defined(__BIG_ENDIAN_BITFIELD) 6692306b72aSZbigniew Bodek uint64_t reserved_45_63:19; 6702306b72aSZbigniew Bodek uint64_t ena:1; 6712306b72aSZbigniew Bodek uint64_t reset:1; 6722306b72aSZbigniew Bodek uint64_t ldwb:1; 6732306b72aSZbigniew Bodek uint64_t reserved_36_41:6; 6742306b72aSZbigniew Bodek uint64_t qsize:4; 6752306b72aSZbigniew Bodek uint64_t reserved_25_31:7; 6762306b72aSZbigniew Bodek uint64_t avg_con:9; 6772306b72aSZbigniew Bodek uint64_t reserved_12_15:4; 6782306b72aSZbigniew Bodek uint64_t lines:12; 6793c0086b8SZbigniew Bodek #elif defined(__LITTLE_ENDIAN_BITFIELD) 6802306b72aSZbigniew Bodek uint64_t lines:12; 6812306b72aSZbigniew Bodek uint64_t reserved_12_15:4; 6822306b72aSZbigniew Bodek uint64_t avg_con:9; 6832306b72aSZbigniew Bodek uint64_t reserved_25_31:7; 6842306b72aSZbigniew Bodek uint64_t qsize:4; 6852306b72aSZbigniew Bodek uint64_t reserved_36_41:6; 6862306b72aSZbigniew Bodek uint64_t ldwb:1; 6872306b72aSZbigniew Bodek uint64_t reset:1; 6882306b72aSZbigniew Bodek uint64_t ena: 1; 6892306b72aSZbigniew Bodek uint64_t reserved_45_63:19; 6903c0086b8SZbigniew Bodek #endif 6913c0086b8SZbigniew Bodek }; 6923c0086b8SZbigniew Bodek 6933c0086b8SZbigniew Bodek struct qs_cfg { 6943c0086b8SZbigniew Bodek #if defined(__BIG_ENDIAN_BITFIELD) 6952306b72aSZbigniew Bodek uint64_t reserved_32_63:32; 6962306b72aSZbigniew Bodek uint64_t ena:1; 6972306b72aSZbigniew Bodek uint64_t reserved_27_30:4; 6982306b72aSZbigniew Bodek uint64_t sq_ins_ena:1; 6992306b72aSZbigniew Bodek uint64_t sq_ins_pos:6; 7002306b72aSZbigniew Bodek uint64_t lock_ena:1; 7012306b72aSZbigniew Bodek uint64_t lock_viol_cqe_ena:1; 7022306b72aSZbigniew Bodek uint64_t send_tstmp_ena:1; 7032306b72aSZbigniew Bodek uint64_t be:1; 7042306b72aSZbigniew Bodek uint64_t reserved_7_15:9; 7052306b72aSZbigniew Bodek uint64_t vnic:7; 7063c0086b8SZbigniew Bodek #elif defined(__LITTLE_ENDIAN_BITFIELD) 7072306b72aSZbigniew Bodek uint64_t vnic:7; 7082306b72aSZbigniew Bodek uint64_t reserved_7_15:9; 7092306b72aSZbigniew Bodek uint64_t be:1; 7102306b72aSZbigniew Bodek uint64_t send_tstmp_ena:1; 7112306b72aSZbigniew Bodek uint64_t lock_viol_cqe_ena:1; 7122306b72aSZbigniew Bodek uint64_t lock_ena:1; 7132306b72aSZbigniew Bodek uint64_t sq_ins_pos:6; 7142306b72aSZbigniew Bodek uint64_t sq_ins_ena:1; 7152306b72aSZbigniew Bodek uint64_t reserved_27_30:4; 7162306b72aSZbigniew Bodek uint64_t ena:1; 7172306b72aSZbigniew Bodek uint64_t reserved_32_63:32; 7183c0086b8SZbigniew Bodek #endif 7193c0086b8SZbigniew Bodek }; 7203c0086b8SZbigniew Bodek 7213c0086b8SZbigniew Bodek #endif /* Q_STRUCT_H */ 722