summaryrefslogtreecommitdiffstats
path: root/sys/sparc64/include/bus.h
diff options
context:
space:
mode:
authorsam <sam@FreeBSD.org>2002-10-04 20:40:39 +0000
committersam <sam@FreeBSD.org>2002-10-04 20:40:39 +0000
commit1ba0866904d81527e87e7ca185303d932dcb43fc (patch)
tree2a99279aecd745558985c36259960a14ab6452aa /sys/sparc64/include/bus.h
parent451a9f90e16e09921a9b6bb02f0bc45c9272fba6 (diff)
downloadFreeBSD-src-1ba0866904d81527e87e7ca185303d932dcb43fc.zip
FreeBSD-src-1ba0866904d81527e87e7ca185303d932dcb43fc.tar.gz
New bus_dma interfaces for use by crypto device drivers:
o bus_dmamap_load_mbuf o bus_dmamap_load_uio Test on i386. Known to compile on alpha and sparc64, but not tested. Otherwise untried.
Diffstat (limited to 'sys/sparc64/include/bus.h')
-rw-r--r--sys/sparc64/include/bus.h37
1 files changed, 37 insertions, 0 deletions
diff --git a/sys/sparc64/include/bus.h b/sys/sparc64/include/bus.h
index 5552597..2231f22 100644
--- a/sys/sparc64/include/bus.h
+++ b/sys/sparc64/include/bus.h
@@ -913,6 +913,13 @@ typedef struct bus_dma_segment bus_dma_segment_t;
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);
+
+/*
* bus_dma_tag_t
*
* A machine-dependent opaque type describing the implementation of
@@ -942,6 +949,10 @@ struct bus_dma_tag {
int (*dmamap_destroy)(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t);
int (*dmamap_load)(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t,
void *, bus_size_t, bus_dmamap_callback_t *, void *, int);
+ int (*dmamap_load_mbuf)(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t,
+ struct mbuf *, bus_dmamap_callback2_t *, void *, int);
+ int (*dmamap_load_uio)(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t,
+ struct uio *, bus_dmamap_callback2_t *, void *, int);
void (*dmamap_unload)(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t);
void (*dmamap_sync)(bus_dma_tag_t, bus_dma_tag_t, bus_dmamap_t,
bus_dmasync_op_t);
@@ -1010,6 +1021,32 @@ sparc64_dmamap_load(bus_dma_tag_t pt, bus_dma_tag_t dt, bus_dmamap_t m,
#define bus_dmamap_load(t, m, p, s, cb, cba, f) \
sparc64_dmamap_load((t), (t), (m), (p), (s), (cb), (cba), (f))
+static __inline int
+sparc64_dmamap_load_mbuf(bus_dma_tag_t pt, bus_dma_tag_t dt, bus_dmamap_t m,
+ struct mbuf *mb, bus_dmamap_callback2_t *cb, void *cba, int f)
+{
+ bus_dma_tag_t lt;
+
+ for (lt = pt; lt->dmamap_load == NULL; lt = lt->parent)
+ ;
+ return ((*lt->dmamap_load_mbuf)(lt, dt, m, mb, cb, cba, f));
+}
+#define bus_dmamap_load_mbuf(t, m, mb, cb, cba, f) \
+ sparc64_dmamap_load_mbuf((t), (t), (m), (mb), (cb), (cba), (f))
+
+static __inline int
+sparc64_dmamap_load_uio(bus_dma_tag_t pt, bus_dma_tag_t dt, bus_dmamap_t m,
+ struct uio *ui, bus_dmamap_callback2_t *cb, void *cba, int f)
+{
+ bus_dma_tag_t lt;
+
+ for (lt = pt; lt->dmamap_load == NULL; lt = lt->parent)
+ ;
+ return ((*lt->dmamap_load_uio)(lt, dt, m, ui, cb, cba, f));
+}
+#define bus_dmamap_load_uio(t, m, ui, cb, cba, f) \
+ sparc64_dmamap_load_uio((t), (t), (m), (ui), (cb), (cba), (f))
+
static __inline void
sparc64_dmamap_unload(bus_dma_tag_t pt, bus_dma_tag_t dt, bus_dmamap_t p)
{
OpenPOWER on IntegriCloud