1*4882a593Smuzhiyun /* This file is part of the Emulex RoCE Device Driver for 2*4882a593Smuzhiyun * RoCE (RDMA over Converged Ethernet) adapters. 3*4882a593Smuzhiyun * Copyright (C) 2012-2015 Emulex. All rights reserved. 4*4882a593Smuzhiyun * EMULEX and SLI are trademarks of Emulex. 5*4882a593Smuzhiyun * www.emulex.com 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * This software is available to you under a choice of one of two licenses. 8*4882a593Smuzhiyun * You may choose to be licensed under the terms of the GNU General Public 9*4882a593Smuzhiyun * License (GPL) Version 2, available from the file COPYING in the main 10*4882a593Smuzhiyun * directory of this source tree, or the BSD license below: 11*4882a593Smuzhiyun * 12*4882a593Smuzhiyun * Redistribution and use in source and binary forms, with or without 13*4882a593Smuzhiyun * modification, are permitted provided that the following conditions 14*4882a593Smuzhiyun * are met: 15*4882a593Smuzhiyun * 16*4882a593Smuzhiyun * - Redistributions of source code must retain the above copyright notice, 17*4882a593Smuzhiyun * this list of conditions and the following disclaimer. 18*4882a593Smuzhiyun * 19*4882a593Smuzhiyun * - Redistributions in binary form must reproduce the above copyright 20*4882a593Smuzhiyun * notice, this list of conditions and the following disclaimer in 21*4882a593Smuzhiyun * the documentation and/or other materials provided with the distribution. 22*4882a593Smuzhiyun * 23*4882a593Smuzhiyun * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 24*4882a593Smuzhiyun * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,THE 25*4882a593Smuzhiyun * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26*4882a593Smuzhiyun * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 27*4882a593Smuzhiyun * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 28*4882a593Smuzhiyun * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 29*4882a593Smuzhiyun * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 30*4882a593Smuzhiyun * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 31*4882a593Smuzhiyun * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 32*4882a593Smuzhiyun * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 33*4882a593Smuzhiyun * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34*4882a593Smuzhiyun * 35*4882a593Smuzhiyun * Contact Information: 36*4882a593Smuzhiyun * linux-drivers@emulex.com 37*4882a593Smuzhiyun * 38*4882a593Smuzhiyun * Emulex 39*4882a593Smuzhiyun * 3333 Susan Street 40*4882a593Smuzhiyun * Costa Mesa, CA 92626 41*4882a593Smuzhiyun */ 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun #ifndef __OCRDMA_SLI_H__ 44*4882a593Smuzhiyun #define __OCRDMA_SLI_H__ 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun enum { 47*4882a593Smuzhiyun OCRDMA_ASIC_GEN_SKH_R = 0x04, 48*4882a593Smuzhiyun OCRDMA_ASIC_GEN_LANCER = 0x0B 49*4882a593Smuzhiyun }; 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun enum { 52*4882a593Smuzhiyun OCRDMA_ASIC_REV_A0 = 0x00, 53*4882a593Smuzhiyun OCRDMA_ASIC_REV_B0 = 0x10, 54*4882a593Smuzhiyun OCRDMA_ASIC_REV_C0 = 0x20 55*4882a593Smuzhiyun }; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun #define OCRDMA_SUBSYS_ROCE 10 58*4882a593Smuzhiyun enum { 59*4882a593Smuzhiyun OCRDMA_CMD_QUERY_CONFIG = 1, 60*4882a593Smuzhiyun OCRDMA_CMD_ALLOC_PD = 2, 61*4882a593Smuzhiyun OCRDMA_CMD_DEALLOC_PD = 3, 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun OCRDMA_CMD_CREATE_AH_TBL = 4, 64*4882a593Smuzhiyun OCRDMA_CMD_DELETE_AH_TBL = 5, 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun OCRDMA_CMD_CREATE_QP = 6, 67*4882a593Smuzhiyun OCRDMA_CMD_QUERY_QP = 7, 68*4882a593Smuzhiyun OCRDMA_CMD_MODIFY_QP = 8 , 69*4882a593Smuzhiyun OCRDMA_CMD_DELETE_QP = 9, 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun OCRDMA_CMD_RSVD1 = 10, 72*4882a593Smuzhiyun OCRDMA_CMD_ALLOC_LKEY = 11, 73*4882a593Smuzhiyun OCRDMA_CMD_DEALLOC_LKEY = 12, 74*4882a593Smuzhiyun OCRDMA_CMD_REGISTER_NSMR = 13, 75*4882a593Smuzhiyun OCRDMA_CMD_REREGISTER_NSMR = 14, 76*4882a593Smuzhiyun OCRDMA_CMD_REGISTER_NSMR_CONT = 15, 77*4882a593Smuzhiyun OCRDMA_CMD_QUERY_NSMR = 16, 78*4882a593Smuzhiyun OCRDMA_CMD_ALLOC_MW = 17, 79*4882a593Smuzhiyun OCRDMA_CMD_QUERY_MW = 18, 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun OCRDMA_CMD_CREATE_SRQ = 19, 82*4882a593Smuzhiyun OCRDMA_CMD_QUERY_SRQ = 20, 83*4882a593Smuzhiyun OCRDMA_CMD_MODIFY_SRQ = 21, 84*4882a593Smuzhiyun OCRDMA_CMD_DELETE_SRQ = 22, 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun OCRDMA_CMD_ATTACH_MCAST = 23, 87*4882a593Smuzhiyun OCRDMA_CMD_DETACH_MCAST = 24, 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun OCRDMA_CMD_CREATE_RBQ = 25, 90*4882a593Smuzhiyun OCRDMA_CMD_DESTROY_RBQ = 26, 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun OCRDMA_CMD_GET_RDMA_STATS = 27, 93*4882a593Smuzhiyun OCRDMA_CMD_ALLOC_PD_RANGE = 28, 94*4882a593Smuzhiyun OCRDMA_CMD_DEALLOC_PD_RANGE = 29, 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun OCRDMA_CMD_MAX 97*4882a593Smuzhiyun }; 98*4882a593Smuzhiyun 99*4882a593Smuzhiyun #define OCRDMA_SUBSYS_COMMON 1 100*4882a593Smuzhiyun enum { 101*4882a593Smuzhiyun OCRDMA_CMD_QUERY_NTWK_LINK_CONFIG_V1 = 5, 102*4882a593Smuzhiyun OCRDMA_CMD_CREATE_CQ = 12, 103*4882a593Smuzhiyun OCRDMA_CMD_CREATE_EQ = 13, 104*4882a593Smuzhiyun OCRDMA_CMD_CREATE_MQ = 21, 105*4882a593Smuzhiyun OCRDMA_CMD_GET_CTRL_ATTRIBUTES = 32, 106*4882a593Smuzhiyun OCRDMA_CMD_GET_FW_VER = 35, 107*4882a593Smuzhiyun OCRDMA_CMD_MODIFY_EQ_DELAY = 41, 108*4882a593Smuzhiyun OCRDMA_CMD_DELETE_MQ = 53, 109*4882a593Smuzhiyun OCRDMA_CMD_DELETE_CQ = 54, 110*4882a593Smuzhiyun OCRDMA_CMD_DELETE_EQ = 55, 111*4882a593Smuzhiyun OCRDMA_CMD_GET_FW_CONFIG = 58, 112*4882a593Smuzhiyun OCRDMA_CMD_CREATE_MQ_EXT = 90, 113*4882a593Smuzhiyun OCRDMA_CMD_PHY_DETAILS = 102 114*4882a593Smuzhiyun }; 115*4882a593Smuzhiyun 116*4882a593Smuzhiyun enum { 117*4882a593Smuzhiyun QTYPE_EQ = 1, 118*4882a593Smuzhiyun QTYPE_CQ = 2, 119*4882a593Smuzhiyun QTYPE_MCCQ = 3 120*4882a593Smuzhiyun }; 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun #define OCRDMA_MAX_SGID 16 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun #define OCRDMA_MAX_QP 2048 125*4882a593Smuzhiyun #define OCRDMA_MAX_CQ 2048 126*4882a593Smuzhiyun #define OCRDMA_MAX_STAG 16384 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun enum { 129*4882a593Smuzhiyun OCRDMA_DB_RQ_OFFSET = 0xE0, 130*4882a593Smuzhiyun OCRDMA_DB_GEN2_RQ_OFFSET = 0x100, 131*4882a593Smuzhiyun OCRDMA_DB_SQ_OFFSET = 0x60, 132*4882a593Smuzhiyun OCRDMA_DB_GEN2_SQ_OFFSET = 0x1C0, 133*4882a593Smuzhiyun OCRDMA_DB_SRQ_OFFSET = OCRDMA_DB_RQ_OFFSET, 134*4882a593Smuzhiyun OCRDMA_DB_GEN2_SRQ_OFFSET = OCRDMA_DB_GEN2_RQ_OFFSET, 135*4882a593Smuzhiyun OCRDMA_DB_CQ_OFFSET = 0x120, 136*4882a593Smuzhiyun OCRDMA_DB_EQ_OFFSET = OCRDMA_DB_CQ_OFFSET, 137*4882a593Smuzhiyun OCRDMA_DB_MQ_OFFSET = 0x140, 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun OCRDMA_DB_SQ_SHIFT = 16, 140*4882a593Smuzhiyun OCRDMA_DB_RQ_SHIFT = 24 141*4882a593Smuzhiyun }; 142*4882a593Smuzhiyun 143*4882a593Smuzhiyun enum { 144*4882a593Smuzhiyun OCRDMA_L3_TYPE_IB_GRH = 0x00, 145*4882a593Smuzhiyun OCRDMA_L3_TYPE_IPV4 = 0x01, 146*4882a593Smuzhiyun OCRDMA_L3_TYPE_IPV6 = 0x02 147*4882a593Smuzhiyun }; 148*4882a593Smuzhiyun 149*4882a593Smuzhiyun #define OCRDMA_DB_CQ_RING_ID_MASK 0x3FF /* bits 0 - 9 */ 150*4882a593Smuzhiyun #define OCRDMA_DB_CQ_RING_ID_EXT_MASK 0x0C00 /* bits 10-11 of qid at 12-11 */ 151*4882a593Smuzhiyun /* qid #2 msbits at 12-11 */ 152*4882a593Smuzhiyun #define OCRDMA_DB_CQ_RING_ID_EXT_MASK_SHIFT 0x1 153*4882a593Smuzhiyun #define OCRDMA_DB_CQ_NUM_POPPED_SHIFT 16 /* bits 16 - 28 */ 154*4882a593Smuzhiyun /* Rearm bit */ 155*4882a593Smuzhiyun #define OCRDMA_DB_CQ_REARM_SHIFT 29 /* bit 29 */ 156*4882a593Smuzhiyun /* solicited bit */ 157*4882a593Smuzhiyun #define OCRDMA_DB_CQ_SOLICIT_SHIFT 31 /* bit 31 */ 158*4882a593Smuzhiyun 159*4882a593Smuzhiyun #define OCRDMA_EQ_ID_MASK 0x1FF /* bits 0 - 8 */ 160*4882a593Smuzhiyun #define OCRDMA_EQ_ID_EXT_MASK 0x3e00 /* bits 9-13 */ 161*4882a593Smuzhiyun #define OCRDMA_EQ_ID_EXT_MASK_SHIFT 2 /* qid bits 9-13 at 11-15 */ 162*4882a593Smuzhiyun 163*4882a593Smuzhiyun /* Clear the interrupt for this eq */ 164*4882a593Smuzhiyun #define OCRDMA_EQ_CLR_SHIFT 9 /* bit 9 */ 165*4882a593Smuzhiyun /* Must be 1 */ 166*4882a593Smuzhiyun #define OCRDMA_EQ_TYPE_SHIFT 10 /* bit 10 */ 167*4882a593Smuzhiyun /* Number of event entries processed */ 168*4882a593Smuzhiyun #define OCRDMA_NUM_EQE_SHIFT 16 /* bits 16 - 28 */ 169*4882a593Smuzhiyun /* Rearm bit */ 170*4882a593Smuzhiyun #define OCRDMA_REARM_SHIFT 29 /* bit 29 */ 171*4882a593Smuzhiyun 172*4882a593Smuzhiyun #define OCRDMA_MQ_ID_MASK 0x7FF /* bits 0 - 10 */ 173*4882a593Smuzhiyun /* Number of entries posted */ 174*4882a593Smuzhiyun #define OCRDMA_MQ_NUM_MQE_SHIFT 16 /* bits 16 - 29 */ 175*4882a593Smuzhiyun 176*4882a593Smuzhiyun #define OCRDMA_MIN_HPAGE_SIZE 4096 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun #define OCRDMA_MIN_Q_PAGE_SIZE 4096 179*4882a593Smuzhiyun #define OCRDMA_MAX_Q_PAGES 8 180*4882a593Smuzhiyun 181*4882a593Smuzhiyun #define OCRDMA_SLI_ASIC_ID_OFFSET 0x9C 182*4882a593Smuzhiyun #define OCRDMA_SLI_ASIC_REV_MASK 0x000000FF 183*4882a593Smuzhiyun #define OCRDMA_SLI_ASIC_GEN_NUM_MASK 0x0000FF00 184*4882a593Smuzhiyun #define OCRDMA_SLI_ASIC_GEN_NUM_SHIFT 0x08 185*4882a593Smuzhiyun /* 186*4882a593Smuzhiyun # 0: 4K Bytes 187*4882a593Smuzhiyun # 1: 8K Bytes 188*4882a593Smuzhiyun # 2: 16K Bytes 189*4882a593Smuzhiyun # 3: 32K Bytes 190*4882a593Smuzhiyun # 4: 64K Bytes 191*4882a593Smuzhiyun # 5: 128K Bytes 192*4882a593Smuzhiyun # 6: 256K Bytes 193*4882a593Smuzhiyun # 7: 512K Bytes 194*4882a593Smuzhiyun */ 195*4882a593Smuzhiyun #define OCRDMA_MAX_Q_PAGE_SIZE_CNT 8 196*4882a593Smuzhiyun #define OCRDMA_Q_PAGE_BASE_SIZE (OCRDMA_MIN_Q_PAGE_SIZE * OCRDMA_MAX_Q_PAGES) 197*4882a593Smuzhiyun 198*4882a593Smuzhiyun #define MAX_OCRDMA_QP_PAGES 8 199*4882a593Smuzhiyun #define OCRDMA_MAX_WQE_MEM_SIZE (MAX_OCRDMA_QP_PAGES * OCRDMA_MIN_HQ_PAGE_SIZE) 200*4882a593Smuzhiyun 201*4882a593Smuzhiyun #define OCRDMA_CREATE_CQ_MAX_PAGES 4 202*4882a593Smuzhiyun #define OCRDMA_DPP_CQE_SIZE 4 203*4882a593Smuzhiyun 204*4882a593Smuzhiyun #define OCRDMA_GEN2_MAX_CQE 1024 205*4882a593Smuzhiyun #define OCRDMA_GEN2_CQ_PAGE_SIZE 4096 206*4882a593Smuzhiyun #define OCRDMA_GEN2_WQE_SIZE 256 207*4882a593Smuzhiyun #define OCRDMA_MAX_CQE 4095 208*4882a593Smuzhiyun #define OCRDMA_CQ_PAGE_SIZE 16384 209*4882a593Smuzhiyun #define OCRDMA_WQE_SIZE 128 210*4882a593Smuzhiyun #define OCRDMA_WQE_STRIDE 8 211*4882a593Smuzhiyun #define OCRDMA_WQE_ALIGN_BYTES 16 212*4882a593Smuzhiyun 213*4882a593Smuzhiyun #define MAX_OCRDMA_SRQ_PAGES MAX_OCRDMA_QP_PAGES 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun enum { 216*4882a593Smuzhiyun OCRDMA_MCH_OPCODE_SHIFT = 0, 217*4882a593Smuzhiyun OCRDMA_MCH_OPCODE_MASK = 0xFF, 218*4882a593Smuzhiyun OCRDMA_MCH_SUBSYS_SHIFT = 8, 219*4882a593Smuzhiyun OCRDMA_MCH_SUBSYS_MASK = 0xFF00 220*4882a593Smuzhiyun }; 221*4882a593Smuzhiyun 222*4882a593Smuzhiyun /* mailbox cmd header */ 223*4882a593Smuzhiyun struct ocrdma_mbx_hdr { 224*4882a593Smuzhiyun u32 subsys_op; 225*4882a593Smuzhiyun u32 timeout; /* in seconds */ 226*4882a593Smuzhiyun u32 cmd_len; 227*4882a593Smuzhiyun u32 rsvd_version; 228*4882a593Smuzhiyun }; 229*4882a593Smuzhiyun 230*4882a593Smuzhiyun enum { 231*4882a593Smuzhiyun OCRDMA_MBX_RSP_OPCODE_SHIFT = 0, 232*4882a593Smuzhiyun OCRDMA_MBX_RSP_OPCODE_MASK = 0xFF, 233*4882a593Smuzhiyun OCRDMA_MBX_RSP_SUBSYS_SHIFT = 8, 234*4882a593Smuzhiyun OCRDMA_MBX_RSP_SUBSYS_MASK = 0xFF << OCRDMA_MBX_RSP_SUBSYS_SHIFT, 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun OCRDMA_MBX_RSP_STATUS_SHIFT = 0, 237*4882a593Smuzhiyun OCRDMA_MBX_RSP_STATUS_MASK = 0xFF, 238*4882a593Smuzhiyun OCRDMA_MBX_RSP_ASTATUS_SHIFT = 8, 239*4882a593Smuzhiyun OCRDMA_MBX_RSP_ASTATUS_MASK = 0xFF << OCRDMA_MBX_RSP_ASTATUS_SHIFT 240*4882a593Smuzhiyun }; 241*4882a593Smuzhiyun 242*4882a593Smuzhiyun /* mailbox cmd response */ 243*4882a593Smuzhiyun struct ocrdma_mbx_rsp { 244*4882a593Smuzhiyun u32 subsys_op; 245*4882a593Smuzhiyun u32 status; 246*4882a593Smuzhiyun u32 rsp_len; 247*4882a593Smuzhiyun u32 add_rsp_len; 248*4882a593Smuzhiyun }; 249*4882a593Smuzhiyun 250*4882a593Smuzhiyun enum { 251*4882a593Smuzhiyun OCRDMA_MQE_EMBEDDED = 1, 252*4882a593Smuzhiyun OCRDMA_MQE_NONEMBEDDED = 0 253*4882a593Smuzhiyun }; 254*4882a593Smuzhiyun 255*4882a593Smuzhiyun struct ocrdma_mqe_sge { 256*4882a593Smuzhiyun u32 pa_lo; 257*4882a593Smuzhiyun u32 pa_hi; 258*4882a593Smuzhiyun u32 len; 259*4882a593Smuzhiyun }; 260*4882a593Smuzhiyun 261*4882a593Smuzhiyun enum { 262*4882a593Smuzhiyun OCRDMA_MQE_HDR_EMB_SHIFT = 0, 263*4882a593Smuzhiyun OCRDMA_MQE_HDR_EMB_MASK = BIT(0), 264*4882a593Smuzhiyun OCRDMA_MQE_HDR_SGE_CNT_SHIFT = 3, 265*4882a593Smuzhiyun OCRDMA_MQE_HDR_SGE_CNT_MASK = 0x1F << OCRDMA_MQE_HDR_SGE_CNT_SHIFT, 266*4882a593Smuzhiyun OCRDMA_MQE_HDR_SPECIAL_SHIFT = 24, 267*4882a593Smuzhiyun OCRDMA_MQE_HDR_SPECIAL_MASK = 0xFF << OCRDMA_MQE_HDR_SPECIAL_SHIFT 268*4882a593Smuzhiyun }; 269*4882a593Smuzhiyun 270*4882a593Smuzhiyun struct ocrdma_mqe_hdr { 271*4882a593Smuzhiyun u32 spcl_sge_cnt_emb; 272*4882a593Smuzhiyun u32 pyld_len; 273*4882a593Smuzhiyun u32 tag_lo; 274*4882a593Smuzhiyun u32 tag_hi; 275*4882a593Smuzhiyun u32 rsvd3; 276*4882a593Smuzhiyun }; 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun struct ocrdma_mqe_emb_cmd { 279*4882a593Smuzhiyun struct ocrdma_mbx_hdr mch; 280*4882a593Smuzhiyun u8 pyld[220]; 281*4882a593Smuzhiyun }; 282*4882a593Smuzhiyun 283*4882a593Smuzhiyun struct ocrdma_mqe { 284*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 285*4882a593Smuzhiyun union { 286*4882a593Smuzhiyun struct ocrdma_mqe_emb_cmd emb_req; 287*4882a593Smuzhiyun struct { 288*4882a593Smuzhiyun struct ocrdma_mqe_sge sge[19]; 289*4882a593Smuzhiyun } nonemb_req; 290*4882a593Smuzhiyun u8 cmd[236]; 291*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 292*4882a593Smuzhiyun } u; 293*4882a593Smuzhiyun }; 294*4882a593Smuzhiyun 295*4882a593Smuzhiyun #define OCRDMA_EQ_LEN 4096 296*4882a593Smuzhiyun #define OCRDMA_MQ_CQ_LEN 256 297*4882a593Smuzhiyun #define OCRDMA_MQ_LEN 128 298*4882a593Smuzhiyun 299*4882a593Smuzhiyun #define PAGE_SHIFT_4K 12 300*4882a593Smuzhiyun #define PAGE_SIZE_4K (1 << PAGE_SHIFT_4K) 301*4882a593Smuzhiyun 302*4882a593Smuzhiyun /* Returns number of pages spanned by the data starting at the given addr */ 303*4882a593Smuzhiyun #define PAGES_4K_SPANNED(_address, size) \ 304*4882a593Smuzhiyun ((u32)((((size_t)(_address) & (PAGE_SIZE_4K - 1)) + \ 305*4882a593Smuzhiyun (size) + (PAGE_SIZE_4K - 1)) >> PAGE_SHIFT_4K)) 306*4882a593Smuzhiyun 307*4882a593Smuzhiyun struct ocrdma_delete_q_req { 308*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 309*4882a593Smuzhiyun u32 id; 310*4882a593Smuzhiyun }; 311*4882a593Smuzhiyun 312*4882a593Smuzhiyun struct ocrdma_pa { 313*4882a593Smuzhiyun u32 lo; 314*4882a593Smuzhiyun u32 hi; 315*4882a593Smuzhiyun }; 316*4882a593Smuzhiyun 317*4882a593Smuzhiyun #define MAX_OCRDMA_EQ_PAGES 8 318*4882a593Smuzhiyun struct ocrdma_create_eq_req { 319*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 320*4882a593Smuzhiyun u32 num_pages; 321*4882a593Smuzhiyun u32 valid; 322*4882a593Smuzhiyun u32 cnt; 323*4882a593Smuzhiyun u32 delay; 324*4882a593Smuzhiyun u32 rsvd; 325*4882a593Smuzhiyun struct ocrdma_pa pa[MAX_OCRDMA_EQ_PAGES]; 326*4882a593Smuzhiyun }; 327*4882a593Smuzhiyun 328*4882a593Smuzhiyun enum { 329*4882a593Smuzhiyun OCRDMA_CREATE_EQ_VALID = BIT(29), 330*4882a593Smuzhiyun OCRDMA_CREATE_EQ_CNT_SHIFT = 26, 331*4882a593Smuzhiyun OCRDMA_CREATE_CQ_DELAY_SHIFT = 13, 332*4882a593Smuzhiyun }; 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun struct ocrdma_create_eq_rsp { 335*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 336*4882a593Smuzhiyun u32 vector_eqid; 337*4882a593Smuzhiyun }; 338*4882a593Smuzhiyun 339*4882a593Smuzhiyun #define OCRDMA_EQ_MINOR_OTHER 0x1 340*4882a593Smuzhiyun 341*4882a593Smuzhiyun struct ocrmda_set_eqd { 342*4882a593Smuzhiyun u32 eq_id; 343*4882a593Smuzhiyun u32 phase; 344*4882a593Smuzhiyun u32 delay_multiplier; 345*4882a593Smuzhiyun }; 346*4882a593Smuzhiyun 347*4882a593Smuzhiyun struct ocrdma_modify_eqd_cmd { 348*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 349*4882a593Smuzhiyun u32 num_eq; 350*4882a593Smuzhiyun struct ocrmda_set_eqd set_eqd[8]; 351*4882a593Smuzhiyun } __packed; 352*4882a593Smuzhiyun 353*4882a593Smuzhiyun struct ocrdma_modify_eqd_req { 354*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 355*4882a593Smuzhiyun struct ocrdma_modify_eqd_cmd cmd; 356*4882a593Smuzhiyun }; 357*4882a593Smuzhiyun 358*4882a593Smuzhiyun 359*4882a593Smuzhiyun struct ocrdma_modify_eq_delay_rsp { 360*4882a593Smuzhiyun struct ocrdma_mbx_rsp hdr; 361*4882a593Smuzhiyun u32 rsvd0; 362*4882a593Smuzhiyun } __packed; 363*4882a593Smuzhiyun 364*4882a593Smuzhiyun enum { 365*4882a593Smuzhiyun OCRDMA_MCQE_STATUS_SHIFT = 0, 366*4882a593Smuzhiyun OCRDMA_MCQE_STATUS_MASK = 0xFFFF, 367*4882a593Smuzhiyun OCRDMA_MCQE_ESTATUS_SHIFT = 16, 368*4882a593Smuzhiyun OCRDMA_MCQE_ESTATUS_MASK = 0xFFFF << OCRDMA_MCQE_ESTATUS_SHIFT, 369*4882a593Smuzhiyun OCRDMA_MCQE_CONS_SHIFT = 27, 370*4882a593Smuzhiyun OCRDMA_MCQE_CONS_MASK = BIT(27), 371*4882a593Smuzhiyun OCRDMA_MCQE_CMPL_SHIFT = 28, 372*4882a593Smuzhiyun OCRDMA_MCQE_CMPL_MASK = BIT(28), 373*4882a593Smuzhiyun OCRDMA_MCQE_AE_SHIFT = 30, 374*4882a593Smuzhiyun OCRDMA_MCQE_AE_MASK = BIT(30), 375*4882a593Smuzhiyun OCRDMA_MCQE_VALID_SHIFT = 31, 376*4882a593Smuzhiyun OCRDMA_MCQE_VALID_MASK = BIT(31) 377*4882a593Smuzhiyun }; 378*4882a593Smuzhiyun 379*4882a593Smuzhiyun struct ocrdma_mcqe { 380*4882a593Smuzhiyun u32 status; 381*4882a593Smuzhiyun u32 tag_lo; 382*4882a593Smuzhiyun u32 tag_hi; 383*4882a593Smuzhiyun u32 valid_ae_cmpl_cons; 384*4882a593Smuzhiyun }; 385*4882a593Smuzhiyun 386*4882a593Smuzhiyun enum { 387*4882a593Smuzhiyun OCRDMA_AE_MCQE_QPVALID = BIT(31), 388*4882a593Smuzhiyun OCRDMA_AE_MCQE_QPID_MASK = 0xFFFF, 389*4882a593Smuzhiyun 390*4882a593Smuzhiyun OCRDMA_AE_MCQE_CQVALID = BIT(31), 391*4882a593Smuzhiyun OCRDMA_AE_MCQE_CQID_MASK = 0xFFFF, 392*4882a593Smuzhiyun OCRDMA_AE_MCQE_VALID = BIT(31), 393*4882a593Smuzhiyun OCRDMA_AE_MCQE_AE = BIT(30), 394*4882a593Smuzhiyun OCRDMA_AE_MCQE_EVENT_TYPE_SHIFT = 16, 395*4882a593Smuzhiyun OCRDMA_AE_MCQE_EVENT_TYPE_MASK = 396*4882a593Smuzhiyun 0xFF << OCRDMA_AE_MCQE_EVENT_TYPE_SHIFT, 397*4882a593Smuzhiyun OCRDMA_AE_MCQE_EVENT_CODE_SHIFT = 8, 398*4882a593Smuzhiyun OCRDMA_AE_MCQE_EVENT_CODE_MASK = 399*4882a593Smuzhiyun 0xFF << OCRDMA_AE_MCQE_EVENT_CODE_SHIFT 400*4882a593Smuzhiyun }; 401*4882a593Smuzhiyun struct ocrdma_ae_mcqe { 402*4882a593Smuzhiyun u32 qpvalid_qpid; 403*4882a593Smuzhiyun u32 cqvalid_cqid; 404*4882a593Smuzhiyun u32 evt_tag; 405*4882a593Smuzhiyun u32 valid_ae_event; 406*4882a593Smuzhiyun }; 407*4882a593Smuzhiyun 408*4882a593Smuzhiyun enum { 409*4882a593Smuzhiyun OCRDMA_AE_PVID_MCQE_ENABLED_SHIFT = 0, 410*4882a593Smuzhiyun OCRDMA_AE_PVID_MCQE_ENABLED_MASK = 0xFF, 411*4882a593Smuzhiyun OCRDMA_AE_PVID_MCQE_TAG_SHIFT = 16, 412*4882a593Smuzhiyun OCRDMA_AE_PVID_MCQE_TAG_MASK = 0xFFFF << OCRDMA_AE_PVID_MCQE_TAG_SHIFT 413*4882a593Smuzhiyun }; 414*4882a593Smuzhiyun 415*4882a593Smuzhiyun struct ocrdma_ae_pvid_mcqe { 416*4882a593Smuzhiyun u32 tag_enabled; 417*4882a593Smuzhiyun u32 event_tag; 418*4882a593Smuzhiyun u32 rsvd1; 419*4882a593Smuzhiyun u32 rsvd2; 420*4882a593Smuzhiyun }; 421*4882a593Smuzhiyun 422*4882a593Smuzhiyun enum { 423*4882a593Smuzhiyun OCRDMA_AE_MPA_MCQE_REQ_ID_SHIFT = 16, 424*4882a593Smuzhiyun OCRDMA_AE_MPA_MCQE_REQ_ID_MASK = 0xFFFF << 425*4882a593Smuzhiyun OCRDMA_AE_MPA_MCQE_REQ_ID_SHIFT, 426*4882a593Smuzhiyun 427*4882a593Smuzhiyun OCRDMA_AE_MPA_MCQE_EVENT_CODE_SHIFT = 8, 428*4882a593Smuzhiyun OCRDMA_AE_MPA_MCQE_EVENT_CODE_MASK = 0xFF << 429*4882a593Smuzhiyun OCRDMA_AE_MPA_MCQE_EVENT_CODE_SHIFT, 430*4882a593Smuzhiyun OCRDMA_AE_MPA_MCQE_EVENT_TYPE_SHIFT = 16, 431*4882a593Smuzhiyun OCRDMA_AE_MPA_MCQE_EVENT_TYPE_MASK = 0xFF << 432*4882a593Smuzhiyun OCRDMA_AE_MPA_MCQE_EVENT_TYPE_SHIFT, 433*4882a593Smuzhiyun OCRDMA_AE_MPA_MCQE_EVENT_AE_SHIFT = 30, 434*4882a593Smuzhiyun OCRDMA_AE_MPA_MCQE_EVENT_AE_MASK = BIT(30), 435*4882a593Smuzhiyun OCRDMA_AE_MPA_MCQE_EVENT_VALID_SHIFT = 31, 436*4882a593Smuzhiyun OCRDMA_AE_MPA_MCQE_EVENT_VALID_MASK = BIT(31) 437*4882a593Smuzhiyun }; 438*4882a593Smuzhiyun 439*4882a593Smuzhiyun struct ocrdma_ae_mpa_mcqe { 440*4882a593Smuzhiyun u32 req_id; 441*4882a593Smuzhiyun u32 w1; 442*4882a593Smuzhiyun u32 w2; 443*4882a593Smuzhiyun u32 valid_ae_event; 444*4882a593Smuzhiyun }; 445*4882a593Smuzhiyun 446*4882a593Smuzhiyun enum { 447*4882a593Smuzhiyun OCRDMA_AE_QP_MCQE_NEW_QP_STATE_SHIFT = 0, 448*4882a593Smuzhiyun OCRDMA_AE_QP_MCQE_NEW_QP_STATE_MASK = 0xFFFF, 449*4882a593Smuzhiyun OCRDMA_AE_QP_MCQE_QP_ID_SHIFT = 16, 450*4882a593Smuzhiyun OCRDMA_AE_QP_MCQE_QP_ID_MASK = 0xFFFF << 451*4882a593Smuzhiyun OCRDMA_AE_QP_MCQE_QP_ID_SHIFT, 452*4882a593Smuzhiyun 453*4882a593Smuzhiyun OCRDMA_AE_QP_MCQE_EVENT_CODE_SHIFT = 8, 454*4882a593Smuzhiyun OCRDMA_AE_QP_MCQE_EVENT_CODE_MASK = 0xFF << 455*4882a593Smuzhiyun OCRDMA_AE_QP_MCQE_EVENT_CODE_SHIFT, 456*4882a593Smuzhiyun OCRDMA_AE_QP_MCQE_EVENT_TYPE_SHIFT = 16, 457*4882a593Smuzhiyun OCRDMA_AE_QP_MCQE_EVENT_TYPE_MASK = 0xFF << 458*4882a593Smuzhiyun OCRDMA_AE_QP_MCQE_EVENT_TYPE_SHIFT, 459*4882a593Smuzhiyun OCRDMA_AE_QP_MCQE_EVENT_AE_SHIFT = 30, 460*4882a593Smuzhiyun OCRDMA_AE_QP_MCQE_EVENT_AE_MASK = BIT(30), 461*4882a593Smuzhiyun OCRDMA_AE_QP_MCQE_EVENT_VALID_SHIFT = 31, 462*4882a593Smuzhiyun OCRDMA_AE_QP_MCQE_EVENT_VALID_MASK = BIT(31) 463*4882a593Smuzhiyun }; 464*4882a593Smuzhiyun 465*4882a593Smuzhiyun struct ocrdma_ae_qp_mcqe { 466*4882a593Smuzhiyun u32 qp_id_state; 467*4882a593Smuzhiyun u32 w1; 468*4882a593Smuzhiyun u32 w2; 469*4882a593Smuzhiyun u32 valid_ae_event; 470*4882a593Smuzhiyun }; 471*4882a593Smuzhiyun 472*4882a593Smuzhiyun enum ocrdma_async_event_code { 473*4882a593Smuzhiyun OCRDMA_ASYNC_LINK_EVE_CODE = 0x01, 474*4882a593Smuzhiyun OCRDMA_ASYNC_GRP5_EVE_CODE = 0x05, 475*4882a593Smuzhiyun OCRDMA_ASYNC_RDMA_EVE_CODE = 0x14 476*4882a593Smuzhiyun }; 477*4882a593Smuzhiyun 478*4882a593Smuzhiyun enum ocrdma_async_grp5_events { 479*4882a593Smuzhiyun OCRDMA_ASYNC_EVENT_QOS_VALUE = 0x01, 480*4882a593Smuzhiyun OCRDMA_ASYNC_EVENT_COS_VALUE = 0x02, 481*4882a593Smuzhiyun OCRDMA_ASYNC_EVENT_PVID_STATE = 0x03 482*4882a593Smuzhiyun }; 483*4882a593Smuzhiyun 484*4882a593Smuzhiyun enum OCRDMA_ASYNC_EVENT_TYPE { 485*4882a593Smuzhiyun OCRDMA_CQ_ERROR = 0x00, 486*4882a593Smuzhiyun OCRDMA_CQ_OVERRUN_ERROR = 0x01, 487*4882a593Smuzhiyun OCRDMA_CQ_QPCAT_ERROR = 0x02, 488*4882a593Smuzhiyun OCRDMA_QP_ACCESS_ERROR = 0x03, 489*4882a593Smuzhiyun OCRDMA_QP_COMM_EST_EVENT = 0x04, 490*4882a593Smuzhiyun OCRDMA_SQ_DRAINED_EVENT = 0x05, 491*4882a593Smuzhiyun OCRDMA_DEVICE_FATAL_EVENT = 0x08, 492*4882a593Smuzhiyun OCRDMA_SRQCAT_ERROR = 0x0E, 493*4882a593Smuzhiyun OCRDMA_SRQ_LIMIT_EVENT = 0x0F, 494*4882a593Smuzhiyun OCRDMA_QP_LAST_WQE_EVENT = 0x10, 495*4882a593Smuzhiyun 496*4882a593Smuzhiyun OCRDMA_MAX_ASYNC_ERRORS 497*4882a593Smuzhiyun }; 498*4882a593Smuzhiyun 499*4882a593Smuzhiyun struct ocrdma_ae_lnkst_mcqe { 500*4882a593Smuzhiyun u32 speed_state_ptn; 501*4882a593Smuzhiyun u32 qos_reason_falut; 502*4882a593Smuzhiyun u32 evt_tag; 503*4882a593Smuzhiyun u32 valid_ae_event; 504*4882a593Smuzhiyun }; 505*4882a593Smuzhiyun 506*4882a593Smuzhiyun enum { 507*4882a593Smuzhiyun OCRDMA_AE_LSC_PORT_NUM_MASK = 0x3F, 508*4882a593Smuzhiyun OCRDMA_AE_LSC_PT_SHIFT = 0x06, 509*4882a593Smuzhiyun OCRDMA_AE_LSC_PT_MASK = (0x03 << 510*4882a593Smuzhiyun OCRDMA_AE_LSC_PT_SHIFT), 511*4882a593Smuzhiyun OCRDMA_AE_LSC_LS_SHIFT = 0x08, 512*4882a593Smuzhiyun OCRDMA_AE_LSC_LS_MASK = (0xFF << 513*4882a593Smuzhiyun OCRDMA_AE_LSC_LS_SHIFT), 514*4882a593Smuzhiyun OCRDMA_AE_LSC_LD_SHIFT = 0x10, 515*4882a593Smuzhiyun OCRDMA_AE_LSC_LD_MASK = (0xFF << 516*4882a593Smuzhiyun OCRDMA_AE_LSC_LD_SHIFT), 517*4882a593Smuzhiyun OCRDMA_AE_LSC_PPS_SHIFT = 0x18, 518*4882a593Smuzhiyun OCRDMA_AE_LSC_PPS_MASK = (0xFF << 519*4882a593Smuzhiyun OCRDMA_AE_LSC_PPS_SHIFT), 520*4882a593Smuzhiyun OCRDMA_AE_LSC_PPF_MASK = 0xFF, 521*4882a593Smuzhiyun OCRDMA_AE_LSC_ER_SHIFT = 0x08, 522*4882a593Smuzhiyun OCRDMA_AE_LSC_ER_MASK = (0xFF << 523*4882a593Smuzhiyun OCRDMA_AE_LSC_ER_SHIFT), 524*4882a593Smuzhiyun OCRDMA_AE_LSC_QOS_SHIFT = 0x10, 525*4882a593Smuzhiyun OCRDMA_AE_LSC_QOS_MASK = (0xFFFF << 526*4882a593Smuzhiyun OCRDMA_AE_LSC_QOS_SHIFT) 527*4882a593Smuzhiyun }; 528*4882a593Smuzhiyun 529*4882a593Smuzhiyun enum { 530*4882a593Smuzhiyun OCRDMA_AE_LSC_PLINK_DOWN = 0x00, 531*4882a593Smuzhiyun OCRDMA_AE_LSC_PLINK_UP = 0x01, 532*4882a593Smuzhiyun OCRDMA_AE_LSC_LLINK_DOWN = 0x02, 533*4882a593Smuzhiyun OCRDMA_AE_LSC_LLINK_MASK = 0x02, 534*4882a593Smuzhiyun OCRDMA_AE_LSC_LLINK_UP = 0x03 535*4882a593Smuzhiyun }; 536*4882a593Smuzhiyun 537*4882a593Smuzhiyun /* mailbox command request and responses */ 538*4882a593Smuzhiyun enum { 539*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_CQ_OVERFLOW_SHIFT = 2, 540*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_CQ_OVERFLOW_MASK = BIT(2), 541*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_SRQ_SUPPORTED_SHIFT = 3, 542*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_SRQ_SUPPORTED_MASK = BIT(3), 543*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_QP_SHIFT = 8, 544*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_QP_MASK = 0xFFFFFF << 545*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_QP_SHIFT, 546*4882a593Smuzhiyun 547*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_PD_SHIFT = 16, 548*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_PD_MASK = 0xFFFF << 549*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_PD_SHIFT, 550*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_CA_ACK_DELAY_SHIFT = 8, 551*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_CA_ACK_DELAY_MASK = 0xFF << 552*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_CA_ACK_DELAY_SHIFT, 553*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_L3_TYPE_SHIFT = 3, 554*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_L3_TYPE_MASK = 0x18, 555*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_SEND_SGE_SHIFT = 0, 556*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_SEND_SGE_MASK = 0xFFFF, 557*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_RECV_SGE_SHIFT = 16, 558*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_RECV_SGE_MASK = 0xFFFF << 559*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_RECV_SGE_SHIFT, 560*4882a593Smuzhiyun 561*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_ORD_PER_QP_SHIFT = 0, 562*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_ORD_PER_QP_MASK = 0xFFFF, 563*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_IRD_PER_QP_SHIFT = 16, 564*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_IRD_PER_QP_MASK = 0xFFFF << 565*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_IRD_PER_QP_SHIFT, 566*4882a593Smuzhiyun 567*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_WQE_SIZE_OFFSET = 24, 568*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_WQE_SIZE_MASK = 0xFF << 569*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_WQE_SIZE_OFFSET, 570*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_RQE_SIZE_OFFSET = 16, 571*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_RQE_SIZE_MASK = 0xFF << 572*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_RQE_SIZE_OFFSET, 573*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_DPP_CQES_OFFSET = 0, 574*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_DPP_CQES_MASK = 0xFFFF << 575*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_DPP_CQES_OFFSET, 576*4882a593Smuzhiyun 577*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_SRQ_OFFSET = 16, 578*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_SRQ_MASK = 0xFFFF << 579*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_SRQ_OFFSET, 580*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_RPIR_QPS_OFFSET = 0, 581*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_RPIR_QPS_MASK = 0xFFFF << 582*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_RPIR_QPS_OFFSET, 583*4882a593Smuzhiyun 584*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_DPP_PDS_OFFSET = 16, 585*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_DPP_PDS_MASK = 0xFFFF << 586*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_DPP_PDS_OFFSET, 587*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_DPP_CREDITS_OFFSET = 0, 588*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_DPP_CREDITS_MASK = 0xFFFF << 589*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_DPP_CREDITS_OFFSET, 590*4882a593Smuzhiyun 591*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_DPP_QPS_OFFSET = 0, 592*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_DPP_QPS_MASK = 0xFFFF << 593*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_DPP_QPS_OFFSET, 594*4882a593Smuzhiyun 595*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_WQES_PER_WQ_OFFSET = 16, 596*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_WQES_PER_WQ_MASK = 0xFFFF << 597*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_WQES_PER_WQ_OFFSET, 598*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_RQES_PER_RQ_OFFSET = 0, 599*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_RQES_PER_RQ_MASK = 0xFFFF << 600*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_RQES_PER_RQ_OFFSET, 601*4882a593Smuzhiyun 602*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_CQ_OFFSET = 16, 603*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_CQ_MASK = 0xFFFF << 604*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_CQ_OFFSET, 605*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_CQES_PER_CQ_OFFSET = 0, 606*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_CQES_PER_CQ_MASK = 0xFFFF << 607*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_CQES_PER_CQ_OFFSET, 608*4882a593Smuzhiyun 609*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_SRQ_RQE_OFFSET = 16, 610*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_SRQ_RQE_MASK = 0xFFFF << 611*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_SRQ_RQE_OFFSET, 612*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_SRQ_SGE_OFFSET = 0, 613*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_SRQ_SGE_MASK = 0xFFFF << 614*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_SRQ_SGE_OFFSET, 615*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_RD_SGE_SHIFT = 0, 616*4882a593Smuzhiyun OCRDMA_MBX_QUERY_CFG_MAX_RD_SGE_MASK = 0xFFFF, 617*4882a593Smuzhiyun }; 618*4882a593Smuzhiyun 619*4882a593Smuzhiyun struct ocrdma_mbx_query_config { 620*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 621*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 622*4882a593Smuzhiyun u32 qp_srq_cq_ird_ord; 623*4882a593Smuzhiyun u32 max_pd_ca_ack_delay; 624*4882a593Smuzhiyun u32 max_recv_send_sge; 625*4882a593Smuzhiyun u32 max_ird_ord_per_qp; 626*4882a593Smuzhiyun u32 max_shared_ird_ord; 627*4882a593Smuzhiyun u32 max_mr; 628*4882a593Smuzhiyun u32 max_mr_size_hi; 629*4882a593Smuzhiyun u32 max_mr_size_lo; 630*4882a593Smuzhiyun u32 max_num_mr_pbl; 631*4882a593Smuzhiyun u32 max_mw; 632*4882a593Smuzhiyun u32 max_fmr; 633*4882a593Smuzhiyun u32 max_pages_per_frmr; 634*4882a593Smuzhiyun u32 max_mcast_group; 635*4882a593Smuzhiyun u32 max_mcast_qp_attach; 636*4882a593Smuzhiyun u32 max_total_mcast_qp_attach; 637*4882a593Smuzhiyun u32 wqe_rqe_stride_max_dpp_cqs; 638*4882a593Smuzhiyun u32 max_srq_rpir_qps; 639*4882a593Smuzhiyun u32 max_dpp_pds_credits; 640*4882a593Smuzhiyun u32 max_dpp_credits_pds_per_pd; 641*4882a593Smuzhiyun u32 max_wqes_rqes_per_q; 642*4882a593Smuzhiyun u32 max_cq_cqes_per_cq; 643*4882a593Smuzhiyun u32 max_srq_rqe_sge; 644*4882a593Smuzhiyun u32 max_wr_rd_sge; 645*4882a593Smuzhiyun u32 ird_pgsz_num_pages; 646*4882a593Smuzhiyun }; 647*4882a593Smuzhiyun 648*4882a593Smuzhiyun struct ocrdma_fw_ver_rsp { 649*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 650*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 651*4882a593Smuzhiyun 652*4882a593Smuzhiyun u8 running_ver[32]; 653*4882a593Smuzhiyun }; 654*4882a593Smuzhiyun 655*4882a593Smuzhiyun struct ocrdma_fw_conf_rsp { 656*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 657*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 658*4882a593Smuzhiyun 659*4882a593Smuzhiyun u32 config_num; 660*4882a593Smuzhiyun u32 asic_revision; 661*4882a593Smuzhiyun u32 phy_port; 662*4882a593Smuzhiyun u32 fn_mode; 663*4882a593Smuzhiyun struct { 664*4882a593Smuzhiyun u32 mode; 665*4882a593Smuzhiyun u32 nic_wqid_base; 666*4882a593Smuzhiyun u32 nic_wq_tot; 667*4882a593Smuzhiyun u32 prot_wqid_base; 668*4882a593Smuzhiyun u32 prot_wq_tot; 669*4882a593Smuzhiyun u32 prot_rqid_base; 670*4882a593Smuzhiyun u32 prot_rqid_tot; 671*4882a593Smuzhiyun u32 rsvd[6]; 672*4882a593Smuzhiyun } ulp[2]; 673*4882a593Smuzhiyun u32 fn_capabilities; 674*4882a593Smuzhiyun u32 rsvd1; 675*4882a593Smuzhiyun u32 rsvd2; 676*4882a593Smuzhiyun u32 base_eqid; 677*4882a593Smuzhiyun u32 max_eq; 678*4882a593Smuzhiyun 679*4882a593Smuzhiyun }; 680*4882a593Smuzhiyun 681*4882a593Smuzhiyun enum { 682*4882a593Smuzhiyun OCRDMA_FN_MODE_RDMA = 0x4 683*4882a593Smuzhiyun }; 684*4882a593Smuzhiyun 685*4882a593Smuzhiyun enum { 686*4882a593Smuzhiyun OCRDMA_IF_TYPE_MASK = 0xFFFF0000, 687*4882a593Smuzhiyun OCRDMA_IF_TYPE_SHIFT = 0x10, 688*4882a593Smuzhiyun OCRDMA_PHY_TYPE_MASK = 0x0000FFFF, 689*4882a593Smuzhiyun OCRDMA_FUTURE_DETAILS_MASK = 0xFFFF0000, 690*4882a593Smuzhiyun OCRDMA_FUTURE_DETAILS_SHIFT = 0x10, 691*4882a593Smuzhiyun OCRDMA_EX_PHY_DETAILS_MASK = 0x0000FFFF, 692*4882a593Smuzhiyun OCRDMA_FSPEED_SUPP_MASK = 0xFFFF0000, 693*4882a593Smuzhiyun OCRDMA_FSPEED_SUPP_SHIFT = 0x10, 694*4882a593Smuzhiyun OCRDMA_ASPEED_SUPP_MASK = 0x0000FFFF 695*4882a593Smuzhiyun }; 696*4882a593Smuzhiyun 697*4882a593Smuzhiyun struct ocrdma_get_phy_info_rsp { 698*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 699*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 700*4882a593Smuzhiyun 701*4882a593Smuzhiyun u32 ityp_ptyp; 702*4882a593Smuzhiyun u32 misc_params; 703*4882a593Smuzhiyun u32 ftrdtl_exphydtl; 704*4882a593Smuzhiyun u32 fspeed_aspeed; 705*4882a593Smuzhiyun u32 future_use[2]; 706*4882a593Smuzhiyun }; 707*4882a593Smuzhiyun 708*4882a593Smuzhiyun enum { 709*4882a593Smuzhiyun OCRDMA_PHY_SPEED_ZERO = 0x0, 710*4882a593Smuzhiyun OCRDMA_PHY_SPEED_10MBPS = 0x1, 711*4882a593Smuzhiyun OCRDMA_PHY_SPEED_100MBPS = 0x2, 712*4882a593Smuzhiyun OCRDMA_PHY_SPEED_1GBPS = 0x4, 713*4882a593Smuzhiyun OCRDMA_PHY_SPEED_10GBPS = 0x8, 714*4882a593Smuzhiyun OCRDMA_PHY_SPEED_40GBPS = 0x20 715*4882a593Smuzhiyun }; 716*4882a593Smuzhiyun 717*4882a593Smuzhiyun enum { 718*4882a593Smuzhiyun OCRDMA_PORT_NUM_MASK = 0x3F, 719*4882a593Smuzhiyun OCRDMA_PT_MASK = 0xC0, 720*4882a593Smuzhiyun OCRDMA_PT_SHIFT = 0x6, 721*4882a593Smuzhiyun OCRDMA_LINK_DUP_MASK = 0x0000FF00, 722*4882a593Smuzhiyun OCRDMA_LINK_DUP_SHIFT = 0x8, 723*4882a593Smuzhiyun OCRDMA_PHY_PS_MASK = 0x00FF0000, 724*4882a593Smuzhiyun OCRDMA_PHY_PS_SHIFT = 0x10, 725*4882a593Smuzhiyun OCRDMA_PHY_PFLT_MASK = 0xFF000000, 726*4882a593Smuzhiyun OCRDMA_PHY_PFLT_SHIFT = 0x18, 727*4882a593Smuzhiyun OCRDMA_QOS_LNKSP_MASK = 0xFFFF0000, 728*4882a593Smuzhiyun OCRDMA_QOS_LNKSP_SHIFT = 0x10, 729*4882a593Smuzhiyun OCRDMA_LINK_ST_MASK = 0x01, 730*4882a593Smuzhiyun OCRDMA_PLFC_MASK = 0x00000400, 731*4882a593Smuzhiyun OCRDMA_PLFC_SHIFT = 0x8, 732*4882a593Smuzhiyun OCRDMA_PLRFC_MASK = 0x00000200, 733*4882a593Smuzhiyun OCRDMA_PLRFC_SHIFT = 0x8, 734*4882a593Smuzhiyun OCRDMA_PLTFC_MASK = 0x00000100, 735*4882a593Smuzhiyun OCRDMA_PLTFC_SHIFT = 0x8 736*4882a593Smuzhiyun }; 737*4882a593Smuzhiyun 738*4882a593Smuzhiyun struct ocrdma_get_link_speed_rsp { 739*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 740*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 741*4882a593Smuzhiyun 742*4882a593Smuzhiyun u32 pflt_pps_ld_pnum; 743*4882a593Smuzhiyun u32 qos_lsp; 744*4882a593Smuzhiyun u32 res_lnk_st; 745*4882a593Smuzhiyun }; 746*4882a593Smuzhiyun 747*4882a593Smuzhiyun enum { 748*4882a593Smuzhiyun OCRDMA_PHYS_LINK_SPEED_ZERO = 0x0, 749*4882a593Smuzhiyun OCRDMA_PHYS_LINK_SPEED_10MBPS = 0x1, 750*4882a593Smuzhiyun OCRDMA_PHYS_LINK_SPEED_100MBPS = 0x2, 751*4882a593Smuzhiyun OCRDMA_PHYS_LINK_SPEED_1GBPS = 0x3, 752*4882a593Smuzhiyun OCRDMA_PHYS_LINK_SPEED_10GBPS = 0x4, 753*4882a593Smuzhiyun OCRDMA_PHYS_LINK_SPEED_20GBPS = 0x5, 754*4882a593Smuzhiyun OCRDMA_PHYS_LINK_SPEED_25GBPS = 0x6, 755*4882a593Smuzhiyun OCRDMA_PHYS_LINK_SPEED_40GBPS = 0x7, 756*4882a593Smuzhiyun OCRDMA_PHYS_LINK_SPEED_100GBPS = 0x8 757*4882a593Smuzhiyun }; 758*4882a593Smuzhiyun 759*4882a593Smuzhiyun enum { 760*4882a593Smuzhiyun OCRDMA_CREATE_CQ_VER2 = 2, 761*4882a593Smuzhiyun OCRDMA_CREATE_CQ_VER3 = 3, 762*4882a593Smuzhiyun 763*4882a593Smuzhiyun OCRDMA_CREATE_CQ_PAGE_CNT_MASK = 0xFFFF, 764*4882a593Smuzhiyun OCRDMA_CREATE_CQ_PAGE_SIZE_SHIFT = 16, 765*4882a593Smuzhiyun OCRDMA_CREATE_CQ_PAGE_SIZE_MASK = 0xFF, 766*4882a593Smuzhiyun 767*4882a593Smuzhiyun OCRDMA_CREATE_CQ_COALESCWM_SHIFT = 12, 768*4882a593Smuzhiyun OCRDMA_CREATE_CQ_COALESCWM_MASK = BIT(13) | BIT(12), 769*4882a593Smuzhiyun OCRDMA_CREATE_CQ_FLAGS_NODELAY = BIT(14), 770*4882a593Smuzhiyun OCRDMA_CREATE_CQ_FLAGS_AUTO_VALID = BIT(15), 771*4882a593Smuzhiyun 772*4882a593Smuzhiyun OCRDMA_CREATE_CQ_EQ_ID_MASK = 0xFFFF, 773*4882a593Smuzhiyun OCRDMA_CREATE_CQ_CQE_COUNT_MASK = 0xFFFF 774*4882a593Smuzhiyun }; 775*4882a593Smuzhiyun 776*4882a593Smuzhiyun enum { 777*4882a593Smuzhiyun OCRDMA_CREATE_CQ_VER0 = 0, 778*4882a593Smuzhiyun OCRDMA_CREATE_CQ_DPP = 1, 779*4882a593Smuzhiyun OCRDMA_CREATE_CQ_TYPE_SHIFT = 24, 780*4882a593Smuzhiyun OCRDMA_CREATE_CQ_EQID_SHIFT = 22, 781*4882a593Smuzhiyun 782*4882a593Smuzhiyun OCRDMA_CREATE_CQ_CNT_SHIFT = 27, 783*4882a593Smuzhiyun OCRDMA_CREATE_CQ_FLAGS_VALID = BIT(29), 784*4882a593Smuzhiyun OCRDMA_CREATE_CQ_FLAGS_EVENTABLE = BIT(31), 785*4882a593Smuzhiyun OCRDMA_CREATE_CQ_DEF_FLAGS = OCRDMA_CREATE_CQ_FLAGS_VALID | 786*4882a593Smuzhiyun OCRDMA_CREATE_CQ_FLAGS_EVENTABLE | 787*4882a593Smuzhiyun OCRDMA_CREATE_CQ_FLAGS_NODELAY 788*4882a593Smuzhiyun }; 789*4882a593Smuzhiyun 790*4882a593Smuzhiyun struct ocrdma_create_cq_cmd { 791*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 792*4882a593Smuzhiyun u32 pgsz_pgcnt; 793*4882a593Smuzhiyun u32 ev_cnt_flags; 794*4882a593Smuzhiyun u32 eqn; 795*4882a593Smuzhiyun u32 pdid_cqecnt; 796*4882a593Smuzhiyun u32 rsvd6; 797*4882a593Smuzhiyun struct ocrdma_pa pa[OCRDMA_CREATE_CQ_MAX_PAGES]; 798*4882a593Smuzhiyun }; 799*4882a593Smuzhiyun 800*4882a593Smuzhiyun struct ocrdma_create_cq { 801*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 802*4882a593Smuzhiyun struct ocrdma_create_cq_cmd cmd; 803*4882a593Smuzhiyun }; 804*4882a593Smuzhiyun 805*4882a593Smuzhiyun enum { 806*4882a593Smuzhiyun OCRDMA_CREATE_CQ_CMD_PDID_SHIFT = 0x10 807*4882a593Smuzhiyun }; 808*4882a593Smuzhiyun 809*4882a593Smuzhiyun enum { 810*4882a593Smuzhiyun OCRDMA_CREATE_CQ_RSP_CQ_ID_MASK = 0xFFFF 811*4882a593Smuzhiyun }; 812*4882a593Smuzhiyun 813*4882a593Smuzhiyun struct ocrdma_create_cq_cmd_rsp { 814*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 815*4882a593Smuzhiyun u32 cq_id; 816*4882a593Smuzhiyun }; 817*4882a593Smuzhiyun 818*4882a593Smuzhiyun struct ocrdma_create_cq_rsp { 819*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 820*4882a593Smuzhiyun struct ocrdma_create_cq_cmd_rsp rsp; 821*4882a593Smuzhiyun }; 822*4882a593Smuzhiyun 823*4882a593Smuzhiyun enum { 824*4882a593Smuzhiyun OCRDMA_CREATE_MQ_V0_CQ_ID_SHIFT = 22, 825*4882a593Smuzhiyun OCRDMA_CREATE_MQ_CQ_ID_SHIFT = 16, 826*4882a593Smuzhiyun OCRDMA_CREATE_MQ_RING_SIZE_SHIFT = 16, 827*4882a593Smuzhiyun OCRDMA_CREATE_MQ_VALID = BIT(31), 828*4882a593Smuzhiyun OCRDMA_CREATE_MQ_ASYNC_CQ_VALID = BIT(0) 829*4882a593Smuzhiyun }; 830*4882a593Smuzhiyun 831*4882a593Smuzhiyun struct ocrdma_create_mq_req { 832*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 833*4882a593Smuzhiyun u32 cqid_pages; 834*4882a593Smuzhiyun u32 async_event_bitmap; 835*4882a593Smuzhiyun u32 async_cqid_ringsize; 836*4882a593Smuzhiyun u32 valid; 837*4882a593Smuzhiyun u32 async_cqid_valid; 838*4882a593Smuzhiyun u32 rsvd; 839*4882a593Smuzhiyun struct ocrdma_pa pa[8]; 840*4882a593Smuzhiyun }; 841*4882a593Smuzhiyun 842*4882a593Smuzhiyun struct ocrdma_create_mq_rsp { 843*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 844*4882a593Smuzhiyun u32 id; 845*4882a593Smuzhiyun }; 846*4882a593Smuzhiyun 847*4882a593Smuzhiyun enum { 848*4882a593Smuzhiyun OCRDMA_DESTROY_CQ_QID_SHIFT = 0, 849*4882a593Smuzhiyun OCRDMA_DESTROY_CQ_QID_MASK = 0xFFFF, 850*4882a593Smuzhiyun OCRDMA_DESTROY_CQ_QID_BYPASS_FLUSH_SHIFT = 16, 851*4882a593Smuzhiyun OCRDMA_DESTROY_CQ_QID_BYPASS_FLUSH_MASK = 0xFFFF << 852*4882a593Smuzhiyun OCRDMA_DESTROY_CQ_QID_BYPASS_FLUSH_SHIFT 853*4882a593Smuzhiyun }; 854*4882a593Smuzhiyun 855*4882a593Smuzhiyun struct ocrdma_destroy_cq { 856*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 857*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 858*4882a593Smuzhiyun 859*4882a593Smuzhiyun u32 bypass_flush_qid; 860*4882a593Smuzhiyun }; 861*4882a593Smuzhiyun 862*4882a593Smuzhiyun struct ocrdma_destroy_cq_rsp { 863*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 864*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 865*4882a593Smuzhiyun }; 866*4882a593Smuzhiyun 867*4882a593Smuzhiyun enum { 868*4882a593Smuzhiyun OCRDMA_QPT_GSI = 1, 869*4882a593Smuzhiyun OCRDMA_QPT_RC = 2, 870*4882a593Smuzhiyun OCRDMA_QPT_UD = 4, 871*4882a593Smuzhiyun }; 872*4882a593Smuzhiyun 873*4882a593Smuzhiyun enum { 874*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_PD_ID_SHIFT = 0, 875*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_PD_ID_MASK = 0xFFFF, 876*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_SQ_PAGE_SIZE_SHIFT = 16, 877*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_RQ_PAGE_SIZE_SHIFT = 19, 878*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_QPT_SHIFT = 29, 879*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_QPT_MASK = BIT(31) | BIT(30) | BIT(29), 880*4882a593Smuzhiyun 881*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_RQE_SHIFT = 0, 882*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_RQE_MASK = 0xFFFF, 883*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_WQE_SHIFT = 16, 884*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_WQE_MASK = 0xFFFF << 885*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_WQE_SHIFT, 886*4882a593Smuzhiyun 887*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_SGE_WRITE_SHIFT = 0, 888*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_SGE_WRITE_MASK = 0xFFFF, 889*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_SGE_SEND_SHIFT = 16, 890*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_SGE_SEND_MASK = 0xFFFF << 891*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_SGE_SEND_SHIFT, 892*4882a593Smuzhiyun 893*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_FMR_EN_SHIFT = 0, 894*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_FMR_EN_MASK = BIT(0), 895*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_ZERO_LKEYEN_SHIFT = 1, 896*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_ZERO_LKEYEN_MASK = BIT(1), 897*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_BIND_MEMWIN_SHIFT = 2, 898*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_BIND_MEMWIN_MASK = BIT(2), 899*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_INB_WREN_SHIFT = 3, 900*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_INB_WREN_MASK = BIT(3), 901*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_INB_RDEN_SHIFT = 4, 902*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_INB_RDEN_MASK = BIT(4), 903*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_USE_SRQ_SHIFT = 5, 904*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_USE_SRQ_MASK = BIT(5), 905*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_ENABLE_RPIR_SHIFT = 6, 906*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_ENABLE_RPIR_MASK = BIT(6), 907*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_ENABLE_DPP_SHIFT = 7, 908*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_ENABLE_DPP_MASK = BIT(7), 909*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_ENABLE_DPP_CQ_SHIFT = 8, 910*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_ENABLE_DPP_CQ_MASK = BIT(8), 911*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_SGE_RECV_SHIFT = 16, 912*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_SGE_RECV_MASK = 0xFFFF << 913*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_SGE_RECV_SHIFT, 914*4882a593Smuzhiyun 915*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_IRD_SHIFT = 0, 916*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_IRD_MASK = 0xFFFF, 917*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_ORD_SHIFT = 16, 918*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_ORD_MASK = 0xFFFF << 919*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_MAX_ORD_SHIFT, 920*4882a593Smuzhiyun 921*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_NUM_RQ_PAGES_SHIFT = 0, 922*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_NUM_RQ_PAGES_MASK = 0xFFFF, 923*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_NUM_WQ_PAGES_SHIFT = 16, 924*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_NUM_WQ_PAGES_MASK = 0xFFFF << 925*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_NUM_WQ_PAGES_SHIFT, 926*4882a593Smuzhiyun 927*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_RQE_SIZE_SHIFT = 0, 928*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_RQE_SIZE_MASK = 0xFFFF, 929*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_WQE_SIZE_SHIFT = 16, 930*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_WQE_SIZE_MASK = 0xFFFF << 931*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_WQE_SIZE_SHIFT, 932*4882a593Smuzhiyun 933*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_RQ_CQID_SHIFT = 0, 934*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_RQ_CQID_MASK = 0xFFFF, 935*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_WQ_CQID_SHIFT = 16, 936*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_WQ_CQID_MASK = 0xFFFF << 937*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_WQ_CQID_SHIFT, 938*4882a593Smuzhiyun 939*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_DPP_CQPID_SHIFT = 0, 940*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_DPP_CQPID_MASK = 0xFFFF, 941*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_DPP_CREDIT_SHIFT = 16, 942*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_DPP_CREDIT_MASK = 0xFFFF << 943*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_DPP_CREDIT_SHIFT 944*4882a593Smuzhiyun }; 945*4882a593Smuzhiyun 946*4882a593Smuzhiyun enum { 947*4882a593Smuzhiyun OCRDMA_CREATE_QP_REQ_DPP_CREDIT_LIMIT = 16, 948*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_DPP_PAGE_SHIFT = 1 949*4882a593Smuzhiyun }; 950*4882a593Smuzhiyun 951*4882a593Smuzhiyun #define MAX_OCRDMA_IRD_PAGES 4 952*4882a593Smuzhiyun 953*4882a593Smuzhiyun enum ocrdma_qp_flags { 954*4882a593Smuzhiyun OCRDMA_QP_MW_BIND = 1, 955*4882a593Smuzhiyun OCRDMA_QP_LKEY0 = (1 << 1), 956*4882a593Smuzhiyun OCRDMA_QP_FAST_REG = (1 << 2), 957*4882a593Smuzhiyun OCRDMA_QP_INB_RD = (1 << 6), 958*4882a593Smuzhiyun OCRDMA_QP_INB_WR = (1 << 7), 959*4882a593Smuzhiyun }; 960*4882a593Smuzhiyun 961*4882a593Smuzhiyun enum ocrdma_qp_state { 962*4882a593Smuzhiyun OCRDMA_QPS_RST = 0, 963*4882a593Smuzhiyun OCRDMA_QPS_INIT = 1, 964*4882a593Smuzhiyun OCRDMA_QPS_RTR = 2, 965*4882a593Smuzhiyun OCRDMA_QPS_RTS = 3, 966*4882a593Smuzhiyun OCRDMA_QPS_SQE = 4, 967*4882a593Smuzhiyun OCRDMA_QPS_SQ_DRAINING = 5, 968*4882a593Smuzhiyun OCRDMA_QPS_ERR = 6, 969*4882a593Smuzhiyun OCRDMA_QPS_SQD = 7 970*4882a593Smuzhiyun }; 971*4882a593Smuzhiyun 972*4882a593Smuzhiyun struct ocrdma_create_qp_req { 973*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 974*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 975*4882a593Smuzhiyun 976*4882a593Smuzhiyun u32 type_pgsz_pdn; 977*4882a593Smuzhiyun u32 max_wqe_rqe; 978*4882a593Smuzhiyun u32 max_sge_send_write; 979*4882a593Smuzhiyun u32 max_sge_recv_flags; 980*4882a593Smuzhiyun u32 max_ord_ird; 981*4882a593Smuzhiyun u32 num_wq_rq_pages; 982*4882a593Smuzhiyun u32 wqe_rqe_size; 983*4882a593Smuzhiyun u32 wq_rq_cqid; 984*4882a593Smuzhiyun struct ocrdma_pa wq_addr[MAX_OCRDMA_QP_PAGES]; 985*4882a593Smuzhiyun struct ocrdma_pa rq_addr[MAX_OCRDMA_QP_PAGES]; 986*4882a593Smuzhiyun u32 dpp_credits_cqid; 987*4882a593Smuzhiyun u32 rpir_lkey; 988*4882a593Smuzhiyun struct ocrdma_pa ird_addr[MAX_OCRDMA_IRD_PAGES]; 989*4882a593Smuzhiyun }; 990*4882a593Smuzhiyun 991*4882a593Smuzhiyun enum { 992*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_QP_ID_SHIFT = 0, 993*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_QP_ID_MASK = 0xFFFF, 994*4882a593Smuzhiyun 995*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_RQE_SHIFT = 0, 996*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_RQE_MASK = 0xFFFF, 997*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_WQE_SHIFT = 16, 998*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_WQE_MASK = 0xFFFF << 999*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_WQE_SHIFT, 1000*4882a593Smuzhiyun 1001*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_SGE_WRITE_SHIFT = 0, 1002*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_SGE_WRITE_MASK = 0xFFFF, 1003*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_SGE_SEND_SHIFT = 16, 1004*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_SGE_SEND_MASK = 0xFFFF << 1005*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_SGE_SEND_SHIFT, 1006*4882a593Smuzhiyun 1007*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_SGE_RECV_SHIFT = 16, 1008*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_SGE_RECV_MASK = 0xFFFF << 1009*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_SGE_RECV_SHIFT, 1010*4882a593Smuzhiyun 1011*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_IRD_SHIFT = 0, 1012*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_IRD_MASK = 0xFFFF, 1013*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_ORD_SHIFT = 16, 1014*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_ORD_MASK = 0xFFFF << 1015*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_MAX_ORD_SHIFT, 1016*4882a593Smuzhiyun 1017*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_RQ_ID_SHIFT = 0, 1018*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_RQ_ID_MASK = 0xFFFF, 1019*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_SQ_ID_SHIFT = 16, 1020*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_SQ_ID_MASK = 0xFFFF << 1021*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_SQ_ID_SHIFT, 1022*4882a593Smuzhiyun 1023*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_DPP_ENABLED_MASK = BIT(0), 1024*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_DPP_PAGE_OFFSET_SHIFT = 1, 1025*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_DPP_PAGE_OFFSET_MASK = 0x7FFF << 1026*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_DPP_PAGE_OFFSET_SHIFT, 1027*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_DPP_CREDITS_SHIFT = 16, 1028*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_DPP_CREDITS_MASK = 0xFFFF << 1029*4882a593Smuzhiyun OCRDMA_CREATE_QP_RSP_DPP_CREDITS_SHIFT, 1030*4882a593Smuzhiyun }; 1031*4882a593Smuzhiyun 1032*4882a593Smuzhiyun struct ocrdma_create_qp_rsp { 1033*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1034*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 1035*4882a593Smuzhiyun 1036*4882a593Smuzhiyun u32 qp_id; 1037*4882a593Smuzhiyun u32 max_wqe_rqe; 1038*4882a593Smuzhiyun u32 max_sge_send_write; 1039*4882a593Smuzhiyun u32 max_sge_recv; 1040*4882a593Smuzhiyun u32 max_ord_ird; 1041*4882a593Smuzhiyun u32 sq_rq_id; 1042*4882a593Smuzhiyun u32 dpp_response; 1043*4882a593Smuzhiyun }; 1044*4882a593Smuzhiyun 1045*4882a593Smuzhiyun struct ocrdma_destroy_qp { 1046*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1047*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 1048*4882a593Smuzhiyun u32 qp_id; 1049*4882a593Smuzhiyun }; 1050*4882a593Smuzhiyun 1051*4882a593Smuzhiyun struct ocrdma_destroy_qp_rsp { 1052*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1053*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 1054*4882a593Smuzhiyun }; 1055*4882a593Smuzhiyun 1056*4882a593Smuzhiyun enum { 1057*4882a593Smuzhiyun OCRDMA_MODIFY_QP_ID_SHIFT = 0, 1058*4882a593Smuzhiyun OCRDMA_MODIFY_QP_ID_MASK = 0xFFFF, 1059*4882a593Smuzhiyun 1060*4882a593Smuzhiyun OCRDMA_QP_PARA_QPS_VALID = BIT(0), 1061*4882a593Smuzhiyun OCRDMA_QP_PARA_SQD_ASYNC_VALID = BIT(1), 1062*4882a593Smuzhiyun OCRDMA_QP_PARA_PKEY_VALID = BIT(2), 1063*4882a593Smuzhiyun OCRDMA_QP_PARA_QKEY_VALID = BIT(3), 1064*4882a593Smuzhiyun OCRDMA_QP_PARA_PMTU_VALID = BIT(4), 1065*4882a593Smuzhiyun OCRDMA_QP_PARA_ACK_TO_VALID = BIT(5), 1066*4882a593Smuzhiyun OCRDMA_QP_PARA_RETRY_CNT_VALID = BIT(6), 1067*4882a593Smuzhiyun OCRDMA_QP_PARA_RRC_VALID = BIT(7), 1068*4882a593Smuzhiyun OCRDMA_QP_PARA_RQPSN_VALID = BIT(8), 1069*4882a593Smuzhiyun OCRDMA_QP_PARA_MAX_IRD_VALID = BIT(9), 1070*4882a593Smuzhiyun OCRDMA_QP_PARA_MAX_ORD_VALID = BIT(10), 1071*4882a593Smuzhiyun OCRDMA_QP_PARA_RNT_VALID = BIT(11), 1072*4882a593Smuzhiyun OCRDMA_QP_PARA_SQPSN_VALID = BIT(12), 1073*4882a593Smuzhiyun OCRDMA_QP_PARA_DST_QPN_VALID = BIT(13), 1074*4882a593Smuzhiyun OCRDMA_QP_PARA_MAX_WQE_VALID = BIT(14), 1075*4882a593Smuzhiyun OCRDMA_QP_PARA_MAX_RQE_VALID = BIT(15), 1076*4882a593Smuzhiyun OCRDMA_QP_PARA_SGE_SEND_VALID = BIT(16), 1077*4882a593Smuzhiyun OCRDMA_QP_PARA_SGE_RECV_VALID = BIT(17), 1078*4882a593Smuzhiyun OCRDMA_QP_PARA_SGE_WR_VALID = BIT(18), 1079*4882a593Smuzhiyun OCRDMA_QP_PARA_INB_RDEN_VALID = BIT(19), 1080*4882a593Smuzhiyun OCRDMA_QP_PARA_INB_WREN_VALID = BIT(20), 1081*4882a593Smuzhiyun OCRDMA_QP_PARA_FLOW_LBL_VALID = BIT(21), 1082*4882a593Smuzhiyun OCRDMA_QP_PARA_BIND_EN_VALID = BIT(22), 1083*4882a593Smuzhiyun OCRDMA_QP_PARA_ZLKEY_EN_VALID = BIT(23), 1084*4882a593Smuzhiyun OCRDMA_QP_PARA_FMR_EN_VALID = BIT(24), 1085*4882a593Smuzhiyun OCRDMA_QP_PARA_INBAT_EN_VALID = BIT(25), 1086*4882a593Smuzhiyun OCRDMA_QP_PARA_VLAN_EN_VALID = BIT(26), 1087*4882a593Smuzhiyun 1088*4882a593Smuzhiyun OCRDMA_MODIFY_QP_FLAGS_RD = BIT(0), 1089*4882a593Smuzhiyun OCRDMA_MODIFY_QP_FLAGS_WR = BIT(1), 1090*4882a593Smuzhiyun OCRDMA_MODIFY_QP_FLAGS_SEND = BIT(2), 1091*4882a593Smuzhiyun OCRDMA_MODIFY_QP_FLAGS_ATOMIC = BIT(3) 1092*4882a593Smuzhiyun }; 1093*4882a593Smuzhiyun 1094*4882a593Smuzhiyun enum { 1095*4882a593Smuzhiyun OCRDMA_QP_PARAMS_SRQ_ID_SHIFT = 0, 1096*4882a593Smuzhiyun OCRDMA_QP_PARAMS_SRQ_ID_MASK = 0xFFFF, 1097*4882a593Smuzhiyun 1098*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_RQE_SHIFT = 0, 1099*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_RQE_MASK = 0xFFFF, 1100*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_WQE_SHIFT = 16, 1101*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_WQE_MASK = 0xFFFF << 1102*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_WQE_SHIFT, 1103*4882a593Smuzhiyun 1104*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_SGE_WRITE_SHIFT = 0, 1105*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_SGE_WRITE_MASK = 0xFFFF, 1106*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_SGE_SEND_SHIFT = 16, 1107*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_SGE_SEND_MASK = 0xFFFF << 1108*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_SGE_SEND_SHIFT, 1109*4882a593Smuzhiyun 1110*4882a593Smuzhiyun OCRDMA_QP_PARAMS_FLAGS_FMR_EN = BIT(0), 1111*4882a593Smuzhiyun OCRDMA_QP_PARAMS_FLAGS_LKEY_0_EN = BIT(1), 1112*4882a593Smuzhiyun OCRDMA_QP_PARAMS_FLAGS_BIND_MW_EN = BIT(2), 1113*4882a593Smuzhiyun OCRDMA_QP_PARAMS_FLAGS_INBWR_EN = BIT(3), 1114*4882a593Smuzhiyun OCRDMA_QP_PARAMS_FLAGS_INBRD_EN = BIT(4), 1115*4882a593Smuzhiyun OCRDMA_QP_PARAMS_STATE_SHIFT = 5, 1116*4882a593Smuzhiyun OCRDMA_QP_PARAMS_STATE_MASK = BIT(5) | BIT(6) | BIT(7), 1117*4882a593Smuzhiyun OCRDMA_QP_PARAMS_FLAGS_SQD_ASYNC = BIT(8), 1118*4882a593Smuzhiyun OCRDMA_QP_PARAMS_FLAGS_INB_ATEN = BIT(9), 1119*4882a593Smuzhiyun OCRDMA_QP_PARAMS_FLAGS_L3_TYPE_SHIFT = 11, 1120*4882a593Smuzhiyun OCRDMA_QP_PARAMS_FLAGS_L3_TYPE_MASK = BIT(11) | BIT(12) | BIT(13), 1121*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_SGE_RECV_SHIFT = 16, 1122*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_SGE_RECV_MASK = 0xFFFF << 1123*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_SGE_RECV_SHIFT, 1124*4882a593Smuzhiyun 1125*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_IRD_SHIFT = 0, 1126*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_IRD_MASK = 0xFFFF, 1127*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_ORD_SHIFT = 16, 1128*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_ORD_MASK = 0xFFFF << 1129*4882a593Smuzhiyun OCRDMA_QP_PARAMS_MAX_ORD_SHIFT, 1130*4882a593Smuzhiyun 1131*4882a593Smuzhiyun OCRDMA_QP_PARAMS_RQ_CQID_SHIFT = 0, 1132*4882a593Smuzhiyun OCRDMA_QP_PARAMS_RQ_CQID_MASK = 0xFFFF, 1133*4882a593Smuzhiyun OCRDMA_QP_PARAMS_WQ_CQID_SHIFT = 16, 1134*4882a593Smuzhiyun OCRDMA_QP_PARAMS_WQ_CQID_MASK = 0xFFFF << 1135*4882a593Smuzhiyun OCRDMA_QP_PARAMS_WQ_CQID_SHIFT, 1136*4882a593Smuzhiyun 1137*4882a593Smuzhiyun OCRDMA_QP_PARAMS_RQ_PSN_SHIFT = 0, 1138*4882a593Smuzhiyun OCRDMA_QP_PARAMS_RQ_PSN_MASK = 0xFFFFFF, 1139*4882a593Smuzhiyun OCRDMA_QP_PARAMS_HOP_LMT_SHIFT = 24, 1140*4882a593Smuzhiyun OCRDMA_QP_PARAMS_HOP_LMT_MASK = 0xFF << 1141*4882a593Smuzhiyun OCRDMA_QP_PARAMS_HOP_LMT_SHIFT, 1142*4882a593Smuzhiyun 1143*4882a593Smuzhiyun OCRDMA_QP_PARAMS_SQ_PSN_SHIFT = 0, 1144*4882a593Smuzhiyun OCRDMA_QP_PARAMS_SQ_PSN_MASK = 0xFFFFFF, 1145*4882a593Smuzhiyun OCRDMA_QP_PARAMS_TCLASS_SHIFT = 24, 1146*4882a593Smuzhiyun OCRDMA_QP_PARAMS_TCLASS_MASK = 0xFF << 1147*4882a593Smuzhiyun OCRDMA_QP_PARAMS_TCLASS_SHIFT, 1148*4882a593Smuzhiyun 1149*4882a593Smuzhiyun OCRDMA_QP_PARAMS_DEST_QPN_SHIFT = 0, 1150*4882a593Smuzhiyun OCRDMA_QP_PARAMS_DEST_QPN_MASK = 0xFFFFFF, 1151*4882a593Smuzhiyun OCRDMA_QP_PARAMS_RNR_RETRY_CNT_SHIFT = 24, 1152*4882a593Smuzhiyun OCRDMA_QP_PARAMS_RNR_RETRY_CNT_MASK = 0x7 << 1153*4882a593Smuzhiyun OCRDMA_QP_PARAMS_RNR_RETRY_CNT_SHIFT, 1154*4882a593Smuzhiyun OCRDMA_QP_PARAMS_ACK_TIMEOUT_SHIFT = 27, 1155*4882a593Smuzhiyun OCRDMA_QP_PARAMS_ACK_TIMEOUT_MASK = 0x1F << 1156*4882a593Smuzhiyun OCRDMA_QP_PARAMS_ACK_TIMEOUT_SHIFT, 1157*4882a593Smuzhiyun 1158*4882a593Smuzhiyun OCRDMA_QP_PARAMS_PKEY_IDNEX_SHIFT = 0, 1159*4882a593Smuzhiyun OCRDMA_QP_PARAMS_PKEY_INDEX_MASK = 0xFFFF, 1160*4882a593Smuzhiyun OCRDMA_QP_PARAMS_PATH_MTU_SHIFT = 18, 1161*4882a593Smuzhiyun OCRDMA_QP_PARAMS_PATH_MTU_MASK = 0x3FFF << 1162*4882a593Smuzhiyun OCRDMA_QP_PARAMS_PATH_MTU_SHIFT, 1163*4882a593Smuzhiyun 1164*4882a593Smuzhiyun OCRDMA_QP_PARAMS_FLOW_LABEL_SHIFT = 0, 1165*4882a593Smuzhiyun OCRDMA_QP_PARAMS_FLOW_LABEL_MASK = 0xFFFFF, 1166*4882a593Smuzhiyun OCRDMA_QP_PARAMS_SL_SHIFT = 20, 1167*4882a593Smuzhiyun OCRDMA_QP_PARAMS_SL_MASK = 0xF << 1168*4882a593Smuzhiyun OCRDMA_QP_PARAMS_SL_SHIFT, 1169*4882a593Smuzhiyun OCRDMA_QP_PARAMS_RETRY_CNT_SHIFT = 24, 1170*4882a593Smuzhiyun OCRDMA_QP_PARAMS_RETRY_CNT_MASK = 0x7 << 1171*4882a593Smuzhiyun OCRDMA_QP_PARAMS_RETRY_CNT_SHIFT, 1172*4882a593Smuzhiyun OCRDMA_QP_PARAMS_RNR_NAK_TIMER_SHIFT = 27, 1173*4882a593Smuzhiyun OCRDMA_QP_PARAMS_RNR_NAK_TIMER_MASK = 0x1F << 1174*4882a593Smuzhiyun OCRDMA_QP_PARAMS_RNR_NAK_TIMER_SHIFT, 1175*4882a593Smuzhiyun 1176*4882a593Smuzhiyun OCRDMA_QP_PARAMS_DMAC_B4_TO_B5_SHIFT = 0, 1177*4882a593Smuzhiyun OCRDMA_QP_PARAMS_DMAC_B4_TO_B5_MASK = 0xFFFF, 1178*4882a593Smuzhiyun OCRDMA_QP_PARAMS_VLAN_SHIFT = 16, 1179*4882a593Smuzhiyun OCRDMA_QP_PARAMS_VLAN_MASK = 0xFFFF << 1180*4882a593Smuzhiyun OCRDMA_QP_PARAMS_VLAN_SHIFT 1181*4882a593Smuzhiyun }; 1182*4882a593Smuzhiyun 1183*4882a593Smuzhiyun struct ocrdma_qp_params { 1184*4882a593Smuzhiyun u32 id; 1185*4882a593Smuzhiyun u32 max_wqe_rqe; 1186*4882a593Smuzhiyun u32 max_sge_send_write; 1187*4882a593Smuzhiyun u32 max_sge_recv_flags; 1188*4882a593Smuzhiyun u32 max_ord_ird; 1189*4882a593Smuzhiyun u32 wq_rq_cqid; 1190*4882a593Smuzhiyun u32 hop_lmt_rq_psn; 1191*4882a593Smuzhiyun u32 tclass_sq_psn; 1192*4882a593Smuzhiyun u32 ack_to_rnr_rtc_dest_qpn; 1193*4882a593Smuzhiyun u32 path_mtu_pkey_indx; 1194*4882a593Smuzhiyun u32 rnt_rc_sl_fl; 1195*4882a593Smuzhiyun u8 sgid[16]; 1196*4882a593Smuzhiyun u8 dgid[16]; 1197*4882a593Smuzhiyun u32 dmac_b0_to_b3; 1198*4882a593Smuzhiyun u32 vlan_dmac_b4_to_b5; 1199*4882a593Smuzhiyun u32 qkey; 1200*4882a593Smuzhiyun }; 1201*4882a593Smuzhiyun 1202*4882a593Smuzhiyun 1203*4882a593Smuzhiyun struct ocrdma_modify_qp { 1204*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1205*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 1206*4882a593Smuzhiyun 1207*4882a593Smuzhiyun struct ocrdma_qp_params params; 1208*4882a593Smuzhiyun u32 flags; 1209*4882a593Smuzhiyun u32 rdma_flags; 1210*4882a593Smuzhiyun u32 num_outstanding_atomic_rd; 1211*4882a593Smuzhiyun }; 1212*4882a593Smuzhiyun 1213*4882a593Smuzhiyun enum { 1214*4882a593Smuzhiyun OCRDMA_MODIFY_QP_RSP_MAX_RQE_SHIFT = 0, 1215*4882a593Smuzhiyun OCRDMA_MODIFY_QP_RSP_MAX_RQE_MASK = 0xFFFF, 1216*4882a593Smuzhiyun OCRDMA_MODIFY_QP_RSP_MAX_WQE_SHIFT = 16, 1217*4882a593Smuzhiyun OCRDMA_MODIFY_QP_RSP_MAX_WQE_MASK = 0xFFFF << 1218*4882a593Smuzhiyun OCRDMA_MODIFY_QP_RSP_MAX_WQE_SHIFT, 1219*4882a593Smuzhiyun 1220*4882a593Smuzhiyun OCRDMA_MODIFY_QP_RSP_MAX_IRD_SHIFT = 0, 1221*4882a593Smuzhiyun OCRDMA_MODIFY_QP_RSP_MAX_IRD_MASK = 0xFFFF, 1222*4882a593Smuzhiyun OCRDMA_MODIFY_QP_RSP_MAX_ORD_SHIFT = 16, 1223*4882a593Smuzhiyun OCRDMA_MODIFY_QP_RSP_MAX_ORD_MASK = 0xFFFF << 1224*4882a593Smuzhiyun OCRDMA_MODIFY_QP_RSP_MAX_ORD_SHIFT 1225*4882a593Smuzhiyun }; 1226*4882a593Smuzhiyun 1227*4882a593Smuzhiyun struct ocrdma_modify_qp_rsp { 1228*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1229*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 1230*4882a593Smuzhiyun 1231*4882a593Smuzhiyun u32 max_wqe_rqe; 1232*4882a593Smuzhiyun u32 max_ord_ird; 1233*4882a593Smuzhiyun }; 1234*4882a593Smuzhiyun 1235*4882a593Smuzhiyun struct ocrdma_query_qp { 1236*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1237*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 1238*4882a593Smuzhiyun 1239*4882a593Smuzhiyun #define OCRDMA_QUERY_UP_QP_ID_SHIFT 0 1240*4882a593Smuzhiyun #define OCRDMA_QUERY_UP_QP_ID_MASK 0xFFFFFF 1241*4882a593Smuzhiyun u32 qp_id; 1242*4882a593Smuzhiyun }; 1243*4882a593Smuzhiyun 1244*4882a593Smuzhiyun struct ocrdma_query_qp_rsp { 1245*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1246*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 1247*4882a593Smuzhiyun struct ocrdma_qp_params params; 1248*4882a593Smuzhiyun u32 dpp_credits_cqid; 1249*4882a593Smuzhiyun u32 rbq_id; 1250*4882a593Smuzhiyun }; 1251*4882a593Smuzhiyun 1252*4882a593Smuzhiyun enum { 1253*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_PD_ID_SHIFT = 0, 1254*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_PD_ID_MASK = 0xFFFF, 1255*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_PG_SZ_SHIFT = 16, 1256*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_PG_SZ_MASK = 0x3 << 1257*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_PG_SZ_SHIFT, 1258*4882a593Smuzhiyun 1259*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_MAX_RQE_SHIFT = 0, 1260*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_MAX_SGE_RECV_SHIFT = 16, 1261*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_MAX_SGE_RECV_MASK = 0xFFFF << 1262*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_MAX_SGE_RECV_SHIFT, 1263*4882a593Smuzhiyun 1264*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_RQE_SIZE_SHIFT = 0, 1265*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_RQE_SIZE_MASK = 0xFFFF, 1266*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_NUM_RQ_PAGES_SHIFT = 16, 1267*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_NUM_RQ_PAGES_MASK = 0xFFFF << 1268*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_NUM_RQ_PAGES_SHIFT 1269*4882a593Smuzhiyun }; 1270*4882a593Smuzhiyun 1271*4882a593Smuzhiyun struct ocrdma_create_srq { 1272*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1273*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 1274*4882a593Smuzhiyun 1275*4882a593Smuzhiyun u32 pgsz_pdid; 1276*4882a593Smuzhiyun u32 max_sge_rqe; 1277*4882a593Smuzhiyun u32 pages_rqe_sz; 1278*4882a593Smuzhiyun struct ocrdma_pa rq_addr[MAX_OCRDMA_SRQ_PAGES]; 1279*4882a593Smuzhiyun }; 1280*4882a593Smuzhiyun 1281*4882a593Smuzhiyun enum { 1282*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_RSP_SRQ_ID_SHIFT = 0, 1283*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_RSP_SRQ_ID_MASK = 0xFFFFFF, 1284*4882a593Smuzhiyun 1285*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_RSP_MAX_RQE_ALLOCATED_SHIFT = 0, 1286*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_RSP_MAX_RQE_ALLOCATED_MASK = 0xFFFF, 1287*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_RSP_MAX_SGE_RECV_ALLOCATED_SHIFT = 16, 1288*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_RSP_MAX_SGE_RECV_ALLOCATED_MASK = 0xFFFF << 1289*4882a593Smuzhiyun OCRDMA_CREATE_SRQ_RSP_MAX_SGE_RECV_ALLOCATED_SHIFT 1290*4882a593Smuzhiyun }; 1291*4882a593Smuzhiyun 1292*4882a593Smuzhiyun struct ocrdma_create_srq_rsp { 1293*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1294*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 1295*4882a593Smuzhiyun 1296*4882a593Smuzhiyun u32 id; 1297*4882a593Smuzhiyun u32 max_sge_rqe_allocated; 1298*4882a593Smuzhiyun }; 1299*4882a593Smuzhiyun 1300*4882a593Smuzhiyun enum { 1301*4882a593Smuzhiyun OCRDMA_MODIFY_SRQ_ID_SHIFT = 0, 1302*4882a593Smuzhiyun OCRDMA_MODIFY_SRQ_ID_MASK = 0xFFFFFF, 1303*4882a593Smuzhiyun 1304*4882a593Smuzhiyun OCRDMA_MODIFY_SRQ_MAX_RQE_SHIFT = 0, 1305*4882a593Smuzhiyun OCRDMA_MODIFY_SRQ_MAX_RQE_MASK = 0xFFFF, 1306*4882a593Smuzhiyun OCRDMA_MODIFY_SRQ_LIMIT_SHIFT = 16, 1307*4882a593Smuzhiyun OCRDMA_MODIFY_SRQ__LIMIT_MASK = 0xFFFF << 1308*4882a593Smuzhiyun OCRDMA_MODIFY_SRQ_LIMIT_SHIFT 1309*4882a593Smuzhiyun }; 1310*4882a593Smuzhiyun 1311*4882a593Smuzhiyun struct ocrdma_modify_srq { 1312*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1313*4882a593Smuzhiyun struct ocrdma_mbx_rsp rep; 1314*4882a593Smuzhiyun 1315*4882a593Smuzhiyun u32 id; 1316*4882a593Smuzhiyun u32 limit_max_rqe; 1317*4882a593Smuzhiyun }; 1318*4882a593Smuzhiyun 1319*4882a593Smuzhiyun enum { 1320*4882a593Smuzhiyun OCRDMA_QUERY_SRQ_ID_SHIFT = 0, 1321*4882a593Smuzhiyun OCRDMA_QUERY_SRQ_ID_MASK = 0xFFFFFF 1322*4882a593Smuzhiyun }; 1323*4882a593Smuzhiyun 1324*4882a593Smuzhiyun struct ocrdma_query_srq { 1325*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1326*4882a593Smuzhiyun struct ocrdma_mbx_rsp req; 1327*4882a593Smuzhiyun 1328*4882a593Smuzhiyun u32 id; 1329*4882a593Smuzhiyun }; 1330*4882a593Smuzhiyun 1331*4882a593Smuzhiyun enum { 1332*4882a593Smuzhiyun OCRDMA_QUERY_SRQ_RSP_PD_ID_SHIFT = 0, 1333*4882a593Smuzhiyun OCRDMA_QUERY_SRQ_RSP_PD_ID_MASK = 0xFFFF, 1334*4882a593Smuzhiyun OCRDMA_QUERY_SRQ_RSP_MAX_RQE_SHIFT = 16, 1335*4882a593Smuzhiyun OCRDMA_QUERY_SRQ_RSP_MAX_RQE_MASK = 0xFFFF << 1336*4882a593Smuzhiyun OCRDMA_QUERY_SRQ_RSP_MAX_RQE_SHIFT, 1337*4882a593Smuzhiyun 1338*4882a593Smuzhiyun OCRDMA_QUERY_SRQ_RSP_MAX_SGE_RECV_SHIFT = 0, 1339*4882a593Smuzhiyun OCRDMA_QUERY_SRQ_RSP_MAX_SGE_RECV_MASK = 0xFFFF, 1340*4882a593Smuzhiyun OCRDMA_QUERY_SRQ_RSP_SRQ_LIMIT_SHIFT = 16, 1341*4882a593Smuzhiyun OCRDMA_QUERY_SRQ_RSP_SRQ_LIMIT_MASK = 0xFFFF << 1342*4882a593Smuzhiyun OCRDMA_QUERY_SRQ_RSP_SRQ_LIMIT_SHIFT 1343*4882a593Smuzhiyun }; 1344*4882a593Smuzhiyun 1345*4882a593Smuzhiyun struct ocrdma_query_srq_rsp { 1346*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1347*4882a593Smuzhiyun struct ocrdma_mbx_rsp req; 1348*4882a593Smuzhiyun 1349*4882a593Smuzhiyun u32 max_rqe_pdid; 1350*4882a593Smuzhiyun u32 srq_lmt_max_sge; 1351*4882a593Smuzhiyun }; 1352*4882a593Smuzhiyun 1353*4882a593Smuzhiyun enum { 1354*4882a593Smuzhiyun OCRDMA_DESTROY_SRQ_ID_SHIFT = 0, 1355*4882a593Smuzhiyun OCRDMA_DESTROY_SRQ_ID_MASK = 0xFFFFFF 1356*4882a593Smuzhiyun }; 1357*4882a593Smuzhiyun 1358*4882a593Smuzhiyun struct ocrdma_destroy_srq { 1359*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1360*4882a593Smuzhiyun struct ocrdma_mbx_rsp req; 1361*4882a593Smuzhiyun 1362*4882a593Smuzhiyun u32 id; 1363*4882a593Smuzhiyun }; 1364*4882a593Smuzhiyun 1365*4882a593Smuzhiyun enum { 1366*4882a593Smuzhiyun OCRDMA_ALLOC_PD_ENABLE_DPP = BIT(16), 1367*4882a593Smuzhiyun OCRDMA_DPP_PAGE_SIZE = 4096 1368*4882a593Smuzhiyun }; 1369*4882a593Smuzhiyun 1370*4882a593Smuzhiyun struct ocrdma_alloc_pd { 1371*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1372*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 1373*4882a593Smuzhiyun u32 enable_dpp_rsvd; 1374*4882a593Smuzhiyun }; 1375*4882a593Smuzhiyun 1376*4882a593Smuzhiyun enum { 1377*4882a593Smuzhiyun OCRDMA_ALLOC_PD_RSP_DPP = BIT(16), 1378*4882a593Smuzhiyun OCRDMA_ALLOC_PD_RSP_DPP_PAGE_SHIFT = 20, 1379*4882a593Smuzhiyun OCRDMA_ALLOC_PD_RSP_PDID_MASK = 0xFFFF, 1380*4882a593Smuzhiyun }; 1381*4882a593Smuzhiyun 1382*4882a593Smuzhiyun struct ocrdma_alloc_pd_rsp { 1383*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1384*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 1385*4882a593Smuzhiyun u32 dpp_page_pdid; 1386*4882a593Smuzhiyun }; 1387*4882a593Smuzhiyun 1388*4882a593Smuzhiyun struct ocrdma_dealloc_pd { 1389*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1390*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 1391*4882a593Smuzhiyun u32 id; 1392*4882a593Smuzhiyun }; 1393*4882a593Smuzhiyun 1394*4882a593Smuzhiyun struct ocrdma_dealloc_pd_rsp { 1395*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1396*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 1397*4882a593Smuzhiyun }; 1398*4882a593Smuzhiyun 1399*4882a593Smuzhiyun struct ocrdma_alloc_pd_range { 1400*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1401*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 1402*4882a593Smuzhiyun u32 enable_dpp_rsvd; 1403*4882a593Smuzhiyun u32 pd_count; 1404*4882a593Smuzhiyun }; 1405*4882a593Smuzhiyun 1406*4882a593Smuzhiyun struct ocrdma_alloc_pd_range_rsp { 1407*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1408*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 1409*4882a593Smuzhiyun u32 dpp_page_pdid; 1410*4882a593Smuzhiyun u32 pd_count; 1411*4882a593Smuzhiyun }; 1412*4882a593Smuzhiyun 1413*4882a593Smuzhiyun enum { 1414*4882a593Smuzhiyun OCRDMA_ALLOC_PD_RNG_RSP_START_PDID_MASK = 0xFFFF, 1415*4882a593Smuzhiyun }; 1416*4882a593Smuzhiyun 1417*4882a593Smuzhiyun struct ocrdma_dealloc_pd_range { 1418*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1419*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 1420*4882a593Smuzhiyun u32 start_pd_id; 1421*4882a593Smuzhiyun u32 pd_count; 1422*4882a593Smuzhiyun }; 1423*4882a593Smuzhiyun 1424*4882a593Smuzhiyun struct ocrdma_dealloc_pd_range_rsp { 1425*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1426*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 1427*4882a593Smuzhiyun u32 rsvd; 1428*4882a593Smuzhiyun }; 1429*4882a593Smuzhiyun 1430*4882a593Smuzhiyun enum { 1431*4882a593Smuzhiyun OCRDMA_ADDR_CHECK_ENABLE = 1, 1432*4882a593Smuzhiyun OCRDMA_ADDR_CHECK_DISABLE = 0 1433*4882a593Smuzhiyun }; 1434*4882a593Smuzhiyun 1435*4882a593Smuzhiyun enum { 1436*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_PD_ID_SHIFT = 0, 1437*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_PD_ID_MASK = 0xFFFF, 1438*4882a593Smuzhiyun 1439*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_ADDR_CHECK_SHIFT = 0, 1440*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_ADDR_CHECK_MASK = BIT(0), 1441*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_FMR_SHIFT = 1, 1442*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_FMR_MASK = BIT(1), 1443*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_REMOTE_INV_SHIFT = 2, 1444*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_REMOTE_INV_MASK = BIT(2), 1445*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_REMOTE_WR_SHIFT = 3, 1446*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_REMOTE_WR_MASK = BIT(3), 1447*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_REMOTE_RD_SHIFT = 4, 1448*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_REMOTE_RD_MASK = BIT(4), 1449*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_LOCAL_WR_SHIFT = 5, 1450*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_LOCAL_WR_MASK = BIT(5), 1451*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_REMOTE_ATOMIC_MASK = BIT(6), 1452*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_REMOTE_ATOMIC_SHIFT = 6, 1453*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_PBL_SIZE_SHIFT = 16, 1454*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_PBL_SIZE_MASK = 0xFFFF << 1455*4882a593Smuzhiyun OCRDMA_ALLOC_LKEY_PBL_SIZE_SHIFT 1456*4882a593Smuzhiyun }; 1457*4882a593Smuzhiyun 1458*4882a593Smuzhiyun struct ocrdma_alloc_lkey { 1459*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1460*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 1461*4882a593Smuzhiyun 1462*4882a593Smuzhiyun u32 pdid; 1463*4882a593Smuzhiyun u32 pbl_sz_flags; 1464*4882a593Smuzhiyun }; 1465*4882a593Smuzhiyun 1466*4882a593Smuzhiyun struct ocrdma_alloc_lkey_rsp { 1467*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1468*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 1469*4882a593Smuzhiyun 1470*4882a593Smuzhiyun u32 lrkey; 1471*4882a593Smuzhiyun u32 num_pbl_rsvd; 1472*4882a593Smuzhiyun }; 1473*4882a593Smuzhiyun 1474*4882a593Smuzhiyun struct ocrdma_dealloc_lkey { 1475*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1476*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 1477*4882a593Smuzhiyun 1478*4882a593Smuzhiyun u32 lkey; 1479*4882a593Smuzhiyun u32 rsvd_frmr; 1480*4882a593Smuzhiyun }; 1481*4882a593Smuzhiyun 1482*4882a593Smuzhiyun struct ocrdma_dealloc_lkey_rsp { 1483*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1484*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 1485*4882a593Smuzhiyun }; 1486*4882a593Smuzhiyun 1487*4882a593Smuzhiyun #define MAX_OCRDMA_NSMR_PBL (u32)22 1488*4882a593Smuzhiyun #define MAX_OCRDMA_PBL_SIZE 65536 1489*4882a593Smuzhiyun #define MAX_OCRDMA_PBL_PER_LKEY 32767 1490*4882a593Smuzhiyun 1491*4882a593Smuzhiyun enum { 1492*4882a593Smuzhiyun OCRDMA_REG_NSMR_LRKEY_INDEX_SHIFT = 0, 1493*4882a593Smuzhiyun OCRDMA_REG_NSMR_LRKEY_INDEX_MASK = 0xFFFFFF, 1494*4882a593Smuzhiyun OCRDMA_REG_NSMR_LRKEY_SHIFT = 24, 1495*4882a593Smuzhiyun OCRDMA_REG_NSMR_LRKEY_MASK = 0xFF << 1496*4882a593Smuzhiyun OCRDMA_REG_NSMR_LRKEY_SHIFT, 1497*4882a593Smuzhiyun 1498*4882a593Smuzhiyun OCRDMA_REG_NSMR_PD_ID_SHIFT = 0, 1499*4882a593Smuzhiyun OCRDMA_REG_NSMR_PD_ID_MASK = 0xFFFF, 1500*4882a593Smuzhiyun OCRDMA_REG_NSMR_NUM_PBL_SHIFT = 16, 1501*4882a593Smuzhiyun OCRDMA_REG_NSMR_NUM_PBL_MASK = 0xFFFF << 1502*4882a593Smuzhiyun OCRDMA_REG_NSMR_NUM_PBL_SHIFT, 1503*4882a593Smuzhiyun 1504*4882a593Smuzhiyun OCRDMA_REG_NSMR_PBE_SIZE_SHIFT = 0, 1505*4882a593Smuzhiyun OCRDMA_REG_NSMR_PBE_SIZE_MASK = 0xFFFF, 1506*4882a593Smuzhiyun OCRDMA_REG_NSMR_HPAGE_SIZE_SHIFT = 16, 1507*4882a593Smuzhiyun OCRDMA_REG_NSMR_HPAGE_SIZE_MASK = 0xFF << 1508*4882a593Smuzhiyun OCRDMA_REG_NSMR_HPAGE_SIZE_SHIFT, 1509*4882a593Smuzhiyun OCRDMA_REG_NSMR_BIND_MEMWIN_SHIFT = 24, 1510*4882a593Smuzhiyun OCRDMA_REG_NSMR_BIND_MEMWIN_MASK = BIT(24), 1511*4882a593Smuzhiyun OCRDMA_REG_NSMR_ZB_SHIFT = 25, 1512*4882a593Smuzhiyun OCRDMA_REG_NSMR_ZB_SHIFT_MASK = BIT(25), 1513*4882a593Smuzhiyun OCRDMA_REG_NSMR_REMOTE_INV_SHIFT = 26, 1514*4882a593Smuzhiyun OCRDMA_REG_NSMR_REMOTE_INV_MASK = BIT(26), 1515*4882a593Smuzhiyun OCRDMA_REG_NSMR_REMOTE_WR_SHIFT = 27, 1516*4882a593Smuzhiyun OCRDMA_REG_NSMR_REMOTE_WR_MASK = BIT(27), 1517*4882a593Smuzhiyun OCRDMA_REG_NSMR_REMOTE_RD_SHIFT = 28, 1518*4882a593Smuzhiyun OCRDMA_REG_NSMR_REMOTE_RD_MASK = BIT(28), 1519*4882a593Smuzhiyun OCRDMA_REG_NSMR_LOCAL_WR_SHIFT = 29, 1520*4882a593Smuzhiyun OCRDMA_REG_NSMR_LOCAL_WR_MASK = BIT(29), 1521*4882a593Smuzhiyun OCRDMA_REG_NSMR_REMOTE_ATOMIC_SHIFT = 30, 1522*4882a593Smuzhiyun OCRDMA_REG_NSMR_REMOTE_ATOMIC_MASK = BIT(30), 1523*4882a593Smuzhiyun OCRDMA_REG_NSMR_LAST_SHIFT = 31, 1524*4882a593Smuzhiyun OCRDMA_REG_NSMR_LAST_MASK = BIT(31) 1525*4882a593Smuzhiyun }; 1526*4882a593Smuzhiyun 1527*4882a593Smuzhiyun struct ocrdma_reg_nsmr { 1528*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1529*4882a593Smuzhiyun struct ocrdma_mbx_hdr cmd; 1530*4882a593Smuzhiyun 1531*4882a593Smuzhiyun u32 fr_mr; 1532*4882a593Smuzhiyun u32 num_pbl_pdid; 1533*4882a593Smuzhiyun u32 flags_hpage_pbe_sz; 1534*4882a593Smuzhiyun u32 totlen_low; 1535*4882a593Smuzhiyun u32 totlen_high; 1536*4882a593Smuzhiyun u32 fbo_low; 1537*4882a593Smuzhiyun u32 fbo_high; 1538*4882a593Smuzhiyun u32 va_loaddr; 1539*4882a593Smuzhiyun u32 va_hiaddr; 1540*4882a593Smuzhiyun struct ocrdma_pa pbl[MAX_OCRDMA_NSMR_PBL]; 1541*4882a593Smuzhiyun }; 1542*4882a593Smuzhiyun 1543*4882a593Smuzhiyun enum { 1544*4882a593Smuzhiyun OCRDMA_REG_NSMR_CONT_PBL_SHIFT = 0, 1545*4882a593Smuzhiyun OCRDMA_REG_NSMR_CONT_PBL_SHIFT_MASK = 0xFFFF, 1546*4882a593Smuzhiyun OCRDMA_REG_NSMR_CONT_NUM_PBL_SHIFT = 16, 1547*4882a593Smuzhiyun OCRDMA_REG_NSMR_CONT_NUM_PBL_MASK = 0xFFFF << 1548*4882a593Smuzhiyun OCRDMA_REG_NSMR_CONT_NUM_PBL_SHIFT, 1549*4882a593Smuzhiyun 1550*4882a593Smuzhiyun OCRDMA_REG_NSMR_CONT_LAST_SHIFT = 31, 1551*4882a593Smuzhiyun OCRDMA_REG_NSMR_CONT_LAST_MASK = BIT(31) 1552*4882a593Smuzhiyun }; 1553*4882a593Smuzhiyun 1554*4882a593Smuzhiyun struct ocrdma_reg_nsmr_cont { 1555*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1556*4882a593Smuzhiyun struct ocrdma_mbx_hdr cmd; 1557*4882a593Smuzhiyun 1558*4882a593Smuzhiyun u32 lrkey; 1559*4882a593Smuzhiyun u32 num_pbl_offset; 1560*4882a593Smuzhiyun u32 last; 1561*4882a593Smuzhiyun 1562*4882a593Smuzhiyun struct ocrdma_pa pbl[MAX_OCRDMA_NSMR_PBL]; 1563*4882a593Smuzhiyun }; 1564*4882a593Smuzhiyun 1565*4882a593Smuzhiyun struct ocrdma_pbe { 1566*4882a593Smuzhiyun u32 pa_hi; 1567*4882a593Smuzhiyun u32 pa_lo; 1568*4882a593Smuzhiyun }; 1569*4882a593Smuzhiyun 1570*4882a593Smuzhiyun enum { 1571*4882a593Smuzhiyun OCRDMA_REG_NSMR_RSP_NUM_PBL_SHIFT = 16, 1572*4882a593Smuzhiyun OCRDMA_REG_NSMR_RSP_NUM_PBL_MASK = 0xFFFF0000 1573*4882a593Smuzhiyun }; 1574*4882a593Smuzhiyun struct ocrdma_reg_nsmr_rsp { 1575*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1576*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 1577*4882a593Smuzhiyun 1578*4882a593Smuzhiyun u32 lrkey; 1579*4882a593Smuzhiyun u32 num_pbl; 1580*4882a593Smuzhiyun }; 1581*4882a593Smuzhiyun 1582*4882a593Smuzhiyun enum { 1583*4882a593Smuzhiyun OCRDMA_REG_NSMR_CONT_RSP_LRKEY_INDEX_SHIFT = 0, 1584*4882a593Smuzhiyun OCRDMA_REG_NSMR_CONT_RSP_LRKEY_INDEX_MASK = 0xFFFFFF, 1585*4882a593Smuzhiyun OCRDMA_REG_NSMR_CONT_RSP_LRKEY_SHIFT = 24, 1586*4882a593Smuzhiyun OCRDMA_REG_NSMR_CONT_RSP_LRKEY_MASK = 0xFF << 1587*4882a593Smuzhiyun OCRDMA_REG_NSMR_CONT_RSP_LRKEY_SHIFT, 1588*4882a593Smuzhiyun 1589*4882a593Smuzhiyun OCRDMA_REG_NSMR_CONT_RSP_NUM_PBL_SHIFT = 16, 1590*4882a593Smuzhiyun OCRDMA_REG_NSMR_CONT_RSP_NUM_PBL_MASK = 0xFFFF << 1591*4882a593Smuzhiyun OCRDMA_REG_NSMR_CONT_RSP_NUM_PBL_SHIFT 1592*4882a593Smuzhiyun }; 1593*4882a593Smuzhiyun 1594*4882a593Smuzhiyun struct ocrdma_reg_nsmr_cont_rsp { 1595*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1596*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 1597*4882a593Smuzhiyun 1598*4882a593Smuzhiyun u32 lrkey_key_index; 1599*4882a593Smuzhiyun u32 num_pbl; 1600*4882a593Smuzhiyun }; 1601*4882a593Smuzhiyun 1602*4882a593Smuzhiyun enum { 1603*4882a593Smuzhiyun OCRDMA_ALLOC_MW_PD_ID_SHIFT = 0, 1604*4882a593Smuzhiyun OCRDMA_ALLOC_MW_PD_ID_MASK = 0xFFFF 1605*4882a593Smuzhiyun }; 1606*4882a593Smuzhiyun 1607*4882a593Smuzhiyun struct ocrdma_alloc_mw { 1608*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1609*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 1610*4882a593Smuzhiyun 1611*4882a593Smuzhiyun u32 pdid; 1612*4882a593Smuzhiyun }; 1613*4882a593Smuzhiyun 1614*4882a593Smuzhiyun enum { 1615*4882a593Smuzhiyun OCRDMA_ALLOC_MW_RSP_LRKEY_INDEX_SHIFT = 0, 1616*4882a593Smuzhiyun OCRDMA_ALLOC_MW_RSP_LRKEY_INDEX_MASK = 0xFFFFFF 1617*4882a593Smuzhiyun }; 1618*4882a593Smuzhiyun 1619*4882a593Smuzhiyun struct ocrdma_alloc_mw_rsp { 1620*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1621*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 1622*4882a593Smuzhiyun 1623*4882a593Smuzhiyun u32 lrkey_index; 1624*4882a593Smuzhiyun }; 1625*4882a593Smuzhiyun 1626*4882a593Smuzhiyun struct ocrdma_attach_mcast { 1627*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1628*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 1629*4882a593Smuzhiyun u32 qp_id; 1630*4882a593Smuzhiyun u8 mgid[16]; 1631*4882a593Smuzhiyun u32 mac_b0_to_b3; 1632*4882a593Smuzhiyun u32 vlan_mac_b4_to_b5; 1633*4882a593Smuzhiyun }; 1634*4882a593Smuzhiyun 1635*4882a593Smuzhiyun struct ocrdma_attach_mcast_rsp { 1636*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1637*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 1638*4882a593Smuzhiyun }; 1639*4882a593Smuzhiyun 1640*4882a593Smuzhiyun struct ocrdma_detach_mcast { 1641*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1642*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 1643*4882a593Smuzhiyun u32 qp_id; 1644*4882a593Smuzhiyun u8 mgid[16]; 1645*4882a593Smuzhiyun u32 mac_b0_to_b3; 1646*4882a593Smuzhiyun u32 vlan_mac_b4_to_b5; 1647*4882a593Smuzhiyun }; 1648*4882a593Smuzhiyun 1649*4882a593Smuzhiyun struct ocrdma_detach_mcast_rsp { 1650*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1651*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 1652*4882a593Smuzhiyun }; 1653*4882a593Smuzhiyun 1654*4882a593Smuzhiyun enum { 1655*4882a593Smuzhiyun OCRDMA_CREATE_AH_NUM_PAGES_SHIFT = 19, 1656*4882a593Smuzhiyun OCRDMA_CREATE_AH_NUM_PAGES_MASK = 0xF << 1657*4882a593Smuzhiyun OCRDMA_CREATE_AH_NUM_PAGES_SHIFT, 1658*4882a593Smuzhiyun 1659*4882a593Smuzhiyun OCRDMA_CREATE_AH_PAGE_SIZE_SHIFT = 16, 1660*4882a593Smuzhiyun OCRDMA_CREATE_AH_PAGE_SIZE_MASK = 0x7 << 1661*4882a593Smuzhiyun OCRDMA_CREATE_AH_PAGE_SIZE_SHIFT, 1662*4882a593Smuzhiyun 1663*4882a593Smuzhiyun OCRDMA_CREATE_AH_ENTRY_SIZE_SHIFT = 23, 1664*4882a593Smuzhiyun OCRDMA_CREATE_AH_ENTRY_SIZE_MASK = 0x1FF << 1665*4882a593Smuzhiyun OCRDMA_CREATE_AH_ENTRY_SIZE_SHIFT, 1666*4882a593Smuzhiyun }; 1667*4882a593Smuzhiyun 1668*4882a593Smuzhiyun #define OCRDMA_AH_TBL_PAGES 8 1669*4882a593Smuzhiyun 1670*4882a593Smuzhiyun struct ocrdma_create_ah_tbl { 1671*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1672*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 1673*4882a593Smuzhiyun 1674*4882a593Smuzhiyun u32 ah_conf; 1675*4882a593Smuzhiyun struct ocrdma_pa tbl_addr[8]; 1676*4882a593Smuzhiyun }; 1677*4882a593Smuzhiyun 1678*4882a593Smuzhiyun struct ocrdma_create_ah_tbl_rsp { 1679*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1680*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 1681*4882a593Smuzhiyun u32 ahid; 1682*4882a593Smuzhiyun }; 1683*4882a593Smuzhiyun 1684*4882a593Smuzhiyun struct ocrdma_delete_ah_tbl { 1685*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1686*4882a593Smuzhiyun struct ocrdma_mbx_hdr req; 1687*4882a593Smuzhiyun u32 ahid; 1688*4882a593Smuzhiyun }; 1689*4882a593Smuzhiyun 1690*4882a593Smuzhiyun struct ocrdma_delete_ah_tbl_rsp { 1691*4882a593Smuzhiyun struct ocrdma_mqe_hdr hdr; 1692*4882a593Smuzhiyun struct ocrdma_mbx_rsp rsp; 1693*4882a593Smuzhiyun }; 1694*4882a593Smuzhiyun 1695*4882a593Smuzhiyun enum { 1696*4882a593Smuzhiyun OCRDMA_EQE_VALID_SHIFT = 0, 1697*4882a593Smuzhiyun OCRDMA_EQE_VALID_MASK = BIT(0), 1698*4882a593Smuzhiyun OCRDMA_EQE_MAJOR_CODE_MASK = 0x0E, 1699*4882a593Smuzhiyun OCRDMA_EQE_MAJOR_CODE_SHIFT = 0x01, 1700*4882a593Smuzhiyun OCRDMA_EQE_FOR_CQE_MASK = 0xFFFE, 1701*4882a593Smuzhiyun OCRDMA_EQE_RESOURCE_ID_SHIFT = 16, 1702*4882a593Smuzhiyun OCRDMA_EQE_RESOURCE_ID_MASK = 0xFFFF << 1703*4882a593Smuzhiyun OCRDMA_EQE_RESOURCE_ID_SHIFT, 1704*4882a593Smuzhiyun }; 1705*4882a593Smuzhiyun 1706*4882a593Smuzhiyun enum major_code { 1707*4882a593Smuzhiyun OCRDMA_MAJOR_CODE_COMPLETION = 0x00, 1708*4882a593Smuzhiyun OCRDMA_MAJOR_CODE_SENTINAL = 0x01 1709*4882a593Smuzhiyun }; 1710*4882a593Smuzhiyun 1711*4882a593Smuzhiyun struct ocrdma_eqe { 1712*4882a593Smuzhiyun u32 id_valid; 1713*4882a593Smuzhiyun }; 1714*4882a593Smuzhiyun 1715*4882a593Smuzhiyun enum OCRDMA_CQE_STATUS { 1716*4882a593Smuzhiyun OCRDMA_CQE_SUCCESS = 0, 1717*4882a593Smuzhiyun OCRDMA_CQE_LOC_LEN_ERR, 1718*4882a593Smuzhiyun OCRDMA_CQE_LOC_QP_OP_ERR, 1719*4882a593Smuzhiyun OCRDMA_CQE_LOC_EEC_OP_ERR, 1720*4882a593Smuzhiyun OCRDMA_CQE_LOC_PROT_ERR, 1721*4882a593Smuzhiyun OCRDMA_CQE_WR_FLUSH_ERR, 1722*4882a593Smuzhiyun OCRDMA_CQE_MW_BIND_ERR, 1723*4882a593Smuzhiyun OCRDMA_CQE_BAD_RESP_ERR, 1724*4882a593Smuzhiyun OCRDMA_CQE_LOC_ACCESS_ERR, 1725*4882a593Smuzhiyun OCRDMA_CQE_REM_INV_REQ_ERR, 1726*4882a593Smuzhiyun OCRDMA_CQE_REM_ACCESS_ERR, 1727*4882a593Smuzhiyun OCRDMA_CQE_REM_OP_ERR, 1728*4882a593Smuzhiyun OCRDMA_CQE_RETRY_EXC_ERR, 1729*4882a593Smuzhiyun OCRDMA_CQE_RNR_RETRY_EXC_ERR, 1730*4882a593Smuzhiyun OCRDMA_CQE_LOC_RDD_VIOL_ERR, 1731*4882a593Smuzhiyun OCRDMA_CQE_REM_INV_RD_REQ_ERR, 1732*4882a593Smuzhiyun OCRDMA_CQE_REM_ABORT_ERR, 1733*4882a593Smuzhiyun OCRDMA_CQE_INV_EECN_ERR, 1734*4882a593Smuzhiyun OCRDMA_CQE_INV_EEC_STATE_ERR, 1735*4882a593Smuzhiyun OCRDMA_CQE_FATAL_ERR, 1736*4882a593Smuzhiyun OCRDMA_CQE_RESP_TIMEOUT_ERR, 1737*4882a593Smuzhiyun OCRDMA_CQE_GENERAL_ERR, 1738*4882a593Smuzhiyun 1739*4882a593Smuzhiyun OCRDMA_MAX_CQE_ERR 1740*4882a593Smuzhiyun }; 1741*4882a593Smuzhiyun 1742*4882a593Smuzhiyun enum { 1743*4882a593Smuzhiyun /* w0 */ 1744*4882a593Smuzhiyun OCRDMA_CQE_WQEIDX_SHIFT = 0, 1745*4882a593Smuzhiyun OCRDMA_CQE_WQEIDX_MASK = 0xFFFF, 1746*4882a593Smuzhiyun 1747*4882a593Smuzhiyun /* w1 */ 1748*4882a593Smuzhiyun OCRDMA_CQE_UD_XFER_LEN_SHIFT = 16, 1749*4882a593Smuzhiyun OCRDMA_CQE_UD_XFER_LEN_MASK = 0x1FFF, 1750*4882a593Smuzhiyun OCRDMA_CQE_PKEY_SHIFT = 0, 1751*4882a593Smuzhiyun OCRDMA_CQE_PKEY_MASK = 0xFFFF, 1752*4882a593Smuzhiyun OCRDMA_CQE_UD_L3TYPE_SHIFT = 29, 1753*4882a593Smuzhiyun OCRDMA_CQE_UD_L3TYPE_MASK = 0x07, 1754*4882a593Smuzhiyun 1755*4882a593Smuzhiyun /* w2 */ 1756*4882a593Smuzhiyun OCRDMA_CQE_QPN_SHIFT = 0, 1757*4882a593Smuzhiyun OCRDMA_CQE_QPN_MASK = 0x0000FFFF, 1758*4882a593Smuzhiyun 1759*4882a593Smuzhiyun OCRDMA_CQE_BUFTAG_SHIFT = 16, 1760*4882a593Smuzhiyun OCRDMA_CQE_BUFTAG_MASK = 0xFFFF << OCRDMA_CQE_BUFTAG_SHIFT, 1761*4882a593Smuzhiyun 1762*4882a593Smuzhiyun /* w3 */ 1763*4882a593Smuzhiyun OCRDMA_CQE_UD_STATUS_SHIFT = 24, 1764*4882a593Smuzhiyun OCRDMA_CQE_UD_STATUS_MASK = 0x7 << OCRDMA_CQE_UD_STATUS_SHIFT, 1765*4882a593Smuzhiyun OCRDMA_CQE_STATUS_SHIFT = 16, 1766*4882a593Smuzhiyun OCRDMA_CQE_STATUS_MASK = 0xFF << OCRDMA_CQE_STATUS_SHIFT, 1767*4882a593Smuzhiyun OCRDMA_CQE_VALID = BIT(31), 1768*4882a593Smuzhiyun OCRDMA_CQE_INVALIDATE = BIT(30), 1769*4882a593Smuzhiyun OCRDMA_CQE_QTYPE = BIT(29), 1770*4882a593Smuzhiyun OCRDMA_CQE_IMM = BIT(28), 1771*4882a593Smuzhiyun OCRDMA_CQE_WRITE_IMM = BIT(27), 1772*4882a593Smuzhiyun OCRDMA_CQE_QTYPE_SQ = 0, 1773*4882a593Smuzhiyun OCRDMA_CQE_QTYPE_RQ = 1, 1774*4882a593Smuzhiyun OCRDMA_CQE_SRCQP_MASK = 0xFFFFFF 1775*4882a593Smuzhiyun }; 1776*4882a593Smuzhiyun 1777*4882a593Smuzhiyun struct ocrdma_cqe { 1778*4882a593Smuzhiyun union { 1779*4882a593Smuzhiyun /* w0 to w2 */ 1780*4882a593Smuzhiyun struct { 1781*4882a593Smuzhiyun u32 wqeidx; 1782*4882a593Smuzhiyun u32 bytes_xfered; 1783*4882a593Smuzhiyun u32 qpn; 1784*4882a593Smuzhiyun } wq; 1785*4882a593Smuzhiyun struct { 1786*4882a593Smuzhiyun u32 lkey_immdt; 1787*4882a593Smuzhiyun u32 rxlen; 1788*4882a593Smuzhiyun u32 buftag_qpn; 1789*4882a593Smuzhiyun } rq; 1790*4882a593Smuzhiyun struct { 1791*4882a593Smuzhiyun u32 lkey_immdt; 1792*4882a593Smuzhiyun u32 rxlen_pkey; 1793*4882a593Smuzhiyun u32 buftag_qpn; 1794*4882a593Smuzhiyun } ud; 1795*4882a593Smuzhiyun struct { 1796*4882a593Smuzhiyun u32 word_0; 1797*4882a593Smuzhiyun u32 word_1; 1798*4882a593Smuzhiyun u32 qpn; 1799*4882a593Smuzhiyun } cmn; 1800*4882a593Smuzhiyun }; 1801*4882a593Smuzhiyun u32 flags_status_srcqpn; /* w3 */ 1802*4882a593Smuzhiyun }; 1803*4882a593Smuzhiyun 1804*4882a593Smuzhiyun struct ocrdma_sge { 1805*4882a593Smuzhiyun u32 addr_hi; 1806*4882a593Smuzhiyun u32 addr_lo; 1807*4882a593Smuzhiyun u32 lrkey; 1808*4882a593Smuzhiyun u32 len; 1809*4882a593Smuzhiyun }; 1810*4882a593Smuzhiyun 1811*4882a593Smuzhiyun enum { 1812*4882a593Smuzhiyun OCRDMA_FLAG_SIG = 0x1, 1813*4882a593Smuzhiyun OCRDMA_FLAG_INV = 0x2, 1814*4882a593Smuzhiyun OCRDMA_FLAG_FENCE_L = 0x4, 1815*4882a593Smuzhiyun OCRDMA_FLAG_FENCE_R = 0x8, 1816*4882a593Smuzhiyun OCRDMA_FLAG_SOLICIT = 0x10, 1817*4882a593Smuzhiyun OCRDMA_FLAG_IMM = 0x20, 1818*4882a593Smuzhiyun OCRDMA_FLAG_AH_VLAN_PR = 0x40, 1819*4882a593Smuzhiyun 1820*4882a593Smuzhiyun /* Stag flags */ 1821*4882a593Smuzhiyun OCRDMA_LKEY_FLAG_LOCAL_WR = 0x1, 1822*4882a593Smuzhiyun OCRDMA_LKEY_FLAG_REMOTE_RD = 0x2, 1823*4882a593Smuzhiyun OCRDMA_LKEY_FLAG_REMOTE_WR = 0x4, 1824*4882a593Smuzhiyun OCRDMA_LKEY_FLAG_VATO = 0x8, 1825*4882a593Smuzhiyun }; 1826*4882a593Smuzhiyun 1827*4882a593Smuzhiyun enum OCRDMA_WQE_OPCODE { 1828*4882a593Smuzhiyun OCRDMA_WRITE = 0x06, 1829*4882a593Smuzhiyun OCRDMA_READ = 0x0C, 1830*4882a593Smuzhiyun OCRDMA_RESV0 = 0x02, 1831*4882a593Smuzhiyun OCRDMA_SEND = 0x00, 1832*4882a593Smuzhiyun OCRDMA_CMP_SWP = 0x14, 1833*4882a593Smuzhiyun OCRDMA_BIND_MW = 0x10, 1834*4882a593Smuzhiyun OCRDMA_FR_MR = 0x11, 1835*4882a593Smuzhiyun OCRDMA_RESV1 = 0x0A, 1836*4882a593Smuzhiyun OCRDMA_LKEY_INV = 0x15, 1837*4882a593Smuzhiyun OCRDMA_FETCH_ADD = 0x13, 1838*4882a593Smuzhiyun OCRDMA_POST_RQ = 0x12 1839*4882a593Smuzhiyun }; 1840*4882a593Smuzhiyun 1841*4882a593Smuzhiyun enum { 1842*4882a593Smuzhiyun OCRDMA_TYPE_INLINE = 0x0, 1843*4882a593Smuzhiyun OCRDMA_TYPE_LKEY = 0x1, 1844*4882a593Smuzhiyun }; 1845*4882a593Smuzhiyun 1846*4882a593Smuzhiyun enum { 1847*4882a593Smuzhiyun OCRDMA_WQE_OPCODE_SHIFT = 0, 1848*4882a593Smuzhiyun OCRDMA_WQE_OPCODE_MASK = 0x0000001F, 1849*4882a593Smuzhiyun OCRDMA_WQE_FLAGS_SHIFT = 5, 1850*4882a593Smuzhiyun OCRDMA_WQE_TYPE_SHIFT = 16, 1851*4882a593Smuzhiyun OCRDMA_WQE_TYPE_MASK = 0x00030000, 1852*4882a593Smuzhiyun OCRDMA_WQE_SIZE_SHIFT = 18, 1853*4882a593Smuzhiyun OCRDMA_WQE_SIZE_MASK = 0xFF, 1854*4882a593Smuzhiyun OCRDMA_WQE_NXT_WQE_SIZE_SHIFT = 25, 1855*4882a593Smuzhiyun 1856*4882a593Smuzhiyun OCRDMA_WQE_LKEY_FLAGS_SHIFT = 0, 1857*4882a593Smuzhiyun OCRDMA_WQE_LKEY_FLAGS_MASK = 0xF 1858*4882a593Smuzhiyun }; 1859*4882a593Smuzhiyun 1860*4882a593Smuzhiyun /* header WQE for all the SQ and RQ operations */ 1861*4882a593Smuzhiyun struct ocrdma_hdr_wqe { 1862*4882a593Smuzhiyun u32 cw; 1863*4882a593Smuzhiyun union { 1864*4882a593Smuzhiyun u32 rsvd_tag; 1865*4882a593Smuzhiyun u32 rsvd_lkey_flags; 1866*4882a593Smuzhiyun }; 1867*4882a593Smuzhiyun union { 1868*4882a593Smuzhiyun u32 immdt; 1869*4882a593Smuzhiyun u32 lkey; 1870*4882a593Smuzhiyun }; 1871*4882a593Smuzhiyun u32 total_len; 1872*4882a593Smuzhiyun }; 1873*4882a593Smuzhiyun 1874*4882a593Smuzhiyun struct ocrdma_ewqe_ud_hdr { 1875*4882a593Smuzhiyun u32 rsvd_dest_qpn; 1876*4882a593Smuzhiyun u32 qkey; 1877*4882a593Smuzhiyun u32 rsvd_ahid; 1878*4882a593Smuzhiyun u32 hdr_type; 1879*4882a593Smuzhiyun }; 1880*4882a593Smuzhiyun 1881*4882a593Smuzhiyun /* extended wqe followed by hdr_wqe for Fast Memory register */ 1882*4882a593Smuzhiyun struct ocrdma_ewqe_fr { 1883*4882a593Smuzhiyun u32 va_hi; 1884*4882a593Smuzhiyun u32 va_lo; 1885*4882a593Smuzhiyun u32 fbo_hi; 1886*4882a593Smuzhiyun u32 fbo_lo; 1887*4882a593Smuzhiyun u32 size_sge; 1888*4882a593Smuzhiyun u32 num_sges; 1889*4882a593Smuzhiyun u32 rsvd; 1890*4882a593Smuzhiyun u32 rsvd2; 1891*4882a593Smuzhiyun }; 1892*4882a593Smuzhiyun 1893*4882a593Smuzhiyun struct ocrdma_eth_basic { 1894*4882a593Smuzhiyun u8 dmac[6]; 1895*4882a593Smuzhiyun u8 smac[6]; 1896*4882a593Smuzhiyun __be16 eth_type; 1897*4882a593Smuzhiyun } __packed; 1898*4882a593Smuzhiyun 1899*4882a593Smuzhiyun struct ocrdma_eth_vlan { 1900*4882a593Smuzhiyun u8 dmac[6]; 1901*4882a593Smuzhiyun u8 smac[6]; 1902*4882a593Smuzhiyun __be16 eth_type; 1903*4882a593Smuzhiyun __be16 vlan_tag; 1904*4882a593Smuzhiyun __be16 roce_eth_type; 1905*4882a593Smuzhiyun } __packed; 1906*4882a593Smuzhiyun 1907*4882a593Smuzhiyun struct ocrdma_grh { 1908*4882a593Smuzhiyun __be32 tclass_flow; 1909*4882a593Smuzhiyun __be32 pdid_hoplimit; 1910*4882a593Smuzhiyun u8 sgid[16]; 1911*4882a593Smuzhiyun u8 dgid[16]; 1912*4882a593Smuzhiyun u16 rsvd; 1913*4882a593Smuzhiyun } __packed; 1914*4882a593Smuzhiyun 1915*4882a593Smuzhiyun #define OCRDMA_AV_VALID BIT(7) 1916*4882a593Smuzhiyun #define OCRDMA_AV_VLAN_VALID BIT(1) 1917*4882a593Smuzhiyun 1918*4882a593Smuzhiyun struct ocrdma_av { 1919*4882a593Smuzhiyun struct ocrdma_eth_vlan eth_hdr; 1920*4882a593Smuzhiyun struct ocrdma_grh grh; 1921*4882a593Smuzhiyun u32 valid; 1922*4882a593Smuzhiyun } __packed; 1923*4882a593Smuzhiyun 1924*4882a593Smuzhiyun struct ocrdma_rsrc_stats { 1925*4882a593Smuzhiyun u32 dpp_pds; 1926*4882a593Smuzhiyun u32 non_dpp_pds; 1927*4882a593Smuzhiyun u32 rc_dpp_qps; 1928*4882a593Smuzhiyun u32 uc_dpp_qps; 1929*4882a593Smuzhiyun u32 ud_dpp_qps; 1930*4882a593Smuzhiyun u32 rc_non_dpp_qps; 1931*4882a593Smuzhiyun u32 rsvd; 1932*4882a593Smuzhiyun u32 uc_non_dpp_qps; 1933*4882a593Smuzhiyun u32 ud_non_dpp_qps; 1934*4882a593Smuzhiyun u32 rsvd1; 1935*4882a593Smuzhiyun u32 srqs; 1936*4882a593Smuzhiyun u32 rbqs; 1937*4882a593Smuzhiyun u32 r64K_nsmr; 1938*4882a593Smuzhiyun u32 r64K_to_2M_nsmr; 1939*4882a593Smuzhiyun u32 r2M_to_44M_nsmr; 1940*4882a593Smuzhiyun u32 r44M_to_1G_nsmr; 1941*4882a593Smuzhiyun u32 r1G_to_4G_nsmr; 1942*4882a593Smuzhiyun u32 nsmr_count_4G_to_32G; 1943*4882a593Smuzhiyun u32 r32G_to_64G_nsmr; 1944*4882a593Smuzhiyun u32 r64G_to_128G_nsmr; 1945*4882a593Smuzhiyun u32 r128G_to_higher_nsmr; 1946*4882a593Smuzhiyun u32 embedded_nsmr; 1947*4882a593Smuzhiyun u32 frmr; 1948*4882a593Smuzhiyun u32 prefetch_qps; 1949*4882a593Smuzhiyun u32 ondemand_qps; 1950*4882a593Smuzhiyun u32 phy_mr; 1951*4882a593Smuzhiyun u32 mw; 1952*4882a593Smuzhiyun u32 rsvd2[7]; 1953*4882a593Smuzhiyun }; 1954*4882a593Smuzhiyun 1955*4882a593Smuzhiyun struct ocrdma_db_err_stats { 1956*4882a593Smuzhiyun u32 sq_doorbell_errors; 1957*4882a593Smuzhiyun u32 cq_doorbell_errors; 1958*4882a593Smuzhiyun u32 rq_srq_doorbell_errors; 1959*4882a593Smuzhiyun u32 cq_overflow_errors; 1960*4882a593Smuzhiyun u32 rsvd[4]; 1961*4882a593Smuzhiyun }; 1962*4882a593Smuzhiyun 1963*4882a593Smuzhiyun struct ocrdma_wqe_stats { 1964*4882a593Smuzhiyun u32 large_send_rc_wqes_lo; 1965*4882a593Smuzhiyun u32 large_send_rc_wqes_hi; 1966*4882a593Smuzhiyun u32 large_write_rc_wqes_lo; 1967*4882a593Smuzhiyun u32 large_write_rc_wqes_hi; 1968*4882a593Smuzhiyun u32 rsvd[4]; 1969*4882a593Smuzhiyun u32 read_wqes_lo; 1970*4882a593Smuzhiyun u32 read_wqes_hi; 1971*4882a593Smuzhiyun u32 frmr_wqes_lo; 1972*4882a593Smuzhiyun u32 frmr_wqes_hi; 1973*4882a593Smuzhiyun u32 mw_bind_wqes_lo; 1974*4882a593Smuzhiyun u32 mw_bind_wqes_hi; 1975*4882a593Smuzhiyun u32 invalidate_wqes_lo; 1976*4882a593Smuzhiyun u32 invalidate_wqes_hi; 1977*4882a593Smuzhiyun u32 rsvd1[2]; 1978*4882a593Smuzhiyun u32 dpp_wqe_drops; 1979*4882a593Smuzhiyun u32 rsvd2[5]; 1980*4882a593Smuzhiyun }; 1981*4882a593Smuzhiyun 1982*4882a593Smuzhiyun struct ocrdma_tx_stats { 1983*4882a593Smuzhiyun u32 send_pkts_lo; 1984*4882a593Smuzhiyun u32 send_pkts_hi; 1985*4882a593Smuzhiyun u32 write_pkts_lo; 1986*4882a593Smuzhiyun u32 write_pkts_hi; 1987*4882a593Smuzhiyun u32 read_pkts_lo; 1988*4882a593Smuzhiyun u32 read_pkts_hi; 1989*4882a593Smuzhiyun u32 read_rsp_pkts_lo; 1990*4882a593Smuzhiyun u32 read_rsp_pkts_hi; 1991*4882a593Smuzhiyun u32 ack_pkts_lo; 1992*4882a593Smuzhiyun u32 ack_pkts_hi; 1993*4882a593Smuzhiyun u32 send_bytes_lo; 1994*4882a593Smuzhiyun u32 send_bytes_hi; 1995*4882a593Smuzhiyun u32 write_bytes_lo; 1996*4882a593Smuzhiyun u32 write_bytes_hi; 1997*4882a593Smuzhiyun u32 read_req_bytes_lo; 1998*4882a593Smuzhiyun u32 read_req_bytes_hi; 1999*4882a593Smuzhiyun u32 read_rsp_bytes_lo; 2000*4882a593Smuzhiyun u32 read_rsp_bytes_hi; 2001*4882a593Smuzhiyun u32 ack_timeouts; 2002*4882a593Smuzhiyun u32 rsvd[5]; 2003*4882a593Smuzhiyun }; 2004*4882a593Smuzhiyun 2005*4882a593Smuzhiyun 2006*4882a593Smuzhiyun struct ocrdma_tx_qp_err_stats { 2007*4882a593Smuzhiyun u32 local_length_errors; 2008*4882a593Smuzhiyun u32 local_protection_errors; 2009*4882a593Smuzhiyun u32 local_qp_operation_errors; 2010*4882a593Smuzhiyun u32 retry_count_exceeded_errors; 2011*4882a593Smuzhiyun u32 rnr_retry_count_exceeded_errors; 2012*4882a593Smuzhiyun u32 rsvd[3]; 2013*4882a593Smuzhiyun }; 2014*4882a593Smuzhiyun 2015*4882a593Smuzhiyun struct ocrdma_rx_stats { 2016*4882a593Smuzhiyun u32 roce_frame_bytes_lo; 2017*4882a593Smuzhiyun u32 roce_frame_bytes_hi; 2018*4882a593Smuzhiyun u32 roce_frame_icrc_drops; 2019*4882a593Smuzhiyun u32 roce_frame_payload_len_drops; 2020*4882a593Smuzhiyun u32 ud_drops; 2021*4882a593Smuzhiyun u32 qp1_drops; 2022*4882a593Smuzhiyun u32 psn_error_request_packets; 2023*4882a593Smuzhiyun u32 psn_error_resp_packets; 2024*4882a593Smuzhiyun u32 rnr_nak_timeouts; 2025*4882a593Smuzhiyun u32 rnr_nak_receives; 2026*4882a593Smuzhiyun u32 roce_frame_rxmt_drops; 2027*4882a593Smuzhiyun u32 nak_count_psn_sequence_errors; 2028*4882a593Smuzhiyun u32 rc_drop_count_lookup_errors; 2029*4882a593Smuzhiyun u32 rq_rnr_naks; 2030*4882a593Smuzhiyun u32 srq_rnr_naks; 2031*4882a593Smuzhiyun u32 roce_frames_lo; 2032*4882a593Smuzhiyun u32 roce_frames_hi; 2033*4882a593Smuzhiyun u32 rsvd; 2034*4882a593Smuzhiyun }; 2035*4882a593Smuzhiyun 2036*4882a593Smuzhiyun struct ocrdma_rx_qp_err_stats { 2037*4882a593Smuzhiyun u32 nak_invalid_request_errors; 2038*4882a593Smuzhiyun u32 nak_remote_operation_errors; 2039*4882a593Smuzhiyun u32 nak_count_remote_access_errors; 2040*4882a593Smuzhiyun u32 local_length_errors; 2041*4882a593Smuzhiyun u32 local_protection_errors; 2042*4882a593Smuzhiyun u32 local_qp_operation_errors; 2043*4882a593Smuzhiyun u32 rsvd[2]; 2044*4882a593Smuzhiyun }; 2045*4882a593Smuzhiyun 2046*4882a593Smuzhiyun struct ocrdma_tx_dbg_stats { 2047*4882a593Smuzhiyun u32 data[100]; 2048*4882a593Smuzhiyun }; 2049*4882a593Smuzhiyun 2050*4882a593Smuzhiyun struct ocrdma_rx_dbg_stats { 2051*4882a593Smuzhiyun u32 data[200]; 2052*4882a593Smuzhiyun }; 2053*4882a593Smuzhiyun 2054*4882a593Smuzhiyun struct ocrdma_rdma_stats_req { 2055*4882a593Smuzhiyun struct ocrdma_mbx_hdr hdr; 2056*4882a593Smuzhiyun u8 reset_stats; 2057*4882a593Smuzhiyun u8 rsvd[3]; 2058*4882a593Smuzhiyun } __packed; 2059*4882a593Smuzhiyun 2060*4882a593Smuzhiyun struct ocrdma_rdma_stats_resp { 2061*4882a593Smuzhiyun struct ocrdma_mbx_hdr hdr; 2062*4882a593Smuzhiyun struct ocrdma_rsrc_stats act_rsrc_stats; 2063*4882a593Smuzhiyun struct ocrdma_rsrc_stats th_rsrc_stats; 2064*4882a593Smuzhiyun struct ocrdma_db_err_stats db_err_stats; 2065*4882a593Smuzhiyun struct ocrdma_wqe_stats wqe_stats; 2066*4882a593Smuzhiyun struct ocrdma_tx_stats tx_stats; 2067*4882a593Smuzhiyun struct ocrdma_tx_qp_err_stats tx_qp_err_stats; 2068*4882a593Smuzhiyun struct ocrdma_rx_stats rx_stats; 2069*4882a593Smuzhiyun struct ocrdma_rx_qp_err_stats rx_qp_err_stats; 2070*4882a593Smuzhiyun struct ocrdma_tx_dbg_stats tx_dbg_stats; 2071*4882a593Smuzhiyun struct ocrdma_rx_dbg_stats rx_dbg_stats; 2072*4882a593Smuzhiyun } __packed; 2073*4882a593Smuzhiyun 2074*4882a593Smuzhiyun enum { 2075*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_EPROM_VER_LO_MASK = 0xFF, 2076*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_EPROM_VER_HI_MASK = 0xFF00, 2077*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_EPROM_VER_HI_SHIFT = 0x08, 2078*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_CDBLEN_MASK = 0xFFFF, 2079*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_ASIC_REV_MASK = 0xFF0000, 2080*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_ASIC_REV_SHIFT = 0x10, 2081*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_GUID0_MASK = 0xFF000000, 2082*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_GUID0_SHIFT = 0x18, 2083*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_GUID13_MASK = 0xFF, 2084*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_GUID14_MASK = 0xFF00, 2085*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_GUID14_SHIFT = 0x08, 2086*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_GUID15_MASK = 0xFF0000, 2087*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_GUID15_SHIFT = 0x10, 2088*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_PCNT_MASK = 0xFF000000, 2089*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_PCNT_SHIFT = 0x18, 2090*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_LDTOUT_MASK = 0xFFFF, 2091*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_ISCSI_VER_MASK = 0xFF0000, 2092*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_ISCSI_VER_SHIFT = 0x10, 2093*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_MFUNC_DEV_MASK = 0xFF000000, 2094*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_MFUNC_DEV_SHIFT = 0x18, 2095*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_CV_MASK = 0xFF, 2096*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_HBA_ST_MASK = 0xFF00, 2097*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_HBA_ST_SHIFT = 0x08, 2098*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_MAX_DOMS_MASK = 0xFF0000, 2099*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_MAX_DOMS_SHIFT = 0x10, 2100*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_PTNUM_MASK = 0x3F000000, 2101*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_PTNUM_SHIFT = 0x18, 2102*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_PT_MASK = 0xC0000000, 2103*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_PT_SHIFT = 0x1E, 2104*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_ISCSI_FET_MASK = 0xFF, 2105*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_ASIC_GEN_MASK = 0xFF00, 2106*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_ASIC_GEN_SHIFT = 0x08, 2107*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_PCI_VID_MASK = 0xFFFF, 2108*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_PCI_DID_MASK = 0xFFFF0000, 2109*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_PCI_DID_SHIFT = 0x10, 2110*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_PCI_SVID_MASK = 0xFFFF, 2111*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_PCI_SSID_MASK = 0xFFFF0000, 2112*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_PCI_SSID_SHIFT = 0x10, 2113*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_PCI_BUSNUM_MASK = 0xFF, 2114*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_PCI_DEVNUM_MASK = 0xFF00, 2115*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_PCI_DEVNUM_SHIFT = 0x08, 2116*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_PCI_FUNCNUM_MASK = 0xFF0000, 2117*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_PCI_FUNCNUM_SHIFT = 0x10, 2118*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_IF_TYPE_MASK = 0xFF000000, 2119*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_IF_TYPE_SHIFT = 0x18, 2120*4882a593Smuzhiyun OCRDMA_HBA_ATTRB_NETFIL_MASK =0xFF 2121*4882a593Smuzhiyun }; 2122*4882a593Smuzhiyun 2123*4882a593Smuzhiyun struct mgmt_hba_attribs { 2124*4882a593Smuzhiyun u8 flashrom_version_string[32]; 2125*4882a593Smuzhiyun u8 manufacturer_name[32]; 2126*4882a593Smuzhiyun u32 supported_modes; 2127*4882a593Smuzhiyun u32 rsvd_eprom_verhi_verlo; 2128*4882a593Smuzhiyun u32 mbx_ds_ver; 2129*4882a593Smuzhiyun u32 epfw_ds_ver; 2130*4882a593Smuzhiyun u8 ncsi_ver_string[12]; 2131*4882a593Smuzhiyun u32 default_extended_timeout; 2132*4882a593Smuzhiyun u8 controller_model_number[32]; 2133*4882a593Smuzhiyun u8 controller_description[64]; 2134*4882a593Smuzhiyun u8 controller_serial_number[32]; 2135*4882a593Smuzhiyun u8 ip_version_string[32]; 2136*4882a593Smuzhiyun u8 firmware_version_string[32]; 2137*4882a593Smuzhiyun u8 bios_version_string[32]; 2138*4882a593Smuzhiyun u8 redboot_version_string[32]; 2139*4882a593Smuzhiyun u8 driver_version_string[32]; 2140*4882a593Smuzhiyun u8 fw_on_flash_version_string[32]; 2141*4882a593Smuzhiyun u32 functionalities_supported; 2142*4882a593Smuzhiyun u32 guid0_asicrev_cdblen; 2143*4882a593Smuzhiyun u8 generational_guid[12]; 2144*4882a593Smuzhiyun u32 portcnt_guid15; 2145*4882a593Smuzhiyun u32 mfuncdev_iscsi_ldtout; 2146*4882a593Smuzhiyun u32 ptpnum_maxdoms_hbast_cv; 2147*4882a593Smuzhiyun u32 firmware_post_status; 2148*4882a593Smuzhiyun u32 hba_mtu[8]; 2149*4882a593Smuzhiyun u32 res_asicgen_iscsi_feaures; 2150*4882a593Smuzhiyun u32 rsvd1[3]; 2151*4882a593Smuzhiyun }; 2152*4882a593Smuzhiyun 2153*4882a593Smuzhiyun struct mgmt_controller_attrib { 2154*4882a593Smuzhiyun struct mgmt_hba_attribs hba_attribs; 2155*4882a593Smuzhiyun u32 pci_did_vid; 2156*4882a593Smuzhiyun u32 pci_ssid_svid; 2157*4882a593Smuzhiyun u32 ityp_fnum_devnum_bnum; 2158*4882a593Smuzhiyun u32 uid_hi; 2159*4882a593Smuzhiyun u32 uid_lo; 2160*4882a593Smuzhiyun u32 res_nnetfil; 2161*4882a593Smuzhiyun u32 rsvd0[4]; 2162*4882a593Smuzhiyun }; 2163*4882a593Smuzhiyun 2164*4882a593Smuzhiyun struct ocrdma_get_ctrl_attribs_rsp { 2165*4882a593Smuzhiyun struct ocrdma_mbx_hdr hdr; 2166*4882a593Smuzhiyun struct mgmt_controller_attrib ctrl_attribs; 2167*4882a593Smuzhiyun }; 2168*4882a593Smuzhiyun 2169*4882a593Smuzhiyun #define OCRDMA_SUBSYS_DCBX 0x10 2170*4882a593Smuzhiyun 2171*4882a593Smuzhiyun enum OCRDMA_DCBX_OPCODE { 2172*4882a593Smuzhiyun OCRDMA_CMD_GET_DCBX_CONFIG = 0x01 2173*4882a593Smuzhiyun }; 2174*4882a593Smuzhiyun 2175*4882a593Smuzhiyun enum OCRDMA_DCBX_PARAM_TYPE { 2176*4882a593Smuzhiyun OCRDMA_PARAMETER_TYPE_ADMIN = 0x00, 2177*4882a593Smuzhiyun OCRDMA_PARAMETER_TYPE_OPER = 0x01, 2178*4882a593Smuzhiyun OCRDMA_PARAMETER_TYPE_PEER = 0x02 2179*4882a593Smuzhiyun }; 2180*4882a593Smuzhiyun 2181*4882a593Smuzhiyun enum OCRDMA_DCBX_PROTO { 2182*4882a593Smuzhiyun OCRDMA_PROTO_SELECT_L2 = 0x00, 2183*4882a593Smuzhiyun OCRDMA_PROTO_SELECT_L4 = 0x01 2184*4882a593Smuzhiyun }; 2185*4882a593Smuzhiyun 2186*4882a593Smuzhiyun enum OCRDMA_DCBX_APP_PARAM { 2187*4882a593Smuzhiyun OCRDMA_APP_PARAM_APP_PROTO_MASK = 0xFFFF, 2188*4882a593Smuzhiyun OCRDMA_APP_PARAM_PROTO_SEL_MASK = 0xFF, 2189*4882a593Smuzhiyun OCRDMA_APP_PARAM_PROTO_SEL_SHIFT = 0x10, 2190*4882a593Smuzhiyun OCRDMA_APP_PARAM_VALID_MASK = 0xFF, 2191*4882a593Smuzhiyun OCRDMA_APP_PARAM_VALID_SHIFT = 0x18 2192*4882a593Smuzhiyun }; 2193*4882a593Smuzhiyun 2194*4882a593Smuzhiyun enum OCRDMA_DCBX_STATE_FLAGS { 2195*4882a593Smuzhiyun OCRDMA_STATE_FLAG_ENABLED = 0x01, 2196*4882a593Smuzhiyun OCRDMA_STATE_FLAG_ADDVERTISED = 0x02, 2197*4882a593Smuzhiyun OCRDMA_STATE_FLAG_WILLING = 0x04, 2198*4882a593Smuzhiyun OCRDMA_STATE_FLAG_SYNC = 0x08, 2199*4882a593Smuzhiyun OCRDMA_STATE_FLAG_UNSUPPORTED = 0x40000000, 2200*4882a593Smuzhiyun OCRDMA_STATE_FLAG_NEG_FAILD = 0x80000000 2201*4882a593Smuzhiyun }; 2202*4882a593Smuzhiyun 2203*4882a593Smuzhiyun enum OCRDMA_TCV_AEV_OPV_ST { 2204*4882a593Smuzhiyun OCRDMA_DCBX_TC_SUPPORT_MASK = 0xFF, 2205*4882a593Smuzhiyun OCRDMA_DCBX_TC_SUPPORT_SHIFT = 0x18, 2206*4882a593Smuzhiyun OCRDMA_DCBX_APP_ENTRY_SHIFT = 0x10, 2207*4882a593Smuzhiyun OCRDMA_DCBX_OP_PARAM_SHIFT = 0x08, 2208*4882a593Smuzhiyun OCRDMA_DCBX_STATE_MASK = 0xFF 2209*4882a593Smuzhiyun }; 2210*4882a593Smuzhiyun 2211*4882a593Smuzhiyun struct ocrdma_app_parameter { 2212*4882a593Smuzhiyun u32 valid_proto_app; 2213*4882a593Smuzhiyun u32 oui; 2214*4882a593Smuzhiyun u32 app_prio[2]; 2215*4882a593Smuzhiyun }; 2216*4882a593Smuzhiyun 2217*4882a593Smuzhiyun struct ocrdma_dcbx_cfg { 2218*4882a593Smuzhiyun u32 tcv_aev_opv_st; 2219*4882a593Smuzhiyun u32 tc_state; 2220*4882a593Smuzhiyun u32 pfc_state; 2221*4882a593Smuzhiyun u32 qcn_state; 2222*4882a593Smuzhiyun u32 appl_state; 2223*4882a593Smuzhiyun u32 ll_state; 2224*4882a593Smuzhiyun u32 tc_bw[2]; 2225*4882a593Smuzhiyun u32 tc_prio[8]; 2226*4882a593Smuzhiyun u32 pfc_prio[2]; 2227*4882a593Smuzhiyun struct ocrdma_app_parameter app_param[15]; 2228*4882a593Smuzhiyun }; 2229*4882a593Smuzhiyun 2230*4882a593Smuzhiyun struct ocrdma_get_dcbx_cfg_req { 2231*4882a593Smuzhiyun struct ocrdma_mbx_hdr hdr; 2232*4882a593Smuzhiyun u32 param_type; 2233*4882a593Smuzhiyun } __packed; 2234*4882a593Smuzhiyun 2235*4882a593Smuzhiyun struct ocrdma_get_dcbx_cfg_rsp { 2236*4882a593Smuzhiyun struct ocrdma_mbx_rsp hdr; 2237*4882a593Smuzhiyun struct ocrdma_dcbx_cfg cfg; 2238*4882a593Smuzhiyun } __packed; 2239*4882a593Smuzhiyun 2240*4882a593Smuzhiyun #endif /* __OCRDMA_SLI_H__ */ 2241