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