1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (c) 2009-2010 Chelsio, Inc. All rights reserved. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * This software is available to you under a choice of one of two 5*4882a593Smuzhiyun * licenses. You may choose to be licensed under the terms of the GNU 6*4882a593Smuzhiyun * General Public License (GPL) Version 2, available from the file 7*4882a593Smuzhiyun * COPYING in the main directory of this source tree, or the 8*4882a593Smuzhiyun * OpenIB.org BSD license below: 9*4882a593Smuzhiyun * 10*4882a593Smuzhiyun * Redistribution and use in source and binary forms, with or 11*4882a593Smuzhiyun * without modification, are permitted provided that the following 12*4882a593Smuzhiyun * conditions are met: 13*4882a593Smuzhiyun * 14*4882a593Smuzhiyun * - Redistributions of source code must retain the above 15*4882a593Smuzhiyun * copyright notice, this list of conditions and the following 16*4882a593Smuzhiyun * disclaimer. 17*4882a593Smuzhiyun * - Redistributions in binary form must reproduce the above 18*4882a593Smuzhiyun * copyright notice, this list of conditions and the following 19*4882a593Smuzhiyun * disclaimer in the documentation and/or other materials 20*4882a593Smuzhiyun * provided with the distribution. 21*4882a593Smuzhiyun * 22*4882a593Smuzhiyun * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 23*4882a593Smuzhiyun * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 24*4882a593Smuzhiyun * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 25*4882a593Smuzhiyun * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 26*4882a593Smuzhiyun * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 27*4882a593Smuzhiyun * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 28*4882a593Smuzhiyun * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 29*4882a593Smuzhiyun * SOFTWARE. 30*4882a593Smuzhiyun */ 31*4882a593Smuzhiyun #ifndef _T4FW_RI_API_H_ 32*4882a593Smuzhiyun #define _T4FW_RI_API_H_ 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun #include "t4fw_api.h" 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun enum fw_ri_wr_opcode { 37*4882a593Smuzhiyun FW_RI_RDMA_WRITE = 0x0, /* IETF RDMAP v1.0 ... */ 38*4882a593Smuzhiyun FW_RI_READ_REQ = 0x1, 39*4882a593Smuzhiyun FW_RI_READ_RESP = 0x2, 40*4882a593Smuzhiyun FW_RI_SEND = 0x3, 41*4882a593Smuzhiyun FW_RI_SEND_WITH_INV = 0x4, 42*4882a593Smuzhiyun FW_RI_SEND_WITH_SE = 0x5, 43*4882a593Smuzhiyun FW_RI_SEND_WITH_SE_INV = 0x6, 44*4882a593Smuzhiyun FW_RI_TERMINATE = 0x7, 45*4882a593Smuzhiyun FW_RI_RDMA_INIT = 0x8, /* CHELSIO RI specific ... */ 46*4882a593Smuzhiyun FW_RI_BIND_MW = 0x9, 47*4882a593Smuzhiyun FW_RI_FAST_REGISTER = 0xa, 48*4882a593Smuzhiyun FW_RI_LOCAL_INV = 0xb, 49*4882a593Smuzhiyun FW_RI_QP_MODIFY = 0xc, 50*4882a593Smuzhiyun FW_RI_BYPASS = 0xd, 51*4882a593Smuzhiyun FW_RI_RECEIVE = 0xe, 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun FW_RI_SGE_EC_CR_RETURN = 0xf, 54*4882a593Smuzhiyun FW_RI_WRITE_IMMEDIATE = FW_RI_RDMA_INIT 55*4882a593Smuzhiyun }; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun enum fw_ri_wr_flags { 58*4882a593Smuzhiyun FW_RI_COMPLETION_FLAG = 0x01, 59*4882a593Smuzhiyun FW_RI_NOTIFICATION_FLAG = 0x02, 60*4882a593Smuzhiyun FW_RI_SOLICITED_EVENT_FLAG = 0x04, 61*4882a593Smuzhiyun FW_RI_READ_FENCE_FLAG = 0x08, 62*4882a593Smuzhiyun FW_RI_LOCAL_FENCE_FLAG = 0x10, 63*4882a593Smuzhiyun FW_RI_RDMA_READ_INVALIDATE = 0x20, 64*4882a593Smuzhiyun FW_RI_RDMA_WRITE_WITH_IMMEDIATE = 0x40 65*4882a593Smuzhiyun }; 66*4882a593Smuzhiyun 67*4882a593Smuzhiyun enum fw_ri_mpa_attrs { 68*4882a593Smuzhiyun FW_RI_MPA_RX_MARKER_ENABLE = 0x01, 69*4882a593Smuzhiyun FW_RI_MPA_TX_MARKER_ENABLE = 0x02, 70*4882a593Smuzhiyun FW_RI_MPA_CRC_ENABLE = 0x04, 71*4882a593Smuzhiyun FW_RI_MPA_IETF_ENABLE = 0x08 72*4882a593Smuzhiyun }; 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun enum fw_ri_qp_caps { 75*4882a593Smuzhiyun FW_RI_QP_RDMA_READ_ENABLE = 0x01, 76*4882a593Smuzhiyun FW_RI_QP_RDMA_WRITE_ENABLE = 0x02, 77*4882a593Smuzhiyun FW_RI_QP_BIND_ENABLE = 0x04, 78*4882a593Smuzhiyun FW_RI_QP_FAST_REGISTER_ENABLE = 0x08, 79*4882a593Smuzhiyun FW_RI_QP_STAG0_ENABLE = 0x10 80*4882a593Smuzhiyun }; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun enum fw_ri_addr_type { 83*4882a593Smuzhiyun FW_RI_ZERO_BASED_TO = 0x00, 84*4882a593Smuzhiyun FW_RI_VA_BASED_TO = 0x01 85*4882a593Smuzhiyun }; 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun enum fw_ri_mem_perms { 88*4882a593Smuzhiyun FW_RI_MEM_ACCESS_REM_WRITE = 0x01, 89*4882a593Smuzhiyun FW_RI_MEM_ACCESS_REM_READ = 0x02, 90*4882a593Smuzhiyun FW_RI_MEM_ACCESS_REM = 0x03, 91*4882a593Smuzhiyun FW_RI_MEM_ACCESS_LOCAL_WRITE = 0x04, 92*4882a593Smuzhiyun FW_RI_MEM_ACCESS_LOCAL_READ = 0x08, 93*4882a593Smuzhiyun FW_RI_MEM_ACCESS_LOCAL = 0x0C 94*4882a593Smuzhiyun }; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun enum fw_ri_stag_type { 97*4882a593Smuzhiyun FW_RI_STAG_NSMR = 0x00, 98*4882a593Smuzhiyun FW_RI_STAG_SMR = 0x01, 99*4882a593Smuzhiyun FW_RI_STAG_MW = 0x02, 100*4882a593Smuzhiyun FW_RI_STAG_MW_RELAXED = 0x03 101*4882a593Smuzhiyun }; 102*4882a593Smuzhiyun 103*4882a593Smuzhiyun enum fw_ri_data_op { 104*4882a593Smuzhiyun FW_RI_DATA_IMMD = 0x81, 105*4882a593Smuzhiyun FW_RI_DATA_DSGL = 0x82, 106*4882a593Smuzhiyun FW_RI_DATA_ISGL = 0x83 107*4882a593Smuzhiyun }; 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun enum fw_ri_sgl_depth { 110*4882a593Smuzhiyun FW_RI_SGL_DEPTH_MAX_SQ = 16, 111*4882a593Smuzhiyun FW_RI_SGL_DEPTH_MAX_RQ = 4 112*4882a593Smuzhiyun }; 113*4882a593Smuzhiyun 114*4882a593Smuzhiyun struct fw_ri_dsge_pair { 115*4882a593Smuzhiyun __be32 len[2]; 116*4882a593Smuzhiyun __be64 addr[2]; 117*4882a593Smuzhiyun }; 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun struct fw_ri_dsgl { 120*4882a593Smuzhiyun __u8 op; 121*4882a593Smuzhiyun __u8 r1; 122*4882a593Smuzhiyun __be16 nsge; 123*4882a593Smuzhiyun __be32 len0; 124*4882a593Smuzhiyun __be64 addr0; 125*4882a593Smuzhiyun #ifndef C99_NOT_SUPPORTED 126*4882a593Smuzhiyun struct fw_ri_dsge_pair sge[]; 127*4882a593Smuzhiyun #endif 128*4882a593Smuzhiyun }; 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun struct fw_ri_sge { 131*4882a593Smuzhiyun __be32 stag; 132*4882a593Smuzhiyun __be32 len; 133*4882a593Smuzhiyun __be64 to; 134*4882a593Smuzhiyun }; 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun struct fw_ri_isgl { 137*4882a593Smuzhiyun __u8 op; 138*4882a593Smuzhiyun __u8 r1; 139*4882a593Smuzhiyun __be16 nsge; 140*4882a593Smuzhiyun __be32 r2; 141*4882a593Smuzhiyun #ifndef C99_NOT_SUPPORTED 142*4882a593Smuzhiyun struct fw_ri_sge sge[]; 143*4882a593Smuzhiyun #endif 144*4882a593Smuzhiyun }; 145*4882a593Smuzhiyun 146*4882a593Smuzhiyun struct fw_ri_immd { 147*4882a593Smuzhiyun __u8 op; 148*4882a593Smuzhiyun __u8 r1; 149*4882a593Smuzhiyun __be16 r2; 150*4882a593Smuzhiyun __be32 immdlen; 151*4882a593Smuzhiyun #ifndef C99_NOT_SUPPORTED 152*4882a593Smuzhiyun __u8 data[]; 153*4882a593Smuzhiyun #endif 154*4882a593Smuzhiyun }; 155*4882a593Smuzhiyun 156*4882a593Smuzhiyun struct fw_ri_tpte { 157*4882a593Smuzhiyun __be32 valid_to_pdid; 158*4882a593Smuzhiyun __be32 locread_to_qpid; 159*4882a593Smuzhiyun __be32 nosnoop_pbladdr; 160*4882a593Smuzhiyun __be32 len_lo; 161*4882a593Smuzhiyun __be32 va_hi; 162*4882a593Smuzhiyun __be32 va_lo_fbo; 163*4882a593Smuzhiyun __be32 dca_mwbcnt_pstag; 164*4882a593Smuzhiyun __be32 len_hi; 165*4882a593Smuzhiyun }; 166*4882a593Smuzhiyun 167*4882a593Smuzhiyun #define FW_RI_TPTE_VALID_S 31 168*4882a593Smuzhiyun #define FW_RI_TPTE_VALID_M 0x1 169*4882a593Smuzhiyun #define FW_RI_TPTE_VALID_V(x) ((x) << FW_RI_TPTE_VALID_S) 170*4882a593Smuzhiyun #define FW_RI_TPTE_VALID_G(x) \ 171*4882a593Smuzhiyun (((x) >> FW_RI_TPTE_VALID_S) & FW_RI_TPTE_VALID_M) 172*4882a593Smuzhiyun #define FW_RI_TPTE_VALID_F FW_RI_TPTE_VALID_V(1U) 173*4882a593Smuzhiyun 174*4882a593Smuzhiyun #define FW_RI_TPTE_STAGKEY_S 23 175*4882a593Smuzhiyun #define FW_RI_TPTE_STAGKEY_M 0xff 176*4882a593Smuzhiyun #define FW_RI_TPTE_STAGKEY_V(x) ((x) << FW_RI_TPTE_STAGKEY_S) 177*4882a593Smuzhiyun #define FW_RI_TPTE_STAGKEY_G(x) \ 178*4882a593Smuzhiyun (((x) >> FW_RI_TPTE_STAGKEY_S) & FW_RI_TPTE_STAGKEY_M) 179*4882a593Smuzhiyun 180*4882a593Smuzhiyun #define FW_RI_TPTE_STAGSTATE_S 22 181*4882a593Smuzhiyun #define FW_RI_TPTE_STAGSTATE_M 0x1 182*4882a593Smuzhiyun #define FW_RI_TPTE_STAGSTATE_V(x) ((x) << FW_RI_TPTE_STAGSTATE_S) 183*4882a593Smuzhiyun #define FW_RI_TPTE_STAGSTATE_G(x) \ 184*4882a593Smuzhiyun (((x) >> FW_RI_TPTE_STAGSTATE_S) & FW_RI_TPTE_STAGSTATE_M) 185*4882a593Smuzhiyun #define FW_RI_TPTE_STAGSTATE_F FW_RI_TPTE_STAGSTATE_V(1U) 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun #define FW_RI_TPTE_STAGTYPE_S 20 188*4882a593Smuzhiyun #define FW_RI_TPTE_STAGTYPE_M 0x3 189*4882a593Smuzhiyun #define FW_RI_TPTE_STAGTYPE_V(x) ((x) << FW_RI_TPTE_STAGTYPE_S) 190*4882a593Smuzhiyun #define FW_RI_TPTE_STAGTYPE_G(x) \ 191*4882a593Smuzhiyun (((x) >> FW_RI_TPTE_STAGTYPE_S) & FW_RI_TPTE_STAGTYPE_M) 192*4882a593Smuzhiyun 193*4882a593Smuzhiyun #define FW_RI_TPTE_PDID_S 0 194*4882a593Smuzhiyun #define FW_RI_TPTE_PDID_M 0xfffff 195*4882a593Smuzhiyun #define FW_RI_TPTE_PDID_V(x) ((x) << FW_RI_TPTE_PDID_S) 196*4882a593Smuzhiyun #define FW_RI_TPTE_PDID_G(x) \ 197*4882a593Smuzhiyun (((x) >> FW_RI_TPTE_PDID_S) & FW_RI_TPTE_PDID_M) 198*4882a593Smuzhiyun 199*4882a593Smuzhiyun #define FW_RI_TPTE_PERM_S 28 200*4882a593Smuzhiyun #define FW_RI_TPTE_PERM_M 0xf 201*4882a593Smuzhiyun #define FW_RI_TPTE_PERM_V(x) ((x) << FW_RI_TPTE_PERM_S) 202*4882a593Smuzhiyun #define FW_RI_TPTE_PERM_G(x) \ 203*4882a593Smuzhiyun (((x) >> FW_RI_TPTE_PERM_S) & FW_RI_TPTE_PERM_M) 204*4882a593Smuzhiyun 205*4882a593Smuzhiyun #define FW_RI_TPTE_REMINVDIS_S 27 206*4882a593Smuzhiyun #define FW_RI_TPTE_REMINVDIS_M 0x1 207*4882a593Smuzhiyun #define FW_RI_TPTE_REMINVDIS_V(x) ((x) << FW_RI_TPTE_REMINVDIS_S) 208*4882a593Smuzhiyun #define FW_RI_TPTE_REMINVDIS_G(x) \ 209*4882a593Smuzhiyun (((x) >> FW_RI_TPTE_REMINVDIS_S) & FW_RI_TPTE_REMINVDIS_M) 210*4882a593Smuzhiyun #define FW_RI_TPTE_REMINVDIS_F FW_RI_TPTE_REMINVDIS_V(1U) 211*4882a593Smuzhiyun 212*4882a593Smuzhiyun #define FW_RI_TPTE_ADDRTYPE_S 26 213*4882a593Smuzhiyun #define FW_RI_TPTE_ADDRTYPE_M 1 214*4882a593Smuzhiyun #define FW_RI_TPTE_ADDRTYPE_V(x) ((x) << FW_RI_TPTE_ADDRTYPE_S) 215*4882a593Smuzhiyun #define FW_RI_TPTE_ADDRTYPE_G(x) \ 216*4882a593Smuzhiyun (((x) >> FW_RI_TPTE_ADDRTYPE_S) & FW_RI_TPTE_ADDRTYPE_M) 217*4882a593Smuzhiyun #define FW_RI_TPTE_ADDRTYPE_F FW_RI_TPTE_ADDRTYPE_V(1U) 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun #define FW_RI_TPTE_MWBINDEN_S 25 220*4882a593Smuzhiyun #define FW_RI_TPTE_MWBINDEN_M 0x1 221*4882a593Smuzhiyun #define FW_RI_TPTE_MWBINDEN_V(x) ((x) << FW_RI_TPTE_MWBINDEN_S) 222*4882a593Smuzhiyun #define FW_RI_TPTE_MWBINDEN_G(x) \ 223*4882a593Smuzhiyun (((x) >> FW_RI_TPTE_MWBINDEN_S) & FW_RI_TPTE_MWBINDEN_M) 224*4882a593Smuzhiyun #define FW_RI_TPTE_MWBINDEN_F FW_RI_TPTE_MWBINDEN_V(1U) 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun #define FW_RI_TPTE_PS_S 20 227*4882a593Smuzhiyun #define FW_RI_TPTE_PS_M 0x1f 228*4882a593Smuzhiyun #define FW_RI_TPTE_PS_V(x) ((x) << FW_RI_TPTE_PS_S) 229*4882a593Smuzhiyun #define FW_RI_TPTE_PS_G(x) \ 230*4882a593Smuzhiyun (((x) >> FW_RI_TPTE_PS_S) & FW_RI_TPTE_PS_M) 231*4882a593Smuzhiyun 232*4882a593Smuzhiyun #define FW_RI_TPTE_QPID_S 0 233*4882a593Smuzhiyun #define FW_RI_TPTE_QPID_M 0xfffff 234*4882a593Smuzhiyun #define FW_RI_TPTE_QPID_V(x) ((x) << FW_RI_TPTE_QPID_S) 235*4882a593Smuzhiyun #define FW_RI_TPTE_QPID_G(x) \ 236*4882a593Smuzhiyun (((x) >> FW_RI_TPTE_QPID_S) & FW_RI_TPTE_QPID_M) 237*4882a593Smuzhiyun 238*4882a593Smuzhiyun #define FW_RI_TPTE_NOSNOOP_S 30 239*4882a593Smuzhiyun #define FW_RI_TPTE_NOSNOOP_M 0x1 240*4882a593Smuzhiyun #define FW_RI_TPTE_NOSNOOP_V(x) ((x) << FW_RI_TPTE_NOSNOOP_S) 241*4882a593Smuzhiyun #define FW_RI_TPTE_NOSNOOP_G(x) \ 242*4882a593Smuzhiyun (((x) >> FW_RI_TPTE_NOSNOOP_S) & FW_RI_TPTE_NOSNOOP_M) 243*4882a593Smuzhiyun #define FW_RI_TPTE_NOSNOOP_F FW_RI_TPTE_NOSNOOP_V(1U) 244*4882a593Smuzhiyun 245*4882a593Smuzhiyun #define FW_RI_TPTE_PBLADDR_S 0 246*4882a593Smuzhiyun #define FW_RI_TPTE_PBLADDR_M 0x1fffffff 247*4882a593Smuzhiyun #define FW_RI_TPTE_PBLADDR_V(x) ((x) << FW_RI_TPTE_PBLADDR_S) 248*4882a593Smuzhiyun #define FW_RI_TPTE_PBLADDR_G(x) \ 249*4882a593Smuzhiyun (((x) >> FW_RI_TPTE_PBLADDR_S) & FW_RI_TPTE_PBLADDR_M) 250*4882a593Smuzhiyun 251*4882a593Smuzhiyun #define FW_RI_TPTE_DCA_S 24 252*4882a593Smuzhiyun #define FW_RI_TPTE_DCA_M 0x1f 253*4882a593Smuzhiyun #define FW_RI_TPTE_DCA_V(x) ((x) << FW_RI_TPTE_DCA_S) 254*4882a593Smuzhiyun #define FW_RI_TPTE_DCA_G(x) \ 255*4882a593Smuzhiyun (((x) >> FW_RI_TPTE_DCA_S) & FW_RI_TPTE_DCA_M) 256*4882a593Smuzhiyun 257*4882a593Smuzhiyun #define FW_RI_TPTE_MWBCNT_PSTAG_S 0 258*4882a593Smuzhiyun #define FW_RI_TPTE_MWBCNT_PSTAG_M 0xffffff 259*4882a593Smuzhiyun #define FW_RI_TPTE_MWBCNT_PSTAT_V(x) \ 260*4882a593Smuzhiyun ((x) << FW_RI_TPTE_MWBCNT_PSTAG_S) 261*4882a593Smuzhiyun #define FW_RI_TPTE_MWBCNT_PSTAG_G(x) \ 262*4882a593Smuzhiyun (((x) >> FW_RI_TPTE_MWBCNT_PSTAG_S) & FW_RI_TPTE_MWBCNT_PSTAG_M) 263*4882a593Smuzhiyun 264*4882a593Smuzhiyun enum fw_ri_res_type { 265*4882a593Smuzhiyun FW_RI_RES_TYPE_SQ, 266*4882a593Smuzhiyun FW_RI_RES_TYPE_RQ, 267*4882a593Smuzhiyun FW_RI_RES_TYPE_CQ, 268*4882a593Smuzhiyun FW_RI_RES_TYPE_SRQ, 269*4882a593Smuzhiyun }; 270*4882a593Smuzhiyun 271*4882a593Smuzhiyun enum fw_ri_res_op { 272*4882a593Smuzhiyun FW_RI_RES_OP_WRITE, 273*4882a593Smuzhiyun FW_RI_RES_OP_RESET, 274*4882a593Smuzhiyun }; 275*4882a593Smuzhiyun 276*4882a593Smuzhiyun struct fw_ri_res { 277*4882a593Smuzhiyun union fw_ri_restype { 278*4882a593Smuzhiyun struct fw_ri_res_sqrq { 279*4882a593Smuzhiyun __u8 restype; 280*4882a593Smuzhiyun __u8 op; 281*4882a593Smuzhiyun __be16 r3; 282*4882a593Smuzhiyun __be32 eqid; 283*4882a593Smuzhiyun __be32 r4[2]; 284*4882a593Smuzhiyun __be32 fetchszm_to_iqid; 285*4882a593Smuzhiyun __be32 dcaen_to_eqsize; 286*4882a593Smuzhiyun __be64 eqaddr; 287*4882a593Smuzhiyun } sqrq; 288*4882a593Smuzhiyun struct fw_ri_res_cq { 289*4882a593Smuzhiyun __u8 restype; 290*4882a593Smuzhiyun __u8 op; 291*4882a593Smuzhiyun __be16 r3; 292*4882a593Smuzhiyun __be32 iqid; 293*4882a593Smuzhiyun __be32 r4[2]; 294*4882a593Smuzhiyun __be32 iqandst_to_iqandstindex; 295*4882a593Smuzhiyun __be16 iqdroprss_to_iqesize; 296*4882a593Smuzhiyun __be16 iqsize; 297*4882a593Smuzhiyun __be64 iqaddr; 298*4882a593Smuzhiyun __be32 iqns_iqro; 299*4882a593Smuzhiyun __be32 r6_lo; 300*4882a593Smuzhiyun __be64 r7; 301*4882a593Smuzhiyun } cq; 302*4882a593Smuzhiyun struct fw_ri_res_srq { 303*4882a593Smuzhiyun __u8 restype; 304*4882a593Smuzhiyun __u8 op; 305*4882a593Smuzhiyun __be16 r3; 306*4882a593Smuzhiyun __be32 eqid; 307*4882a593Smuzhiyun __be32 r4[2]; 308*4882a593Smuzhiyun __be32 fetchszm_to_iqid; 309*4882a593Smuzhiyun __be32 dcaen_to_eqsize; 310*4882a593Smuzhiyun __be64 eqaddr; 311*4882a593Smuzhiyun __be32 srqid; 312*4882a593Smuzhiyun __be32 pdid; 313*4882a593Smuzhiyun __be32 hwsrqsize; 314*4882a593Smuzhiyun __be32 hwsrqaddr; 315*4882a593Smuzhiyun } srq; 316*4882a593Smuzhiyun } u; 317*4882a593Smuzhiyun }; 318*4882a593Smuzhiyun 319*4882a593Smuzhiyun struct fw_ri_res_wr { 320*4882a593Smuzhiyun __be32 op_nres; 321*4882a593Smuzhiyun __be32 len16_pkd; 322*4882a593Smuzhiyun __u64 cookie; 323*4882a593Smuzhiyun #ifndef C99_NOT_SUPPORTED 324*4882a593Smuzhiyun struct fw_ri_res res[]; 325*4882a593Smuzhiyun #endif 326*4882a593Smuzhiyun }; 327*4882a593Smuzhiyun 328*4882a593Smuzhiyun #define FW_RI_RES_WR_NRES_S 0 329*4882a593Smuzhiyun #define FW_RI_RES_WR_NRES_M 0xff 330*4882a593Smuzhiyun #define FW_RI_RES_WR_NRES_V(x) ((x) << FW_RI_RES_WR_NRES_S) 331*4882a593Smuzhiyun #define FW_RI_RES_WR_NRES_G(x) \ 332*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_NRES_S) & FW_RI_RES_WR_NRES_M) 333*4882a593Smuzhiyun 334*4882a593Smuzhiyun #define FW_RI_RES_WR_FETCHSZM_S 26 335*4882a593Smuzhiyun #define FW_RI_RES_WR_FETCHSZM_M 0x1 336*4882a593Smuzhiyun #define FW_RI_RES_WR_FETCHSZM_V(x) ((x) << FW_RI_RES_WR_FETCHSZM_S) 337*4882a593Smuzhiyun #define FW_RI_RES_WR_FETCHSZM_G(x) \ 338*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_FETCHSZM_S) & FW_RI_RES_WR_FETCHSZM_M) 339*4882a593Smuzhiyun #define FW_RI_RES_WR_FETCHSZM_F FW_RI_RES_WR_FETCHSZM_V(1U) 340*4882a593Smuzhiyun 341*4882a593Smuzhiyun #define FW_RI_RES_WR_STATUSPGNS_S 25 342*4882a593Smuzhiyun #define FW_RI_RES_WR_STATUSPGNS_M 0x1 343*4882a593Smuzhiyun #define FW_RI_RES_WR_STATUSPGNS_V(x) ((x) << FW_RI_RES_WR_STATUSPGNS_S) 344*4882a593Smuzhiyun #define FW_RI_RES_WR_STATUSPGNS_G(x) \ 345*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_STATUSPGNS_S) & FW_RI_RES_WR_STATUSPGNS_M) 346*4882a593Smuzhiyun #define FW_RI_RES_WR_STATUSPGNS_F FW_RI_RES_WR_STATUSPGNS_V(1U) 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun #define FW_RI_RES_WR_STATUSPGRO_S 24 349*4882a593Smuzhiyun #define FW_RI_RES_WR_STATUSPGRO_M 0x1 350*4882a593Smuzhiyun #define FW_RI_RES_WR_STATUSPGRO_V(x) ((x) << FW_RI_RES_WR_STATUSPGRO_S) 351*4882a593Smuzhiyun #define FW_RI_RES_WR_STATUSPGRO_G(x) \ 352*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_STATUSPGRO_S) & FW_RI_RES_WR_STATUSPGRO_M) 353*4882a593Smuzhiyun #define FW_RI_RES_WR_STATUSPGRO_F FW_RI_RES_WR_STATUSPGRO_V(1U) 354*4882a593Smuzhiyun 355*4882a593Smuzhiyun #define FW_RI_RES_WR_FETCHNS_S 23 356*4882a593Smuzhiyun #define FW_RI_RES_WR_FETCHNS_M 0x1 357*4882a593Smuzhiyun #define FW_RI_RES_WR_FETCHNS_V(x) ((x) << FW_RI_RES_WR_FETCHNS_S) 358*4882a593Smuzhiyun #define FW_RI_RES_WR_FETCHNS_G(x) \ 359*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_FETCHNS_S) & FW_RI_RES_WR_FETCHNS_M) 360*4882a593Smuzhiyun #define FW_RI_RES_WR_FETCHNS_F FW_RI_RES_WR_FETCHNS_V(1U) 361*4882a593Smuzhiyun 362*4882a593Smuzhiyun #define FW_RI_RES_WR_FETCHRO_S 22 363*4882a593Smuzhiyun #define FW_RI_RES_WR_FETCHRO_M 0x1 364*4882a593Smuzhiyun #define FW_RI_RES_WR_FETCHRO_V(x) ((x) << FW_RI_RES_WR_FETCHRO_S) 365*4882a593Smuzhiyun #define FW_RI_RES_WR_FETCHRO_G(x) \ 366*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_FETCHRO_S) & FW_RI_RES_WR_FETCHRO_M) 367*4882a593Smuzhiyun #define FW_RI_RES_WR_FETCHRO_F FW_RI_RES_WR_FETCHRO_V(1U) 368*4882a593Smuzhiyun 369*4882a593Smuzhiyun #define FW_RI_RES_WR_HOSTFCMODE_S 20 370*4882a593Smuzhiyun #define FW_RI_RES_WR_HOSTFCMODE_M 0x3 371*4882a593Smuzhiyun #define FW_RI_RES_WR_HOSTFCMODE_V(x) ((x) << FW_RI_RES_WR_HOSTFCMODE_S) 372*4882a593Smuzhiyun #define FW_RI_RES_WR_HOSTFCMODE_G(x) \ 373*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_HOSTFCMODE_S) & FW_RI_RES_WR_HOSTFCMODE_M) 374*4882a593Smuzhiyun 375*4882a593Smuzhiyun #define FW_RI_RES_WR_CPRIO_S 19 376*4882a593Smuzhiyun #define FW_RI_RES_WR_CPRIO_M 0x1 377*4882a593Smuzhiyun #define FW_RI_RES_WR_CPRIO_V(x) ((x) << FW_RI_RES_WR_CPRIO_S) 378*4882a593Smuzhiyun #define FW_RI_RES_WR_CPRIO_G(x) \ 379*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_CPRIO_S) & FW_RI_RES_WR_CPRIO_M) 380*4882a593Smuzhiyun #define FW_RI_RES_WR_CPRIO_F FW_RI_RES_WR_CPRIO_V(1U) 381*4882a593Smuzhiyun 382*4882a593Smuzhiyun #define FW_RI_RES_WR_ONCHIP_S 18 383*4882a593Smuzhiyun #define FW_RI_RES_WR_ONCHIP_M 0x1 384*4882a593Smuzhiyun #define FW_RI_RES_WR_ONCHIP_V(x) ((x) << FW_RI_RES_WR_ONCHIP_S) 385*4882a593Smuzhiyun #define FW_RI_RES_WR_ONCHIP_G(x) \ 386*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_ONCHIP_S) & FW_RI_RES_WR_ONCHIP_M) 387*4882a593Smuzhiyun #define FW_RI_RES_WR_ONCHIP_F FW_RI_RES_WR_ONCHIP_V(1U) 388*4882a593Smuzhiyun 389*4882a593Smuzhiyun #define FW_RI_RES_WR_PCIECHN_S 16 390*4882a593Smuzhiyun #define FW_RI_RES_WR_PCIECHN_M 0x3 391*4882a593Smuzhiyun #define FW_RI_RES_WR_PCIECHN_V(x) ((x) << FW_RI_RES_WR_PCIECHN_S) 392*4882a593Smuzhiyun #define FW_RI_RES_WR_PCIECHN_G(x) \ 393*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_PCIECHN_S) & FW_RI_RES_WR_PCIECHN_M) 394*4882a593Smuzhiyun 395*4882a593Smuzhiyun #define FW_RI_RES_WR_IQID_S 0 396*4882a593Smuzhiyun #define FW_RI_RES_WR_IQID_M 0xffff 397*4882a593Smuzhiyun #define FW_RI_RES_WR_IQID_V(x) ((x) << FW_RI_RES_WR_IQID_S) 398*4882a593Smuzhiyun #define FW_RI_RES_WR_IQID_G(x) \ 399*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_IQID_S) & FW_RI_RES_WR_IQID_M) 400*4882a593Smuzhiyun 401*4882a593Smuzhiyun #define FW_RI_RES_WR_DCAEN_S 31 402*4882a593Smuzhiyun #define FW_RI_RES_WR_DCAEN_M 0x1 403*4882a593Smuzhiyun #define FW_RI_RES_WR_DCAEN_V(x) ((x) << FW_RI_RES_WR_DCAEN_S) 404*4882a593Smuzhiyun #define FW_RI_RES_WR_DCAEN_G(x) \ 405*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_DCAEN_S) & FW_RI_RES_WR_DCAEN_M) 406*4882a593Smuzhiyun #define FW_RI_RES_WR_DCAEN_F FW_RI_RES_WR_DCAEN_V(1U) 407*4882a593Smuzhiyun 408*4882a593Smuzhiyun #define FW_RI_RES_WR_DCACPU_S 26 409*4882a593Smuzhiyun #define FW_RI_RES_WR_DCACPU_M 0x1f 410*4882a593Smuzhiyun #define FW_RI_RES_WR_DCACPU_V(x) ((x) << FW_RI_RES_WR_DCACPU_S) 411*4882a593Smuzhiyun #define FW_RI_RES_WR_DCACPU_G(x) \ 412*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_DCACPU_S) & FW_RI_RES_WR_DCACPU_M) 413*4882a593Smuzhiyun 414*4882a593Smuzhiyun #define FW_RI_RES_WR_FBMIN_S 23 415*4882a593Smuzhiyun #define FW_RI_RES_WR_FBMIN_M 0x7 416*4882a593Smuzhiyun #define FW_RI_RES_WR_FBMIN_V(x) ((x) << FW_RI_RES_WR_FBMIN_S) 417*4882a593Smuzhiyun #define FW_RI_RES_WR_FBMIN_G(x) \ 418*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_FBMIN_S) & FW_RI_RES_WR_FBMIN_M) 419*4882a593Smuzhiyun 420*4882a593Smuzhiyun #define FW_RI_RES_WR_FBMAX_S 20 421*4882a593Smuzhiyun #define FW_RI_RES_WR_FBMAX_M 0x7 422*4882a593Smuzhiyun #define FW_RI_RES_WR_FBMAX_V(x) ((x) << FW_RI_RES_WR_FBMAX_S) 423*4882a593Smuzhiyun #define FW_RI_RES_WR_FBMAX_G(x) \ 424*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_FBMAX_S) & FW_RI_RES_WR_FBMAX_M) 425*4882a593Smuzhiyun 426*4882a593Smuzhiyun #define FW_RI_RES_WR_CIDXFTHRESHO_S 19 427*4882a593Smuzhiyun #define FW_RI_RES_WR_CIDXFTHRESHO_M 0x1 428*4882a593Smuzhiyun #define FW_RI_RES_WR_CIDXFTHRESHO_V(x) ((x) << FW_RI_RES_WR_CIDXFTHRESHO_S) 429*4882a593Smuzhiyun #define FW_RI_RES_WR_CIDXFTHRESHO_G(x) \ 430*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_CIDXFTHRESHO_S) & FW_RI_RES_WR_CIDXFTHRESHO_M) 431*4882a593Smuzhiyun #define FW_RI_RES_WR_CIDXFTHRESHO_F FW_RI_RES_WR_CIDXFTHRESHO_V(1U) 432*4882a593Smuzhiyun 433*4882a593Smuzhiyun #define FW_RI_RES_WR_CIDXFTHRESH_S 16 434*4882a593Smuzhiyun #define FW_RI_RES_WR_CIDXFTHRESH_M 0x7 435*4882a593Smuzhiyun #define FW_RI_RES_WR_CIDXFTHRESH_V(x) ((x) << FW_RI_RES_WR_CIDXFTHRESH_S) 436*4882a593Smuzhiyun #define FW_RI_RES_WR_CIDXFTHRESH_G(x) \ 437*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_CIDXFTHRESH_S) & FW_RI_RES_WR_CIDXFTHRESH_M) 438*4882a593Smuzhiyun 439*4882a593Smuzhiyun #define FW_RI_RES_WR_EQSIZE_S 0 440*4882a593Smuzhiyun #define FW_RI_RES_WR_EQSIZE_M 0xffff 441*4882a593Smuzhiyun #define FW_RI_RES_WR_EQSIZE_V(x) ((x) << FW_RI_RES_WR_EQSIZE_S) 442*4882a593Smuzhiyun #define FW_RI_RES_WR_EQSIZE_G(x) \ 443*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_EQSIZE_S) & FW_RI_RES_WR_EQSIZE_M) 444*4882a593Smuzhiyun 445*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANDST_S 15 446*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANDST_M 0x1 447*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANDST_V(x) ((x) << FW_RI_RES_WR_IQANDST_S) 448*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANDST_G(x) \ 449*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_IQANDST_S) & FW_RI_RES_WR_IQANDST_M) 450*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANDST_F FW_RI_RES_WR_IQANDST_V(1U) 451*4882a593Smuzhiyun 452*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANUS_S 14 453*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANUS_M 0x1 454*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANUS_V(x) ((x) << FW_RI_RES_WR_IQANUS_S) 455*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANUS_G(x) \ 456*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_IQANUS_S) & FW_RI_RES_WR_IQANUS_M) 457*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANUS_F FW_RI_RES_WR_IQANUS_V(1U) 458*4882a593Smuzhiyun 459*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANUD_S 12 460*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANUD_M 0x3 461*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANUD_V(x) ((x) << FW_RI_RES_WR_IQANUD_S) 462*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANUD_G(x) \ 463*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_IQANUD_S) & FW_RI_RES_WR_IQANUD_M) 464*4882a593Smuzhiyun 465*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANDSTINDEX_S 0 466*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANDSTINDEX_M 0xfff 467*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANDSTINDEX_V(x) ((x) << FW_RI_RES_WR_IQANDSTINDEX_S) 468*4882a593Smuzhiyun #define FW_RI_RES_WR_IQANDSTINDEX_G(x) \ 469*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_IQANDSTINDEX_S) & FW_RI_RES_WR_IQANDSTINDEX_M) 470*4882a593Smuzhiyun 471*4882a593Smuzhiyun #define FW_RI_RES_WR_IQDROPRSS_S 15 472*4882a593Smuzhiyun #define FW_RI_RES_WR_IQDROPRSS_M 0x1 473*4882a593Smuzhiyun #define FW_RI_RES_WR_IQDROPRSS_V(x) ((x) << FW_RI_RES_WR_IQDROPRSS_S) 474*4882a593Smuzhiyun #define FW_RI_RES_WR_IQDROPRSS_G(x) \ 475*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_IQDROPRSS_S) & FW_RI_RES_WR_IQDROPRSS_M) 476*4882a593Smuzhiyun #define FW_RI_RES_WR_IQDROPRSS_F FW_RI_RES_WR_IQDROPRSS_V(1U) 477*4882a593Smuzhiyun 478*4882a593Smuzhiyun #define FW_RI_RES_WR_IQGTSMODE_S 14 479*4882a593Smuzhiyun #define FW_RI_RES_WR_IQGTSMODE_M 0x1 480*4882a593Smuzhiyun #define FW_RI_RES_WR_IQGTSMODE_V(x) ((x) << FW_RI_RES_WR_IQGTSMODE_S) 481*4882a593Smuzhiyun #define FW_RI_RES_WR_IQGTSMODE_G(x) \ 482*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_IQGTSMODE_S) & FW_RI_RES_WR_IQGTSMODE_M) 483*4882a593Smuzhiyun #define FW_RI_RES_WR_IQGTSMODE_F FW_RI_RES_WR_IQGTSMODE_V(1U) 484*4882a593Smuzhiyun 485*4882a593Smuzhiyun #define FW_RI_RES_WR_IQPCIECH_S 12 486*4882a593Smuzhiyun #define FW_RI_RES_WR_IQPCIECH_M 0x3 487*4882a593Smuzhiyun #define FW_RI_RES_WR_IQPCIECH_V(x) ((x) << FW_RI_RES_WR_IQPCIECH_S) 488*4882a593Smuzhiyun #define FW_RI_RES_WR_IQPCIECH_G(x) \ 489*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_IQPCIECH_S) & FW_RI_RES_WR_IQPCIECH_M) 490*4882a593Smuzhiyun 491*4882a593Smuzhiyun #define FW_RI_RES_WR_IQDCAEN_S 11 492*4882a593Smuzhiyun #define FW_RI_RES_WR_IQDCAEN_M 0x1 493*4882a593Smuzhiyun #define FW_RI_RES_WR_IQDCAEN_V(x) ((x) << FW_RI_RES_WR_IQDCAEN_S) 494*4882a593Smuzhiyun #define FW_RI_RES_WR_IQDCAEN_G(x) \ 495*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_IQDCAEN_S) & FW_RI_RES_WR_IQDCAEN_M) 496*4882a593Smuzhiyun #define FW_RI_RES_WR_IQDCAEN_F FW_RI_RES_WR_IQDCAEN_V(1U) 497*4882a593Smuzhiyun 498*4882a593Smuzhiyun #define FW_RI_RES_WR_IQDCACPU_S 6 499*4882a593Smuzhiyun #define FW_RI_RES_WR_IQDCACPU_M 0x1f 500*4882a593Smuzhiyun #define FW_RI_RES_WR_IQDCACPU_V(x) ((x) << FW_RI_RES_WR_IQDCACPU_S) 501*4882a593Smuzhiyun #define FW_RI_RES_WR_IQDCACPU_G(x) \ 502*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_IQDCACPU_S) & FW_RI_RES_WR_IQDCACPU_M) 503*4882a593Smuzhiyun 504*4882a593Smuzhiyun #define FW_RI_RES_WR_IQINTCNTTHRESH_S 4 505*4882a593Smuzhiyun #define FW_RI_RES_WR_IQINTCNTTHRESH_M 0x3 506*4882a593Smuzhiyun #define FW_RI_RES_WR_IQINTCNTTHRESH_V(x) \ 507*4882a593Smuzhiyun ((x) << FW_RI_RES_WR_IQINTCNTTHRESH_S) 508*4882a593Smuzhiyun #define FW_RI_RES_WR_IQINTCNTTHRESH_G(x) \ 509*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_IQINTCNTTHRESH_S) & FW_RI_RES_WR_IQINTCNTTHRESH_M) 510*4882a593Smuzhiyun 511*4882a593Smuzhiyun #define FW_RI_RES_WR_IQO_S 3 512*4882a593Smuzhiyun #define FW_RI_RES_WR_IQO_M 0x1 513*4882a593Smuzhiyun #define FW_RI_RES_WR_IQO_V(x) ((x) << FW_RI_RES_WR_IQO_S) 514*4882a593Smuzhiyun #define FW_RI_RES_WR_IQO_G(x) \ 515*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_IQO_S) & FW_RI_RES_WR_IQO_M) 516*4882a593Smuzhiyun #define FW_RI_RES_WR_IQO_F FW_RI_RES_WR_IQO_V(1U) 517*4882a593Smuzhiyun 518*4882a593Smuzhiyun #define FW_RI_RES_WR_IQCPRIO_S 2 519*4882a593Smuzhiyun #define FW_RI_RES_WR_IQCPRIO_M 0x1 520*4882a593Smuzhiyun #define FW_RI_RES_WR_IQCPRIO_V(x) ((x) << FW_RI_RES_WR_IQCPRIO_S) 521*4882a593Smuzhiyun #define FW_RI_RES_WR_IQCPRIO_G(x) \ 522*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_IQCPRIO_S) & FW_RI_RES_WR_IQCPRIO_M) 523*4882a593Smuzhiyun #define FW_RI_RES_WR_IQCPRIO_F FW_RI_RES_WR_IQCPRIO_V(1U) 524*4882a593Smuzhiyun 525*4882a593Smuzhiyun #define FW_RI_RES_WR_IQESIZE_S 0 526*4882a593Smuzhiyun #define FW_RI_RES_WR_IQESIZE_M 0x3 527*4882a593Smuzhiyun #define FW_RI_RES_WR_IQESIZE_V(x) ((x) << FW_RI_RES_WR_IQESIZE_S) 528*4882a593Smuzhiyun #define FW_RI_RES_WR_IQESIZE_G(x) \ 529*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_IQESIZE_S) & FW_RI_RES_WR_IQESIZE_M) 530*4882a593Smuzhiyun 531*4882a593Smuzhiyun #define FW_RI_RES_WR_IQNS_S 31 532*4882a593Smuzhiyun #define FW_RI_RES_WR_IQNS_M 0x1 533*4882a593Smuzhiyun #define FW_RI_RES_WR_IQNS_V(x) ((x) << FW_RI_RES_WR_IQNS_S) 534*4882a593Smuzhiyun #define FW_RI_RES_WR_IQNS_G(x) \ 535*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_IQNS_S) & FW_RI_RES_WR_IQNS_M) 536*4882a593Smuzhiyun #define FW_RI_RES_WR_IQNS_F FW_RI_RES_WR_IQNS_V(1U) 537*4882a593Smuzhiyun 538*4882a593Smuzhiyun #define FW_RI_RES_WR_IQRO_S 30 539*4882a593Smuzhiyun #define FW_RI_RES_WR_IQRO_M 0x1 540*4882a593Smuzhiyun #define FW_RI_RES_WR_IQRO_V(x) ((x) << FW_RI_RES_WR_IQRO_S) 541*4882a593Smuzhiyun #define FW_RI_RES_WR_IQRO_G(x) \ 542*4882a593Smuzhiyun (((x) >> FW_RI_RES_WR_IQRO_S) & FW_RI_RES_WR_IQRO_M) 543*4882a593Smuzhiyun #define FW_RI_RES_WR_IQRO_F FW_RI_RES_WR_IQRO_V(1U) 544*4882a593Smuzhiyun 545*4882a593Smuzhiyun struct fw_ri_rdma_write_wr { 546*4882a593Smuzhiyun __u8 opcode; 547*4882a593Smuzhiyun __u8 flags; 548*4882a593Smuzhiyun __u16 wrid; 549*4882a593Smuzhiyun __u8 r1[3]; 550*4882a593Smuzhiyun __u8 len16; 551*4882a593Smuzhiyun /* 552*4882a593Smuzhiyun * Use union for immediate data to be consistent with stack's 32 bit 553*4882a593Smuzhiyun * data and iWARP spec's 64 bit data. 554*4882a593Smuzhiyun */ 555*4882a593Smuzhiyun union { 556*4882a593Smuzhiyun struct { 557*4882a593Smuzhiyun __be32 imm_data32; 558*4882a593Smuzhiyun u32 reserved; 559*4882a593Smuzhiyun } ib_imm_data; 560*4882a593Smuzhiyun __be64 imm_data64; 561*4882a593Smuzhiyun } iw_imm_data; 562*4882a593Smuzhiyun __be32 plen; 563*4882a593Smuzhiyun __be32 stag_sink; 564*4882a593Smuzhiyun __be64 to_sink; 565*4882a593Smuzhiyun #ifndef C99_NOT_SUPPORTED 566*4882a593Smuzhiyun union { 567*4882a593Smuzhiyun struct fw_ri_immd immd_src[0]; 568*4882a593Smuzhiyun struct fw_ri_isgl isgl_src[0]; 569*4882a593Smuzhiyun } u; 570*4882a593Smuzhiyun #endif 571*4882a593Smuzhiyun }; 572*4882a593Smuzhiyun 573*4882a593Smuzhiyun struct fw_ri_send_wr { 574*4882a593Smuzhiyun __u8 opcode; 575*4882a593Smuzhiyun __u8 flags; 576*4882a593Smuzhiyun __u16 wrid; 577*4882a593Smuzhiyun __u8 r1[3]; 578*4882a593Smuzhiyun __u8 len16; 579*4882a593Smuzhiyun __be32 sendop_pkd; 580*4882a593Smuzhiyun __be32 stag_inv; 581*4882a593Smuzhiyun __be32 plen; 582*4882a593Smuzhiyun __be32 r3; 583*4882a593Smuzhiyun __be64 r4; 584*4882a593Smuzhiyun #ifndef C99_NOT_SUPPORTED 585*4882a593Smuzhiyun union { 586*4882a593Smuzhiyun struct fw_ri_immd immd_src[0]; 587*4882a593Smuzhiyun struct fw_ri_isgl isgl_src[0]; 588*4882a593Smuzhiyun } u; 589*4882a593Smuzhiyun #endif 590*4882a593Smuzhiyun }; 591*4882a593Smuzhiyun 592*4882a593Smuzhiyun #define FW_RI_SEND_WR_SENDOP_S 0 593*4882a593Smuzhiyun #define FW_RI_SEND_WR_SENDOP_M 0xf 594*4882a593Smuzhiyun #define FW_RI_SEND_WR_SENDOP_V(x) ((x) << FW_RI_SEND_WR_SENDOP_S) 595*4882a593Smuzhiyun #define FW_RI_SEND_WR_SENDOP_G(x) \ 596*4882a593Smuzhiyun (((x) >> FW_RI_SEND_WR_SENDOP_S) & FW_RI_SEND_WR_SENDOP_M) 597*4882a593Smuzhiyun 598*4882a593Smuzhiyun struct fw_ri_rdma_write_cmpl_wr { 599*4882a593Smuzhiyun __u8 opcode; 600*4882a593Smuzhiyun __u8 flags; 601*4882a593Smuzhiyun __u16 wrid; 602*4882a593Smuzhiyun __u8 r1[3]; 603*4882a593Smuzhiyun __u8 len16; 604*4882a593Smuzhiyun __u8 r2; 605*4882a593Smuzhiyun __u8 flags_send; 606*4882a593Smuzhiyun __u16 wrid_send; 607*4882a593Smuzhiyun __be32 stag_inv; 608*4882a593Smuzhiyun __be32 plen; 609*4882a593Smuzhiyun __be32 stag_sink; 610*4882a593Smuzhiyun __be64 to_sink; 611*4882a593Smuzhiyun union fw_ri_cmpl { 612*4882a593Smuzhiyun struct fw_ri_immd_cmpl { 613*4882a593Smuzhiyun __u8 op; 614*4882a593Smuzhiyun __u8 r1[6]; 615*4882a593Smuzhiyun __u8 immdlen; 616*4882a593Smuzhiyun __u8 data[16]; 617*4882a593Smuzhiyun } immd_src; 618*4882a593Smuzhiyun struct fw_ri_isgl isgl_src; 619*4882a593Smuzhiyun } u_cmpl; 620*4882a593Smuzhiyun __be64 r3; 621*4882a593Smuzhiyun #ifndef C99_NOT_SUPPORTED 622*4882a593Smuzhiyun union fw_ri_write { 623*4882a593Smuzhiyun struct fw_ri_immd immd_src[0]; 624*4882a593Smuzhiyun struct fw_ri_isgl isgl_src[0]; 625*4882a593Smuzhiyun } u; 626*4882a593Smuzhiyun #endif 627*4882a593Smuzhiyun }; 628*4882a593Smuzhiyun 629*4882a593Smuzhiyun struct fw_ri_rdma_read_wr { 630*4882a593Smuzhiyun __u8 opcode; 631*4882a593Smuzhiyun __u8 flags; 632*4882a593Smuzhiyun __u16 wrid; 633*4882a593Smuzhiyun __u8 r1[3]; 634*4882a593Smuzhiyun __u8 len16; 635*4882a593Smuzhiyun __be64 r2; 636*4882a593Smuzhiyun __be32 stag_sink; 637*4882a593Smuzhiyun __be32 to_sink_hi; 638*4882a593Smuzhiyun __be32 to_sink_lo; 639*4882a593Smuzhiyun __be32 plen; 640*4882a593Smuzhiyun __be32 stag_src; 641*4882a593Smuzhiyun __be32 to_src_hi; 642*4882a593Smuzhiyun __be32 to_src_lo; 643*4882a593Smuzhiyun __be32 r5; 644*4882a593Smuzhiyun }; 645*4882a593Smuzhiyun 646*4882a593Smuzhiyun struct fw_ri_recv_wr { 647*4882a593Smuzhiyun __u8 opcode; 648*4882a593Smuzhiyun __u8 r1; 649*4882a593Smuzhiyun __u16 wrid; 650*4882a593Smuzhiyun __u8 r2[3]; 651*4882a593Smuzhiyun __u8 len16; 652*4882a593Smuzhiyun struct fw_ri_isgl isgl; 653*4882a593Smuzhiyun }; 654*4882a593Smuzhiyun 655*4882a593Smuzhiyun struct fw_ri_bind_mw_wr { 656*4882a593Smuzhiyun __u8 opcode; 657*4882a593Smuzhiyun __u8 flags; 658*4882a593Smuzhiyun __u16 wrid; 659*4882a593Smuzhiyun __u8 r1[3]; 660*4882a593Smuzhiyun __u8 len16; 661*4882a593Smuzhiyun __u8 qpbinde_to_dcacpu; 662*4882a593Smuzhiyun __u8 pgsz_shift; 663*4882a593Smuzhiyun __u8 addr_type; 664*4882a593Smuzhiyun __u8 mem_perms; 665*4882a593Smuzhiyun __be32 stag_mr; 666*4882a593Smuzhiyun __be32 stag_mw; 667*4882a593Smuzhiyun __be32 r3; 668*4882a593Smuzhiyun __be64 len_mw; 669*4882a593Smuzhiyun __be64 va_fbo; 670*4882a593Smuzhiyun __be64 r4; 671*4882a593Smuzhiyun }; 672*4882a593Smuzhiyun 673*4882a593Smuzhiyun #define FW_RI_BIND_MW_WR_QPBINDE_S 6 674*4882a593Smuzhiyun #define FW_RI_BIND_MW_WR_QPBINDE_M 0x1 675*4882a593Smuzhiyun #define FW_RI_BIND_MW_WR_QPBINDE_V(x) ((x) << FW_RI_BIND_MW_WR_QPBINDE_S) 676*4882a593Smuzhiyun #define FW_RI_BIND_MW_WR_QPBINDE_G(x) \ 677*4882a593Smuzhiyun (((x) >> FW_RI_BIND_MW_WR_QPBINDE_S) & FW_RI_BIND_MW_WR_QPBINDE_M) 678*4882a593Smuzhiyun #define FW_RI_BIND_MW_WR_QPBINDE_F FW_RI_BIND_MW_WR_QPBINDE_V(1U) 679*4882a593Smuzhiyun 680*4882a593Smuzhiyun #define FW_RI_BIND_MW_WR_NS_S 5 681*4882a593Smuzhiyun #define FW_RI_BIND_MW_WR_NS_M 0x1 682*4882a593Smuzhiyun #define FW_RI_BIND_MW_WR_NS_V(x) ((x) << FW_RI_BIND_MW_WR_NS_S) 683*4882a593Smuzhiyun #define FW_RI_BIND_MW_WR_NS_G(x) \ 684*4882a593Smuzhiyun (((x) >> FW_RI_BIND_MW_WR_NS_S) & FW_RI_BIND_MW_WR_NS_M) 685*4882a593Smuzhiyun #define FW_RI_BIND_MW_WR_NS_F FW_RI_BIND_MW_WR_NS_V(1U) 686*4882a593Smuzhiyun 687*4882a593Smuzhiyun #define FW_RI_BIND_MW_WR_DCACPU_S 0 688*4882a593Smuzhiyun #define FW_RI_BIND_MW_WR_DCACPU_M 0x1f 689*4882a593Smuzhiyun #define FW_RI_BIND_MW_WR_DCACPU_V(x) ((x) << FW_RI_BIND_MW_WR_DCACPU_S) 690*4882a593Smuzhiyun #define FW_RI_BIND_MW_WR_DCACPU_G(x) \ 691*4882a593Smuzhiyun (((x) >> FW_RI_BIND_MW_WR_DCACPU_S) & FW_RI_BIND_MW_WR_DCACPU_M) 692*4882a593Smuzhiyun 693*4882a593Smuzhiyun struct fw_ri_fr_nsmr_wr { 694*4882a593Smuzhiyun __u8 opcode; 695*4882a593Smuzhiyun __u8 flags; 696*4882a593Smuzhiyun __u16 wrid; 697*4882a593Smuzhiyun __u8 r1[3]; 698*4882a593Smuzhiyun __u8 len16; 699*4882a593Smuzhiyun __u8 qpbinde_to_dcacpu; 700*4882a593Smuzhiyun __u8 pgsz_shift; 701*4882a593Smuzhiyun __u8 addr_type; 702*4882a593Smuzhiyun __u8 mem_perms; 703*4882a593Smuzhiyun __be32 stag; 704*4882a593Smuzhiyun __be32 len_hi; 705*4882a593Smuzhiyun __be32 len_lo; 706*4882a593Smuzhiyun __be32 va_hi; 707*4882a593Smuzhiyun __be32 va_lo_fbo; 708*4882a593Smuzhiyun }; 709*4882a593Smuzhiyun 710*4882a593Smuzhiyun #define FW_RI_FR_NSMR_WR_QPBINDE_S 6 711*4882a593Smuzhiyun #define FW_RI_FR_NSMR_WR_QPBINDE_M 0x1 712*4882a593Smuzhiyun #define FW_RI_FR_NSMR_WR_QPBINDE_V(x) ((x) << FW_RI_FR_NSMR_WR_QPBINDE_S) 713*4882a593Smuzhiyun #define FW_RI_FR_NSMR_WR_QPBINDE_G(x) \ 714*4882a593Smuzhiyun (((x) >> FW_RI_FR_NSMR_WR_QPBINDE_S) & FW_RI_FR_NSMR_WR_QPBINDE_M) 715*4882a593Smuzhiyun #define FW_RI_FR_NSMR_WR_QPBINDE_F FW_RI_FR_NSMR_WR_QPBINDE_V(1U) 716*4882a593Smuzhiyun 717*4882a593Smuzhiyun #define FW_RI_FR_NSMR_WR_NS_S 5 718*4882a593Smuzhiyun #define FW_RI_FR_NSMR_WR_NS_M 0x1 719*4882a593Smuzhiyun #define FW_RI_FR_NSMR_WR_NS_V(x) ((x) << FW_RI_FR_NSMR_WR_NS_S) 720*4882a593Smuzhiyun #define FW_RI_FR_NSMR_WR_NS_G(x) \ 721*4882a593Smuzhiyun (((x) >> FW_RI_FR_NSMR_WR_NS_S) & FW_RI_FR_NSMR_WR_NS_M) 722*4882a593Smuzhiyun #define FW_RI_FR_NSMR_WR_NS_F FW_RI_FR_NSMR_WR_NS_V(1U) 723*4882a593Smuzhiyun 724*4882a593Smuzhiyun #define FW_RI_FR_NSMR_WR_DCACPU_S 0 725*4882a593Smuzhiyun #define FW_RI_FR_NSMR_WR_DCACPU_M 0x1f 726*4882a593Smuzhiyun #define FW_RI_FR_NSMR_WR_DCACPU_V(x) ((x) << FW_RI_FR_NSMR_WR_DCACPU_S) 727*4882a593Smuzhiyun #define FW_RI_FR_NSMR_WR_DCACPU_G(x) \ 728*4882a593Smuzhiyun (((x) >> FW_RI_FR_NSMR_WR_DCACPU_S) & FW_RI_FR_NSMR_WR_DCACPU_M) 729*4882a593Smuzhiyun 730*4882a593Smuzhiyun struct fw_ri_fr_nsmr_tpte_wr { 731*4882a593Smuzhiyun __u8 opcode; 732*4882a593Smuzhiyun __u8 flags; 733*4882a593Smuzhiyun __u16 wrid; 734*4882a593Smuzhiyun __u8 r1[3]; 735*4882a593Smuzhiyun __u8 len16; 736*4882a593Smuzhiyun __be32 r2; 737*4882a593Smuzhiyun __be32 stag; 738*4882a593Smuzhiyun struct fw_ri_tpte tpte; 739*4882a593Smuzhiyun __u64 pbl[2]; 740*4882a593Smuzhiyun }; 741*4882a593Smuzhiyun 742*4882a593Smuzhiyun struct fw_ri_inv_lstag_wr { 743*4882a593Smuzhiyun __u8 opcode; 744*4882a593Smuzhiyun __u8 flags; 745*4882a593Smuzhiyun __u16 wrid; 746*4882a593Smuzhiyun __u8 r1[3]; 747*4882a593Smuzhiyun __u8 len16; 748*4882a593Smuzhiyun __be32 r2; 749*4882a593Smuzhiyun __be32 stag_inv; 750*4882a593Smuzhiyun }; 751*4882a593Smuzhiyun 752*4882a593Smuzhiyun enum fw_ri_type { 753*4882a593Smuzhiyun FW_RI_TYPE_INIT, 754*4882a593Smuzhiyun FW_RI_TYPE_FINI, 755*4882a593Smuzhiyun FW_RI_TYPE_TERMINATE 756*4882a593Smuzhiyun }; 757*4882a593Smuzhiyun 758*4882a593Smuzhiyun enum fw_ri_init_p2ptype { 759*4882a593Smuzhiyun FW_RI_INIT_P2PTYPE_RDMA_WRITE = FW_RI_RDMA_WRITE, 760*4882a593Smuzhiyun FW_RI_INIT_P2PTYPE_READ_REQ = FW_RI_READ_REQ, 761*4882a593Smuzhiyun FW_RI_INIT_P2PTYPE_SEND = FW_RI_SEND, 762*4882a593Smuzhiyun FW_RI_INIT_P2PTYPE_SEND_WITH_INV = FW_RI_SEND_WITH_INV, 763*4882a593Smuzhiyun FW_RI_INIT_P2PTYPE_SEND_WITH_SE = FW_RI_SEND_WITH_SE, 764*4882a593Smuzhiyun FW_RI_INIT_P2PTYPE_SEND_WITH_SE_INV = FW_RI_SEND_WITH_SE_INV, 765*4882a593Smuzhiyun FW_RI_INIT_P2PTYPE_DISABLED = 0xf, 766*4882a593Smuzhiyun }; 767*4882a593Smuzhiyun 768*4882a593Smuzhiyun enum fw_ri_init_rqeqid_srq { 769*4882a593Smuzhiyun FW_RI_INIT_RQEQID_SRQ = 1 << 31, 770*4882a593Smuzhiyun }; 771*4882a593Smuzhiyun 772*4882a593Smuzhiyun struct fw_ri_wr { 773*4882a593Smuzhiyun __be32 op_compl; 774*4882a593Smuzhiyun __be32 flowid_len16; 775*4882a593Smuzhiyun __u64 cookie; 776*4882a593Smuzhiyun union fw_ri { 777*4882a593Smuzhiyun struct fw_ri_init { 778*4882a593Smuzhiyun __u8 type; 779*4882a593Smuzhiyun __u8 mpareqbit_p2ptype; 780*4882a593Smuzhiyun __u8 r4[2]; 781*4882a593Smuzhiyun __u8 mpa_attrs; 782*4882a593Smuzhiyun __u8 qp_caps; 783*4882a593Smuzhiyun __be16 nrqe; 784*4882a593Smuzhiyun __be32 pdid; 785*4882a593Smuzhiyun __be32 qpid; 786*4882a593Smuzhiyun __be32 sq_eqid; 787*4882a593Smuzhiyun __be32 rq_eqid; 788*4882a593Smuzhiyun __be32 scqid; 789*4882a593Smuzhiyun __be32 rcqid; 790*4882a593Smuzhiyun __be32 ord_max; 791*4882a593Smuzhiyun __be32 ird_max; 792*4882a593Smuzhiyun __be32 iss; 793*4882a593Smuzhiyun __be32 irs; 794*4882a593Smuzhiyun __be32 hwrqsize; 795*4882a593Smuzhiyun __be32 hwrqaddr; 796*4882a593Smuzhiyun __be64 r5; 797*4882a593Smuzhiyun union fw_ri_init_p2p { 798*4882a593Smuzhiyun struct fw_ri_rdma_write_wr write; 799*4882a593Smuzhiyun struct fw_ri_rdma_read_wr read; 800*4882a593Smuzhiyun struct fw_ri_send_wr send; 801*4882a593Smuzhiyun } u; 802*4882a593Smuzhiyun } init; 803*4882a593Smuzhiyun struct fw_ri_fini { 804*4882a593Smuzhiyun __u8 type; 805*4882a593Smuzhiyun __u8 r3[7]; 806*4882a593Smuzhiyun __be64 r4; 807*4882a593Smuzhiyun } fini; 808*4882a593Smuzhiyun struct fw_ri_terminate { 809*4882a593Smuzhiyun __u8 type; 810*4882a593Smuzhiyun __u8 r3[3]; 811*4882a593Smuzhiyun __be32 immdlen; 812*4882a593Smuzhiyun __u8 termmsg[40]; 813*4882a593Smuzhiyun } terminate; 814*4882a593Smuzhiyun } u; 815*4882a593Smuzhiyun }; 816*4882a593Smuzhiyun 817*4882a593Smuzhiyun #define FW_RI_WR_MPAREQBIT_S 7 818*4882a593Smuzhiyun #define FW_RI_WR_MPAREQBIT_M 0x1 819*4882a593Smuzhiyun #define FW_RI_WR_MPAREQBIT_V(x) ((x) << FW_RI_WR_MPAREQBIT_S) 820*4882a593Smuzhiyun #define FW_RI_WR_MPAREQBIT_G(x) \ 821*4882a593Smuzhiyun (((x) >> FW_RI_WR_MPAREQBIT_S) & FW_RI_WR_MPAREQBIT_M) 822*4882a593Smuzhiyun #define FW_RI_WR_MPAREQBIT_F FW_RI_WR_MPAREQBIT_V(1U) 823*4882a593Smuzhiyun 824*4882a593Smuzhiyun #define FW_RI_WR_P2PTYPE_S 0 825*4882a593Smuzhiyun #define FW_RI_WR_P2PTYPE_M 0xf 826*4882a593Smuzhiyun #define FW_RI_WR_P2PTYPE_V(x) ((x) << FW_RI_WR_P2PTYPE_S) 827*4882a593Smuzhiyun #define FW_RI_WR_P2PTYPE_G(x) \ 828*4882a593Smuzhiyun (((x) >> FW_RI_WR_P2PTYPE_S) & FW_RI_WR_P2PTYPE_M) 829*4882a593Smuzhiyun 830*4882a593Smuzhiyun #endif /* _T4FW_RI_API_H_ */ 831