mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-22 13:37:49 +07:00
94245f4ad9
To optimize NVME-oF READ IOPs, use a specialized WQE that combines the RDMA WRITE and SEND_INV WR chain submitted by the NVME-oF target driver. This reduces uP overhead per NVME-oF IO, and results in over 10% improvement in NVME-oF 4K READ IOPs. Signed-off-by: Potnuri Bharat Teja <bharat@chelsio.com> Signed-off-by: Steve Wise <swise@opengridcomputing.com> Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
831 lines
23 KiB
C
831 lines
23 KiB
C
/*
|
|
* Copyright (c) 2009-2010 Chelsio, Inc. All rights reserved.
|
|
*
|
|
* This software is available to you under a choice of one of two
|
|
* licenses. You may choose to be licensed under the terms of the GNU
|
|
* General Public License (GPL) Version 2, available from the file
|
|
* COPYING in the main directory of this source tree, or the
|
|
* OpenIB.org BSD license below:
|
|
*
|
|
* Redistribution and use in source and binary forms, with or
|
|
* without modification, are permitted provided that the following
|
|
* conditions are met:
|
|
*
|
|
* - Redistributions of source code must retain the above
|
|
* copyright notice, this list of conditions and the following
|
|
* disclaimer.
|
|
* - Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the following
|
|
* disclaimer in the documentation and/or other materials
|
|
* provided with the distribution.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
* SOFTWARE.
|
|
*/
|
|
#ifndef _T4FW_RI_API_H_
|
|
#define _T4FW_RI_API_H_
|
|
|
|
#include "t4fw_api.h"
|
|
|
|
enum fw_ri_wr_opcode {
|
|
FW_RI_RDMA_WRITE = 0x0, /* IETF RDMAP v1.0 ... */
|
|
FW_RI_READ_REQ = 0x1,
|
|
FW_RI_READ_RESP = 0x2,
|
|
FW_RI_SEND = 0x3,
|
|
FW_RI_SEND_WITH_INV = 0x4,
|
|
FW_RI_SEND_WITH_SE = 0x5,
|
|
FW_RI_SEND_WITH_SE_INV = 0x6,
|
|
FW_RI_TERMINATE = 0x7,
|
|
FW_RI_RDMA_INIT = 0x8, /* CHELSIO RI specific ... */
|
|
FW_RI_BIND_MW = 0x9,
|
|
FW_RI_FAST_REGISTER = 0xa,
|
|
FW_RI_LOCAL_INV = 0xb,
|
|
FW_RI_QP_MODIFY = 0xc,
|
|
FW_RI_BYPASS = 0xd,
|
|
FW_RI_RECEIVE = 0xe,
|
|
|
|
FW_RI_SGE_EC_CR_RETURN = 0xf,
|
|
FW_RI_WRITE_IMMEDIATE = FW_RI_RDMA_INIT
|
|
};
|
|
|
|
enum fw_ri_wr_flags {
|
|
FW_RI_COMPLETION_FLAG = 0x01,
|
|
FW_RI_NOTIFICATION_FLAG = 0x02,
|
|
FW_RI_SOLICITED_EVENT_FLAG = 0x04,
|
|
FW_RI_READ_FENCE_FLAG = 0x08,
|
|
FW_RI_LOCAL_FENCE_FLAG = 0x10,
|
|
FW_RI_RDMA_READ_INVALIDATE = 0x20,
|
|
FW_RI_RDMA_WRITE_WITH_IMMEDIATE = 0x40
|
|
};
|
|
|
|
enum fw_ri_mpa_attrs {
|
|
FW_RI_MPA_RX_MARKER_ENABLE = 0x01,
|
|
FW_RI_MPA_TX_MARKER_ENABLE = 0x02,
|
|
FW_RI_MPA_CRC_ENABLE = 0x04,
|
|
FW_RI_MPA_IETF_ENABLE = 0x08
|
|
};
|
|
|
|
enum fw_ri_qp_caps {
|
|
FW_RI_QP_RDMA_READ_ENABLE = 0x01,
|
|
FW_RI_QP_RDMA_WRITE_ENABLE = 0x02,
|
|
FW_RI_QP_BIND_ENABLE = 0x04,
|
|
FW_RI_QP_FAST_REGISTER_ENABLE = 0x08,
|
|
FW_RI_QP_STAG0_ENABLE = 0x10
|
|
};
|
|
|
|
enum fw_ri_addr_type {
|
|
FW_RI_ZERO_BASED_TO = 0x00,
|
|
FW_RI_VA_BASED_TO = 0x01
|
|
};
|
|
|
|
enum fw_ri_mem_perms {
|
|
FW_RI_MEM_ACCESS_REM_WRITE = 0x01,
|
|
FW_RI_MEM_ACCESS_REM_READ = 0x02,
|
|
FW_RI_MEM_ACCESS_REM = 0x03,
|
|
FW_RI_MEM_ACCESS_LOCAL_WRITE = 0x04,
|
|
FW_RI_MEM_ACCESS_LOCAL_READ = 0x08,
|
|
FW_RI_MEM_ACCESS_LOCAL = 0x0C
|
|
};
|
|
|
|
enum fw_ri_stag_type {
|
|
FW_RI_STAG_NSMR = 0x00,
|
|
FW_RI_STAG_SMR = 0x01,
|
|
FW_RI_STAG_MW = 0x02,
|
|
FW_RI_STAG_MW_RELAXED = 0x03
|
|
};
|
|
|
|
enum fw_ri_data_op {
|
|
FW_RI_DATA_IMMD = 0x81,
|
|
FW_RI_DATA_DSGL = 0x82,
|
|
FW_RI_DATA_ISGL = 0x83
|
|
};
|
|
|
|
enum fw_ri_sgl_depth {
|
|
FW_RI_SGL_DEPTH_MAX_SQ = 16,
|
|
FW_RI_SGL_DEPTH_MAX_RQ = 4
|
|
};
|
|
|
|
struct fw_ri_dsge_pair {
|
|
__be32 len[2];
|
|
__be64 addr[2];
|
|
};
|
|
|
|
struct fw_ri_dsgl {
|
|
__u8 op;
|
|
__u8 r1;
|
|
__be16 nsge;
|
|
__be32 len0;
|
|
__be64 addr0;
|
|
#ifndef C99_NOT_SUPPORTED
|
|
struct fw_ri_dsge_pair sge[0];
|
|
#endif
|
|
};
|
|
|
|
struct fw_ri_sge {
|
|
__be32 stag;
|
|
__be32 len;
|
|
__be64 to;
|
|
};
|
|
|
|
struct fw_ri_isgl {
|
|
__u8 op;
|
|
__u8 r1;
|
|
__be16 nsge;
|
|
__be32 r2;
|
|
#ifndef C99_NOT_SUPPORTED
|
|
struct fw_ri_sge sge[0];
|
|
#endif
|
|
};
|
|
|
|
struct fw_ri_immd {
|
|
__u8 op;
|
|
__u8 r1;
|
|
__be16 r2;
|
|
__be32 immdlen;
|
|
#ifndef C99_NOT_SUPPORTED
|
|
__u8 data[0];
|
|
#endif
|
|
};
|
|
|
|
struct fw_ri_tpte {
|
|
__be32 valid_to_pdid;
|
|
__be32 locread_to_qpid;
|
|
__be32 nosnoop_pbladdr;
|
|
__be32 len_lo;
|
|
__be32 va_hi;
|
|
__be32 va_lo_fbo;
|
|
__be32 dca_mwbcnt_pstag;
|
|
__be32 len_hi;
|
|
};
|
|
|
|
#define FW_RI_TPTE_VALID_S 31
|
|
#define FW_RI_TPTE_VALID_M 0x1
|
|
#define FW_RI_TPTE_VALID_V(x) ((x) << FW_RI_TPTE_VALID_S)
|
|
#define FW_RI_TPTE_VALID_G(x) \
|
|
(((x) >> FW_RI_TPTE_VALID_S) & FW_RI_TPTE_VALID_M)
|
|
#define FW_RI_TPTE_VALID_F FW_RI_TPTE_VALID_V(1U)
|
|
|
|
#define FW_RI_TPTE_STAGKEY_S 23
|
|
#define FW_RI_TPTE_STAGKEY_M 0xff
|
|
#define FW_RI_TPTE_STAGKEY_V(x) ((x) << FW_RI_TPTE_STAGKEY_S)
|
|
#define FW_RI_TPTE_STAGKEY_G(x) \
|
|
(((x) >> FW_RI_TPTE_STAGKEY_S) & FW_RI_TPTE_STAGKEY_M)
|
|
|
|
#define FW_RI_TPTE_STAGSTATE_S 22
|
|
#define FW_RI_TPTE_STAGSTATE_M 0x1
|
|
#define FW_RI_TPTE_STAGSTATE_V(x) ((x) << FW_RI_TPTE_STAGSTATE_S)
|
|
#define FW_RI_TPTE_STAGSTATE_G(x) \
|
|
(((x) >> FW_RI_TPTE_STAGSTATE_S) & FW_RI_TPTE_STAGSTATE_M)
|
|
#define FW_RI_TPTE_STAGSTATE_F FW_RI_TPTE_STAGSTATE_V(1U)
|
|
|
|
#define FW_RI_TPTE_STAGTYPE_S 20
|
|
#define FW_RI_TPTE_STAGTYPE_M 0x3
|
|
#define FW_RI_TPTE_STAGTYPE_V(x) ((x) << FW_RI_TPTE_STAGTYPE_S)
|
|
#define FW_RI_TPTE_STAGTYPE_G(x) \
|
|
(((x) >> FW_RI_TPTE_STAGTYPE_S) & FW_RI_TPTE_STAGTYPE_M)
|
|
|
|
#define FW_RI_TPTE_PDID_S 0
|
|
#define FW_RI_TPTE_PDID_M 0xfffff
|
|
#define FW_RI_TPTE_PDID_V(x) ((x) << FW_RI_TPTE_PDID_S)
|
|
#define FW_RI_TPTE_PDID_G(x) \
|
|
(((x) >> FW_RI_TPTE_PDID_S) & FW_RI_TPTE_PDID_M)
|
|
|
|
#define FW_RI_TPTE_PERM_S 28
|
|
#define FW_RI_TPTE_PERM_M 0xf
|
|
#define FW_RI_TPTE_PERM_V(x) ((x) << FW_RI_TPTE_PERM_S)
|
|
#define FW_RI_TPTE_PERM_G(x) \
|
|
(((x) >> FW_RI_TPTE_PERM_S) & FW_RI_TPTE_PERM_M)
|
|
|
|
#define FW_RI_TPTE_REMINVDIS_S 27
|
|
#define FW_RI_TPTE_REMINVDIS_M 0x1
|
|
#define FW_RI_TPTE_REMINVDIS_V(x) ((x) << FW_RI_TPTE_REMINVDIS_S)
|
|
#define FW_RI_TPTE_REMINVDIS_G(x) \
|
|
(((x) >> FW_RI_TPTE_REMINVDIS_S) & FW_RI_TPTE_REMINVDIS_M)
|
|
#define FW_RI_TPTE_REMINVDIS_F FW_RI_TPTE_REMINVDIS_V(1U)
|
|
|
|
#define FW_RI_TPTE_ADDRTYPE_S 26
|
|
#define FW_RI_TPTE_ADDRTYPE_M 1
|
|
#define FW_RI_TPTE_ADDRTYPE_V(x) ((x) << FW_RI_TPTE_ADDRTYPE_S)
|
|
#define FW_RI_TPTE_ADDRTYPE_G(x) \
|
|
(((x) >> FW_RI_TPTE_ADDRTYPE_S) & FW_RI_TPTE_ADDRTYPE_M)
|
|
#define FW_RI_TPTE_ADDRTYPE_F FW_RI_TPTE_ADDRTYPE_V(1U)
|
|
|
|
#define FW_RI_TPTE_MWBINDEN_S 25
|
|
#define FW_RI_TPTE_MWBINDEN_M 0x1
|
|
#define FW_RI_TPTE_MWBINDEN_V(x) ((x) << FW_RI_TPTE_MWBINDEN_S)
|
|
#define FW_RI_TPTE_MWBINDEN_G(x) \
|
|
(((x) >> FW_RI_TPTE_MWBINDEN_S) & FW_RI_TPTE_MWBINDEN_M)
|
|
#define FW_RI_TPTE_MWBINDEN_F FW_RI_TPTE_MWBINDEN_V(1U)
|
|
|
|
#define FW_RI_TPTE_PS_S 20
|
|
#define FW_RI_TPTE_PS_M 0x1f
|
|
#define FW_RI_TPTE_PS_V(x) ((x) << FW_RI_TPTE_PS_S)
|
|
#define FW_RI_TPTE_PS_G(x) \
|
|
(((x) >> FW_RI_TPTE_PS_S) & FW_RI_TPTE_PS_M)
|
|
|
|
#define FW_RI_TPTE_QPID_S 0
|
|
#define FW_RI_TPTE_QPID_M 0xfffff
|
|
#define FW_RI_TPTE_QPID_V(x) ((x) << FW_RI_TPTE_QPID_S)
|
|
#define FW_RI_TPTE_QPID_G(x) \
|
|
(((x) >> FW_RI_TPTE_QPID_S) & FW_RI_TPTE_QPID_M)
|
|
|
|
#define FW_RI_TPTE_NOSNOOP_S 30
|
|
#define FW_RI_TPTE_NOSNOOP_M 0x1
|
|
#define FW_RI_TPTE_NOSNOOP_V(x) ((x) << FW_RI_TPTE_NOSNOOP_S)
|
|
#define FW_RI_TPTE_NOSNOOP_G(x) \
|
|
(((x) >> FW_RI_TPTE_NOSNOOP_S) & FW_RI_TPTE_NOSNOOP_M)
|
|
#define FW_RI_TPTE_NOSNOOP_F FW_RI_TPTE_NOSNOOP_V(1U)
|
|
|
|
#define FW_RI_TPTE_PBLADDR_S 0
|
|
#define FW_RI_TPTE_PBLADDR_M 0x1fffffff
|
|
#define FW_RI_TPTE_PBLADDR_V(x) ((x) << FW_RI_TPTE_PBLADDR_S)
|
|
#define FW_RI_TPTE_PBLADDR_G(x) \
|
|
(((x) >> FW_RI_TPTE_PBLADDR_S) & FW_RI_TPTE_PBLADDR_M)
|
|
|
|
#define FW_RI_TPTE_DCA_S 24
|
|
#define FW_RI_TPTE_DCA_M 0x1f
|
|
#define FW_RI_TPTE_DCA_V(x) ((x) << FW_RI_TPTE_DCA_S)
|
|
#define FW_RI_TPTE_DCA_G(x) \
|
|
(((x) >> FW_RI_TPTE_DCA_S) & FW_RI_TPTE_DCA_M)
|
|
|
|
#define FW_RI_TPTE_MWBCNT_PSTAG_S 0
|
|
#define FW_RI_TPTE_MWBCNT_PSTAG_M 0xffffff
|
|
#define FW_RI_TPTE_MWBCNT_PSTAT_V(x) \
|
|
((x) << FW_RI_TPTE_MWBCNT_PSTAG_S)
|
|
#define FW_RI_TPTE_MWBCNT_PSTAG_G(x) \
|
|
(((x) >> FW_RI_TPTE_MWBCNT_PSTAG_S) & FW_RI_TPTE_MWBCNT_PSTAG_M)
|
|
|
|
enum fw_ri_res_type {
|
|
FW_RI_RES_TYPE_SQ,
|
|
FW_RI_RES_TYPE_RQ,
|
|
FW_RI_RES_TYPE_CQ,
|
|
FW_RI_RES_TYPE_SRQ,
|
|
};
|
|
|
|
enum fw_ri_res_op {
|
|
FW_RI_RES_OP_WRITE,
|
|
FW_RI_RES_OP_RESET,
|
|
};
|
|
|
|
struct fw_ri_res {
|
|
union fw_ri_restype {
|
|
struct fw_ri_res_sqrq {
|
|
__u8 restype;
|
|
__u8 op;
|
|
__be16 r3;
|
|
__be32 eqid;
|
|
__be32 r4[2];
|
|
__be32 fetchszm_to_iqid;
|
|
__be32 dcaen_to_eqsize;
|
|
__be64 eqaddr;
|
|
} sqrq;
|
|
struct fw_ri_res_cq {
|
|
__u8 restype;
|
|
__u8 op;
|
|
__be16 r3;
|
|
__be32 iqid;
|
|
__be32 r4[2];
|
|
__be32 iqandst_to_iqandstindex;
|
|
__be16 iqdroprss_to_iqesize;
|
|
__be16 iqsize;
|
|
__be64 iqaddr;
|
|
__be32 iqns_iqro;
|
|
__be32 r6_lo;
|
|
__be64 r7;
|
|
} cq;
|
|
struct fw_ri_res_srq {
|
|
__u8 restype;
|
|
__u8 op;
|
|
__be16 r3;
|
|
__be32 eqid;
|
|
__be32 r4[2];
|
|
__be32 fetchszm_to_iqid;
|
|
__be32 dcaen_to_eqsize;
|
|
__be64 eqaddr;
|
|
__be32 srqid;
|
|
__be32 pdid;
|
|
__be32 hwsrqsize;
|
|
__be32 hwsrqaddr;
|
|
} srq;
|
|
} u;
|
|
};
|
|
|
|
struct fw_ri_res_wr {
|
|
__be32 op_nres;
|
|
__be32 len16_pkd;
|
|
__u64 cookie;
|
|
#ifndef C99_NOT_SUPPORTED
|
|
struct fw_ri_res res[0];
|
|
#endif
|
|
};
|
|
|
|
#define FW_RI_RES_WR_NRES_S 0
|
|
#define FW_RI_RES_WR_NRES_M 0xff
|
|
#define FW_RI_RES_WR_NRES_V(x) ((x) << FW_RI_RES_WR_NRES_S)
|
|
#define FW_RI_RES_WR_NRES_G(x) \
|
|
(((x) >> FW_RI_RES_WR_NRES_S) & FW_RI_RES_WR_NRES_M)
|
|
|
|
#define FW_RI_RES_WR_FETCHSZM_S 26
|
|
#define FW_RI_RES_WR_FETCHSZM_M 0x1
|
|
#define FW_RI_RES_WR_FETCHSZM_V(x) ((x) << FW_RI_RES_WR_FETCHSZM_S)
|
|
#define FW_RI_RES_WR_FETCHSZM_G(x) \
|
|
(((x) >> FW_RI_RES_WR_FETCHSZM_S) & FW_RI_RES_WR_FETCHSZM_M)
|
|
#define FW_RI_RES_WR_FETCHSZM_F FW_RI_RES_WR_FETCHSZM_V(1U)
|
|
|
|
#define FW_RI_RES_WR_STATUSPGNS_S 25
|
|
#define FW_RI_RES_WR_STATUSPGNS_M 0x1
|
|
#define FW_RI_RES_WR_STATUSPGNS_V(x) ((x) << FW_RI_RES_WR_STATUSPGNS_S)
|
|
#define FW_RI_RES_WR_STATUSPGNS_G(x) \
|
|
(((x) >> FW_RI_RES_WR_STATUSPGNS_S) & FW_RI_RES_WR_STATUSPGNS_M)
|
|
#define FW_RI_RES_WR_STATUSPGNS_F FW_RI_RES_WR_STATUSPGNS_V(1U)
|
|
|
|
#define FW_RI_RES_WR_STATUSPGRO_S 24
|
|
#define FW_RI_RES_WR_STATUSPGRO_M 0x1
|
|
#define FW_RI_RES_WR_STATUSPGRO_V(x) ((x) << FW_RI_RES_WR_STATUSPGRO_S)
|
|
#define FW_RI_RES_WR_STATUSPGRO_G(x) \
|
|
(((x) >> FW_RI_RES_WR_STATUSPGRO_S) & FW_RI_RES_WR_STATUSPGRO_M)
|
|
#define FW_RI_RES_WR_STATUSPGRO_F FW_RI_RES_WR_STATUSPGRO_V(1U)
|
|
|
|
#define FW_RI_RES_WR_FETCHNS_S 23
|
|
#define FW_RI_RES_WR_FETCHNS_M 0x1
|
|
#define FW_RI_RES_WR_FETCHNS_V(x) ((x) << FW_RI_RES_WR_FETCHNS_S)
|
|
#define FW_RI_RES_WR_FETCHNS_G(x) \
|
|
(((x) >> FW_RI_RES_WR_FETCHNS_S) & FW_RI_RES_WR_FETCHNS_M)
|
|
#define FW_RI_RES_WR_FETCHNS_F FW_RI_RES_WR_FETCHNS_V(1U)
|
|
|
|
#define FW_RI_RES_WR_FETCHRO_S 22
|
|
#define FW_RI_RES_WR_FETCHRO_M 0x1
|
|
#define FW_RI_RES_WR_FETCHRO_V(x) ((x) << FW_RI_RES_WR_FETCHRO_S)
|
|
#define FW_RI_RES_WR_FETCHRO_G(x) \
|
|
(((x) >> FW_RI_RES_WR_FETCHRO_S) & FW_RI_RES_WR_FETCHRO_M)
|
|
#define FW_RI_RES_WR_FETCHRO_F FW_RI_RES_WR_FETCHRO_V(1U)
|
|
|
|
#define FW_RI_RES_WR_HOSTFCMODE_S 20
|
|
#define FW_RI_RES_WR_HOSTFCMODE_M 0x3
|
|
#define FW_RI_RES_WR_HOSTFCMODE_V(x) ((x) << FW_RI_RES_WR_HOSTFCMODE_S)
|
|
#define FW_RI_RES_WR_HOSTFCMODE_G(x) \
|
|
(((x) >> FW_RI_RES_WR_HOSTFCMODE_S) & FW_RI_RES_WR_HOSTFCMODE_M)
|
|
|
|
#define FW_RI_RES_WR_CPRIO_S 19
|
|
#define FW_RI_RES_WR_CPRIO_M 0x1
|
|
#define FW_RI_RES_WR_CPRIO_V(x) ((x) << FW_RI_RES_WR_CPRIO_S)
|
|
#define FW_RI_RES_WR_CPRIO_G(x) \
|
|
(((x) >> FW_RI_RES_WR_CPRIO_S) & FW_RI_RES_WR_CPRIO_M)
|
|
#define FW_RI_RES_WR_CPRIO_F FW_RI_RES_WR_CPRIO_V(1U)
|
|
|
|
#define FW_RI_RES_WR_ONCHIP_S 18
|
|
#define FW_RI_RES_WR_ONCHIP_M 0x1
|
|
#define FW_RI_RES_WR_ONCHIP_V(x) ((x) << FW_RI_RES_WR_ONCHIP_S)
|
|
#define FW_RI_RES_WR_ONCHIP_G(x) \
|
|
(((x) >> FW_RI_RES_WR_ONCHIP_S) & FW_RI_RES_WR_ONCHIP_M)
|
|
#define FW_RI_RES_WR_ONCHIP_F FW_RI_RES_WR_ONCHIP_V(1U)
|
|
|
|
#define FW_RI_RES_WR_PCIECHN_S 16
|
|
#define FW_RI_RES_WR_PCIECHN_M 0x3
|
|
#define FW_RI_RES_WR_PCIECHN_V(x) ((x) << FW_RI_RES_WR_PCIECHN_S)
|
|
#define FW_RI_RES_WR_PCIECHN_G(x) \
|
|
(((x) >> FW_RI_RES_WR_PCIECHN_S) & FW_RI_RES_WR_PCIECHN_M)
|
|
|
|
#define FW_RI_RES_WR_IQID_S 0
|
|
#define FW_RI_RES_WR_IQID_M 0xffff
|
|
#define FW_RI_RES_WR_IQID_V(x) ((x) << FW_RI_RES_WR_IQID_S)
|
|
#define FW_RI_RES_WR_IQID_G(x) \
|
|
(((x) >> FW_RI_RES_WR_IQID_S) & FW_RI_RES_WR_IQID_M)
|
|
|
|
#define FW_RI_RES_WR_DCAEN_S 31
|
|
#define FW_RI_RES_WR_DCAEN_M 0x1
|
|
#define FW_RI_RES_WR_DCAEN_V(x) ((x) << FW_RI_RES_WR_DCAEN_S)
|
|
#define FW_RI_RES_WR_DCAEN_G(x) \
|
|
(((x) >> FW_RI_RES_WR_DCAEN_S) & FW_RI_RES_WR_DCAEN_M)
|
|
#define FW_RI_RES_WR_DCAEN_F FW_RI_RES_WR_DCAEN_V(1U)
|
|
|
|
#define FW_RI_RES_WR_DCACPU_S 26
|
|
#define FW_RI_RES_WR_DCACPU_M 0x1f
|
|
#define FW_RI_RES_WR_DCACPU_V(x) ((x) << FW_RI_RES_WR_DCACPU_S)
|
|
#define FW_RI_RES_WR_DCACPU_G(x) \
|
|
(((x) >> FW_RI_RES_WR_DCACPU_S) & FW_RI_RES_WR_DCACPU_M)
|
|
|
|
#define FW_RI_RES_WR_FBMIN_S 23
|
|
#define FW_RI_RES_WR_FBMIN_M 0x7
|
|
#define FW_RI_RES_WR_FBMIN_V(x) ((x) << FW_RI_RES_WR_FBMIN_S)
|
|
#define FW_RI_RES_WR_FBMIN_G(x) \
|
|
(((x) >> FW_RI_RES_WR_FBMIN_S) & FW_RI_RES_WR_FBMIN_M)
|
|
|
|
#define FW_RI_RES_WR_FBMAX_S 20
|
|
#define FW_RI_RES_WR_FBMAX_M 0x7
|
|
#define FW_RI_RES_WR_FBMAX_V(x) ((x) << FW_RI_RES_WR_FBMAX_S)
|
|
#define FW_RI_RES_WR_FBMAX_G(x) \
|
|
(((x) >> FW_RI_RES_WR_FBMAX_S) & FW_RI_RES_WR_FBMAX_M)
|
|
|
|
#define FW_RI_RES_WR_CIDXFTHRESHO_S 19
|
|
#define FW_RI_RES_WR_CIDXFTHRESHO_M 0x1
|
|
#define FW_RI_RES_WR_CIDXFTHRESHO_V(x) ((x) << FW_RI_RES_WR_CIDXFTHRESHO_S)
|
|
#define FW_RI_RES_WR_CIDXFTHRESHO_G(x) \
|
|
(((x) >> FW_RI_RES_WR_CIDXFTHRESHO_S) & FW_RI_RES_WR_CIDXFTHRESHO_M)
|
|
#define FW_RI_RES_WR_CIDXFTHRESHO_F FW_RI_RES_WR_CIDXFTHRESHO_V(1U)
|
|
|
|
#define FW_RI_RES_WR_CIDXFTHRESH_S 16
|
|
#define FW_RI_RES_WR_CIDXFTHRESH_M 0x7
|
|
#define FW_RI_RES_WR_CIDXFTHRESH_V(x) ((x) << FW_RI_RES_WR_CIDXFTHRESH_S)
|
|
#define FW_RI_RES_WR_CIDXFTHRESH_G(x) \
|
|
(((x) >> FW_RI_RES_WR_CIDXFTHRESH_S) & FW_RI_RES_WR_CIDXFTHRESH_M)
|
|
|
|
#define FW_RI_RES_WR_EQSIZE_S 0
|
|
#define FW_RI_RES_WR_EQSIZE_M 0xffff
|
|
#define FW_RI_RES_WR_EQSIZE_V(x) ((x) << FW_RI_RES_WR_EQSIZE_S)
|
|
#define FW_RI_RES_WR_EQSIZE_G(x) \
|
|
(((x) >> FW_RI_RES_WR_EQSIZE_S) & FW_RI_RES_WR_EQSIZE_M)
|
|
|
|
#define FW_RI_RES_WR_IQANDST_S 15
|
|
#define FW_RI_RES_WR_IQANDST_M 0x1
|
|
#define FW_RI_RES_WR_IQANDST_V(x) ((x) << FW_RI_RES_WR_IQANDST_S)
|
|
#define FW_RI_RES_WR_IQANDST_G(x) \
|
|
(((x) >> FW_RI_RES_WR_IQANDST_S) & FW_RI_RES_WR_IQANDST_M)
|
|
#define FW_RI_RES_WR_IQANDST_F FW_RI_RES_WR_IQANDST_V(1U)
|
|
|
|
#define FW_RI_RES_WR_IQANUS_S 14
|
|
#define FW_RI_RES_WR_IQANUS_M 0x1
|
|
#define FW_RI_RES_WR_IQANUS_V(x) ((x) << FW_RI_RES_WR_IQANUS_S)
|
|
#define FW_RI_RES_WR_IQANUS_G(x) \
|
|
(((x) >> FW_RI_RES_WR_IQANUS_S) & FW_RI_RES_WR_IQANUS_M)
|
|
#define FW_RI_RES_WR_IQANUS_F FW_RI_RES_WR_IQANUS_V(1U)
|
|
|
|
#define FW_RI_RES_WR_IQANUD_S 12
|
|
#define FW_RI_RES_WR_IQANUD_M 0x3
|
|
#define FW_RI_RES_WR_IQANUD_V(x) ((x) << FW_RI_RES_WR_IQANUD_S)
|
|
#define FW_RI_RES_WR_IQANUD_G(x) \
|
|
(((x) >> FW_RI_RES_WR_IQANUD_S) & FW_RI_RES_WR_IQANUD_M)
|
|
|
|
#define FW_RI_RES_WR_IQANDSTINDEX_S 0
|
|
#define FW_RI_RES_WR_IQANDSTINDEX_M 0xfff
|
|
#define FW_RI_RES_WR_IQANDSTINDEX_V(x) ((x) << FW_RI_RES_WR_IQANDSTINDEX_S)
|
|
#define FW_RI_RES_WR_IQANDSTINDEX_G(x) \
|
|
(((x) >> FW_RI_RES_WR_IQANDSTINDEX_S) & FW_RI_RES_WR_IQANDSTINDEX_M)
|
|
|
|
#define FW_RI_RES_WR_IQDROPRSS_S 15
|
|
#define FW_RI_RES_WR_IQDROPRSS_M 0x1
|
|
#define FW_RI_RES_WR_IQDROPRSS_V(x) ((x) << FW_RI_RES_WR_IQDROPRSS_S)
|
|
#define FW_RI_RES_WR_IQDROPRSS_G(x) \
|
|
(((x) >> FW_RI_RES_WR_IQDROPRSS_S) & FW_RI_RES_WR_IQDROPRSS_M)
|
|
#define FW_RI_RES_WR_IQDROPRSS_F FW_RI_RES_WR_IQDROPRSS_V(1U)
|
|
|
|
#define FW_RI_RES_WR_IQGTSMODE_S 14
|
|
#define FW_RI_RES_WR_IQGTSMODE_M 0x1
|
|
#define FW_RI_RES_WR_IQGTSMODE_V(x) ((x) << FW_RI_RES_WR_IQGTSMODE_S)
|
|
#define FW_RI_RES_WR_IQGTSMODE_G(x) \
|
|
(((x) >> FW_RI_RES_WR_IQGTSMODE_S) & FW_RI_RES_WR_IQGTSMODE_M)
|
|
#define FW_RI_RES_WR_IQGTSMODE_F FW_RI_RES_WR_IQGTSMODE_V(1U)
|
|
|
|
#define FW_RI_RES_WR_IQPCIECH_S 12
|
|
#define FW_RI_RES_WR_IQPCIECH_M 0x3
|
|
#define FW_RI_RES_WR_IQPCIECH_V(x) ((x) << FW_RI_RES_WR_IQPCIECH_S)
|
|
#define FW_RI_RES_WR_IQPCIECH_G(x) \
|
|
(((x) >> FW_RI_RES_WR_IQPCIECH_S) & FW_RI_RES_WR_IQPCIECH_M)
|
|
|
|
#define FW_RI_RES_WR_IQDCAEN_S 11
|
|
#define FW_RI_RES_WR_IQDCAEN_M 0x1
|
|
#define FW_RI_RES_WR_IQDCAEN_V(x) ((x) << FW_RI_RES_WR_IQDCAEN_S)
|
|
#define FW_RI_RES_WR_IQDCAEN_G(x) \
|
|
(((x) >> FW_RI_RES_WR_IQDCAEN_S) & FW_RI_RES_WR_IQDCAEN_M)
|
|
#define FW_RI_RES_WR_IQDCAEN_F FW_RI_RES_WR_IQDCAEN_V(1U)
|
|
|
|
#define FW_RI_RES_WR_IQDCACPU_S 6
|
|
#define FW_RI_RES_WR_IQDCACPU_M 0x1f
|
|
#define FW_RI_RES_WR_IQDCACPU_V(x) ((x) << FW_RI_RES_WR_IQDCACPU_S)
|
|
#define FW_RI_RES_WR_IQDCACPU_G(x) \
|
|
(((x) >> FW_RI_RES_WR_IQDCACPU_S) & FW_RI_RES_WR_IQDCACPU_M)
|
|
|
|
#define FW_RI_RES_WR_IQINTCNTTHRESH_S 4
|
|
#define FW_RI_RES_WR_IQINTCNTTHRESH_M 0x3
|
|
#define FW_RI_RES_WR_IQINTCNTTHRESH_V(x) \
|
|
((x) << FW_RI_RES_WR_IQINTCNTTHRESH_S)
|
|
#define FW_RI_RES_WR_IQINTCNTTHRESH_G(x) \
|
|
(((x) >> FW_RI_RES_WR_IQINTCNTTHRESH_S) & FW_RI_RES_WR_IQINTCNTTHRESH_M)
|
|
|
|
#define FW_RI_RES_WR_IQO_S 3
|
|
#define FW_RI_RES_WR_IQO_M 0x1
|
|
#define FW_RI_RES_WR_IQO_V(x) ((x) << FW_RI_RES_WR_IQO_S)
|
|
#define FW_RI_RES_WR_IQO_G(x) \
|
|
(((x) >> FW_RI_RES_WR_IQO_S) & FW_RI_RES_WR_IQO_M)
|
|
#define FW_RI_RES_WR_IQO_F FW_RI_RES_WR_IQO_V(1U)
|
|
|
|
#define FW_RI_RES_WR_IQCPRIO_S 2
|
|
#define FW_RI_RES_WR_IQCPRIO_M 0x1
|
|
#define FW_RI_RES_WR_IQCPRIO_V(x) ((x) << FW_RI_RES_WR_IQCPRIO_S)
|
|
#define FW_RI_RES_WR_IQCPRIO_G(x) \
|
|
(((x) >> FW_RI_RES_WR_IQCPRIO_S) & FW_RI_RES_WR_IQCPRIO_M)
|
|
#define FW_RI_RES_WR_IQCPRIO_F FW_RI_RES_WR_IQCPRIO_V(1U)
|
|
|
|
#define FW_RI_RES_WR_IQESIZE_S 0
|
|
#define FW_RI_RES_WR_IQESIZE_M 0x3
|
|
#define FW_RI_RES_WR_IQESIZE_V(x) ((x) << FW_RI_RES_WR_IQESIZE_S)
|
|
#define FW_RI_RES_WR_IQESIZE_G(x) \
|
|
(((x) >> FW_RI_RES_WR_IQESIZE_S) & FW_RI_RES_WR_IQESIZE_M)
|
|
|
|
#define FW_RI_RES_WR_IQNS_S 31
|
|
#define FW_RI_RES_WR_IQNS_M 0x1
|
|
#define FW_RI_RES_WR_IQNS_V(x) ((x) << FW_RI_RES_WR_IQNS_S)
|
|
#define FW_RI_RES_WR_IQNS_G(x) \
|
|
(((x) >> FW_RI_RES_WR_IQNS_S) & FW_RI_RES_WR_IQNS_M)
|
|
#define FW_RI_RES_WR_IQNS_F FW_RI_RES_WR_IQNS_V(1U)
|
|
|
|
#define FW_RI_RES_WR_IQRO_S 30
|
|
#define FW_RI_RES_WR_IQRO_M 0x1
|
|
#define FW_RI_RES_WR_IQRO_V(x) ((x) << FW_RI_RES_WR_IQRO_S)
|
|
#define FW_RI_RES_WR_IQRO_G(x) \
|
|
(((x) >> FW_RI_RES_WR_IQRO_S) & FW_RI_RES_WR_IQRO_M)
|
|
#define FW_RI_RES_WR_IQRO_F FW_RI_RES_WR_IQRO_V(1U)
|
|
|
|
struct fw_ri_rdma_write_wr {
|
|
__u8 opcode;
|
|
__u8 flags;
|
|
__u16 wrid;
|
|
__u8 r1[3];
|
|
__u8 len16;
|
|
/*
|
|
* Use union for immediate data to be consistent with stack's 32 bit
|
|
* data and iWARP spec's 64 bit data.
|
|
*/
|
|
union {
|
|
struct {
|
|
__be32 imm_data32;
|
|
u32 reserved;
|
|
} ib_imm_data;
|
|
__be64 imm_data64;
|
|
} iw_imm_data;
|
|
__be32 plen;
|
|
__be32 stag_sink;
|
|
__be64 to_sink;
|
|
#ifndef C99_NOT_SUPPORTED
|
|
union {
|
|
struct fw_ri_immd immd_src[0];
|
|
struct fw_ri_isgl isgl_src[0];
|
|
} u;
|
|
#endif
|
|
};
|
|
|
|
struct fw_ri_send_wr {
|
|
__u8 opcode;
|
|
__u8 flags;
|
|
__u16 wrid;
|
|
__u8 r1[3];
|
|
__u8 len16;
|
|
__be32 sendop_pkd;
|
|
__be32 stag_inv;
|
|
__be32 plen;
|
|
__be32 r3;
|
|
__be64 r4;
|
|
#ifndef C99_NOT_SUPPORTED
|
|
union {
|
|
struct fw_ri_immd immd_src[0];
|
|
struct fw_ri_isgl isgl_src[0];
|
|
} u;
|
|
#endif
|
|
};
|
|
|
|
#define FW_RI_SEND_WR_SENDOP_S 0
|
|
#define FW_RI_SEND_WR_SENDOP_M 0xf
|
|
#define FW_RI_SEND_WR_SENDOP_V(x) ((x) << FW_RI_SEND_WR_SENDOP_S)
|
|
#define FW_RI_SEND_WR_SENDOP_G(x) \
|
|
(((x) >> FW_RI_SEND_WR_SENDOP_S) & FW_RI_SEND_WR_SENDOP_M)
|
|
|
|
struct fw_ri_rdma_write_cmpl_wr {
|
|
__u8 opcode;
|
|
__u8 flags;
|
|
__u16 wrid;
|
|
__u8 r1[3];
|
|
__u8 len16;
|
|
__u8 r2;
|
|
__u8 flags_send;
|
|
__u16 wrid_send;
|
|
__be32 stag_inv;
|
|
__be32 plen;
|
|
__be32 stag_sink;
|
|
__be64 to_sink;
|
|
union fw_ri_cmpl {
|
|
struct fw_ri_immd_cmpl {
|
|
__u8 op;
|
|
__u8 r1[6];
|
|
__u8 immdlen;
|
|
__u8 data[16];
|
|
} immd_src;
|
|
struct fw_ri_isgl isgl_src;
|
|
} u_cmpl;
|
|
__be64 r3;
|
|
#ifndef C99_NOT_SUPPORTED
|
|
union fw_ri_write {
|
|
struct fw_ri_immd immd_src[0];
|
|
struct fw_ri_isgl isgl_src[0];
|
|
} u;
|
|
#endif
|
|
};
|
|
|
|
struct fw_ri_rdma_read_wr {
|
|
__u8 opcode;
|
|
__u8 flags;
|
|
__u16 wrid;
|
|
__u8 r1[3];
|
|
__u8 len16;
|
|
__be64 r2;
|
|
__be32 stag_sink;
|
|
__be32 to_sink_hi;
|
|
__be32 to_sink_lo;
|
|
__be32 plen;
|
|
__be32 stag_src;
|
|
__be32 to_src_hi;
|
|
__be32 to_src_lo;
|
|
__be32 r5;
|
|
};
|
|
|
|
struct fw_ri_recv_wr {
|
|
__u8 opcode;
|
|
__u8 r1;
|
|
__u16 wrid;
|
|
__u8 r2[3];
|
|
__u8 len16;
|
|
struct fw_ri_isgl isgl;
|
|
};
|
|
|
|
struct fw_ri_bind_mw_wr {
|
|
__u8 opcode;
|
|
__u8 flags;
|
|
__u16 wrid;
|
|
__u8 r1[3];
|
|
__u8 len16;
|
|
__u8 qpbinde_to_dcacpu;
|
|
__u8 pgsz_shift;
|
|
__u8 addr_type;
|
|
__u8 mem_perms;
|
|
__be32 stag_mr;
|
|
__be32 stag_mw;
|
|
__be32 r3;
|
|
__be64 len_mw;
|
|
__be64 va_fbo;
|
|
__be64 r4;
|
|
};
|
|
|
|
#define FW_RI_BIND_MW_WR_QPBINDE_S 6
|
|
#define FW_RI_BIND_MW_WR_QPBINDE_M 0x1
|
|
#define FW_RI_BIND_MW_WR_QPBINDE_V(x) ((x) << FW_RI_BIND_MW_WR_QPBINDE_S)
|
|
#define FW_RI_BIND_MW_WR_QPBINDE_G(x) \
|
|
(((x) >> FW_RI_BIND_MW_WR_QPBINDE_S) & FW_RI_BIND_MW_WR_QPBINDE_M)
|
|
#define FW_RI_BIND_MW_WR_QPBINDE_F FW_RI_BIND_MW_WR_QPBINDE_V(1U)
|
|
|
|
#define FW_RI_BIND_MW_WR_NS_S 5
|
|
#define FW_RI_BIND_MW_WR_NS_M 0x1
|
|
#define FW_RI_BIND_MW_WR_NS_V(x) ((x) << FW_RI_BIND_MW_WR_NS_S)
|
|
#define FW_RI_BIND_MW_WR_NS_G(x) \
|
|
(((x) >> FW_RI_BIND_MW_WR_NS_S) & FW_RI_BIND_MW_WR_NS_M)
|
|
#define FW_RI_BIND_MW_WR_NS_F FW_RI_BIND_MW_WR_NS_V(1U)
|
|
|
|
#define FW_RI_BIND_MW_WR_DCACPU_S 0
|
|
#define FW_RI_BIND_MW_WR_DCACPU_M 0x1f
|
|
#define FW_RI_BIND_MW_WR_DCACPU_V(x) ((x) << FW_RI_BIND_MW_WR_DCACPU_S)
|
|
#define FW_RI_BIND_MW_WR_DCACPU_G(x) \
|
|
(((x) >> FW_RI_BIND_MW_WR_DCACPU_S) & FW_RI_BIND_MW_WR_DCACPU_M)
|
|
|
|
struct fw_ri_fr_nsmr_wr {
|
|
__u8 opcode;
|
|
__u8 flags;
|
|
__u16 wrid;
|
|
__u8 r1[3];
|
|
__u8 len16;
|
|
__u8 qpbinde_to_dcacpu;
|
|
__u8 pgsz_shift;
|
|
__u8 addr_type;
|
|
__u8 mem_perms;
|
|
__be32 stag;
|
|
__be32 len_hi;
|
|
__be32 len_lo;
|
|
__be32 va_hi;
|
|
__be32 va_lo_fbo;
|
|
};
|
|
|
|
#define FW_RI_FR_NSMR_WR_QPBINDE_S 6
|
|
#define FW_RI_FR_NSMR_WR_QPBINDE_M 0x1
|
|
#define FW_RI_FR_NSMR_WR_QPBINDE_V(x) ((x) << FW_RI_FR_NSMR_WR_QPBINDE_S)
|
|
#define FW_RI_FR_NSMR_WR_QPBINDE_G(x) \
|
|
(((x) >> FW_RI_FR_NSMR_WR_QPBINDE_S) & FW_RI_FR_NSMR_WR_QPBINDE_M)
|
|
#define FW_RI_FR_NSMR_WR_QPBINDE_F FW_RI_FR_NSMR_WR_QPBINDE_V(1U)
|
|
|
|
#define FW_RI_FR_NSMR_WR_NS_S 5
|
|
#define FW_RI_FR_NSMR_WR_NS_M 0x1
|
|
#define FW_RI_FR_NSMR_WR_NS_V(x) ((x) << FW_RI_FR_NSMR_WR_NS_S)
|
|
#define FW_RI_FR_NSMR_WR_NS_G(x) \
|
|
(((x) >> FW_RI_FR_NSMR_WR_NS_S) & FW_RI_FR_NSMR_WR_NS_M)
|
|
#define FW_RI_FR_NSMR_WR_NS_F FW_RI_FR_NSMR_WR_NS_V(1U)
|
|
|
|
#define FW_RI_FR_NSMR_WR_DCACPU_S 0
|
|
#define FW_RI_FR_NSMR_WR_DCACPU_M 0x1f
|
|
#define FW_RI_FR_NSMR_WR_DCACPU_V(x) ((x) << FW_RI_FR_NSMR_WR_DCACPU_S)
|
|
#define FW_RI_FR_NSMR_WR_DCACPU_G(x) \
|
|
(((x) >> FW_RI_FR_NSMR_WR_DCACPU_S) & FW_RI_FR_NSMR_WR_DCACPU_M)
|
|
|
|
struct fw_ri_fr_nsmr_tpte_wr {
|
|
__u8 opcode;
|
|
__u8 flags;
|
|
__u16 wrid;
|
|
__u8 r1[3];
|
|
__u8 len16;
|
|
__be32 r2;
|
|
__be32 stag;
|
|
struct fw_ri_tpte tpte;
|
|
__u64 pbl[2];
|
|
};
|
|
|
|
struct fw_ri_inv_lstag_wr {
|
|
__u8 opcode;
|
|
__u8 flags;
|
|
__u16 wrid;
|
|
__u8 r1[3];
|
|
__u8 len16;
|
|
__be32 r2;
|
|
__be32 stag_inv;
|
|
};
|
|
|
|
enum fw_ri_type {
|
|
FW_RI_TYPE_INIT,
|
|
FW_RI_TYPE_FINI,
|
|
FW_RI_TYPE_TERMINATE
|
|
};
|
|
|
|
enum fw_ri_init_p2ptype {
|
|
FW_RI_INIT_P2PTYPE_RDMA_WRITE = FW_RI_RDMA_WRITE,
|
|
FW_RI_INIT_P2PTYPE_READ_REQ = FW_RI_READ_REQ,
|
|
FW_RI_INIT_P2PTYPE_SEND = FW_RI_SEND,
|
|
FW_RI_INIT_P2PTYPE_SEND_WITH_INV = FW_RI_SEND_WITH_INV,
|
|
FW_RI_INIT_P2PTYPE_SEND_WITH_SE = FW_RI_SEND_WITH_SE,
|
|
FW_RI_INIT_P2PTYPE_SEND_WITH_SE_INV = FW_RI_SEND_WITH_SE_INV,
|
|
FW_RI_INIT_P2PTYPE_DISABLED = 0xf,
|
|
};
|
|
|
|
enum fw_ri_init_rqeqid_srq {
|
|
FW_RI_INIT_RQEQID_SRQ = 1 << 31,
|
|
};
|
|
|
|
struct fw_ri_wr {
|
|
__be32 op_compl;
|
|
__be32 flowid_len16;
|
|
__u64 cookie;
|
|
union fw_ri {
|
|
struct fw_ri_init {
|
|
__u8 type;
|
|
__u8 mpareqbit_p2ptype;
|
|
__u8 r4[2];
|
|
__u8 mpa_attrs;
|
|
__u8 qp_caps;
|
|
__be16 nrqe;
|
|
__be32 pdid;
|
|
__be32 qpid;
|
|
__be32 sq_eqid;
|
|
__be32 rq_eqid;
|
|
__be32 scqid;
|
|
__be32 rcqid;
|
|
__be32 ord_max;
|
|
__be32 ird_max;
|
|
__be32 iss;
|
|
__be32 irs;
|
|
__be32 hwrqsize;
|
|
__be32 hwrqaddr;
|
|
__be64 r5;
|
|
union fw_ri_init_p2p {
|
|
struct fw_ri_rdma_write_wr write;
|
|
struct fw_ri_rdma_read_wr read;
|
|
struct fw_ri_send_wr send;
|
|
} u;
|
|
} init;
|
|
struct fw_ri_fini {
|
|
__u8 type;
|
|
__u8 r3[7];
|
|
__be64 r4;
|
|
} fini;
|
|
struct fw_ri_terminate {
|
|
__u8 type;
|
|
__u8 r3[3];
|
|
__be32 immdlen;
|
|
__u8 termmsg[40];
|
|
} terminate;
|
|
} u;
|
|
};
|
|
|
|
#define FW_RI_WR_MPAREQBIT_S 7
|
|
#define FW_RI_WR_MPAREQBIT_M 0x1
|
|
#define FW_RI_WR_MPAREQBIT_V(x) ((x) << FW_RI_WR_MPAREQBIT_S)
|
|
#define FW_RI_WR_MPAREQBIT_G(x) \
|
|
(((x) >> FW_RI_WR_MPAREQBIT_S) & FW_RI_WR_MPAREQBIT_M)
|
|
#define FW_RI_WR_MPAREQBIT_F FW_RI_WR_MPAREQBIT_V(1U)
|
|
|
|
#define FW_RI_WR_P2PTYPE_S 0
|
|
#define FW_RI_WR_P2PTYPE_M 0xf
|
|
#define FW_RI_WR_P2PTYPE_V(x) ((x) << FW_RI_WR_P2PTYPE_S)
|
|
#define FW_RI_WR_P2PTYPE_G(x) \
|
|
(((x) >> FW_RI_WR_P2PTYPE_S) & FW_RI_WR_P2PTYPE_M)
|
|
|
|
#endif /* _T4FW_RI_API_H_ */
|