Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/arm/xscale Let the "zero" and "fill8" functions sha...
details: https://anonhg.NetBSD.org/src/rev/6632d1791d3e
branches: trunk
changeset: 534711:6632d1791d3e
user: thorpej <thorpej%NetBSD.org@localhost>
date: Fri Aug 02 02:08:11 2002 +0000
description:
Let the "zero" and "fill8" functions share a bunch of code.
diffstat:
sys/arch/arm/xscale/iopaau.c | 135 +++++++++++-------------------------------
1 files changed, 35 insertions(+), 100 deletions(-)
diffs (172 lines):
diff -r d44d71278658 -r 6632d1791d3e sys/arch/arm/xscale/iopaau.c
--- a/sys/arch/arm/xscale/iopaau.c Fri Aug 02 02:07:09 2002 +0000
+++ b/sys/arch/arm/xscale/iopaau.c Fri Aug 02 02:08:11 2002 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: iopaau.c,v 1.2 2002/08/02 00:36:38 thorpej Exp $ */
+/* $NetBSD: iopaau.c,v 1.3 2002/08/02 02:08:11 thorpej Exp $ */
/*
* Copyright (c) 2002 Wasabi Systems, Inc.
@@ -43,7 +43,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: iopaau.c,v 1.2 2002/08/02 00:36:38 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: iopaau.c,v 1.3 2002/08/02 02:08:11 thorpej Exp $");
#include <sys/param.h>
#include <sys/pool.h>
@@ -224,12 +224,13 @@
}
/*
- * iopaau_func_zero_setup:
+ * iopaau_func_fill_immed_setup:
*
- * Setup routine for the "zero" function.
+ * Common code shared by the zero and fillN setup routines.
*/
-int
-iopaau_func_zero_setup(struct iopaau_softc *sc, struct dmover_request *dreq)
+static int
+iopaau_func_fill_immed_setup(struct iopaau_softc *sc,
+ struct dmover_request *dreq, uint32_t immed)
{
bus_dmamap_t dmamap = sc->sc_map_out;
uint32_t *prevpa;
@@ -286,100 +287,6 @@
* data stream to worry about.
*/
- cur->d_sar1 = 0; /* immediate value */
- cur->d_dar = dmamap->dm_segs[seg].ds_addr;
- cur->d_bc = dmamap->dm_segs[seg].ds_len;
- cur->d_dc = AAU_DC_B1_CC(AAU_DC_CC_FILL) | AAU_DC_DWE;
- SYNC_DESC_4(cur);
- }
-
- *prevp = NULL;
- *prevpa = 0;
-
- cur->d_dc |= AAU_DC_IE;
- SYNC_DESC_4(cur);
-
- sc->sc_lastdesc = cur;
-
- return (0);
-
- bad:
- iopaau_desc_4_free(sc, sc->sc_firstdesc);
- bus_dmamap_unload(sc->sc_dmat, sc->sc_map_out);
- sc->sc_firstdesc = NULL;
-
- return (error);
-}
-
-/*
- * iopaau_func_fill8_setup:
- *
- * Setup routine for the "fill8" function.
- */
-int
-iopaau_func_fill8_setup(struct iopaau_softc *sc, struct dmover_request *dreq)
-{
- bus_dmamap_t dmamap = sc->sc_map_out;
- uint32_t *prevpa;
- struct aau_desc_4 **prevp, *cur;
- int error, seg;
- uint32_t immed;
-
- immed = dreq->dreq_immediate[0] |
- (dreq->dreq_immediate[0] << 8) |
- (dreq->dreq_immediate[0] << 16) |
- (dreq->dreq_immediate[0] << 24);
-
- switch (dreq->dreq_outbuf_type) {
- case DMOVER_BUF_LINEAR:
- error = bus_dmamap_load(sc->sc_dmat, dmamap,
- dreq->dreq_outbuf.dmbuf_linear.l_addr,
- dreq->dreq_outbuf.dmbuf_linear.l_len, NULL,
- BUS_DMA_NOWAIT|BUS_DMA_WRITE|BUS_DMA_STREAMING);
- break;
-
- case DMOVER_BUF_UIO:
- {
- struct uio *uio = dreq->dreq_outbuf.dmbuf_uio;
-
- if (uio->uio_rw != UIO_READ)
- return (EINVAL);
-
- error = bus_dmamap_load_uio(sc->sc_dmat, dmamap,
- uio, BUS_DMA_NOWAIT|BUS_DMA_WRITE|BUS_DMA_STREAMING);
- break;
- }
- }
-
- if (__predict_false(error != 0))
- return (error);
-
- bus_dmamap_sync(sc->sc_dmat, dmamap, 0, dmamap->dm_mapsize,
- BUS_DMASYNC_PREWRITE);
-
- prevp = (struct aau_desc_4 **) &sc->sc_firstdesc;
- prevpa = &sc->sc_firstdesc_pa;
-
- for (seg = 0; seg < dmamap->dm_nsegs; seg++) {
- cur = pool_cache_get(&aau_desc_4_cache, PR_NOWAIT);
- if (cur == NULL) {
- *prevp = NULL;
- error = ENOMEM;
- goto bad;
- }
-
- *prevp = cur;
- *prevpa = cur->d_pa;
-
- prevp = &cur->d_next;
- prevpa = &cur->d_nda;
-
- /*
- * We don't actually enforce the page alignment
- * constraint, here, because there is only one
- * data stream to worry about.
- */
-
cur->d_sar1 = immed;
cur->d_dar = dmamap->dm_segs[seg].ds_addr;
cur->d_bc = dmamap->dm_segs[seg].ds_len;
@@ -406,6 +313,34 @@
}
/*
+ * iopaau_func_zero_setup:
+ *
+ * Setup routine for the "zero" function.
+ */
+int
+iopaau_func_zero_setup(struct iopaau_softc *sc, struct dmover_request *dreq)
+{
+
+ return (iopaau_func_fill_immed_setup(sc, dreq, 0));
+}
+
+/*
+ * iopaau_func_fill8_setup:
+ *
+ * Setup routine for the "fill8" function.
+ */
+int
+iopaau_func_fill8_setup(struct iopaau_softc *sc, struct dmover_request *dreq)
+{
+
+ return (iopaau_func_fill_immed_setup(sc, dreq,
+ dreq->dreq_immediate[0] |
+ (dreq->dreq_immediate[0] << 8) |
+ (dreq->dreq_immediate[0] << 16) |
+ (dreq->dreq_immediate[0] << 24)));
+}
+
+/*
* iopaau_func_copy_setup:
*
* Setup routine for the "copy" function.
Home |
Main Index |
Thread Index |
Old Index