main.c (ca4beeee9895f14df22940d804aab4534c23f03f) main.c (b6db3f71c976ea92361dbc7ebfb65db666ac9f02)
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:

--- 96 unchanged lines hidden (view full) ---

105{
106 struct ib_port_attr attr;
107 int err;
108
109 err = qedr_query_port(ibdev, port_num, &attr);
110 if (err)
111 return err;
112
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:

--- 96 unchanged lines hidden (view full) ---

105{
106 struct ib_port_attr attr;
107 int err;
108
109 err = qedr_query_port(ibdev, port_num, &attr);
110 if (err)
111 return err;
112
113 immutable->pkey_tbl_len = 1;
113 immutable->gid_tbl_len = 1;
114 immutable->core_cap_flags = RDMA_CORE_PORT_IWARP;
115 immutable->max_mad_size = 0;
116
117 return 0;
118}
119
120/* QEDR sysfs interface */

--- 52 unchanged lines hidden (view full) ---

173 memcpy(dev->ibdev.iw_ifname,
174 dev->ndev->name, sizeof(dev->ibdev.iw_ifname));
175
176 return 0;
177}
178
179static const struct ib_device_ops qedr_roce_dev_ops = {
180 .get_port_immutable = qedr_roce_port_immutable,
114 immutable->gid_tbl_len = 1;
115 immutable->core_cap_flags = RDMA_CORE_PORT_IWARP;
116 immutable->max_mad_size = 0;
117
118 return 0;
119}
120
121/* QEDR sysfs interface */

--- 52 unchanged lines hidden (view full) ---

174 memcpy(dev->ibdev.iw_ifname,
175 dev->ndev->name, sizeof(dev->ibdev.iw_ifname));
176
177 return 0;
178}
179
180static const struct ib_device_ops qedr_roce_dev_ops = {
181 .get_port_immutable = qedr_roce_port_immutable,
181 .query_pkey = qedr_query_pkey,
182};
183
184static void qedr_roce_register_device(struct qedr_dev *dev)
185{
186 dev->ibdev.node_type = RDMA_NODE_IB_CA;
187
188 ib_set_device_ops(&dev->ibdev, &qedr_roce_dev_ops);
189}

--- 26 unchanged lines hidden (view full) ---

216 .modify_qp = qedr_modify_qp,
217 .modify_srq = qedr_modify_srq,
218 .poll_cq = qedr_poll_cq,
219 .post_recv = qedr_post_recv,
220 .post_send = qedr_post_send,
221 .post_srq_recv = qedr_post_srq_recv,
222 .process_mad = qedr_process_mad,
223 .query_device = qedr_query_device,
182};
183
184static void qedr_roce_register_device(struct qedr_dev *dev)
185{
186 dev->ibdev.node_type = RDMA_NODE_IB_CA;
187
188 ib_set_device_ops(&dev->ibdev, &qedr_roce_dev_ops);
189}

--- 26 unchanged lines hidden (view full) ---

216 .modify_qp = qedr_modify_qp,
217 .modify_srq = qedr_modify_srq,
218 .poll_cq = qedr_poll_cq,
219 .post_recv = qedr_post_recv,
220 .post_send = qedr_post_send,
221 .post_srq_recv = qedr_post_srq_recv,
222 .process_mad = qedr_process_mad,
223 .query_device = qedr_query_device,
224 .query_pkey = qedr_query_pkey,
224 .query_port = qedr_query_port,
225 .query_qp = qedr_query_qp,
226 .query_srq = qedr_query_srq,
227 .reg_user_mr = qedr_reg_user_mr,
228 .req_notify_cq = qedr_arm_cq,
229 .resize_cq = qedr_resize_cq,
230
231 INIT_RDMA_OBJ_SIZE(ib_ah, qedr_ah, ibah),

--- 108 unchanged lines hidden (view full) ---

340
341 kfree(dev->cnq_array);
342 kfree(dev->sb_array);
343 kfree(dev->sgid_tbl);
344}
345
346static int qedr_alloc_resources(struct qedr_dev *dev)
347{
225 .query_port = qedr_query_port,
226 .query_qp = qedr_query_qp,
227 .query_srq = qedr_query_srq,
228 .reg_user_mr = qedr_reg_user_mr,
229 .req_notify_cq = qedr_arm_cq,
230 .resize_cq = qedr_resize_cq,
231
232 INIT_RDMA_OBJ_SIZE(ib_ah, qedr_ah, ibah),

--- 108 unchanged lines hidden (view full) ---

341
342 kfree(dev->cnq_array);
343 kfree(dev->sb_array);
344 kfree(dev->sgid_tbl);
345}
346
347static int qedr_alloc_resources(struct qedr_dev *dev)
348{
349 struct qed_chain_init_params params = {
350 .mode = QED_CHAIN_MODE_PBL,
351 .intended_use = QED_CHAIN_USE_TO_CONSUME,
352 .cnt_type = QED_CHAIN_CNT_TYPE_U16,
353 .elem_size = sizeof(struct regpair *),
354 };
348 struct qedr_cnq *cnq;
349 __le16 *cons_pi;
355 struct qedr_cnq *cnq;
356 __le16 *cons_pi;
350 u16 n_entries;
351 int i, rc;
352
353 dev->sgid_tbl = kcalloc(QEDR_MAX_SGID, sizeof(union ib_gid),
354 GFP_KERNEL);
355 if (!dev->sgid_tbl)
356 return -ENOMEM;
357
358 spin_lock_init(&dev->sgid_lock);

--- 17 unchanged lines hidden (view full) ---

376 if (!dev->cnq_array) {
377 rc = -ENOMEM;
378 goto err2;
379 }
380
381 dev->sb_start = dev->ops->rdma_get_start_sb(dev->cdev);
382
383 /* Allocate CNQ PBLs */
357 int i, rc;
358
359 dev->sgid_tbl = kcalloc(QEDR_MAX_SGID, sizeof(union ib_gid),
360 GFP_KERNEL);
361 if (!dev->sgid_tbl)
362 return -ENOMEM;
363
364 spin_lock_init(&dev->sgid_lock);

--- 17 unchanged lines hidden (view full) ---

382 if (!dev->cnq_array) {
383 rc = -ENOMEM;
384 goto err2;
385 }
386
387 dev->sb_start = dev->ops->rdma_get_start_sb(dev->cdev);
388
389 /* Allocate CNQ PBLs */
384 n_entries = min_t(u32, QED_RDMA_MAX_CNQ_SIZE, QEDR_ROCE_MAX_CNQ_SIZE);
390 params.num_elems = min_t(u32, QED_RDMA_MAX_CNQ_SIZE,
391 QEDR_ROCE_MAX_CNQ_SIZE);
392
385 for (i = 0; i < dev->num_cnq; i++) {
386 cnq = &dev->cnq_array[i];
387
388 rc = qedr_alloc_mem_sb(dev, &dev->sb_array[i],
389 dev->sb_start + i);
390 if (rc)
391 goto err3;
392
393 for (i = 0; i < dev->num_cnq; i++) {
394 cnq = &dev->cnq_array[i];
395
396 rc = qedr_alloc_mem_sb(dev, &dev->sb_array[i],
397 dev->sb_start + i);
398 if (rc)
399 goto err3;
400
393 rc = dev->ops->common->chain_alloc(dev->cdev,
394 QED_CHAIN_USE_TO_CONSUME,
395 QED_CHAIN_MODE_PBL,
396 QED_CHAIN_CNT_TYPE_U16,
397 n_entries,
398 sizeof(struct regpair *),
399 &cnq->pbl, NULL);
401 rc = dev->ops->common->chain_alloc(dev->cdev, &cnq->pbl,
402 &params);
400 if (rc)
401 goto err4;
402
403 cnq->dev = dev;
404 cnq->sb = &dev->sb_array[i];
405 cons_pi = dev->sb_array[i].sb_virt->pi_array;
406 cnq->hw_cons_ptr = &cons_pi[QED_ROCE_PROTOCOL_INDEX];
407 cnq->index = i;

--- 643 unchanged lines hidden ---
403 if (rc)
404 goto err4;
405
406 cnq->dev = dev;
407 cnq->sb = &dev->sb_array[i];
408 cons_pi = dev->sb_array[i].sb_virt->pi_array;
409 cnq->hw_cons_ptr = &cons_pi[QED_ROCE_PROTOCOL_INDEX];
410 cnq->index = i;

--- 643 unchanged lines hidden ---