diff options
author | jimharris <jimharris@FreeBSD.org> | 2012-10-18 00:39:29 +0000 |
---|---|---|
committer | jimharris <jimharris@FreeBSD.org> | 2012-10-18 00:39:29 +0000 |
commit | c9e224f9c92699211c2ddfe2284967950e341d37 (patch) | |
tree | a0eff5362e51926a6f21f6c1c0df66c880c6515a /sys/dev/nvme/nvme_ns_cmd.c | |
parent | 2e5a6d8f161627fd51fe1bc5551ba988c49cb06f (diff) | |
download | FreeBSD-src-c9e224f9c92699211c2ddfe2284967950e341d37.zip FreeBSD-src-c9e224f9c92699211c2ddfe2284967950e341d37.tar.gz |
Add nvme_ctrlr_submit_[admin|io]_request functions which consolidates
code for allocating nvme_tracker objects and making calls into
bus_dmamap_load for commands which have payloads.
Sponsored by: Intel
Diffstat (limited to 'sys/dev/nvme/nvme_ns_cmd.c')
-rw-r--r-- | sys/dev/nvme/nvme_ns_cmd.c | 41 |
1 files changed, 8 insertions, 33 deletions
diff --git a/sys/dev/nvme/nvme_ns_cmd.c b/sys/dev/nvme/nvme_ns_cmd.c index ecc8cc5..f16168a 100644 --- a/sys/dev/nvme/nvme_ns_cmd.c +++ b/sys/dev/nvme/nvme_ns_cmd.c @@ -34,17 +34,12 @@ nvme_ns_cmd_read(struct nvme_namespace *ns, void *payload, uint64_t lba, uint32_t lba_count, nvme_cb_fn_t cb_fn, void *cb_arg) { struct nvme_request *req; - struct nvme_tracker *tr; struct nvme_command *cmd; - int err; req = nvme_allocate_request(payload, lba_count*512, cb_fn, cb_arg); - tr = nvme_allocate_tracker(ns->ctrlr, FALSE, req); - - if (tr == NULL) + if (req == NULL) return (ENOMEM); - cmd = &req->cmd; cmd->opc = NVME_OPC_READ; cmd->nsid = ns->id; @@ -53,10 +48,7 @@ nvme_ns_cmd_read(struct nvme_namespace *ns, void *payload, uint64_t lba, *(uint64_t *)&cmd->cdw10 = lba; cmd->cdw12 = lba_count-1; - err = bus_dmamap_load(tr->qpair->dma_tag, tr->payload_dma_map, payload, - req->payload_size, nvme_payload_map, tr, 0); - - KASSERT(err == 0, ("bus_dmamap_load returned non-zero!\n")); + nvme_ctrlr_submit_io_request(ns->ctrlr, req); return (0); } @@ -66,15 +58,11 @@ nvme_ns_cmd_write(struct nvme_namespace *ns, void *payload, uint64_t lba, uint32_t lba_count, nvme_cb_fn_t cb_fn, void *cb_arg) { struct nvme_request *req; - struct nvme_tracker *tr; struct nvme_command *cmd; - int err; req = nvme_allocate_request(payload, lba_count*512, cb_fn, cb_arg); - tr = nvme_allocate_tracker(ns->ctrlr, FALSE, req); - - if (tr == NULL) + if (req == NULL) return (ENOMEM); cmd = &req->cmd; @@ -85,10 +73,7 @@ nvme_ns_cmd_write(struct nvme_namespace *ns, void *payload, uint64_t lba, *(uint64_t *)&cmd->cdw10 = lba; cmd->cdw12 = lba_count-1; - err = bus_dmamap_load(tr->qpair->dma_tag, tr->payload_dma_map, payload, - req->payload_size, nvme_payload_map, tr, 0); - - KASSERT(err == 0, ("bus_dmamap_load returned non-zero!\n")); + nvme_ctrlr_submit_io_request(ns->ctrlr, req); return (0); } @@ -98,16 +83,12 @@ nvme_ns_cmd_deallocate(struct nvme_namespace *ns, void *payload, uint8_t num_ranges, nvme_cb_fn_t cb_fn, void *cb_arg) { struct nvme_request *req; - struct nvme_tracker *tr; struct nvme_command *cmd; - int err; req = nvme_allocate_request(payload, num_ranges * sizeof(struct nvme_dsm_range), cb_fn, cb_arg); - tr = nvme_allocate_tracker(ns->ctrlr, FALSE, req); - - if (tr == NULL) + if (req == NULL) return (ENOMEM); cmd = &req->cmd; @@ -118,10 +99,7 @@ nvme_ns_cmd_deallocate(struct nvme_namespace *ns, void *payload, cmd->cdw10 = num_ranges; cmd->cdw11 = NVME_DSM_ATTR_DEALLOCATE; - err = bus_dmamap_load(tr->qpair->dma_tag, tr->payload_dma_map, payload, - req->payload_size, nvme_payload_map, tr, 0); - - KASSERT(err == 0, ("bus_dmamap_load returned non-zero!\n")); + nvme_ctrlr_submit_io_request(ns->ctrlr, req); return (0); } @@ -130,21 +108,18 @@ int nvme_ns_cmd_flush(struct nvme_namespace *ns, nvme_cb_fn_t cb_fn, void *cb_arg) { struct nvme_request *req; - struct nvme_tracker *tr; struct nvme_command *cmd; req = nvme_allocate_request(NULL, 0, cb_fn, cb_arg); - tr = nvme_allocate_tracker(ns->ctrlr, FALSE, req); - - if (tr == NULL) + if (req == NULL) return (ENOMEM); cmd = &req->cmd; cmd->opc = NVME_OPC_FLUSH; cmd->nsid = ns->id; - nvme_qpair_submit_cmd(tr->qpair, tr); + nvme_ctrlr_submit_io_request(ns->ctrlr, req); return (0); } |