1*9207f9d2SChandrakanth patil /* 2*9207f9d2SChandrakanth patil * Copyright (c) 2024, Broadcom. All rights reserved. The term 3*9207f9d2SChandrakanth patil * Broadcom refers to Broadcom Limited and/or its subsidiaries. 4*9207f9d2SChandrakanth patil * 5*9207f9d2SChandrakanth patil * Redistribution and use in source and binary forms, with or without 6*9207f9d2SChandrakanth patil * modification, are permitted provided that the following conditions 7*9207f9d2SChandrakanth patil * are met: 8*9207f9d2SChandrakanth patil * 9*9207f9d2SChandrakanth patil * 1. Redistributions of source code must retain the above copyright 10*9207f9d2SChandrakanth patil * notice, this list of conditions and the following disclaimer. 11*9207f9d2SChandrakanth patil * 2. Redistributions in binary form must reproduce the above copyright 12*9207f9d2SChandrakanth patil * notice, this list of conditions and the following disclaimer in 13*9207f9d2SChandrakanth patil * the documentation and/or other materials provided with the 14*9207f9d2SChandrakanth patil * distribution. 15*9207f9d2SChandrakanth patil * 16*9207f9d2SChandrakanth patil * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' 17*9207f9d2SChandrakanth patil * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 18*9207f9d2SChandrakanth patil * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19*9207f9d2SChandrakanth patil * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS 20*9207f9d2SChandrakanth patil * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21*9207f9d2SChandrakanth patil * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22*9207f9d2SChandrakanth patil * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23*9207f9d2SChandrakanth patil * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24*9207f9d2SChandrakanth patil * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25*9207f9d2SChandrakanth patil * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26*9207f9d2SChandrakanth patil * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27*9207f9d2SChandrakanth patil */ 28*9207f9d2SChandrakanth patil 29*9207f9d2SChandrakanth patil #ifndef __BNXT_RE_ABI_H__ 30*9207f9d2SChandrakanth patil #define __BNXT_RE_ABI_H__ 31*9207f9d2SChandrakanth patil 32*9207f9d2SChandrakanth patil #include <sys/types.h> 33*9207f9d2SChandrakanth patil #include <sys/mman.h> 34*9207f9d2SChandrakanth patil #include <sys/stat.h> 35*9207f9d2SChandrakanth patil 36*9207f9d2SChandrakanth patil #include <infiniband/kern-abi.h> 37*9207f9d2SChandrakanth patil 38*9207f9d2SChandrakanth patil #include <errno.h> 39*9207f9d2SChandrakanth patil #include <fcntl.h> 40*9207f9d2SChandrakanth patil #include <limits.h> 41*9207f9d2SChandrakanth patil #include <pthread.h> 42*9207f9d2SChandrakanth patil #include <stdio.h> 43*9207f9d2SChandrakanth patil #include <stdlib.h> 44*9207f9d2SChandrakanth patil #include <string.h> 45*9207f9d2SChandrakanth patil #include <unistd.h> 46*9207f9d2SChandrakanth patil 47*9207f9d2SChandrakanth patil #define __aligned_u64 __attribute__((aligned(8))) u64 48*9207f9d2SChandrakanth patil 49*9207f9d2SChandrakanth patil #define BNXT_RE_ABI_VERSION 6 50*9207f9d2SChandrakanth patil #define BNXT_RE_MAX_INLINE_SIZE 0x60 51*9207f9d2SChandrakanth patil #define BNXT_RE_MAX_INLINE_SIZE_VAR_WQE 0x1E0 52*9207f9d2SChandrakanth patil #define BNXT_RE_MAX_PUSH_SIZE_VAR_WQE 0xD0 53*9207f9d2SChandrakanth patil #define BNXT_RE_FULL_FLAG_DELTA 0x00 54*9207f9d2SChandrakanth patil 55*9207f9d2SChandrakanth patil enum bnxt_re_wr_opcode { 56*9207f9d2SChandrakanth patil BNXT_RE_WR_OPCD_SEND = 0x00, 57*9207f9d2SChandrakanth patil BNXT_RE_WR_OPCD_SEND_IMM = 0x01, 58*9207f9d2SChandrakanth patil BNXT_RE_WR_OPCD_SEND_INVAL = 0x02, 59*9207f9d2SChandrakanth patil BNXT_RE_WR_OPCD_RDMA_WRITE = 0x04, 60*9207f9d2SChandrakanth patil BNXT_RE_WR_OPCD_RDMA_WRITE_IMM = 0x05, 61*9207f9d2SChandrakanth patil BNXT_RE_WR_OPCD_RDMA_READ = 0x06, 62*9207f9d2SChandrakanth patil BNXT_RE_WR_OPCD_ATOMIC_CS = 0x08, 63*9207f9d2SChandrakanth patil BNXT_RE_WR_OPCD_ATOMIC_FA = 0x0B, 64*9207f9d2SChandrakanth patil BNXT_RE_WR_OPCD_LOC_INVAL = 0x0C, 65*9207f9d2SChandrakanth patil BNXT_RE_WR_OPCD_BIND = 0x0E, 66*9207f9d2SChandrakanth patil BNXT_RE_WR_OPCD_RECV = 0x80, 67*9207f9d2SChandrakanth patil BNXT_RE_WR_OPCD_INVAL = 0xFF 68*9207f9d2SChandrakanth patil }; 69*9207f9d2SChandrakanth patil 70*9207f9d2SChandrakanth patil enum bnxt_re_wr_flags { 71*9207f9d2SChandrakanth patil BNXT_RE_WR_FLAGS_INLINE = 0x10, 72*9207f9d2SChandrakanth patil BNXT_RE_WR_FLAGS_SE = 0x08, 73*9207f9d2SChandrakanth patil BNXT_RE_WR_FLAGS_UC_FENCE = 0x04, 74*9207f9d2SChandrakanth patil BNXT_RE_WR_FLAGS_RD_FENCE = 0x02, 75*9207f9d2SChandrakanth patil BNXT_RE_WR_FLAGS_SIGNALED = 0x01 76*9207f9d2SChandrakanth patil }; 77*9207f9d2SChandrakanth patil 78*9207f9d2SChandrakanth patil #define BNXT_RE_MEMW_TYPE_2 0x02 79*9207f9d2SChandrakanth patil #define BNXT_RE_MEMW_TYPE_1 0x00 80*9207f9d2SChandrakanth patil enum bnxt_re_wr_bind_acc { 81*9207f9d2SChandrakanth patil BNXT_RE_WR_BIND_ACC_LWR = 0x01, 82*9207f9d2SChandrakanth patil BNXT_RE_WR_BIND_ACC_RRD = 0x02, 83*9207f9d2SChandrakanth patil BNXT_RE_WR_BIND_ACC_RWR = 0x04, 84*9207f9d2SChandrakanth patil BNXT_RE_WR_BIND_ACC_RAT = 0x08, 85*9207f9d2SChandrakanth patil BNXT_RE_WR_BIND_ACC_MWB = 0x10, 86*9207f9d2SChandrakanth patil BNXT_RE_WR_BIND_ACC_ZBVA = 0x01, 87*9207f9d2SChandrakanth patil BNXT_RE_WR_BIND_ACC_SHIFT = 0x10 88*9207f9d2SChandrakanth patil }; 89*9207f9d2SChandrakanth patil 90*9207f9d2SChandrakanth patil enum bnxt_re_wc_type { 91*9207f9d2SChandrakanth patil BNXT_RE_WC_TYPE_SEND = 0x00, 92*9207f9d2SChandrakanth patil BNXT_RE_WC_TYPE_RECV_RC = 0x01, 93*9207f9d2SChandrakanth patil BNXT_RE_WC_TYPE_RECV_UD = 0x02, 94*9207f9d2SChandrakanth patil BNXT_RE_WC_TYPE_RECV_RAW = 0x03, 95*9207f9d2SChandrakanth patil BNXT_RE_WC_TYPE_TERM = 0x0E, 96*9207f9d2SChandrakanth patil BNXT_RE_WC_TYPE_COFF = 0x0F 97*9207f9d2SChandrakanth patil }; 98*9207f9d2SChandrakanth patil 99*9207f9d2SChandrakanth patil #define BNXT_RE_WC_OPCD_RECV 0x80 100*9207f9d2SChandrakanth patil enum bnxt_re_req_wc_status { 101*9207f9d2SChandrakanth patil BNXT_RE_REQ_ST_OK = 0x00, 102*9207f9d2SChandrakanth patil BNXT_RE_REQ_ST_BAD_RESP = 0x01, 103*9207f9d2SChandrakanth patil BNXT_RE_REQ_ST_LOC_LEN = 0x02, 104*9207f9d2SChandrakanth patil BNXT_RE_REQ_ST_LOC_QP_OP = 0x03, 105*9207f9d2SChandrakanth patil BNXT_RE_REQ_ST_PROT = 0x04, 106*9207f9d2SChandrakanth patil BNXT_RE_REQ_ST_MEM_OP = 0x05, 107*9207f9d2SChandrakanth patil BNXT_RE_REQ_ST_REM_INVAL = 0x06, 108*9207f9d2SChandrakanth patil BNXT_RE_REQ_ST_REM_ACC = 0x07, 109*9207f9d2SChandrakanth patil BNXT_RE_REQ_ST_REM_OP = 0x08, 110*9207f9d2SChandrakanth patil BNXT_RE_REQ_ST_RNR_NAK_XCED = 0x09, 111*9207f9d2SChandrakanth patil BNXT_RE_REQ_ST_TRNSP_XCED = 0x0A, 112*9207f9d2SChandrakanth patil BNXT_RE_REQ_ST_WR_FLUSH = 0x0B 113*9207f9d2SChandrakanth patil }; 114*9207f9d2SChandrakanth patil 115*9207f9d2SChandrakanth patil enum bnxt_re_rsp_wc_status { 116*9207f9d2SChandrakanth patil BNXT_RE_RSP_ST_OK = 0x00, 117*9207f9d2SChandrakanth patil BNXT_RE_RSP_ST_LOC_ACC = 0x01, 118*9207f9d2SChandrakanth patil BNXT_RE_RSP_ST_LOC_LEN = 0x02, 119*9207f9d2SChandrakanth patil BNXT_RE_RSP_ST_LOC_PROT = 0x03, 120*9207f9d2SChandrakanth patil BNXT_RE_RSP_ST_LOC_QP_OP = 0x04, 121*9207f9d2SChandrakanth patil BNXT_RE_RSP_ST_MEM_OP = 0x05, 122*9207f9d2SChandrakanth patil BNXT_RE_RSP_ST_REM_INVAL = 0x06, 123*9207f9d2SChandrakanth patil BNXT_RE_RSP_ST_WR_FLUSH = 0x07, 124*9207f9d2SChandrakanth patil BNXT_RE_RSP_ST_HW_FLUSH = 0x08 125*9207f9d2SChandrakanth patil }; 126*9207f9d2SChandrakanth patil 127*9207f9d2SChandrakanth patil enum bnxt_re_hdr_offset { 128*9207f9d2SChandrakanth patil BNXT_RE_HDR_WT_MASK = 0xFF, 129*9207f9d2SChandrakanth patil BNXT_RE_HDR_FLAGS_MASK = 0xFF, 130*9207f9d2SChandrakanth patil BNXT_RE_HDR_FLAGS_SHIFT = 0x08, 131*9207f9d2SChandrakanth patil BNXT_RE_HDR_WS_MASK = 0xFF, 132*9207f9d2SChandrakanth patil BNXT_RE_HDR_WS_SHIFT = 0x10 133*9207f9d2SChandrakanth patil }; 134*9207f9d2SChandrakanth patil 135*9207f9d2SChandrakanth patil enum bnxt_re_db_que_type { 136*9207f9d2SChandrakanth patil BNXT_RE_QUE_TYPE_SQ = 0x00, 137*9207f9d2SChandrakanth patil BNXT_RE_QUE_TYPE_RQ = 0x01, 138*9207f9d2SChandrakanth patil BNXT_RE_QUE_TYPE_SRQ = 0x02, 139*9207f9d2SChandrakanth patil BNXT_RE_QUE_TYPE_SRQ_ARM = 0x03, 140*9207f9d2SChandrakanth patil BNXT_RE_QUE_TYPE_CQ = 0x04, 141*9207f9d2SChandrakanth patil BNXT_RE_QUE_TYPE_CQ_ARMSE = 0x05, 142*9207f9d2SChandrakanth patil BNXT_RE_QUE_TYPE_CQ_ARMALL = 0x06, 143*9207f9d2SChandrakanth patil BNXT_RE_QUE_TYPE_CQ_ARMENA = 0x07, 144*9207f9d2SChandrakanth patil BNXT_RE_QUE_TYPE_SRQ_ARMENA = 0x08, 145*9207f9d2SChandrakanth patil BNXT_RE_QUE_TYPE_CQ_CUT_ACK = 0x09, 146*9207f9d2SChandrakanth patil BNXT_RE_PUSH_TYPE_START = 0x0C, 147*9207f9d2SChandrakanth patil BNXT_RE_PUSH_TYPE_END = 0x0D, 148*9207f9d2SChandrakanth patil BNXT_RE_QUE_TYPE_NULL = 0x0F 149*9207f9d2SChandrakanth patil }; 150*9207f9d2SChandrakanth patil 151*9207f9d2SChandrakanth patil enum bnxt_re_db_mask { 152*9207f9d2SChandrakanth patil BNXT_RE_DB_INDX_MASK = 0xFFFFFFUL, 153*9207f9d2SChandrakanth patil BNXT_RE_DB_PILO_MASK = 0x0FFUL, 154*9207f9d2SChandrakanth patil BNXT_RE_DB_PILO_SHIFT = 0x18, 155*9207f9d2SChandrakanth patil BNXT_RE_DB_QID_MASK = 0xFFFFFUL, 156*9207f9d2SChandrakanth patil BNXT_RE_DB_PIHI_MASK = 0xF00UL, 157*9207f9d2SChandrakanth patil BNXT_RE_DB_PIHI_SHIFT = 0x0C, /* Because mask is 0xF00 */ 158*9207f9d2SChandrakanth patil BNXT_RE_DB_TYP_MASK = 0x0FUL, 159*9207f9d2SChandrakanth patil BNXT_RE_DB_TYP_SHIFT = 0x1C, 160*9207f9d2SChandrakanth patil BNXT_RE_DB_VALID_SHIFT = 0x1A, 161*9207f9d2SChandrakanth patil BNXT_RE_DB_EPOCH_SHIFT = 0x18, 162*9207f9d2SChandrakanth patil BNXT_RE_DB_TOGGLE_SHIFT = 0x19, 163*9207f9d2SChandrakanth patil 164*9207f9d2SChandrakanth patil }; 165*9207f9d2SChandrakanth patil 166*9207f9d2SChandrakanth patil enum bnxt_re_psns_mask { 167*9207f9d2SChandrakanth patil BNXT_RE_PSNS_SPSN_MASK = 0xFFFFFF, 168*9207f9d2SChandrakanth patil BNXT_RE_PSNS_OPCD_MASK = 0xFF, 169*9207f9d2SChandrakanth patil BNXT_RE_PSNS_OPCD_SHIFT = 0x18, 170*9207f9d2SChandrakanth patil BNXT_RE_PSNS_NPSN_MASK = 0xFFFFFF, 171*9207f9d2SChandrakanth patil BNXT_RE_PSNS_FLAGS_MASK = 0xFF, 172*9207f9d2SChandrakanth patil BNXT_RE_PSNS_FLAGS_SHIFT = 0x18 173*9207f9d2SChandrakanth patil }; 174*9207f9d2SChandrakanth patil 175*9207f9d2SChandrakanth patil enum bnxt_re_msns_mask { 176*9207f9d2SChandrakanth patil BNXT_RE_SQ_MSN_SEARCH_START_PSN_MASK = 0xFFFFFFUL, 177*9207f9d2SChandrakanth patil BNXT_RE_SQ_MSN_SEARCH_START_PSN_SHIFT = 0, 178*9207f9d2SChandrakanth patil BNXT_RE_SQ_MSN_SEARCH_NEXT_PSN_MASK = 0xFFFFFF000000ULL, 179*9207f9d2SChandrakanth patil BNXT_RE_SQ_MSN_SEARCH_NEXT_PSN_SHIFT = 0x18, 180*9207f9d2SChandrakanth patil BNXT_RE_SQ_MSN_SEARCH_START_IDX_MASK = 0xFFFF000000000000ULL, 181*9207f9d2SChandrakanth patil BNXT_RE_SQ_MSN_SEARCH_START_IDX_SHIFT = 0x30 182*9207f9d2SChandrakanth patil }; 183*9207f9d2SChandrakanth patil 184*9207f9d2SChandrakanth patil enum bnxt_re_bcqe_mask { 185*9207f9d2SChandrakanth patil BNXT_RE_BCQE_PH_MASK = 0x01, 186*9207f9d2SChandrakanth patil BNXT_RE_BCQE_TYPE_MASK = 0x0F, 187*9207f9d2SChandrakanth patil BNXT_RE_BCQE_TYPE_SHIFT = 0x01, 188*9207f9d2SChandrakanth patil BNXT_RE_BCQE_STATUS_MASK = 0xFF, 189*9207f9d2SChandrakanth patil BNXT_RE_BCQE_STATUS_SHIFT = 0x08, 190*9207f9d2SChandrakanth patil BNXT_RE_BCQE_FLAGS_MASK = 0xFFFFU, 191*9207f9d2SChandrakanth patil BNXT_RE_BCQE_FLAGS_SHIFT = 0x10, 192*9207f9d2SChandrakanth patil BNXT_RE_BCQE_RWRID_MASK = 0xFFFFFU, 193*9207f9d2SChandrakanth patil BNXT_RE_BCQE_SRCQP_MASK = 0xFF, 194*9207f9d2SChandrakanth patil BNXT_RE_BCQE_SRCQP_SHIFT = 0x18 195*9207f9d2SChandrakanth patil }; 196*9207f9d2SChandrakanth patil 197*9207f9d2SChandrakanth patil enum bnxt_re_rc_flags_mask { 198*9207f9d2SChandrakanth patil BNXT_RE_RC_FLAGS_SRQ_RQ_MASK = 0x01, 199*9207f9d2SChandrakanth patil BNXT_RE_RC_FLAGS_IMM_MASK = 0x02, 200*9207f9d2SChandrakanth patil BNXT_RE_RC_FLAGS_IMM_SHIFT = 0x01, 201*9207f9d2SChandrakanth patil BNXT_RE_RC_FLAGS_INV_MASK = 0x04, 202*9207f9d2SChandrakanth patil BNXT_RE_RC_FLAGS_INV_SHIFT = 0x02, 203*9207f9d2SChandrakanth patil BNXT_RE_RC_FLAGS_RDMA_MASK = 0x08, 204*9207f9d2SChandrakanth patil BNXT_RE_RC_FLAGS_RDMA_SHIFT = 0x03 205*9207f9d2SChandrakanth patil }; 206*9207f9d2SChandrakanth patil 207*9207f9d2SChandrakanth patil enum bnxt_re_ud_flags_mask { 208*9207f9d2SChandrakanth patil BNXT_RE_UD_FLAGS_SRQ_RQ_MASK = 0x01, 209*9207f9d2SChandrakanth patil BNXT_RE_UD_FLAGS_SRQ_RQ_SFT = 0x00, 210*9207f9d2SChandrakanth patil BNXT_RE_UD_FLAGS_IMM_MASK = 0x02, 211*9207f9d2SChandrakanth patil BNXT_RE_UD_FLAGS_IMM_SFT = 0x01, 212*9207f9d2SChandrakanth patil BNXT_RE_UD_FLAGS_IP_VER_MASK = 0x30, 213*9207f9d2SChandrakanth patil BNXT_RE_UD_FLAGS_IP_VER_SFT = 0x4, 214*9207f9d2SChandrakanth patil BNXT_RE_UD_FLAGS_META_MASK = 0x3C0, 215*9207f9d2SChandrakanth patil BNXT_RE_UD_FLAGS_META_SFT = 0x6, 216*9207f9d2SChandrakanth patil BNXT_RE_UD_FLAGS_EXT_META_MASK = 0xC00, 217*9207f9d2SChandrakanth patil BNXT_RE_UD_FLAGS_EXT_META_SFT = 0x10, 218*9207f9d2SChandrakanth patil }; 219*9207f9d2SChandrakanth patil 220*9207f9d2SChandrakanth patil enum bnxt_re_ud_cqe_mask { 221*9207f9d2SChandrakanth patil BNXT_RE_UD_CQE_MAC_MASK = 0xFFFFFFFFFFFFULL, 222*9207f9d2SChandrakanth patil BNXT_RE_UD_CQE_SRCQPLO_MASK = 0xFFFF, 223*9207f9d2SChandrakanth patil BNXT_RE_UD_CQE_SRCQPLO_SHIFT = 0x30, 224*9207f9d2SChandrakanth patil BNXT_RE_UD_CQE_LEN_MASK = 0x3FFFU 225*9207f9d2SChandrakanth patil }; 226*9207f9d2SChandrakanth patil 227*9207f9d2SChandrakanth patil enum bnxt_re_shpg_offt { 228*9207f9d2SChandrakanth patil BNXT_RE_SHPG_BEG_RESV_OFFT = 0x00, 229*9207f9d2SChandrakanth patil BNXT_RE_SHPG_AVID_OFFT = 0x10, 230*9207f9d2SChandrakanth patil BNXT_RE_SHPG_AVID_SIZE = 0x04, 231*9207f9d2SChandrakanth patil BNXT_RE_SHPG_END_RESV_OFFT = 0xFF0 232*9207f9d2SChandrakanth patil }; 233*9207f9d2SChandrakanth patil 234*9207f9d2SChandrakanth patil enum bnxt_re_que_flags_mask { 235*9207f9d2SChandrakanth patil BNXT_RE_FLAG_EPOCH_TAIL_SHIFT = 0x0UL, 236*9207f9d2SChandrakanth patil BNXT_RE_FLAG_EPOCH_HEAD_SHIFT = 0x1UL, 237*9207f9d2SChandrakanth patil BNXT_RE_FLAG_EPOCH_TAIL_MASK = 0x1UL, 238*9207f9d2SChandrakanth patil BNXT_RE_FLAG_EPOCH_HEAD_MASK = 0x2UL, 239*9207f9d2SChandrakanth patil }; 240*9207f9d2SChandrakanth patil 241*9207f9d2SChandrakanth patil enum bnxt_re_db_epoch_flag_shift { 242*9207f9d2SChandrakanth patil BNXT_RE_DB_EPOCH_TAIL_SHIFT = BNXT_RE_DB_EPOCH_SHIFT, 243*9207f9d2SChandrakanth patil BNXT_RE_DB_EPOCH_HEAD_SHIFT = (BNXT_RE_DB_EPOCH_SHIFT - 1) 244*9207f9d2SChandrakanth patil }; 245*9207f9d2SChandrakanth patil 246*9207f9d2SChandrakanth patil enum bnxt_re_ppp_st_en_mask { 247*9207f9d2SChandrakanth patil BNXT_RE_PPP_ENABLED_MASK = 0x1UL, 248*9207f9d2SChandrakanth patil BNXT_RE_PPP_STATE_MASK = 0x2UL, 249*9207f9d2SChandrakanth patil }; 250*9207f9d2SChandrakanth patil 251*9207f9d2SChandrakanth patil enum bnxt_re_ppp_st_shift { 252*9207f9d2SChandrakanth patil BNXT_RE_PPP_ST_SHIFT = 0x1UL 253*9207f9d2SChandrakanth patil }; 254*9207f9d2SChandrakanth patil 255*9207f9d2SChandrakanth patil struct bnxt_re_db_hdr { 256*9207f9d2SChandrakanth patil __u64 typ_qid_indx; /* typ: 4, qid:20, indx:24 */ 257*9207f9d2SChandrakanth patil }; 258*9207f9d2SChandrakanth patil 259*9207f9d2SChandrakanth patil #define BNXT_RE_CHIP_ID0_CHIP_NUM_SFT 0x00 260*9207f9d2SChandrakanth patil #define BNXT_RE_CHIP_ID0_CHIP_REV_SFT 0x10 261*9207f9d2SChandrakanth patil #define BNXT_RE_CHIP_ID0_CHIP_MET_SFT 0x18 262*9207f9d2SChandrakanth patil 263*9207f9d2SChandrakanth patil enum { 264*9207f9d2SChandrakanth patil BNXT_RE_COMP_MASK_UCNTX_WC_DPI_ENABLED = 0x01, 265*9207f9d2SChandrakanth patil BNXT_RE_COMP_MASK_UCNTX_POW2_DISABLED = 0x02, 266*9207f9d2SChandrakanth patil BNXT_RE_COMP_MASK_UCNTX_RSVD_WQE_DISABLED = 0x04, 267*9207f9d2SChandrakanth patil BNXT_RE_COMP_MASK_UCNTX_MQP_EX_SUPPORTED = 0x8, 268*9207f9d2SChandrakanth patil BNXT_RE_COMP_MASK_UCNTX_DBR_PACING_ENABLED = 0x10, 269*9207f9d2SChandrakanth patil BNXT_RE_COMP_MASK_UCNTX_DBR_RECOVERY_ENABLED = 0x20, 270*9207f9d2SChandrakanth patil BNXT_RE_COMP_MASK_UCNTX_HW_RETX_ENABLED = 0x40 271*9207f9d2SChandrakanth patil }; 272*9207f9d2SChandrakanth patil 273*9207f9d2SChandrakanth patil enum bnxt_re_req_to_drv { 274*9207f9d2SChandrakanth patil BNXT_RE_COMP_MASK_REQ_UCNTX_POW2_SUPPORT = 0x01, 275*9207f9d2SChandrakanth patil BNXT_RE_COMP_MASK_REQ_UCNTX_RSVD_WQE = 0x02 276*9207f9d2SChandrakanth patil }; 277*9207f9d2SChandrakanth patil 278*9207f9d2SChandrakanth patil #define BNXT_RE_WQE_MODES_WQE_MODE_MASK 0x01 279*9207f9d2SChandrakanth patil /* bit wise modes can be extended here. */ 280*9207f9d2SChandrakanth patil enum bnxt_re_modes { 281*9207f9d2SChandrakanth patil BNXT_RE_WQE_MODE_STATIC = 0x00, 282*9207f9d2SChandrakanth patil BNXT_RE_WQE_MODE_VARIABLE = 0x01 283*9207f9d2SChandrakanth patil /* Other modes can be here */ 284*9207f9d2SChandrakanth patil }; 285*9207f9d2SChandrakanth patil 286*9207f9d2SChandrakanth patil struct bnxt_re_cntx_req { 287*9207f9d2SChandrakanth patil struct ibv_get_context cmd; 288*9207f9d2SChandrakanth patil __aligned_u64 comp_mask; 289*9207f9d2SChandrakanth patil }; 290*9207f9d2SChandrakanth patil 291*9207f9d2SChandrakanth patil struct bnxt_re_cntx_resp { 292*9207f9d2SChandrakanth patil struct ibv_get_context_resp resp; 293*9207f9d2SChandrakanth patil __u32 dev_id; 294*9207f9d2SChandrakanth patil __u32 max_qp; /* To allocate qp-table */ 295*9207f9d2SChandrakanth patil __u32 pg_size; 296*9207f9d2SChandrakanth patil __u32 cqe_size; 297*9207f9d2SChandrakanth patil __u32 max_cqd; 298*9207f9d2SChandrakanth patil __u32 chip_id0; 299*9207f9d2SChandrakanth patil __u32 chip_id1; 300*9207f9d2SChandrakanth patil __u32 modes; 301*9207f9d2SChandrakanth patil __aligned_u64 comp_mask; 302*9207f9d2SChandrakanth patil } __attribute__((packed)); 303*9207f9d2SChandrakanth patil 304*9207f9d2SChandrakanth patil enum { 305*9207f9d2SChandrakanth patil BNXT_RE_COMP_MASK_PD_HAS_WC_DPI = 0x01, 306*9207f9d2SChandrakanth patil BNXT_RE_COMP_MASK_PD_HAS_DBR_BAR_ADDR = 0x02, 307*9207f9d2SChandrakanth patil }; 308*9207f9d2SChandrakanth patil 309*9207f9d2SChandrakanth patil struct bnxt_re_pd_resp { 310*9207f9d2SChandrakanth patil struct ibv_alloc_pd_resp resp; 311*9207f9d2SChandrakanth patil __u32 pdid; 312*9207f9d2SChandrakanth patil __u32 dpi; 313*9207f9d2SChandrakanth patil __u64 dbr; 314*9207f9d2SChandrakanth patil __u64 comp_mask; 315*9207f9d2SChandrakanth patil __u32 wcdpi; 316*9207f9d2SChandrakanth patil __u64 dbr_bar_map; 317*9207f9d2SChandrakanth patil } __attribute__((packed)); 318*9207f9d2SChandrakanth patil 319*9207f9d2SChandrakanth patil struct bnxt_re_mr_resp { 320*9207f9d2SChandrakanth patil struct ibv_reg_mr_resp resp; 321*9207f9d2SChandrakanth patil } __attribute__((packed)); 322*9207f9d2SChandrakanth patil 323*9207f9d2SChandrakanth patil /* CQ */ 324*9207f9d2SChandrakanth patil enum { 325*9207f9d2SChandrakanth patil BNXT_RE_COMP_MASK_CQ_HAS_DB_INFO = 0x01, 326*9207f9d2SChandrakanth patil BNXT_RE_COMP_MASK_CQ_HAS_WC_DPI = 0x02, 327*9207f9d2SChandrakanth patil BNXT_RE_COMP_MASK_CQ_HAS_CQ_PAGE = 0x04 328*9207f9d2SChandrakanth patil }; 329*9207f9d2SChandrakanth patil 330*9207f9d2SChandrakanth patil enum { 331*9207f9d2SChandrakanth patil BNXT_RE_COMP_MASK_CQ_REQ_HAS_CAP_MASK = 0x1 332*9207f9d2SChandrakanth patil }; 333*9207f9d2SChandrakanth patil 334*9207f9d2SChandrakanth patil enum { 335*9207f9d2SChandrakanth patil BNXT_RE_COMP_MASK_CQ_REQ_CAP_DBR_RECOVERY = 0x1 336*9207f9d2SChandrakanth patil }; 337*9207f9d2SChandrakanth patil 338*9207f9d2SChandrakanth patil struct bnxt_re_cq_req { 339*9207f9d2SChandrakanth patil struct ibv_create_cq cmd; 340*9207f9d2SChandrakanth patil __u64 cq_va; 341*9207f9d2SChandrakanth patil __u64 cq_handle; 342*9207f9d2SChandrakanth patil __aligned_u64 comp_mask; 343*9207f9d2SChandrakanth patil __u16 cq_capab; 344*9207f9d2SChandrakanth patil } __attribute__((packed)); 345*9207f9d2SChandrakanth patil 346*9207f9d2SChandrakanth patil struct bnxt_re_cq_resp { 347*9207f9d2SChandrakanth patil struct ibv_create_cq_resp resp; 348*9207f9d2SChandrakanth patil __u32 cqid; 349*9207f9d2SChandrakanth patil __u32 tail; 350*9207f9d2SChandrakanth patil __u32 phase; 351*9207f9d2SChandrakanth patil __u32 rsvd; 352*9207f9d2SChandrakanth patil __aligned_u64 comp_mask; 353*9207f9d2SChandrakanth patil __u32 dpi; 354*9207f9d2SChandrakanth patil __u64 dbr; 355*9207f9d2SChandrakanth patil __u32 wcdpi; 356*9207f9d2SChandrakanth patil __u64 cq_page; 357*9207f9d2SChandrakanth patil } __attribute__((packed)); 358*9207f9d2SChandrakanth patil 359*9207f9d2SChandrakanth patil struct bnxt_re_resize_cq_req { 360*9207f9d2SChandrakanth patil struct ibv_resize_cq cmd; 361*9207f9d2SChandrakanth patil __u64 cq_va; 362*9207f9d2SChandrakanth patil } __attribute__((packed)); 363*9207f9d2SChandrakanth patil 364*9207f9d2SChandrakanth patil struct bnxt_re_bcqe { 365*9207f9d2SChandrakanth patil __u32 flg_st_typ_ph; 366*9207f9d2SChandrakanth patil __u32 qphi_rwrid; 367*9207f9d2SChandrakanth patil } __attribute__((packed)); 368*9207f9d2SChandrakanth patil 369*9207f9d2SChandrakanth patil struct bnxt_re_req_cqe { 370*9207f9d2SChandrakanth patil __u64 qp_handle; 371*9207f9d2SChandrakanth patil __u32 con_indx; /* 16 bits valid. */ 372*9207f9d2SChandrakanth patil __u32 rsvd1; 373*9207f9d2SChandrakanth patil __u64 rsvd2; 374*9207f9d2SChandrakanth patil } __attribute__((packed)); 375*9207f9d2SChandrakanth patil 376*9207f9d2SChandrakanth patil struct bnxt_re_rc_cqe { 377*9207f9d2SChandrakanth patil __u32 length; 378*9207f9d2SChandrakanth patil __u32 imm_key; 379*9207f9d2SChandrakanth patil __u64 qp_handle; 380*9207f9d2SChandrakanth patil __u64 mr_handle; 381*9207f9d2SChandrakanth patil } __attribute__((packed)); 382*9207f9d2SChandrakanth patil 383*9207f9d2SChandrakanth patil struct bnxt_re_ud_cqe { 384*9207f9d2SChandrakanth patil __u32 length; /* 14 bits */ 385*9207f9d2SChandrakanth patil __u32 immd; 386*9207f9d2SChandrakanth patil __u64 qp_handle; 387*9207f9d2SChandrakanth patil __u64 qplo_mac; /* 16:48*/ 388*9207f9d2SChandrakanth patil } __attribute__((packed)); 389*9207f9d2SChandrakanth patil 390*9207f9d2SChandrakanth patil struct bnxt_re_term_cqe { 391*9207f9d2SChandrakanth patil __u64 qp_handle; 392*9207f9d2SChandrakanth patil __u32 rq_sq_cidx; 393*9207f9d2SChandrakanth patil __u32 rsvd; 394*9207f9d2SChandrakanth patil __u64 rsvd1; 395*9207f9d2SChandrakanth patil } __attribute__((packed)); 396*9207f9d2SChandrakanth patil 397*9207f9d2SChandrakanth patil struct bnxt_re_cutoff_cqe { 398*9207f9d2SChandrakanth patil __u64 rsvd1; 399*9207f9d2SChandrakanth patil __u64 rsvd2; 400*9207f9d2SChandrakanth patil __u64 rsvd3; 401*9207f9d2SChandrakanth patil __u8 cqe_type_toggle; 402*9207f9d2SChandrakanth patil __u8 status; 403*9207f9d2SChandrakanth patil __u16 rsvd4; 404*9207f9d2SChandrakanth patil __u32 rsvd5; 405*9207f9d2SChandrakanth patil } __attribute__((packed)); 406*9207f9d2SChandrakanth patil 407*9207f9d2SChandrakanth patil /* QP */ 408*9207f9d2SChandrakanth patil struct bnxt_re_qp_req { 409*9207f9d2SChandrakanth patil struct ibv_create_qp cmd; 410*9207f9d2SChandrakanth patil __u64 qpsva; 411*9207f9d2SChandrakanth patil __u64 qprva; 412*9207f9d2SChandrakanth patil __u64 qp_handle; 413*9207f9d2SChandrakanth patil } __attribute__((packed)); 414*9207f9d2SChandrakanth patil 415*9207f9d2SChandrakanth patil struct bnxt_re_qp_resp { 416*9207f9d2SChandrakanth patil struct ibv_create_qp_resp resp; 417*9207f9d2SChandrakanth patil __u32 qpid; 418*9207f9d2SChandrakanth patil } __attribute__((packed)); 419*9207f9d2SChandrakanth patil 420*9207f9d2SChandrakanth patil enum bnxt_re_modify_ex_mask { 421*9207f9d2SChandrakanth patil BNXT_RE_MQP_PPP_REQ_EN_MASK = 0x1UL, 422*9207f9d2SChandrakanth patil BNXT_RE_MQP_PPP_REQ_EN = 0x1UL, 423*9207f9d2SChandrakanth patil BNXT_RE_MQP_PATH_MTU_MASK = 0x2UL, 424*9207f9d2SChandrakanth patil BNXT_RE_MQP_PPP_IDX_MASK = 0x7UL, 425*9207f9d2SChandrakanth patil BNXT_RE_MQP_PPP_STATE = 0x10UL 426*9207f9d2SChandrakanth patil }; 427*9207f9d2SChandrakanth patil 428*9207f9d2SChandrakanth patil /* Modify QP */ 429*9207f9d2SChandrakanth patil struct bnxt_re_modify_ex_req { 430*9207f9d2SChandrakanth patil struct ibv_modify_qp_ex cmd; 431*9207f9d2SChandrakanth patil __aligned_u64 comp_mask; 432*9207f9d2SChandrakanth patil __u32 dpi; 433*9207f9d2SChandrakanth patil __u32 rsvd; 434*9207f9d2SChandrakanth patil }; 435*9207f9d2SChandrakanth patil 436*9207f9d2SChandrakanth patil struct bnxt_re_modify_ex_resp { 437*9207f9d2SChandrakanth patil struct ibv_modify_qp_resp_ex resp; 438*9207f9d2SChandrakanth patil __aligned_u64 comp_mask; 439*9207f9d2SChandrakanth patil __u32 ppp_st_idx; 440*9207f9d2SChandrakanth patil __u32 path_mtu; 441*9207f9d2SChandrakanth patil }; 442*9207f9d2SChandrakanth patil 443*9207f9d2SChandrakanth patil union lower_shdr { 444*9207f9d2SChandrakanth patil __u64 qkey_len; 445*9207f9d2SChandrakanth patil __u64 lkey_plkey; 446*9207f9d2SChandrakanth patil __u64 rva; 447*9207f9d2SChandrakanth patil }; 448*9207f9d2SChandrakanth patil 449*9207f9d2SChandrakanth patil struct bnxt_re_bsqe { 450*9207f9d2SChandrakanth patil __u32 rsv_ws_fl_wt; 451*9207f9d2SChandrakanth patil __u32 key_immd; 452*9207f9d2SChandrakanth patil union lower_shdr lhdr; 453*9207f9d2SChandrakanth patil } __attribute__((packed)); 454*9207f9d2SChandrakanth patil 455*9207f9d2SChandrakanth patil struct bnxt_re_psns_ext { 456*9207f9d2SChandrakanth patil __u32 opc_spsn; 457*9207f9d2SChandrakanth patil __u32 flg_npsn; 458*9207f9d2SChandrakanth patil __u16 st_slot_idx; 459*9207f9d2SChandrakanth patil __u16 rsvd0; 460*9207f9d2SChandrakanth patil __u32 rsvd1; 461*9207f9d2SChandrakanth patil } __attribute__((packed)); 462*9207f9d2SChandrakanth patil 463*9207f9d2SChandrakanth patil /* sq_msn_search (size:64b/8B) */ 464*9207f9d2SChandrakanth patil struct bnxt_re_msns { 465*9207f9d2SChandrakanth patil __u64 start_idx_next_psn_start_psn; 466*9207f9d2SChandrakanth patil } __attribute__((packed)); 467*9207f9d2SChandrakanth patil 468*9207f9d2SChandrakanth patil struct bnxt_re_psns { 469*9207f9d2SChandrakanth patil __u32 opc_spsn; 470*9207f9d2SChandrakanth patil __u32 flg_npsn; 471*9207f9d2SChandrakanth patil } __attribute__((packed)); 472*9207f9d2SChandrakanth patil 473*9207f9d2SChandrakanth patil struct bnxt_re_sge { 474*9207f9d2SChandrakanth patil __u64 pa; 475*9207f9d2SChandrakanth patil __u32 lkey; 476*9207f9d2SChandrakanth patil __u32 length; 477*9207f9d2SChandrakanth patil } __attribute__((packed)); 478*9207f9d2SChandrakanth patil 479*9207f9d2SChandrakanth patil struct bnxt_re_send { 480*9207f9d2SChandrakanth patil __u32 dst_qp; 481*9207f9d2SChandrakanth patil __u32 avid; 482*9207f9d2SChandrakanth patil __u64 rsvd; 483*9207f9d2SChandrakanth patil } __attribute__((packed)); 484*9207f9d2SChandrakanth patil 485*9207f9d2SChandrakanth patil struct bnxt_re_raw { 486*9207f9d2SChandrakanth patil __u32 cfa_meta; 487*9207f9d2SChandrakanth patil __u32 rsvd2; 488*9207f9d2SChandrakanth patil __u64 rsvd3; 489*9207f9d2SChandrakanth patil } __attribute__((packed)); 490*9207f9d2SChandrakanth patil 491*9207f9d2SChandrakanth patil struct bnxt_re_rdma { 492*9207f9d2SChandrakanth patil __u64 rva; 493*9207f9d2SChandrakanth patil __u32 rkey; 494*9207f9d2SChandrakanth patil __u32 rsvd2; 495*9207f9d2SChandrakanth patil } __attribute__((packed)); 496*9207f9d2SChandrakanth patil 497*9207f9d2SChandrakanth patil struct bnxt_re_atomic { 498*9207f9d2SChandrakanth patil __u64 swp_dt; 499*9207f9d2SChandrakanth patil __u64 cmp_dt; 500*9207f9d2SChandrakanth patil } __attribute__((packed)); 501*9207f9d2SChandrakanth patil 502*9207f9d2SChandrakanth patil struct bnxt_re_inval { 503*9207f9d2SChandrakanth patil __u64 rsvd[2]; 504*9207f9d2SChandrakanth patil } __attribute__((packed)); 505*9207f9d2SChandrakanth patil 506*9207f9d2SChandrakanth patil struct bnxt_re_bind { 507*9207f9d2SChandrakanth patil __u64 va; 508*9207f9d2SChandrakanth patil __u64 len; /* only 40 bits are valid */ 509*9207f9d2SChandrakanth patil } __attribute__((packed)); 510*9207f9d2SChandrakanth patil 511*9207f9d2SChandrakanth patil struct bnxt_re_brqe { 512*9207f9d2SChandrakanth patil __u32 rsv_ws_fl_wt; 513*9207f9d2SChandrakanth patil __u32 rsvd; 514*9207f9d2SChandrakanth patil __u32 wrid; 515*9207f9d2SChandrakanth patil __u32 rsvd1; 516*9207f9d2SChandrakanth patil } __attribute__((packed)); 517*9207f9d2SChandrakanth patil 518*9207f9d2SChandrakanth patil struct bnxt_re_rqe { 519*9207f9d2SChandrakanth patil __u64 rsvd[2]; 520*9207f9d2SChandrakanth patil } __attribute__((packed)); 521*9207f9d2SChandrakanth patil 522*9207f9d2SChandrakanth patil /* SRQ */ 523*9207f9d2SChandrakanth patil struct bnxt_re_srq_req { 524*9207f9d2SChandrakanth patil struct ibv_create_srq cmd; 525*9207f9d2SChandrakanth patil __u64 srqva; 526*9207f9d2SChandrakanth patil __u64 srq_handle; 527*9207f9d2SChandrakanth patil } __attribute__((packed)); 528*9207f9d2SChandrakanth patil 529*9207f9d2SChandrakanth patil struct bnxt_re_srq_resp { 530*9207f9d2SChandrakanth patil struct ibv_create_srq_resp resp; 531*9207f9d2SChandrakanth patil __u32 srqid; 532*9207f9d2SChandrakanth patil } __attribute__((packed)); 533*9207f9d2SChandrakanth patil 534*9207f9d2SChandrakanth patil struct bnxt_re_srqe { 535*9207f9d2SChandrakanth patil __u64 rsvd[2]; 536*9207f9d2SChandrakanth patil } __attribute__((packed)); 537*9207f9d2SChandrakanth patil 538*9207f9d2SChandrakanth patil struct bnxt_re_push_wqe { 539*9207f9d2SChandrakanth patil __u64 addr[32]; 540*9207f9d2SChandrakanth patil } __attribute__((packed));; 541*9207f9d2SChandrakanth patil 542*9207f9d2SChandrakanth patil #endif 543