summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
authorpk <pk@NetBSD.org>2000-05-10 11:15:32 +0000
committerpk <pk@NetBSD.org>2000-05-10 11:15:32 +0000
commit2e595d79d8eb902febfc08a22be73fa27f1508cb (patch)
treed18bf08426a2734f2994ab19e14c3e1381773261 /sys/dev
parentfac11bb07ff653e740756b0a78dd58669b037836 (diff)
Load DMA buffer before mapping it into kernel space.
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/sbus/if_le.c24
-rw-r--r--sys/dev/sbus/if_le_ledma.c22
2 files changed, 25 insertions, 21 deletions
diff --git a/sys/dev/sbus/if_le.c b/sys/dev/sbus/if_le.c
index aec3e7942c9..9fb9bdaecaf 100644
--- a/sys/dev/sbus/if_le.c
+++ b/sys/dev/sbus/if_le.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_le.c,v 1.11 2000/05/09 22:51:34 pk Exp $ */
+/* $NetBSD: if_le.c,v 1.12 2000/05/10 11:15:32 pk Exp $ */
/*-
* Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -244,27 +244,27 @@ leattach_sbus(parent, self, aux)
return;
}
- /* Map DMA buffer into kernel space */
- if ((error = bus_dmamem_map(dmatag, &seg, rseg, MEMSIZE,
- (caddr_t *)&sc->sc_mem,
- BUS_DMA_NOWAIT|BUS_DMA_COHERENT)) != 0) {
- printf("%s: DMA buffer map error %d\n",
- self->dv_xname, error);
- bus_dmamem_free(lesc->sc_dmatag, &seg, rseg);
- return;
- }
-
/* Load DMA buffer */
if ((error = bus_dmamap_load_raw(dmatag, lesc->sc_dmamap,
&seg, rseg,
MEMSIZE, BUS_DMA_NOWAIT)) != 0) {
printf("%s: DMA buffer map load error %d\n",
self->dv_xname, error);
- bus_dmamem_unmap(dmatag, (caddr_t)sc->sc_mem, MEMSIZE);
bus_dmamem_free(dmatag, &seg, rseg);
return;
}
+ /* Map DMA buffer into kernel space */
+ if ((error = bus_dmamem_map(dmatag, &seg, rseg, MEMSIZE,
+ (caddr_t *)&sc->sc_mem,
+ BUS_DMA_NOWAIT|BUS_DMA_COHERENT)) != 0) {
+ printf("%s: DMA buffer map error %d\n",
+ self->dv_xname, error);
+ bus_dmamap_unload(dmatag, lesc->sc_dmamap);
+ bus_dmamem_free(lesc->sc_dmatag, &seg, rseg);
+ return;
+ }
+
sc->sc_addr = lesc->sc_dmamap->dm_segs[0].ds_addr & 0xffffff;
sc->sc_memsize = MEMSIZE;
sc->sc_conf3 = LE_C3_BSWP | LE_C3_ACON | LE_C3_BCON;
diff --git a/sys/dev/sbus/if_le_ledma.c b/sys/dev/sbus/if_le_ledma.c
index 42ee00f8428..3b820d34454 100644
--- a/sys/dev/sbus/if_le_ledma.c
+++ b/sys/dev/sbus/if_le_ledma.c
@@ -1,4 +1,4 @@
-/* $NetBSD: if_le_ledma.c,v 1.8 2000/05/09 22:51:34 pk Exp $ */
+/* $NetBSD: if_le_ledma.c,v 1.9 2000/05/10 11:15:32 pk Exp $ */
/*-
* Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -374,6 +374,7 @@ leattach_ledma(parent, self, aux)
/* Allocate buffer memory */
sc->sc_memsize = MEMSIZE;
+ /* Get a DMA handle */
if ((error = bus_dmamap_create(dmatag, MEMSIZE, 1, MEMSIZE,
LEDMA_BOUNDARY, BUS_DMA_NOWAIT,
&lesc->sc_dmamap)) != 0) {
@@ -381,6 +382,7 @@ leattach_ledma(parent, self, aux)
return;
}
+ /* Allocate DMA buffer */
if ((error = bus_dmamem_alloc(dmatag, MEMSIZE, NBPG, LEDMA_BOUNDARY,
&seg, 1, &rseg, BUS_DMA_NOWAIT)) != 0) {
printf("%s @ ledma: DMA buffer alloc error %d\n",
@@ -388,20 +390,22 @@ leattach_ledma(parent, self, aux)
return;
}
- if ((error = bus_dmamem_map(dmatag, &seg, rseg, MEMSIZE,
- (caddr_t *)&sc->sc_mem,
- BUS_DMA_NOWAIT|BUS_DMA_COHERENT)) != 0) {
- printf("%s @ ledma: DMA buffer map error %d\n",
+ /* Load DMA buffer */
+ if ((error = bus_dmamap_load_raw(dmatag, lesc->sc_dmamap,
+ &seg, rseg, MEMSIZE, BUS_DMA_NOWAIT)) != 0) {
+ printf("%s: DMA buffer map load error %d\n",
self->dv_xname, error);
bus_dmamem_free(dmatag, &seg, rseg);
return;
}
- if ((error = bus_dmamap_load_raw(dmatag, lesc->sc_dmamap,
- &seg, rseg, MEMSIZE, BUS_DMA_NOWAIT)) != 0) {
- printf("%s: DMA buffer map load error %d\n",
+ /* Map DMA buffer into kernel space */
+ if ((error = bus_dmamem_map(dmatag, &seg, rseg, MEMSIZE,
+ (caddr_t *)&sc->sc_mem,
+ BUS_DMA_NOWAIT|BUS_DMA_COHERENT)) != 0) {
+ printf("%s @ ledma: DMA buffer map error %d\n",
self->dv_xname, error);
- bus_dmamem_unmap(dmatag, (caddr_t)sc->sc_mem, MEMSIZE);
+ bus_dmamap_unload(dmatag, lesc->sc_dmamap);
bus_dmamem_free(dmatag, &seg, rseg);
return;
}