Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/arch/evbarm/integrator Remove bounce buffer support sinc...
details: https://anonhg.NetBSD.org/src/rev/35d36d039953
branches: trunk
changeset: 781621:35d36d039953
user: matt <matt%NetBSD.org@localhost>
date: Tue Sep 18 14:42:19 2012 +0000
description:
Remove bounce buffer support since there is now generic bounce buffer support
diffstat:
sys/arch/evbarm/integrator/int_bus_dma.c | 594 +------------------------------
1 files changed, 17 insertions(+), 577 deletions(-)
diffs (truncated from 646 to 300 lines):
diff -r f4e5f6ef5dab -r 35d36d039953 sys/arch/evbarm/integrator/int_bus_dma.c
--- a/sys/arch/evbarm/integrator/int_bus_dma.c Tue Sep 18 08:36:21 2012 +0000
+++ b/sys/arch/evbarm/integrator/int_bus_dma.c Tue Sep 18 14:42:19 2012 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: int_bus_dma.c,v 1.17 2010/11/04 12:16:15 uebayasi Exp $ */
+/* $NetBSD: int_bus_dma.c,v 1.18 2012/09/18 14:42:19 matt Exp $ */
/*
* Copyright (c) 2002 Wasabi Systems, Inc.
@@ -42,7 +42,7 @@
#define _ARM32_BUS_DMA_PRIVATE
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: int_bus_dma.c,v 1.17 2010/11/04 12:16:15 uebayasi Exp $");
+__KERNEL_RCSID(0, "$NetBSD: int_bus_dma.c,v 1.18 2012/09/18 14:42:19 matt Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -56,37 +56,6 @@
#include <evbarm/integrator/int_bus_dma.h>
-struct integrator_dma_cookie {
- int id_flags; /* flags; see below */
-
- /*
- * Information about the original buffer used during
- * DMA map syncs. Note that origbuflen is only used
- * for ID_BUFTYPE_LINEAR.
- */
- void *id_origbuf; /* pointer to orig buffer if
- bouncing */
- bus_size_t id_origbuflen; /* ...and size */
- int id_buftype; /* type of buffer */
-
- void *id_bouncebuf; /* pointer to the bounce buffer */
- bus_size_t id_bouncebuflen; /* ...and size */
- int id_nbouncesegs; /* number of valid bounce segs */
- bus_dma_segment_t id_bouncesegs[0]; /* array of bounce buffer
- physical memory segments */
-};
-/* id_flags */
-#define ID_MIGHT_NEED_BOUNCE 0x01 /* map could need bounce buffers */
-#define ID_HAS_BOUNCE 0x02 /* map currently has bounce buffers */
-#define ID_IS_BOUNCING 0x04 /* map is bouncing current xfer */
-
-/* id_buftype */
-#define ID_BUFTYPE_INVALID 0
-#define ID_BUFTYPE_LINEAR 1
-#define ID_BUFTYPE_MBUF 2
-#define ID_BUFTYPE_UIO 3
-#define ID_BUFTYPE_RAW 4
-
#undef DEBUG
#define DEBUG(x)
@@ -94,539 +63,6 @@
extern BootConfig bootconfig;
-static int integrator_bus_dmamap_create(bus_dma_tag_t, bus_size_t, int,
- bus_size_t, bus_size_t, int, bus_dmamap_t *);
-static void integrator_bus_dmamap_destroy(bus_dma_tag_t, bus_dmamap_t);
-static int integrator_bus_dmamap_load(bus_dma_tag_t, bus_dmamap_t, void *,
- bus_size_t, struct proc *, int);
-static int integrator_bus_dmamap_load_mbuf(bus_dma_tag_t, bus_dmamap_t,
- struct mbuf *, int);
-static int integrator_bus_dmamap_load_uio(bus_dma_tag_t, bus_dmamap_t,
- struct uio *, int);
-static int integrator_bus_dmamap_load_raw(bus_dma_tag_t, bus_dmamap_t,
- bus_dma_segment_t *, int, bus_size_t, int);
-static void integrator_bus_dmamap_unload(bus_dma_tag_t, bus_dmamap_t);
-static void integrator_bus_dmamap_sync(bus_dma_tag_t, bus_dmamap_t,
- bus_addr_t, bus_size_t, int);
-static int integrator_bus_dmamem_alloc(bus_dma_tag_t, bus_size_t,
- bus_size_t, bus_size_t, bus_dma_segment_t *, int, int *, int);
-static int integrator_dma_alloc_bouncebuf(bus_dma_tag_t, bus_dmamap_t,
- bus_size_t, int);
-static void integrator_dma_free_bouncebuf(bus_dma_tag_t, bus_dmamap_t);
-
-
-/*
- * Create an Integrator DMA map.
- */
-static int
-integrator_bus_dmamap_create(bus_dma_tag_t t, bus_size_t size, int nsegments,
- bus_size_t maxsegsz, bus_size_t boundary, int flags, bus_dmamap_t *dmamp)
-{
- struct integrator_dma_cookie *cookie;
- bus_dmamap_t map;
- int error, cookieflags;
- void *cookiestore;
- size_t cookiesize;
-
- DEBUG(printf("I_bus_dmamap_create(tag %x, size %x, nseg %d, max %x,"
- " boundary %x, flags %x, dmamap %p)\n", (unsigned) t,
- (unsigned) size, nsegments, (unsigned) maxsegsz,
- (unsigned)boundary, flags, dmamp));
-
- /* Call common function to create the basic map. */
- error = _bus_dmamap_create(t, size, nsegments, maxsegsz, boundary,
- flags, dmamp);
- if (error)
- return (error);
-
- map = *dmamp;
- map->_dm_cookie = NULL;
-
- cookiesize = sizeof(struct integrator_dma_cookie);
-
- /*
- * Some CM boards have private memory which is significantly
- * faster than the normal memory stick. To support this
- * memory we have to bounce any DMA transfers.
- *
- * In order to DMA to arbitrary buffers, we use "bounce
- * buffers" - pages in in the main PCI visible memory. On DMA
- * reads, DMA happens to the bounce buffers, and is copied
- * into the caller's buffer. On writes, data is copied into
- * but bounce buffer, and the DMA happens from those pages.
- * To software using the DMA mapping interface, this looks
- * simply like a data cache.
- *
- * If we have private RAM in the system, we may need bounce
- * buffers. We check and remember that here.
- */
-#if 0
- cookieflags = ID_MIGHT_NEED_BOUNCE;
-#else
- cookieflags = 0;
-#endif
- cookiesize += (sizeof(bus_dma_segment_t) * map->_dm_segcnt);
-
- /*
- * Allocate our cookie.
- */
- if ((cookiestore = malloc(cookiesize, M_DMAMAP,
- (flags & BUS_DMA_NOWAIT) ? M_NOWAIT : M_WAITOK)) == NULL) {
- error = ENOMEM;
- goto out;
- }
- memset(cookiestore, 0, cookiesize);
- cookie = (struct integrator_dma_cookie *)cookiestore;
- cookie->id_flags = cookieflags;
- map->_dm_cookie = cookie;
-
- if (cookieflags & ID_MIGHT_NEED_BOUNCE) {
- /*
- * Allocate the bounce pages now if the caller
- * wishes us to do so.
- */
- if ((flags & BUS_DMA_ALLOCNOW) == 0)
- goto out;
-
- DEBUG(printf("I_bus_dmamap_create bouncebuf alloc\n"));
- error = integrator_dma_alloc_bouncebuf(t, map, size, flags);
- }
-
- out:
- if (error) {
- if (map->_dm_cookie != NULL)
- free(map->_dm_cookie, M_DMAMAP);
- _bus_dmamap_destroy(t, map);
- printf("I_bus_dmamap_create failed (%d)\n", error);
- }
- return (error);
-}
-
-/*
- * Destroy an ISA DMA map.
- */
-static void
-integrator_bus_dmamap_destroy(bus_dma_tag_t t, bus_dmamap_t map)
-{
- struct integrator_dma_cookie *cookie = map->_dm_cookie;
-
- DEBUG(printf("I_bus_dmamap_destroy (tag %x, map %x)\n", (unsigned) t,
- (unsigned) map));
- /*
- * Free any bounce pages this map might hold.
- */
- if (cookie->id_flags & ID_HAS_BOUNCE) {
- DEBUG(printf("I_bus_dmamap_destroy bouncebuf\n"));
- integrator_dma_free_bouncebuf(t, map);
- }
-
- free(cookie, M_DMAMAP);
- _bus_dmamap_destroy(t, map);
-}
-
-/*
- * Load an Integrator DMA map with a linear buffer.
- */
-static int
-integrator_bus_dmamap_load(bus_dma_tag_t t, bus_dmamap_t map, void *buf,
- bus_size_t buflen, struct proc *p, int flags)
-{
- struct integrator_dma_cookie *cookie = map->_dm_cookie;
- int error;
-
- DEBUG(printf("I_bus_dmamap_load (tag %x, map %x, buf %p, len %u,"
- " proc %p, flags %d)\n", (unsigned) t, (unsigned) map, buf,
- (unsigned) buflen, p, flags));
- /*
- * Make sure that on error condition we return "no valid mappings."
- */
- map->dm_mapsize = 0;
- map->dm_nsegs = 0;
-
- /*
- * Try to load the map the normal way. If this errors out,
- * and we can bounce, we will.
- */
- error = _bus_dmamap_load(t, map, buf, buflen, p, flags);
- if (error == 0 ||
- (error != 0 && (cookie->id_flags & ID_MIGHT_NEED_BOUNCE) == 0))
- return (error);
-
- /*
- * First attempt failed; bounce it.
- */
-
- /*
- * Allocate bounce pages, if necessary.
- */
- if ((cookie->id_flags & ID_HAS_BOUNCE) == 0) {
- DEBUG(printf("I_bus_dmamap_load alloc bouncebuf\n"));
- error = integrator_dma_alloc_bouncebuf(t, map, buflen, flags);
- if (error)
- return (error);
- }
-
- /*
- * Cache a pointer to the caller's buffer and load the DMA map
- * with the bounce buffer.
- */
- cookie->id_origbuf = buf;
- cookie->id_origbuflen = buflen;
- cookie->id_buftype = ID_BUFTYPE_LINEAR;
- error = _bus_dmamap_load(t, map, cookie->id_bouncebuf, buflen,
- NULL, flags);
- if (error) {
- /*
- * Free the bounce pages, unless our resources
- * are reserved for our exclusive use.
- */
- if ((map->_dm_flags & BUS_DMA_ALLOCNOW) == 0)
- integrator_dma_free_bouncebuf(t, map);
- return (error);
- }
-
- /* ...so integrator_bus_dmamap_sync() knows we're bouncing */
- cookie->id_flags |= ID_IS_BOUNCING;
- return (0);
-}
-
-/*
- * Like integrator_bus_dmamap_load(), but for mbufs.
- */
-static int
-integrator_bus_dmamap_load_mbuf(bus_dma_tag_t t, bus_dmamap_t map,
- struct mbuf *m0, int flags)
-{
- struct integrator_dma_cookie *cookie = map->_dm_cookie;
- int error;
-
- /*
- * Make sure that on error condition we return "no valid mappings."
- */
- map->dm_mapsize = 0;
- map->dm_nsegs = 0;
-
-#ifdef DIAGNOSTIC
- if ((m0->m_flags & M_PKTHDR) == 0)
- panic("integrator_bus_dmamap_load_mbuf: no packet header");
-#endif
-
- if (m0->m_pkthdr.len > map->_dm_size)
- return (EINVAL);
-
- /*
- * Try to load the map the normal way. If this errors out,
- * and we can bounce, we will.
- */
- error = _bus_dmamap_load_mbuf(t, map, m0, flags);
- if (error == 0 ||
- (error != 0 && (cookie->id_flags & ID_MIGHT_NEED_BOUNCE) == 0))
- return (error);
-
- /*
- * First attempt failed; bounce it.
- *
- * Allocate bounce pages, if necessary.
- */
- if ((cookie->id_flags & ID_HAS_BOUNCE) == 0) {
- error = integrator_dma_alloc_bouncebuf(t, map,
- m0->m_pkthdr.len, flags);
- if (error)
- return (error);
- }
Home |
Main Index |
Thread Index |
Old Index