diff --git a/lib/nvme/nvme_ctrlr_cmd.c b/lib/nvme/nvme_ctrlr_cmd.c index 50048af92..3d9d743d2 100644 --- a/lib/nvme/nvme_ctrlr_cmd.c +++ b/lib/nvme/nvme_ctrlr_cmd.c @@ -127,102 +127,6 @@ nvme_ctrlr_cmd_identify_namespace(struct spdk_nvme_ctrlr *ctrlr, uint16_t nsid, return nvme_ctrlr_submit_admin_request(ctrlr, req); } -int -nvme_ctrlr_cmd_create_io_cq(struct spdk_nvme_ctrlr *ctrlr, - struct spdk_nvme_qpair *io_que, spdk_nvme_cmd_cb cb_fn, - void *cb_arg) -{ - struct nvme_request *req; - struct spdk_nvme_cmd *cmd; - - req = nvme_allocate_request_null(cb_fn, cb_arg); - if (req == NULL) { - return -ENOMEM; - } - - cmd = &req->cmd; - cmd->opc = SPDK_NVME_OPC_CREATE_IO_CQ; - - /* - * TODO: create a create io completion queue command data - * structure. - */ - cmd->cdw10 = ((io_que->num_entries - 1) << 16) | io_que->id; - /* - * 0x2 = interrupts enabled - * 0x1 = physically contiguous - */ - cmd->cdw11 = 0x1; - cmd->dptr.prp.prp1 = io_que->cpl_bus_addr; - - return nvme_ctrlr_submit_admin_request(ctrlr, req); -} - -int -nvme_ctrlr_cmd_create_io_sq(struct spdk_nvme_ctrlr *ctrlr, - struct spdk_nvme_qpair *io_que, spdk_nvme_cmd_cb cb_fn, void *cb_arg) -{ - struct nvme_request *req; - struct spdk_nvme_cmd *cmd; - - req = nvme_allocate_request_null(cb_fn, cb_arg); - if (req == NULL) { - return -ENOMEM; - } - - cmd = &req->cmd; - cmd->opc = SPDK_NVME_OPC_CREATE_IO_SQ; - - /* - * TODO: create a create io submission queue command data - * structure. - */ - cmd->cdw10 = ((io_que->num_entries - 1) << 16) | io_que->id; - /* 0x1 = physically contiguous */ - cmd->cdw11 = (io_que->id << 16) | (io_que->qprio << 1) | 0x1; - cmd->dptr.prp.prp1 = io_que->cmd_bus_addr; - - return nvme_ctrlr_submit_admin_request(ctrlr, req); -} - -int -nvme_ctrlr_cmd_delete_io_cq(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpair *qpair, - spdk_nvme_cmd_cb cb_fn, void *cb_arg) -{ - struct nvme_request *req; - struct spdk_nvme_cmd *cmd; - - req = nvme_allocate_request_null(cb_fn, cb_arg); - if (req == NULL) { - return -ENOMEM; - } - - cmd = &req->cmd; - cmd->opc = SPDK_NVME_OPC_DELETE_IO_CQ; - cmd->cdw10 = qpair->id; - - return nvme_ctrlr_submit_admin_request(ctrlr, req); -} - -int -nvme_ctrlr_cmd_delete_io_sq(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpair *qpair, - spdk_nvme_cmd_cb cb_fn, void *cb_arg) -{ - struct nvme_request *req; - struct spdk_nvme_cmd *cmd; - - req = nvme_allocate_request_null(cb_fn, cb_arg); - if (req == NULL) { - return -ENOMEM; - } - - cmd = &req->cmd; - cmd->opc = SPDK_NVME_OPC_DELETE_IO_SQ; - cmd->cdw10 = qpair->id; - - return nvme_ctrlr_submit_admin_request(ctrlr, req); -} - int nvme_ctrlr_cmd_attach_ns(struct spdk_nvme_ctrlr *ctrlr, uint32_t nsid, struct spdk_nvme_ctrlr_list *payload, spdk_nvme_cmd_cb cb_fn, void *cb_arg) diff --git a/lib/nvme/nvme_internal.h b/lib/nvme/nvme_internal.h index 428e7d0ad..67db16766 100644 --- a/lib/nvme/nvme_internal.h +++ b/lib/nvme/nvme_internal.h @@ -555,16 +555,6 @@ int nvme_ctrlr_cmd_identify_controller(struct spdk_nvme_ctrlr *ctrlr, int nvme_ctrlr_cmd_identify_namespace(struct spdk_nvme_ctrlr *ctrlr, uint16_t nsid, void *payload, spdk_nvme_cmd_cb cb_fn, void *cb_arg); -int nvme_ctrlr_cmd_create_io_cq(struct spdk_nvme_ctrlr *ctrlr, - struct spdk_nvme_qpair *io_que, - spdk_nvme_cmd_cb cb_fn, void *cb_arg); -int nvme_ctrlr_cmd_create_io_sq(struct spdk_nvme_ctrlr *ctrlr, - struct spdk_nvme_qpair *io_que, - spdk_nvme_cmd_cb cb_fn, void *cb_arg); -int nvme_ctrlr_cmd_delete_io_cq(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpair *qpair, - spdk_nvme_cmd_cb cb_fn, void *cb_arg); -int nvme_ctrlr_cmd_delete_io_sq(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpair *qpair, - spdk_nvme_cmd_cb cb_fn, void *cb_arg); int nvme_ctrlr_cmd_set_num_queues(struct spdk_nvme_ctrlr *ctrlr, uint32_t num_queues, spdk_nvme_cmd_cb cb_fn, void *cb_arg); diff --git a/lib/nvme/nvme_pcie.c b/lib/nvme/nvme_pcie.c index 79aecbd42..6c5d12316 100644 --- a/lib/nvme/nvme_pcie.c +++ b/lib/nvme/nvme_pcie.c @@ -633,6 +633,102 @@ nvme_pcie_qpair_fail(struct spdk_nvme_qpair *qpair) } } +static int +nvme_pcie_ctrlr_cmd_create_io_cq(struct spdk_nvme_ctrlr *ctrlr, + struct spdk_nvme_qpair *io_que, spdk_nvme_cmd_cb cb_fn, + void *cb_arg) +{ + struct nvme_request *req; + struct spdk_nvme_cmd *cmd; + + req = nvme_allocate_request_null(cb_fn, cb_arg); + if (req == NULL) { + return -ENOMEM; + } + + cmd = &req->cmd; + cmd->opc = SPDK_NVME_OPC_CREATE_IO_CQ; + + /* + * TODO: create a create io completion queue command data + * structure. + */ + cmd->cdw10 = ((io_que->num_entries - 1) << 16) | io_que->id; + /* + * 0x2 = interrupts enabled + * 0x1 = physically contiguous + */ + cmd->cdw11 = 0x1; + cmd->dptr.prp.prp1 = io_que->cpl_bus_addr; + + return nvme_ctrlr_submit_admin_request(ctrlr, req); +} + +static int +nvme_pcie_ctrlr_cmd_create_io_sq(struct spdk_nvme_ctrlr *ctrlr, + struct spdk_nvme_qpair *io_que, spdk_nvme_cmd_cb cb_fn, void *cb_arg) +{ + struct nvme_request *req; + struct spdk_nvme_cmd *cmd; + + req = nvme_allocate_request_null(cb_fn, cb_arg); + if (req == NULL) { + return -ENOMEM; + } + + cmd = &req->cmd; + cmd->opc = SPDK_NVME_OPC_CREATE_IO_SQ; + + /* + * TODO: create a create io submission queue command data + * structure. + */ + cmd->cdw10 = ((io_que->num_entries - 1) << 16) | io_que->id; + /* 0x1 = physically contiguous */ + cmd->cdw11 = (io_que->id << 16) | (io_que->qprio << 1) | 0x1; + cmd->dptr.prp.prp1 = io_que->cmd_bus_addr; + + return nvme_ctrlr_submit_admin_request(ctrlr, req); +} + +static int +nvme_pcie_ctrlr_cmd_delete_io_cq(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpair *qpair, + spdk_nvme_cmd_cb cb_fn, void *cb_arg) +{ + struct nvme_request *req; + struct spdk_nvme_cmd *cmd; + + req = nvme_allocate_request_null(cb_fn, cb_arg); + if (req == NULL) { + return -ENOMEM; + } + + cmd = &req->cmd; + cmd->opc = SPDK_NVME_OPC_DELETE_IO_CQ; + cmd->cdw10 = qpair->id; + + return nvme_ctrlr_submit_admin_request(ctrlr, req); +} + +static int +nvme_pcie_ctrlr_cmd_delete_io_sq(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpair *qpair, + spdk_nvme_cmd_cb cb_fn, void *cb_arg) +{ + struct nvme_request *req; + struct spdk_nvme_cmd *cmd; + + req = nvme_allocate_request_null(cb_fn, cb_arg); + if (req == NULL) { + return -ENOMEM; + } + + cmd = &req->cmd; + cmd->opc = SPDK_NVME_OPC_DELETE_IO_SQ; + cmd->cdw10 = qpair->id; + + return nvme_ctrlr_submit_admin_request(ctrlr, req); +} + static int nvme_pcie_ctrlr_create_io_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpair *qpair) { @@ -643,7 +739,7 @@ nvme_pcie_ctrlr_create_io_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_ assert(qpair != NULL); status.done = false; - rc = nvme_ctrlr_cmd_create_io_cq(ctrlr, qpair, nvme_completion_poll_cb, &status); + rc = nvme_pcie_ctrlr_cmd_create_io_cq(ctrlr, qpair, nvme_completion_poll_cb, &status); if (rc != 0) { return rc; } @@ -657,7 +753,7 @@ nvme_pcie_ctrlr_create_io_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_ } status.done = false; - rc = nvme_ctrlr_cmd_create_io_sq(qpair->ctrlr, qpair, nvme_completion_poll_cb, &status); + rc = nvme_pcie_ctrlr_cmd_create_io_sq(qpair->ctrlr, qpair, nvme_completion_poll_cb, &status); if (rc != 0) { return rc; } @@ -669,7 +765,7 @@ nvme_pcie_ctrlr_create_io_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_ SPDK_ERRLOG("nvme_create_io_sq failed!\n"); /* Attempt to delete the completion queue */ status.done = false; - rc = nvme_ctrlr_cmd_delete_io_cq(qpair->ctrlr, qpair, nvme_completion_poll_cb, &status); + rc = nvme_pcie_ctrlr_cmd_delete_io_cq(qpair->ctrlr, qpair, nvme_completion_poll_cb, &status); if (rc != 0) { return -1; } @@ -696,7 +792,7 @@ nvme_pcie_ctrlr_delete_io_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_ /* Delete the I/O submission queue and then the completion queue */ status.done = false; - rc = nvme_ctrlr_cmd_delete_io_sq(ctrlr, qpair, nvme_completion_poll_cb, &status); + rc = nvme_pcie_ctrlr_cmd_delete_io_sq(ctrlr, qpair, nvme_completion_poll_cb, &status); if (rc != 0) { return rc; } @@ -708,7 +804,7 @@ nvme_pcie_ctrlr_delete_io_qpair(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_ } status.done = false; - rc = nvme_ctrlr_cmd_delete_io_cq(ctrlr, qpair, nvme_completion_poll_cb, &status); + rc = nvme_pcie_ctrlr_cmd_delete_io_cq(ctrlr, qpair, nvme_completion_poll_cb, &status); if (rc != 0) { return rc; } diff --git a/test/lib/nvme/unit/nvme_ctrlr_c/nvme_ctrlr_ut.c b/test/lib/nvme/unit/nvme_ctrlr_c/nvme_ctrlr_ut.c index 61d75e561..24972aba4 100644 --- a/test/lib/nvme/unit/nvme_ctrlr_c/nvme_ctrlr_ut.c +++ b/test/lib/nvme/unit/nvme_ctrlr_c/nvme_ctrlr_ut.c @@ -257,40 +257,6 @@ nvme_ctrlr_cmd_set_num_queues(struct spdk_nvme_ctrlr *ctrlr, return 0; } -int -nvme_ctrlr_cmd_create_io_cq(struct spdk_nvme_ctrlr *ctrlr, - struct spdk_nvme_qpair *io_que, spdk_nvme_cmd_cb cb_fn, - void *cb_arg) -{ - fake_cpl_success(cb_fn, cb_arg); - return 0; -} - -int -nvme_ctrlr_cmd_create_io_sq(struct spdk_nvme_ctrlr *ctrlr, - struct spdk_nvme_qpair *io_que, spdk_nvme_cmd_cb cb_fn, - void *cb_arg) -{ - fake_cpl_success(cb_fn, cb_arg); - return 0; -} - -int -nvme_ctrlr_cmd_delete_io_cq(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpair *qpair, - spdk_nvme_cmd_cb cb_fn, void *cb_arg) -{ - fake_cpl_success(cb_fn, cb_arg); - return 0; -} - -int -nvme_ctrlr_cmd_delete_io_sq(struct spdk_nvme_ctrlr *ctrlr, struct spdk_nvme_qpair *qpair, - spdk_nvme_cmd_cb cb_fn, void *cb_arg) -{ - fake_cpl_success(cb_fn, cb_arg); - return 0; -} - int nvme_ctrlr_cmd_attach_ns(struct spdk_nvme_ctrlr *ctrlr, uint32_t nsid, struct spdk_nvme_ctrlr_list *payload, spdk_nvme_cmd_cb cb_fn, void *cb_arg)