Date: Mon, 5 Mar 2018 13:24:47 +0000 (UTC) From: Hans Petter Selasky <hselasky@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r330502 - projects/bsd_rdma_4_9_stable_11/sys/ofed/include/rdma Message-ID: <201803051324.w25DOlB5069385@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: hselasky Date: Mon Mar 5 13:24:47 2018 New Revision: 330502 URL: https://svnweb.freebsd.org/changeset/base/330502 Log: Add compatibility wrappers for existing 11-stable ibcore APIs. Sponsored by: Mellanox Technologies Added: projects/bsd_rdma_4_9_stable_11/sys/ofed/include/rdma/ib_verbs_compat.h (contents, props changed) Added: projects/bsd_rdma_4_9_stable_11/sys/ofed/include/rdma/ib_verbs_compat.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ projects/bsd_rdma_4_9_stable_11/sys/ofed/include/rdma/ib_verbs_compat.h Mon Mar 5 13:24:47 2018 (r330502) @@ -0,0 +1,547 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2018, Mellanox Technologies, Ltd. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS `AS IS' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#if !defined(IB_VERBS_COMPAT_H) +#define IB_VERBS_COMPAT_H + +#include <rdma/ib_verbs.h> + +enum ib_device_attr_comp_mask { + IB_DEVICE_ATTR_WITH_TIMESTAMP_MASK = 1ULL << 1, + IB_DEVICE_ATTR_WITH_HCA_CORE_CLOCK = 1ULL << 2 +}; + +struct ib_protocol_stats { + /* TBD... */ +}; + +struct iw_protocol_stats { + u64 ipInReceives; + u64 ipInHdrErrors; + u64 ipInTooBigErrors; + u64 ipInNoRoutes; + u64 ipInAddrErrors; + u64 ipInUnknownProtos; + u64 ipInTruncatedPkts; + u64 ipInDiscards; + u64 ipInDelivers; + u64 ipOutForwDatagrams; + u64 ipOutRequests; + u64 ipOutDiscards; + u64 ipOutNoRoutes; + u64 ipReasmTimeout; + u64 ipReasmReqds; + u64 ipReasmOKs; + u64 ipReasmFails; + u64 ipFragOKs; + u64 ipFragFails; + u64 ipFragCreates; + u64 ipInMcastPkts; + u64 ipOutMcastPkts; + u64 ipInBcastPkts; + u64 ipOutBcastPkts; + + u64 tcpRtoAlgorithm; + u64 tcpRtoMin; + u64 tcpRtoMax; + u64 tcpMaxConn; + u64 tcpActiveOpens; + u64 tcpPassiveOpens; + u64 tcpAttemptFails; + u64 tcpEstabResets; + u64 tcpCurrEstab; + u64 tcpInSegs; + u64 tcpOutSegs; + u64 tcpRetransSegs; + u64 tcpInErrs; + u64 tcpOutRsts; +}; + +union rdma_protocol_stats { + struct ib_protocol_stats ib; + struct iw_protocol_stats iw; +}; + +enum ib_mr_create_flags { + IB_MR_SIGNATURE_EN = 1, +}; + +struct ib_mr_init_attr { + int max_reg_descriptors; + u32 flags; +}; + +enum ib_qpg_type { + IB_QPG_NONE = 0, + IB_QPG_PARENT = (1 << 0), + IB_QPG_CHILD_RX = (1 << 1), + IB_QPG_CHILD_TX = (1 << 2) +}; + +struct ib_qpg_init_attrib { + u32 tss_child_count; + u32 rss_child_count; +}; + +enum { + IB_DCT_CREATE_FLAG_RCV_INLINE = 1 << 0, + IB_DCT_CREATE_FLAGS_MASK = IB_DCT_CREATE_FLAG_RCV_INLINE, +}; + +struct ib_dct_init_attr { + struct ib_pd *pd; + struct ib_cq *cq; + struct ib_srq *srq; + u64 dc_key; + u8 port; + u32 access_flags; + u8 min_rnr_timer; + u8 tclass; + u32 flow_label; + enum ib_mtu mtu; + u8 pkey_index; + u8 gid_index; + u8 hop_limit; + u32 create_flags; +}; + +struct ib_dct_attr { + u64 dc_key; + u8 port; + u32 access_flags; + u8 min_rnr_timer; + u8 tclass; + u32 flow_label; + enum ib_mtu mtu; + u8 pkey_index; + u8 gid_index; + u8 hop_limit; + u32 key_violations; + u8 state; +}; + +struct ib_fast_reg_page_list { + struct ib_device *device; + u64 *page_list; + unsigned int max_page_list_len; +}; + +struct ib_mw_bind_info { + struct ib_mr *mr; + u64 addr; + u64 length; + int mw_access_flags; +}; + +struct ib_phys_buf { + u64 addr; + u64 size; +}; + +struct ib_mr_attr { + struct ib_pd *pd; + u64 device_virt_addr; + u64 size; + int mr_access_flags; + u32 lkey; + u32 rkey; +}; + +struct ib_mw_bind { + u64 wr_id; + int send_flags; + struct ib_mw_bind_info bind_info; +}; + +enum ib_cq_attr_mask { + IB_CQ_MODERATION = (1 << 0), + IB_CQ_CAP_FLAGS = (1 << 1) +}; + +enum ib_cq_cap_flags { + IB_CQ_IGNORE_OVERRUN = (1 << 0) +}; + +struct ib_cq_attr { + struct { + u16 cq_count; + u16 cq_period; + } moderation; + u32 cq_cap_flags; +}; + +struct ib_dct { + struct ib_device *device; + struct ib_uobject *uobject; + struct ib_pd *pd; + struct ib_cq *cq; + struct ib_srq *srq; + u32 dct_num; +}; + +enum verbs_values_mask { + IBV_VALUES_HW_CLOCK = 1 << 0 +}; + +struct ib_device_values { + int values_mask; + uint64_t hwclock; +}; + +#define IB_WR_FAST_REG_MR -2 /* not implemented */ + +struct ib_send_wr_compat { + union { + /* + * NOTE: The following structure must be kept in sync + * with "struct ib_send_wr": + */ + struct { + struct ib_send_wr_compat *next; + union { + u64 wr_id; + struct ib_cqe *wr_cqe; + }; + struct ib_sge *sg_list; + int num_sge; + enum ib_wr_opcode opcode; + int send_flags; + union { + __be32 imm_data; + u32 invalidate_rkey; + } ex; + }; + union { + struct ib_rdma_wr rdma; + struct ib_atomic_wr atomic; + struct ib_ud_wr ud; + struct ib_sig_handover_wr sig_handover; + struct { + struct ib_send_wr wr; + u64 iova_start; + struct ib_fast_reg_page_list *page_list; + unsigned int page_shift; + unsigned int page_list_len; + u32 length; + int access_flags; + u32 rkey; + } fast_reg; + struct { + struct ib_send_wr wr; + int npages; + int access_flags; + u32 mkey; + struct ib_pd *pd; + u64 virt_addr; + u64 length; + int page_shift; + } umr; + struct { + struct ib_send_wr wr; + struct ib_mw *mw; + /* The new rkey for the memory window. */ + u32 rkey; + struct ib_mw_bind_info bind_info; + } bind_mw; + } wr; + }; + u32 xrc_remote_srq_num; /* XRC TGT QPs only */ +}; + +static inline int +ib_post_send_compat(struct ib_qp *qp, + struct ib_send_wr_compat *send_wr, + struct ib_send_wr_compat **bad_send_wr) +{ + return (ib_post_send(qp, (struct ib_send_wr *)send_wr, + (struct ib_send_wr **)bad_send_wr)); +} + +#undef ib_post_send +#define ib_post_send(...) \ + ib_post_send_compat(__VA_ARGS__) + +#define ib_send_wr \ + ib_send_wr_compat + +static inline int +ib_query_device_compat(struct ib_device *device, + struct ib_device_attr *device_attr) +{ + *device_attr = device->attrs; + return (0); +} + +#undef ib_query_device +#define ib_query_device(...) \ + ib_query_device_compat(__VA_ARGS__) + +static inline int +ib_query_gid_compat(struct ib_device *device, + u8 port_num, int index, union ib_gid *gid) +{ + return (ib_query_gid(device, port_num, index, gid, NULL)); +} + +#undef ib_query_gid +#define ib_query_gid(...) \ + ib_query_gid_compat(__VA_ARGS__) + +static inline int +ib_find_gid_compat(struct ib_device *device, union ib_gid *gid, + u8 * port_num, u16 * index) +{ + return (ib_find_gid(device, gid, IB_GID_TYPE_IB, NULL, port_num, index)); +} + +#undef ib_find_gid +#define ib_find_gid(...) \ + ib_find_gid_compat(__VA_ARGS__) + +static inline struct ib_pd * +ib_alloc_pd_compat(struct ib_device *device) +{ + return (ib_alloc_pd(device, 0)); +} + +#undef ib_alloc_pd +#define ib_alloc_pd(...) \ + ib_alloc_pd_compat(__VA_ARGS__) + +static inline struct ib_cq * +ib_create_cq_compat(struct ib_device *device, + ib_comp_handler comp_handler, + void (*event_handler) (struct ib_event *, void *), + void *cq_context, int cqe, int comp_vector) +{ + const struct ib_cq_init_attr cq_attr = {.cqe = cqe,.comp_vector = comp_vector}; + + return (ib_create_cq(device, comp_handler, event_handler, cq_context, &cq_attr)); +} + +#undef ib_create_cq +#define ib_create_cq(...) \ + ib_create_cq_compat(__VA_ARGS__) + +static inline int +ib_modify_cq_compat(struct ib_cq *cq, + struct ib_cq_attr *cq_attr, + int cq_attr_mask) +{ + if (cq_attr_mask & IB_CQ_MODERATION) { + return (ib_modify_cq(cq, cq_attr->moderation.cq_count, + cq_attr->moderation.cq_period)); + } else { + return (0); + } +} + +#undef ib_modify_cq +#define ib_modify_cq(...) \ + ib_modify_cq_compat(__VA_ARGS__) + +static inline struct ib_mr * +ib_get_dma_mr(struct ib_pd *pd, int mr_access_flags) +{ + return (ERR_PTR(-ENOSYS)); +} + +static inline struct ib_mr * +ib_reg_phys_mr(struct ib_pd *pd, + struct ib_phys_buf *phys_buf_array, + int num_phys_buf, + int mr_access_flags, + u64 * iova_start) +{ + return (ERR_PTR(-ENOSYS)); +} + +static inline int +ib_rereg_phys_mr(struct ib_mr *mr, + int mr_rereg_mask, + struct ib_pd *pd, + struct ib_phys_buf *phys_buf_array, + int num_phys_buf, + int mr_access_flags, + u64 * iova_start) +{ + return (-EOPNOTSUPP); +} + +static inline int +ib_query_mr(struct ib_mr *mr, struct ib_mr_attr *mr_attr) +{ + return (-EOPNOTSUPP); +} + +static inline struct ib_mr * +ib_create_mr(struct ib_pd *pd, + struct ib_mr_init_attr *mr_init_attr) +{ + return (ERR_PTR(-ENOSYS)); +} + +static inline int +ib_destroy_mr(struct ib_mr *mr) +{ + return (-EOPNOTSUPP); +} + +static inline struct ib_mr * +ib_alloc_fast_reg_mr(struct ib_pd *pd, int max_page_list_len) +{ + return (ERR_PTR(-ENOSYS)); +} + +static inline struct ib_fast_reg_page_list * +ib_alloc_fast_reg_page_list(struct ib_device *device, int page_list_len) +{ + return (ERR_PTR(-ENOSYS)); +} + +static inline void +ib_free_fast_reg_page_list(struct ib_fast_reg_page_list *page_list) +{ + +} + +static inline struct ib_mw * +ib_alloc_mw(struct ib_pd *pd, enum ib_mw_type type) +{ + struct ib_mw *mw; + + if (!pd->device->alloc_mw) + return ERR_PTR(-ENOSYS); + + mw = pd->device->alloc_mw(pd, type, NULL); + if (!IS_ERR(mw)) { + mw->device = pd->device; + mw->pd = pd; + mw->uobject = NULL; + mw->type = type; + atomic_inc(&pd->usecnt); + } + return (mw); +} + +static inline int +ib_bind_mw(struct ib_qp *qp, + struct ib_mw *mw, + struct ib_mw_bind *mw_bind) +{ + return (-EOPNOTSUPP); +} + +static inline int +ib_dealloc_mw(struct ib_mw *mw) +{ + struct ib_pd *pd; + int ret; + + pd = mw->pd; + ret = mw->device->dealloc_mw(mw); + if (!ret) + atomic_dec(&pd->usecnt); + return (ret); +} + +static inline struct ib_dct * +ib_create_dct(struct ib_pd *pd, struct ib_dct_init_attr *attr, + struct ib_udata *udata) +{ + return (ERR_PTR(-ENOSYS)); +} + +static inline int +ib_destroy_dct(struct ib_dct *dct) +{ + return (-EOPNOTSUPP); +} + +static inline int +ib_query_dct(struct ib_dct *dct, struct ib_dct_attr *attr) +{ + return (-EOPNOTSUPP); +} + +static inline int +ib_query_values(struct ib_device *device, + int q_values, struct ib_device_values *values) +{ + return (-EOPNOTSUPP); +} + +static inline void +ib_active_speed_enum_to_rate(u8 active_speed, + int *rate, + char **speed) +{ + switch (active_speed) { + case IB_SPEED_DDR: + *speed = " DDR"; + *rate = 50; + break; + case IB_SPEED_QDR: + *speed = " QDR"; + *rate = 100; + break; + case IB_SPEED_FDR10: + *speed = " FDR10"; + *rate = 100; + break; + case IB_SPEED_FDR: + *speed = " FDR"; + *rate = 140; + break; + case IB_SPEED_EDR: + *speed = " EDR"; + *rate = 250; + break; + case IB_SPEED_SDR: + default: /* default to SDR for invalid rates */ + *rate = 25; + break; + } +} + +#include <rdma/rdma_cm.h> + +static inline struct rdma_cm_id * +rdma_create_id_compat(rdma_cm_event_handler event_handler, + void *context, enum rdma_port_space ps, + enum ib_qp_type qp_type) +{ + return (rdma_create_id(&init_net, event_handler, context, ps, qp_type)); +} + +#undef rdma_create_id +#define rdma_create_id(...) \ + rdma_create_id_compat(__VA_ARGS__) + +#endif /* IB_VERBS_COMPAT_H */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201803051324.w25DOlB5069385>