summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortsutsui <tsutsui@NetBSD.org>2003-08-14 09:35:26 +0000
committertsutsui <tsutsui@NetBSD.org>2003-08-14 09:35:26 +0000
commit143adabe3d7ccecc01fbf4735113ddd78e47ca3b (patch)
treebfe5c776c2a23dc16d23f39e067946cc19f07619
parentfcfc3fe7cbca9e6df1d3f996cf80823e245d8212 (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.c17
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);