Skip to content

Commit 5843415

Browse files
Konstantin Taranovrleon
authored andcommitted
RDMA/mana_ib: create and destroy RNIC cqs
Implement RNIC requests for creation and destruction of RNIC CQs. Signed-off-by: Konstantin Taranov <kotaranov@microsoft.com> Link: https://lore.kernel.org/r/1714137160-5222-3-git-send-email-kotaranov@linux.microsoft.com Reviewed-by: Long Li <longli@microsoft.com> Signed-off-by: Leon Romanovsky <leon@kernel.org>
1 parent e73c882 commit 5843415

File tree

2 files changed

+86
-0
lines changed

2 files changed

+86
-0
lines changed

drivers/infiniband/hw/mana/main.c

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -834,3 +834,57 @@ int mana_ib_gd_config_mac(struct mana_ib_dev *mdev, enum mana_ib_addr_op op, u8
834834

835835
return 0;
836836
}
837+
838+
int mana_ib_gd_create_cq(struct mana_ib_dev *mdev, struct mana_ib_cq *cq, u32 doorbell)
839+
{
840+
struct gdma_context *gc = mdev_to_gc(mdev);
841+
struct mana_rnic_create_cq_resp resp = {};
842+
struct mana_rnic_create_cq_req req = {};
843+
int err;
844+
845+
mana_gd_init_req_hdr(&req.hdr, MANA_IB_CREATE_CQ, sizeof(req), sizeof(resp));
846+
req.hdr.dev_id = gc->mana_ib.dev_id;
847+
req.adapter = mdev->adapter_handle;
848+
req.gdma_region = cq->queue.gdma_region;
849+
req.eq_id = mdev->eqs[cq->comp_vector]->id;
850+
req.doorbell_page = doorbell;
851+
852+
err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
853+
854+
if (err) {
855+
ibdev_err(&mdev->ib_dev, "Failed to create cq err %d", err);
856+
return err;
857+
}
858+
859+
cq->queue.id = resp.cq_id;
860+
cq->cq_handle = resp.cq_handle;
861+
/* The GDMA region is now owned by the CQ handle */
862+
cq->queue.gdma_region = GDMA_INVALID_DMA_REGION;
863+
864+
return 0;
865+
}
866+
867+
int mana_ib_gd_destroy_cq(struct mana_ib_dev *mdev, struct mana_ib_cq *cq)
868+
{
869+
struct gdma_context *gc = mdev_to_gc(mdev);
870+
struct mana_rnic_destroy_cq_resp resp = {};
871+
struct mana_rnic_destroy_cq_req req = {};
872+
int err;
873+
874+
if (cq->cq_handle == INVALID_MANA_HANDLE)
875+
return 0;
876+
877+
mana_gd_init_req_hdr(&req.hdr, MANA_IB_DESTROY_CQ, sizeof(req), sizeof(resp));
878+
req.hdr.dev_id = gc->mana_ib.dev_id;
879+
req.adapter = mdev->adapter_handle;
880+
req.cq_handle = cq->cq_handle;
881+
882+
err = mana_gd_send_request(gc, sizeof(req), &req, sizeof(resp), &resp);
883+
884+
if (err) {
885+
ibdev_err(&mdev->ib_dev, "Failed to destroy cq err %d", err);
886+
return err;
887+
}
888+
889+
return 0;
890+
}

drivers/infiniband/hw/mana/mana_ib.h

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ struct mana_ib_cq {
9292
struct mana_ib_queue queue;
9393
int cqe;
9494
u32 comp_vector;
95+
mana_handle_t cq_handle;
9596
};
9697

9798
struct mana_ib_qp {
@@ -119,6 +120,8 @@ enum mana_ib_command_code {
119120
MANA_IB_DESTROY_ADAPTER = 0x30003,
120121
MANA_IB_CONFIG_IP_ADDR = 0x30004,
121122
MANA_IB_CONFIG_MAC_ADDR = 0x30005,
123+
MANA_IB_CREATE_CQ = 0x30008,
124+
MANA_IB_DESTROY_CQ = 0x30009,
122125
};
123126

124127
struct mana_ib_query_adapter_caps_req {
@@ -202,6 +205,31 @@ struct mana_rnic_config_mac_addr_resp {
202205
struct gdma_resp_hdr hdr;
203206
}; /* HW Data */
204207

208+
struct mana_rnic_create_cq_req {
209+
struct gdma_req_hdr hdr;
210+
mana_handle_t adapter;
211+
u64 gdma_region;
212+
u32 eq_id;
213+
u32 doorbell_page;
214+
}; /* HW Data */
215+
216+
struct mana_rnic_create_cq_resp {
217+
struct gdma_resp_hdr hdr;
218+
mana_handle_t cq_handle;
219+
u32 cq_id;
220+
u32 reserved;
221+
}; /* HW Data */
222+
223+
struct mana_rnic_destroy_cq_req {
224+
struct gdma_req_hdr hdr;
225+
mana_handle_t adapter;
226+
mana_handle_t cq_handle;
227+
}; /* HW Data */
228+
229+
struct mana_rnic_destroy_cq_resp {
230+
struct gdma_resp_hdr hdr;
231+
}; /* HW Data */
232+
205233
static inline struct gdma_context *mdev_to_gc(struct mana_ib_dev *mdev)
206234
{
207235
return mdev->gdma_dev->gdma_context;
@@ -321,4 +349,8 @@ int mana_ib_gd_add_gid(const struct ib_gid_attr *attr, void **context);
321349
int mana_ib_gd_del_gid(const struct ib_gid_attr *attr, void **context);
322350

323351
int mana_ib_gd_config_mac(struct mana_ib_dev *mdev, enum mana_ib_addr_op op, u8 *mac);
352+
353+
int mana_ib_gd_create_cq(struct mana_ib_dev *mdev, struct mana_ib_cq *cq, u32 doorbell);
354+
355+
int mana_ib_gd_destroy_cq(struct mana_ib_dev *mdev, struct mana_ib_cq *cq);
324356
#endif

0 commit comments

Comments
 (0)