linux/drivers/infiniband/hw/bnxt_re/ib_verbs.h
<<
>>
Prefs
   1/*
   2 * Broadcom NetXtreme-E RoCE driver.
   3 *
   4 * Copyright (c) 2016 - 2017, Broadcom. All rights reserved.  The term
   5 * Broadcom refers to Broadcom Limited and/or its subsidiaries.
   6 *
   7 * This software is available to you under a choice of one of two
   8 * licenses.  You may choose to be licensed under the terms of the GNU
   9 * General Public License (GPL) Version 2, available from the file
  10 * COPYING in the main directory of this source tree, or the
  11 * BSD license below:
  12 *
  13 * Redistribution and use in source and binary forms, with or without
  14 * modification, are permitted provided that the following conditions
  15 * are met:
  16 *
  17 * 1. Redistributions of source code must retain the above copyright
  18 *    notice, this list of conditions and the following disclaimer.
  19 * 2. Redistributions in binary form must reproduce the above copyright
  20 *    notice, this list of conditions and the following disclaimer in
  21 *    the documentation and/or other materials provided with the
  22 *    distribution.
  23 *
  24 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
  25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  26 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  27 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS
  28 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
  31 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  32 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
  33 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
  34 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  35 *
  36 * Description: IB Verbs interpreter (header)
  37 */
  38
  39#ifndef __BNXT_RE_IB_VERBS_H__
  40#define __BNXT_RE_IB_VERBS_H__
  41
  42struct bnxt_re_gid_ctx {
  43        u32                     idx;
  44        u32                     refcnt;
  45};
  46
  47#define BNXT_RE_FENCE_BYTES     64
  48struct bnxt_re_fence_data {
  49        u32 size;
  50        u8 va[BNXT_RE_FENCE_BYTES];
  51        dma_addr_t dma_addr;
  52        struct bnxt_re_mr *mr;
  53        struct ib_mw *mw;
  54        struct bnxt_qplib_swqe bind_wqe;
  55        u32 bind_rkey;
  56};
  57
  58struct bnxt_re_pd {
  59        struct ib_pd            ib_pd;
  60        struct bnxt_re_dev      *rdev;
  61        struct bnxt_qplib_pd    qplib_pd;
  62        struct bnxt_re_fence_data fence;
  63};
  64
  65struct bnxt_re_ah {
  66        struct ib_ah            ib_ah;
  67        struct bnxt_re_dev      *rdev;
  68        struct bnxt_qplib_ah    qplib_ah;
  69};
  70
  71struct bnxt_re_srq {
  72        struct ib_srq           ib_srq;
  73        struct bnxt_re_dev      *rdev;
  74        u32                     srq_limit;
  75        struct bnxt_qplib_srq   qplib_srq;
  76        struct ib_umem          *umem;
  77        spinlock_t              lock;           /* protect srq */
  78};
  79
  80struct bnxt_re_qp {
  81        struct list_head        list;
  82        struct bnxt_re_dev      *rdev;
  83        struct ib_qp            ib_qp;
  84        spinlock_t              sq_lock;        /* protect sq */
  85        spinlock_t              rq_lock;        /* protect rq */
  86        struct bnxt_qplib_qp    qplib_qp;
  87        struct ib_umem          *sumem;
  88        struct ib_umem          *rumem;
  89        /* QP1 */
  90        u32                     send_psn;
  91        struct ib_ud_header     qp1_hdr;
  92        struct bnxt_re_cq       *scq;
  93        struct bnxt_re_cq       *rcq;
  94};
  95
  96struct bnxt_re_cq {
  97        struct ib_cq            ib_cq;
  98        struct bnxt_re_dev      *rdev;
  99        spinlock_t              cq_lock;        /* protect cq */
 100        u16                     cq_count;
 101        u16                     cq_period;
 102        struct bnxt_qplib_cq    qplib_cq;
 103        struct bnxt_qplib_cqe   *cql;
 104#define MAX_CQL_PER_POLL        1024
 105        u32                     max_cql;
 106        struct ib_umem          *umem;
 107};
 108
 109struct bnxt_re_mr {
 110        struct bnxt_re_dev      *rdev;
 111        struct ib_mr            ib_mr;
 112        struct ib_umem          *ib_umem;
 113        struct bnxt_qplib_mrw   qplib_mr;
 114        u32                     npages;
 115        u64                     *pages;
 116        struct bnxt_qplib_frpl  qplib_frpl;
 117};
 118
 119struct bnxt_re_frpl {
 120        struct bnxt_re_dev              *rdev;
 121        struct bnxt_qplib_frpl          qplib_frpl;
 122        u64                             *page_list;
 123};
 124
 125struct bnxt_re_fmr {
 126        struct bnxt_re_dev      *rdev;
 127        struct ib_fmr           ib_fmr;
 128        struct bnxt_qplib_mrw   qplib_fmr;
 129};
 130
 131struct bnxt_re_mw {
 132        struct bnxt_re_dev      *rdev;
 133        struct ib_mw            ib_mw;
 134        struct bnxt_qplib_mrw   qplib_mw;
 135};
 136
 137struct bnxt_re_ucontext {
 138        struct ib_ucontext      ib_uctx;
 139        struct bnxt_re_dev      *rdev;
 140        struct bnxt_qplib_dpi   dpi;
 141        void                    *shpg;
 142        spinlock_t              sh_lock;        /* protect shpg */
 143};
 144
 145int bnxt_re_query_device(struct ib_device *ibdev,
 146                         struct ib_device_attr *ib_attr,
 147                         struct ib_udata *udata);
 148int bnxt_re_modify_device(struct ib_device *ibdev,
 149                          int device_modify_mask,
 150                          struct ib_device_modify *device_modify);
 151int bnxt_re_query_port(struct ib_device *ibdev, u8 port_num,
 152                       struct ib_port_attr *port_attr);
 153int bnxt_re_get_port_immutable(struct ib_device *ibdev, u8 port_num,
 154                               struct ib_port_immutable *immutable);
 155void bnxt_re_query_fw_str(struct ib_device *ibdev, char *str);
 156int bnxt_re_query_pkey(struct ib_device *ibdev, u8 port_num,
 157                       u16 index, u16 *pkey);
 158int bnxt_re_del_gid(const struct ib_gid_attr *attr, void **context);
 159int bnxt_re_add_gid(const struct ib_gid_attr *attr, void **context);
 160int bnxt_re_query_gid(struct ib_device *ibdev, u8 port_num,
 161                      int index, union ib_gid *gid);
 162enum rdma_link_layer bnxt_re_get_link_layer(struct ib_device *ibdev,
 163                                            u8 port_num);
 164int bnxt_re_alloc_pd(struct ib_pd *pd, struct ib_udata *udata);
 165void bnxt_re_dealloc_pd(struct ib_pd *pd, struct ib_udata *udata);
 166int bnxt_re_create_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr, u32 flags,
 167                      struct ib_udata *udata);
 168int bnxt_re_modify_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr);
 169int bnxt_re_query_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr);
 170void bnxt_re_destroy_ah(struct ib_ah *ah, u32 flags);
 171int bnxt_re_create_srq(struct ib_srq *srq,
 172                       struct ib_srq_init_attr *srq_init_attr,
 173                       struct ib_udata *udata);
 174int bnxt_re_modify_srq(struct ib_srq *srq, struct ib_srq_attr *srq_attr,
 175                       enum ib_srq_attr_mask srq_attr_mask,
 176                       struct ib_udata *udata);
 177int bnxt_re_query_srq(struct ib_srq *srq, struct ib_srq_attr *srq_attr);
 178void bnxt_re_destroy_srq(struct ib_srq *srq, struct ib_udata *udata);
 179int bnxt_re_post_srq_recv(struct ib_srq *srq, const struct ib_recv_wr *recv_wr,
 180                          const struct ib_recv_wr **bad_recv_wr);
 181struct ib_qp *bnxt_re_create_qp(struct ib_pd *pd,
 182                                struct ib_qp_init_attr *qp_init_attr,
 183                                struct ib_udata *udata);
 184int bnxt_re_modify_qp(struct ib_qp *qp, struct ib_qp_attr *qp_attr,
 185                      int qp_attr_mask, struct ib_udata *udata);
 186int bnxt_re_query_qp(struct ib_qp *qp, struct ib_qp_attr *qp_attr,
 187                     int qp_attr_mask, struct ib_qp_init_attr *qp_init_attr);
 188int bnxt_re_destroy_qp(struct ib_qp *qp, struct ib_udata *udata);
 189int bnxt_re_post_send(struct ib_qp *qp, const struct ib_send_wr *send_wr,
 190                      const struct ib_send_wr **bad_send_wr);
 191int bnxt_re_post_recv(struct ib_qp *qp, const struct ib_recv_wr *recv_wr,
 192                      const struct ib_recv_wr **bad_recv_wr);
 193int bnxt_re_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
 194                      struct ib_udata *udata);
 195void bnxt_re_destroy_cq(struct ib_cq *cq, struct ib_udata *udata);
 196int bnxt_re_poll_cq(struct ib_cq *cq, int num_entries, struct ib_wc *wc);
 197int bnxt_re_req_notify_cq(struct ib_cq *cq, enum ib_cq_notify_flags flags);
 198struct ib_mr *bnxt_re_get_dma_mr(struct ib_pd *pd, int mr_access_flags);
 199
 200int bnxt_re_map_mr_sg(struct ib_mr *ib_mr, struct scatterlist *sg, int sg_nents,
 201                      unsigned int *sg_offset);
 202struct ib_mr *bnxt_re_alloc_mr(struct ib_pd *ib_pd, enum ib_mr_type mr_type,
 203                               u32 max_num_sg, struct ib_udata *udata);
 204int bnxt_re_dereg_mr(struct ib_mr *mr, struct ib_udata *udata);
 205struct ib_mw *bnxt_re_alloc_mw(struct ib_pd *ib_pd, enum ib_mw_type type,
 206                               struct ib_udata *udata);
 207int bnxt_re_dealloc_mw(struct ib_mw *mw);
 208struct ib_mr *bnxt_re_reg_user_mr(struct ib_pd *pd, u64 start, u64 length,
 209                                  u64 virt_addr, int mr_access_flags,
 210                                  struct ib_udata *udata);
 211int bnxt_re_alloc_ucontext(struct ib_ucontext *ctx, struct ib_udata *udata);
 212void bnxt_re_dealloc_ucontext(struct ib_ucontext *context);
 213int bnxt_re_mmap(struct ib_ucontext *context, struct vm_area_struct *vma);
 214
 215unsigned long bnxt_re_lock_cqs(struct bnxt_re_qp *qp);
 216void bnxt_re_unlock_cqs(struct bnxt_re_qp *qp, unsigned long flags);
 217#endif /* __BNXT_RE_IB_VERBS_H__ */
 218