diff options
| author | tsutsui <tsutsui@NetBSD.org> | 2003-08-14 09:35:26 +0000 |
|---|---|---|
| committer | tsutsui <tsutsui@NetBSD.org> | 2003-08-14 09:35:26 +0000 |
| commit | 143adabe3d7ccecc01fbf4735113ddd78e47ca3b (patch) | |
| tree | bfe5c776c2a23dc16d23f39e067946cc19f07619 | |
| parent | fcfc3fe7cbca9e6df1d3f996cf80823e245d8212 (diff) | |
If BUS_DMA_ALLOCNOW is specified with nsegments > 1
in jazz_bus_dmamap_create() disable BUS_DMA_ALLOCNOW for now
rather than return ENOMEM. Required by some PCI devices (like pciide(4)).
XXX needs re-think how BUS_DMA_ALLOCNOW should be handled.
XXX (we should use another flag for the jazz internal DMAC?)
| -rw-r--r-- | sys/arch/arc/jazz/bus_dma_jazz.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/sys/arch/arc/jazz/bus_dma_jazz.c b/sys/arch/arc/jazz/bus_dma_jazz.c index 5ed765f431c..3dbd7ab253a 100644 --- a/sys/arch/arc/jazz/bus_dma_jazz.c +++ b/sys/arch/arc/jazz/bus_dma_jazz.c @@ -1,4 +1,4 @@ -/* $NetBSD: bus_dma_jazz.c,v 1.8 2003/07/15 00:04:48 lukem Exp $ */ +/* $NetBSD: bus_dma_jazz.c,v 1.9 2003/08/14 09:35:26 tsutsui Exp $ */ /*- * Copyright (C) 2003 Izumi Tsutsui. @@ -28,7 +28,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: bus_dma_jazz.c,v 1.8 2003/07/15 00:04:48 lukem Exp $"); +__KERNEL_RCSID(0, "$NetBSD: bus_dma_jazz.c,v 1.9 2003/08/14 09:35:26 tsutsui Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -150,14 +150,17 @@ jazz_bus_dmamap_create(t, size, nsegments, maxsegsz, boundary, flags, dmamp) jazz_tlbmap_t tlbmap; int error, npte; + if (nsegments > 1) + /* + * BUS_DMA_ALLOCNOW is allowed only with one segment for now. + * XXX needs re-think. + */ + flags &= ~BUS_DMA_ALLOCNOW; + if ((flags & BUS_DMA_ALLOCNOW) == 0) return (_bus_dmamap_create(t, size, nsegments, maxsegsz, boundary, flags, dmamp)); - if (nsegments > 1) - /* BUS_DMA_ALLOCNOW is allowed only with one segment for now. */ - return (ENOMEM); - tlbmap = malloc(sizeof(struct jazz_tlbmap), M_DMAMAP, (flags & BUS_DMA_NOWAIT) ? M_NOWAIT : M_WAITOK); if (tlbmap == NULL) @@ -171,7 +174,7 @@ jazz_bus_dmamap_create(t, size, nsegments, maxsegsz, boundary, flags, dmamp) return (ENOMEM); } - error = _bus_dmamap_create(t, size, nsegments, maxsegsz, boundary, + error = _bus_dmamap_create(t, size, 1, maxsegsz, boundary, flags, dmamp); if (error != 0) { jazz_dmatlb_free(tlbmap->vaddr, npte); |
