summaryrefslogtreecommitdiffstats
path: root/share/man/man9/bus_dma.9
diff options
context:
space:
mode:
authorscottl <scottl@FreeBSD.org>2005-12-05 23:25:59 +0000
committerscottl <scottl@FreeBSD.org>2005-12-05 23:25:59 +0000
commit0fcccb0032586c0136de2c3376457c321dbfb1ed (patch)
tree0f743e9d480339d0270b91a10cd9f1da60077ed1 /share/man/man9/bus_dma.9
parentc77d4150b7c5ce1e4aa2a4f96822eca488501c18 (diff)
downloadFreeBSD-src-0fcccb0032586c0136de2c3376457c321dbfb1ed.zip
FreeBSD-src-0fcccb0032586c0136de2c3376457c321dbfb1ed.tar.gz
More review and adjustment for reality that should have happened 3 years
ago. Document the real behavior of bus_dma_tag_create, bus_dmamap_load, and other functions. Also document their arguments and return values. MFC After: 3 days
Diffstat (limited to 'share/man/man9/bus_dma.9')
-rw-r--r--share/man/man9/bus_dma.960
1 files changed, 47 insertions, 13 deletions
diff --git a/share/man/man9/bus_dma.9 b/share/man/man9/bus_dma.9
index c3e59cd..111ff99 100644
--- a/share/man/man9/bus_dma.9
+++ b/share/man/man9/bus_dma.9
@@ -60,7 +60,7 @@
.\" $FreeBSD$
.\" $NetBSD: bus_dma.9,v 1.25 2002/10/14 13:43:16 wiz Exp $
.\"
-.Dd August 31, 2005
+.Dd December 5, 2005
.Dt BUS_DMA 9
.Os
.Sh NAME
@@ -184,7 +184,12 @@ all restrictions necessary for a successful DMA operation, some conversion
almost always required when presenting segment information to the device.
.It Vt bus_dmamap_t
A machine-dependent opaque type describing an individual mapping.
-Multiple DMA maps can be associated with one DMA tag.
+One map is used for each memory allocation that will be loaded.
+Maps can be reused once they have been unloaded.
+Multiple maps can be associated with one DMA tag.
+While the value of the map may evaluate to NULL on some platforms under
+certain conditions, it should never be assumed that it will be NULL in all
+cases.
.It Vt bus_dmamap_callback_t
Client specified callback for receiving mapping information resulting from
the load of a
@@ -401,12 +406,16 @@ Are as follows:
.Bl -tag -width "BUS_DMA_ALLOCNOW" -compact
.It Dv BUS_DMA_ALLOCNOW
Pre-allocate enough resources to handle at least one map load operation on
-this tag without blocking.
+this tag.
If sufficient resources are not available,
.Er ENOMEM
is returned.
-This should not be used for tags that will not be directly associated with
-a map.
+This should not be used for tags that only describe buffers that will be
+allocated with
+.Fn bus_dmamem_alloc .
+Also, due to resource sharing with other tags, this flag does not guarantee
+that resources will be allocated or reserved exclusively for this tag.
+It should be treated only as a minor optimization.
.El
.It Fa lockfunc
Optional lock manipulation function (may be NULL) to be called when busdma
@@ -481,7 +490,8 @@ Creates a mapping in device visible address space of
bytes of
.Fa buf ,
associated with the DMA map
-.Fa map.
+.Fa map .
+This call will always return immediately and will not block for any reason.
Arguments are as follows:
.Bl -tag -width buflen -compact
.It Fa dmat
@@ -496,10 +506,20 @@ mapped into device visible address space.
The size of the buffer.
.It Fa callback Fa callback_arg
The callback function, and its argument.
+This function is called once sufficient mapping resources are available for
+the DMA operation.
+If resources are temporarily unavailable, this function will be deferred until
+later, but the load operation will still return immediately to the caller.
+Thus, callers should not assume that the callback will be called before the
+load returns, and code should be structured appropriately to handle this.
+See below for specific flags and error codes that control this behavior.
.It Fa flags
-The value of this argument is currently undefined, and should be
-specified as
-.Ql 0 .
+Are as follows:
+.Bl -tag -width BUS_DMA_NOWAIT -compact
+.It Er BUS_DMA_NOWAIT
+The load should not be deferred in case of insufficient mapping resources,
+and instead should return immediately with an appropriate error.
+.El
.El
.Pp
Return values to the caller are as follows:
@@ -513,9 +533,14 @@ The callback will be called as soon as resources are available.
Callbacks are serviced in FIFO order.
To ensure that ordering is guaranteed, all subsequent load requests will also
be deferred until all callbacks have been processed.
+.It Er ENOMEM
+The load request has failed due to insufficient resources, and the caller
+specifically used the
+.Fa BUS_DMA_NOWAIT
+flag.
.It Er EINVAL
The load request was invalid.
-The callback has not, and will not be called.
+The callback has been called and has been provided the same error.
This error value may indicate that
.Fa dmat ,
.Fa map ,
@@ -523,7 +548,7 @@ This error value may indicate that
or
.Fa callback
were invalid, or
-.Fa buslen
+.Fa buflen
was larger than the
.Fa maxsize
argument used to create the dma tag
@@ -555,12 +580,16 @@ A
.Vt bus_size_t
argument is also passed to the callback routine, which
contains the mbuf chain's packet header length.
+The
+.Fa BUS_DMA_NOWAIT
+flag is implied, thus no callback deferral will happen.
.Pp
Mbuf chains are assumed to be in kernel virtual address space.
.Pp
-Returns
+Beside the error values listed for
+.Fn bus_dmamap_load ,
.Er EINVAL
-if the size of the mbuf chain exceeds the maximum limit of the
+will be returned if the size of the mbuf chain exceeds the maximum limit of the
DMA tag.
.It Fn bus_dmamap_load_mbuf_sg "dmat" "map" "mbuf" "segs" "nsegs" "flags"
This is just like
@@ -587,6 +616,11 @@ argument is also passed to the callback routine, which contains the size of
.Fa uio ,
i.e.
.Fa uio->uio_resid .
+The
+.Fa BUS_DMA_NOWAIT
+flag is implied, thus no callback deferral will happen.
+Returns the same errors as
+.Fn bus_dmamap_load .
.Pp
If
.Fa uio->uio_segflg
OpenPOWER on IntegriCloud