Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/evbmips/isa Use mips_bus_dma_cookie.



details:   https://anonhg.NetBSD.org/src/rev/280c2b2f1f48
branches:  trunk
changeset: 767086:280c2b2f1f48
user:      matt <matt%NetBSD.org@localhost>
date:      Fri Jul 08 18:50:11 2011 +0000

description:
Use mips_bus_dma_cookie.

diffstat:

 sys/arch/evbmips/isa/isadma_bounce.c |  118 +++++++++++-----------------------
 1 files changed, 40 insertions(+), 78 deletions(-)

diffs (truncated from 333 to 300 lines):

diff -r 9995e3ee150b -r 280c2b2f1f48 sys/arch/evbmips/isa/isadma_bounce.c
--- a/sys/arch/evbmips/isa/isadma_bounce.c      Fri Jul 08 18:49:48 2011 +0000
+++ b/sys/arch/evbmips/isa/isadma_bounce.c      Fri Jul 08 18:50:11 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: isadma_bounce.c,v 1.9 2011/07/01 18:46:35 dyoung Exp $ */
+/*     $NetBSD: isadma_bounce.c,v 1.10 2011/07/08 18:50:11 matt Exp $  */
 
 /*-
  * Copyright (c) 1996, 1997, 1998, 2000, 2001 The NetBSD Foundation, Inc.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: isadma_bounce.c,v 1.9 2011/07/01 18:46:35 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: isadma_bounce.c,v 1.10 2011/07/08 18:50:11 matt Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -51,44 +51,6 @@
 
 #include <uvm/uvm_extern.h>
 
-extern paddr_t avail_end;
-
-/*
- * Cookie used by bouncing ISA DMA.  A pointer to one of these is stashed
- * in the DMA map.
- */
-struct isadma_bounce_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[1]; /* 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
-
 int    isadma_bounce_alloc_bouncebuf(bus_dma_tag_t, bus_dmamap_t,
            bus_size_t, int);
 void   isadma_bounce_free_bouncebuf(bus_dma_tag_t, bus_dmamap_t);
@@ -100,7 +62,7 @@
 isadma_bounce_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 isadma_bounce_cookie *cookie;
+       struct mips_bus_dma_cookie *cookie;
        bus_dmamap_t map;
        int error, cookieflags;
        void *cookiestore;
@@ -137,9 +99,9 @@
         * ISA DMA controller), we may have to bounce it as well.
         */
        cookieflags = 0;
-       if (avail_end > (t->_wbase + t->_wsize) ||
-           ((map->_dm_size / PAGE_SIZE) + 1) > map->_dm_segcnt) {
-               cookieflags |= ID_MIGHT_NEED_BOUNCE;
+       if (_BUS_AVAIL_END > (t->_wbase + t->_bounce_alloc_hi - t->_bounce_alloc_lo)
+           || ((map->_dm_size / PAGE_SIZE) + 1) > map->_dm_segcnt) {
+               cookieflags |= _BUS_DMA_MIGHT_NEED_BOUNCE;
                cookiesize += (sizeof(bus_dma_segment_t) *
                    (map->_dm_segcnt - 1));
        }
@@ -153,11 +115,11 @@
                goto out;
        }
        memset(cookiestore, 0, cookiesize);
-       cookie = (struct isadma_bounce_cookie *)cookiestore;
+       cookie = (struct mips_bus_dma_cookie *)cookiestore;
        cookie->id_flags = cookieflags;
        map->_dm_cookie = cookie;
 
-       if (cookieflags & ID_MIGHT_NEED_BOUNCE) {
+       if (cookieflags & _BUS_DMA_MIGHT_NEED_BOUNCE) {
                /*
                 * Allocate the bounce pages now if the caller
                 * wishes us to do so.
@@ -183,12 +145,12 @@
 void
 isadma_bounce_dmamap_destroy(bus_dma_tag_t t, bus_dmamap_t map)
 {
-       struct isadma_bounce_cookie *cookie = map->_dm_cookie;
+       struct mips_bus_dma_cookie *cookie = map->_dm_cookie;
 
        /*
         * Free any bounce pages this map might hold.
         */
-       if (cookie->id_flags & ID_HAS_BOUNCE)
+       if (cookie->id_flags & _BUS_DMA_HAS_BOUNCE)
                isadma_bounce_free_bouncebuf(t, map);
 
        free(cookie, M_DMAMAP);
@@ -202,7 +164,7 @@
 isadma_bounce_dmamap_load(bus_dma_tag_t t, bus_dmamap_t map, void *buf,
     bus_size_t buflen, struct proc *p, int flags)
 {
-       struct isadma_bounce_cookie *cookie = map->_dm_cookie;
+       struct mips_bus_dma_cookie *cookie = map->_dm_cookie;
        int error;
 
        /*
@@ -217,7 +179,7 @@
         */
        error = _bus_dmamap_load(t, map, buf, buflen, p, flags);
        if (error == 0 ||
-           (error != 0 && (cookie->id_flags & ID_MIGHT_NEED_BOUNCE) == 0))
+           (error != 0 && (cookie->id_flags & _BUS_DMA_MIGHT_NEED_BOUNCE) == 0))
                return (error);
 
        /*
@@ -227,7 +189,7 @@
        /*
         * Allocate bounce pages, if necessary.
         */
-       if ((cookie->id_flags & ID_HAS_BOUNCE) == 0) {
+       if ((cookie->id_flags & _BUS_DMA_HAS_BOUNCE) == 0) {
                error = isadma_bounce_alloc_bouncebuf(t, map, buflen, flags);
                if (error)
                        return (error);
@@ -239,7 +201,7 @@
         */
        cookie->id_origbuf = buf;
        cookie->id_origbuflen = buflen;
-       cookie->id_buftype = ID_BUFTYPE_LINEAR;
+       cookie->id_buftype = _BUS_DMA_BUFTYPE_LINEAR;
        error = _bus_dmamap_load(t, map, cookie->id_bouncebuf, buflen,
            p, flags);
        if (error) {
@@ -253,7 +215,7 @@
        }
 
        /* ...so isadma_bounce_dmamap_sync() knows we're bouncing */
-       cookie->id_flags |= ID_IS_BOUNCING;
+       cookie->id_flags |= _BUS_DMA_IS_BOUNCING;
        return (0);
 }
 
@@ -264,7 +226,7 @@
 isadma_bounce_dmamap_load_mbuf(bus_dma_tag_t t, bus_dmamap_t map,
     struct mbuf *m0, int flags)  
 {
-       struct isadma_bounce_cookie *cookie = map->_dm_cookie;
+       struct mips_bus_dma_cookie *cookie = map->_dm_cookie;
        int error;
 
        /*
@@ -287,7 +249,7 @@
         */
        error = _bus_dmamap_load_mbuf(t, map, m0, flags);
        if (error == 0 ||
-           (error != 0 && (cookie->id_flags & ID_MIGHT_NEED_BOUNCE) == 0))
+           (error != 0 && (cookie->id_flags & _BUS_DMA_MIGHT_NEED_BOUNCE) == 0))
                return (error);
 
        /*
@@ -297,7 +259,7 @@
        /*
         * Allocate bounce pages, if necessary.
         */
-       if ((cookie->id_flags & ID_HAS_BOUNCE) == 0) {
+       if ((cookie->id_flags & _BUS_DMA_HAS_BOUNCE) == 0) {
                error = isadma_bounce_alloc_bouncebuf(t, map, m0->m_pkthdr.len,
                    flags);
                if (error)
@@ -310,7 +272,7 @@
         */
        cookie->id_origbuf = m0;
        cookie->id_origbuflen = m0->m_pkthdr.len;       /* not really used */
-       cookie->id_buftype = ID_BUFTYPE_MBUF;
+       cookie->id_buftype = _BUS_DMA_BUFTYPE_MBUF;
        error = _bus_dmamap_load(t, map, cookie->id_bouncebuf,
            m0->m_pkthdr.len, NULL, flags);
        if (error) {
@@ -324,7 +286,7 @@
        }
 
        /* ...so isadma_bounce_dmamap_sync() knows we're bouncing */
-       cookie->id_flags |= ID_IS_BOUNCING;
+       cookie->id_flags |= _BUS_DMA_IS_BOUNCING;
        return (0);
 }
 
@@ -357,18 +319,18 @@
 void
 isadma_bounce_dmamap_unload(bus_dma_tag_t t, bus_dmamap_t map)
 {
-       struct isadma_bounce_cookie *cookie = map->_dm_cookie;
+       struct mips_bus_dma_cookie *cookie = map->_dm_cookie;
 
        /*
         * If we have bounce pages, free them, unless they're
         * reserved for our exclusive use.
         */
-       if ((cookie->id_flags & ID_HAS_BOUNCE) &&
+       if ((cookie->id_flags & _BUS_DMA_HAS_BOUNCE) &&
            (map->_dm_flags & BUS_DMA_ALLOCNOW) == 0)
                isadma_bounce_free_bouncebuf(t, map);
 
-       cookie->id_flags &= ~ID_IS_BOUNCING;
-       cookie->id_buftype = ID_BUFTYPE_INVALID;
+       cookie->id_flags &= ~_BUS_DMA_IS_BOUNCING;
+       cookie->id_buftype = _BUS_DMA_BUFTYPE_INVALID;
 
        /*
         * Do the generic bits of the unload.
@@ -383,7 +345,7 @@
 isadma_bounce_dmamap_sync(bus_dma_tag_t t, bus_dmamap_t map, bus_addr_t offset,
     bus_size_t len, int ops)
 {
-       struct isadma_bounce_cookie *cookie = map->_dm_cookie;
+       struct mips_bus_dma_cookie *cookie = map->_dm_cookie;
 
        /*
         * Mixing PRE and POST operations is not allowed.
@@ -405,7 +367,7 @@
         * If we're not bouncing, just do the normal sync operation
         * and return.
         */
-       if ((cookie->id_flags & ID_IS_BOUNCING) == 0) {
+       if ((cookie->id_flags & _BUS_DMA_IS_BOUNCING) == 0) {
                _bus_dmamap_sync(t, map, offset, len, ops);
                return;
        }
@@ -423,7 +385,7 @@
         */
 
        switch (cookie->id_buftype) {
-       case ID_BUFTYPE_LINEAR:
+       case _BUS_DMA_BUFTYPE_LINEAR:
                /*
                 * Nothing to do for pre-read.
                 */
@@ -450,7 +412,7 @@
                 */
                break;
 
-       case ID_BUFTYPE_MBUF:
+       case _BUS_DMA_BUFTYPE_MBUF:
            {
                struct mbuf *m, *m0 = cookie->id_origbuf;
                bus_size_t minlen, moff;
@@ -503,16 +465,16 @@
                break;
            }
 
-       case ID_BUFTYPE_UIO:
-               panic("isadma_bounce_dmamap_sync: ID_BUFTYPE_UIO");
+       case _BUS_DMA_BUFTYPE_UIO:
+               panic("isadma_bounce_dmamap_sync: _BUS_DMA_BUFTYPE_UIO");
                break;
 
-       case ID_BUFTYPE_RAW:
-               panic("isadma_bounce_dmamap_sync: ID_BUFTYPE_RAW");
+       case _BUS_DMA_BUFTYPE_RAW:
+               panic("isadma_bounce_dmamap_sync: _BUS_DMA_BUFTYPE_RAW");
                break;
 
-       case ID_BUFTYPE_INVALID:
-               panic("isadma_bounce_dmamap_sync: ID_BUFTYPE_INVALID");
+       case _BUS_DMA_BUFTYPE_INVALID:
+               panic("isadma_bounce_dmamap_sync: _BUS_DMA_BUFTYPE_INVALID");
                break;
 
        default:
@@ -539,10 +501,10 @@
 {
        paddr_t high;
 
-       if (avail_end > ISA_DMA_BOUNCE_THRESHOLD)
+       if (_BUS_AVAIL_END > ISA_DMA_BOUNCE_THRESHOLD)
                high = trunc_page(ISA_DMA_BOUNCE_THRESHOLD);
        else
-               high = trunc_page(avail_end);
+               high = trunc_page(_BUS_AVAIL_END);
 
        return (_bus_dmamem_alloc_range(t, size, alignment, boundary,
            segs, nsegs, rsegs, flags, 0, high));
@@ -556,7 +518,7 @@



Home | Main Index | Thread Index | Old Index