Lines Matching +full:1 +full:- +full:eng

1 // SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause)
3 * Copyright (c) 2015-2017 QLogic Corporation
4 * Copyright (c) 2019-2020 Marvell International Ltd.
11 #include <linux/dma-mapping.h>
43 bmap->max_count = max_count; in qed_rdma_bmap_alloc()
45 bmap->bitmap = bitmap_zalloc(max_count, GFP_KERNEL); in qed_rdma_bmap_alloc()
46 if (!bmap->bitmap) in qed_rdma_bmap_alloc()
47 return -ENOMEM; in qed_rdma_bmap_alloc()
49 snprintf(bmap->name, QED_RDMA_MAX_BMAP_NAME, "%s", name); in qed_rdma_bmap_alloc()
58 *id_num = find_first_zero_bit(bmap->bitmap, bmap->max_count); in qed_rdma_bmap_alloc_id()
59 if (*id_num >= bmap->max_count) in qed_rdma_bmap_alloc_id()
60 return -EINVAL; in qed_rdma_bmap_alloc_id()
62 __set_bit(*id_num, bmap->bitmap); in qed_rdma_bmap_alloc_id()
65 bmap->name, *id_num); in qed_rdma_bmap_alloc_id()
73 if (id_num >= bmap->max_count) in qed_bmap_set_id()
76 __set_bit(id_num, bmap->bitmap); in qed_bmap_set_id()
84 if (id_num >= bmap->max_count) in qed_bmap_release_id()
87 b_acquired = test_and_clear_bit(id_num, bmap->bitmap); in qed_bmap_release_id()
90 bmap->name, id_num); in qed_bmap_release_id()
95 bmap->name, id_num); in qed_bmap_release_id()
101 if (id_num >= bmap->max_count) in qed_bmap_test_id()
102 return -1; in qed_bmap_test_id()
104 return test_bit(id_num, bmap->bitmap); in qed_bmap_test_id()
109 return bitmap_empty(bmap->bitmap, bmap->max_count); in qed_bmap_is_empty()
124 return -ENOMEM; in qed_rdma_info_alloc()
126 spin_lock_init(&p_rdma_info->lock); in qed_rdma_info_alloc()
128 p_hwfn->p_rdma_info = p_rdma_info; in qed_rdma_info_alloc()
134 kfree(p_hwfn->p_rdma_info); in qed_rdma_info_free()
135 p_hwfn->p_rdma_info = NULL; in qed_rdma_info_free()
140 struct qed_rdma_info *p_rdma_info = p_hwfn->p_rdma_info; in qed_rdma_alloc()
142 int rc = -ENOMEM; in qed_rdma_alloc()
147 p_rdma_info->proto = PROTOCOLID_IWARP; in qed_rdma_alloc()
149 p_rdma_info->proto = PROTOCOLID_ROCE; in qed_rdma_alloc()
151 num_cons = qed_cxt_get_proto_cid_count(p_hwfn, p_rdma_info->proto, in qed_rdma_alloc()
155 p_rdma_info->num_qps = num_cons; in qed_rdma_alloc()
157 p_rdma_info->num_qps = num_cons / 2; /* 2 cids per qp */ in qed_rdma_alloc()
162 p_rdma_info->num_mrs = num_tasks; in qed_rdma_alloc()
167 p_rdma_info->queue_zone_base = (u16)RESC_START(p_hwfn, QED_L2_QUEUE); in qed_rdma_alloc()
168 p_rdma_info->max_queue_zones = (u16)RESC_NUM(p_hwfn, QED_L2_QUEUE); in qed_rdma_alloc()
171 p_rdma_info->dev = kzalloc(sizeof(*p_rdma_info->dev), GFP_KERNEL); in qed_rdma_alloc()
172 if (!p_rdma_info->dev) in qed_rdma_alloc()
176 p_rdma_info->port = kzalloc(sizeof(*p_rdma_info->port), GFP_KERNEL); in qed_rdma_alloc()
177 if (!p_rdma_info->port) in qed_rdma_alloc()
181 rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->pd_map, RDMA_MAX_PDS, in qed_rdma_alloc()
191 rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->xrcd_map, in qed_rdma_alloc()
200 rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->dpi_map, in qed_rdma_alloc()
201 p_hwfn->dpi_count, "DPI"); in qed_rdma_alloc()
212 rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->cq_map, num_cons, "CQ"); in qed_rdma_alloc()
223 rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->toggle_bits, in qed_rdma_alloc()
232 rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->tid_map, in qed_rdma_alloc()
233 p_rdma_info->num_mrs, "MR"); in qed_rdma_alloc()
241 rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->cid_map, num_cons, in qed_rdma_alloc()
250 rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->real_cid_map, num_cons, in qed_rdma_alloc()
261 p_rdma_info->srq_id_offset = p_hwfn->p_cxt_mngr->xrc_srq_count; in qed_rdma_alloc()
263 &p_rdma_info->xrc_srq_map, in qed_rdma_alloc()
264 p_hwfn->p_cxt_mngr->xrc_srq_count, "XRC SRQ"); in qed_rdma_alloc()
272 p_rdma_info->num_srqs = p_hwfn->p_cxt_mngr->srq_count; in qed_rdma_alloc()
273 rc = qed_rdma_bmap_alloc(p_hwfn, &p_rdma_info->srq_map, in qed_rdma_alloc()
274 p_rdma_info->num_srqs, "SRQ"); in qed_rdma_alloc()
291 kfree(p_rdma_info->srq_map.bitmap); in qed_rdma_alloc()
293 kfree(p_rdma_info->xrc_srq_map.bitmap); in qed_rdma_alloc()
295 kfree(p_rdma_info->real_cid_map.bitmap); in qed_rdma_alloc()
297 kfree(p_rdma_info->cid_map.bitmap); in qed_rdma_alloc()
299 kfree(p_rdma_info->tid_map.bitmap); in qed_rdma_alloc()
301 kfree(p_rdma_info->toggle_bits.bitmap); in qed_rdma_alloc()
303 kfree(p_rdma_info->cq_map.bitmap); in qed_rdma_alloc()
305 kfree(p_rdma_info->dpi_map.bitmap); in qed_rdma_alloc()
307 kfree(p_rdma_info->xrcd_map.bitmap); in qed_rdma_alloc()
309 kfree(p_rdma_info->pd_map.bitmap); in qed_rdma_alloc()
311 kfree(p_rdma_info->port); in qed_rdma_alloc()
313 kfree(p_rdma_info->dev); in qed_rdma_alloc()
327 weight = bitmap_weight(bmap->bitmap, bmap->max_count); in qed_rdma_bmap_free()
332 "%s bitmap not free - size=%d, weight=%d, 512 bits per line\n", in qed_rdma_bmap_free()
333 bmap->name, bmap->max_count, weight); in qed_rdma_bmap_free()
335 for (bit = 0; bit < bmap->max_count; bit += 512) { in qed_rdma_bmap_free()
336 b = bmap->bitmap + BITS_TO_LONGS(bit); in qed_rdma_bmap_free()
337 nbits = min(bmap->max_count - bit, 512U); in qed_rdma_bmap_free()
345 bitmap_free(bmap->bitmap); in qed_rdma_bmap_free()
346 bmap->bitmap = NULL; in qed_rdma_bmap_free()
351 struct qed_rdma_info *p_rdma_info = p_hwfn->p_rdma_info; in qed_rdma_resc_free()
356 qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->cid_map, 1); in qed_rdma_resc_free()
357 qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->pd_map, 1); in qed_rdma_resc_free()
358 qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->dpi_map, 1); in qed_rdma_resc_free()
359 qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->cq_map, 1); in qed_rdma_resc_free()
360 qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->toggle_bits, 0); in qed_rdma_resc_free()
361 qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->tid_map, 1); in qed_rdma_resc_free()
362 qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->srq_map, 1); in qed_rdma_resc_free()
363 qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->real_cid_map, 1); in qed_rdma_resc_free()
364 qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->xrc_srq_map, 1); in qed_rdma_resc_free()
365 qed_rdma_bmap_free(p_hwfn, &p_hwfn->p_rdma_info->xrcd_map, 1); in qed_rdma_resc_free()
367 kfree(p_rdma_info->port); in qed_rdma_resc_free()
368 kfree(p_rdma_info->dev); in qed_rdma_resc_free()
377 spin_lock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_free_tid()
378 qed_bmap_release_id(p_hwfn, &p_hwfn->p_rdma_info->tid_map, itid); in qed_rdma_free_tid()
379 spin_unlock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_free_tid()
384 qed_rdma_free_tid(p_hwfn, p_hwfn->p_rdma_info->dev->reserved_lkey); in qed_rdma_free_reserved_lkey()
392 qed_cxt_free_proto_ilt(p_hwfn, p_hwfn->p_rdma_info->proto); in qed_rdma_free()
401 events = &p_hwfn->p_rdma_info->events; in qed_rdma_init_events()
403 events->unaffiliated_event = params->events->unaffiliated_event; in qed_rdma_init_events()
404 events->affiliated_event = params->events->affiliated_event; in qed_rdma_init_events()
405 events->context = params->events->context; in qed_rdma_init_events()
411 struct qed_rdma_device *dev = p_hwfn->p_rdma_info->dev; in qed_rdma_init_devinfo()
412 struct qed_dev *cdev = p_hwfn->cdev; in qed_rdma_init_devinfo()
417 dev->vendor_id = cdev->vendor_id; in qed_rdma_init_devinfo()
418 dev->vendor_part_id = cdev->device_id; in qed_rdma_init_devinfo()
419 dev->hw_ver = cdev->chip_rev; in qed_rdma_init_devinfo()
420 dev->fw_ver = (FW_MAJOR_VERSION << 24) | (FW_MINOR_VERSION << 16) | in qed_rdma_init_devinfo()
423 addrconf_addr_eui48((u8 *)&dev->sys_image_guid, in qed_rdma_init_devinfo()
424 p_hwfn->hw_info.hw_mac_addr); in qed_rdma_init_devinfo()
426 dev->node_guid = dev->sys_image_guid; in qed_rdma_init_devinfo()
428 dev->max_sge = min_t(u32, RDMA_MAX_SGE_PER_SQ_WQE, in qed_rdma_init_devinfo()
431 if (cdev->rdma_max_sge) in qed_rdma_init_devinfo()
432 dev->max_sge = min_t(u32, cdev->rdma_max_sge, dev->max_sge); in qed_rdma_init_devinfo()
434 dev->max_srq_sge = QED_RDMA_MAX_SGE_PER_SRQ_WQE; in qed_rdma_init_devinfo()
435 if (p_hwfn->cdev->rdma_max_srq_sge) { in qed_rdma_init_devinfo()
436 dev->max_srq_sge = min_t(u32, in qed_rdma_init_devinfo()
437 p_hwfn->cdev->rdma_max_srq_sge, in qed_rdma_init_devinfo()
438 dev->max_srq_sge); in qed_rdma_init_devinfo()
440 dev->max_inline = ROCE_REQ_MAX_INLINE_DATA_SIZE; in qed_rdma_init_devinfo()
442 dev->max_inline = (cdev->rdma_max_inline) ? in qed_rdma_init_devinfo()
443 min_t(u32, cdev->rdma_max_inline, dev->max_inline) : in qed_rdma_init_devinfo()
444 dev->max_inline; in qed_rdma_init_devinfo()
446 dev->max_wqe = QED_RDMA_MAX_WQE; in qed_rdma_init_devinfo()
447 dev->max_cnq = (u8)FEAT_NUM(p_hwfn, QED_RDMA_CNQ); in qed_rdma_init_devinfo()
450 * it is up-aligned to 16 and then to ILT page size within qed cxt. in qed_rdma_init_devinfo()
455 num_qps = min_t(u64, num_qps, p_hwfn->p_rdma_info->num_qps); in qed_rdma_init_devinfo()
456 dev->max_qp = num_qps; in qed_rdma_init_devinfo()
461 dev->max_cq = num_qps * 2; in qed_rdma_init_devinfo()
463 /* The number of mrs is smaller by 1 since the first is reserved */ in qed_rdma_init_devinfo()
464 dev->max_mr = p_hwfn->p_rdma_info->num_mrs - 1; in qed_rdma_init_devinfo()
465 dev->max_mr_size = QED_RDMA_MAX_MR_SIZE; in qed_rdma_init_devinfo()
472 if (params->cq_mode == QED_RDMA_CQ_MODE_32_BITS) in qed_rdma_init_devinfo()
473 dev->max_cqe = QED_RDMA_MAX_CQE_32_BIT; in qed_rdma_init_devinfo()
475 dev->max_cqe = QED_RDMA_MAX_CQE_16_BIT; in qed_rdma_init_devinfo()
477 dev->max_mw = 0; in qed_rdma_init_devinfo()
478 dev->max_mr_mw_fmr_pbl = (PAGE_SIZE / 8) * (PAGE_SIZE / 8); in qed_rdma_init_devinfo()
479 dev->max_mr_mw_fmr_size = dev->max_mr_mw_fmr_pbl * PAGE_SIZE; in qed_rdma_init_devinfo()
481 dev->max_pkey = QED_RDMA_MAX_P_KEY; in qed_rdma_init_devinfo()
483 dev->max_srq = p_hwfn->p_rdma_info->num_srqs; in qed_rdma_init_devinfo()
484 dev->max_srq_wr = QED_RDMA_MAX_SRQ_WQE_ELEM; in qed_rdma_init_devinfo()
485 dev->max_qp_resp_rd_atomic_resc = RDMA_RING_PAGE_SIZE / in qed_rdma_init_devinfo()
487 dev->max_qp_req_rd_atomic_resc = RDMA_RING_PAGE_SIZE / in qed_rdma_init_devinfo()
489 dev->max_dev_resp_rd_atomic_resc = dev->max_qp_resp_rd_atomic_resc * in qed_rdma_init_devinfo()
490 p_hwfn->p_rdma_info->num_qps; in qed_rdma_init_devinfo()
491 dev->page_size_caps = QED_RDMA_PAGE_SIZE_CAPS; in qed_rdma_init_devinfo()
492 dev->dev_ack_delay = QED_RDMA_ACK_DELAY; in qed_rdma_init_devinfo()
493 dev->max_pd = RDMA_MAX_PDS; in qed_rdma_init_devinfo()
494 dev->max_ah = p_hwfn->p_rdma_info->num_qps; in qed_rdma_init_devinfo()
495 dev->max_stats_queues = (u8)RESC_NUM(p_hwfn, QED_RDMA_STATS_QUEUE); in qed_rdma_init_devinfo()
498 dev->dev_caps = 0; in qed_rdma_init_devinfo()
499 SET_FIELD(dev->dev_caps, QED_RDMA_DEV_CAP_RNR_NAK, 1); in qed_rdma_init_devinfo()
500 SET_FIELD(dev->dev_caps, QED_RDMA_DEV_CAP_PORT_ACTIVE_EVENT, 1); in qed_rdma_init_devinfo()
501 SET_FIELD(dev->dev_caps, QED_RDMA_DEV_CAP_PORT_CHANGE_EVENT, 1); in qed_rdma_init_devinfo()
502 SET_FIELD(dev->dev_caps, QED_RDMA_DEV_CAP_RESIZE_CQ, 1); in qed_rdma_init_devinfo()
503 SET_FIELD(dev->dev_caps, QED_RDMA_DEV_CAP_BASE_MEMORY_EXT, 1); in qed_rdma_init_devinfo()
504 SET_FIELD(dev->dev_caps, QED_RDMA_DEV_CAP_BASE_QUEUE_EXT, 1); in qed_rdma_init_devinfo()
505 SET_FIELD(dev->dev_caps, QED_RDMA_DEV_CAP_ZBVA, 1); in qed_rdma_init_devinfo()
506 SET_FIELD(dev->dev_caps, QED_RDMA_DEV_CAP_LOCAL_INV_FENCE, 1); in qed_rdma_init_devinfo()
509 pcie_capability_read_dword(cdev->pdev, PCI_EXP_DEVCTL2, in qed_rdma_init_devinfo()
513 SET_FIELD(dev->dev_caps, QED_RDMA_DEV_CAP_ATOMIC_OP, 1); in qed_rdma_init_devinfo()
521 struct qed_rdma_port *port = p_hwfn->p_rdma_info->port; in qed_rdma_init_port()
522 struct qed_rdma_device *dev = p_hwfn->p_rdma_info->dev; in qed_rdma_init_port()
524 port->port_state = p_hwfn->mcp_info->link_output.link_up ? in qed_rdma_init_port()
527 port->max_msg_size = min_t(u64, in qed_rdma_init_port()
528 (dev->max_mr_mw_fmr_size * in qed_rdma_init_port()
529 p_hwfn->cdev->rdma_max_sge), in qed_rdma_init_port()
532 port->pkey_bad_counter = 0; in qed_rdma_init_port()
540 p_hwfn->b_rdma_enabled_in_prs = false; in qed_rdma_init_hw()
567 p_hwfn->p_rdma_info->num_cnqs = params->desired_cnq; in qed_rdma_start_fw()
571 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid; in qed_rdma_start_fw()
575 p_hwfn->p_rdma_info->proto, &init_data); in qed_rdma_start_fw()
581 &p_ent->ramrod.iwarp_init_func); in qed_rdma_start_fw()
582 p_ramrod = &p_ent->ramrod.iwarp_init_func.rdma; in qed_rdma_start_fw()
584 p_ramrod = &p_ent->ramrod.roce_init_func.rdma; in qed_rdma_start_fw()
587 p_params_header = &p_ramrod->params_header; in qed_rdma_start_fw()
588 p_params_header->cnq_start_offset = (u8)RESC_START(p_hwfn, in qed_rdma_start_fw()
590 p_params_header->num_cnqs = params->desired_cnq; in qed_rdma_start_fw()
591 p_params_header->first_reg_srq_id = in qed_rdma_start_fw()
592 cpu_to_le16(p_hwfn->p_rdma_info->srq_id_offset); in qed_rdma_start_fw()
593 p_params_header->reg_srq_base_addr = in qed_rdma_start_fw()
595 if (params->cq_mode == QED_RDMA_CQ_MODE_16_BITS) in qed_rdma_start_fw()
596 p_params_header->cq_ring_mode = 1; in qed_rdma_start_fw()
598 p_params_header->cq_ring_mode = 0; in qed_rdma_start_fw()
600 for (cnq_id = 0; cnq_id < params->desired_cnq; cnq_id++) { in qed_rdma_start_fw()
603 p_ramrod->cnq_params[cnq_id].sb_num = cpu_to_le16(igu_sb_id); in qed_rdma_start_fw()
604 p_cnq_params = &p_ramrod->cnq_params[cnq_id]; in qed_rdma_start_fw()
605 p_cnq_pbl_list = &params->cnq_pbl_list[cnq_id]; in qed_rdma_start_fw()
607 p_cnq_params->sb_index = p_hwfn->pf_params.rdma_pf_params.gl_pi; in qed_rdma_start_fw()
608 p_cnq_params->num_pbl_pages = p_cnq_pbl_list->num_pbl_pages; in qed_rdma_start_fw()
610 DMA_REGPAIR_LE(p_cnq_params->pbl_base_addr, in qed_rdma_start_fw()
611 p_cnq_pbl_list->pbl_ptr); in qed_rdma_start_fw()
614 p_cnq_params->queue_zone_num = in qed_rdma_start_fw()
615 cpu_to_le16(p_hwfn->p_rdma_info->queue_zone_base + in qed_rdma_start_fw()
629 spin_lock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_alloc_tid()
631 &p_hwfn->p_rdma_info->tid_map, itid); in qed_rdma_alloc_tid()
632 spin_unlock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_alloc_tid()
638 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Allocate TID - done, rc = %d\n", rc); in qed_rdma_alloc_tid()
644 struct qed_rdma_device *dev = p_hwfn->p_rdma_info->dev; in qed_rdma_reserve_lkey()
650 qed_rdma_alloc_tid(p_hwfn, &dev->reserved_lkey); in qed_rdma_reserve_lkey()
651 if (dev->reserved_lkey != RDMA_RESERVED_LKEY) { in qed_rdma_reserve_lkey()
654 return -EINVAL; in qed_rdma_reserve_lkey()
701 int rc = -EBUSY; in qed_rdma_stop()
712 qed_wr(p_hwfn, p_ptt, p_hwfn->rdma_prs_search_reg, 0); in qed_rdma_stop()
713 p_hwfn->b_rdma_enabled_in_prs = false; in qed_rdma_stop()
714 p_hwfn->p_rdma_info->active = 0; in qed_rdma_stop()
736 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid; in qed_rdma_stop()
741 p_hwfn->p_rdma_info->proto, &init_data); in qed_rdma_stop()
745 p_ramrod = &p_ent->ramrod.rdma_close_func; in qed_rdma_stop()
747 p_ramrod->num_cnqs = p_hwfn->p_rdma_info->num_cnqs; in qed_rdma_stop()
748 p_ramrod->cnq_start_offset = (u8)RESC_START(p_hwfn, QED_RDMA_CNQ_RAM); in qed_rdma_stop()
770 spin_lock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_add_user()
771 rc = qed_rdma_bmap_alloc_id(p_hwfn, &p_hwfn->p_rdma_info->dpi_map, in qed_rdma_add_user()
773 spin_unlock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_add_user()
775 out_params->dpi = (u16)returned_id; in qed_rdma_add_user()
778 dpi_start_offset = p_hwfn->dpi_start_offset; in qed_rdma_add_user()
780 out_params->dpi_addr = p_hwfn->doorbells + dpi_start_offset + in qed_rdma_add_user()
781 out_params->dpi * p_hwfn->dpi_size; in qed_rdma_add_user()
783 out_params->dpi_phys_addr = p_hwfn->db_phys_addr + in qed_rdma_add_user()
785 ((out_params->dpi) * p_hwfn->dpi_size); in qed_rdma_add_user()
787 out_params->dpi_size = p_hwfn->dpi_size; in qed_rdma_add_user()
788 out_params->wid_count = p_hwfn->wid_count; in qed_rdma_add_user()
790 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Adding user - done, rc = %d\n", rc); in qed_rdma_add_user()
797 struct qed_rdma_port *p_port = p_hwfn->p_rdma_info->port; in qed_rdma_query_port()
803 p_link_output = &QED_LEADING_HWFN(p_hwfn->cdev)->mcp_info->link_output; in qed_rdma_query_port()
805 p_port->port_state = p_link_output->link_up ? QED_RDMA_PORT_UP in qed_rdma_query_port()
808 p_port->link_speed = p_link_output->speed; in qed_rdma_query_port()
810 p_port->max_msg_size = RDMA_MAX_DATA_SIZE_IN_WQE; in qed_rdma_query_port()
822 return p_hwfn->p_rdma_info->dev; in qed_rdma_query_device()
833 if (qz_offset > p_hwfn->p_rdma_info->max_queue_zones) { in qed_rdma_cnq_prod_update()
836 qz_offset, p_hwfn->p_rdma_info->max_queue_zones); in qed_rdma_cnq_prod_update()
840 qz_num = p_hwfn->p_rdma_info->queue_zone_base + qz_offset; in qed_rdma_cnq_prod_update()
857 info->rdma_type = QED_IS_ROCE_PERSONALITY(p_hwfn) ? in qed_fill_rdma_dev_info()
860 info->user_dpm_enabled = (p_hwfn->db_bar_no_edpm == 0); in qed_fill_rdma_dev_info()
862 qed_fill_dev_info(cdev, &info->common); in qed_fill_rdma_dev_info()
871 if (cdev->num_hwfns > 1) in qed_rdma_get_sb_start()
875 cdev->num_hwfns; in qed_rdma_get_sb_start()
883 int n_msix = cdev->int_params.rdma_msix_cnt; in qed_rdma_get_min_cnq_msix()
893 cdev->int_params.fp_initialized = cnt ? true : false; in qed_rdma_set_int()
895 if (cdev->int_params.out.int_mode != QED_INT_MODE_MSIX) { in qed_rdma_set_int()
897 "qed roce supports only MSI-X interrupts (detected %d).\n", in qed_rdma_set_int()
898 cdev->int_params.out.int_mode); in qed_rdma_set_int()
899 return -EINVAL; in qed_rdma_set_int()
900 } else if (cdev->int_params.fp_msix_cnt) { in qed_rdma_set_int()
901 limit = cdev->int_params.rdma_msix_cnt; in qed_rdma_set_int()
905 return -ENOMEM; in qed_rdma_set_int()
914 if (!cdev->int_params.fp_initialized) { in qed_rdma_get_int()
917 return -EINVAL; in qed_rdma_get_int()
920 if (cdev->int_params.out.int_mode == QED_INT_MODE_MSIX) { in qed_rdma_get_int()
921 int msix_base = cdev->int_params.rdma_msix_base; in qed_rdma_get_int()
923 info->msix_cnt = cdev->int_params.rdma_msix_cnt; in qed_rdma_get_int()
924 info->msix = &cdev->int_params.msix_table[msix_base]; in qed_rdma_get_int()
927 info->msix_cnt, msix_base); in qed_rdma_get_int()
942 spin_lock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_alloc_pd()
944 &p_hwfn->p_rdma_info->pd_map, &returned_id); in qed_rdma_alloc_pd()
945 spin_unlock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_alloc_pd()
949 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Alloc PD - done, rc = %d\n", rc); in qed_rdma_alloc_pd()
960 spin_lock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_free_pd()
961 qed_bmap_release_id(p_hwfn, &p_hwfn->p_rdma_info->pd_map, pd); in qed_rdma_free_pd()
962 spin_unlock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_free_pd()
973 spin_lock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_alloc_xrcd()
975 &p_hwfn->p_rdma_info->xrcd_map, in qed_rdma_alloc_xrcd()
977 spin_unlock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_alloc_xrcd()
985 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "Alloc XRCD - done, rc = %d\n", rc); in qed_rdma_alloc_xrcd()
995 spin_lock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_free_xrcd()
996 qed_bmap_release_id(p_hwfn, &p_hwfn->p_rdma_info->xrcd_map, xrcd_id); in qed_rdma_free_xrcd()
997 spin_unlock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_free_xrcd()
1003 struct qed_rdma_info *p_info = p_hwfn->p_rdma_info; in qed_rdma_toggle_bit_create_resize_cq()
1012 bmap_id = icid - qed_cxt_get_proto_cid_start(p_hwfn, p_info->proto); in qed_rdma_toggle_bit_create_resize_cq()
1014 spin_lock_bh(&p_info->lock); in qed_rdma_toggle_bit_create_resize_cq()
1016 p_info->toggle_bits.bitmap); in qed_rdma_toggle_bit_create_resize_cq()
1017 spin_unlock_bh(&p_info->lock); in qed_rdma_toggle_bit_create_resize_cq()
1030 struct qed_rdma_info *p_info = p_hwfn->p_rdma_info; in qed_rdma_create_cq()
1039 params->cq_handle_hi, params->cq_handle_lo); in qed_rdma_create_cq()
1042 spin_lock_bh(&p_info->lock); in qed_rdma_create_cq()
1043 rc = qed_rdma_bmap_alloc_id(p_hwfn, &p_info->cq_map, &returned_id); in qed_rdma_create_cq()
1044 spin_unlock_bh(&p_info->lock); in qed_rdma_create_cq()
1052 p_info->proto); in qed_rdma_create_cq()
1063 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid; in qed_rdma_create_cq()
1069 p_info->proto, &init_data); in qed_rdma_create_cq()
1073 p_ramrod = &p_ent->ramrod.rdma_create_cq; in qed_rdma_create_cq()
1075 p_ramrod->cq_handle.hi = cpu_to_le32(params->cq_handle_hi); in qed_rdma_create_cq()
1076 p_ramrod->cq_handle.lo = cpu_to_le32(params->cq_handle_lo); in qed_rdma_create_cq()
1077 p_ramrod->dpi = cpu_to_le16(params->dpi); in qed_rdma_create_cq()
1078 p_ramrod->is_two_level_pbl = params->pbl_two_level; in qed_rdma_create_cq()
1079 p_ramrod->max_cqes = cpu_to_le32(params->cq_size); in qed_rdma_create_cq()
1080 DMA_REGPAIR_LE(p_ramrod->pbl_addr, params->pbl_ptr); in qed_rdma_create_cq()
1081 p_ramrod->pbl_num_pages = cpu_to_le16(params->pbl_num_pages); in qed_rdma_create_cq()
1082 p_ramrod->cnq_id = (u8)RESC_START(p_hwfn, QED_RDMA_CNQ_RAM) + in qed_rdma_create_cq()
1083 params->cnq_id; in qed_rdma_create_cq()
1084 p_ramrod->int_timeout = cpu_to_le16(params->int_timeout); in qed_rdma_create_cq()
1089 p_ramrod->toggle_bit = toggle_bit; in qed_rdma_create_cq()
1103 spin_lock_bh(&p_info->lock); in qed_rdma_create_cq()
1104 qed_bmap_release_id(p_hwfn, &p_info->cq_map, returned_id); in qed_rdma_create_cq()
1105 spin_unlock_bh(&p_info->lock); in qed_rdma_create_cq()
1123 int rc = -ENOMEM; in qed_rdma_destroy_cq()
1125 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "icid = %08x\n", in_params->icid); in qed_rdma_destroy_cq()
1128 dma_alloc_coherent(&p_hwfn->cdev->pdev->dev, in qed_rdma_destroy_cq()
1139 init_data.cid = in_params->icid; in qed_rdma_destroy_cq()
1140 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid; in qed_rdma_destroy_cq()
1142 proto = p_hwfn->p_rdma_info->proto; in qed_rdma_destroy_cq()
1150 p_ramrod = &p_ent->ramrod.rdma_destroy_cq; in qed_rdma_destroy_cq()
1151 DMA_REGPAIR_LE(p_ramrod->output_params_addr, ramrod_res_phys); in qed_rdma_destroy_cq()
1157 out_params->num_cq_notif = le16_to_cpu(p_ramrod_res->cnq_num); in qed_rdma_destroy_cq()
1159 dma_free_coherent(&p_hwfn->cdev->pdev->dev, in qed_rdma_destroy_cq()
1164 spin_lock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_destroy_cq()
1167 &p_hwfn->p_rdma_info->cq_map, in qed_rdma_destroy_cq()
1168 (in_params->icid - in qed_rdma_destroy_cq()
1171 spin_unlock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_destroy_cq()
1176 err: dma_free_coherent(&p_hwfn->cdev->pdev->dev, in qed_rdma_destroy_cq()
1185 p_fw_mac[0] = cpu_to_le16((p_qed_mac[0] << 8) + p_qed_mac[1]); in qed_rdma_set_fw_mac()
1186 p_fw_mac[1] = cpu_to_le16((p_qed_mac[2] << 8) + p_qed_mac[3]); in qed_rdma_set_fw_mac()
1197 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "icid = %08x\n", qp->icid); in qed_rdma_query_qp()
1202 out_params->mtu = qp->mtu; in qed_rdma_query_qp()
1203 out_params->dest_qp = qp->dest_qp; in qed_rdma_query_qp()
1204 out_params->incoming_atomic_en = qp->incoming_atomic_en; in qed_rdma_query_qp()
1205 out_params->e2e_flow_control_en = qp->e2e_flow_control_en; in qed_rdma_query_qp()
1206 out_params->incoming_rdma_read_en = qp->incoming_rdma_read_en; in qed_rdma_query_qp()
1207 out_params->incoming_rdma_write_en = qp->incoming_rdma_write_en; in qed_rdma_query_qp()
1208 out_params->dgid = qp->dgid; in qed_rdma_query_qp()
1209 out_params->flow_label = qp->flow_label; in qed_rdma_query_qp()
1210 out_params->hop_limit_ttl = qp->hop_limit_ttl; in qed_rdma_query_qp()
1211 out_params->traffic_class_tos = qp->traffic_class_tos; in qed_rdma_query_qp()
1212 out_params->timeout = qp->ack_timeout; in qed_rdma_query_qp()
1213 out_params->rnr_retry = qp->rnr_retry_cnt; in qed_rdma_query_qp()
1214 out_params->retry_cnt = qp->retry_cnt; in qed_rdma_query_qp()
1215 out_params->min_rnr_nak_timer = qp->min_rnr_nak_timer; in qed_rdma_query_qp()
1216 out_params->pkey_index = 0; in qed_rdma_query_qp()
1217 out_params->max_rd_atomic = qp->max_rd_atomic_req; in qed_rdma_query_qp()
1218 out_params->max_dest_rd_atomic = qp->max_rd_atomic_resp; in qed_rdma_query_qp()
1219 out_params->sqd_async = qp->sqd_async; in qed_rdma_query_qp()
1235 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "icid = %08x\n", qp->icid); in qed_rdma_destroy_qp()
1260 !p_hwfn->p_rdma_info->active) { in qed_rdma_create_qp()
1268 in_params->qp_handle_hi, in_params->qp_handle_lo); in qed_rdma_create_qp()
1271 max_stats_queues = p_hwfn->p_rdma_info->dev->max_stats_queues; in qed_rdma_create_qp()
1272 if (in_params->stats_queue >= max_stats_queues) { in qed_rdma_create_qp()
1273 DP_ERR(p_hwfn->cdev, in qed_rdma_create_qp()
1275 in_params->stats_queue, max_stats_queues); in qed_rdma_create_qp()
1280 if (in_params->sq_num_pages * sizeof(struct regpair) > in qed_rdma_create_qp()
1282 DP_NOTICE(p_hwfn->cdev, in qed_rdma_create_qp()
1284 in_params->sq_num_pages); in qed_rdma_create_qp()
1287 if (in_params->rq_num_pages * sizeof(struct regpair) > in qed_rdma_create_qp()
1289 DP_NOTICE(p_hwfn->cdev, in qed_rdma_create_qp()
1291 in_params->rq_num_pages); in qed_rdma_create_qp()
1300 qp->cur_state = QED_ROCE_QP_STATE_RESET; in qed_rdma_create_qp()
1301 qp->qp_handle.hi = cpu_to_le32(in_params->qp_handle_hi); in qed_rdma_create_qp()
1302 qp->qp_handle.lo = cpu_to_le32(in_params->qp_handle_lo); in qed_rdma_create_qp()
1303 qp->qp_handle_async.hi = cpu_to_le32(in_params->qp_handle_async_hi); in qed_rdma_create_qp()
1304 qp->qp_handle_async.lo = cpu_to_le32(in_params->qp_handle_async_lo); in qed_rdma_create_qp()
1305 qp->use_srq = in_params->use_srq; in qed_rdma_create_qp()
1306 qp->signal_all = in_params->signal_all; in qed_rdma_create_qp()
1307 qp->fmr_and_reserved_lkey = in_params->fmr_and_reserved_lkey; in qed_rdma_create_qp()
1308 qp->pd = in_params->pd; in qed_rdma_create_qp()
1309 qp->dpi = in_params->dpi; in qed_rdma_create_qp()
1310 qp->sq_cq_id = in_params->sq_cq_id; in qed_rdma_create_qp()
1311 qp->sq_num_pages = in_params->sq_num_pages; in qed_rdma_create_qp()
1312 qp->sq_pbl_ptr = in_params->sq_pbl_ptr; in qed_rdma_create_qp()
1313 qp->rq_cq_id = in_params->rq_cq_id; in qed_rdma_create_qp()
1314 qp->rq_num_pages = in_params->rq_num_pages; in qed_rdma_create_qp()
1315 qp->rq_pbl_ptr = in_params->rq_pbl_ptr; in qed_rdma_create_qp()
1316 qp->srq_id = in_params->srq_id; in qed_rdma_create_qp()
1317 qp->req_offloaded = false; in qed_rdma_create_qp()
1318 qp->resp_offloaded = false; in qed_rdma_create_qp()
1319 qp->e2e_flow_control_en = qp->use_srq ? false : true; in qed_rdma_create_qp()
1320 qp->stats_queue = in_params->stats_queue; in qed_rdma_create_qp()
1321 qp->qp_type = in_params->qp_type; in qed_rdma_create_qp()
1322 qp->xrcd_id = in_params->xrcd_id; in qed_rdma_create_qp()
1326 qp->qpid = qp->icid; in qed_rdma_create_qp()
1328 qp->edpm_mode = GET_FIELD(in_params->flags, QED_ROCE_EDPM_MODE); in qed_rdma_create_qp()
1329 rc = qed_roce_alloc_cid(p_hwfn, &qp->icid); in qed_rdma_create_qp()
1330 qp->qpid = ((0xFF << 16) | qp->icid); in qed_rdma_create_qp()
1338 out_params->icid = qp->icid; in qed_rdma_create_qp()
1339 out_params->qp_id = qp->qpid; in qed_rdma_create_qp()
1353 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "icid = %08x params->new_state=%d\n", in qed_rdma_modify_qp()
1354 qp->icid, params->new_state); in qed_rdma_modify_qp()
1361 if (GET_FIELD(params->modify_flags, in qed_rdma_modify_qp()
1363 qp->incoming_rdma_read_en = params->incoming_rdma_read_en; in qed_rdma_modify_qp()
1364 qp->incoming_rdma_write_en = params->incoming_rdma_write_en; in qed_rdma_modify_qp()
1365 qp->incoming_atomic_en = params->incoming_atomic_en; in qed_rdma_modify_qp()
1369 if (GET_FIELD(params->modify_flags, QED_ROCE_MODIFY_QP_VALID_ROCE_MODE)) in qed_rdma_modify_qp()
1370 qp->roce_mode = params->roce_mode; in qed_rdma_modify_qp()
1371 if (GET_FIELD(params->modify_flags, QED_ROCE_MODIFY_QP_VALID_PKEY)) in qed_rdma_modify_qp()
1372 qp->pkey = params->pkey; in qed_rdma_modify_qp()
1373 if (GET_FIELD(params->modify_flags, in qed_rdma_modify_qp()
1375 qp->e2e_flow_control_en = params->e2e_flow_control_en; in qed_rdma_modify_qp()
1376 if (GET_FIELD(params->modify_flags, QED_ROCE_MODIFY_QP_VALID_DEST_QP)) in qed_rdma_modify_qp()
1377 qp->dest_qp = params->dest_qp; in qed_rdma_modify_qp()
1378 if (GET_FIELD(params->modify_flags, in qed_rdma_modify_qp()
1384 qp->traffic_class_tos = params->traffic_class_tos; in qed_rdma_modify_qp()
1385 qp->flow_label = params->flow_label; in qed_rdma_modify_qp()
1386 qp->hop_limit_ttl = params->hop_limit_ttl; in qed_rdma_modify_qp()
1388 qp->sgid = params->sgid; in qed_rdma_modify_qp()
1389 qp->dgid = params->dgid; in qed_rdma_modify_qp()
1390 qp->udp_src_port = 0; in qed_rdma_modify_qp()
1391 qp->vlan_id = params->vlan_id; in qed_rdma_modify_qp()
1392 qp->mtu = params->mtu; in qed_rdma_modify_qp()
1393 qp->lb_indication = params->lb_indication; in qed_rdma_modify_qp()
1394 memcpy((u8 *)&qp->remote_mac_addr[0], in qed_rdma_modify_qp()
1395 (u8 *)&params->remote_mac_addr[0], ETH_ALEN); in qed_rdma_modify_qp()
1396 if (params->use_local_mac) { in qed_rdma_modify_qp()
1397 memcpy((u8 *)&qp->local_mac_addr[0], in qed_rdma_modify_qp()
1398 (u8 *)&params->local_mac_addr[0], ETH_ALEN); in qed_rdma_modify_qp()
1400 memcpy((u8 *)&qp->local_mac_addr[0], in qed_rdma_modify_qp()
1401 (u8 *)&p_hwfn->hw_info.hw_mac_addr, ETH_ALEN); in qed_rdma_modify_qp()
1404 if (GET_FIELD(params->modify_flags, QED_ROCE_MODIFY_QP_VALID_RQ_PSN)) in qed_rdma_modify_qp()
1405 qp->rq_psn = params->rq_psn; in qed_rdma_modify_qp()
1406 if (GET_FIELD(params->modify_flags, QED_ROCE_MODIFY_QP_VALID_SQ_PSN)) in qed_rdma_modify_qp()
1407 qp->sq_psn = params->sq_psn; in qed_rdma_modify_qp()
1408 if (GET_FIELD(params->modify_flags, in qed_rdma_modify_qp()
1410 qp->max_rd_atomic_req = params->max_rd_atomic_req; in qed_rdma_modify_qp()
1411 if (GET_FIELD(params->modify_flags, in qed_rdma_modify_qp()
1413 qp->max_rd_atomic_resp = params->max_rd_atomic_resp; in qed_rdma_modify_qp()
1414 if (GET_FIELD(params->modify_flags, in qed_rdma_modify_qp()
1416 qp->ack_timeout = params->ack_timeout; in qed_rdma_modify_qp()
1417 if (GET_FIELD(params->modify_flags, QED_ROCE_MODIFY_QP_VALID_RETRY_CNT)) in qed_rdma_modify_qp()
1418 qp->retry_cnt = params->retry_cnt; in qed_rdma_modify_qp()
1419 if (GET_FIELD(params->modify_flags, in qed_rdma_modify_qp()
1421 qp->rnr_retry_cnt = params->rnr_retry_cnt; in qed_rdma_modify_qp()
1422 if (GET_FIELD(params->modify_flags, in qed_rdma_modify_qp()
1424 qp->min_rnr_nak_timer = params->min_rnr_nak_timer; in qed_rdma_modify_qp()
1426 qp->sqd_async = params->sqd_async; in qed_rdma_modify_qp()
1428 prev_state = qp->cur_state; in qed_rdma_modify_qp()
1429 if (GET_FIELD(params->modify_flags, in qed_rdma_modify_qp()
1431 qp->cur_state = params->new_state; in qed_rdma_modify_qp()
1432 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "qp->cur_state=%d\n", in qed_rdma_modify_qp()
1433 qp->cur_state); in qed_rdma_modify_qp()
1436 switch (qp->qp_type) { in qed_rdma_modify_qp()
1438 qp->has_req = true; in qed_rdma_modify_qp()
1441 qp->has_resp = true; in qed_rdma_modify_qp()
1444 qp->has_req = true; in qed_rdma_modify_qp()
1445 qp->has_resp = true; in qed_rdma_modify_qp()
1450 qed_roce2iwarp_state(qp->cur_state); in qed_rdma_modify_qp()
1474 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "itid = %08x\n", params->itid); in qed_rdma_register_tid()
1478 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid; in qed_rdma_register_tid()
1482 p_hwfn->p_rdma_info->proto, &init_data); in qed_rdma_register_tid()
1488 if (p_hwfn->p_rdma_info->last_tid < params->itid) in qed_rdma_register_tid()
1489 p_hwfn->p_rdma_info->last_tid = params->itid; in qed_rdma_register_tid()
1492 params->pbl_two_level); in qed_rdma_register_tid()
1497 SET_FIELD(flags, RDMA_REGISTER_TID_RAMROD_DATA_PHY_MR, params->phy_mr); in qed_rdma_register_tid()
1500 if (!(params->tid_type == QED_RDMA_TID_FMR) && !(params->dma_mr)) in qed_rdma_register_tid()
1502 params->page_size_log - 12); in qed_rdma_register_tid()
1505 params->remote_read); in qed_rdma_register_tid()
1508 params->remote_write); in qed_rdma_register_tid()
1511 params->remote_atomic); in qed_rdma_register_tid()
1514 params->local_write); in qed_rdma_register_tid()
1517 params->local_read); in qed_rdma_register_tid()
1520 params->mw_bind); in qed_rdma_register_tid()
1522 p_ramrod = &p_ent->ramrod.rdma_register_tid; in qed_rdma_register_tid()
1523 p_ramrod->flags = cpu_to_le16(flags); in qed_rdma_register_tid()
1525 SET_FIELD(p_ramrod->flags1, in qed_rdma_register_tid()
1527 params->pbl_page_size_log - 12); in qed_rdma_register_tid()
1529 SET_FIELD(p_ramrod->flags2, RDMA_REGISTER_TID_RAMROD_DATA_DMA_MR, in qed_rdma_register_tid()
1530 params->dma_mr); in qed_rdma_register_tid()
1532 switch (params->tid_type) { in qed_rdma_register_tid()
1543 rc = -EINVAL; in qed_rdma_register_tid()
1549 SET_FIELD(p_ramrod->flags1, RDMA_REGISTER_TID_RAMROD_DATA_TID_TYPE, in qed_rdma_register_tid()
1552 p_ramrod->itid = cpu_to_le32(params->itid); in qed_rdma_register_tid()
1553 p_ramrod->key = params->key; in qed_rdma_register_tid()
1554 p_ramrod->pd = cpu_to_le16(params->pd); in qed_rdma_register_tid()
1555 p_ramrod->length_hi = (u8)(params->length >> 32); in qed_rdma_register_tid()
1556 p_ramrod->length_lo = DMA_LO_LE(params->length); in qed_rdma_register_tid()
1557 DMA_REGPAIR_LE(p_ramrod->va, params->vaddr); in qed_rdma_register_tid()
1558 DMA_REGPAIR_LE(p_ramrod->pbl_base, params->pbl_ptr); in qed_rdma_register_tid()
1561 if (params->dif_enabled) { in qed_rdma_register_tid()
1562 SET_FIELD(p_ramrod->flags2, in qed_rdma_register_tid()
1563 RDMA_REGISTER_TID_RAMROD_DATA_DIF_ON_HOST_FLG, 1); in qed_rdma_register_tid()
1564 DMA_REGPAIR_LE(p_ramrod->dif_error_addr, in qed_rdma_register_tid()
1565 params->dif_error_addr); in qed_rdma_register_tid()
1574 return -EINVAL; in qed_rdma_register_tid()
1595 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid; in qed_rdma_deregister_tid()
1599 p_hwfn->p_rdma_info->proto, &init_data); in qed_rdma_deregister_tid()
1605 p_ramrod = &p_ent->ramrod.rdma_deregister_tid; in qed_rdma_deregister_tid()
1606 p_ramrod->itid = cpu_to_le32(itid); in qed_rdma_deregister_tid()
1616 return -EINVAL; in qed_rdma_deregister_tid()
1623 rc = -EBUSY; in qed_rdma_deregister_tid()
1642 p_hwfn->p_rdma_info->proto, in qed_rdma_deregister_tid()
1646 "Failed to init sp-element\n"); in qed_rdma_deregister_tid()
1664 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "De-registered TID, rc = %d\n", rc); in qed_rdma_deregister_tid()
1677 return &p_hwfn->p_rdma_info->xrc_srq_map; in qed_rdma_get_srq_bmap()
1679 return &p_hwfn->p_rdma_info->srq_map; in qed_rdma_get_srq_bmap()
1692 init_data.opaque_fid = p_hwfn->hw_info.opaque_fid; in qed_rdma_modify_srq()
1697 p_hwfn->p_rdma_info->proto, &init_data); in qed_rdma_modify_srq()
1701 p_ramrod = &p_ent->ramrod.rdma_modify_srq; in qed_rdma_modify_srq()
1702 p_ramrod->srq_id.srq_idx = cpu_to_le16(in_params->srq_id); in qed_rdma_modify_srq()
1703 opaque_fid = p_hwfn->hw_info.opaque_fid; in qed_rdma_modify_srq()
1704 p_ramrod->srq_id.opaque_fid = cpu_to_le16(opaque_fid); in qed_rdma_modify_srq()
1705 p_ramrod->wqe_limit = cpu_to_le32(in_params->wqe_limit); in qed_rdma_modify_srq()
1712 in_params->srq_id, in_params->is_xrc); in qed_rdma_modify_srq()
1730 opaque_fid = p_hwfn->hw_info.opaque_fid; in qed_rdma_destroy_srq()
1737 p_hwfn->p_rdma_info->proto, &init_data); in qed_rdma_destroy_srq()
1741 p_ramrod = &p_ent->ramrod.rdma_destroy_srq; in qed_rdma_destroy_srq()
1742 p_ramrod->srq_id.srq_idx = cpu_to_le16(in_params->srq_id); in qed_rdma_destroy_srq()
1743 p_ramrod->srq_id.opaque_fid = cpu_to_le16(opaque_fid); in qed_rdma_destroy_srq()
1749 bmap = qed_rdma_get_srq_bmap(p_hwfn, in_params->is_xrc); in qed_rdma_destroy_srq()
1750 offset = (in_params->is_xrc) ? 0 : p_hwfn->p_rdma_info->srq_id_offset; in qed_rdma_destroy_srq()
1752 spin_lock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_destroy_srq()
1753 qed_bmap_release_id(p_hwfn, bmap, in_params->srq_id - offset); in qed_rdma_destroy_srq()
1754 spin_unlock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_destroy_srq()
1758 in_params->srq_id, in_params->is_xrc); in qed_rdma_destroy_srq()
1779 bmap = qed_rdma_get_srq_bmap(p_hwfn, in_params->is_xrc); in qed_rdma_create_srq()
1780 spin_lock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_create_srq()
1782 spin_unlock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_create_srq()
1787 in_params->is_xrc); in qed_rdma_create_srq()
1791 elem_type = (in_params->is_xrc) ? (QED_ELEM_XRC_SRQ) : (QED_ELEM_SRQ); in qed_rdma_create_srq()
1796 opaque_fid = p_hwfn->hw_info.opaque_fid; in qed_rdma_create_srq()
1802 p_hwfn->p_rdma_info->proto, &init_data); in qed_rdma_create_srq()
1806 p_ramrod = &p_ent->ramrod.rdma_create_srq; in qed_rdma_create_srq()
1807 DMA_REGPAIR_LE(p_ramrod->pbl_base_addr, in_params->pbl_base_addr); in qed_rdma_create_srq()
1808 p_ramrod->pages_in_srq_pbl = cpu_to_le16(in_params->num_pages); in qed_rdma_create_srq()
1809 p_ramrod->pd_id = cpu_to_le16(in_params->pd_id); in qed_rdma_create_srq()
1810 p_ramrod->srq_id.opaque_fid = cpu_to_le16(opaque_fid); in qed_rdma_create_srq()
1811 p_ramrod->page_size = cpu_to_le16(in_params->page_size); in qed_rdma_create_srq()
1812 DMA_REGPAIR_LE(p_ramrod->producers_addr, in_params->prod_pair_addr); in qed_rdma_create_srq()
1813 offset = (in_params->is_xrc) ? 0 : p_hwfn->p_rdma_info->srq_id_offset; in qed_rdma_create_srq()
1815 p_ramrod->srq_id.srq_idx = cpu_to_le16(srq_id); in qed_rdma_create_srq()
1817 if (in_params->is_xrc) { in qed_rdma_create_srq()
1818 SET_FIELD(p_ramrod->flags, in qed_rdma_create_srq()
1819 RDMA_SRQ_CREATE_RAMROD_DATA_XRC_FLAG, 1); in qed_rdma_create_srq()
1820 SET_FIELD(p_ramrod->flags, in qed_rdma_create_srq()
1822 in_params->reserved_key_en); in qed_rdma_create_srq()
1823 p_ramrod->xrc_srq_cq_cid = in qed_rdma_create_srq()
1824 cpu_to_le32((p_hwfn->hw_info.opaque_fid << 16) | in qed_rdma_create_srq()
1825 in_params->cq_cid); in qed_rdma_create_srq()
1826 p_ramrod->xrc_domain = cpu_to_le16(in_params->xrcd_id); in qed_rdma_create_srq()
1832 out_params->srq_id = srq_id; in qed_rdma_create_srq()
1837 out_params->srq_id, in_params->is_xrc); in qed_rdma_create_srq()
1841 spin_lock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_create_srq()
1843 spin_unlock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_create_srq()
1853 if (!p_hwfn->p_rdma_info->active) in qed_rdma_allocated_qps()
1856 spin_lock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_allocated_qps()
1857 if (!p_hwfn->p_rdma_info->cid_map.bitmap) in qed_rdma_allocated_qps()
1860 result = !qed_bmap_is_empty(&p_hwfn->p_rdma_info->cid_map); in qed_rdma_allocated_qps()
1861 spin_unlock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_allocated_qps()
1869 val = (p_hwfn->dcbx_no_edpm || p_hwfn->db_bar_no_edpm) ? 0 : 1; in qed_rdma_dpm_conf()
1874 val, p_hwfn->dcbx_no_edpm, p_hwfn->db_bar_no_edpm); in qed_rdma_dpm_conf()
1879 p_hwfn->db_bar_no_edpm = true; in qed_rdma_dpm_bar()
1889 int rc = -EBUSY; in qed_rdma_start()
1892 "desired_cnq = %08x\n", params->desired_cnq); in qed_rdma_start()
1907 p_hwfn->p_rdma_info->active = 1; in qed_rdma_start()
1916 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, "RDMA start - error, rc = %d\n", rc); in qed_rdma_start()
1932 spin_lock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_remove_user()
1933 qed_bmap_release_id(p_hwfn, &p_hwfn->p_rdma_info->dpi_map, dpi); in qed_rdma_remove_user()
1934 spin_unlock_bh(&p_hwfn->p_rdma_info->lock); in qed_rdma_remove_user()
1957 enum qed_eng eng; in qed_iwarp_set_engine_affin() local
1962 if (!cdev->iwarp_cmt) in qed_iwarp_set_engine_affin()
1963 return -EINVAL; in qed_iwarp_set_engine_affin()
1966 eng = QED_BOTH_ENG; in qed_iwarp_set_engine_affin()
1968 eng = cdev->l2_affin_hint ? QED_ENG1 : QED_ENG0; in qed_iwarp_set_engine_affin()
1970 rc = qed_llh_set_ppfid_affinity(cdev, ppfid, eng); in qed_iwarp_set_engine_affin()
1979 "LLH: Set the engine affinity of non-RoCE packets as %d\n", in qed_iwarp_set_engine_affin()
1980 eng); in qed_iwarp_set_engine_affin()