Message ID | 1470266864-16888-3-git-send-email-aditr@vmware.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
On Wed, Aug 03, 2016 at 04:27:31PM -0700, Adit Ranadive wrote: > This patch adds the various Verbs structures that we support in the > virtual RDMA device. We have re-mapped the ones from the RDMA core stack > to make sure we can maintain compatibility with our backend. > > Changes v2->v3: > - Added , to end of enums missing them. > > Reviewed-by: Jorgen Hansen <jhansen@vmware.com> > Reviewed-by: George Zhang <georgezhang@vmware.com> > Reviewed-by: Aditya Sarwade <asarwade@vmware.com> > Reviewed-by: Bryan Tan <bryantan@vmware.com> > Signed-off-by: Adit Ranadive <aditr@vmware.com> > --- > drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h | 450 +++++++++++++++++++++++++ > 1 file changed, 450 insertions(+) > create mode 100644 drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h > > diff --git a/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h b/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h > new file mode 100644 > index 0000000..4bef8b4 > --- /dev/null > +++ b/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h > @@ -0,0 +1,450 @@ > +/* > + * [PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT > + * UNDER THE TERMS OF THE OpenIB.org BSD license. THE ORIGINAL LICENSE TERMS > + * ARE REPRODUCED BELOW ONLY AS A REFERENCE.] > + * > + * Copyright (c) 2004 Mellanox Technologies Ltd. All rights reserved. > + * Copyright (c) 2004 Infinicon Corporation. All rights reserved. > + * Copyright (c) 2004 Intel Corporation. All rights reserved. > + * Copyright (c) 2004 Topspin Corporation. All rights reserved. > + * Copyright (c) 2004 Voltaire Corporation. All rights reserved. > + * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. > + * Copyright (c) 2005, 2006, 2007 Cisco Systems. All rights reserved. > + * Copyright (c) 2015-2016 VMware, 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 __PVRDMA_IB_VERBS_H__ > +#define __PVRDMA_IB_VERBS_H__ > + > +#include <linux/types.h> > + > +union pvrdma_gid { > + __u8 raw[16]; > + struct { > + __be64 subnet_prefix; > + __be64 interface_id; > + } global; > +}; Any reason why not to use ib_gid? Suggesting to utilize definitions from rdma/ib_verbs.h as much as you can. > + > +enum pvrdma_link_layer { > + PVRDMA_LINK_LAYER_UNSPECIFIED, > + PVRDMA_LINK_LAYER_INFINIBAND, > + PVRDMA_LINK_LAYER_ETHERNET, > +}; > + > +enum pvrdma_mtu { > + PVRDMA_MTU_256 = 1, > + PVRDMA_MTU_512 = 2, > + PVRDMA_MTU_1024 = 3, > + PVRDMA_MTU_2048 = 4, > + PVRDMA_MTU_4096 = 5, > +}; > + > +static inline int pvrdma_mtu_enum_to_int(enum pvrdma_mtu mtu) > +{ > + switch (mtu) { > + case PVRDMA_MTU_256: return 256; > + case PVRDMA_MTU_512: return 512; > + case PVRDMA_MTU_1024: return 1024; > + case PVRDMA_MTU_2048: return 2048; > + case PVRDMA_MTU_4096: return 4096; > + default: return -1; > + } > +} > + > +static inline enum pvrdma_mtu pvrdma_mtu_int_to_enum(int mtu) > +{ > + switch (mtu) { > + case 256: return PVRDMA_MTU_256; > + case 512: return PVRDMA_MTU_512; > + case 1024: return PVRDMA_MTU_1024; > + case 2048: return PVRDMA_MTU_2048; > + case 4096: > + default: return PVRDMA_MTU_4096; > + } > +} > + > +enum pvrdma_port_state { > + PVRDMA_PORT_NOP = 0, > + PVRDMA_PORT_DOWN = 1, > + PVRDMA_PORT_INIT = 2, > + PVRDMA_PORT_ARMED = 3, > + PVRDMA_PORT_ACTIVE = 4, > + PVRDMA_PORT_ACTIVE_DEFER = 5, > +}; > + > +enum pvrdma_port_cap_flags { > + PVRDMA_PORT_SM = 1 << 1, > + PVRDMA_PORT_NOTICE_SUP = 1 << 2, > + PVRDMA_PORT_TRAP_SUP = 1 << 3, > + PVRDMA_PORT_OPT_IPD_SUP = 1 << 4, > + PVRDMA_PORT_AUTO_MIGR_SUP = 1 << 5, > + PVRDMA_PORT_SL_MAP_SUP = 1 << 6, > + PVRDMA_PORT_MKEY_NVRAM = 1 << 7, > + PVRDMA_PORT_PKEY_NVRAM = 1 << 8, > + PVRDMA_PORT_LED_INFO_SUP = 1 << 9, > + PVRDMA_PORT_SM_DISABLED = 1 << 10, > + PVRDMA_PORT_SYS_IMAGE_GUID_SUP = 1 << 11, > + PVRDMA_PORT_PKEY_SW_EXT_PORT_TRAP_SUP = 1 << 12, > + PVRDMA_PORT_EXTENDED_SPEEDS_SUP = 1 << 14, > + PVRDMA_PORT_CM_SUP = 1 << 16, > + PVRDMA_PORT_SNMP_TUNNEL_SUP = 1 << 17, > + PVRDMA_PORT_REINIT_SUP = 1 << 18, > + PVRDMA_PORT_DEVICE_MGMT_SUP = 1 << 19, > + PVRDMA_PORT_VENDOR_CLASS_SUP = 1 << 20, > + PVRDMA_PORT_DR_NOTICE_SUP = 1 << 21, > + PVRDMA_PORT_CAP_MASK_NOTICE_SUP = 1 << 22, > + PVRDMA_PORT_BOOT_MGMT_SUP = 1 << 23, > + PVRDMA_PORT_LINK_LATENCY_SUP = 1 << 24, > + PVRDMA_PORT_CLIENT_REG_SUP = 1 << 25, > + PVRDMA_PORT_IP_BASED_GIDS = 1 << 26, > + PVRDMA_PORT_CAP_FLAGS_MAX = PVRDMA_PORT_IP_BASED_GIDS, > +}; > + > +enum pvrdma_port_width { > + PVRDMA_WIDTH_1X = 1, > + PVRDMA_WIDTH_4X = 2, > + PVRDMA_WIDTH_8X = 4, > + PVRDMA_WIDTH_12X = 8, > +}; > + > +static inline int pvrdma_width_enum_to_int(enum pvrdma_port_width width) > +{ > + switch (width) { > + case PVRDMA_WIDTH_1X: return 1; > + case PVRDMA_WIDTH_4X: return 4; > + case PVRDMA_WIDTH_8X: return 8; > + case PVRDMA_WIDTH_12X: return 12; > + default: return -1; > + } > +} > + > +enum pvrdma_port_speed { > + PVRDMA_SPEED_SDR = 1, > + PVRDMA_SPEED_DDR = 2, > + PVRDMA_SPEED_QDR = 4, > + PVRDMA_SPEED_FDR10 = 8, > + PVRDMA_SPEED_FDR = 16, > + PVRDMA_SPEED_EDR = 32, > +}; > + > +struct pvrdma_port_attr { > + enum pvrdma_port_state state; > + enum pvrdma_mtu max_mtu; > + enum pvrdma_mtu active_mtu; > + __u32 gid_tbl_len; > + __u32 port_cap_flags; > + __u32 max_msg_sz; > + __u32 bad_pkey_cntr; > + __u32 qkey_viol_cntr; > + __u16 pkey_tbl_len; > + __u16 lid; > + __u16 sm_lid; > + __u8 lmc; > + __u8 max_vl_num; > + __u8 sm_sl; > + __u8 subnet_timeout; > + __u8 init_type_reply; > + __u8 active_width; > + __u8 active_speed; > + __u8 phys_state; > + __u8 reserved[2]; > +}; > + > +struct pvrdma_global_route { > + union pvrdma_gid dgid; > + __u32 flow_label; > + __u8 sgid_index; > + __u8 hop_limit; > + __u8 traffic_class; > + __u8 reserved; > +}; > + > +struct pvrdma_grh { > + __be32 version_tclass_flow; > + __be16 paylen; > + __u8 next_hdr; > + __u8 hop_limit; > + union pvrdma_gid sgid; > + union pvrdma_gid dgid; > +}; Same comment as for pvrdma_gid. (ib_grh) > + > +enum pvrdma_ah_flags { > + PVRDMA_AH_GRH = 1, > +}; Same comment as for pvrdma_gid. (ib_ah_flags) > + > +enum pvrdma_rate { > + PVRDMA_RATE_PORT_CURRENT = 0, > + PVRDMA_RATE_2_5_GBPS = 2, > + PVRDMA_RATE_5_GBPS = 5, > + PVRDMA_RATE_10_GBPS = 3, > + PVRDMA_RATE_20_GBPS = 6, > + PVRDMA_RATE_30_GBPS = 4, > + PVRDMA_RATE_40_GBPS = 7, > + PVRDMA_RATE_60_GBPS = 8, > + PVRDMA_RATE_80_GBPS = 9, > + PVRDMA_RATE_120_GBPS = 10, > + PVRDMA_RATE_14_GBPS = 11, > + PVRDMA_RATE_56_GBPS = 12, > + PVRDMA_RATE_112_GBPS = 13, > + PVRDMA_RATE_168_GBPS = 14, > + PVRDMA_RATE_25_GBPS = 15, > + PVRDMA_RATE_100_GBPS = 16, > + PVRDMA_RATE_200_GBPS = 17, > + PVRDMA_RATE_300_GBPS = 18, > +}; Same comment as for pvrdma_gid. (ib_rate) > + > +struct pvrdma_ah_attr { > + struct pvrdma_global_route grh; > + __u16 dlid; > + __u16 vlan_id; > + __u8 sl; > + __u8 src_path_bits; > + __u8 static_rate; > + __u8 ah_flags; > + __u8 port_num; > + __u8 dmac[6]; > + __u8 reserved; > +}; And so on... (ib_ah_attr) > + > +enum pvrdma_wc_status { > + PVRDMA_WC_SUCCESS, > + PVRDMA_WC_LOC_LEN_ERR, > + PVRDMA_WC_LOC_QP_OP_ERR, > + PVRDMA_WC_LOC_EEC_OP_ERR, > + PVRDMA_WC_LOC_PROT_ERR, > + PVRDMA_WC_WR_FLUSH_ERR, > + PVRDMA_WC_MW_BIND_ERR, > + PVRDMA_WC_BAD_RESP_ERR, > + PVRDMA_WC_LOC_ACCESS_ERR, > + PVRDMA_WC_REM_INV_REQ_ERR, > + PVRDMA_WC_REM_ACCESS_ERR, > + PVRDMA_WC_REM_OP_ERR, > + PVRDMA_WC_RETRY_EXC_ERR, > + PVRDMA_WC_RNR_RETRY_EXC_ERR, > + PVRDMA_WC_LOC_RDD_VIOL_ERR, > + PVRDMA_WC_REM_INV_RD_REQ_ERR, > + PVRDMA_WC_REM_ABORT_ERR, > + PVRDMA_WC_INV_EECN_ERR, > + PVRDMA_WC_INV_EEC_STATE_ERR, > + PVRDMA_WC_FATAL_ERR, > + PVRDMA_WC_RESP_TIMEOUT_ERR, > + PVRDMA_WC_GENERAL_ERR, > +}; > + > +enum pvrdma_wc_opcode { > + PVRDMA_WC_SEND, > + PVRDMA_WC_RDMA_WRITE, > + PVRDMA_WC_RDMA_READ, > + PVRDMA_WC_COMP_SWAP, > + PVRDMA_WC_FETCH_ADD, > + PVRDMA_WC_BIND_MW, > + PVRDMA_WC_LSO, > + PVRDMA_WC_LOCAL_INV, > + PVRDMA_WC_FAST_REG_MR, > + PVRDMA_WC_MASKED_COMP_SWAP, > + PVRDMA_WC_MASKED_FETCH_ADD, > + PVRDMA_WC_RECV = 1 << 7, > + PVRDMA_WC_RECV_RDMA_WITH_IMM, > +}; > + > +enum pvrdma_wc_flags { > + PVRDMA_WC_GRH = 1 << 0, > + PVRDMA_WC_WITH_IMM = 1 << 1, > + PVRDMA_WC_WITH_INVALIDATE = 1 << 2, > + PVRDMA_WC_IP_CSUM_OK = 1 << 3, > + PVRDMA_WC_WITH_SMAC = 1 << 4, > + PVRDMA_WC_WITH_VLAN = 1 << 5, > + PVRDMA_WC_FLAGS_MAX = PVRDMA_WC_WITH_VLAN, > +}; > + > +enum pvrdma_cq_notify_flags { > + PVRDMA_CQ_SOLICITED = 1 << 0, > + PVRDMA_CQ_NEXT_COMP = 1 << 1, > + PVRDMA_CQ_SOLICITED_MASK = PVRDMA_CQ_SOLICITED | > + PVRDMA_CQ_NEXT_COMP, > + PVRDMA_CQ_REPORT_MISSED_EVENTS = 1 << 2, > +}; > + > +struct pvrdma_qp_cap { > + __u32 max_send_wr; > + __u32 max_recv_wr; > + __u32 max_send_sge; > + __u32 max_recv_sge; > + __u32 max_inline_data; > + __u32 reserved; > +}; > + > +enum pvrdma_sig_type { > + PVRDMA_SIGNAL_ALL_WR, > + PVRDMA_SIGNAL_REQ_WR, > +}; > + > +enum pvrdma_qp_type { > + PVRDMA_QPT_SMI, > + PVRDMA_QPT_GSI, > + PVRDMA_QPT_RC, > + PVRDMA_QPT_UC, > + PVRDMA_QPT_UD, > + PVRDMA_QPT_RAW_IPV6, > + PVRDMA_QPT_RAW_ETHERTYPE, > + PVRDMA_QPT_RAW_PACKET = 8, > + PVRDMA_QPT_XRC_INI = 9, > + PVRDMA_QPT_XRC_TGT, > + PVRDMA_QPT_MAX, > +}; > + > +enum pvrdma_qp_create_flags { > + PVRDMA_QP_CREATE_IPOPVRDMA_UD_LSO = 1 << 0, > + PVRDMA_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 1 << 1, > +}; > + > +enum pvrdma_qp_attr_mask { > + PVRDMA_QP_STATE = 1 << 0, > + PVRDMA_QP_CUR_STATE = 1 << 1, > + PVRDMA_QP_EN_SQD_ASYNC_NOTIFY = 1 << 2, > + PVRDMA_QP_ACCESS_FLAGS = 1 << 3, > + PVRDMA_QP_PKEY_INDEX = 1 << 4, > + PVRDMA_QP_PORT = 1 << 5, > + PVRDMA_QP_QKEY = 1 << 6, > + PVRDMA_QP_AV = 1 << 7, > + PVRDMA_QP_PATH_MTU = 1 << 8, > + PVRDMA_QP_TIMEOUT = 1 << 9, > + PVRDMA_QP_RETRY_CNT = 1 << 10, > + PVRDMA_QP_RNR_RETRY = 1 << 11, > + PVRDMA_QP_RQ_PSN = 1 << 12, > + PVRDMA_QP_MAX_QP_RD_ATOMIC = 1 << 13, > + PVRDMA_QP_ALT_PATH = 1 << 14, > + PVRDMA_QP_MIN_RNR_TIMER = 1 << 15, > + PVRDMA_QP_SQ_PSN = 1 << 16, > + PVRDMA_QP_MAX_DEST_RD_ATOMIC = 1 << 17, > + PVRDMA_QP_PATH_MIG_STATE = 1 << 18, > + PVRDMA_QP_CAP = 1 << 19, > + PVRDMA_QP_DEST_QPN = 1 << 20, > + PVRDMA_QP_ATTR_MASK_MAX = PVRDMA_QP_DEST_QPN, > +}; > + > +enum pvrdma_qp_state { > + PVRDMA_QPS_RESET, > + PVRDMA_QPS_INIT, > + PVRDMA_QPS_RTR, > + PVRDMA_QPS_RTS, > + PVRDMA_QPS_SQD, > + PVRDMA_QPS_SQE, > + PVRDMA_QPS_ERR, > +}; > + > +enum pvrdma_mig_state { > + PVRDMA_MIG_MIGRATED, > + PVRDMA_MIG_REARM, > + PVRDMA_MIG_ARMED, > +}; > + > +enum pvrdma_mw_type { > + PVRDMA_MW_TYPE_1 = 1, > + PVRDMA_MW_TYPE_2 = 2, > +}; > + > +struct pvrdma_qp_attr { > + enum pvrdma_qp_state qp_state; > + enum pvrdma_qp_state cur_qp_state; > + enum pvrdma_mtu path_mtu; > + enum pvrdma_mig_state path_mig_state; > + __u32 qkey; > + __u32 rq_psn; > + __u32 sq_psn; > + __u32 dest_qp_num; > + __u32 qp_access_flags; > + __u16 pkey_index; > + __u16 alt_pkey_index; > + __u8 en_sqd_async_notify; > + __u8 sq_draining; > + __u8 max_rd_atomic; > + __u8 max_dest_rd_atomic; > + __u8 min_rnr_timer; > + __u8 port_num; > + __u8 timeout; > + __u8 retry_cnt; > + __u8 rnr_retry; > + __u8 alt_port_num; > + __u8 alt_timeout; > + __u8 reserved[5]; > + struct pvrdma_qp_cap cap; > + struct pvrdma_ah_attr ah_attr; > + struct pvrdma_ah_attr alt_ah_attr; > +}; > + > +enum pvrdma_wr_opcode { > + PVRDMA_WR_RDMA_WRITE, > + PVRDMA_WR_RDMA_WRITE_WITH_IMM, > + PVRDMA_WR_SEND, > + PVRDMA_WR_SEND_WITH_IMM, > + PVRDMA_WR_RDMA_READ, > + PVRDMA_WR_ATOMIC_CMP_AND_SWP, > + PVRDMA_WR_ATOMIC_FETCH_AND_ADD, > + PVRDMA_WR_LSO, > + PVRDMA_WR_SEND_WITH_INV, > + PVRDMA_WR_RDMA_READ_WITH_INV, > + PVRDMA_WR_LOCAL_INV, > + PVRDMA_WR_FAST_REG_MR, > + PVRDMA_WR_MASKED_ATOMIC_CMP_AND_SWP, > + PVRDMA_WR_MASKED_ATOMIC_FETCH_AND_ADD, > + PVRDMA_WR_BIND_MW, > + PVRDMA_WR_REG_SIG_MR, > +}; > + > +enum pvrdma_send_flags { > + PVRDMA_SEND_FENCE = 1 << 0, > + PVRDMA_SEND_SIGNALED = 1 << 1, > + PVRDMA_SEND_SOLICITED = 1 << 2, > + PVRDMA_SEND_INLINE = 1 << 3, > + PVRDMA_SEND_IP_CSUM = 1 << 4, > + PVRDMA_SEND_FLAGS_MAX = PVRDMA_SEND_IP_CSUM, > +}; > + > +struct pvrdma_sge { > + __u64 addr; > + __u32 length; > + __u32 lkey; > +}; > + > +enum pvrdma_access_flags { > + PVRDMA_ACCESS_LOCAL_WRITE = 1 << 0, > + PVRDMA_ACCESS_REMOTE_WRITE = 1 << 1, > + PVRDMA_ACCESS_REMOTE_READ = 1 << 2, > + PVRDMA_ACCESS_REMOTE_ATOMIC = 1 << 3, > + PVRDMA_ACCESS_MW_BIND = 1 << 4, > + PVRDMA_ZERO_BASED = 1 << 5, > + PVRDMA_ACCESS_ON_DEMAND = 1 << 6, > + PVRDMA_ACCESS_FLAGS_MAX = PVRDMA_ACCESS_ON_DEMAND, > +}; > + > +#endif /* __PVRDMA_IB_VERBS_H__ */ > -- > 2.7.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-rdma" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Sun, Aug 21, 2016 at 04:55:20 -0700, Yuval Shaia <yuval.shaia@oracle.com> wrote: > On Wed, Aug 03, 2016 at 04:27:31PM -0700, Adit Ranadive wrote: > > This patch adds the various Verbs structures that we support in the > > virtual RDMA device. We have re-mapped the ones from the RDMA core stack > > to make sure we can maintain compatibility with our backend. > > > > Changes v2->v3: > > - Added , to end of enums missing them. > > > > Reviewed-by: Jorgen Hansen <jhansen@vmware.com> > > Reviewed-by: George Zhang <georgezhang@vmware.com> > > Reviewed-by: Aditya Sarwade <asarwade@vmware.com> > > Reviewed-by: Bryan Tan <bryantan@vmware.com> > > Signed-off-by: Adit Ranadive <aditr@vmware.com> > > --- > > drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h | 450 +++++++++++++++++++++++++ > > 1 file changed, 450 insertions(+) > > create mode 100644 drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h > > > > diff --git a/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h b/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h > > new file mode 100644 > > index 0000000..4bef8b4 > > --- /dev/null > > +++ b/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h > > @@ -0,0 +1,450 @@ > > +/* > > + * [PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT > > + * UNDER THE TERMS OF THE OpenIB.org BSD license. THE ORIGINAL LICENSE TERMS > > + * ARE REPRODUCED BELOW ONLY AS A REFERENCE.] > > + * > > + * Copyright (c) 2004 Mellanox Technologies Ltd. All rights reserved. > > + * Copyright (c) 2004 Infinicon Corporation. All rights reserved. > > + * Copyright (c) 2004 Intel Corporation. All rights reserved. > > + * Copyright (c) 2004 Topspin Corporation. All rights reserved. > > + * Copyright (c) 2004 Voltaire Corporation. All rights reserved. > > + * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. > > + * Copyright (c) 2005, 2006, 2007 Cisco Systems. All rights reserved. > > + * Copyright (c) 2015-2016 VMware, 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 __PVRDMA_IB_VERBS_H__ > > +#define __PVRDMA_IB_VERBS_H__ > > + > > +#include <linux/types.h> > > + > > +union pvrdma_gid { > > + __u8 raw[16]; > > + struct { > > + __be64 subnet_prefix; > > + __be64 interface_id; > > + } global; > > +}; > > Any reason why not to use ib_gid? > Suggesting to utilize definitions from rdma/ib_verbs.h as much as you can. Thanks for taking a look at this! The main reason we don't re-use the IB structures here is for compatibility reasons. We re-use these PVRDMA defined structures in our virtual device too so we want to be consistent between the driver and the device itself. Thus, we can protect the virtual device from any non-compatible changes in the IB structs. Hope that clarifies the issue! - Adit -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Tue, Aug 23, 2016 at 05:46:27PM +0000, Adit Ranadive wrote: > On Sun, Aug 21, 2016 at 04:55:20 -0700, Yuval Shaia <yuval.shaia@oracle.com> wrote: > > On Wed, Aug 03, 2016 at 04:27:31PM -0700, Adit Ranadive wrote: > > > This patch adds the various Verbs structures that we support in the > > > virtual RDMA device. We have re-mapped the ones from the RDMA core stack > > > to make sure we can maintain compatibility with our backend. > > > > > > Changes v2->v3: > > > - Added , to end of enums missing them. > > > > > > Reviewed-by: Jorgen Hansen <jhansen@vmware.com> > > > Reviewed-by: George Zhang <georgezhang@vmware.com> > > > Reviewed-by: Aditya Sarwade <asarwade@vmware.com> > > > Reviewed-by: Bryan Tan <bryantan@vmware.com> > > > Signed-off-by: Adit Ranadive <aditr@vmware.com> > > > --- > > > drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h | 450 +++++++++++++++++++++++++ > > > 1 file changed, 450 insertions(+) > > > create mode 100644 drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h > > > > > > diff --git a/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h b/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h > > > new file mode 100644 > > > index 0000000..4bef8b4 > > > --- /dev/null > > > +++ b/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h > > > @@ -0,0 +1,450 @@ > > > +/* > > > + * [PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT > > > + * UNDER THE TERMS OF THE OpenIB.org BSD license. THE ORIGINAL LICENSE TERMS > > > + * ARE REPRODUCED BELOW ONLY AS A REFERENCE.] > > > + * > > > + * Copyright (c) 2004 Mellanox Technologies Ltd. All rights reserved. > > > + * Copyright (c) 2004 Infinicon Corporation. All rights reserved. > > > + * Copyright (c) 2004 Intel Corporation. All rights reserved. > > > + * Copyright (c) 2004 Topspin Corporation. All rights reserved. > > > + * Copyright (c) 2004 Voltaire Corporation. All rights reserved. > > > + * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. > > > + * Copyright (c) 2005, 2006, 2007 Cisco Systems. All rights reserved. > > > + * Copyright (c) 2015-2016 VMware, 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 __PVRDMA_IB_VERBS_H__ > > > +#define __PVRDMA_IB_VERBS_H__ > > > + > > > +#include <linux/types.h> > > > + > > > +union pvrdma_gid { > > > + __u8 raw[16]; > > > + struct { > > > + __be64 subnet_prefix; > > > + __be64 interface_id; > > > + } global; > > > +}; > > > > Any reason why not to use ib_gid? > > Suggesting to utilize definitions from rdma/ib_verbs.h as much as you can. > > Thanks for taking a look at this! The main reason we don't re-use the IB structures here is for > compatibility reasons. We re-use these PVRDMA defined structures in our virtual device too so > we want to be consistent between the driver and the device itself. Thus, we can protect the > virtual device from any non-compatible changes in the IB structs. > Hope that clarifies the issue! Point is cleared. Just want to warn for any future kernel-api inconsistency between pcrdma driver and some other OFED module (e.x if your driver will ever want to call ib_get_cached_gid() or something like that. Not only "future", how about internal inconsistency with for example pvrdma_dev.sgid_tbl. I assume that for that you have the pvrdma_gid_to_ib() and ib_gid_to_pvrdma() functions which enforce this "compatibility". > > - Adit > -- > To unsubscribe from this list: send the line "unsubscribe linux-rdma" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On, Wed, Aug 24, 2016 at 23:04:44 -0700, Yuval Shaia wrote: > On Tue, Aug 23, 2016 at 05:46:27PM +0000, Adit Ranadive wrote: > > On Sun, Aug 21, 2016 at 04:55:20 -0700, Yuval Shaia <yuval.shaia@oracle.com> wrote: > > > On Wed, Aug 03, 2016 at 04:27:31PM -0700, Adit Ranadive wrote: > > > > This patch adds the various Verbs structures that we support in the > > > > virtual RDMA device. We have re-mapped the ones from the RDMA core stack > > > > to make sure we can maintain compatibility with our backend. > > > > > > > > Changes v2->v3: > > > > - Added , to end of enums missing them. > > > > > > > > Reviewed-by: Jorgen Hansen <jhansen@vmware.com> > > > > Reviewed-by: George Zhang <georgezhang@vmware.com> > > > > Reviewed-by: Aditya Sarwade <asarwade@vmware.com> > > > > Reviewed-by: Bryan Tan <bryantan@vmware.com> > > > > Signed-off-by: Adit Ranadive <aditr@vmware.com> > > > > --- > > > > drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h | 450 +++++++++++++++++++++++++ > > > > 1 file changed, 450 insertions(+) > > > > create mode 100644 drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h > > > > > > > > diff --git a/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h b/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h > > > > new file mode 100644 > > > > index 0000000..4bef8b4 > > > > --- /dev/null > > > > +++ b/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h > > > > @@ -0,0 +1,450 @@ > > > > +/* > > > > + * [PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT > > > > + * UNDER THE TERMS OF THE OpenIB.org BSD license. THE ORIGINAL LICENSE TERMS > > > > + * ARE REPRODUCED BELOW ONLY AS A REFERENCE.] > > > > + * > > > > + * Copyright (c) 2004 Mellanox Technologies Ltd. All rights reserved. > > > > + * Copyright (c) 2004 Infinicon Corporation. All rights reserved. > > > > + * Copyright (c) 2004 Intel Corporation. All rights reserved. > > > > + * Copyright (c) 2004 Topspin Corporation. All rights reserved. > > > > + * Copyright (c) 2004 Voltaire Corporation. All rights reserved. > > > > + * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. > > > > + * Copyright (c) 2005, 2006, 2007 Cisco Systems. All rights reserved. > > > > + * Copyright (c) 2015-2016 VMware, 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 __PVRDMA_IB_VERBS_H__ > > > > +#define __PVRDMA_IB_VERBS_H__ > > > > + > > > > +#include <linux/types.h> > > > > + > > > > +union pvrdma_gid { > > > > + __u8 raw[16]; > > > > + struct { > > > > + __be64 subnet_prefix; > > > > + __be64 interface_id; > > > > + } global; > > > > +}; > > > > > > Any reason why not to use ib_gid? > > > Suggesting to utilize definitions from rdma/ib_verbs.h as much as you can. > > > > Thanks for taking a look at this! The main reason we don't re-use the IB structures here is for > > compatibility reasons. We re-use these PVRDMA defined structures in our virtual device too so > > we want to be consistent between the driver and the device itself. Thus, we can protect the > > virtual device from any non-compatible changes in the IB structs. > > Hope that clarifies the issue! > > Point is cleared. > Just want to warn for any future kernel-api inconsistency between pcrdma > driver and some other OFED module (e.x if your driver will ever want to > call ib_get_cached_gid() or something like that. > > Not only "future", how about internal inconsistency with for example > pvrdma_dev.sgid_tbl. Since this gets populated with GIDs using OFED stack callbacks, we allocate them in the IB GID format. > I assume that for that you have the pvrdma_gid_to_ib() and > ib_gid_to_pvrdma() functions which enforce this "compatibility". Yes, that is correct. -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h b/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h new file mode 100644 index 0000000..4bef8b4 --- /dev/null +++ b/drivers/infiniband/hw/pvrdma/pvrdma_ib_verbs.h @@ -0,0 +1,450 @@ +/* + * [PLEASE NOTE: VMWARE, INC. ELECTS TO USE AND DISTRIBUTE THIS COMPONENT + * UNDER THE TERMS OF THE OpenIB.org BSD license. THE ORIGINAL LICENSE TERMS + * ARE REPRODUCED BELOW ONLY AS A REFERENCE.] + * + * Copyright (c) 2004 Mellanox Technologies Ltd. All rights reserved. + * Copyright (c) 2004 Infinicon Corporation. All rights reserved. + * Copyright (c) 2004 Intel Corporation. All rights reserved. + * Copyright (c) 2004 Topspin Corporation. All rights reserved. + * Copyright (c) 2004 Voltaire Corporation. All rights reserved. + * Copyright (c) 2005 Sun Microsystems, Inc. All rights reserved. + * Copyright (c) 2005, 2006, 2007 Cisco Systems. All rights reserved. + * Copyright (c) 2015-2016 VMware, 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 __PVRDMA_IB_VERBS_H__ +#define __PVRDMA_IB_VERBS_H__ + +#include <linux/types.h> + +union pvrdma_gid { + __u8 raw[16]; + struct { + __be64 subnet_prefix; + __be64 interface_id; + } global; +}; + +enum pvrdma_link_layer { + PVRDMA_LINK_LAYER_UNSPECIFIED, + PVRDMA_LINK_LAYER_INFINIBAND, + PVRDMA_LINK_LAYER_ETHERNET, +}; + +enum pvrdma_mtu { + PVRDMA_MTU_256 = 1, + PVRDMA_MTU_512 = 2, + PVRDMA_MTU_1024 = 3, + PVRDMA_MTU_2048 = 4, + PVRDMA_MTU_4096 = 5, +}; + +static inline int pvrdma_mtu_enum_to_int(enum pvrdma_mtu mtu) +{ + switch (mtu) { + case PVRDMA_MTU_256: return 256; + case PVRDMA_MTU_512: return 512; + case PVRDMA_MTU_1024: return 1024; + case PVRDMA_MTU_2048: return 2048; + case PVRDMA_MTU_4096: return 4096; + default: return -1; + } +} + +static inline enum pvrdma_mtu pvrdma_mtu_int_to_enum(int mtu) +{ + switch (mtu) { + case 256: return PVRDMA_MTU_256; + case 512: return PVRDMA_MTU_512; + case 1024: return PVRDMA_MTU_1024; + case 2048: return PVRDMA_MTU_2048; + case 4096: + default: return PVRDMA_MTU_4096; + } +} + +enum pvrdma_port_state { + PVRDMA_PORT_NOP = 0, + PVRDMA_PORT_DOWN = 1, + PVRDMA_PORT_INIT = 2, + PVRDMA_PORT_ARMED = 3, + PVRDMA_PORT_ACTIVE = 4, + PVRDMA_PORT_ACTIVE_DEFER = 5, +}; + +enum pvrdma_port_cap_flags { + PVRDMA_PORT_SM = 1 << 1, + PVRDMA_PORT_NOTICE_SUP = 1 << 2, + PVRDMA_PORT_TRAP_SUP = 1 << 3, + PVRDMA_PORT_OPT_IPD_SUP = 1 << 4, + PVRDMA_PORT_AUTO_MIGR_SUP = 1 << 5, + PVRDMA_PORT_SL_MAP_SUP = 1 << 6, + PVRDMA_PORT_MKEY_NVRAM = 1 << 7, + PVRDMA_PORT_PKEY_NVRAM = 1 << 8, + PVRDMA_PORT_LED_INFO_SUP = 1 << 9, + PVRDMA_PORT_SM_DISABLED = 1 << 10, + PVRDMA_PORT_SYS_IMAGE_GUID_SUP = 1 << 11, + PVRDMA_PORT_PKEY_SW_EXT_PORT_TRAP_SUP = 1 << 12, + PVRDMA_PORT_EXTENDED_SPEEDS_SUP = 1 << 14, + PVRDMA_PORT_CM_SUP = 1 << 16, + PVRDMA_PORT_SNMP_TUNNEL_SUP = 1 << 17, + PVRDMA_PORT_REINIT_SUP = 1 << 18, + PVRDMA_PORT_DEVICE_MGMT_SUP = 1 << 19, + PVRDMA_PORT_VENDOR_CLASS_SUP = 1 << 20, + PVRDMA_PORT_DR_NOTICE_SUP = 1 << 21, + PVRDMA_PORT_CAP_MASK_NOTICE_SUP = 1 << 22, + PVRDMA_PORT_BOOT_MGMT_SUP = 1 << 23, + PVRDMA_PORT_LINK_LATENCY_SUP = 1 << 24, + PVRDMA_PORT_CLIENT_REG_SUP = 1 << 25, + PVRDMA_PORT_IP_BASED_GIDS = 1 << 26, + PVRDMA_PORT_CAP_FLAGS_MAX = PVRDMA_PORT_IP_BASED_GIDS, +}; + +enum pvrdma_port_width { + PVRDMA_WIDTH_1X = 1, + PVRDMA_WIDTH_4X = 2, + PVRDMA_WIDTH_8X = 4, + PVRDMA_WIDTH_12X = 8, +}; + +static inline int pvrdma_width_enum_to_int(enum pvrdma_port_width width) +{ + switch (width) { + case PVRDMA_WIDTH_1X: return 1; + case PVRDMA_WIDTH_4X: return 4; + case PVRDMA_WIDTH_8X: return 8; + case PVRDMA_WIDTH_12X: return 12; + default: return -1; + } +} + +enum pvrdma_port_speed { + PVRDMA_SPEED_SDR = 1, + PVRDMA_SPEED_DDR = 2, + PVRDMA_SPEED_QDR = 4, + PVRDMA_SPEED_FDR10 = 8, + PVRDMA_SPEED_FDR = 16, + PVRDMA_SPEED_EDR = 32, +}; + +struct pvrdma_port_attr { + enum pvrdma_port_state state; + enum pvrdma_mtu max_mtu; + enum pvrdma_mtu active_mtu; + __u32 gid_tbl_len; + __u32 port_cap_flags; + __u32 max_msg_sz; + __u32 bad_pkey_cntr; + __u32 qkey_viol_cntr; + __u16 pkey_tbl_len; + __u16 lid; + __u16 sm_lid; + __u8 lmc; + __u8 max_vl_num; + __u8 sm_sl; + __u8 subnet_timeout; + __u8 init_type_reply; + __u8 active_width; + __u8 active_speed; + __u8 phys_state; + __u8 reserved[2]; +}; + +struct pvrdma_global_route { + union pvrdma_gid dgid; + __u32 flow_label; + __u8 sgid_index; + __u8 hop_limit; + __u8 traffic_class; + __u8 reserved; +}; + +struct pvrdma_grh { + __be32 version_tclass_flow; + __be16 paylen; + __u8 next_hdr; + __u8 hop_limit; + union pvrdma_gid sgid; + union pvrdma_gid dgid; +}; + +enum pvrdma_ah_flags { + PVRDMA_AH_GRH = 1, +}; + +enum pvrdma_rate { + PVRDMA_RATE_PORT_CURRENT = 0, + PVRDMA_RATE_2_5_GBPS = 2, + PVRDMA_RATE_5_GBPS = 5, + PVRDMA_RATE_10_GBPS = 3, + PVRDMA_RATE_20_GBPS = 6, + PVRDMA_RATE_30_GBPS = 4, + PVRDMA_RATE_40_GBPS = 7, + PVRDMA_RATE_60_GBPS = 8, + PVRDMA_RATE_80_GBPS = 9, + PVRDMA_RATE_120_GBPS = 10, + PVRDMA_RATE_14_GBPS = 11, + PVRDMA_RATE_56_GBPS = 12, + PVRDMA_RATE_112_GBPS = 13, + PVRDMA_RATE_168_GBPS = 14, + PVRDMA_RATE_25_GBPS = 15, + PVRDMA_RATE_100_GBPS = 16, + PVRDMA_RATE_200_GBPS = 17, + PVRDMA_RATE_300_GBPS = 18, +}; + +struct pvrdma_ah_attr { + struct pvrdma_global_route grh; + __u16 dlid; + __u16 vlan_id; + __u8 sl; + __u8 src_path_bits; + __u8 static_rate; + __u8 ah_flags; + __u8 port_num; + __u8 dmac[6]; + __u8 reserved; +}; + +enum pvrdma_wc_status { + PVRDMA_WC_SUCCESS, + PVRDMA_WC_LOC_LEN_ERR, + PVRDMA_WC_LOC_QP_OP_ERR, + PVRDMA_WC_LOC_EEC_OP_ERR, + PVRDMA_WC_LOC_PROT_ERR, + PVRDMA_WC_WR_FLUSH_ERR, + PVRDMA_WC_MW_BIND_ERR, + PVRDMA_WC_BAD_RESP_ERR, + PVRDMA_WC_LOC_ACCESS_ERR, + PVRDMA_WC_REM_INV_REQ_ERR, + PVRDMA_WC_REM_ACCESS_ERR, + PVRDMA_WC_REM_OP_ERR, + PVRDMA_WC_RETRY_EXC_ERR, + PVRDMA_WC_RNR_RETRY_EXC_ERR, + PVRDMA_WC_LOC_RDD_VIOL_ERR, + PVRDMA_WC_REM_INV_RD_REQ_ERR, + PVRDMA_WC_REM_ABORT_ERR, + PVRDMA_WC_INV_EECN_ERR, + PVRDMA_WC_INV_EEC_STATE_ERR, + PVRDMA_WC_FATAL_ERR, + PVRDMA_WC_RESP_TIMEOUT_ERR, + PVRDMA_WC_GENERAL_ERR, +}; + +enum pvrdma_wc_opcode { + PVRDMA_WC_SEND, + PVRDMA_WC_RDMA_WRITE, + PVRDMA_WC_RDMA_READ, + PVRDMA_WC_COMP_SWAP, + PVRDMA_WC_FETCH_ADD, + PVRDMA_WC_BIND_MW, + PVRDMA_WC_LSO, + PVRDMA_WC_LOCAL_INV, + PVRDMA_WC_FAST_REG_MR, + PVRDMA_WC_MASKED_COMP_SWAP, + PVRDMA_WC_MASKED_FETCH_ADD, + PVRDMA_WC_RECV = 1 << 7, + PVRDMA_WC_RECV_RDMA_WITH_IMM, +}; + +enum pvrdma_wc_flags { + PVRDMA_WC_GRH = 1 << 0, + PVRDMA_WC_WITH_IMM = 1 << 1, + PVRDMA_WC_WITH_INVALIDATE = 1 << 2, + PVRDMA_WC_IP_CSUM_OK = 1 << 3, + PVRDMA_WC_WITH_SMAC = 1 << 4, + PVRDMA_WC_WITH_VLAN = 1 << 5, + PVRDMA_WC_FLAGS_MAX = PVRDMA_WC_WITH_VLAN, +}; + +enum pvrdma_cq_notify_flags { + PVRDMA_CQ_SOLICITED = 1 << 0, + PVRDMA_CQ_NEXT_COMP = 1 << 1, + PVRDMA_CQ_SOLICITED_MASK = PVRDMA_CQ_SOLICITED | + PVRDMA_CQ_NEXT_COMP, + PVRDMA_CQ_REPORT_MISSED_EVENTS = 1 << 2, +}; + +struct pvrdma_qp_cap { + __u32 max_send_wr; + __u32 max_recv_wr; + __u32 max_send_sge; + __u32 max_recv_sge; + __u32 max_inline_data; + __u32 reserved; +}; + +enum pvrdma_sig_type { + PVRDMA_SIGNAL_ALL_WR, + PVRDMA_SIGNAL_REQ_WR, +}; + +enum pvrdma_qp_type { + PVRDMA_QPT_SMI, + PVRDMA_QPT_GSI, + PVRDMA_QPT_RC, + PVRDMA_QPT_UC, + PVRDMA_QPT_UD, + PVRDMA_QPT_RAW_IPV6, + PVRDMA_QPT_RAW_ETHERTYPE, + PVRDMA_QPT_RAW_PACKET = 8, + PVRDMA_QPT_XRC_INI = 9, + PVRDMA_QPT_XRC_TGT, + PVRDMA_QPT_MAX, +}; + +enum pvrdma_qp_create_flags { + PVRDMA_QP_CREATE_IPOPVRDMA_UD_LSO = 1 << 0, + PVRDMA_QP_CREATE_BLOCK_MULTICAST_LOOPBACK = 1 << 1, +}; + +enum pvrdma_qp_attr_mask { + PVRDMA_QP_STATE = 1 << 0, + PVRDMA_QP_CUR_STATE = 1 << 1, + PVRDMA_QP_EN_SQD_ASYNC_NOTIFY = 1 << 2, + PVRDMA_QP_ACCESS_FLAGS = 1 << 3, + PVRDMA_QP_PKEY_INDEX = 1 << 4, + PVRDMA_QP_PORT = 1 << 5, + PVRDMA_QP_QKEY = 1 << 6, + PVRDMA_QP_AV = 1 << 7, + PVRDMA_QP_PATH_MTU = 1 << 8, + PVRDMA_QP_TIMEOUT = 1 << 9, + PVRDMA_QP_RETRY_CNT = 1 << 10, + PVRDMA_QP_RNR_RETRY = 1 << 11, + PVRDMA_QP_RQ_PSN = 1 << 12, + PVRDMA_QP_MAX_QP_RD_ATOMIC = 1 << 13, + PVRDMA_QP_ALT_PATH = 1 << 14, + PVRDMA_QP_MIN_RNR_TIMER = 1 << 15, + PVRDMA_QP_SQ_PSN = 1 << 16, + PVRDMA_QP_MAX_DEST_RD_ATOMIC = 1 << 17, + PVRDMA_QP_PATH_MIG_STATE = 1 << 18, + PVRDMA_QP_CAP = 1 << 19, + PVRDMA_QP_DEST_QPN = 1 << 20, + PVRDMA_QP_ATTR_MASK_MAX = PVRDMA_QP_DEST_QPN, +}; + +enum pvrdma_qp_state { + PVRDMA_QPS_RESET, + PVRDMA_QPS_INIT, + PVRDMA_QPS_RTR, + PVRDMA_QPS_RTS, + PVRDMA_QPS_SQD, + PVRDMA_QPS_SQE, + PVRDMA_QPS_ERR, +}; + +enum pvrdma_mig_state { + PVRDMA_MIG_MIGRATED, + PVRDMA_MIG_REARM, + PVRDMA_MIG_ARMED, +}; + +enum pvrdma_mw_type { + PVRDMA_MW_TYPE_1 = 1, + PVRDMA_MW_TYPE_2 = 2, +}; + +struct pvrdma_qp_attr { + enum pvrdma_qp_state qp_state; + enum pvrdma_qp_state cur_qp_state; + enum pvrdma_mtu path_mtu; + enum pvrdma_mig_state path_mig_state; + __u32 qkey; + __u32 rq_psn; + __u32 sq_psn; + __u32 dest_qp_num; + __u32 qp_access_flags; + __u16 pkey_index; + __u16 alt_pkey_index; + __u8 en_sqd_async_notify; + __u8 sq_draining; + __u8 max_rd_atomic; + __u8 max_dest_rd_atomic; + __u8 min_rnr_timer; + __u8 port_num; + __u8 timeout; + __u8 retry_cnt; + __u8 rnr_retry; + __u8 alt_port_num; + __u8 alt_timeout; + __u8 reserved[5]; + struct pvrdma_qp_cap cap; + struct pvrdma_ah_attr ah_attr; + struct pvrdma_ah_attr alt_ah_attr; +}; + +enum pvrdma_wr_opcode { + PVRDMA_WR_RDMA_WRITE, + PVRDMA_WR_RDMA_WRITE_WITH_IMM, + PVRDMA_WR_SEND, + PVRDMA_WR_SEND_WITH_IMM, + PVRDMA_WR_RDMA_READ, + PVRDMA_WR_ATOMIC_CMP_AND_SWP, + PVRDMA_WR_ATOMIC_FETCH_AND_ADD, + PVRDMA_WR_LSO, + PVRDMA_WR_SEND_WITH_INV, + PVRDMA_WR_RDMA_READ_WITH_INV, + PVRDMA_WR_LOCAL_INV, + PVRDMA_WR_FAST_REG_MR, + PVRDMA_WR_MASKED_ATOMIC_CMP_AND_SWP, + PVRDMA_WR_MASKED_ATOMIC_FETCH_AND_ADD, + PVRDMA_WR_BIND_MW, + PVRDMA_WR_REG_SIG_MR, +}; + +enum pvrdma_send_flags { + PVRDMA_SEND_FENCE = 1 << 0, + PVRDMA_SEND_SIGNALED = 1 << 1, + PVRDMA_SEND_SOLICITED = 1 << 2, + PVRDMA_SEND_INLINE = 1 << 3, + PVRDMA_SEND_IP_CSUM = 1 << 4, + PVRDMA_SEND_FLAGS_MAX = PVRDMA_SEND_IP_CSUM, +}; + +struct pvrdma_sge { + __u64 addr; + __u32 length; + __u32 lkey; +}; + +enum pvrdma_access_flags { + PVRDMA_ACCESS_LOCAL_WRITE = 1 << 0, + PVRDMA_ACCESS_REMOTE_WRITE = 1 << 1, + PVRDMA_ACCESS_REMOTE_READ = 1 << 2, + PVRDMA_ACCESS_REMOTE_ATOMIC = 1 << 3, + PVRDMA_ACCESS_MW_BIND = 1 << 4, + PVRDMA_ZERO_BASED = 1 << 5, + PVRDMA_ACCESS_ON_DEMAND = 1 << 6, + PVRDMA_ACCESS_FLAGS_MAX = PVRDMA_ACCESS_ON_DEMAND, +}; + +#endif /* __PVRDMA_IB_VERBS_H__ */