root/drivers/infiniband/hw/bnxt_re/ib_verbs.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   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 
  42 struct bnxt_re_gid_ctx {
  43         u32                     idx;
  44         u32                     refcnt;
  45 };
  46 
  47 #define BNXT_RE_FENCE_BYTES     64
  48 struct 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 
  58 struct 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 
  65 struct bnxt_re_ah {
  66         struct ib_ah            ib_ah;
  67         struct bnxt_re_dev      *rdev;
  68         struct bnxt_qplib_ah    qplib_ah;
  69 };
  70 
  71 struct 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 
  80 struct 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 
  96 struct 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 
 109 struct 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 
 119 struct bnxt_re_frpl {
 120         struct bnxt_re_dev              *rdev;
 121         struct bnxt_qplib_frpl          qplib_frpl;
 122         u64                             *page_list;
 123 };
 124 
 125 struct bnxt_re_fmr {
 126         struct bnxt_re_dev      *rdev;
 127         struct ib_fmr           ib_fmr;
 128         struct bnxt_qplib_mrw   qplib_fmr;
 129 };
 130 
 131 struct bnxt_re_mw {
 132         struct bnxt_re_dev      *rdev;
 133         struct ib_mw            ib_mw;
 134         struct bnxt_qplib_mrw   qplib_mw;
 135 };
 136 
 137 struct 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 
 145 int bnxt_re_query_device(struct ib_device *ibdev,
 146                          struct ib_device_attr *ib_attr,
 147                          struct ib_udata *udata);
 148 int bnxt_re_modify_device(struct ib_device *ibdev,
 149                           int device_modify_mask,
 150                           struct ib_device_modify *device_modify);
 151 int bnxt_re_query_port(struct ib_device *ibdev, u8 port_num,
 152                        struct ib_port_attr *port_attr);
 153 int bnxt_re_get_port_immutable(struct ib_device *ibdev, u8 port_num,
 154                                struct ib_port_immutable *immutable);
 155 void bnxt_re_query_fw_str(struct ib_device *ibdev, char *str);
 156 int bnxt_re_query_pkey(struct ib_device *ibdev, u8 port_num,
 157                        u16 index, u16 *pkey);
 158 int bnxt_re_del_gid(const struct ib_gid_attr *attr, void **context);
 159 int bnxt_re_add_gid(const struct ib_gid_attr *attr, void **context);
 160 int bnxt_re_query_gid(struct ib_device *ibdev, u8 port_num,
 161                       int index, union ib_gid *gid);
 162 enum rdma_link_layer bnxt_re_get_link_layer(struct ib_device *ibdev,
 163                                             u8 port_num);
 164 int bnxt_re_alloc_pd(struct ib_pd *pd, struct ib_udata *udata);
 165 void bnxt_re_dealloc_pd(struct ib_pd *pd, struct ib_udata *udata);
 166 int bnxt_re_create_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr, u32 flags,
 167                       struct ib_udata *udata);
 168 int bnxt_re_modify_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr);
 169 int bnxt_re_query_ah(struct ib_ah *ah, struct rdma_ah_attr *ah_attr);
 170 void bnxt_re_destroy_ah(struct ib_ah *ah, u32 flags);
 171 int bnxt_re_create_srq(struct ib_srq *srq,
 172                        struct ib_srq_init_attr *srq_init_attr,
 173                        struct ib_udata *udata);
 174 int 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);
 177 int bnxt_re_query_srq(struct ib_srq *srq, struct ib_srq_attr *srq_attr);
 178 void bnxt_re_destroy_srq(struct ib_srq *srq, struct ib_udata *udata);
 179 int 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);
 181 struct ib_qp *bnxt_re_create_qp(struct ib_pd *pd,
 182                                 struct ib_qp_init_attr *qp_init_attr,
 183                                 struct ib_udata *udata);
 184 int bnxt_re_modify_qp(struct ib_qp *qp, struct ib_qp_attr *qp_attr,
 185                       int qp_attr_mask, struct ib_udata *udata);
 186 int 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);
 188 int bnxt_re_destroy_qp(struct ib_qp *qp, struct ib_udata *udata);
 189 int bnxt_re_post_send(struct ib_qp *qp, const struct ib_send_wr *send_wr,
 190                       const struct ib_send_wr **bad_send_wr);
 191 int bnxt_re_post_recv(struct ib_qp *qp, const struct ib_recv_wr *recv_wr,
 192                       const struct ib_recv_wr **bad_recv_wr);
 193 int bnxt_re_create_cq(struct ib_cq *ibcq, const struct ib_cq_init_attr *attr,
 194                       struct ib_udata *udata);
 195 void bnxt_re_destroy_cq(struct ib_cq *cq, struct ib_udata *udata);
 196 int bnxt_re_poll_cq(struct ib_cq *cq, int num_entries, struct ib_wc *wc);
 197 int bnxt_re_req_notify_cq(struct ib_cq *cq, enum ib_cq_notify_flags flags);
 198 struct ib_mr *bnxt_re_get_dma_mr(struct ib_pd *pd, int mr_access_flags);
 199 
 200 int bnxt_re_map_mr_sg(struct ib_mr *ib_mr, struct scatterlist *sg, int sg_nents,
 201                       unsigned int *sg_offset);
 202 struct 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);
 204 int bnxt_re_dereg_mr(struct ib_mr *mr, struct ib_udata *udata);
 205 struct ib_mw *bnxt_re_alloc_mw(struct ib_pd *ib_pd, enum ib_mw_type type,
 206                                struct ib_udata *udata);
 207 int bnxt_re_dealloc_mw(struct ib_mw *mw);
 208 struct 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);
 211 int bnxt_re_alloc_ucontext(struct ib_ucontext *ctx, struct ib_udata *udata);
 212 void bnxt_re_dealloc_ucontext(struct ib_ucontext *context);
 213 int bnxt_re_mmap(struct ib_ucontext *context, struct vm_area_struct *vma);
 214 
 215 unsigned long bnxt_re_lock_cqs(struct bnxt_re_qp *qp);
 216 void bnxt_re_unlock_cqs(struct bnxt_re_qp *qp, unsigned long flags);
 217 #endif /* __BNXT_RE_IB_VERBS_H__ */

/* [<][>][^][v][top][bottom][index][help] */