Path: blob/master/drivers/infiniband/hw/cxgb4/t4fw_ri_api.h
15112 views
/*1* Copyright (c) 2009-2010 Chelsio, Inc. All rights reserved.2*3* This software is available to you under a choice of one of two4* licenses. You may choose to be licensed under the terms of the GNU5* General Public License (GPL) Version 2, available from the file6* COPYING in the main directory of this source tree, or the7* OpenIB.org BSD license below:8*9* Redistribution and use in source and binary forms, with or10* without modification, are permitted provided that the following11* conditions are met:12*13* - Redistributions of source code must retain the above14* copyright notice, this list of conditions and the following15* disclaimer.16* - Redistributions in binary form must reproduce the above17* copyright notice, this list of conditions and the following18* disclaimer in the documentation and/or other materials19* provided with the distribution.20*21* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,22* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF23* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND24* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS25* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN26* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN27* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE28* SOFTWARE.29*/30#ifndef _T4FW_RI_API_H_31#define _T4FW_RI_API_H_3233#include "t4fw_api.h"3435enum fw_ri_wr_opcode {36FW_RI_RDMA_WRITE = 0x0, /* IETF RDMAP v1.0 ... */37FW_RI_READ_REQ = 0x1,38FW_RI_READ_RESP = 0x2,39FW_RI_SEND = 0x3,40FW_RI_SEND_WITH_INV = 0x4,41FW_RI_SEND_WITH_SE = 0x5,42FW_RI_SEND_WITH_SE_INV = 0x6,43FW_RI_TERMINATE = 0x7,44FW_RI_RDMA_INIT = 0x8, /* CHELSIO RI specific ... */45FW_RI_BIND_MW = 0x9,46FW_RI_FAST_REGISTER = 0xa,47FW_RI_LOCAL_INV = 0xb,48FW_RI_QP_MODIFY = 0xc,49FW_RI_BYPASS = 0xd,50FW_RI_RECEIVE = 0xe,5152FW_RI_SGE_EC_CR_RETURN = 0xf53};5455enum fw_ri_wr_flags {56FW_RI_COMPLETION_FLAG = 0x01,57FW_RI_NOTIFICATION_FLAG = 0x02,58FW_RI_SOLICITED_EVENT_FLAG = 0x04,59FW_RI_READ_FENCE_FLAG = 0x08,60FW_RI_LOCAL_FENCE_FLAG = 0x10,61FW_RI_RDMA_READ_INVALIDATE = 0x2062};6364enum fw_ri_mpa_attrs {65FW_RI_MPA_RX_MARKER_ENABLE = 0x01,66FW_RI_MPA_TX_MARKER_ENABLE = 0x02,67FW_RI_MPA_CRC_ENABLE = 0x04,68FW_RI_MPA_IETF_ENABLE = 0x0869};7071enum fw_ri_qp_caps {72FW_RI_QP_RDMA_READ_ENABLE = 0x01,73FW_RI_QP_RDMA_WRITE_ENABLE = 0x02,74FW_RI_QP_BIND_ENABLE = 0x04,75FW_RI_QP_FAST_REGISTER_ENABLE = 0x08,76FW_RI_QP_STAG0_ENABLE = 0x1077};7879enum fw_ri_addr_type {80FW_RI_ZERO_BASED_TO = 0x00,81FW_RI_VA_BASED_TO = 0x0182};8384enum fw_ri_mem_perms {85FW_RI_MEM_ACCESS_REM_WRITE = 0x01,86FW_RI_MEM_ACCESS_REM_READ = 0x02,87FW_RI_MEM_ACCESS_REM = 0x03,88FW_RI_MEM_ACCESS_LOCAL_WRITE = 0x04,89FW_RI_MEM_ACCESS_LOCAL_READ = 0x08,90FW_RI_MEM_ACCESS_LOCAL = 0x0C91};9293enum fw_ri_stag_type {94FW_RI_STAG_NSMR = 0x00,95FW_RI_STAG_SMR = 0x01,96FW_RI_STAG_MW = 0x02,97FW_RI_STAG_MW_RELAXED = 0x0398};99100enum fw_ri_data_op {101FW_RI_DATA_IMMD = 0x81,102FW_RI_DATA_DSGL = 0x82,103FW_RI_DATA_ISGL = 0x83104};105106enum fw_ri_sgl_depth {107FW_RI_SGL_DEPTH_MAX_SQ = 16,108FW_RI_SGL_DEPTH_MAX_RQ = 4109};110111struct fw_ri_dsge_pair {112__be32 len[2];113__be64 addr[2];114};115116struct fw_ri_dsgl {117__u8 op;118__u8 r1;119__be16 nsge;120__be32 len0;121__be64 addr0;122#ifndef C99_NOT_SUPPORTED123struct fw_ri_dsge_pair sge[0];124#endif125};126127struct fw_ri_sge {128__be32 stag;129__be32 len;130__be64 to;131};132133struct fw_ri_isgl {134__u8 op;135__u8 r1;136__be16 nsge;137__be32 r2;138#ifndef C99_NOT_SUPPORTED139struct fw_ri_sge sge[0];140#endif141};142143struct fw_ri_immd {144__u8 op;145__u8 r1;146__be16 r2;147__be32 immdlen;148#ifndef C99_NOT_SUPPORTED149__u8 data[0];150#endif151};152153struct fw_ri_tpte {154__be32 valid_to_pdid;155__be32 locread_to_qpid;156__be32 nosnoop_pbladdr;157__be32 len_lo;158__be32 va_hi;159__be32 va_lo_fbo;160__be32 dca_mwbcnt_pstag;161__be32 len_hi;162};163164#define S_FW_RI_TPTE_VALID 31165#define M_FW_RI_TPTE_VALID 0x1166#define V_FW_RI_TPTE_VALID(x) ((x) << S_FW_RI_TPTE_VALID)167#define G_FW_RI_TPTE_VALID(x) \168(((x) >> S_FW_RI_TPTE_VALID) & M_FW_RI_TPTE_VALID)169#define F_FW_RI_TPTE_VALID V_FW_RI_TPTE_VALID(1U)170171#define S_FW_RI_TPTE_STAGKEY 23172#define M_FW_RI_TPTE_STAGKEY 0xff173#define V_FW_RI_TPTE_STAGKEY(x) ((x) << S_FW_RI_TPTE_STAGKEY)174#define G_FW_RI_TPTE_STAGKEY(x) \175(((x) >> S_FW_RI_TPTE_STAGKEY) & M_FW_RI_TPTE_STAGKEY)176177#define S_FW_RI_TPTE_STAGSTATE 22178#define M_FW_RI_TPTE_STAGSTATE 0x1179#define V_FW_RI_TPTE_STAGSTATE(x) ((x) << S_FW_RI_TPTE_STAGSTATE)180#define G_FW_RI_TPTE_STAGSTATE(x) \181(((x) >> S_FW_RI_TPTE_STAGSTATE) & M_FW_RI_TPTE_STAGSTATE)182#define F_FW_RI_TPTE_STAGSTATE V_FW_RI_TPTE_STAGSTATE(1U)183184#define S_FW_RI_TPTE_STAGTYPE 20185#define M_FW_RI_TPTE_STAGTYPE 0x3186#define V_FW_RI_TPTE_STAGTYPE(x) ((x) << S_FW_RI_TPTE_STAGTYPE)187#define G_FW_RI_TPTE_STAGTYPE(x) \188(((x) >> S_FW_RI_TPTE_STAGTYPE) & M_FW_RI_TPTE_STAGTYPE)189190#define S_FW_RI_TPTE_PDID 0191#define M_FW_RI_TPTE_PDID 0xfffff192#define V_FW_RI_TPTE_PDID(x) ((x) << S_FW_RI_TPTE_PDID)193#define G_FW_RI_TPTE_PDID(x) \194(((x) >> S_FW_RI_TPTE_PDID) & M_FW_RI_TPTE_PDID)195196#define S_FW_RI_TPTE_PERM 28197#define M_FW_RI_TPTE_PERM 0xf198#define V_FW_RI_TPTE_PERM(x) ((x) << S_FW_RI_TPTE_PERM)199#define G_FW_RI_TPTE_PERM(x) \200(((x) >> S_FW_RI_TPTE_PERM) & M_FW_RI_TPTE_PERM)201202#define S_FW_RI_TPTE_REMINVDIS 27203#define M_FW_RI_TPTE_REMINVDIS 0x1204#define V_FW_RI_TPTE_REMINVDIS(x) ((x) << S_FW_RI_TPTE_REMINVDIS)205#define G_FW_RI_TPTE_REMINVDIS(x) \206(((x) >> S_FW_RI_TPTE_REMINVDIS) & M_FW_RI_TPTE_REMINVDIS)207#define F_FW_RI_TPTE_REMINVDIS V_FW_RI_TPTE_REMINVDIS(1U)208209#define S_FW_RI_TPTE_ADDRTYPE 26210#define M_FW_RI_TPTE_ADDRTYPE 1211#define V_FW_RI_TPTE_ADDRTYPE(x) ((x) << S_FW_RI_TPTE_ADDRTYPE)212#define G_FW_RI_TPTE_ADDRTYPE(x) \213(((x) >> S_FW_RI_TPTE_ADDRTYPE) & M_FW_RI_TPTE_ADDRTYPE)214#define F_FW_RI_TPTE_ADDRTYPE V_FW_RI_TPTE_ADDRTYPE(1U)215216#define S_FW_RI_TPTE_MWBINDEN 25217#define M_FW_RI_TPTE_MWBINDEN 0x1218#define V_FW_RI_TPTE_MWBINDEN(x) ((x) << S_FW_RI_TPTE_MWBINDEN)219#define G_FW_RI_TPTE_MWBINDEN(x) \220(((x) >> S_FW_RI_TPTE_MWBINDEN) & M_FW_RI_TPTE_MWBINDEN)221#define F_FW_RI_TPTE_MWBINDEN V_FW_RI_TPTE_MWBINDEN(1U)222223#define S_FW_RI_TPTE_PS 20224#define M_FW_RI_TPTE_PS 0x1f225#define V_FW_RI_TPTE_PS(x) ((x) << S_FW_RI_TPTE_PS)226#define G_FW_RI_TPTE_PS(x) \227(((x) >> S_FW_RI_TPTE_PS) & M_FW_RI_TPTE_PS)228229#define S_FW_RI_TPTE_QPID 0230#define M_FW_RI_TPTE_QPID 0xfffff231#define V_FW_RI_TPTE_QPID(x) ((x) << S_FW_RI_TPTE_QPID)232#define G_FW_RI_TPTE_QPID(x) \233(((x) >> S_FW_RI_TPTE_QPID) & M_FW_RI_TPTE_QPID)234235#define S_FW_RI_TPTE_NOSNOOP 30236#define M_FW_RI_TPTE_NOSNOOP 0x1237#define V_FW_RI_TPTE_NOSNOOP(x) ((x) << S_FW_RI_TPTE_NOSNOOP)238#define G_FW_RI_TPTE_NOSNOOP(x) \239(((x) >> S_FW_RI_TPTE_NOSNOOP) & M_FW_RI_TPTE_NOSNOOP)240#define F_FW_RI_TPTE_NOSNOOP V_FW_RI_TPTE_NOSNOOP(1U)241242#define S_FW_RI_TPTE_PBLADDR 0243#define M_FW_RI_TPTE_PBLADDR 0x1fffffff244#define V_FW_RI_TPTE_PBLADDR(x) ((x) << S_FW_RI_TPTE_PBLADDR)245#define G_FW_RI_TPTE_PBLADDR(x) \246(((x) >> S_FW_RI_TPTE_PBLADDR) & M_FW_RI_TPTE_PBLADDR)247248#define S_FW_RI_TPTE_DCA 24249#define M_FW_RI_TPTE_DCA 0x1f250#define V_FW_RI_TPTE_DCA(x) ((x) << S_FW_RI_TPTE_DCA)251#define G_FW_RI_TPTE_DCA(x) \252(((x) >> S_FW_RI_TPTE_DCA) & M_FW_RI_TPTE_DCA)253254#define S_FW_RI_TPTE_MWBCNT_PSTAG 0255#define M_FW_RI_TPTE_MWBCNT_PSTAG 0xffffff256#define V_FW_RI_TPTE_MWBCNT_PSTAT(x) \257((x) << S_FW_RI_TPTE_MWBCNT_PSTAG)258#define G_FW_RI_TPTE_MWBCNT_PSTAG(x) \259(((x) >> S_FW_RI_TPTE_MWBCNT_PSTAG) & M_FW_RI_TPTE_MWBCNT_PSTAG)260261enum fw_ri_res_type {262FW_RI_RES_TYPE_SQ,263FW_RI_RES_TYPE_RQ,264FW_RI_RES_TYPE_CQ,265};266267enum fw_ri_res_op {268FW_RI_RES_OP_WRITE,269FW_RI_RES_OP_RESET,270};271272struct fw_ri_res {273union fw_ri_restype {274struct fw_ri_res_sqrq {275__u8 restype;276__u8 op;277__be16 r3;278__be32 eqid;279__be32 r4[2];280__be32 fetchszm_to_iqid;281__be32 dcaen_to_eqsize;282__be64 eqaddr;283} sqrq;284struct fw_ri_res_cq {285__u8 restype;286__u8 op;287__be16 r3;288__be32 iqid;289__be32 r4[2];290__be32 iqandst_to_iqandstindex;291__be16 iqdroprss_to_iqesize;292__be16 iqsize;293__be64 iqaddr;294__be32 iqns_iqro;295__be32 r6_lo;296__be64 r7;297} cq;298} u;299};300301struct fw_ri_res_wr {302__be32 op_nres;303__be32 len16_pkd;304__u64 cookie;305#ifndef C99_NOT_SUPPORTED306struct fw_ri_res res[0];307#endif308};309310#define S_FW_RI_RES_WR_NRES 0311#define M_FW_RI_RES_WR_NRES 0xff312#define V_FW_RI_RES_WR_NRES(x) ((x) << S_FW_RI_RES_WR_NRES)313#define G_FW_RI_RES_WR_NRES(x) \314(((x) >> S_FW_RI_RES_WR_NRES) & M_FW_RI_RES_WR_NRES)315316#define S_FW_RI_RES_WR_FETCHSZM 26317#define M_FW_RI_RES_WR_FETCHSZM 0x1318#define V_FW_RI_RES_WR_FETCHSZM(x) ((x) << S_FW_RI_RES_WR_FETCHSZM)319#define G_FW_RI_RES_WR_FETCHSZM(x) \320(((x) >> S_FW_RI_RES_WR_FETCHSZM) & M_FW_RI_RES_WR_FETCHSZM)321#define F_FW_RI_RES_WR_FETCHSZM V_FW_RI_RES_WR_FETCHSZM(1U)322323#define S_FW_RI_RES_WR_STATUSPGNS 25324#define M_FW_RI_RES_WR_STATUSPGNS 0x1325#define V_FW_RI_RES_WR_STATUSPGNS(x) ((x) << S_FW_RI_RES_WR_STATUSPGNS)326#define G_FW_RI_RES_WR_STATUSPGNS(x) \327(((x) >> S_FW_RI_RES_WR_STATUSPGNS) & M_FW_RI_RES_WR_STATUSPGNS)328#define F_FW_RI_RES_WR_STATUSPGNS V_FW_RI_RES_WR_STATUSPGNS(1U)329330#define S_FW_RI_RES_WR_STATUSPGRO 24331#define M_FW_RI_RES_WR_STATUSPGRO 0x1332#define V_FW_RI_RES_WR_STATUSPGRO(x) ((x) << S_FW_RI_RES_WR_STATUSPGRO)333#define G_FW_RI_RES_WR_STATUSPGRO(x) \334(((x) >> S_FW_RI_RES_WR_STATUSPGRO) & M_FW_RI_RES_WR_STATUSPGRO)335#define F_FW_RI_RES_WR_STATUSPGRO V_FW_RI_RES_WR_STATUSPGRO(1U)336337#define S_FW_RI_RES_WR_FETCHNS 23338#define M_FW_RI_RES_WR_FETCHNS 0x1339#define V_FW_RI_RES_WR_FETCHNS(x) ((x) << S_FW_RI_RES_WR_FETCHNS)340#define G_FW_RI_RES_WR_FETCHNS(x) \341(((x) >> S_FW_RI_RES_WR_FETCHNS) & M_FW_RI_RES_WR_FETCHNS)342#define F_FW_RI_RES_WR_FETCHNS V_FW_RI_RES_WR_FETCHNS(1U)343344#define S_FW_RI_RES_WR_FETCHRO 22345#define M_FW_RI_RES_WR_FETCHRO 0x1346#define V_FW_RI_RES_WR_FETCHRO(x) ((x) << S_FW_RI_RES_WR_FETCHRO)347#define G_FW_RI_RES_WR_FETCHRO(x) \348(((x) >> S_FW_RI_RES_WR_FETCHRO) & M_FW_RI_RES_WR_FETCHRO)349#define F_FW_RI_RES_WR_FETCHRO V_FW_RI_RES_WR_FETCHRO(1U)350351#define S_FW_RI_RES_WR_HOSTFCMODE 20352#define M_FW_RI_RES_WR_HOSTFCMODE 0x3353#define V_FW_RI_RES_WR_HOSTFCMODE(x) ((x) << S_FW_RI_RES_WR_HOSTFCMODE)354#define G_FW_RI_RES_WR_HOSTFCMODE(x) \355(((x) >> S_FW_RI_RES_WR_HOSTFCMODE) & M_FW_RI_RES_WR_HOSTFCMODE)356357#define S_FW_RI_RES_WR_CPRIO 19358#define M_FW_RI_RES_WR_CPRIO 0x1359#define V_FW_RI_RES_WR_CPRIO(x) ((x) << S_FW_RI_RES_WR_CPRIO)360#define G_FW_RI_RES_WR_CPRIO(x) \361(((x) >> S_FW_RI_RES_WR_CPRIO) & M_FW_RI_RES_WR_CPRIO)362#define F_FW_RI_RES_WR_CPRIO V_FW_RI_RES_WR_CPRIO(1U)363364#define S_FW_RI_RES_WR_ONCHIP 18365#define M_FW_RI_RES_WR_ONCHIP 0x1366#define V_FW_RI_RES_WR_ONCHIP(x) ((x) << S_FW_RI_RES_WR_ONCHIP)367#define G_FW_RI_RES_WR_ONCHIP(x) \368(((x) >> S_FW_RI_RES_WR_ONCHIP) & M_FW_RI_RES_WR_ONCHIP)369#define F_FW_RI_RES_WR_ONCHIP V_FW_RI_RES_WR_ONCHIP(1U)370371#define S_FW_RI_RES_WR_PCIECHN 16372#define M_FW_RI_RES_WR_PCIECHN 0x3373#define V_FW_RI_RES_WR_PCIECHN(x) ((x) << S_FW_RI_RES_WR_PCIECHN)374#define G_FW_RI_RES_WR_PCIECHN(x) \375(((x) >> S_FW_RI_RES_WR_PCIECHN) & M_FW_RI_RES_WR_PCIECHN)376377#define S_FW_RI_RES_WR_IQID 0378#define M_FW_RI_RES_WR_IQID 0xffff379#define V_FW_RI_RES_WR_IQID(x) ((x) << S_FW_RI_RES_WR_IQID)380#define G_FW_RI_RES_WR_IQID(x) \381(((x) >> S_FW_RI_RES_WR_IQID) & M_FW_RI_RES_WR_IQID)382383#define S_FW_RI_RES_WR_DCAEN 31384#define M_FW_RI_RES_WR_DCAEN 0x1385#define V_FW_RI_RES_WR_DCAEN(x) ((x) << S_FW_RI_RES_WR_DCAEN)386#define G_FW_RI_RES_WR_DCAEN(x) \387(((x) >> S_FW_RI_RES_WR_DCAEN) & M_FW_RI_RES_WR_DCAEN)388#define F_FW_RI_RES_WR_DCAEN V_FW_RI_RES_WR_DCAEN(1U)389390#define S_FW_RI_RES_WR_DCACPU 26391#define M_FW_RI_RES_WR_DCACPU 0x1f392#define V_FW_RI_RES_WR_DCACPU(x) ((x) << S_FW_RI_RES_WR_DCACPU)393#define G_FW_RI_RES_WR_DCACPU(x) \394(((x) >> S_FW_RI_RES_WR_DCACPU) & M_FW_RI_RES_WR_DCACPU)395396#define S_FW_RI_RES_WR_FBMIN 23397#define M_FW_RI_RES_WR_FBMIN 0x7398#define V_FW_RI_RES_WR_FBMIN(x) ((x) << S_FW_RI_RES_WR_FBMIN)399#define G_FW_RI_RES_WR_FBMIN(x) \400(((x) >> S_FW_RI_RES_WR_FBMIN) & M_FW_RI_RES_WR_FBMIN)401402#define S_FW_RI_RES_WR_FBMAX 20403#define M_FW_RI_RES_WR_FBMAX 0x7404#define V_FW_RI_RES_WR_FBMAX(x) ((x) << S_FW_RI_RES_WR_FBMAX)405#define G_FW_RI_RES_WR_FBMAX(x) \406(((x) >> S_FW_RI_RES_WR_FBMAX) & M_FW_RI_RES_WR_FBMAX)407408#define S_FW_RI_RES_WR_CIDXFTHRESHO 19409#define M_FW_RI_RES_WR_CIDXFTHRESHO 0x1410#define V_FW_RI_RES_WR_CIDXFTHRESHO(x) ((x) << S_FW_RI_RES_WR_CIDXFTHRESHO)411#define G_FW_RI_RES_WR_CIDXFTHRESHO(x) \412(((x) >> S_FW_RI_RES_WR_CIDXFTHRESHO) & M_FW_RI_RES_WR_CIDXFTHRESHO)413#define F_FW_RI_RES_WR_CIDXFTHRESHO V_FW_RI_RES_WR_CIDXFTHRESHO(1U)414415#define S_FW_RI_RES_WR_CIDXFTHRESH 16416#define M_FW_RI_RES_WR_CIDXFTHRESH 0x7417#define V_FW_RI_RES_WR_CIDXFTHRESH(x) ((x) << S_FW_RI_RES_WR_CIDXFTHRESH)418#define G_FW_RI_RES_WR_CIDXFTHRESH(x) \419(((x) >> S_FW_RI_RES_WR_CIDXFTHRESH) & M_FW_RI_RES_WR_CIDXFTHRESH)420421#define S_FW_RI_RES_WR_EQSIZE 0422#define M_FW_RI_RES_WR_EQSIZE 0xffff423#define V_FW_RI_RES_WR_EQSIZE(x) ((x) << S_FW_RI_RES_WR_EQSIZE)424#define G_FW_RI_RES_WR_EQSIZE(x) \425(((x) >> S_FW_RI_RES_WR_EQSIZE) & M_FW_RI_RES_WR_EQSIZE)426427#define S_FW_RI_RES_WR_IQANDST 15428#define M_FW_RI_RES_WR_IQANDST 0x1429#define V_FW_RI_RES_WR_IQANDST(x) ((x) << S_FW_RI_RES_WR_IQANDST)430#define G_FW_RI_RES_WR_IQANDST(x) \431(((x) >> S_FW_RI_RES_WR_IQANDST) & M_FW_RI_RES_WR_IQANDST)432#define F_FW_RI_RES_WR_IQANDST V_FW_RI_RES_WR_IQANDST(1U)433434#define S_FW_RI_RES_WR_IQANUS 14435#define M_FW_RI_RES_WR_IQANUS 0x1436#define V_FW_RI_RES_WR_IQANUS(x) ((x) << S_FW_RI_RES_WR_IQANUS)437#define G_FW_RI_RES_WR_IQANUS(x) \438(((x) >> S_FW_RI_RES_WR_IQANUS) & M_FW_RI_RES_WR_IQANUS)439#define F_FW_RI_RES_WR_IQANUS V_FW_RI_RES_WR_IQANUS(1U)440441#define S_FW_RI_RES_WR_IQANUD 12442#define M_FW_RI_RES_WR_IQANUD 0x3443#define V_FW_RI_RES_WR_IQANUD(x) ((x) << S_FW_RI_RES_WR_IQANUD)444#define G_FW_RI_RES_WR_IQANUD(x) \445(((x) >> S_FW_RI_RES_WR_IQANUD) & M_FW_RI_RES_WR_IQANUD)446447#define S_FW_RI_RES_WR_IQANDSTINDEX 0448#define M_FW_RI_RES_WR_IQANDSTINDEX 0xfff449#define V_FW_RI_RES_WR_IQANDSTINDEX(x) ((x) << S_FW_RI_RES_WR_IQANDSTINDEX)450#define G_FW_RI_RES_WR_IQANDSTINDEX(x) \451(((x) >> S_FW_RI_RES_WR_IQANDSTINDEX) & M_FW_RI_RES_WR_IQANDSTINDEX)452453#define S_FW_RI_RES_WR_IQDROPRSS 15454#define M_FW_RI_RES_WR_IQDROPRSS 0x1455#define V_FW_RI_RES_WR_IQDROPRSS(x) ((x) << S_FW_RI_RES_WR_IQDROPRSS)456#define G_FW_RI_RES_WR_IQDROPRSS(x) \457(((x) >> S_FW_RI_RES_WR_IQDROPRSS) & M_FW_RI_RES_WR_IQDROPRSS)458#define F_FW_RI_RES_WR_IQDROPRSS V_FW_RI_RES_WR_IQDROPRSS(1U)459460#define S_FW_RI_RES_WR_IQGTSMODE 14461#define M_FW_RI_RES_WR_IQGTSMODE 0x1462#define V_FW_RI_RES_WR_IQGTSMODE(x) ((x) << S_FW_RI_RES_WR_IQGTSMODE)463#define G_FW_RI_RES_WR_IQGTSMODE(x) \464(((x) >> S_FW_RI_RES_WR_IQGTSMODE) & M_FW_RI_RES_WR_IQGTSMODE)465#define F_FW_RI_RES_WR_IQGTSMODE V_FW_RI_RES_WR_IQGTSMODE(1U)466467#define S_FW_RI_RES_WR_IQPCIECH 12468#define M_FW_RI_RES_WR_IQPCIECH 0x3469#define V_FW_RI_RES_WR_IQPCIECH(x) ((x) << S_FW_RI_RES_WR_IQPCIECH)470#define G_FW_RI_RES_WR_IQPCIECH(x) \471(((x) >> S_FW_RI_RES_WR_IQPCIECH) & M_FW_RI_RES_WR_IQPCIECH)472473#define S_FW_RI_RES_WR_IQDCAEN 11474#define M_FW_RI_RES_WR_IQDCAEN 0x1475#define V_FW_RI_RES_WR_IQDCAEN(x) ((x) << S_FW_RI_RES_WR_IQDCAEN)476#define G_FW_RI_RES_WR_IQDCAEN(x) \477(((x) >> S_FW_RI_RES_WR_IQDCAEN) & M_FW_RI_RES_WR_IQDCAEN)478#define F_FW_RI_RES_WR_IQDCAEN V_FW_RI_RES_WR_IQDCAEN(1U)479480#define S_FW_RI_RES_WR_IQDCACPU 6481#define M_FW_RI_RES_WR_IQDCACPU 0x1f482#define V_FW_RI_RES_WR_IQDCACPU(x) ((x) << S_FW_RI_RES_WR_IQDCACPU)483#define G_FW_RI_RES_WR_IQDCACPU(x) \484(((x) >> S_FW_RI_RES_WR_IQDCACPU) & M_FW_RI_RES_WR_IQDCACPU)485486#define S_FW_RI_RES_WR_IQINTCNTTHRESH 4487#define M_FW_RI_RES_WR_IQINTCNTTHRESH 0x3488#define V_FW_RI_RES_WR_IQINTCNTTHRESH(x) \489((x) << S_FW_RI_RES_WR_IQINTCNTTHRESH)490#define G_FW_RI_RES_WR_IQINTCNTTHRESH(x) \491(((x) >> S_FW_RI_RES_WR_IQINTCNTTHRESH) & M_FW_RI_RES_WR_IQINTCNTTHRESH)492493#define S_FW_RI_RES_WR_IQO 3494#define M_FW_RI_RES_WR_IQO 0x1495#define V_FW_RI_RES_WR_IQO(x) ((x) << S_FW_RI_RES_WR_IQO)496#define G_FW_RI_RES_WR_IQO(x) \497(((x) >> S_FW_RI_RES_WR_IQO) & M_FW_RI_RES_WR_IQO)498#define F_FW_RI_RES_WR_IQO V_FW_RI_RES_WR_IQO(1U)499500#define S_FW_RI_RES_WR_IQCPRIO 2501#define M_FW_RI_RES_WR_IQCPRIO 0x1502#define V_FW_RI_RES_WR_IQCPRIO(x) ((x) << S_FW_RI_RES_WR_IQCPRIO)503#define G_FW_RI_RES_WR_IQCPRIO(x) \504(((x) >> S_FW_RI_RES_WR_IQCPRIO) & M_FW_RI_RES_WR_IQCPRIO)505#define F_FW_RI_RES_WR_IQCPRIO V_FW_RI_RES_WR_IQCPRIO(1U)506507#define S_FW_RI_RES_WR_IQESIZE 0508#define M_FW_RI_RES_WR_IQESIZE 0x3509#define V_FW_RI_RES_WR_IQESIZE(x) ((x) << S_FW_RI_RES_WR_IQESIZE)510#define G_FW_RI_RES_WR_IQESIZE(x) \511(((x) >> S_FW_RI_RES_WR_IQESIZE) & M_FW_RI_RES_WR_IQESIZE)512513#define S_FW_RI_RES_WR_IQNS 31514#define M_FW_RI_RES_WR_IQNS 0x1515#define V_FW_RI_RES_WR_IQNS(x) ((x) << S_FW_RI_RES_WR_IQNS)516#define G_FW_RI_RES_WR_IQNS(x) \517(((x) >> S_FW_RI_RES_WR_IQNS) & M_FW_RI_RES_WR_IQNS)518#define F_FW_RI_RES_WR_IQNS V_FW_RI_RES_WR_IQNS(1U)519520#define S_FW_RI_RES_WR_IQRO 30521#define M_FW_RI_RES_WR_IQRO 0x1522#define V_FW_RI_RES_WR_IQRO(x) ((x) << S_FW_RI_RES_WR_IQRO)523#define G_FW_RI_RES_WR_IQRO(x) \524(((x) >> S_FW_RI_RES_WR_IQRO) & M_FW_RI_RES_WR_IQRO)525#define F_FW_RI_RES_WR_IQRO V_FW_RI_RES_WR_IQRO(1U)526527struct fw_ri_rdma_write_wr {528__u8 opcode;529__u8 flags;530__u16 wrid;531__u8 r1[3];532__u8 len16;533__be64 r2;534__be32 plen;535__be32 stag_sink;536__be64 to_sink;537#ifndef C99_NOT_SUPPORTED538union {539struct fw_ri_immd immd_src[0];540struct fw_ri_isgl isgl_src[0];541} u;542#endif543};544545struct fw_ri_send_wr {546__u8 opcode;547__u8 flags;548__u16 wrid;549__u8 r1[3];550__u8 len16;551__be32 sendop_pkd;552__be32 stag_inv;553__be32 plen;554__be32 r3;555__be64 r4;556#ifndef C99_NOT_SUPPORTED557union {558struct fw_ri_immd immd_src[0];559struct fw_ri_isgl isgl_src[0];560} u;561#endif562};563564#define S_FW_RI_SEND_WR_SENDOP 0565#define M_FW_RI_SEND_WR_SENDOP 0xf566#define V_FW_RI_SEND_WR_SENDOP(x) ((x) << S_FW_RI_SEND_WR_SENDOP)567#define G_FW_RI_SEND_WR_SENDOP(x) \568(((x) >> S_FW_RI_SEND_WR_SENDOP) & M_FW_RI_SEND_WR_SENDOP)569570struct fw_ri_rdma_read_wr {571__u8 opcode;572__u8 flags;573__u16 wrid;574__u8 r1[3];575__u8 len16;576__be64 r2;577__be32 stag_sink;578__be32 to_sink_hi;579__be32 to_sink_lo;580__be32 plen;581__be32 stag_src;582__be32 to_src_hi;583__be32 to_src_lo;584__be32 r5;585};586587struct fw_ri_recv_wr {588__u8 opcode;589__u8 r1;590__u16 wrid;591__u8 r2[3];592__u8 len16;593struct fw_ri_isgl isgl;594};595596struct fw_ri_bind_mw_wr {597__u8 opcode;598__u8 flags;599__u16 wrid;600__u8 r1[3];601__u8 len16;602__u8 qpbinde_to_dcacpu;603__u8 pgsz_shift;604__u8 addr_type;605__u8 mem_perms;606__be32 stag_mr;607__be32 stag_mw;608__be32 r3;609__be64 len_mw;610__be64 va_fbo;611__be64 r4;612};613614#define S_FW_RI_BIND_MW_WR_QPBINDE 6615#define M_FW_RI_BIND_MW_WR_QPBINDE 0x1616#define V_FW_RI_BIND_MW_WR_QPBINDE(x) ((x) << S_FW_RI_BIND_MW_WR_QPBINDE)617#define G_FW_RI_BIND_MW_WR_QPBINDE(x) \618(((x) >> S_FW_RI_BIND_MW_WR_QPBINDE) & M_FW_RI_BIND_MW_WR_QPBINDE)619#define F_FW_RI_BIND_MW_WR_QPBINDE V_FW_RI_BIND_MW_WR_QPBINDE(1U)620621#define S_FW_RI_BIND_MW_WR_NS 5622#define M_FW_RI_BIND_MW_WR_NS 0x1623#define V_FW_RI_BIND_MW_WR_NS(x) ((x) << S_FW_RI_BIND_MW_WR_NS)624#define G_FW_RI_BIND_MW_WR_NS(x) \625(((x) >> S_FW_RI_BIND_MW_WR_NS) & M_FW_RI_BIND_MW_WR_NS)626#define F_FW_RI_BIND_MW_WR_NS V_FW_RI_BIND_MW_WR_NS(1U)627628#define S_FW_RI_BIND_MW_WR_DCACPU 0629#define M_FW_RI_BIND_MW_WR_DCACPU 0x1f630#define V_FW_RI_BIND_MW_WR_DCACPU(x) ((x) << S_FW_RI_BIND_MW_WR_DCACPU)631#define G_FW_RI_BIND_MW_WR_DCACPU(x) \632(((x) >> S_FW_RI_BIND_MW_WR_DCACPU) & M_FW_RI_BIND_MW_WR_DCACPU)633634struct fw_ri_fr_nsmr_wr {635__u8 opcode;636__u8 flags;637__u16 wrid;638__u8 r1[3];639__u8 len16;640__u8 qpbinde_to_dcacpu;641__u8 pgsz_shift;642__u8 addr_type;643__u8 mem_perms;644__be32 stag;645__be32 len_hi;646__be32 len_lo;647__be32 va_hi;648__be32 va_lo_fbo;649};650651#define S_FW_RI_FR_NSMR_WR_QPBINDE 6652#define M_FW_RI_FR_NSMR_WR_QPBINDE 0x1653#define V_FW_RI_FR_NSMR_WR_QPBINDE(x) ((x) << S_FW_RI_FR_NSMR_WR_QPBINDE)654#define G_FW_RI_FR_NSMR_WR_QPBINDE(x) \655(((x) >> S_FW_RI_FR_NSMR_WR_QPBINDE) & M_FW_RI_FR_NSMR_WR_QPBINDE)656#define F_FW_RI_FR_NSMR_WR_QPBINDE V_FW_RI_FR_NSMR_WR_QPBINDE(1U)657658#define S_FW_RI_FR_NSMR_WR_NS 5659#define M_FW_RI_FR_NSMR_WR_NS 0x1660#define V_FW_RI_FR_NSMR_WR_NS(x) ((x) << S_FW_RI_FR_NSMR_WR_NS)661#define G_FW_RI_FR_NSMR_WR_NS(x) \662(((x) >> S_FW_RI_FR_NSMR_WR_NS) & M_FW_RI_FR_NSMR_WR_NS)663#define F_FW_RI_FR_NSMR_WR_NS V_FW_RI_FR_NSMR_WR_NS(1U)664665#define S_FW_RI_FR_NSMR_WR_DCACPU 0666#define M_FW_RI_FR_NSMR_WR_DCACPU 0x1f667#define V_FW_RI_FR_NSMR_WR_DCACPU(x) ((x) << S_FW_RI_FR_NSMR_WR_DCACPU)668#define G_FW_RI_FR_NSMR_WR_DCACPU(x) \669(((x) >> S_FW_RI_FR_NSMR_WR_DCACPU) & M_FW_RI_FR_NSMR_WR_DCACPU)670671struct fw_ri_inv_lstag_wr {672__u8 opcode;673__u8 flags;674__u16 wrid;675__u8 r1[3];676__u8 len16;677__be32 r2;678__be32 stag_inv;679};680681enum fw_ri_type {682FW_RI_TYPE_INIT,683FW_RI_TYPE_FINI,684FW_RI_TYPE_TERMINATE685};686687enum fw_ri_init_p2ptype {688FW_RI_INIT_P2PTYPE_RDMA_WRITE = FW_RI_RDMA_WRITE,689FW_RI_INIT_P2PTYPE_READ_REQ = FW_RI_READ_REQ,690FW_RI_INIT_P2PTYPE_SEND = FW_RI_SEND,691FW_RI_INIT_P2PTYPE_SEND_WITH_INV = FW_RI_SEND_WITH_INV,692FW_RI_INIT_P2PTYPE_SEND_WITH_SE = FW_RI_SEND_WITH_SE,693FW_RI_INIT_P2PTYPE_SEND_WITH_SE_INV = FW_RI_SEND_WITH_SE_INV,694FW_RI_INIT_P2PTYPE_DISABLED = 0xf,695};696697struct fw_ri_wr {698__be32 op_compl;699__be32 flowid_len16;700__u64 cookie;701union fw_ri {702struct fw_ri_init {703__u8 type;704__u8 mpareqbit_p2ptype;705__u8 r4[2];706__u8 mpa_attrs;707__u8 qp_caps;708__be16 nrqe;709__be32 pdid;710__be32 qpid;711__be32 sq_eqid;712__be32 rq_eqid;713__be32 scqid;714__be32 rcqid;715__be32 ord_max;716__be32 ird_max;717__be32 iss;718__be32 irs;719__be32 hwrqsize;720__be32 hwrqaddr;721__be64 r5;722union fw_ri_init_p2p {723struct fw_ri_rdma_write_wr write;724struct fw_ri_rdma_read_wr read;725struct fw_ri_send_wr send;726} u;727} init;728struct fw_ri_fini {729__u8 type;730__u8 r3[7];731__be64 r4;732} fini;733struct fw_ri_terminate {734__u8 type;735__u8 r3[3];736__be32 immdlen;737__u8 termmsg[40];738} terminate;739} u;740};741742#define S_FW_RI_WR_MPAREQBIT 7743#define M_FW_RI_WR_MPAREQBIT 0x1744#define V_FW_RI_WR_MPAREQBIT(x) ((x) << S_FW_RI_WR_MPAREQBIT)745#define G_FW_RI_WR_MPAREQBIT(x) \746(((x) >> S_FW_RI_WR_MPAREQBIT) & M_FW_RI_WR_MPAREQBIT)747#define F_FW_RI_WR_MPAREQBIT V_FW_RI_WR_MPAREQBIT(1U)748749#define S_FW_RI_WR_P2PTYPE 0750#define M_FW_RI_WR_P2PTYPE 0xf751#define V_FW_RI_WR_P2PTYPE(x) ((x) << S_FW_RI_WR_P2PTYPE)752#define G_FW_RI_WR_P2PTYPE(x) \753(((x) >> S_FW_RI_WR_P2PTYPE) & M_FW_RI_WR_P2PTYPE)754755struct tcp_options {756__be16 mss;757__u8 wsf;758#if defined(__LITTLE_ENDIAN_BITFIELD)759__u8:4;760__u8 unknown:1;761__u8:1;762__u8 sack:1;763__u8 tstamp:1;764#else765__u8 tstamp:1;766__u8 sack:1;767__u8:1;768__u8 unknown:1;769__u8:4;770#endif771};772773struct cpl_pass_accept_req {774union opcode_tid ot;775__be16 rsvd;776__be16 len;777__be32 hdr_len;778__be16 vlan;779__be16 l2info;780__be32 tos_stid;781struct tcp_options tcpopt;782};783784/* cpl_pass_accept_req.hdr_len fields */785#define S_SYN_RX_CHAN 0786#define M_SYN_RX_CHAN 0xF787#define V_SYN_RX_CHAN(x) ((x) << S_SYN_RX_CHAN)788#define G_SYN_RX_CHAN(x) (((x) >> S_SYN_RX_CHAN) & M_SYN_RX_CHAN)789790#define S_TCP_HDR_LEN 10791#define M_TCP_HDR_LEN 0x3F792#define V_TCP_HDR_LEN(x) ((x) << S_TCP_HDR_LEN)793#define G_TCP_HDR_LEN(x) (((x) >> S_TCP_HDR_LEN) & M_TCP_HDR_LEN)794795#define S_IP_HDR_LEN 16796#define M_IP_HDR_LEN 0x3FF797#define V_IP_HDR_LEN(x) ((x) << S_IP_HDR_LEN)798#define G_IP_HDR_LEN(x) (((x) >> S_IP_HDR_LEN) & M_IP_HDR_LEN)799800#define S_ETH_HDR_LEN 26801#define M_ETH_HDR_LEN 0x1F802#define V_ETH_HDR_LEN(x) ((x) << S_ETH_HDR_LEN)803#define G_ETH_HDR_LEN(x) (((x) >> S_ETH_HDR_LEN) & M_ETH_HDR_LEN)804805/* cpl_pass_accept_req.l2info fields */806#define S_SYN_MAC_IDX 0807#define M_SYN_MAC_IDX 0x1FF808#define V_SYN_MAC_IDX(x) ((x) << S_SYN_MAC_IDX)809#define G_SYN_MAC_IDX(x) (((x) >> S_SYN_MAC_IDX) & M_SYN_MAC_IDX)810811#define S_SYN_XACT_MATCH 9812#define V_SYN_XACT_MATCH(x) ((x) << S_SYN_XACT_MATCH)813#define F_SYN_XACT_MATCH V_SYN_XACT_MATCH(1U)814815#define S_SYN_INTF 12816#define M_SYN_INTF 0xF817#define V_SYN_INTF(x) ((x) << S_SYN_INTF)818#define G_SYN_INTF(x) (((x) >> S_SYN_INTF) & M_SYN_INTF)819820struct ulptx_idata {821__be32 cmd_more;822__be32 len;823};824825#define S_ULPTX_NSGE 0826#define M_ULPTX_NSGE 0xFFFF827#define V_ULPTX_NSGE(x) ((x) << S_ULPTX_NSGE)828829#define S_RX_DACK_MODE 29830#define M_RX_DACK_MODE 0x3831#define V_RX_DACK_MODE(x) ((x) << S_RX_DACK_MODE)832#define G_RX_DACK_MODE(x) (((x) >> S_RX_DACK_MODE) & M_RX_DACK_MODE)833834#define S_RX_DACK_CHANGE 31835#define V_RX_DACK_CHANGE(x) ((x) << S_RX_DACK_CHANGE)836#define F_RX_DACK_CHANGE V_RX_DACK_CHANGE(1U)837838#endif /* _T4FW_RI_API_H_ */839840841