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