Merge tag 'hisi-fixes-for-4.14' of git://github.com/hisilicon/linux-hisi into next...
[sfrench/cifs-2.6.git] / drivers / infiniband / hw / qedr / verbs.c
1 /* QLogic qedr NIC Driver
2  * Copyright (c) 2015-2016  QLogic Corporation
3  *
4  * This software is available to you under a choice of one of two
5  * licenses.  You may choose to be licensed under the terms of the GNU
6  * General Public License (GPL) Version 2, available from the file
7  * COPYING in the main directory of this source tree, or the
8  * OpenIB.org BSD license below:
9  *
10  *     Redistribution and use in source and binary forms, with or
11  *     without modification, are permitted provided that the following
12  *     conditions are met:
13  *
14  *      - Redistributions of source code must retain the above
15  *        copyright notice, this list of conditions and the following
16  *        disclaimer.
17  *
18  *      - Redistributions in binary form must reproduce the above
19  *        copyright notice, this list of conditions and the following
20  *        disclaimer in the documentation and /or other materials
21  *        provided with the distribution.
22  *
23  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30  * SOFTWARE.
31  */
32 #include <linux/dma-mapping.h>
33 #include <linux/crc32.h>
34 #include <net/ip.h>
35 #include <net/ipv6.h>
36 #include <net/udp.h>
37 #include <linux/iommu.h>
38
39 #include <rdma/ib_verbs.h>
40 #include <rdma/ib_user_verbs.h>
41 #include <rdma/iw_cm.h>
42 #include <rdma/ib_umem.h>
43 #include <rdma/ib_addr.h>
44 #include <rdma/ib_cache.h>
45
46 #include <linux/qed/common_hsi.h>
47 #include "qedr_hsi_rdma.h"
48 #include <linux/qed/qed_if.h>
49 #include "qedr.h"
50 #include "verbs.h"
51 #include <rdma/qedr-abi.h>
52 #include "qedr_cm.h"
53
54 #define DB_ADDR_SHIFT(addr)             ((addr) << DB_PWM_ADDR_OFFSET_SHIFT)
55
56 static inline int qedr_ib_copy_to_udata(struct ib_udata *udata, void *src,
57                                         size_t len)
58 {
59         size_t min_len = min_t(size_t, len, udata->outlen);
60
61         return ib_copy_to_udata(udata, src, min_len);
62 }
63
64 int qedr_query_pkey(struct ib_device *ibdev, u8 port, u16 index, u16 *pkey)
65 {
66         if (index > QEDR_ROCE_PKEY_TABLE_LEN)
67                 return -EINVAL;
68
69         *pkey = QEDR_ROCE_PKEY_DEFAULT;
70         return 0;
71 }
72
73 int qedr_query_gid(struct ib_device *ibdev, u8 port, int index,
74                    union ib_gid *sgid)
75 {
76         struct qedr_dev *dev = get_qedr_dev(ibdev);
77         int rc = 0;
78
79         if (!rdma_cap_roce_gid_table(ibdev, port))
80                 return -ENODEV;
81
82         rc = ib_get_cached_gid(ibdev, port, index, sgid, NULL);
83         if (rc == -EAGAIN) {
84                 memcpy(sgid, &zgid, sizeof(*sgid));
85                 return 0;
86         }
87
88         DP_DEBUG(dev, QEDR_MSG_INIT, "query gid: index=%d %llx:%llx\n", index,
89                  sgid->global.interface_id, sgid->global.subnet_prefix);
90
91         return rc;
92 }
93
94 int qedr_add_gid(struct ib_device *device, u8 port_num,
95                  unsigned int index, const union ib_gid *gid,
96                  const struct ib_gid_attr *attr, void **context)
97 {
98         if (!rdma_cap_roce_gid_table(device, port_num))
99                 return -EINVAL;
100
101         if (port_num > QEDR_MAX_PORT)
102                 return -EINVAL;
103
104         if (!context)
105                 return -EINVAL;
106
107         return 0;
108 }
109
110 int qedr_del_gid(struct ib_device *device, u8 port_num,
111                  unsigned int index, void **context)
112 {
113         if (!rdma_cap_roce_gid_table(device, port_num))
114                 return -EINVAL;
115
116         if (port_num > QEDR_MAX_PORT)
117                 return -EINVAL;
118
119         if (!context)
120                 return -EINVAL;
121
122         return 0;
123 }
124
125 int qedr_query_device(struct ib_device *ibdev,
126                       struct ib_device_attr *attr, struct ib_udata *udata)
127 {
128         struct qedr_dev *dev = get_qedr_dev(ibdev);
129         struct qedr_device_attr *qattr = &dev->attr;
130
131         if (!dev->rdma_ctx) {
132                 DP_ERR(dev,
133                        "qedr_query_device called with invalid params rdma_ctx=%p\n",
134                        dev->rdma_ctx);
135                 return -EINVAL;
136         }
137
138         memset(attr, 0, sizeof(*attr));
139
140         attr->fw_ver = qattr->fw_ver;
141         attr->sys_image_guid = qattr->sys_image_guid;
142         attr->max_mr_size = qattr->max_mr_size;
143         attr->page_size_cap = qattr->page_size_caps;
144         attr->vendor_id = qattr->vendor_id;
145         attr->vendor_part_id = qattr->vendor_part_id;
146         attr->hw_ver = qattr->hw_ver;
147         attr->max_qp = qattr->max_qp;
148         attr->max_qp_wr = max_t(u32, qattr->max_sqe, qattr->max_rqe);
149         attr->device_cap_flags = IB_DEVICE_CURR_QP_STATE_MOD |
150             IB_DEVICE_RC_RNR_NAK_GEN |
151             IB_DEVICE_LOCAL_DMA_LKEY | IB_DEVICE_MEM_MGT_EXTENSIONS;
152
153         attr->max_sge = qattr->max_sge;
154         attr->max_sge_rd = qattr->max_sge;
155         attr->max_cq = qattr->max_cq;
156         attr->max_cqe = qattr->max_cqe;
157         attr->max_mr = qattr->max_mr;
158         attr->max_mw = qattr->max_mw;
159         attr->max_pd = qattr->max_pd;
160         attr->atomic_cap = dev->atomic_cap;
161         attr->max_fmr = qattr->max_fmr;
162         attr->max_map_per_fmr = 16;
163         attr->max_qp_init_rd_atom =
164             1 << (fls(qattr->max_qp_req_rd_atomic_resc) - 1);
165         attr->max_qp_rd_atom =
166             min(1 << (fls(qattr->max_qp_resp_rd_atomic_resc) - 1),
167                 attr->max_qp_init_rd_atom);
168
169         attr->max_srq = qattr->max_srq;
170         attr->max_srq_sge = qattr->max_srq_sge;
171         attr->max_srq_wr = qattr->max_srq_wr;
172
173         attr->local_ca_ack_delay = qattr->dev_ack_delay;
174         attr->max_fast_reg_page_list_len = qattr->max_mr / 8;
175         attr->max_pkeys = QEDR_ROCE_PKEY_MAX;
176         attr->max_ah = qattr->max_ah;
177
178         return 0;
179 }
180
181 #define QEDR_SPEED_SDR          (1)
182 #define QEDR_SPEED_DDR          (2)
183 #define QEDR_SPEED_QDR          (4)
184 #define QEDR_SPEED_FDR10        (8)
185 #define QEDR_SPEED_FDR          (16)
186 #define QEDR_SPEED_EDR          (32)
187
188 static inline void get_link_speed_and_width(int speed, u8 *ib_speed,
189                                             u8 *ib_width)
190 {
191         switch (speed) {
192         case 1000:
193                 *ib_speed = QEDR_SPEED_SDR;
194                 *ib_width = IB_WIDTH_1X;
195                 break;
196         case 10000:
197                 *ib_speed = QEDR_SPEED_QDR;
198                 *ib_width = IB_WIDTH_1X;
199                 break;
200
201         case 20000:
202                 *ib_speed = QEDR_SPEED_DDR;
203                 *ib_width = IB_WIDTH_4X;
204                 break;
205
206         case 25000:
207                 *ib_speed = QEDR_SPEED_EDR;
208                 *ib_width = IB_WIDTH_1X;
209                 break;
210
211         case 40000:
212                 *ib_speed = QEDR_SPEED_QDR;
213                 *ib_width = IB_WIDTH_4X;
214                 break;
215
216         case 50000:
217                 *ib_speed = QEDR_SPEED_QDR;
218                 *ib_width = IB_WIDTH_4X;
219                 break;
220
221         case 100000:
222                 *ib_speed = QEDR_SPEED_EDR;
223                 *ib_width = IB_WIDTH_4X;
224                 break;
225
226         default:
227                 /* Unsupported */
228                 *ib_speed = QEDR_SPEED_SDR;
229                 *ib_width = IB_WIDTH_1X;
230         }
231 }
232
233 int qedr_query_port(struct ib_device *ibdev, u8 port, struct ib_port_attr *attr)
234 {
235         struct qedr_dev *dev;
236         struct qed_rdma_port *rdma_port;
237
238         dev = get_qedr_dev(ibdev);
239         if (port > 1) {
240                 DP_ERR(dev, "invalid_port=0x%x\n", port);
241                 return -EINVAL;
242         }
243
244         if (!dev->rdma_ctx) {
245                 DP_ERR(dev, "rdma_ctx is NULL\n");
246                 return -EINVAL;
247         }
248
249         rdma_port = dev->ops->rdma_query_port(dev->rdma_ctx);
250
251         /* *attr being zeroed by the caller, avoid zeroing it here */
252         if (rdma_port->port_state == QED_RDMA_PORT_UP) {
253                 attr->state = IB_PORT_ACTIVE;
254                 attr->phys_state = 5;
255         } else {
256                 attr->state = IB_PORT_DOWN;
257                 attr->phys_state = 3;
258         }
259         attr->max_mtu = IB_MTU_4096;
260         attr->active_mtu = iboe_get_mtu(dev->ndev->mtu);
261         attr->lid = 0;
262         attr->lmc = 0;
263         attr->sm_lid = 0;
264         attr->sm_sl = 0;
265         attr->port_cap_flags = IB_PORT_IP_BASED_GIDS;
266         attr->gid_tbl_len = QEDR_MAX_SGID;
267         attr->pkey_tbl_len = QEDR_ROCE_PKEY_TABLE_LEN;
268         attr->bad_pkey_cntr = rdma_port->pkey_bad_counter;
269         attr->qkey_viol_cntr = 0;
270         get_link_speed_and_width(rdma_port->link_speed,
271                                  &attr->active_speed, &attr->active_width);
272         attr->max_msg_sz = rdma_port->max_msg_size;
273         attr->max_vl_num = 4;
274
275         return 0;
276 }
277
278 int qedr_modify_port(struct ib_device *ibdev, u8 port, int mask,
279                      struct ib_port_modify *props)
280 {
281         struct qedr_dev *dev;
282
283         dev = get_qedr_dev(ibdev);
284         if (port > 1) {
285                 DP_ERR(dev, "invalid_port=0x%x\n", port);
286                 return -EINVAL;
287         }
288
289         return 0;
290 }
291
292 static int qedr_add_mmap(struct qedr_ucontext *uctx, u64 phy_addr,
293                          unsigned long len)
294 {
295         struct qedr_mm *mm;
296
297         mm = kzalloc(sizeof(*mm), GFP_KERNEL);
298         if (!mm)
299                 return -ENOMEM;
300
301         mm->key.phy_addr = phy_addr;
302         /* This function might be called with a length which is not a multiple
303          * of PAGE_SIZE, while the mapping is PAGE_SIZE grained and the kernel
304          * forces this granularity by increasing the requested size if needed.
305          * When qedr_mmap is called, it will search the list with the updated
306          * length as a key. To prevent search failures, the length is rounded up
307          * in advance to PAGE_SIZE.
308          */
309         mm->key.len = roundup(len, PAGE_SIZE);
310         INIT_LIST_HEAD(&mm->entry);
311
312         mutex_lock(&uctx->mm_list_lock);
313         list_add(&mm->entry, &uctx->mm_head);
314         mutex_unlock(&uctx->mm_list_lock);
315
316         DP_DEBUG(uctx->dev, QEDR_MSG_MISC,
317                  "added (addr=0x%llx,len=0x%lx) for ctx=%p\n",
318                  (unsigned long long)mm->key.phy_addr,
319                  (unsigned long)mm->key.len, uctx);
320
321         return 0;
322 }
323
324 static bool qedr_search_mmap(struct qedr_ucontext *uctx, u64 phy_addr,
325                              unsigned long len)
326 {
327         bool found = false;
328         struct qedr_mm *mm;
329
330         mutex_lock(&uctx->mm_list_lock);
331         list_for_each_entry(mm, &uctx->mm_head, entry) {
332                 if (len != mm->key.len || phy_addr != mm->key.phy_addr)
333                         continue;
334
335                 found = true;
336                 break;
337         }
338         mutex_unlock(&uctx->mm_list_lock);
339         DP_DEBUG(uctx->dev, QEDR_MSG_MISC,
340                  "searched for (addr=0x%llx,len=0x%lx) for ctx=%p, result=%d\n",
341                  mm->key.phy_addr, mm->key.len, uctx, found);
342
343         return found;
344 }
345
346 struct ib_ucontext *qedr_alloc_ucontext(struct ib_device *ibdev,
347                                         struct ib_udata *udata)
348 {
349         int rc;
350         struct qedr_ucontext *ctx;
351         struct qedr_alloc_ucontext_resp uresp;
352         struct qedr_dev *dev = get_qedr_dev(ibdev);
353         struct qed_rdma_add_user_out_params oparams;
354
355         if (!udata)
356                 return ERR_PTR(-EFAULT);
357
358         ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
359         if (!ctx)
360                 return ERR_PTR(-ENOMEM);
361
362         rc = dev->ops->rdma_add_user(dev->rdma_ctx, &oparams);
363         if (rc) {
364                 DP_ERR(dev,
365                        "failed to allocate a DPI for a new RoCE application, rc=%d. To overcome this consider to increase the number of DPIs, increase the doorbell BAR size or just close unnecessary RoCE applications. In order to increase the number of DPIs consult the qedr readme\n",
366                        rc);
367                 goto err;
368         }
369
370         ctx->dpi = oparams.dpi;
371         ctx->dpi_addr = oparams.dpi_addr;
372         ctx->dpi_phys_addr = oparams.dpi_phys_addr;
373         ctx->dpi_size = oparams.dpi_size;
374         INIT_LIST_HEAD(&ctx->mm_head);
375         mutex_init(&ctx->mm_list_lock);
376
377         memset(&uresp, 0, sizeof(uresp));
378
379         uresp.db_pa = ctx->dpi_phys_addr;
380         uresp.db_size = ctx->dpi_size;
381         uresp.max_send_wr = dev->attr.max_sqe;
382         uresp.max_recv_wr = dev->attr.max_rqe;
383         uresp.max_srq_wr = dev->attr.max_srq_wr;
384         uresp.sges_per_send_wr = QEDR_MAX_SQE_ELEMENTS_PER_SQE;
385         uresp.sges_per_recv_wr = QEDR_MAX_RQE_ELEMENTS_PER_RQE;
386         uresp.sges_per_srq_wr = dev->attr.max_srq_sge;
387         uresp.max_cqes = QEDR_MAX_CQES;
388
389         rc = qedr_ib_copy_to_udata(udata, &uresp, sizeof(uresp));
390         if (rc)
391                 goto err;
392
393         ctx->dev = dev;
394
395         rc = qedr_add_mmap(ctx, ctx->dpi_phys_addr, ctx->dpi_size);
396         if (rc)
397                 goto err;
398
399         DP_DEBUG(dev, QEDR_MSG_INIT, "Allocating user context %p\n",
400                  &ctx->ibucontext);
401         return &ctx->ibucontext;
402
403 err:
404         kfree(ctx);
405         return ERR_PTR(rc);
406 }
407
408 int qedr_dealloc_ucontext(struct ib_ucontext *ibctx)
409 {
410         struct qedr_ucontext *uctx = get_qedr_ucontext(ibctx);
411         struct qedr_mm *mm, *tmp;
412         int status = 0;
413
414         DP_DEBUG(uctx->dev, QEDR_MSG_INIT, "Deallocating user context %p\n",
415                  uctx);
416         uctx->dev->ops->rdma_remove_user(uctx->dev->rdma_ctx, uctx->dpi);
417
418         list_for_each_entry_safe(mm, tmp, &uctx->mm_head, entry) {
419                 DP_DEBUG(uctx->dev, QEDR_MSG_MISC,
420                          "deleted (addr=0x%llx,len=0x%lx) for ctx=%p\n",
421                          mm->key.phy_addr, mm->key.len, uctx);
422                 list_del(&mm->entry);
423                 kfree(mm);
424         }
425
426         kfree(uctx);
427         return status;
428 }
429
430 int qedr_mmap(struct ib_ucontext *context, struct vm_area_struct *vma)
431 {
432         struct qedr_ucontext *ucontext = get_qedr_ucontext(context);
433         struct qedr_dev *dev = get_qedr_dev(context->device);
434         unsigned long vm_page = vma->vm_pgoff << PAGE_SHIFT;
435         u64 unmapped_db = dev->db_phys_addr;
436         unsigned long len = (vma->vm_end - vma->vm_start);
437         int rc = 0;
438         bool found;
439
440         DP_DEBUG(dev, QEDR_MSG_INIT,
441                  "qedr_mmap called vm_page=0x%lx vm_pgoff=0x%lx unmapped_db=0x%llx db_size=%x, len=%lx\n",
442                  vm_page, vma->vm_pgoff, unmapped_db, dev->db_size, len);
443         if (vma->vm_start & (PAGE_SIZE - 1)) {
444                 DP_ERR(dev, "Vma_start not page aligned = %ld\n",
445                        vma->vm_start);
446                 return -EINVAL;
447         }
448
449         found = qedr_search_mmap(ucontext, vm_page, len);
450         if (!found) {
451                 DP_ERR(dev, "Vma_pgoff not found in mapped array = %ld\n",
452                        vma->vm_pgoff);
453                 return -EINVAL;
454         }
455
456         DP_DEBUG(dev, QEDR_MSG_INIT, "Mapping doorbell bar\n");
457
458         if ((vm_page >= unmapped_db) && (vm_page <= (unmapped_db +
459                                                      dev->db_size))) {
460                 DP_DEBUG(dev, QEDR_MSG_INIT, "Mapping doorbell bar\n");
461                 if (vma->vm_flags & VM_READ) {
462                         DP_ERR(dev, "Trying to map doorbell bar for read\n");
463                         return -EPERM;
464                 }
465
466                 vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
467
468                 rc = io_remap_pfn_range(vma, vma->vm_start, vma->vm_pgoff,
469                                         PAGE_SIZE, vma->vm_page_prot);
470         } else {
471                 DP_DEBUG(dev, QEDR_MSG_INIT, "Mapping chains\n");
472                 rc = remap_pfn_range(vma, vma->vm_start,
473                                      vma->vm_pgoff, len, vma->vm_page_prot);
474         }
475         DP_DEBUG(dev, QEDR_MSG_INIT, "qedr_mmap return code: %d\n", rc);
476         return rc;
477 }
478
479 struct ib_pd *qedr_alloc_pd(struct ib_device *ibdev,
480                             struct ib_ucontext *context, struct ib_udata *udata)
481 {
482         struct qedr_dev *dev = get_qedr_dev(ibdev);
483         struct qedr_pd *pd;
484         u16 pd_id;
485         int rc;
486
487         DP_DEBUG(dev, QEDR_MSG_INIT, "Function called from: %s\n",
488                  (udata && context) ? "User Lib" : "Kernel");
489
490         if (!dev->rdma_ctx) {
491                 DP_ERR(dev, "invlaid RDMA context\n");
492                 return ERR_PTR(-EINVAL);
493         }
494
495         pd = kzalloc(sizeof(*pd), GFP_KERNEL);
496         if (!pd)
497                 return ERR_PTR(-ENOMEM);
498
499         rc = dev->ops->rdma_alloc_pd(dev->rdma_ctx, &pd_id);
500         if (rc)
501                 goto err;
502
503         pd->pd_id = pd_id;
504
505         if (udata && context) {
506                 struct qedr_alloc_pd_uresp uresp;
507
508                 uresp.pd_id = pd_id;
509
510                 rc = qedr_ib_copy_to_udata(udata, &uresp, sizeof(uresp));
511                 if (rc) {
512                         DP_ERR(dev, "copy error pd_id=0x%x.\n", pd_id);
513                         dev->ops->rdma_dealloc_pd(dev->rdma_ctx, pd_id);
514                         goto err;
515                 }
516
517                 pd->uctx = get_qedr_ucontext(context);
518                 pd->uctx->pd = pd;
519         }
520
521         return &pd->ibpd;
522
523 err:
524         kfree(pd);
525         return ERR_PTR(rc);
526 }
527
528 int qedr_dealloc_pd(struct ib_pd *ibpd)
529 {
530         struct qedr_dev *dev = get_qedr_dev(ibpd->device);
531         struct qedr_pd *pd = get_qedr_pd(ibpd);
532
533         if (!pd) {
534                 pr_err("Invalid PD received in dealloc_pd\n");
535                 return -EINVAL;
536         }
537
538         DP_DEBUG(dev, QEDR_MSG_INIT, "Deallocating PD %d\n", pd->pd_id);
539         dev->ops->rdma_dealloc_pd(dev->rdma_ctx, pd->pd_id);
540
541         kfree(pd);
542
543         return 0;
544 }
545
546 static void qedr_free_pbl(struct qedr_dev *dev,
547                           struct qedr_pbl_info *pbl_info, struct qedr_pbl *pbl)
548 {
549         struct pci_dev *pdev = dev->pdev;
550         int i;
551
552         for (i = 0; i < pbl_info->num_pbls; i++) {
553                 if (!pbl[i].va)
554                         continue;
555                 dma_free_coherent(&pdev->dev, pbl_info->pbl_size,
556                                   pbl[i].va, pbl[i].pa);
557         }
558
559         kfree(pbl);
560 }
561
562 #define MIN_FW_PBL_PAGE_SIZE (4 * 1024)
563 #define MAX_FW_PBL_PAGE_SIZE (64 * 1024)
564
565 #define NUM_PBES_ON_PAGE(_page_size) (_page_size / sizeof(u64))
566 #define MAX_PBES_ON_PAGE NUM_PBES_ON_PAGE(MAX_FW_PBL_PAGE_SIZE)
567 #define MAX_PBES_TWO_LAYER (MAX_PBES_ON_PAGE * MAX_PBES_ON_PAGE)
568
569 static struct qedr_pbl *qedr_alloc_pbl_tbl(struct qedr_dev *dev,
570                                            struct qedr_pbl_info *pbl_info,
571                                            gfp_t flags)
572 {
573         struct pci_dev *pdev = dev->pdev;
574         struct qedr_pbl *pbl_table;
575         dma_addr_t *pbl_main_tbl;
576         dma_addr_t pa;
577         void *va;
578         int i;
579
580         pbl_table = kcalloc(pbl_info->num_pbls, sizeof(*pbl_table), flags);
581         if (!pbl_table)
582                 return ERR_PTR(-ENOMEM);
583
584         for (i = 0; i < pbl_info->num_pbls; i++) {
585                 va = dma_alloc_coherent(&pdev->dev, pbl_info->pbl_size,
586                                         &pa, flags);
587                 if (!va)
588                         goto err;
589
590                 memset(va, 0, pbl_info->pbl_size);
591                 pbl_table[i].va = va;
592                 pbl_table[i].pa = pa;
593         }
594
595         /* Two-Layer PBLs, if we have more than one pbl we need to initialize
596          * the first one with physical pointers to all of the rest
597          */
598         pbl_main_tbl = (dma_addr_t *)pbl_table[0].va;
599         for (i = 0; i < pbl_info->num_pbls - 1; i++)
600                 pbl_main_tbl[i] = pbl_table[i + 1].pa;
601
602         return pbl_table;
603
604 err:
605         for (i--; i >= 0; i--)
606                 dma_free_coherent(&pdev->dev, pbl_info->pbl_size,
607                                   pbl_table[i].va, pbl_table[i].pa);
608
609         qedr_free_pbl(dev, pbl_info, pbl_table);
610
611         return ERR_PTR(-ENOMEM);
612 }
613
614 static int qedr_prepare_pbl_tbl(struct qedr_dev *dev,
615                                 struct qedr_pbl_info *pbl_info,
616                                 u32 num_pbes, int two_layer_capable)
617 {
618         u32 pbl_capacity;
619         u32 pbl_size;
620         u32 num_pbls;
621
622         if ((num_pbes > MAX_PBES_ON_PAGE) && two_layer_capable) {
623                 if (num_pbes > MAX_PBES_TWO_LAYER) {
624                         DP_ERR(dev, "prepare pbl table: too many pages %d\n",
625                                num_pbes);
626                         return -EINVAL;
627                 }
628
629                 /* calculate required pbl page size */
630                 pbl_size = MIN_FW_PBL_PAGE_SIZE;
631                 pbl_capacity = NUM_PBES_ON_PAGE(pbl_size) *
632                                NUM_PBES_ON_PAGE(pbl_size);
633
634                 while (pbl_capacity < num_pbes) {
635                         pbl_size *= 2;
636                         pbl_capacity = pbl_size / sizeof(u64);
637                         pbl_capacity = pbl_capacity * pbl_capacity;
638                 }
639
640                 num_pbls = DIV_ROUND_UP(num_pbes, NUM_PBES_ON_PAGE(pbl_size));
641                 num_pbls++;     /* One for the layer0 ( points to the pbls) */
642                 pbl_info->two_layered = true;
643         } else {
644                 /* One layered PBL */
645                 num_pbls = 1;
646                 pbl_size = max_t(u32, MIN_FW_PBL_PAGE_SIZE,
647                                  roundup_pow_of_two((num_pbes * sizeof(u64))));
648                 pbl_info->two_layered = false;
649         }
650
651         pbl_info->num_pbls = num_pbls;
652         pbl_info->pbl_size = pbl_size;
653         pbl_info->num_pbes = num_pbes;
654
655         DP_DEBUG(dev, QEDR_MSG_MR,
656                  "prepare pbl table: num_pbes=%d, num_pbls=%d, pbl_size=%d\n",
657                  pbl_info->num_pbes, pbl_info->num_pbls, pbl_info->pbl_size);
658
659         return 0;
660 }
661
662 static void qedr_populate_pbls(struct qedr_dev *dev, struct ib_umem *umem,
663                                struct qedr_pbl *pbl,
664                                struct qedr_pbl_info *pbl_info, u32 pg_shift)
665 {
666         int shift, pg_cnt, pages, pbe_cnt, total_num_pbes = 0;
667         u32 fw_pg_cnt, fw_pg_per_umem_pg;
668         struct qedr_pbl *pbl_tbl;
669         struct scatterlist *sg;
670         struct regpair *pbe;
671         u64 pg_addr;
672         int entry;
673
674         if (!pbl_info->num_pbes)
675                 return;
676
677         /* If we have a two layered pbl, the first pbl points to the rest
678          * of the pbls and the first entry lays on the second pbl in the table
679          */
680         if (pbl_info->two_layered)
681                 pbl_tbl = &pbl[1];
682         else
683                 pbl_tbl = pbl;
684
685         pbe = (struct regpair *)pbl_tbl->va;
686         if (!pbe) {
687                 DP_ERR(dev, "cannot populate PBL due to a NULL PBE\n");
688                 return;
689         }
690
691         pbe_cnt = 0;
692
693         shift = umem->page_shift;
694
695         fw_pg_per_umem_pg = BIT(umem->page_shift - pg_shift);
696
697         for_each_sg(umem->sg_head.sgl, sg, umem->nmap, entry) {
698                 pages = sg_dma_len(sg) >> shift;
699                 pg_addr = sg_dma_address(sg);
700                 for (pg_cnt = 0; pg_cnt < pages; pg_cnt++) {
701                         for (fw_pg_cnt = 0; fw_pg_cnt < fw_pg_per_umem_pg;) {
702                                 pbe->lo = cpu_to_le32(pg_addr);
703                                 pbe->hi = cpu_to_le32(upper_32_bits(pg_addr));
704
705                                 pg_addr += BIT(pg_shift);
706                                 pbe_cnt++;
707                                 total_num_pbes++;
708                                 pbe++;
709
710                                 if (total_num_pbes == pbl_info->num_pbes)
711                                         return;
712
713                                 /* If the given pbl is full storing the pbes,
714                                  * move to next pbl.
715                                  */
716                                 if (pbe_cnt ==
717                                     (pbl_info->pbl_size / sizeof(u64))) {
718                                         pbl_tbl++;
719                                         pbe = (struct regpair *)pbl_tbl->va;
720                                         pbe_cnt = 0;
721                                 }
722
723                                 fw_pg_cnt++;
724                         }
725                 }
726         }
727 }
728
729 static int qedr_copy_cq_uresp(struct qedr_dev *dev,
730                               struct qedr_cq *cq, struct ib_udata *udata)
731 {
732         struct qedr_create_cq_uresp uresp;
733         int rc;
734
735         memset(&uresp, 0, sizeof(uresp));
736
737         uresp.db_offset = DB_ADDR_SHIFT(DQ_PWM_OFFSET_UCM_RDMA_CQ_CONS_32BIT);
738         uresp.icid = cq->icid;
739
740         rc = qedr_ib_copy_to_udata(udata, &uresp, sizeof(uresp));
741         if (rc)
742                 DP_ERR(dev, "copy error cqid=0x%x.\n", cq->icid);
743
744         return rc;
745 }
746
747 static void consume_cqe(struct qedr_cq *cq)
748 {
749         if (cq->latest_cqe == cq->toggle_cqe)
750                 cq->pbl_toggle ^= RDMA_CQE_REQUESTER_TOGGLE_BIT_MASK;
751
752         cq->latest_cqe = qed_chain_consume(&cq->pbl);
753 }
754
755 static inline int qedr_align_cq_entries(int entries)
756 {
757         u64 size, aligned_size;
758
759         /* We allocate an extra entry that we don't report to the FW. */
760         size = (entries + 1) * QEDR_CQE_SIZE;
761         aligned_size = ALIGN(size, PAGE_SIZE);
762
763         return aligned_size / QEDR_CQE_SIZE;
764 }
765
766 static inline int qedr_init_user_queue(struct ib_ucontext *ib_ctx,
767                                        struct qedr_dev *dev,
768                                        struct qedr_userq *q,
769                                        u64 buf_addr, size_t buf_len,
770                                        int access, int dmasync)
771 {
772         u32 fw_pages;
773         int rc;
774
775         q->buf_addr = buf_addr;
776         q->buf_len = buf_len;
777         q->umem = ib_umem_get(ib_ctx, q->buf_addr, q->buf_len, access, dmasync);
778         if (IS_ERR(q->umem)) {
779                 DP_ERR(dev, "create user queue: failed ib_umem_get, got %ld\n",
780                        PTR_ERR(q->umem));
781                 return PTR_ERR(q->umem);
782         }
783
784         fw_pages = ib_umem_page_count(q->umem) <<
785             (q->umem->page_shift - FW_PAGE_SHIFT);
786
787         rc = qedr_prepare_pbl_tbl(dev, &q->pbl_info, fw_pages, 0);
788         if (rc)
789                 goto err0;
790
791         q->pbl_tbl = qedr_alloc_pbl_tbl(dev, &q->pbl_info, GFP_KERNEL);
792         if (IS_ERR(q->pbl_tbl)) {
793                 rc = PTR_ERR(q->pbl_tbl);
794                 goto err0;
795         }
796
797                 qedr_populate_pbls(dev, q->umem, q->pbl_tbl, &q->pbl_info,
798                                    FW_PAGE_SHIFT);
799
800         return 0;
801
802 err0:
803         ib_umem_release(q->umem);
804
805         return rc;
806 }
807
808 static inline void qedr_init_cq_params(struct qedr_cq *cq,
809                                        struct qedr_ucontext *ctx,
810                                        struct qedr_dev *dev, int vector,
811                                        int chain_entries, int page_cnt,
812                                        u64 pbl_ptr,
813                                        struct qed_rdma_create_cq_in_params
814                                        *params)
815 {
816         memset(params, 0, sizeof(*params));
817         params->cq_handle_hi = upper_32_bits((uintptr_t)cq);
818         params->cq_handle_lo = lower_32_bits((uintptr_t)cq);
819         params->cnq_id = vector;
820         params->cq_size = chain_entries - 1;
821         params->dpi = (ctx) ? ctx->dpi : dev->dpi;
822         params->pbl_num_pages = page_cnt;
823         params->pbl_ptr = pbl_ptr;
824         params->pbl_two_level = 0;
825 }
826
827 static void doorbell_cq(struct qedr_cq *cq, u32 cons, u8 flags)
828 {
829         /* Flush data before signalling doorbell */
830         wmb();
831         cq->db.data.agg_flags = flags;
832         cq->db.data.value = cpu_to_le32(cons);
833         writeq(cq->db.raw, cq->db_addr);
834
835         /* Make sure write would stick */
836         mmiowb();
837 }
838
839 int qedr_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags)
840 {
841         struct qedr_cq *cq = get_qedr_cq(ibcq);
842         unsigned long sflags;
843         struct qedr_dev *dev;
844
845         dev = get_qedr_dev(ibcq->device);
846
847         if (cq->destroyed) {
848                 DP_ERR(dev,
849                        "warning: arm was invoked after destroy for cq %p (icid=%d)\n",
850                        cq, cq->icid);
851                 return -EINVAL;
852         }
853
854
855         if (cq->cq_type == QEDR_CQ_TYPE_GSI)
856                 return 0;
857
858         spin_lock_irqsave(&cq->cq_lock, sflags);
859
860         cq->arm_flags = 0;
861
862         if (flags & IB_CQ_SOLICITED)
863                 cq->arm_flags |= DQ_UCM_ROCE_CQ_ARM_SE_CF_CMD;
864
865         if (flags & IB_CQ_NEXT_COMP)
866                 cq->arm_flags |= DQ_UCM_ROCE_CQ_ARM_CF_CMD;
867
868         doorbell_cq(cq, cq->cq_cons - 1, cq->arm_flags);
869
870         spin_unlock_irqrestore(&cq->cq_lock, sflags);
871
872         return 0;
873 }
874
875 struct ib_cq *qedr_create_cq(struct ib_device *ibdev,
876                              const struct ib_cq_init_attr *attr,
877                              struct ib_ucontext *ib_ctx, struct ib_udata *udata)
878 {
879         struct qedr_ucontext *ctx = get_qedr_ucontext(ib_ctx);
880         struct qed_rdma_destroy_cq_out_params destroy_oparams;
881         struct qed_rdma_destroy_cq_in_params destroy_iparams;
882         struct qedr_dev *dev = get_qedr_dev(ibdev);
883         struct qed_rdma_create_cq_in_params params;
884         struct qedr_create_cq_ureq ureq;
885         int vector = attr->comp_vector;
886         int entries = attr->cqe;
887         struct qedr_cq *cq;
888         int chain_entries;
889         int page_cnt;
890         u64 pbl_ptr;
891         u16 icid;
892         int rc;
893
894         DP_DEBUG(dev, QEDR_MSG_INIT,
895                  "create_cq: called from %s. entries=%d, vector=%d\n",
896                  udata ? "User Lib" : "Kernel", entries, vector);
897
898         if (entries > QEDR_MAX_CQES) {
899                 DP_ERR(dev,
900                        "create cq: the number of entries %d is too high. Must be equal or below %d.\n",
901                        entries, QEDR_MAX_CQES);
902                 return ERR_PTR(-EINVAL);
903         }
904
905         chain_entries = qedr_align_cq_entries(entries);
906         chain_entries = min_t(int, chain_entries, QEDR_MAX_CQES);
907
908         cq = kzalloc(sizeof(*cq), GFP_KERNEL);
909         if (!cq)
910                 return ERR_PTR(-ENOMEM);
911
912         if (udata) {
913                 memset(&ureq, 0, sizeof(ureq));
914                 if (ib_copy_from_udata(&ureq, udata, sizeof(ureq))) {
915                         DP_ERR(dev,
916                                "create cq: problem copying data from user space\n");
917                         goto err0;
918                 }
919
920                 if (!ureq.len) {
921                         DP_ERR(dev,
922                                "create cq: cannot create a cq with 0 entries\n");
923                         goto err0;
924                 }
925
926                 cq->cq_type = QEDR_CQ_TYPE_USER;
927
928                 rc = qedr_init_user_queue(ib_ctx, dev, &cq->q, ureq.addr,
929                                           ureq.len, IB_ACCESS_LOCAL_WRITE, 1);
930                 if (rc)
931                         goto err0;
932
933                 pbl_ptr = cq->q.pbl_tbl->pa;
934                 page_cnt = cq->q.pbl_info.num_pbes;
935
936                 cq->ibcq.cqe = chain_entries;
937         } else {
938                 cq->cq_type = QEDR_CQ_TYPE_KERNEL;
939
940                 rc = dev->ops->common->chain_alloc(dev->cdev,
941                                                    QED_CHAIN_USE_TO_CONSUME,
942                                                    QED_CHAIN_MODE_PBL,
943                                                    QED_CHAIN_CNT_TYPE_U32,
944                                                    chain_entries,
945                                                    sizeof(union rdma_cqe),
946                                                    &cq->pbl, NULL);
947                 if (rc)
948                         goto err1;
949
950                 page_cnt = qed_chain_get_page_cnt(&cq->pbl);
951                 pbl_ptr = qed_chain_get_pbl_phys(&cq->pbl);
952                 cq->ibcq.cqe = cq->pbl.capacity;
953         }
954
955         qedr_init_cq_params(cq, ctx, dev, vector, chain_entries, page_cnt,
956                             pbl_ptr, &params);
957
958         rc = dev->ops->rdma_create_cq(dev->rdma_ctx, &params, &icid);
959         if (rc)
960                 goto err2;
961
962         cq->icid = icid;
963         cq->sig = QEDR_CQ_MAGIC_NUMBER;
964         spin_lock_init(&cq->cq_lock);
965
966         if (ib_ctx) {
967                 rc = qedr_copy_cq_uresp(dev, cq, udata);
968                 if (rc)
969                         goto err3;
970         } else {
971                 /* Generate doorbell address. */
972                 cq->db_addr = dev->db_addr +
973                     DB_ADDR_SHIFT(DQ_PWM_OFFSET_UCM_RDMA_CQ_CONS_32BIT);
974                 cq->db.data.icid = cq->icid;
975                 cq->db.data.params = DB_AGG_CMD_SET <<
976                     RDMA_PWM_VAL32_DATA_AGG_CMD_SHIFT;
977
978                 /* point to the very last element, passing it we will toggle */
979                 cq->toggle_cqe = qed_chain_get_last_elem(&cq->pbl);
980                 cq->pbl_toggle = RDMA_CQE_REQUESTER_TOGGLE_BIT_MASK;
981                 cq->latest_cqe = NULL;
982                 consume_cqe(cq);
983                 cq->cq_cons = qed_chain_get_cons_idx_u32(&cq->pbl);
984         }
985
986         DP_DEBUG(dev, QEDR_MSG_CQ,
987                  "create cq: icid=0x%0x, addr=%p, size(entries)=0x%0x\n",
988                  cq->icid, cq, params.cq_size);
989
990         return &cq->ibcq;
991
992 err3:
993         destroy_iparams.icid = cq->icid;
994         dev->ops->rdma_destroy_cq(dev->rdma_ctx, &destroy_iparams,
995                                   &destroy_oparams);
996 err2:
997         if (udata)
998                 qedr_free_pbl(dev, &cq->q.pbl_info, cq->q.pbl_tbl);
999         else
1000                 dev->ops->common->chain_free(dev->cdev, &cq->pbl);
1001 err1:
1002         if (udata)
1003                 ib_umem_release(cq->q.umem);
1004 err0:
1005         kfree(cq);
1006         return ERR_PTR(-EINVAL);
1007 }
1008
1009 int qedr_resize_cq(struct ib_cq *ibcq, int new_cnt, struct ib_udata *udata)
1010 {
1011         struct qedr_dev *dev = get_qedr_dev(ibcq->device);
1012         struct qedr_cq *cq = get_qedr_cq(ibcq);
1013
1014         DP_ERR(dev, "cq %p RESIZE NOT SUPPORTED\n", cq);
1015
1016         return 0;
1017 }
1018
1019 #define QEDR_DESTROY_CQ_MAX_ITERATIONS          (10)
1020 #define QEDR_DESTROY_CQ_ITER_DURATION           (10)
1021
1022 int qedr_destroy_cq(struct ib_cq *ibcq)
1023 {
1024         struct qedr_dev *dev = get_qedr_dev(ibcq->device);
1025         struct qed_rdma_destroy_cq_out_params oparams;
1026         struct qed_rdma_destroy_cq_in_params iparams;
1027         struct qedr_cq *cq = get_qedr_cq(ibcq);
1028         int iter;
1029         int rc;
1030
1031         DP_DEBUG(dev, QEDR_MSG_CQ, "destroy cq %p (icid=%d)\n", cq, cq->icid);
1032
1033         cq->destroyed = 1;
1034
1035         /* GSIs CQs are handled by driver, so they don't exist in the FW */
1036         if (cq->cq_type == QEDR_CQ_TYPE_GSI)
1037                 goto done;
1038
1039         iparams.icid = cq->icid;
1040         rc = dev->ops->rdma_destroy_cq(dev->rdma_ctx, &iparams, &oparams);
1041         if (rc)
1042                 return rc;
1043
1044         dev->ops->common->chain_free(dev->cdev, &cq->pbl);
1045
1046         if (ibcq->uobject && ibcq->uobject->context) {
1047                 qedr_free_pbl(dev, &cq->q.pbl_info, cq->q.pbl_tbl);
1048                 ib_umem_release(cq->q.umem);
1049         }
1050
1051         /* We don't want the IRQ handler to handle a non-existing CQ so we
1052          * wait until all CNQ interrupts, if any, are received. This will always
1053          * happen and will always happen very fast. If not, then a serious error
1054          * has occured. That is why we can use a long delay.
1055          * We spin for a short time so we don’t lose time on context switching
1056          * in case all the completions are handled in that span. Otherwise
1057          * we sleep for a while and check again. Since the CNQ may be
1058          * associated with (only) the current CPU we use msleep to allow the
1059          * current CPU to be freed.
1060          * The CNQ notification is increased in qedr_irq_handler().
1061          */
1062         iter = QEDR_DESTROY_CQ_MAX_ITERATIONS;
1063         while (oparams.num_cq_notif != READ_ONCE(cq->cnq_notif) && iter) {
1064                 udelay(QEDR_DESTROY_CQ_ITER_DURATION);
1065                 iter--;
1066         }
1067
1068         iter = QEDR_DESTROY_CQ_MAX_ITERATIONS;
1069         while (oparams.num_cq_notif != READ_ONCE(cq->cnq_notif) && iter) {
1070                 msleep(QEDR_DESTROY_CQ_ITER_DURATION);
1071                 iter--;
1072         }
1073
1074         if (oparams.num_cq_notif != cq->cnq_notif)
1075                 goto err;
1076
1077         /* Note that we don't need to have explicit code to wait for the
1078          * completion of the event handler because it is invoked from the EQ.
1079          * Since the destroy CQ ramrod has also been received on the EQ we can
1080          * be certain that there's no event handler in process.
1081          */
1082 done:
1083         cq->sig = ~cq->sig;
1084
1085         kfree(cq);
1086
1087         return 0;
1088
1089 err:
1090         DP_ERR(dev,
1091                "CQ %p (icid=%d) not freed, expecting %d ints but got %d ints\n",
1092                cq, cq->icid, oparams.num_cq_notif, cq->cnq_notif);
1093
1094         return -EINVAL;
1095 }
1096
1097 static inline int get_gid_info_from_table(struct ib_qp *ibqp,
1098                                           struct ib_qp_attr *attr,
1099                                           int attr_mask,
1100                                           struct qed_rdma_modify_qp_in_params
1101                                           *qp_params)
1102 {
1103         enum rdma_network_type nw_type;
1104         struct ib_gid_attr gid_attr;
1105         const struct ib_global_route *grh = rdma_ah_read_grh(&attr->ah_attr);
1106         union ib_gid gid;
1107         u32 ipv4_addr;
1108         int rc = 0;
1109         int i;
1110
1111         rc = ib_get_cached_gid(ibqp->device,
1112                                rdma_ah_get_port_num(&attr->ah_attr),
1113                                grh->sgid_index, &gid, &gid_attr);
1114         if (rc)
1115                 return rc;
1116
1117         if (!memcmp(&gid, &zgid, sizeof(gid)))
1118                 return -ENOENT;
1119
1120         if (gid_attr.ndev) {
1121                 qp_params->vlan_id = rdma_vlan_dev_vlan_id(gid_attr.ndev);
1122
1123                 dev_put(gid_attr.ndev);
1124                 nw_type = ib_gid_to_network_type(gid_attr.gid_type, &gid);
1125                 switch (nw_type) {
1126                 case RDMA_NETWORK_IPV6:
1127                         memcpy(&qp_params->sgid.bytes[0], &gid.raw[0],
1128                                sizeof(qp_params->sgid));
1129                         memcpy(&qp_params->dgid.bytes[0],
1130                                &grh->dgid,
1131                                sizeof(qp_params->dgid));
1132                         qp_params->roce_mode = ROCE_V2_IPV6;
1133                         SET_FIELD(qp_params->modify_flags,
1134                                   QED_ROCE_MODIFY_QP_VALID_ROCE_MODE, 1);
1135                         break;
1136                 case RDMA_NETWORK_IB:
1137                         memcpy(&qp_params->sgid.bytes[0], &gid.raw[0],
1138                                sizeof(qp_params->sgid));
1139                         memcpy(&qp_params->dgid.bytes[0],
1140                                &grh->dgid,
1141                                sizeof(qp_params->dgid));
1142                         qp_params->roce_mode = ROCE_V1;
1143                         break;
1144                 case RDMA_NETWORK_IPV4:
1145                         memset(&qp_params->sgid, 0, sizeof(qp_params->sgid));
1146                         memset(&qp_params->dgid, 0, sizeof(qp_params->dgid));
1147                         ipv4_addr = qedr_get_ipv4_from_gid(gid.raw);
1148                         qp_params->sgid.ipv4_addr = ipv4_addr;
1149                         ipv4_addr =
1150                             qedr_get_ipv4_from_gid(grh->dgid.raw);
1151                         qp_params->dgid.ipv4_addr = ipv4_addr;
1152                         SET_FIELD(qp_params->modify_flags,
1153                                   QED_ROCE_MODIFY_QP_VALID_ROCE_MODE, 1);
1154                         qp_params->roce_mode = ROCE_V2_IPV4;
1155                         break;
1156                 }
1157         }
1158
1159         for (i = 0; i < 4; i++) {
1160                 qp_params->sgid.dwords[i] = ntohl(qp_params->sgid.dwords[i]);
1161                 qp_params->dgid.dwords[i] = ntohl(qp_params->dgid.dwords[i]);
1162         }
1163
1164         if (qp_params->vlan_id >= VLAN_CFI_MASK)
1165                 qp_params->vlan_id = 0;
1166
1167         return 0;
1168 }
1169
1170 static int qedr_check_qp_attrs(struct ib_pd *ibpd, struct qedr_dev *dev,
1171                                struct ib_qp_init_attr *attrs)
1172 {
1173         struct qedr_device_attr *qattr = &dev->attr;
1174
1175         /* QP0... attrs->qp_type == IB_QPT_GSI */
1176         if (attrs->qp_type != IB_QPT_RC && attrs->qp_type != IB_QPT_GSI) {
1177                 DP_DEBUG(dev, QEDR_MSG_QP,
1178                          "create qp: unsupported qp type=0x%x requested\n",
1179                          attrs->qp_type);
1180                 return -EINVAL;
1181         }
1182
1183         if (attrs->cap.max_send_wr > qattr->max_sqe) {
1184                 DP_ERR(dev,
1185                        "create qp: cannot create a SQ with %d elements (max_send_wr=0x%x)\n",
1186                        attrs->cap.max_send_wr, qattr->max_sqe);
1187                 return -EINVAL;
1188         }
1189
1190         if (attrs->cap.max_inline_data > qattr->max_inline) {
1191                 DP_ERR(dev,
1192                        "create qp: unsupported inline data size=0x%x requested (max_inline=0x%x)\n",
1193                        attrs->cap.max_inline_data, qattr->max_inline);
1194                 return -EINVAL;
1195         }
1196
1197         if (attrs->cap.max_send_sge > qattr->max_sge) {
1198                 DP_ERR(dev,
1199                        "create qp: unsupported send_sge=0x%x requested (max_send_sge=0x%x)\n",
1200                        attrs->cap.max_send_sge, qattr->max_sge);
1201                 return -EINVAL;
1202         }
1203
1204         if (attrs->cap.max_recv_sge > qattr->max_sge) {
1205                 DP_ERR(dev,
1206                        "create qp: unsupported recv_sge=0x%x requested (max_recv_sge=0x%x)\n",
1207                        attrs->cap.max_recv_sge, qattr->max_sge);
1208                 return -EINVAL;
1209         }
1210
1211         /* Unprivileged user space cannot create special QP */
1212         if (ibpd->uobject && attrs->qp_type == IB_QPT_GSI) {
1213                 DP_ERR(dev,
1214                        "create qp: userspace can't create special QPs of type=0x%x\n",
1215                        attrs->qp_type);
1216                 return -EINVAL;
1217         }
1218
1219         return 0;
1220 }
1221
1222 static void qedr_copy_rq_uresp(struct qedr_create_qp_uresp *uresp,
1223                                struct qedr_qp *qp)
1224 {
1225         uresp->rq_db_offset = DB_ADDR_SHIFT(DQ_PWM_OFFSET_TCM_ROCE_RQ_PROD);
1226         uresp->rq_icid = qp->icid;
1227 }
1228
1229 static void qedr_copy_sq_uresp(struct qedr_create_qp_uresp *uresp,
1230                                struct qedr_qp *qp)
1231 {
1232         uresp->sq_db_offset = DB_ADDR_SHIFT(DQ_PWM_OFFSET_XCM_RDMA_SQ_PROD);
1233         uresp->sq_icid = qp->icid + 1;
1234 }
1235
1236 static int qedr_copy_qp_uresp(struct qedr_dev *dev,
1237                               struct qedr_qp *qp, struct ib_udata *udata)
1238 {
1239         struct qedr_create_qp_uresp uresp;
1240         int rc;
1241
1242         memset(&uresp, 0, sizeof(uresp));
1243         qedr_copy_sq_uresp(&uresp, qp);
1244         qedr_copy_rq_uresp(&uresp, qp);
1245
1246         uresp.atomic_supported = dev->atomic_cap != IB_ATOMIC_NONE;
1247         uresp.qp_id = qp->qp_id;
1248
1249         rc = qedr_ib_copy_to_udata(udata, &uresp, sizeof(uresp));
1250         if (rc)
1251                 DP_ERR(dev,
1252                        "create qp: failed a copy to user space with qp icid=0x%x.\n",
1253                        qp->icid);
1254
1255         return rc;
1256 }
1257
1258 static void qedr_set_common_qp_params(struct qedr_dev *dev,
1259                                       struct qedr_qp *qp,
1260                                       struct qedr_pd *pd,
1261                                       struct ib_qp_init_attr *attrs)
1262 {
1263         spin_lock_init(&qp->q_lock);
1264         qp->pd = pd;
1265         qp->qp_type = attrs->qp_type;
1266         qp->max_inline_data = attrs->cap.max_inline_data;
1267         qp->sq.max_sges = attrs->cap.max_send_sge;
1268         qp->state = QED_ROCE_QP_STATE_RESET;
1269         qp->signaled = (attrs->sq_sig_type == IB_SIGNAL_ALL_WR) ? true : false;
1270         qp->sq_cq = get_qedr_cq(attrs->send_cq);
1271         qp->rq_cq = get_qedr_cq(attrs->recv_cq);
1272         qp->dev = dev;
1273         qp->rq.max_sges = attrs->cap.max_recv_sge;
1274
1275         DP_DEBUG(dev, QEDR_MSG_QP,
1276                  "RQ params:\trq_max_sges = %d, rq_cq_id = %d\n",
1277                  qp->rq.max_sges, qp->rq_cq->icid);
1278         DP_DEBUG(dev, QEDR_MSG_QP,
1279                  "QP params:\tpd = %d, qp_type = %d, max_inline_data = %d, state = %d, signaled = %d, use_srq=%d\n",
1280                  pd->pd_id, qp->qp_type, qp->max_inline_data,
1281                  qp->state, qp->signaled, (attrs->srq) ? 1 : 0);
1282         DP_DEBUG(dev, QEDR_MSG_QP,
1283                  "SQ params:\tsq_max_sges = %d, sq_cq_id = %d\n",
1284                  qp->sq.max_sges, qp->sq_cq->icid);
1285 }
1286
1287 static void qedr_set_roce_db_info(struct qedr_dev *dev, struct qedr_qp *qp)
1288 {
1289         qp->sq.db = dev->db_addr +
1290                     DB_ADDR_SHIFT(DQ_PWM_OFFSET_XCM_RDMA_SQ_PROD);
1291         qp->sq.db_data.data.icid = qp->icid + 1;
1292         qp->rq.db = dev->db_addr +
1293                     DB_ADDR_SHIFT(DQ_PWM_OFFSET_TCM_ROCE_RQ_PROD);
1294         qp->rq.db_data.data.icid = qp->icid;
1295 }
1296
1297 static inline void
1298 qedr_init_common_qp_in_params(struct qedr_dev *dev,
1299                               struct qedr_pd *pd,
1300                               struct qedr_qp *qp,
1301                               struct ib_qp_init_attr *attrs,
1302                               bool fmr_and_reserved_lkey,
1303                               struct qed_rdma_create_qp_in_params *params)
1304 {
1305         /* QP handle to be written in an async event */
1306         params->qp_handle_async_lo = lower_32_bits((uintptr_t) qp);
1307         params->qp_handle_async_hi = upper_32_bits((uintptr_t) qp);
1308
1309         params->signal_all = (attrs->sq_sig_type == IB_SIGNAL_ALL_WR);
1310         params->fmr_and_reserved_lkey = fmr_and_reserved_lkey;
1311         params->pd = pd->pd_id;
1312         params->dpi = pd->uctx ? pd->uctx->dpi : dev->dpi;
1313         params->sq_cq_id = get_qedr_cq(attrs->send_cq)->icid;
1314         params->stats_queue = 0;
1315         params->rq_cq_id = get_qedr_cq(attrs->recv_cq)->icid;
1316         params->srq_id = 0;
1317         params->use_srq = false;
1318 }
1319
1320 static inline void qedr_qp_user_print(struct qedr_dev *dev, struct qedr_qp *qp)
1321 {
1322         DP_DEBUG(dev, QEDR_MSG_QP, "create qp: successfully created user QP. "
1323                  "qp=%p. "
1324                  "sq_addr=0x%llx, "
1325                  "sq_len=%zd, "
1326                  "rq_addr=0x%llx, "
1327                  "rq_len=%zd"
1328                  "\n",
1329                  qp,
1330                  qp->usq.buf_addr,
1331                  qp->usq.buf_len, qp->urq.buf_addr, qp->urq.buf_len);
1332 }
1333
1334 static void qedr_cleanup_user(struct qedr_dev *dev, struct qedr_qp *qp)
1335 {
1336         if (qp->usq.umem)
1337                 ib_umem_release(qp->usq.umem);
1338         qp->usq.umem = NULL;
1339
1340         if (qp->urq.umem)
1341                 ib_umem_release(qp->urq.umem);
1342         qp->urq.umem = NULL;
1343 }
1344
1345 static int qedr_create_user_qp(struct qedr_dev *dev,
1346                                struct qedr_qp *qp,
1347                                struct ib_pd *ibpd,
1348                                struct ib_udata *udata,
1349                                struct ib_qp_init_attr *attrs)
1350 {
1351         struct qed_rdma_create_qp_in_params in_params;
1352         struct qed_rdma_create_qp_out_params out_params;
1353         struct qedr_pd *pd = get_qedr_pd(ibpd);
1354         struct ib_ucontext *ib_ctx = NULL;
1355         struct qedr_ucontext *ctx = NULL;
1356         struct qedr_create_qp_ureq ureq;
1357         int rc = -EINVAL;
1358
1359         ib_ctx = ibpd->uobject->context;
1360         ctx = get_qedr_ucontext(ib_ctx);
1361
1362         memset(&ureq, 0, sizeof(ureq));
1363         rc = ib_copy_from_udata(&ureq, udata, sizeof(ureq));
1364         if (rc) {
1365                 DP_ERR(dev, "Problem copying data from user space\n");
1366                 return rc;
1367         }
1368
1369         /* SQ - read access only (0), dma sync not required (0) */
1370         rc = qedr_init_user_queue(ib_ctx, dev, &qp->usq, ureq.sq_addr,
1371                                   ureq.sq_len, 0, 0);
1372         if (rc)
1373                 return rc;
1374
1375         /* RQ - read access only (0), dma sync not required (0) */
1376         rc = qedr_init_user_queue(ib_ctx, dev, &qp->urq, ureq.rq_addr,
1377                                   ureq.rq_len, 0, 0);
1378
1379         if (rc)
1380                 return rc;
1381
1382         memset(&in_params, 0, sizeof(in_params));
1383         qedr_init_common_qp_in_params(dev, pd, qp, attrs, false, &in_params);
1384         in_params.qp_handle_lo = ureq.qp_handle_lo;
1385         in_params.qp_handle_hi = ureq.qp_handle_hi;
1386         in_params.sq_num_pages = qp->usq.pbl_info.num_pbes;
1387         in_params.sq_pbl_ptr = qp->usq.pbl_tbl->pa;
1388         in_params.rq_num_pages = qp->urq.pbl_info.num_pbes;
1389         in_params.rq_pbl_ptr = qp->urq.pbl_tbl->pa;
1390
1391         qp->qed_qp = dev->ops->rdma_create_qp(dev->rdma_ctx,
1392                                               &in_params, &out_params);
1393
1394         if (!qp->qed_qp) {
1395                 rc = -ENOMEM;
1396                 goto err1;
1397         }
1398
1399         qp->qp_id = out_params.qp_id;
1400         qp->icid = out_params.icid;
1401
1402         rc = qedr_copy_qp_uresp(dev, qp, udata);
1403         if (rc)
1404                 goto err;
1405
1406         qedr_qp_user_print(dev, qp);
1407
1408         return 0;
1409 err:
1410         rc = dev->ops->rdma_destroy_qp(dev->rdma_ctx, qp->qed_qp);
1411         if (rc)
1412                 DP_ERR(dev, "create qp: fatal fault. rc=%d", rc);
1413
1414 err1:
1415         qedr_cleanup_user(dev, qp);
1416         return rc;
1417 }
1418
1419 static int
1420 qedr_roce_create_kernel_qp(struct qedr_dev *dev,
1421                            struct qedr_qp *qp,
1422                            struct qed_rdma_create_qp_in_params *in_params,
1423                            u32 n_sq_elems, u32 n_rq_elems)
1424 {
1425         struct qed_rdma_create_qp_out_params out_params;
1426         int rc;
1427
1428         rc = dev->ops->common->chain_alloc(dev->cdev,
1429                                            QED_CHAIN_USE_TO_PRODUCE,
1430                                            QED_CHAIN_MODE_PBL,
1431                                            QED_CHAIN_CNT_TYPE_U32,
1432                                            n_sq_elems,
1433                                            QEDR_SQE_ELEMENT_SIZE,
1434                                            &qp->sq.pbl, NULL);
1435
1436         if (rc)
1437                 return rc;
1438
1439         in_params->sq_num_pages = qed_chain_get_page_cnt(&qp->sq.pbl);
1440         in_params->sq_pbl_ptr = qed_chain_get_pbl_phys(&qp->sq.pbl);
1441
1442         rc = dev->ops->common->chain_alloc(dev->cdev,
1443                                            QED_CHAIN_USE_TO_CONSUME_PRODUCE,
1444                                            QED_CHAIN_MODE_PBL,
1445                                            QED_CHAIN_CNT_TYPE_U32,
1446                                            n_rq_elems,
1447                                            QEDR_RQE_ELEMENT_SIZE,
1448                                            &qp->rq.pbl, NULL);
1449         if (rc)
1450                 return rc;
1451
1452         in_params->rq_num_pages = qed_chain_get_page_cnt(&qp->rq.pbl);
1453         in_params->rq_pbl_ptr = qed_chain_get_pbl_phys(&qp->rq.pbl);
1454
1455         qp->qed_qp = dev->ops->rdma_create_qp(dev->rdma_ctx,
1456                                               in_params, &out_params);
1457
1458         if (!qp->qed_qp)
1459                 return -EINVAL;
1460
1461         qp->qp_id = out_params.qp_id;
1462         qp->icid = out_params.icid;
1463
1464         qedr_set_roce_db_info(dev, qp);
1465
1466         return 0;
1467 }
1468
1469 static void qedr_cleanup_kernel(struct qedr_dev *dev, struct qedr_qp *qp)
1470 {
1471         dev->ops->common->chain_free(dev->cdev, &qp->sq.pbl);
1472         kfree(qp->wqe_wr_id);
1473
1474         dev->ops->common->chain_free(dev->cdev, &qp->rq.pbl);
1475         kfree(qp->rqe_wr_id);
1476 }
1477
1478 static int qedr_create_kernel_qp(struct qedr_dev *dev,
1479                                  struct qedr_qp *qp,
1480                                  struct ib_pd *ibpd,
1481                                  struct ib_qp_init_attr *attrs)
1482 {
1483         struct qed_rdma_create_qp_in_params in_params;
1484         struct qedr_pd *pd = get_qedr_pd(ibpd);
1485         int rc = -EINVAL;
1486         u32 n_rq_elems;
1487         u32 n_sq_elems;
1488         u32 n_sq_entries;
1489
1490         memset(&in_params, 0, sizeof(in_params));
1491
1492         /* A single work request may take up to QEDR_MAX_SQ_WQE_SIZE elements in
1493          * the ring. The ring should allow at least a single WR, even if the
1494          * user requested none, due to allocation issues.
1495          * We should add an extra WR since the prod and cons indices of
1496          * wqe_wr_id are managed in such a way that the WQ is considered full
1497          * when (prod+1)%max_wr==cons. We currently don't do that because we
1498          * double the number of entries due an iSER issue that pushes far more
1499          * WRs than indicated. If we decline its ib_post_send() then we get
1500          * error prints in the dmesg we'd like to avoid.
1501          */
1502         qp->sq.max_wr = min_t(u32, attrs->cap.max_send_wr * dev->wq_multiplier,
1503                               dev->attr.max_sqe);
1504
1505         qp->wqe_wr_id = kzalloc(qp->sq.max_wr * sizeof(*qp->wqe_wr_id),
1506                                 GFP_KERNEL);
1507         if (!qp->wqe_wr_id) {
1508                 DP_ERR(dev, "create qp: failed SQ shadow memory allocation\n");
1509                 return -ENOMEM;
1510         }
1511
1512         /* QP handle to be written in CQE */
1513         in_params.qp_handle_lo = lower_32_bits((uintptr_t) qp);
1514         in_params.qp_handle_hi = upper_32_bits((uintptr_t) qp);
1515
1516         /* A single work request may take up to QEDR_MAX_RQ_WQE_SIZE elements in
1517          * the ring. There ring should allow at least a single WR, even if the
1518          * user requested none, due to allocation issues.
1519          */
1520         qp->rq.max_wr = (u16) max_t(u32, attrs->cap.max_recv_wr, 1);
1521
1522         /* Allocate driver internal RQ array */
1523         qp->rqe_wr_id = kzalloc(qp->rq.max_wr * sizeof(*qp->rqe_wr_id),
1524                                 GFP_KERNEL);
1525         if (!qp->rqe_wr_id) {
1526                 DP_ERR(dev,
1527                        "create qp: failed RQ shadow memory allocation\n");
1528                 kfree(qp->wqe_wr_id);
1529                 return -ENOMEM;
1530         }
1531
1532         qedr_init_common_qp_in_params(dev, pd, qp, attrs, true, &in_params);
1533
1534         n_sq_entries = attrs->cap.max_send_wr;
1535         n_sq_entries = min_t(u32, n_sq_entries, dev->attr.max_sqe);
1536         n_sq_entries = max_t(u32, n_sq_entries, 1);
1537         n_sq_elems = n_sq_entries * QEDR_MAX_SQE_ELEMENTS_PER_SQE;
1538
1539         n_rq_elems = qp->rq.max_wr * QEDR_MAX_RQE_ELEMENTS_PER_RQE;
1540
1541         rc = qedr_roce_create_kernel_qp(dev, qp, &in_params,
1542                                         n_sq_elems, n_rq_elems);
1543         if (rc)
1544                 qedr_cleanup_kernel(dev, qp);
1545
1546         return rc;
1547 }
1548
1549 struct ib_qp *qedr_create_qp(struct ib_pd *ibpd,
1550                              struct ib_qp_init_attr *attrs,
1551                              struct ib_udata *udata)
1552 {
1553         struct qedr_dev *dev = get_qedr_dev(ibpd->device);
1554         struct qedr_pd *pd = get_qedr_pd(ibpd);
1555         struct qedr_qp *qp;
1556         struct ib_qp *ibqp;
1557         int rc = 0;
1558
1559         DP_DEBUG(dev, QEDR_MSG_QP, "create qp: called from %s, pd=%p\n",
1560                  udata ? "user library" : "kernel", pd);
1561
1562         rc = qedr_check_qp_attrs(ibpd, dev, attrs);
1563         if (rc)
1564                 return ERR_PTR(rc);
1565
1566         if (attrs->srq)
1567                 return ERR_PTR(-EINVAL);
1568
1569         DP_DEBUG(dev, QEDR_MSG_QP,
1570                  "create qp: called from %s, event_handler=%p, eepd=%p sq_cq=%p, sq_icid=%d, rq_cq=%p, rq_icid=%d\n",
1571                  udata ? "user library" : "kernel", attrs->event_handler, pd,
1572                  get_qedr_cq(attrs->send_cq),
1573                  get_qedr_cq(attrs->send_cq)->icid,
1574                  get_qedr_cq(attrs->recv_cq),
1575                  get_qedr_cq(attrs->recv_cq)->icid);
1576
1577         qp = kzalloc(sizeof(*qp), GFP_KERNEL);
1578         if (!qp) {
1579                 DP_ERR(dev, "create qp: failed allocating memory\n");
1580                 return ERR_PTR(-ENOMEM);
1581         }
1582
1583         qedr_set_common_qp_params(dev, qp, pd, attrs);
1584
1585         if (attrs->qp_type == IB_QPT_GSI) {
1586                 ibqp = qedr_create_gsi_qp(dev, attrs, qp);
1587                 if (IS_ERR(ibqp))
1588                         kfree(qp);
1589                 return ibqp;
1590         }
1591
1592         if (udata)
1593                 rc = qedr_create_user_qp(dev, qp, ibpd, udata, attrs);
1594         else
1595                 rc = qedr_create_kernel_qp(dev, qp, ibpd, attrs);
1596
1597         if (rc)
1598                 goto err;
1599
1600         qp->ibqp.qp_num = qp->qp_id;
1601
1602         return &qp->ibqp;
1603
1604 err:
1605         kfree(qp);
1606
1607         return ERR_PTR(-EFAULT);
1608 }
1609
1610 static enum ib_qp_state qedr_get_ibqp_state(enum qed_roce_qp_state qp_state)
1611 {
1612         switch (qp_state) {
1613         case QED_ROCE_QP_STATE_RESET:
1614                 return IB_QPS_RESET;
1615         case QED_ROCE_QP_STATE_INIT:
1616                 return IB_QPS_INIT;
1617         case QED_ROCE_QP_STATE_RTR:
1618                 return IB_QPS_RTR;
1619         case QED_ROCE_QP_STATE_RTS:
1620                 return IB_QPS_RTS;
1621         case QED_ROCE_QP_STATE_SQD:
1622                 return IB_QPS_SQD;
1623         case QED_ROCE_QP_STATE_ERR:
1624                 return IB_QPS_ERR;
1625         case QED_ROCE_QP_STATE_SQE:
1626                 return IB_QPS_SQE;
1627         }
1628         return IB_QPS_ERR;
1629 }
1630
1631 static enum qed_roce_qp_state qedr_get_state_from_ibqp(
1632                                         enum ib_qp_state qp_state)
1633 {
1634         switch (qp_state) {
1635         case IB_QPS_RESET:
1636                 return QED_ROCE_QP_STATE_RESET;
1637         case IB_QPS_INIT:
1638                 return QED_ROCE_QP_STATE_INIT;
1639         case IB_QPS_RTR:
1640                 return QED_ROCE_QP_STATE_RTR;
1641         case IB_QPS_RTS:
1642                 return QED_ROCE_QP_STATE_RTS;
1643         case IB_QPS_SQD:
1644                 return QED_ROCE_QP_STATE_SQD;
1645         case IB_QPS_ERR:
1646                 return QED_ROCE_QP_STATE_ERR;
1647         default:
1648                 return QED_ROCE_QP_STATE_ERR;
1649         }
1650 }
1651
1652 static void qedr_reset_qp_hwq_info(struct qedr_qp_hwq_info *qph)
1653 {
1654         qed_chain_reset(&qph->pbl);
1655         qph->prod = 0;
1656         qph->cons = 0;
1657         qph->wqe_cons = 0;
1658         qph->db_data.data.value = cpu_to_le16(0);
1659 }
1660
1661 static int qedr_update_qp_state(struct qedr_dev *dev,
1662                                 struct qedr_qp *qp,
1663                                 enum qed_roce_qp_state new_state)
1664 {
1665         int status = 0;
1666
1667         if (new_state == qp->state)
1668                 return 0;
1669
1670         switch (qp->state) {
1671         case QED_ROCE_QP_STATE_RESET:
1672                 switch (new_state) {
1673                 case QED_ROCE_QP_STATE_INIT:
1674                         qp->prev_wqe_size = 0;
1675                         qedr_reset_qp_hwq_info(&qp->sq);
1676                         qedr_reset_qp_hwq_info(&qp->rq);
1677                         break;
1678                 default:
1679                         status = -EINVAL;
1680                         break;
1681                 };
1682                 break;
1683         case QED_ROCE_QP_STATE_INIT:
1684                 switch (new_state) {
1685                 case QED_ROCE_QP_STATE_RTR:
1686                         /* Update doorbell (in case post_recv was
1687                          * done before move to RTR)
1688                          */
1689                         wmb();
1690                         writel(qp->rq.db_data.raw, qp->rq.db);
1691                         /* Make sure write takes effect */
1692                         mmiowb();
1693                         break;
1694                 case QED_ROCE_QP_STATE_ERR:
1695                         break;
1696                 default:
1697                         /* Invalid state change. */
1698                         status = -EINVAL;
1699                         break;
1700                 };
1701                 break;
1702         case QED_ROCE_QP_STATE_RTR:
1703                 /* RTR->XXX */
1704                 switch (new_state) {
1705                 case QED_ROCE_QP_STATE_RTS:
1706                         break;
1707                 case QED_ROCE_QP_STATE_ERR:
1708                         break;
1709                 default:
1710                         /* Invalid state change. */
1711                         status = -EINVAL;
1712                         break;
1713                 };
1714                 break;
1715         case QED_ROCE_QP_STATE_RTS:
1716                 /* RTS->XXX */
1717                 switch (new_state) {
1718                 case QED_ROCE_QP_STATE_SQD:
1719                         break;
1720                 case QED_ROCE_QP_STATE_ERR:
1721                         break;
1722                 default:
1723                         /* Invalid state change. */
1724                         status = -EINVAL;
1725                         break;
1726                 };
1727                 break;
1728         case QED_ROCE_QP_STATE_SQD:
1729                 /* SQD->XXX */
1730                 switch (new_state) {
1731                 case QED_ROCE_QP_STATE_RTS:
1732                 case QED_ROCE_QP_STATE_ERR:
1733                         break;
1734                 default:
1735                         /* Invalid state change. */
1736                         status = -EINVAL;
1737                         break;
1738                 };
1739                 break;
1740         case QED_ROCE_QP_STATE_ERR:
1741                 /* ERR->XXX */
1742                 switch (new_state) {
1743                 case QED_ROCE_QP_STATE_RESET:
1744                         if ((qp->rq.prod != qp->rq.cons) ||
1745                             (qp->sq.prod != qp->sq.cons)) {
1746                                 DP_NOTICE(dev,
1747                                           "Error->Reset with rq/sq not empty rq.prod=%x rq.cons=%x sq.prod=%x sq.cons=%x\n",
1748                                           qp->rq.prod, qp->rq.cons, qp->sq.prod,
1749                                           qp->sq.cons);
1750                                 status = -EINVAL;
1751                         }
1752                         break;
1753                 default:
1754                         status = -EINVAL;
1755                         break;
1756                 };
1757                 break;
1758         default:
1759                 status = -EINVAL;
1760                 break;
1761         };
1762
1763         return status;
1764 }
1765
1766 int qedr_modify_qp(struct ib_qp *ibqp, struct ib_qp_attr *attr,
1767                    int attr_mask, struct ib_udata *udata)
1768 {
1769         struct qedr_qp *qp = get_qedr_qp(ibqp);
1770         struct qed_rdma_modify_qp_in_params qp_params = { 0 };
1771         struct qedr_dev *dev = get_qedr_dev(&qp->dev->ibdev);
1772         const struct ib_global_route *grh = rdma_ah_read_grh(&attr->ah_attr);
1773         enum ib_qp_state old_qp_state, new_qp_state;
1774         int rc = 0;
1775
1776         DP_DEBUG(dev, QEDR_MSG_QP,
1777                  "modify qp: qp %p attr_mask=0x%x, state=%d", qp, attr_mask,
1778                  attr->qp_state);
1779
1780         old_qp_state = qedr_get_ibqp_state(qp->state);
1781         if (attr_mask & IB_QP_STATE)
1782                 new_qp_state = attr->qp_state;
1783         else
1784                 new_qp_state = old_qp_state;
1785
1786         if (!ib_modify_qp_is_ok
1787             (old_qp_state, new_qp_state, ibqp->qp_type, attr_mask,
1788              IB_LINK_LAYER_ETHERNET)) {
1789                 DP_ERR(dev,
1790                        "modify qp: invalid attribute mask=0x%x specified for\n"
1791                        "qpn=0x%x of type=0x%x old_qp_state=0x%x, new_qp_state=0x%x\n",
1792                        attr_mask, qp->qp_id, ibqp->qp_type, old_qp_state,
1793                        new_qp_state);
1794                 rc = -EINVAL;
1795                 goto err;
1796         }
1797
1798         /* Translate the masks... */
1799         if (attr_mask & IB_QP_STATE) {
1800                 SET_FIELD(qp_params.modify_flags,
1801                           QED_RDMA_MODIFY_QP_VALID_NEW_STATE, 1);
1802                 qp_params.new_state = qedr_get_state_from_ibqp(attr->qp_state);
1803         }
1804
1805         if (attr_mask & IB_QP_EN_SQD_ASYNC_NOTIFY)
1806                 qp_params.sqd_async = true;
1807
1808         if (attr_mask & IB_QP_PKEY_INDEX) {
1809                 SET_FIELD(qp_params.modify_flags,
1810                           QED_ROCE_MODIFY_QP_VALID_PKEY, 1);
1811                 if (attr->pkey_index >= QEDR_ROCE_PKEY_TABLE_LEN) {
1812                         rc = -EINVAL;
1813                         goto err;
1814                 }
1815
1816                 qp_params.pkey = QEDR_ROCE_PKEY_DEFAULT;
1817         }
1818
1819         if (attr_mask & IB_QP_QKEY)
1820                 qp->qkey = attr->qkey;
1821
1822         if (attr_mask & IB_QP_ACCESS_FLAGS) {
1823                 SET_FIELD(qp_params.modify_flags,
1824                           QED_RDMA_MODIFY_QP_VALID_RDMA_OPS_EN, 1);
1825                 qp_params.incoming_rdma_read_en = attr->qp_access_flags &
1826                                                   IB_ACCESS_REMOTE_READ;
1827                 qp_params.incoming_rdma_write_en = attr->qp_access_flags &
1828                                                    IB_ACCESS_REMOTE_WRITE;
1829                 qp_params.incoming_atomic_en = attr->qp_access_flags &
1830                                                IB_ACCESS_REMOTE_ATOMIC;
1831         }
1832
1833         if (attr_mask & (IB_QP_AV | IB_QP_PATH_MTU)) {
1834                 if (attr_mask & IB_QP_PATH_MTU) {
1835                         if (attr->path_mtu < IB_MTU_256 ||
1836                             attr->path_mtu > IB_MTU_4096) {
1837                                 pr_err("error: Only MTU sizes of 256, 512, 1024, 2048 and 4096 are supported by RoCE\n");
1838                                 rc = -EINVAL;
1839                                 goto err;
1840                         }
1841                         qp->mtu = min(ib_mtu_enum_to_int(attr->path_mtu),
1842                                       ib_mtu_enum_to_int(iboe_get_mtu
1843                                                          (dev->ndev->mtu)));
1844                 }
1845
1846                 if (!qp->mtu) {
1847                         qp->mtu =
1848                         ib_mtu_enum_to_int(iboe_get_mtu(dev->ndev->mtu));
1849                         pr_err("Fixing zeroed MTU to qp->mtu = %d\n", qp->mtu);
1850                 }
1851
1852                 SET_FIELD(qp_params.modify_flags,
1853                           QED_ROCE_MODIFY_QP_VALID_ADDRESS_VECTOR, 1);
1854
1855                 qp_params.traffic_class_tos = grh->traffic_class;
1856                 qp_params.flow_label = grh->flow_label;
1857                 qp_params.hop_limit_ttl = grh->hop_limit;
1858
1859                 qp->sgid_idx = grh->sgid_index;
1860
1861                 rc = get_gid_info_from_table(ibqp, attr, attr_mask, &qp_params);
1862                 if (rc) {
1863                         DP_ERR(dev,
1864                                "modify qp: problems with GID index %d (rc=%d)\n",
1865                                grh->sgid_index, rc);
1866                         return rc;
1867                 }
1868
1869                 rc = qedr_get_dmac(dev, &attr->ah_attr,
1870                                    qp_params.remote_mac_addr);
1871                 if (rc)
1872                         return rc;
1873
1874                 qp_params.use_local_mac = true;
1875                 ether_addr_copy(qp_params.local_mac_addr, dev->ndev->dev_addr);
1876
1877                 DP_DEBUG(dev, QEDR_MSG_QP, "dgid=%x:%x:%x:%x\n",
1878                          qp_params.dgid.dwords[0], qp_params.dgid.dwords[1],
1879                          qp_params.dgid.dwords[2], qp_params.dgid.dwords[3]);
1880                 DP_DEBUG(dev, QEDR_MSG_QP, "sgid=%x:%x:%x:%x\n",
1881                          qp_params.sgid.dwords[0], qp_params.sgid.dwords[1],
1882                          qp_params.sgid.dwords[2], qp_params.sgid.dwords[3]);
1883                 DP_DEBUG(dev, QEDR_MSG_QP, "remote_mac=[%pM]\n",
1884                          qp_params.remote_mac_addr);
1885
1886                 qp_params.mtu = qp->mtu;
1887                 qp_params.lb_indication = false;
1888         }
1889
1890         if (!qp_params.mtu) {
1891                 /* Stay with current MTU */
1892                 if (qp->mtu)
1893                         qp_params.mtu = qp->mtu;
1894                 else
1895                         qp_params.mtu =
1896                             ib_mtu_enum_to_int(iboe_get_mtu(dev->ndev->mtu));
1897         }
1898
1899         if (attr_mask & IB_QP_TIMEOUT) {
1900                 SET_FIELD(qp_params.modify_flags,
1901                           QED_ROCE_MODIFY_QP_VALID_ACK_TIMEOUT, 1);
1902
1903                 qp_params.ack_timeout = attr->timeout;
1904                 if (attr->timeout) {
1905                         u32 temp;
1906
1907                         temp = 4096 * (1UL << attr->timeout) / 1000 / 1000;
1908                         /* FW requires [msec] */
1909                         qp_params.ack_timeout = temp;
1910                 } else {
1911                         /* Infinite */
1912                         qp_params.ack_timeout = 0;
1913                 }
1914         }
1915         if (attr_mask & IB_QP_RETRY_CNT) {
1916                 SET_FIELD(qp_params.modify_flags,
1917                           QED_ROCE_MODIFY_QP_VALID_RETRY_CNT, 1);
1918                 qp_params.retry_cnt = attr->retry_cnt;
1919         }
1920
1921         if (attr_mask & IB_QP_RNR_RETRY) {
1922                 SET_FIELD(qp_params.modify_flags,
1923                           QED_ROCE_MODIFY_QP_VALID_RNR_RETRY_CNT, 1);
1924                 qp_params.rnr_retry_cnt = attr->rnr_retry;
1925         }
1926
1927         if (attr_mask & IB_QP_RQ_PSN) {
1928                 SET_FIELD(qp_params.modify_flags,
1929                           QED_ROCE_MODIFY_QP_VALID_RQ_PSN, 1);
1930                 qp_params.rq_psn = attr->rq_psn;
1931                 qp->rq_psn = attr->rq_psn;
1932         }
1933
1934         if (attr_mask & IB_QP_MAX_QP_RD_ATOMIC) {
1935                 if (attr->max_rd_atomic > dev->attr.max_qp_req_rd_atomic_resc) {
1936                         rc = -EINVAL;
1937                         DP_ERR(dev,
1938                                "unsupported max_rd_atomic=%d, supported=%d\n",
1939                                attr->max_rd_atomic,
1940                                dev->attr.max_qp_req_rd_atomic_resc);
1941                         goto err;
1942                 }
1943
1944                 SET_FIELD(qp_params.modify_flags,
1945                           QED_RDMA_MODIFY_QP_VALID_MAX_RD_ATOMIC_REQ, 1);
1946                 qp_params.max_rd_atomic_req = attr->max_rd_atomic;
1947         }
1948
1949         if (attr_mask & IB_QP_MIN_RNR_TIMER) {
1950                 SET_FIELD(qp_params.modify_flags,
1951                           QED_ROCE_MODIFY_QP_VALID_MIN_RNR_NAK_TIMER, 1);
1952                 qp_params.min_rnr_nak_timer = attr->min_rnr_timer;
1953         }
1954
1955         if (attr_mask & IB_QP_SQ_PSN) {
1956                 SET_FIELD(qp_params.modify_flags,
1957                           QED_ROCE_MODIFY_QP_VALID_SQ_PSN, 1);
1958                 qp_params.sq_psn = attr->sq_psn;
1959                 qp->sq_psn = attr->sq_psn;
1960         }
1961
1962         if (attr_mask & IB_QP_MAX_DEST_RD_ATOMIC) {
1963                 if (attr->max_dest_rd_atomic >
1964                     dev->attr.max_qp_resp_rd_atomic_resc) {
1965                         DP_ERR(dev,
1966                                "unsupported max_dest_rd_atomic=%d, supported=%d\n",
1967                                attr->max_dest_rd_atomic,
1968                                dev->attr.max_qp_resp_rd_atomic_resc);
1969
1970                         rc = -EINVAL;
1971                         goto err;
1972                 }
1973
1974                 SET_FIELD(qp_params.modify_flags,
1975                           QED_RDMA_MODIFY_QP_VALID_MAX_RD_ATOMIC_RESP, 1);
1976                 qp_params.max_rd_atomic_resp = attr->max_dest_rd_atomic;
1977         }
1978
1979         if (attr_mask & IB_QP_DEST_QPN) {
1980                 SET_FIELD(qp_params.modify_flags,
1981                           QED_ROCE_MODIFY_QP_VALID_DEST_QP, 1);
1982
1983                 qp_params.dest_qp = attr->dest_qp_num;
1984                 qp->dest_qp_num = attr->dest_qp_num;
1985         }
1986
1987         if (qp->qp_type != IB_QPT_GSI)
1988                 rc = dev->ops->rdma_modify_qp(dev->rdma_ctx,
1989                                               qp->qed_qp, &qp_params);
1990
1991         if (attr_mask & IB_QP_STATE) {
1992                 if ((qp->qp_type != IB_QPT_GSI) && (!udata))
1993                         rc = qedr_update_qp_state(dev, qp, qp_params.new_state);
1994                 qp->state = qp_params.new_state;
1995         }
1996
1997 err:
1998         return rc;
1999 }
2000
2001 static int qedr_to_ib_qp_acc_flags(struct qed_rdma_query_qp_out_params *params)
2002 {
2003         int ib_qp_acc_flags = 0;
2004
2005         if (params->incoming_rdma_write_en)
2006                 ib_qp_acc_flags |= IB_ACCESS_REMOTE_WRITE;
2007         if (params->incoming_rdma_read_en)
2008                 ib_qp_acc_flags |= IB_ACCESS_REMOTE_READ;
2009         if (params->incoming_atomic_en)
2010                 ib_qp_acc_flags |= IB_ACCESS_REMOTE_ATOMIC;
2011         ib_qp_acc_flags |= IB_ACCESS_LOCAL_WRITE;
2012         return ib_qp_acc_flags;
2013 }
2014
2015 int qedr_query_qp(struct ib_qp *ibqp,
2016                   struct ib_qp_attr *qp_attr,
2017                   int attr_mask, struct ib_qp_init_attr *qp_init_attr)
2018 {
2019         struct qed_rdma_query_qp_out_params params;
2020         struct qedr_qp *qp = get_qedr_qp(ibqp);
2021         struct qedr_dev *dev = qp->dev;
2022         int rc = 0;
2023
2024         memset(&params, 0, sizeof(params));
2025
2026         rc = dev->ops->rdma_query_qp(dev->rdma_ctx, qp->qed_qp, &params);
2027         if (rc)
2028                 goto err;
2029
2030         memset(qp_attr, 0, sizeof(*qp_attr));
2031         memset(qp_init_attr, 0, sizeof(*qp_init_attr));
2032
2033         qp_attr->qp_state = qedr_get_ibqp_state(params.state);
2034         qp_attr->cur_qp_state = qedr_get_ibqp_state(params.state);
2035         qp_attr->path_mtu = ib_mtu_int_to_enum(params.mtu);
2036         qp_attr->path_mig_state = IB_MIG_MIGRATED;
2037         qp_attr->rq_psn = params.rq_psn;
2038         qp_attr->sq_psn = params.sq_psn;
2039         qp_attr->dest_qp_num = params.dest_qp;
2040
2041         qp_attr->qp_access_flags = qedr_to_ib_qp_acc_flags(&params);
2042
2043         qp_attr->cap.max_send_wr = qp->sq.max_wr;
2044         qp_attr->cap.max_recv_wr = qp->rq.max_wr;
2045         qp_attr->cap.max_send_sge = qp->sq.max_sges;
2046         qp_attr->cap.max_recv_sge = qp->rq.max_sges;
2047         qp_attr->cap.max_inline_data = ROCE_REQ_MAX_INLINE_DATA_SIZE;
2048         qp_init_attr->cap = qp_attr->cap;
2049
2050         qp_attr->ah_attr.type = RDMA_AH_ATTR_TYPE_ROCE;
2051         rdma_ah_set_grh(&qp_attr->ah_attr, NULL,
2052                         params.flow_label, qp->sgid_idx,
2053                         params.hop_limit_ttl, params.traffic_class_tos);
2054         rdma_ah_set_dgid_raw(&qp_attr->ah_attr, &params.dgid.bytes[0]);
2055         rdma_ah_set_port_num(&qp_attr->ah_attr, 1);
2056         rdma_ah_set_sl(&qp_attr->ah_attr, 0);
2057         qp_attr->timeout = params.timeout;
2058         qp_attr->rnr_retry = params.rnr_retry;
2059         qp_attr->retry_cnt = params.retry_cnt;
2060         qp_attr->min_rnr_timer = params.min_rnr_nak_timer;
2061         qp_attr->pkey_index = params.pkey_index;
2062         qp_attr->port_num = 1;
2063         rdma_ah_set_path_bits(&qp_attr->ah_attr, 0);
2064         rdma_ah_set_static_rate(&qp_attr->ah_attr, 0);
2065         qp_attr->alt_pkey_index = 0;
2066         qp_attr->alt_port_num = 0;
2067         qp_attr->alt_timeout = 0;
2068         memset(&qp_attr->alt_ah_attr, 0, sizeof(qp_attr->alt_ah_attr));
2069
2070         qp_attr->sq_draining = (params.state == QED_ROCE_QP_STATE_SQD) ? 1 : 0;
2071         qp_attr->max_dest_rd_atomic = params.max_dest_rd_atomic;
2072         qp_attr->max_rd_atomic = params.max_rd_atomic;
2073         qp_attr->en_sqd_async_notify = (params.sqd_async) ? 1 : 0;
2074
2075         DP_DEBUG(dev, QEDR_MSG_QP, "QEDR_QUERY_QP: max_inline_data=%d\n",
2076                  qp_attr->cap.max_inline_data);
2077
2078 err:
2079         return rc;
2080 }
2081
2082 int qedr_free_qp_resources(struct qedr_dev *dev, struct qedr_qp *qp)
2083 {
2084         int rc = 0;
2085
2086         if (qp->qp_type != IB_QPT_GSI) {
2087                 rc = dev->ops->rdma_destroy_qp(dev->rdma_ctx, qp->qed_qp);
2088                 if (rc)
2089                         return rc;
2090         }
2091
2092         if (qp->ibqp.uobject && qp->ibqp.uobject->context)
2093                 qedr_cleanup_user(dev, qp);
2094         else
2095                 qedr_cleanup_kernel(dev, qp);
2096
2097         return 0;
2098 }
2099
2100 int qedr_destroy_qp(struct ib_qp *ibqp)
2101 {
2102         struct qedr_qp *qp = get_qedr_qp(ibqp);
2103         struct qedr_dev *dev = qp->dev;
2104         struct ib_qp_attr attr;
2105         int attr_mask = 0;
2106         int rc = 0;
2107
2108         DP_DEBUG(dev, QEDR_MSG_QP, "destroy qp: destroying %p, qp type=%d\n",
2109                  qp, qp->qp_type);
2110
2111         if ((qp->state != QED_ROCE_QP_STATE_RESET) &&
2112             (qp->state != QED_ROCE_QP_STATE_ERR) &&
2113             (qp->state != QED_ROCE_QP_STATE_INIT)) {
2114
2115                 attr.qp_state = IB_QPS_ERR;
2116                 attr_mask |= IB_QP_STATE;
2117
2118                 /* Change the QP state to ERROR */
2119                 qedr_modify_qp(ibqp, &attr, attr_mask, NULL);
2120         }
2121
2122         if (qp->qp_type == IB_QPT_GSI)
2123                 qedr_destroy_gsi_qp(dev);
2124
2125         qedr_free_qp_resources(dev, qp);
2126
2127         kfree(qp);
2128
2129         return rc;
2130 }
2131
2132 struct ib_ah *qedr_create_ah(struct ib_pd *ibpd, struct rdma_ah_attr *attr,
2133                              struct ib_udata *udata)
2134 {
2135         struct qedr_ah *ah;
2136
2137         ah = kzalloc(sizeof(*ah), GFP_ATOMIC);
2138         if (!ah)
2139                 return ERR_PTR(-ENOMEM);
2140
2141         ah->attr = *attr;
2142
2143         return &ah->ibah;
2144 }
2145
2146 int qedr_destroy_ah(struct ib_ah *ibah)
2147 {
2148         struct qedr_ah *ah = get_qedr_ah(ibah);
2149
2150         kfree(ah);
2151         return 0;
2152 }
2153
2154 static void free_mr_info(struct qedr_dev *dev, struct mr_info *info)
2155 {
2156         struct qedr_pbl *pbl, *tmp;
2157
2158         if (info->pbl_table)
2159                 list_add_tail(&info->pbl_table->list_entry,
2160                               &info->free_pbl_list);
2161
2162         if (!list_empty(&info->inuse_pbl_list))
2163                 list_splice(&info->inuse_pbl_list, &info->free_pbl_list);
2164
2165         list_for_each_entry_safe(pbl, tmp, &info->free_pbl_list, list_entry) {
2166                 list_del(&pbl->list_entry);
2167                 qedr_free_pbl(dev, &info->pbl_info, pbl);
2168         }
2169 }
2170
2171 static int init_mr_info(struct qedr_dev *dev, struct mr_info *info,
2172                         size_t page_list_len, bool two_layered)
2173 {
2174         struct qedr_pbl *tmp;
2175         int rc;
2176
2177         INIT_LIST_HEAD(&info->free_pbl_list);
2178         INIT_LIST_HEAD(&info->inuse_pbl_list);
2179
2180         rc = qedr_prepare_pbl_tbl(dev, &info->pbl_info,
2181                                   page_list_len, two_layered);
2182         if (rc)
2183                 goto done;
2184
2185         info->pbl_table = qedr_alloc_pbl_tbl(dev, &info->pbl_info, GFP_KERNEL);
2186         if (IS_ERR(info->pbl_table)) {
2187                 rc = PTR_ERR(info->pbl_table);
2188                 goto done;
2189         }
2190
2191         DP_DEBUG(dev, QEDR_MSG_MR, "pbl_table_pa = %pa\n",
2192                  &info->pbl_table->pa);
2193
2194         /* in usual case we use 2 PBLs, so we add one to free
2195          * list and allocating another one
2196          */
2197         tmp = qedr_alloc_pbl_tbl(dev, &info->pbl_info, GFP_KERNEL);
2198         if (IS_ERR(tmp)) {
2199                 DP_DEBUG(dev, QEDR_MSG_MR, "Extra PBL is not allocated\n");
2200                 goto done;
2201         }
2202
2203         list_add_tail(&tmp->list_entry, &info->free_pbl_list);
2204
2205         DP_DEBUG(dev, QEDR_MSG_MR, "extra pbl_table_pa = %pa\n", &tmp->pa);
2206
2207 done:
2208         if (rc)
2209                 free_mr_info(dev, info);
2210
2211         return rc;
2212 }
2213
2214 struct ib_mr *qedr_reg_user_mr(struct ib_pd *ibpd, u64 start, u64 len,
2215                                u64 usr_addr, int acc, struct ib_udata *udata)
2216 {
2217         struct qedr_dev *dev = get_qedr_dev(ibpd->device);
2218         struct qedr_mr *mr;
2219         struct qedr_pd *pd;
2220         int rc = -ENOMEM;
2221
2222         pd = get_qedr_pd(ibpd);
2223         DP_DEBUG(dev, QEDR_MSG_MR,
2224                  "qedr_register user mr pd = %d start = %lld, len = %lld, usr_addr = %lld, acc = %d\n",
2225                  pd->pd_id, start, len, usr_addr, acc);
2226
2227         if (acc & IB_ACCESS_REMOTE_WRITE && !(acc & IB_ACCESS_LOCAL_WRITE))
2228                 return ERR_PTR(-EINVAL);
2229
2230         mr = kzalloc(sizeof(*mr), GFP_KERNEL);
2231         if (!mr)
2232                 return ERR_PTR(rc);
2233
2234         mr->type = QEDR_MR_USER;
2235
2236         mr->umem = ib_umem_get(ibpd->uobject->context, start, len, acc, 0);
2237         if (IS_ERR(mr->umem)) {
2238                 rc = -EFAULT;
2239                 goto err0;
2240         }
2241
2242         rc = init_mr_info(dev, &mr->info, ib_umem_page_count(mr->umem), 1);
2243         if (rc)
2244                 goto err1;
2245
2246         qedr_populate_pbls(dev, mr->umem, mr->info.pbl_table,
2247                            &mr->info.pbl_info, mr->umem->page_shift);
2248
2249         rc = dev->ops->rdma_alloc_tid(dev->rdma_ctx, &mr->hw_mr.itid);
2250         if (rc) {
2251                 DP_ERR(dev, "roce alloc tid returned an error %d\n", rc);
2252                 goto err1;
2253         }
2254
2255         /* Index only, 18 bit long, lkey = itid << 8 | key */
2256         mr->hw_mr.tid_type = QED_RDMA_TID_REGISTERED_MR;
2257         mr->hw_mr.key = 0;
2258         mr->hw_mr.pd = pd->pd_id;
2259         mr->hw_mr.local_read = 1;
2260         mr->hw_mr.local_write = (acc & IB_ACCESS_LOCAL_WRITE) ? 1 : 0;
2261         mr->hw_mr.remote_read = (acc & IB_ACCESS_REMOTE_READ) ? 1 : 0;
2262         mr->hw_mr.remote_write = (acc & IB_ACCESS_REMOTE_WRITE) ? 1 : 0;
2263         mr->hw_mr.remote_atomic = (acc & IB_ACCESS_REMOTE_ATOMIC) ? 1 : 0;
2264         mr->hw_mr.mw_bind = false;
2265         mr->hw_mr.pbl_ptr = mr->info.pbl_table[0].pa;
2266         mr->hw_mr.pbl_two_level = mr->info.pbl_info.two_layered;
2267         mr->hw_mr.pbl_page_size_log = ilog2(mr->info.pbl_info.pbl_size);
2268         mr->hw_mr.page_size_log = mr->umem->page_shift;
2269         mr->hw_mr.fbo = ib_umem_offset(mr->umem);
2270         mr->hw_mr.length = len;
2271         mr->hw_mr.vaddr = usr_addr;
2272         mr->hw_mr.zbva = false;
2273         mr->hw_mr.phy_mr = false;
2274         mr->hw_mr.dma_mr = false;
2275
2276         rc = dev->ops->rdma_register_tid(dev->rdma_ctx, &mr->hw_mr);
2277         if (rc) {
2278                 DP_ERR(dev, "roce register tid returned an error %d\n", rc);
2279                 goto err2;
2280         }
2281
2282         mr->ibmr.lkey = mr->hw_mr.itid << 8 | mr->hw_mr.key;
2283         if (mr->hw_mr.remote_write || mr->hw_mr.remote_read ||
2284             mr->hw_mr.remote_atomic)
2285                 mr->ibmr.rkey = mr->hw_mr.itid << 8 | mr->hw_mr.key;
2286
2287         DP_DEBUG(dev, QEDR_MSG_MR, "register user mr lkey: %x\n",
2288                  mr->ibmr.lkey);
2289         return &mr->ibmr;
2290
2291 err2:
2292         dev->ops->rdma_free_tid(dev->rdma_ctx, mr->hw_mr.itid);
2293 err1:
2294         qedr_free_pbl(dev, &mr->info.pbl_info, mr->info.pbl_table);
2295 err0:
2296         kfree(mr);
2297         return ERR_PTR(rc);
2298 }
2299
2300 int qedr_dereg_mr(struct ib_mr *ib_mr)
2301 {
2302         struct qedr_mr *mr = get_qedr_mr(ib_mr);
2303         struct qedr_dev *dev = get_qedr_dev(ib_mr->device);
2304         int rc = 0;
2305
2306         rc = dev->ops->rdma_deregister_tid(dev->rdma_ctx, mr->hw_mr.itid);
2307         if (rc)
2308                 return rc;
2309
2310         dev->ops->rdma_free_tid(dev->rdma_ctx, mr->hw_mr.itid);
2311
2312         if ((mr->type != QEDR_MR_DMA) && (mr->type != QEDR_MR_FRMR))
2313                 qedr_free_pbl(dev, &mr->info.pbl_info, mr->info.pbl_table);
2314
2315         /* it could be user registered memory. */
2316         if (mr->umem)
2317                 ib_umem_release(mr->umem);
2318
2319         kfree(mr);
2320
2321         return rc;
2322 }
2323
2324 static struct qedr_mr *__qedr_alloc_mr(struct ib_pd *ibpd,
2325                                        int max_page_list_len)
2326 {
2327         struct qedr_pd *pd = get_qedr_pd(ibpd);
2328         struct qedr_dev *dev = get_qedr_dev(ibpd->device);
2329         struct qedr_mr *mr;
2330         int rc = -ENOMEM;
2331
2332         DP_DEBUG(dev, QEDR_MSG_MR,
2333                  "qedr_alloc_frmr pd = %d max_page_list_len= %d\n", pd->pd_id,
2334                  max_page_list_len);
2335
2336         mr = kzalloc(sizeof(*mr), GFP_KERNEL);
2337         if (!mr)
2338                 return ERR_PTR(rc);
2339
2340         mr->dev = dev;
2341         mr->type = QEDR_MR_FRMR;
2342
2343         rc = init_mr_info(dev, &mr->info, max_page_list_len, 1);
2344         if (rc)
2345                 goto err0;
2346
2347         rc = dev->ops->rdma_alloc_tid(dev->rdma_ctx, &mr->hw_mr.itid);
2348         if (rc) {
2349                 DP_ERR(dev, "roce alloc tid returned an error %d\n", rc);
2350                 goto err0;
2351         }
2352
2353         /* Index only, 18 bit long, lkey = itid << 8 | key */
2354         mr->hw_mr.tid_type = QED_RDMA_TID_FMR;
2355         mr->hw_mr.key = 0;
2356         mr->hw_mr.pd = pd->pd_id;
2357         mr->hw_mr.local_read = 1;
2358         mr->hw_mr.local_write = 0;
2359         mr->hw_mr.remote_read = 0;
2360         mr->hw_mr.remote_write = 0;
2361         mr->hw_mr.remote_atomic = 0;
2362         mr->hw_mr.mw_bind = false;
2363         mr->hw_mr.pbl_ptr = 0;
2364         mr->hw_mr.pbl_two_level = mr->info.pbl_info.two_layered;
2365         mr->hw_mr.pbl_page_size_log = ilog2(mr->info.pbl_info.pbl_size);
2366         mr->hw_mr.fbo = 0;
2367         mr->hw_mr.length = 0;
2368         mr->hw_mr.vaddr = 0;
2369         mr->hw_mr.zbva = false;
2370         mr->hw_mr.phy_mr = true;
2371         mr->hw_mr.dma_mr = false;
2372
2373         rc = dev->ops->rdma_register_tid(dev->rdma_ctx, &mr->hw_mr);
2374         if (rc) {
2375                 DP_ERR(dev, "roce register tid returned an error %d\n", rc);
2376                 goto err1;
2377         }
2378
2379         mr->ibmr.lkey = mr->hw_mr.itid << 8 | mr->hw_mr.key;
2380         mr->ibmr.rkey = mr->ibmr.lkey;
2381
2382         DP_DEBUG(dev, QEDR_MSG_MR, "alloc frmr: %x\n", mr->ibmr.lkey);
2383         return mr;
2384
2385 err1:
2386         dev->ops->rdma_free_tid(dev->rdma_ctx, mr->hw_mr.itid);
2387 err0:
2388         kfree(mr);
2389         return ERR_PTR(rc);
2390 }
2391
2392 struct ib_mr *qedr_alloc_mr(struct ib_pd *ibpd,
2393                             enum ib_mr_type mr_type, u32 max_num_sg)
2394 {
2395         struct qedr_dev *dev;
2396         struct qedr_mr *mr;
2397
2398         if (mr_type != IB_MR_TYPE_MEM_REG)
2399                 return ERR_PTR(-EINVAL);
2400
2401         mr = __qedr_alloc_mr(ibpd, max_num_sg);
2402
2403         if (IS_ERR(mr))
2404                 return ERR_PTR(-EINVAL);
2405
2406         dev = mr->dev;
2407
2408         return &mr->ibmr;
2409 }
2410
2411 static int qedr_set_page(struct ib_mr *ibmr, u64 addr)
2412 {
2413         struct qedr_mr *mr = get_qedr_mr(ibmr);
2414         struct qedr_pbl *pbl_table;
2415         struct regpair *pbe;
2416         u32 pbes_in_page;
2417
2418         if (unlikely(mr->npages == mr->info.pbl_info.num_pbes)) {
2419                 DP_ERR(mr->dev, "qedr_set_page failes when %d\n", mr->npages);
2420                 return -ENOMEM;
2421         }
2422
2423         DP_DEBUG(mr->dev, QEDR_MSG_MR, "qedr_set_page pages[%d] = 0x%llx\n",
2424                  mr->npages, addr);
2425
2426         pbes_in_page = mr->info.pbl_info.pbl_size / sizeof(u64);
2427         pbl_table = mr->info.pbl_table + (mr->npages / pbes_in_page);
2428         pbe = (struct regpair *)pbl_table->va;
2429         pbe +=  mr->npages % pbes_in_page;
2430         pbe->lo = cpu_to_le32((u32)addr);
2431         pbe->hi = cpu_to_le32((u32)upper_32_bits(addr));
2432
2433         mr->npages++;
2434
2435         return 0;
2436 }
2437
2438 static void handle_completed_mrs(struct qedr_dev *dev, struct mr_info *info)
2439 {
2440         int work = info->completed - info->completed_handled - 1;
2441
2442         DP_DEBUG(dev, QEDR_MSG_MR, "Special FMR work = %d\n", work);
2443         while (work-- > 0 && !list_empty(&info->inuse_pbl_list)) {
2444                 struct qedr_pbl *pbl;
2445
2446                 /* Free all the page list that are possible to be freed
2447                  * (all the ones that were invalidated), under the assumption
2448                  * that if an FMR was completed successfully that means that
2449                  * if there was an invalidate operation before it also ended
2450                  */
2451                 pbl = list_first_entry(&info->inuse_pbl_list,
2452                                        struct qedr_pbl, list_entry);
2453                 list_move_tail(&pbl->list_entry, &info->free_pbl_list);
2454                 info->completed_handled++;
2455         }
2456 }
2457
2458 int qedr_map_mr_sg(struct ib_mr *ibmr, struct scatterlist *sg,
2459                    int sg_nents, unsigned int *sg_offset)
2460 {
2461         struct qedr_mr *mr = get_qedr_mr(ibmr);
2462
2463         mr->npages = 0;
2464
2465         handle_completed_mrs(mr->dev, &mr->info);
2466         return ib_sg_to_pages(ibmr, sg, sg_nents, NULL, qedr_set_page);
2467 }
2468
2469 struct ib_mr *qedr_get_dma_mr(struct ib_pd *ibpd, int acc)
2470 {
2471         struct qedr_dev *dev = get_qedr_dev(ibpd->device);
2472         struct qedr_pd *pd = get_qedr_pd(ibpd);
2473         struct qedr_mr *mr;
2474         int rc;
2475
2476         mr = kzalloc(sizeof(*mr), GFP_KERNEL);
2477         if (!mr)
2478                 return ERR_PTR(-ENOMEM);
2479
2480         mr->type = QEDR_MR_DMA;
2481
2482         rc = dev->ops->rdma_alloc_tid(dev->rdma_ctx, &mr->hw_mr.itid);
2483         if (rc) {
2484                 DP_ERR(dev, "roce alloc tid returned an error %d\n", rc);
2485                 goto err1;
2486         }
2487
2488         /* index only, 18 bit long, lkey = itid << 8 | key */
2489         mr->hw_mr.tid_type = QED_RDMA_TID_REGISTERED_MR;
2490         mr->hw_mr.pd = pd->pd_id;
2491         mr->hw_mr.local_read = 1;
2492         mr->hw_mr.local_write = (acc & IB_ACCESS_LOCAL_WRITE) ? 1 : 0;
2493         mr->hw_mr.remote_read = (acc & IB_ACCESS_REMOTE_READ) ? 1 : 0;
2494         mr->hw_mr.remote_write = (acc & IB_ACCESS_REMOTE_WRITE) ? 1 : 0;
2495         mr->hw_mr.remote_atomic = (acc & IB_ACCESS_REMOTE_ATOMIC) ? 1 : 0;
2496         mr->hw_mr.dma_mr = true;
2497
2498         rc = dev->ops->rdma_register_tid(dev->rdma_ctx, &mr->hw_mr);
2499         if (rc) {
2500                 DP_ERR(dev, "roce register tid returned an error %d\n", rc);
2501                 goto err2;
2502         }
2503
2504         mr->ibmr.lkey = mr->hw_mr.itid << 8 | mr->hw_mr.key;
2505         if (mr->hw_mr.remote_write || mr->hw_mr.remote_read ||
2506             mr->hw_mr.remote_atomic)
2507                 mr->ibmr.rkey = mr->hw_mr.itid << 8 | mr->hw_mr.key;
2508
2509         DP_DEBUG(dev, QEDR_MSG_MR, "get dma mr: lkey = %x\n", mr->ibmr.lkey);
2510         return &mr->ibmr;
2511
2512 err2:
2513         dev->ops->rdma_free_tid(dev->rdma_ctx, mr->hw_mr.itid);
2514 err1:
2515         kfree(mr);
2516         return ERR_PTR(rc);
2517 }
2518
2519 static inline int qedr_wq_is_full(struct qedr_qp_hwq_info *wq)
2520 {
2521         return (((wq->prod + 1) % wq->max_wr) == wq->cons);
2522 }
2523
2524 static int sge_data_len(struct ib_sge *sg_list, int num_sge)
2525 {
2526         int i, len = 0;
2527
2528         for (i = 0; i < num_sge; i++)
2529                 len += sg_list[i].length;
2530
2531         return len;
2532 }
2533
2534 static void swap_wqe_data64(u64 *p)
2535 {
2536         int i;
2537
2538         for (i = 0; i < QEDR_SQE_ELEMENT_SIZE / sizeof(u64); i++, p++)
2539                 *p = cpu_to_be64(cpu_to_le64(*p));
2540 }
2541
2542 static u32 qedr_prepare_sq_inline_data(struct qedr_dev *dev,
2543                                        struct qedr_qp *qp, u8 *wqe_size,
2544                                        struct ib_send_wr *wr,
2545                                        struct ib_send_wr **bad_wr, u8 *bits,
2546                                        u8 bit)
2547 {
2548         u32 data_size = sge_data_len(wr->sg_list, wr->num_sge);
2549         char *seg_prt, *wqe;
2550         int i, seg_siz;
2551
2552         if (data_size > ROCE_REQ_MAX_INLINE_DATA_SIZE) {
2553                 DP_ERR(dev, "Too much inline data in WR: %d\n", data_size);
2554                 *bad_wr = wr;
2555                 return 0;
2556         }
2557
2558         if (!data_size)
2559                 return data_size;
2560
2561         *bits |= bit;
2562
2563         seg_prt = NULL;
2564         wqe = NULL;
2565         seg_siz = 0;
2566
2567         /* Copy data inline */
2568         for (i = 0; i < wr->num_sge; i++) {
2569                 u32 len = wr->sg_list[i].length;
2570                 void *src = (void *)(uintptr_t)wr->sg_list[i].addr;
2571
2572                 while (len > 0) {
2573                         u32 cur;
2574
2575                         /* New segment required */
2576                         if (!seg_siz) {
2577                                 wqe = (char *)qed_chain_produce(&qp->sq.pbl);
2578                                 seg_prt = wqe;
2579                                 seg_siz = sizeof(struct rdma_sq_common_wqe);
2580                                 (*wqe_size)++;
2581                         }
2582
2583                         /* Calculate currently allowed length */
2584                         cur = min_t(u32, len, seg_siz);
2585                         memcpy(seg_prt, src, cur);
2586
2587                         /* Update segment variables */
2588                         seg_prt += cur;
2589                         seg_siz -= cur;
2590
2591                         /* Update sge variables */
2592                         src += cur;
2593                         len -= cur;
2594
2595                         /* Swap fully-completed segments */
2596                         if (!seg_siz)
2597                                 swap_wqe_data64((u64 *)wqe);
2598                 }
2599         }
2600
2601         /* swap last not completed segment */
2602         if (seg_siz)
2603                 swap_wqe_data64((u64 *)wqe);
2604
2605         return data_size;
2606 }
2607
2608 #define RQ_SGE_SET(sge, vaddr, vlength, vflags)                 \
2609         do {                                                    \
2610                 DMA_REGPAIR_LE(sge->addr, vaddr);               \
2611                 (sge)->length = cpu_to_le32(vlength);           \
2612                 (sge)->flags = cpu_to_le32(vflags);             \
2613         } while (0)
2614
2615 #define SRQ_HDR_SET(hdr, vwr_id, num_sge)                       \
2616         do {                                                    \
2617                 DMA_REGPAIR_LE(hdr->wr_id, vwr_id);             \
2618                 (hdr)->num_sges = num_sge;                      \
2619         } while (0)
2620
2621 #define SRQ_SGE_SET(sge, vaddr, vlength, vlkey)                 \
2622         do {                                                    \
2623                 DMA_REGPAIR_LE(sge->addr, vaddr);               \
2624                 (sge)->length = cpu_to_le32(vlength);           \
2625                 (sge)->l_key = cpu_to_le32(vlkey);              \
2626         } while (0)
2627
2628 static u32 qedr_prepare_sq_sges(struct qedr_qp *qp, u8 *wqe_size,
2629                                 struct ib_send_wr *wr)
2630 {
2631         u32 data_size = 0;
2632         int i;
2633
2634         for (i = 0; i < wr->num_sge; i++) {
2635                 struct rdma_sq_sge *sge = qed_chain_produce(&qp->sq.pbl);
2636
2637                 DMA_REGPAIR_LE(sge->addr, wr->sg_list[i].addr);
2638                 sge->l_key = cpu_to_le32(wr->sg_list[i].lkey);
2639                 sge->length = cpu_to_le32(wr->sg_list[i].length);
2640                 data_size += wr->sg_list[i].length;
2641         }
2642
2643         if (wqe_size)
2644                 *wqe_size += wr->num_sge;
2645
2646         return data_size;
2647 }
2648
2649 static u32 qedr_prepare_sq_rdma_data(struct qedr_dev *dev,
2650                                      struct qedr_qp *qp,
2651                                      struct rdma_sq_rdma_wqe_1st *rwqe,
2652                                      struct rdma_sq_rdma_wqe_2nd *rwqe2,
2653                                      struct ib_send_wr *wr,
2654                                      struct ib_send_wr **bad_wr)
2655 {
2656         rwqe2->r_key = cpu_to_le32(rdma_wr(wr)->rkey);
2657         DMA_REGPAIR_LE(rwqe2->remote_va, rdma_wr(wr)->remote_addr);
2658
2659         if (wr->send_flags & IB_SEND_INLINE &&
2660             (wr->opcode == IB_WR_RDMA_WRITE_WITH_IMM ||
2661              wr->opcode == IB_WR_RDMA_WRITE)) {
2662                 u8 flags = 0;
2663
2664                 SET_FIELD2(flags, RDMA_SQ_RDMA_WQE_1ST_INLINE_FLG, 1);
2665                 return qedr_prepare_sq_inline_data(dev, qp, &rwqe->wqe_size, wr,
2666                                                    bad_wr, &rwqe->flags, flags);
2667         }
2668
2669         return qedr_prepare_sq_sges(qp, &rwqe->wqe_size, wr);
2670 }
2671
2672 static u32 qedr_prepare_sq_send_data(struct qedr_dev *dev,
2673                                      struct qedr_qp *qp,
2674                                      struct rdma_sq_send_wqe_1st *swqe,
2675                                      struct rdma_sq_send_wqe_2st *swqe2,
2676                                      struct ib_send_wr *wr,
2677                                      struct ib_send_wr **bad_wr)
2678 {
2679         memset(swqe2, 0, sizeof(*swqe2));
2680         if (wr->send_flags & IB_SEND_INLINE) {
2681                 u8 flags = 0;
2682
2683                 SET_FIELD2(flags, RDMA_SQ_SEND_WQE_INLINE_FLG, 1);
2684                 return qedr_prepare_sq_inline_data(dev, qp, &swqe->wqe_size, wr,
2685                                                    bad_wr, &swqe->flags, flags);
2686         }
2687
2688         return qedr_prepare_sq_sges(qp, &swqe->wqe_size, wr);
2689 }
2690
2691 static int qedr_prepare_reg(struct qedr_qp *qp,
2692                             struct rdma_sq_fmr_wqe_1st *fwqe1,
2693                             struct ib_reg_wr *wr)
2694 {
2695         struct qedr_mr *mr = get_qedr_mr(wr->mr);
2696         struct rdma_sq_fmr_wqe_2nd *fwqe2;
2697
2698         fwqe2 = (struct rdma_sq_fmr_wqe_2nd *)qed_chain_produce(&qp->sq.pbl);
2699         fwqe1->addr.hi = upper_32_bits(mr->ibmr.iova);
2700         fwqe1->addr.lo = lower_32_bits(mr->ibmr.iova);
2701         fwqe1->l_key = wr->key;
2702
2703         fwqe2->access_ctrl = 0;
2704
2705         SET_FIELD2(fwqe2->access_ctrl, RDMA_SQ_FMR_WQE_2ND_REMOTE_READ,
2706                    !!(wr->access & IB_ACCESS_REMOTE_READ));
2707         SET_FIELD2(fwqe2->access_ctrl, RDMA_SQ_FMR_WQE_2ND_REMOTE_WRITE,
2708                    !!(wr->access & IB_ACCESS_REMOTE_WRITE));
2709         SET_FIELD2(fwqe2->access_ctrl, RDMA_SQ_FMR_WQE_2ND_ENABLE_ATOMIC,
2710                    !!(wr->access & IB_ACCESS_REMOTE_ATOMIC));
2711         SET_FIELD2(fwqe2->access_ctrl, RDMA_SQ_FMR_WQE_2ND_LOCAL_READ, 1);
2712         SET_FIELD2(fwqe2->access_ctrl, RDMA_SQ_FMR_WQE_2ND_LOCAL_WRITE,
2713                    !!(wr->access & IB_ACCESS_LOCAL_WRITE));
2714         fwqe2->fmr_ctrl = 0;
2715
2716         SET_FIELD2(fwqe2->fmr_ctrl, RDMA_SQ_FMR_WQE_2ND_PAGE_SIZE_LOG,
2717                    ilog2(mr->ibmr.page_size) - 12);
2718
2719         fwqe2->length_hi = 0;
2720         fwqe2->length_lo = mr->ibmr.length;
2721         fwqe2->pbl_addr.hi = upper_32_bits(mr->info.pbl_table->pa);
2722         fwqe2->pbl_addr.lo = lower_32_bits(mr->info.pbl_table->pa);
2723
2724         qp->wqe_wr_id[qp->sq.prod].mr = mr;
2725
2726         return 0;
2727 }
2728
2729 static enum ib_wc_opcode qedr_ib_to_wc_opcode(enum ib_wr_opcode opcode)
2730 {
2731         switch (opcode) {
2732         case IB_WR_RDMA_WRITE:
2733         case IB_WR_RDMA_WRITE_WITH_IMM:
2734                 return IB_WC_RDMA_WRITE;
2735         case IB_WR_SEND_WITH_IMM:
2736         case IB_WR_SEND:
2737         case IB_WR_SEND_WITH_INV:
2738                 return IB_WC_SEND;
2739         case IB_WR_RDMA_READ:
2740                 return IB_WC_RDMA_READ;
2741         case IB_WR_ATOMIC_CMP_AND_SWP:
2742                 return IB_WC_COMP_SWAP;
2743         case IB_WR_ATOMIC_FETCH_AND_ADD:
2744                 return IB_WC_FETCH_ADD;
2745         case IB_WR_REG_MR:
2746                 return IB_WC_REG_MR;
2747         case IB_WR_LOCAL_INV:
2748                 return IB_WC_LOCAL_INV;
2749         default:
2750                 return IB_WC_SEND;
2751         }
2752 }
2753
2754 static inline bool qedr_can_post_send(struct qedr_qp *qp, struct ib_send_wr *wr)
2755 {
2756         int wq_is_full, err_wr, pbl_is_full;
2757         struct qedr_dev *dev = qp->dev;
2758
2759         /* prevent SQ overflow and/or processing of a bad WR */
2760         err_wr = wr->num_sge > qp->sq.max_sges;
2761         wq_is_full = qedr_wq_is_full(&qp->sq);
2762         pbl_is_full = qed_chain_get_elem_left_u32(&qp->sq.pbl) <
2763                       QEDR_MAX_SQE_ELEMENTS_PER_SQE;
2764         if (wq_is_full || err_wr || pbl_is_full) {
2765                 if (wq_is_full && !(qp->err_bitmap & QEDR_QP_ERR_SQ_FULL)) {
2766                         DP_ERR(dev,
2767                                "error: WQ is full. Post send on QP %p failed (this error appears only once)\n",
2768                                qp);
2769                         qp->err_bitmap |= QEDR_QP_ERR_SQ_FULL;
2770                 }
2771
2772                 if (err_wr && !(qp->err_bitmap & QEDR_QP_ERR_BAD_SR)) {
2773                         DP_ERR(dev,
2774                                "error: WR is bad. Post send on QP %p failed (this error appears only once)\n",
2775                                qp);
2776                         qp->err_bitmap |= QEDR_QP_ERR_BAD_SR;
2777                 }
2778
2779                 if (pbl_is_full &&
2780                     !(qp->err_bitmap & QEDR_QP_ERR_SQ_PBL_FULL)) {
2781                         DP_ERR(dev,
2782                                "error: WQ PBL is full. Post send on QP %p failed (this error appears only once)\n",
2783                                qp);
2784                         qp->err_bitmap |= QEDR_QP_ERR_SQ_PBL_FULL;
2785                 }
2786                 return false;
2787         }
2788         return true;
2789 }
2790
2791 static int __qedr_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
2792                      struct ib_send_wr **bad_wr)
2793 {
2794         struct qedr_dev *dev = get_qedr_dev(ibqp->device);
2795         struct qedr_qp *qp = get_qedr_qp(ibqp);
2796         struct rdma_sq_atomic_wqe_1st *awqe1;
2797         struct rdma_sq_atomic_wqe_2nd *awqe2;
2798         struct rdma_sq_atomic_wqe_3rd *awqe3;
2799         struct rdma_sq_send_wqe_2st *swqe2;
2800         struct rdma_sq_local_inv_wqe *iwqe;
2801         struct rdma_sq_rdma_wqe_2nd *rwqe2;
2802         struct rdma_sq_send_wqe_1st *swqe;
2803         struct rdma_sq_rdma_wqe_1st *rwqe;
2804         struct rdma_sq_fmr_wqe_1st *fwqe1;
2805         struct rdma_sq_common_wqe *wqe;
2806         u32 length;
2807         int rc = 0;
2808         bool comp;
2809
2810         if (!qedr_can_post_send(qp, wr)) {
2811                 *bad_wr = wr;
2812                 return -ENOMEM;
2813         }
2814
2815         wqe = qed_chain_produce(&qp->sq.pbl);
2816         qp->wqe_wr_id[qp->sq.prod].signaled =
2817                 !!(wr->send_flags & IB_SEND_SIGNALED) || qp->signaled;
2818
2819         wqe->flags = 0;
2820         SET_FIELD2(wqe->flags, RDMA_SQ_SEND_WQE_SE_FLG,
2821                    !!(wr->send_flags & IB_SEND_SOLICITED));
2822         comp = (!!(wr->send_flags & IB_SEND_SIGNALED)) || qp->signaled;
2823         SET_FIELD2(wqe->flags, RDMA_SQ_SEND_WQE_COMP_FLG, comp);
2824         SET_FIELD2(wqe->flags, RDMA_SQ_SEND_WQE_RD_FENCE_FLG,
2825                    !!(wr->send_flags & IB_SEND_FENCE));
2826         wqe->prev_wqe_size = qp->prev_wqe_size;
2827
2828         qp->wqe_wr_id[qp->sq.prod].opcode = qedr_ib_to_wc_opcode(wr->opcode);
2829
2830         switch (wr->opcode) {
2831         case IB_WR_SEND_WITH_IMM:
2832                 wqe->req_type = RDMA_SQ_REQ_TYPE_SEND_WITH_IMM;
2833                 swqe = (struct rdma_sq_send_wqe_1st *)wqe;
2834                 swqe->wqe_size = 2;
2835                 swqe2 = qed_chain_produce(&qp->sq.pbl);
2836
2837                 swqe->inv_key_or_imm_data = cpu_to_le32(wr->ex.imm_data);
2838                 length = qedr_prepare_sq_send_data(dev, qp, swqe, swqe2,
2839                                                    wr, bad_wr);
2840                 swqe->length = cpu_to_le32(length);
2841                 qp->wqe_wr_id[qp->sq.prod].wqe_size = swqe->wqe_size;
2842                 qp->prev_wqe_size = swqe->wqe_size;
2843                 qp->wqe_wr_id[qp->sq.prod].bytes_len = swqe->length;
2844                 break;
2845         case IB_WR_SEND:
2846                 wqe->req_type = RDMA_SQ_REQ_TYPE_SEND;
2847                 swqe = (struct rdma_sq_send_wqe_1st *)wqe;
2848
2849                 swqe->wqe_size = 2;
2850                 swqe2 = qed_chain_produce(&qp->sq.pbl);
2851                 length = qedr_prepare_sq_send_data(dev, qp, swqe, swqe2,
2852                                                    wr, bad_wr);
2853                 swqe->length = cpu_to_le32(length);
2854                 qp->wqe_wr_id[qp->sq.prod].wqe_size = swqe->wqe_size;
2855                 qp->prev_wqe_size = swqe->wqe_size;
2856                 qp->wqe_wr_id[qp->sq.prod].bytes_len = swqe->length;
2857                 break;
2858         case IB_WR_SEND_WITH_INV:
2859                 wqe->req_type = RDMA_SQ_REQ_TYPE_SEND_WITH_INVALIDATE;
2860                 swqe = (struct rdma_sq_send_wqe_1st *)wqe;
2861                 swqe2 = qed_chain_produce(&qp->sq.pbl);
2862                 swqe->wqe_size = 2;
2863                 swqe->inv_key_or_imm_data = cpu_to_le32(wr->ex.invalidate_rkey);
2864                 length = qedr_prepare_sq_send_data(dev, qp, swqe, swqe2,
2865                                                    wr, bad_wr);
2866                 swqe->length = cpu_to_le32(length);
2867                 qp->wqe_wr_id[qp->sq.prod].wqe_size = swqe->wqe_size;
2868                 qp->prev_wqe_size = swqe->wqe_size;
2869                 qp->wqe_wr_id[qp->sq.prod].bytes_len = swqe->length;
2870                 break;
2871
2872         case IB_WR_RDMA_WRITE_WITH_IMM:
2873                 wqe->req_type = RDMA_SQ_REQ_TYPE_RDMA_WR_WITH_IMM;
2874                 rwqe = (struct rdma_sq_rdma_wqe_1st *)wqe;
2875
2876                 rwqe->wqe_size = 2;
2877                 rwqe->imm_data = htonl(cpu_to_le32(wr->ex.imm_data));
2878                 rwqe2 = qed_chain_produce(&qp->sq.pbl);
2879                 length = qedr_prepare_sq_rdma_data(dev, qp, rwqe, rwqe2,
2880                                                    wr, bad_wr);
2881                 rwqe->length = cpu_to_le32(length);
2882                 qp->wqe_wr_id[qp->sq.prod].wqe_size = rwqe->wqe_size;
2883                 qp->prev_wqe_size = rwqe->wqe_size;
2884                 qp->wqe_wr_id[qp->sq.prod].bytes_len = rwqe->length;
2885                 break;
2886         case IB_WR_RDMA_WRITE:
2887                 wqe->req_type = RDMA_SQ_REQ_TYPE_RDMA_WR;
2888                 rwqe = (struct rdma_sq_rdma_wqe_1st *)wqe;
2889
2890                 rwqe->wqe_size = 2;
2891                 rwqe2 = qed_chain_produce(&qp->sq.pbl);
2892                 length = qedr_prepare_sq_rdma_data(dev, qp, rwqe, rwqe2,
2893                                                    wr, bad_wr);
2894                 rwqe->length = cpu_to_le32(length);
2895                 qp->wqe_wr_id[qp->sq.prod].wqe_size = rwqe->wqe_size;
2896                 qp->prev_wqe_size = rwqe->wqe_size;
2897                 qp->wqe_wr_id[qp->sq.prod].bytes_len = rwqe->length;
2898                 break;
2899         case IB_WR_RDMA_READ_WITH_INV:
2900                 DP_ERR(dev,
2901                        "RDMA READ WITH INVALIDATE not supported\n");
2902                 *bad_wr = wr;
2903                 rc = -EINVAL;
2904                 break;
2905
2906         case IB_WR_RDMA_READ:
2907                 wqe->req_type = RDMA_SQ_REQ_TYPE_RDMA_RD;
2908                 rwqe = (struct rdma_sq_rdma_wqe_1st *)wqe;
2909
2910                 rwqe->wqe_size = 2;
2911                 rwqe2 = qed_chain_produce(&qp->sq.pbl);
2912                 length = qedr_prepare_sq_rdma_data(dev, qp, rwqe, rwqe2,
2913                                                    wr, bad_wr);
2914                 rwqe->length = cpu_to_le32(length);
2915                 qp->wqe_wr_id[qp->sq.prod].wqe_size = rwqe->wqe_size;
2916                 qp->prev_wqe_size = rwqe->wqe_size;
2917                 qp->wqe_wr_id[qp->sq.prod].bytes_len = rwqe->length;
2918                 break;
2919
2920         case IB_WR_ATOMIC_CMP_AND_SWP:
2921         case IB_WR_ATOMIC_FETCH_AND_ADD:
2922                 awqe1 = (struct rdma_sq_atomic_wqe_1st *)wqe;
2923                 awqe1->wqe_size = 4;
2924
2925                 awqe2 = qed_chain_produce(&qp->sq.pbl);
2926                 DMA_REGPAIR_LE(awqe2->remote_va, atomic_wr(wr)->remote_addr);
2927                 awqe2->r_key = cpu_to_le32(atomic_wr(wr)->rkey);
2928
2929                 awqe3 = qed_chain_produce(&qp->sq.pbl);
2930
2931                 if (wr->opcode == IB_WR_ATOMIC_FETCH_AND_ADD) {
2932                         wqe->req_type = RDMA_SQ_REQ_TYPE_ATOMIC_ADD;
2933                         DMA_REGPAIR_LE(awqe3->swap_data,
2934                                        atomic_wr(wr)->compare_add);
2935                 } else {
2936                         wqe->req_type = RDMA_SQ_REQ_TYPE_ATOMIC_CMP_AND_SWAP;
2937                         DMA_REGPAIR_LE(awqe3->swap_data,
2938                                        atomic_wr(wr)->swap);
2939                         DMA_REGPAIR_LE(awqe3->cmp_data,
2940                                        atomic_wr(wr)->compare_add);
2941                 }
2942
2943                 qedr_prepare_sq_sges(qp, NULL, wr);
2944
2945                 qp->wqe_wr_id[qp->sq.prod].wqe_size = awqe1->wqe_size;
2946                 qp->prev_wqe_size = awqe1->wqe_size;
2947                 break;
2948
2949         case IB_WR_LOCAL_INV:
2950                 iwqe = (struct rdma_sq_local_inv_wqe *)wqe;
2951                 iwqe->wqe_size = 1;
2952
2953                 iwqe->req_type = RDMA_SQ_REQ_TYPE_LOCAL_INVALIDATE;
2954                 iwqe->inv_l_key = wr->ex.invalidate_rkey;
2955                 qp->wqe_wr_id[qp->sq.prod].wqe_size = iwqe->wqe_size;
2956                 qp->prev_wqe_size = iwqe->wqe_size;
2957                 break;
2958         case IB_WR_REG_MR:
2959                 DP_DEBUG(dev, QEDR_MSG_CQ, "REG_MR\n");
2960                 wqe->req_type = RDMA_SQ_REQ_TYPE_FAST_MR;
2961                 fwqe1 = (struct rdma_sq_fmr_wqe_1st *)wqe;
2962                 fwqe1->wqe_size = 2;
2963
2964                 rc = qedr_prepare_reg(qp, fwqe1, reg_wr(wr));
2965                 if (rc) {
2966                         DP_ERR(dev, "IB_REG_MR failed rc=%d\n", rc);
2967                         *bad_wr = wr;
2968                         break;
2969                 }
2970
2971                 qp->wqe_wr_id[qp->sq.prod].wqe_size = fwqe1->wqe_size;
2972                 qp->prev_wqe_size = fwqe1->wqe_size;
2973                 break;
2974         default:
2975                 DP_ERR(dev, "invalid opcode 0x%x!\n", wr->opcode);
2976                 rc = -EINVAL;
2977                 *bad_wr = wr;
2978                 break;
2979         }
2980
2981         if (*bad_wr) {
2982                 u16 value;
2983
2984                 /* Restore prod to its position before
2985                  * this WR was processed
2986                  */
2987                 value = le16_to_cpu(qp->sq.db_data.data.value);
2988                 qed_chain_set_prod(&qp->sq.pbl, value, wqe);
2989
2990                 /* Restore prev_wqe_size */
2991                 qp->prev_wqe_size = wqe->prev_wqe_size;
2992                 rc = -EINVAL;
2993                 DP_ERR(dev, "POST SEND FAILED\n");
2994         }
2995
2996         return rc;
2997 }
2998
2999 int qedr_post_send(struct ib_qp *ibqp, struct ib_send_wr *wr,
3000                    struct ib_send_wr **bad_wr)
3001 {
3002         struct qedr_dev *dev = get_qedr_dev(ibqp->device);
3003         struct qedr_qp *qp = get_qedr_qp(ibqp);
3004         unsigned long flags;
3005         int rc = 0;
3006
3007         *bad_wr = NULL;
3008
3009         if (qp->qp_type == IB_QPT_GSI)
3010                 return qedr_gsi_post_send(ibqp, wr, bad_wr);
3011
3012         spin_lock_irqsave(&qp->q_lock, flags);
3013
3014         if ((qp->state != QED_ROCE_QP_STATE_RTS) &&
3015             (qp->state != QED_ROCE_QP_STATE_ERR) &&
3016             (qp->state != QED_ROCE_QP_STATE_SQD)) {
3017                 spin_unlock_irqrestore(&qp->q_lock, flags);
3018                 *bad_wr = wr;
3019                 DP_DEBUG(dev, QEDR_MSG_CQ,
3020                          "QP in wrong state! QP icid=0x%x state %d\n",
3021                          qp->icid, qp->state);
3022                 return -EINVAL;
3023         }
3024
3025         while (wr) {
3026                 rc = __qedr_post_send(ibqp, wr, bad_wr);
3027                 if (rc)
3028                         break;
3029
3030                 qp->wqe_wr_id[qp->sq.prod].wr_id = wr->wr_id;
3031
3032                 qedr_inc_sw_prod(&qp->sq);
3033
3034                 qp->sq.db_data.data.value++;
3035
3036                 wr = wr->next;
3037         }
3038
3039         /* Trigger doorbell
3040          * If there was a failure in the first WR then it will be triggered in
3041          * vane. However this is not harmful (as long as the producer value is
3042          * unchanged). For performance reasons we avoid checking for this
3043          * redundant doorbell.
3044          */
3045         wmb();
3046         writel(qp->sq.db_data.raw, qp->sq.db);
3047
3048         /* Make sure write sticks */
3049         mmiowb();
3050
3051         spin_unlock_irqrestore(&qp->q_lock, flags);
3052
3053         return rc;
3054 }
3055
3056 int qedr_post_recv(struct ib_qp *ibqp, struct ib_recv_wr *wr,
3057                    struct ib_recv_wr **bad_wr)
3058 {
3059         struct qedr_qp *qp = get_qedr_qp(ibqp);
3060         struct qedr_dev *dev = qp->dev;
3061         unsigned long flags;
3062         int status = 0;
3063
3064         if (qp->qp_type == IB_QPT_GSI)
3065                 return qedr_gsi_post_recv(ibqp, wr, bad_wr);
3066
3067         spin_lock_irqsave(&qp->q_lock, flags);
3068
3069         if (qp->state == QED_ROCE_QP_STATE_RESET) {
3070                 spin_unlock_irqrestore(&qp->q_lock, flags);
3071                 *bad_wr = wr;
3072                 return -EINVAL;
3073         }
3074
3075         while (wr) {
3076                 int i;
3077
3078                 if (qed_chain_get_elem_left_u32(&qp->rq.pbl) <
3079                     QEDR_MAX_RQE_ELEMENTS_PER_RQE ||
3080                     wr->num_sge > qp->rq.max_sges) {
3081                         DP_ERR(dev, "Can't post WR  (%d < %d) || (%d > %d)\n",
3082                                qed_chain_get_elem_left_u32(&qp->rq.pbl),
3083                                QEDR_MAX_RQE_ELEMENTS_PER_RQE, wr->num_sge,
3084                                qp->rq.max_sges);
3085                         status = -ENOMEM;
3086                         *bad_wr = wr;
3087                         break;
3088                 }
3089                 for (i = 0; i < wr->num_sge; i++) {
3090                         u32 flags = 0;
3091                         struct rdma_rq_sge *rqe =
3092                             qed_chain_produce(&qp->rq.pbl);
3093
3094                         /* First one must include the number
3095                          * of SGE in the list
3096                          */
3097                         if (!i)
3098                                 SET_FIELD(flags, RDMA_RQ_SGE_NUM_SGES,
3099                                           wr->num_sge);
3100
3101                         SET_FIELD(flags, RDMA_RQ_SGE_L_KEY,
3102                                   wr->sg_list[i].lkey);
3103
3104                         RQ_SGE_SET(rqe, wr->sg_list[i].addr,
3105                                    wr->sg_list[i].length, flags);
3106                 }
3107
3108                 /* Special case of no sges. FW requires between 1-4 sges...
3109                  * in this case we need to post 1 sge with length zero. this is
3110                  * because rdma write with immediate consumes an RQ.
3111                  */
3112                 if (!wr->num_sge) {
3113                         u32 flags = 0;
3114                         struct rdma_rq_sge *rqe =
3115                             qed_chain_produce(&qp->rq.pbl);
3116
3117                         /* First one must include the number
3118                          * of SGE in the list
3119                          */
3120                         SET_FIELD(flags, RDMA_RQ_SGE_L_KEY, 0);
3121                         SET_FIELD(flags, RDMA_RQ_SGE_NUM_SGES, 1);
3122
3123                         RQ_SGE_SET(rqe, 0, 0, flags);
3124                         i = 1;
3125                 }
3126
3127                 qp->rqe_wr_id[qp->rq.prod].wr_id = wr->wr_id;
3128                 qp->rqe_wr_id[qp->rq.prod].wqe_size = i;
3129
3130                 qedr_inc_sw_prod(&qp->rq);
3131
3132                 /* Flush all the writes before signalling doorbell */
3133                 wmb();
3134
3135                 qp->rq.db_data.data.value++;
3136
3137                 writel(qp->rq.db_data.raw, qp->rq.db);
3138
3139                 /* Make sure write sticks */
3140                 mmiowb();
3141
3142                 wr = wr->next;
3143         }
3144
3145         spin_unlock_irqrestore(&qp->q_lock, flags);
3146
3147         return status;
3148 }
3149
3150 static int is_valid_cqe(struct qedr_cq *cq, union rdma_cqe *cqe)
3151 {
3152         struct rdma_cqe_requester *resp_cqe = &cqe->req;
3153
3154         return (resp_cqe->flags & RDMA_CQE_REQUESTER_TOGGLE_BIT_MASK) ==
3155                 cq->pbl_toggle;
3156 }
3157
3158 static struct qedr_qp *cqe_get_qp(union rdma_cqe *cqe)
3159 {
3160         struct rdma_cqe_requester *resp_cqe = &cqe->req;
3161         struct qedr_qp *qp;
3162
3163         qp = (struct qedr_qp *)(uintptr_t)HILO_GEN(resp_cqe->qp_handle.hi,
3164                                                    resp_cqe->qp_handle.lo,
3165                                                    u64);
3166         return qp;
3167 }
3168
3169 static enum rdma_cqe_type cqe_get_type(union rdma_cqe *cqe)
3170 {
3171         struct rdma_cqe_requester *resp_cqe = &cqe->req;
3172
3173         return GET_FIELD(resp_cqe->flags, RDMA_CQE_REQUESTER_TYPE);
3174 }
3175
3176 /* Return latest CQE (needs processing) */
3177 static union rdma_cqe *get_cqe(struct qedr_cq *cq)
3178 {
3179         return cq->latest_cqe;
3180 }
3181
3182 /* In fmr we need to increase the number of fmr completed counter for the fmr
3183  * algorithm determining whether we can free a pbl or not.
3184  * we need to perform this whether the work request was signaled or not. for
3185  * this purpose we call this function from the condition that checks if a wr
3186  * should be skipped, to make sure we don't miss it ( possibly this fmr
3187  * operation was not signalted)
3188  */
3189 static inline void qedr_chk_if_fmr(struct qedr_qp *qp)
3190 {
3191         if (qp->wqe_wr_id[qp->sq.cons].opcode == IB_WC_REG_MR)
3192                 qp->wqe_wr_id[qp->sq.cons].mr->info.completed++;
3193 }
3194
3195 static int process_req(struct qedr_dev *dev, struct qedr_qp *qp,
3196                        struct qedr_cq *cq, int num_entries,
3197                        struct ib_wc *wc, u16 hw_cons, enum ib_wc_status status,
3198                        int force)
3199 {
3200         u16 cnt = 0;
3201
3202         while (num_entries && qp->sq.wqe_cons != hw_cons) {
3203                 if (!qp->wqe_wr_id[qp->sq.cons].signaled && !force) {
3204                         qedr_chk_if_fmr(qp);
3205                         /* skip WC */
3206                         goto next_cqe;
3207                 }
3208
3209                 /* fill WC */
3210                 wc->status = status;
3211                 wc->vendor_err = 0;
3212                 wc->wc_flags = 0;
3213                 wc->src_qp = qp->id;
3214                 wc->qp = &qp->ibqp;
3215
3216                 wc->wr_id = qp->wqe_wr_id[qp->sq.cons].wr_id;
3217                 wc->opcode = qp->wqe_wr_id[qp->sq.cons].opcode;
3218
3219                 switch (wc->opcode) {
3220                 case IB_WC_RDMA_WRITE:
3221                         wc->byte_len = qp->wqe_wr_id[qp->sq.cons].bytes_len;
3222                         break;
3223                 case IB_WC_COMP_SWAP:
3224                 case IB_WC_FETCH_ADD:
3225                         wc->byte_len = 8;
3226                         break;
3227                 case IB_WC_REG_MR:
3228                         qp->wqe_wr_id[qp->sq.cons].mr->info.completed++;
3229                         break;
3230                 case IB_WC_RDMA_READ:
3231                 case IB_WC_SEND:
3232                         wc->byte_len = qp->wqe_wr_id[qp->sq.cons].bytes_len;
3233                         break;
3234                 default:
3235                         break;
3236                 }
3237
3238                 num_entries--;
3239                 wc++;
3240                 cnt++;
3241 next_cqe:
3242                 while (qp->wqe_wr_id[qp->sq.cons].wqe_size--)
3243                         qed_chain_consume(&qp->sq.pbl);
3244                 qedr_inc_sw_cons(&qp->sq);
3245         }
3246
3247         return cnt;
3248 }
3249
3250 static int qedr_poll_cq_req(struct qedr_dev *dev,
3251                             struct qedr_qp *qp, struct qedr_cq *cq,
3252                             int num_entries, struct ib_wc *wc,
3253                             struct rdma_cqe_requester *req)
3254 {
3255         int cnt = 0;
3256
3257         switch (req->status) {
3258         case RDMA_CQE_REQ_STS_OK:
3259                 cnt = process_req(dev, qp, cq, num_entries, wc, req->sq_cons,
3260                                   IB_WC_SUCCESS, 0);
3261                 break;
3262         case RDMA_CQE_REQ_STS_WORK_REQUEST_FLUSHED_ERR:
3263                 if (qp->state != QED_ROCE_QP_STATE_ERR)
3264                         DP_ERR(dev,
3265                                "Error: POLL CQ with RDMA_CQE_REQ_STS_WORK_REQUEST_FLUSHED_ERR. CQ icid=0x%x, QP icid=0x%x\n",
3266                                cq->icid, qp->icid);
3267                 cnt = process_req(dev, qp, cq, num_entries, wc, req->sq_cons,
3268                                   IB_WC_WR_FLUSH_ERR, 1);
3269                 break;
3270         default:
3271                 /* process all WQE before the cosumer */
3272                 qp->state = QED_ROCE_QP_STATE_ERR;
3273                 cnt = process_req(dev, qp, cq, num_entries, wc,
3274                                   req->sq_cons - 1, IB_WC_SUCCESS, 0);
3275                 wc += cnt;
3276                 /* if we have extra WC fill it with actual error info */
3277                 if (cnt < num_entries) {
3278                         enum ib_wc_status wc_status;
3279
3280                         switch (req->status) {
3281                         case RDMA_CQE_REQ_STS_BAD_RESPONSE_ERR:
3282                                 DP_ERR(dev,
3283                                        "Error: POLL CQ with RDMA_CQE_REQ_STS_BAD_RESPONSE_ERR. CQ icid=0x%x, QP icid=0x%x\n",
3284                                        cq->icid, qp->icid);
3285                                 wc_status = IB_WC_BAD_RESP_ERR;
3286                                 break;
3287                         case RDMA_CQE_REQ_STS_LOCAL_LENGTH_ERR:
3288                                 DP_ERR(dev,
3289                                        "Error: POLL CQ with RDMA_CQE_REQ_STS_LOCAL_LENGTH_ERR. CQ icid=0x%x, QP icid=0x%x\n",
3290                                        cq->icid, qp->icid);
3291                                 wc_status = IB_WC_LOC_LEN_ERR;
3292                                 break;
3293                         case RDMA_CQE_REQ_STS_LOCAL_QP_OPERATION_ERR:
3294                                 DP_ERR(dev,
3295                                        "Error: POLL CQ with RDMA_CQE_REQ_STS_LOCAL_QP_OPERATION_ERR. CQ icid=0x%x, QP icid=0x%x\n",
3296                                        cq->icid, qp->icid);
3297                                 wc_status = IB_WC_LOC_QP_OP_ERR;
3298                                 break;
3299                         case RDMA_CQE_REQ_STS_LOCAL_PROTECTION_ERR:
3300                                 DP_ERR(dev,
3301                                        "Error: POLL CQ with RDMA_CQE_REQ_STS_LOCAL_PROTECTION_ERR. CQ icid=0x%x, QP icid=0x%x\n",
3302                                        cq->icid, qp->icid);
3303                                 wc_status = IB_WC_LOC_PROT_ERR;
3304                                 break;
3305                         case RDMA_CQE_REQ_STS_MEMORY_MGT_OPERATION_ERR:
3306                                 DP_ERR(dev,
3307                                        "Error: POLL CQ with RDMA_CQE_REQ_STS_MEMORY_MGT_OPERATION_ERR. CQ icid=0x%x, QP icid=0x%x\n",
3308                                        cq->icid, qp->icid);
3309                                 wc_status = IB_WC_MW_BIND_ERR;
3310                                 break;
3311                         case RDMA_CQE_REQ_STS_REMOTE_INVALID_REQUEST_ERR:
3312                                 DP_ERR(dev,
3313                                        "Error: POLL CQ with RDMA_CQE_REQ_STS_REMOTE_INVALID_REQUEST_ERR. CQ icid=0x%x, QP icid=0x%x\n",
3314                                        cq->icid, qp->icid);
3315                                 wc_status = IB_WC_REM_INV_REQ_ERR;
3316                                 break;
3317                         case RDMA_CQE_REQ_STS_REMOTE_ACCESS_ERR:
3318                                 DP_ERR(dev,
3319                                        "Error: POLL CQ with RDMA_CQE_REQ_STS_REMOTE_ACCESS_ERR. CQ icid=0x%x, QP icid=0x%x\n",
3320                                        cq->icid, qp->icid);
3321                                 wc_status = IB_WC_REM_ACCESS_ERR;
3322                                 break;
3323                         case RDMA_CQE_REQ_STS_REMOTE_OPERATION_ERR:
3324                                 DP_ERR(dev,
3325                                        "Error: POLL CQ with RDMA_CQE_REQ_STS_REMOTE_OPERATION_ERR. CQ icid=0x%x, QP icid=0x%x\n",
3326                                        cq->icid, qp->icid);
3327                                 wc_status = IB_WC_REM_OP_ERR;
3328                                 break;
3329                         case RDMA_CQE_REQ_STS_RNR_NAK_RETRY_CNT_ERR:
3330                                 DP_ERR(dev,
3331                                        "Error: POLL CQ with RDMA_CQE_REQ_STS_RNR_NAK_RETRY_CNT_ERR. CQ icid=0x%x, QP icid=0x%x\n",
3332                                        cq->icid, qp->icid);
3333                                 wc_status = IB_WC_RNR_RETRY_EXC_ERR;
3334                                 break;
3335                         case RDMA_CQE_REQ_STS_TRANSPORT_RETRY_CNT_ERR:
3336                                 DP_ERR(dev,
3337                                        "Error: POLL CQ with ROCE_CQE_REQ_STS_TRANSPORT_RETRY_CNT_ERR. CQ icid=0x%x, QP icid=0x%x\n",
3338                                        cq->icid, qp->icid);
3339                                 wc_status = IB_WC_RETRY_EXC_ERR;
3340                                 break;
3341                         default:
3342                                 DP_ERR(dev,
3343                                        "Error: POLL CQ with IB_WC_GENERAL_ERR. CQ icid=0x%x, QP icid=0x%x\n",
3344                                        cq->icid, qp->icid);
3345                                 wc_status = IB_WC_GENERAL_ERR;
3346                         }
3347                         cnt += process_req(dev, qp, cq, 1, wc, req->sq_cons,
3348                                            wc_status, 1);
3349                 }
3350         }
3351
3352         return cnt;
3353 }
3354
3355 static inline int qedr_cqe_resp_status_to_ib(u8 status)
3356 {
3357         switch (status) {
3358         case RDMA_CQE_RESP_STS_LOCAL_ACCESS_ERR:
3359                 return IB_WC_LOC_ACCESS_ERR;
3360         case RDMA_CQE_RESP_STS_LOCAL_LENGTH_ERR:
3361                 return IB_WC_LOC_LEN_ERR;
3362         case RDMA_CQE_RESP_STS_LOCAL_QP_OPERATION_ERR:
3363                 return IB_WC_LOC_QP_OP_ERR;
3364         case RDMA_CQE_RESP_STS_LOCAL_PROTECTION_ERR:
3365                 return IB_WC_LOC_PROT_ERR;
3366         case RDMA_CQE_RESP_STS_MEMORY_MGT_OPERATION_ERR:
3367                 return IB_WC_MW_BIND_ERR;
3368         case RDMA_CQE_RESP_STS_REMOTE_INVALID_REQUEST_ERR:
3369                 return IB_WC_REM_INV_RD_REQ_ERR;
3370         case RDMA_CQE_RESP_STS_OK:
3371                 return IB_WC_SUCCESS;
3372         default:
3373                 return IB_WC_GENERAL_ERR;
3374         }
3375 }
3376
3377 static inline int qedr_set_ok_cqe_resp_wc(struct rdma_cqe_responder *resp,
3378                                           struct ib_wc *wc)
3379 {
3380         wc->status = IB_WC_SUCCESS;
3381         wc->byte_len = le32_to_cpu(resp->length);
3382
3383         if (resp->flags & QEDR_RESP_IMM) {
3384                 wc->ex.imm_data = le32_to_cpu(resp->imm_data_or_inv_r_Key);
3385                 wc->wc_flags |= IB_WC_WITH_IMM;
3386
3387                 if (resp->flags & QEDR_RESP_RDMA)
3388                         wc->opcode = IB_WC_RECV_RDMA_WITH_IMM;
3389
3390                 if (resp->flags & QEDR_RESP_INV)
3391                         return -EINVAL;
3392
3393         } else if (resp->flags & QEDR_RESP_INV) {
3394                 wc->ex.imm_data = le32_to_cpu(resp->imm_data_or_inv_r_Key);
3395                 wc->wc_flags |= IB_WC_WITH_INVALIDATE;
3396
3397                 if (resp->flags & QEDR_RESP_RDMA)
3398                         return -EINVAL;
3399
3400         } else if (resp->flags & QEDR_RESP_RDMA) {
3401                 return -EINVAL;
3402         }
3403
3404         return 0;
3405 }
3406
3407 static void __process_resp_one(struct qedr_dev *dev, struct qedr_qp *qp,
3408                                struct qedr_cq *cq, struct ib_wc *wc,
3409                                struct rdma_cqe_responder *resp, u64 wr_id)
3410 {
3411         /* Must fill fields before qedr_set_ok_cqe_resp_wc() */
3412         wc->opcode = IB_WC_RECV;
3413         wc->wc_flags = 0;
3414
3415         if (likely(resp->status == RDMA_CQE_RESP_STS_OK)) {
3416                 if (qedr_set_ok_cqe_resp_wc(resp, wc))
3417                         DP_ERR(dev,
3418                                "CQ %p (icid=%d) has invalid CQE responder flags=0x%x\n",
3419                                cq, cq->icid, resp->flags);
3420
3421         } else {
3422                 wc->status = qedr_cqe_resp_status_to_ib(resp->status);
3423                 if (wc->status == IB_WC_GENERAL_ERR)
3424                         DP_ERR(dev,
3425                                "CQ %p (icid=%d) contains an invalid CQE status %d\n",
3426                                cq, cq->icid, resp->status);
3427         }
3428
3429         /* Fill the rest of the WC */
3430         wc->vendor_err = 0;
3431         wc->src_qp = qp->id;
3432         wc->qp = &qp->ibqp;
3433         wc->wr_id = wr_id;
3434 }
3435
3436 static int process_resp_one(struct qedr_dev *dev, struct qedr_qp *qp,
3437                             struct qedr_cq *cq, struct ib_wc *wc,
3438                             struct rdma_cqe_responder *resp)
3439 {
3440         u64 wr_id = qp->rqe_wr_id[qp->rq.cons].wr_id;
3441
3442         __process_resp_one(dev, qp, cq, wc, resp, wr_id);
3443
3444         while (qp->rqe_wr_id[qp->rq.cons].wqe_size--)
3445                 qed_chain_consume(&qp->rq.pbl);
3446         qedr_inc_sw_cons(&qp->rq);
3447
3448         return 1;
3449 }
3450
3451 static int process_resp_flush(struct qedr_qp *qp, struct qedr_cq *cq,
3452                               int num_entries, struct ib_wc *wc, u16 hw_cons)
3453 {
3454         u16 cnt = 0;
3455
3456         while (num_entries && qp->rq.wqe_cons != hw_cons) {
3457                 /* fill WC */
3458                 wc->status = IB_WC_WR_FLUSH_ERR;
3459                 wc->vendor_err = 0;
3460                 wc->wc_flags = 0;
3461                 wc->src_qp = qp->id;
3462                 wc->byte_len = 0;
3463                 wc->wr_id = qp->rqe_wr_id[qp->rq.cons].wr_id;
3464                 wc->qp = &qp->ibqp;
3465                 num_entries--;
3466                 wc++;
3467                 cnt++;
3468                 while (qp->rqe_wr_id[qp->rq.cons].wqe_size--)
3469                         qed_chain_consume(&qp->rq.pbl);
3470                 qedr_inc_sw_cons(&qp->rq);
3471         }
3472
3473         return cnt;
3474 }
3475
3476 static void try_consume_resp_cqe(struct qedr_cq *cq, struct qedr_qp *qp,
3477                                  struct rdma_cqe_responder *resp, int *update)
3478 {
3479         if (le16_to_cpu(resp->rq_cons) == qp->rq.wqe_cons) {
3480                 consume_cqe(cq);
3481                 *update |= 1;
3482         }
3483 }
3484
3485 static int qedr_poll_cq_resp(struct qedr_dev *dev, struct qedr_qp *qp,
3486                              struct qedr_cq *cq, int num_entries,
3487                              struct ib_wc *wc, struct rdma_cqe_responder *resp,
3488                              int *update)
3489 {
3490         int cnt;
3491
3492         if (resp->status == RDMA_CQE_RESP_STS_WORK_REQUEST_FLUSHED_ERR) {
3493                 cnt = process_resp_flush(qp, cq, num_entries, wc,
3494                                          resp->rq_cons);
3495                 try_consume_resp_cqe(cq, qp, resp, update);
3496         } else {
3497                 cnt = process_resp_one(dev, qp, cq, wc, resp);
3498                 consume_cqe(cq);
3499                 *update |= 1;
3500         }
3501
3502         return cnt;
3503 }
3504
3505 static void try_consume_req_cqe(struct qedr_cq *cq, struct qedr_qp *qp,
3506                                 struct rdma_cqe_requester *req, int *update)
3507 {
3508         if (le16_to_cpu(req->sq_cons) == qp->sq.wqe_cons) {
3509                 consume_cqe(cq);
3510                 *update |= 1;
3511         }
3512 }
3513
3514 int qedr_poll_cq(struct ib_cq *ibcq, int num_entries, struct ib_wc *wc)
3515 {
3516         struct qedr_dev *dev = get_qedr_dev(ibcq->device);
3517         struct qedr_cq *cq = get_qedr_cq(ibcq);
3518         union rdma_cqe *cqe = cq->latest_cqe;
3519         u32 old_cons, new_cons;
3520         unsigned long flags;
3521         int update = 0;
3522         int done = 0;
3523
3524         if (cq->destroyed) {
3525                 DP_ERR(dev,
3526                        "warning: poll was invoked after destroy for cq %p (icid=%d)\n",
3527                        cq, cq->icid);
3528                 return 0;
3529         }
3530
3531         if (cq->cq_type == QEDR_CQ_TYPE_GSI)
3532                 return qedr_gsi_poll_cq(ibcq, num_entries, wc);
3533
3534         spin_lock_irqsave(&cq->cq_lock, flags);
3535         old_cons = qed_chain_get_cons_idx_u32(&cq->pbl);
3536         while (num_entries && is_valid_cqe(cq, cqe)) {
3537                 struct qedr_qp *qp;
3538                 int cnt = 0;
3539
3540                 /* prevent speculative reads of any field of CQE */
3541                 rmb();
3542
3543                 qp = cqe_get_qp(cqe);
3544                 if (!qp) {
3545                         WARN(1, "Error: CQE QP pointer is NULL. CQE=%p\n", cqe);
3546                         break;
3547                 }
3548
3549                 wc->qp = &qp->ibqp;
3550
3551                 switch (cqe_get_type(cqe)) {
3552                 case RDMA_CQE_TYPE_REQUESTER:
3553                         cnt = qedr_poll_cq_req(dev, qp, cq, num_entries, wc,
3554                                                &cqe->req);
3555                         try_consume_req_cqe(cq, qp, &cqe->req, &update);
3556                         break;
3557                 case RDMA_CQE_TYPE_RESPONDER_RQ:
3558                         cnt = qedr_poll_cq_resp(dev, qp, cq, num_entries, wc,
3559                                                 &cqe->resp, &update);
3560                         break;
3561                 case RDMA_CQE_TYPE_INVALID:
3562                 default:
3563                         DP_ERR(dev, "Error: invalid CQE type = %d\n",
3564                                cqe_get_type(cqe));
3565                 }
3566                 num_entries -= cnt;
3567                 wc += cnt;
3568                 done += cnt;
3569
3570                 cqe = get_cqe(cq);
3571         }
3572         new_cons = qed_chain_get_cons_idx_u32(&cq->pbl);
3573
3574         cq->cq_cons += new_cons - old_cons;
3575
3576         if (update)
3577                 /* doorbell notifies abount latest VALID entry,
3578                  * but chain already point to the next INVALID one
3579                  */
3580                 doorbell_cq(cq, cq->cq_cons - 1, cq->arm_flags);
3581
3582         spin_unlock_irqrestore(&cq->cq_lock, flags);
3583         return done;
3584 }
3585
3586 int qedr_process_mad(struct ib_device *ibdev, int process_mad_flags,
3587                      u8 port_num,
3588                      const struct ib_wc *in_wc,
3589                      const struct ib_grh *in_grh,
3590                      const struct ib_mad_hdr *mad_hdr,
3591                      size_t in_mad_size, struct ib_mad_hdr *out_mad,
3592                      size_t *out_mad_size, u16 *out_mad_pkey_index)
3593 {
3594         struct qedr_dev *dev = get_qedr_dev(ibdev);
3595
3596         DP_DEBUG(dev, QEDR_MSG_GSI,
3597                  "QEDR_PROCESS_MAD in_mad %x %x %x %x %x %x %x %x\n",
3598                  mad_hdr->attr_id, mad_hdr->base_version, mad_hdr->attr_mod,
3599                  mad_hdr->class_specific, mad_hdr->class_version,
3600                  mad_hdr->method, mad_hdr->mgmt_class, mad_hdr->status);
3601         return IB_MAD_RESULT_SUCCESS;
3602 }
3603
3604 int qedr_port_immutable(struct ib_device *ibdev, u8 port_num,
3605                         struct ib_port_immutable *immutable)
3606 {
3607         struct ib_port_attr attr;
3608         int err;
3609
3610         immutable->core_cap_flags = RDMA_CORE_PORT_IBA_ROCE |
3611                                     RDMA_CORE_PORT_IBA_ROCE_UDP_ENCAP;
3612
3613         err = ib_query_port(ibdev, port_num, &attr);
3614         if (err)
3615                 return err;
3616
3617         immutable->pkey_tbl_len = attr.pkey_tbl_len;
3618         immutable->gid_tbl_len = attr.gid_tbl_len;
3619         immutable->max_mad_size = IB_MGMT_MAD_SIZE;
3620
3621         return 0;
3622 }