summaryrefslogtreecommitdiffstats
path: root/sys/sparc64/include/bus.h
diff options
context:
space:
mode:
authorscottl <scottl@FreeBSD.org>2005-03-14 16:46:28 +0000
committerscottl <scottl@FreeBSD.org>2005-03-14 16:46:28 +0000
commit7be505a03503a9dccdb399c376062a7cf246a8b4 (patch)
treeea782fb9f8249533af78a2cb005772cd4ace3515 /sys/sparc64/include/bus.h
parent8bd55ce9cb3337410e70e9ad26691e99128d0852 (diff)
downloadFreeBSD-src-7be505a03503a9dccdb399c376062a7cf246a8b4.zip
FreeBSD-src-7be505a03503a9dccdb399c376062a7cf246a8b4.tar.gz
Refactor the bus_dma header files so that the interface is described in
sys/bus_dma.h instead of being copied in every single arch. This slightly reorders a flag that was specific to AXP and thus changes the ABI there. The interface still relies on bus_space definitions found in <machine/bus.h> so it cannot be included on its own yet, but that will be fixed at a later date. Add an MD <machine/bus_dma.h> for ever arch for consistency and to allow for future MD augmentation of the API. sparc64 makes heavy use of this right now due to its different bus_dma implemenation.
Diffstat (limited to 'sys/sparc64/include/bus.h')
-rw-r--r--sys/sparc64/include/bus.h148
1 files changed, 1 insertions, 147 deletions
diff --git a/sys/sparc64/include/bus.h b/sys/sparc64/include/bus.h
index 86407be..ed134af 100644
--- a/sys/sparc64/include/bus.h
+++ b/sys/sparc64/include/bus.h
@@ -910,152 +910,6 @@ memsetw(void *d, int val, size_t size)
*sp++ = val;
}
-/* DMA support */
+#include <machine/bus_dma.h>
-/*
- * Flags used in various bus DMA methods.
- */
-#define BUS_DMA_WAITOK 0x000 /* safe to sleep (pseudo-flag) */
-#define BUS_DMA_NOWAIT 0x001 /* not safe to sleep */
-#define BUS_DMA_ALLOCNOW 0x002 /* perform resource allocation now */
-#define BUS_DMA_COHERENT 0x004 /* hint: map memory in a coherent way */
-#define BUS_DMA_ZERO 0x008 /* allocate zero'ed memory */
-#define BUS_DMA_BUS1 0x010
-#define BUS_DMA_BUS2 0x020
-#define BUS_DMA_BUS3 0x040
-#define BUS_DMA_BUS4 0x080
-
-/* The following two flags are non-standard. */
-#define BUS_DMA_NOWRITE 0x100
-#define BUS_DMA_NOCACHE 0x200
-
-/* Forwards needed by prototypes below. */
-struct mbuf;
-struct uio;
-
-typedef int bus_dmasync_op_t;
-#define BUS_DMASYNC_PREREAD 1
-#define BUS_DMASYNC_POSTREAD 2
-#define BUS_DMASYNC_PREWRITE 4
-#define BUS_DMASYNC_POSTWRITE 8
-
-/*
- * A function that returns 1 if the address cannot be accessed by
- * a device and 0 if it can be.
- */
-typedef int bus_dma_filter_t(void *, bus_addr_t);
-
-typedef struct bus_dma_tag *bus_dma_tag_t;
-typedef struct bus_dmamap *bus_dmamap_t;
-
-struct bus_dma_segment {
- bus_addr_t ds_addr; /* DVMA address */
- bus_size_t ds_len; /* length of transfer */
-};
-typedef struct bus_dma_segment bus_dma_segment_t;
-
-/*
- * A function that processes a successfully loaded dma map or an error
- * from a delayed load map.
- */
-typedef void bus_dmamap_callback_t(void *, bus_dma_segment_t *, int, int);
-
-/*
- * Like bus_dmamap_callback but includes map size in bytes. This is
- * defined as a separate interface to maintain compatiiblity for users
- * of bus_dmamap_callback_t--at some point these interfaces should be merged.
- */
-typedef void bus_dmamap_callback2_t(void *, bus_dma_segment_t *, int, bus_size_t, int);
-
-/*
- * A function that performs driver-specific syncronization on behalf of
- * busdma.
- */
-typedef enum {
- BUS_DMA_LOCK = 0x01,
- BUS_DMA_UNLOCK = 0x02,
-} bus_dma_lock_op_t;
-
-typedef void bus_dma_lock_t(void *, bus_dma_lock_op_t);
-
-/*
- * Method table for a bus_dma_tag.
- */
-struct bus_dma_methods {
- int (*dm_dmamap_create)(bus_dma_tag_t, int, bus_dmamap_t *);
- int (*dm_dmamap_destroy)(bus_dma_tag_t, bus_dmamap_t);
- int (*dm_dmamap_load)(bus_dma_tag_t, bus_dmamap_t, void *,
- bus_size_t, bus_dmamap_callback_t *, void *, int);
- int (*dm_dmamap_load_mbuf)(bus_dma_tag_t, bus_dmamap_t,
- struct mbuf *, bus_dmamap_callback2_t *, void *, int);
- int (*dm_dmamap_load_mbuf_sg)(bus_dma_tag_t, bus_dmamap_t,
- struct mbuf *, bus_dma_segment_t *segs, int *nsegs, int);
- int (*dm_dmamap_load_uio)(bus_dma_tag_t, bus_dmamap_t, struct uio *,
- bus_dmamap_callback2_t *, void *, int);
- void (*dm_dmamap_unload)(bus_dma_tag_t, bus_dmamap_t);
- void (*dm_dmamap_sync)(bus_dma_tag_t, bus_dmamap_t,
- bus_dmasync_op_t);
- int (*dm_dmamem_alloc)(bus_dma_tag_t, void **, int, bus_dmamap_t *);
- void (*dm_dmamem_free)(bus_dma_tag_t, void *, bus_dmamap_t);
-};
-
-/*
- * bus_dma_tag_t
- *
- * A machine-dependent opaque type describing the implementation of
- * DMA for a given bus.
- */
-struct bus_dma_tag {
- void *dt_cookie; /* cookie used in the guts */
- bus_dma_tag_t dt_parent;
- bus_size_t dt_alignment;
- bus_size_t dt_boundary;
- bus_addr_t dt_lowaddr;
- bus_addr_t dt_highaddr;
- bus_dma_filter_t *dt_filter;
- void *dt_filterarg;
- bus_size_t dt_maxsize;
- int dt_nsegments;
- bus_size_t dt_maxsegsz;
- int dt_flags;
- int dt_ref_count;
- int dt_map_count;
- bus_dma_lock_t *dt_lockfunc;
- void * *dt_lockfuncarg;
- bus_dma_segment_t *dt_segments;
-
- struct bus_dma_methods *dt_mt;
-};
-
-int bus_dma_tag_create(bus_dma_tag_t, bus_size_t, bus_size_t, bus_addr_t,
- bus_addr_t, bus_dma_filter_t *, void *, bus_size_t, int, bus_size_t,
- int, bus_dma_lock_t *, void *, bus_dma_tag_t *);
-
-int bus_dma_tag_destroy(bus_dma_tag_t);
-
-#define bus_dmamap_create(t, f, p) \
- ((t)->dt_mt->dm_dmamap_create((t), (f), (p)))
-#define bus_dmamap_destroy(t, p) \
- ((t)->dt_mt->dm_dmamap_destroy((t), (p)))
-#define bus_dmamap_load(t, m, p, s, cb, cba, f) \
- ((t)->dt_mt->dm_dmamap_load((t), (m), (p), (s), (cb), (cba), (f)))
-#define bus_dmamap_load_mbuf(t, m, mb, cb, cba, f) \
- ((t)->dt_mt->dm_dmamap_load_mbuf((t), (m), (mb), (cb), (cba), (f)))
-#define bus_dmamap_load_mbuf_sg(t, m, mb, segs, nsegs, f) \
- ((t)->dt_mt->dm_dmamap_load_mbuf_sg((t), (m), (mb), (segs), (nsegs), (f)))
-#define bus_dmamap_load_uio(t, m, ui, cb, cba, f) \
- ((t)->dt_mt->dm_dmamap_load_uio((t), (m), (ui), (cb), (cba), (f)))
-#define bus_dmamap_unload(t, p) \
- ((t)->dt_mt->dm_dmamap_unload((t), (p)))
-#define bus_dmamap_sync(t, m, op) \
- ((t)->dt_mt->dm_dmamap_sync((t), (m), (op)))
-#define bus_dmamem_alloc(t, v, f, m) \
- ((t)->dt_mt->dm_dmamem_alloc((t), (v), (f), (m)))
-#define bus_dmamem_free(t, v, m) \
- ((t)->dt_mt->dm_dmamem_free((t), (v), (m)))
-
-/*
- * Generic helper function for manipulating mutexes.
- */
-void busdma_lock_mutex(void *arg, bus_dma_lock_op_t op);
#endif /* !_MACHINE_BUS_H_ */
OpenPOWER on IntegriCloud