Deleted Added
full compact
nvme_qpair.c (248768) nvme_qpair.c (248770)
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>
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 $");
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
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 *
300 qpair->cmd = contigmalloc(qpair->num_entries *
302 sizeof(struct nvme_command), M_NVME, M_ZERO | M_NOWAIT,
301 sizeof(struct nvme_command), M_NVME, M_ZERO,
303 0, BUS_SPACE_MAXADDR, PAGE_SIZE, 0);
304 qpair->cpl = contigmalloc(qpair->num_entries *
302 0, BUS_SPACE_MAXADDR, PAGE_SIZE, 0);
303 qpair->cpl = contigmalloc(qpair->num_entries *
305 sizeof(struct nvme_completion), M_NVME, M_ZERO | M_NOWAIT,
304 sizeof(struct nvme_completion), M_NVME, M_ZERO,
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++) {
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++) {
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
325 tr = malloc(sizeof(*tr), M_NVME, M_ZERO | M_WAITOK);
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,
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,
338 M_NVME, M_ZERO | M_NOWAIT);
331 M_NVME, M_ZERO | M_WAITOK);
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 ---
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 ---