Deleted Added
sdiff udiff text old ( 248768 ) new ( 248770 )
full compact
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 248768 2013-03-26 22:06:05Z 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 /* TODO: error checking on contigmalloc, bus_dmamap_load calls */
301 qpair->cmd = contigmalloc(qpair->num_entries *
302 sizeof(struct nvme_command), M_NVME, M_ZERO | M_NOWAIT,
303 0, BUS_SPACE_MAXADDR, PAGE_SIZE, 0);
304 qpair->cpl = contigmalloc(qpair->num_entries *
305 sizeof(struct nvme_completion), M_NVME, M_ZERO | M_NOWAIT,
306 0, BUS_SPACE_MAXADDR, PAGE_SIZE, 0);
307
308 bus_dmamap_create(qpair->dma_tag, 0, &qpair->cmd_dma_map);
309 bus_dmamap_create(qpair->dma_tag, 0, &qpair->cpl_dma_map);
310
311 bus_dmamap_load(qpair->dma_tag, qpair->cmd_dma_map,
312 qpair->cmd, qpair->num_entries * sizeof(struct nvme_command),
313 nvme_single_map, &qpair->cmd_bus_addr, 0);

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

318 qpair->sq_tdbl_off = nvme_mmio_offsetof(doorbell[id].sq_tdbl);
319 qpair->cq_hdbl_off = nvme_mmio_offsetof(doorbell[id].cq_hdbl);
320
321 TAILQ_INIT(&qpair->free_tr);
322 TAILQ_INIT(&qpair->outstanding_tr);
323 STAILQ_INIT(&qpair->queued_req);
324
325 for (i = 0; i < qpair->num_trackers; i++) {
326 tr = malloc(sizeof(*tr), M_NVME, M_ZERO | M_NOWAIT);
327
328 if (tr == NULL) {
329 printf("warning: nvme tracker malloc failed\n");
330 break;
331 }
332
333 nvme_qpair_construct_tracker(qpair, tr, i);
334 TAILQ_INSERT_HEAD(&qpair->free_tr, tr, tailq);
335 }
336
337 qpair->act_tr = malloc(sizeof(struct nvme_tracker *) * qpair->num_entries,
338 M_NVME, M_ZERO | M_NOWAIT);
339}
340
341static void
342nvme_qpair_destroy(struct nvme_qpair *qpair)
343{
344 struct nvme_tracker *tr;
345
346 if (qpair->tag)

--- 372 unchanged lines hidden ---