1/*- 2 * Copyright (C) 2012 Intel Corporation 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> |
28__FBSDID("$FreeBSD: head/sys/dev/nvme/nvme_qpair.c 248770 2013-03-26 22:11:34Z jimharris $"); |
29 30#include <sys/param.h> 31#include <sys/bus.h> 32 33#include <dev/pci/pcivar.h> 34 35#include "nvme_private.h" 36 --- 255 unchanged lines hidden (view full) --- 292 sizeof(uint64_t), PAGE_SIZE, BUS_SPACE_MAXADDR, 293 BUS_SPACE_MAXADDR, NULL, NULL, qpair->max_xfer_size, 294 (qpair->max_xfer_size/PAGE_SIZE)+1, PAGE_SIZE, 0, 295 NULL, NULL, &qpair->dma_tag); 296 297 qpair->num_cmds = 0; 298 qpair->num_intr_handler_calls = 0; 299 |
300 qpair->cmd = contigmalloc(qpair->num_entries * |
301 sizeof(struct nvme_command), M_NVME, M_ZERO, |
302 0, BUS_SPACE_MAXADDR, PAGE_SIZE, 0); 303 qpair->cpl = contigmalloc(qpair->num_entries * |
304 sizeof(struct nvme_completion), M_NVME, M_ZERO, |
305 0, BUS_SPACE_MAXADDR, PAGE_SIZE, 0); 306 307 bus_dmamap_create(qpair->dma_tag, 0, &qpair->cmd_dma_map); 308 bus_dmamap_create(qpair->dma_tag, 0, &qpair->cpl_dma_map); 309 310 bus_dmamap_load(qpair->dma_tag, qpair->cmd_dma_map, 311 qpair->cmd, qpair->num_entries * sizeof(struct nvme_command), 312 nvme_single_map, &qpair->cmd_bus_addr, 0); --- 4 unchanged lines hidden (view full) --- 317 qpair->sq_tdbl_off = nvme_mmio_offsetof(doorbell[id].sq_tdbl); 318 qpair->cq_hdbl_off = nvme_mmio_offsetof(doorbell[id].cq_hdbl); 319 320 TAILQ_INIT(&qpair->free_tr); 321 TAILQ_INIT(&qpair->outstanding_tr); 322 STAILQ_INIT(&qpair->queued_req); 323 324 for (i = 0; i < qpair->num_trackers; i++) { |
325 tr = malloc(sizeof(*tr), M_NVME, M_ZERO | M_WAITOK); |
326 nvme_qpair_construct_tracker(qpair, tr, i); 327 TAILQ_INSERT_HEAD(&qpair->free_tr, tr, tailq); 328 } 329 330 qpair->act_tr = malloc(sizeof(struct nvme_tracker *) * qpair->num_entries, |
331 M_NVME, M_ZERO | M_WAITOK); |
332} 333 334static void 335nvme_qpair_destroy(struct nvme_qpair *qpair) 336{ 337 struct nvme_tracker *tr; 338 339 if (qpair->tag) --- 372 unchanged lines hidden --- |