124503465SHiten Pandya.\" Copyright (c) 2002, 2003 Hiten M. Pandya. 224503465SHiten Pandya.\" All rights reserved. 324503465SHiten Pandya.\" 424503465SHiten Pandya.\" Redistribution and use in source and binary forms, with or without 524503465SHiten Pandya.\" modification, are permitted provided that the following conditions 624503465SHiten Pandya.\" are met: 724503465SHiten Pandya.\" 1. Redistributions of source code must retain the above copyright 824503465SHiten Pandya.\" notice, this list of conditions, and the following disclaimer, 924503465SHiten Pandya.\" without modification, immediately at the beginning of the file. 1024503465SHiten Pandya.\" 2. The name of the author may not be used to endorse or promote products 1124503465SHiten Pandya.\" derived from this software without specific prior written permission. 1224503465SHiten Pandya.\" 1324503465SHiten Pandya.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1424503465SHiten Pandya.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1524503465SHiten Pandya.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1624503465SHiten Pandya.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR, CONTRIBUTORS OR THE 1724503465SHiten Pandya.\" VOICES IN HITEN PANDYA'S HEAD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 1824503465SHiten Pandya.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 1924503465SHiten Pandya.\" TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 2024503465SHiten Pandya.\" PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 2124503465SHiten Pandya.\" LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 2224503465SHiten Pandya.\" NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 2324503465SHiten Pandya.\" SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2424503465SHiten Pandya.\" 2524503465SHiten Pandya.\" Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc. 2624503465SHiten Pandya.\" All rights reserved. 2724503465SHiten Pandya.\" 2824503465SHiten Pandya.\" This code is derived from software contributed to The NetBSD Foundation 2924503465SHiten Pandya.\" by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, 3024503465SHiten Pandya.\" NASA Ames Research Center. 3124503465SHiten Pandya.\" 3224503465SHiten Pandya.\" Redistribution and use in source and binary forms, with or without 3324503465SHiten Pandya.\" modification, are permitted provided that the following conditions 3424503465SHiten Pandya.\" are met: 3524503465SHiten Pandya.\" 1. Redistributions of source code must retain the above copyright 3624503465SHiten Pandya.\" notice, this list of conditions and the following disclaimer. 3724503465SHiten Pandya.\" 2. Redistributions in binary form must reproduce the above copyright 3824503465SHiten Pandya.\" notice, this list of conditions and the following disclaimer in the 3924503465SHiten Pandya.\" documentation and/or other materials provided with the distribution. 4024503465SHiten Pandya.\" 3. All advertising materials mentioning features or use of this software 4124503465SHiten Pandya.\" must display the following acknowledgment: 4224503465SHiten Pandya.\" This product includes software developed by the NetBSD 4324503465SHiten Pandya.\" Foundation, Inc. and its contributors. 4424503465SHiten Pandya.\" 4. Neither the name of The NetBSD Foundation nor the names of its 4524503465SHiten Pandya.\" contributors may be used to endorse or promote products derived 4624503465SHiten Pandya.\" from this software without specific prior written permission. 4724503465SHiten Pandya.\" 4824503465SHiten Pandya.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 4924503465SHiten Pandya.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 5024503465SHiten Pandya.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 5124503465SHiten Pandya.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 5224503465SHiten Pandya.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 5324503465SHiten Pandya.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 5424503465SHiten Pandya.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 5524503465SHiten Pandya.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 5624503465SHiten Pandya.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 5724503465SHiten Pandya.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 5824503465SHiten Pandya.\" POSSIBILITY OF SUCH DAMAGE. 5924503465SHiten Pandya.\" 6024503465SHiten Pandya.\" $FreeBSD$ 6124503465SHiten Pandya.\" $NetBSD: bus_dma.9,v 1.25 2002/10/14 13:43:16 wiz Exp $ 6224503465SHiten Pandya.\" 6324503465SHiten Pandya.Dd May 28, 2003 6424503465SHiten Pandya.Dt BUS_DMA 9 6524503465SHiten Pandya.Os 6624503465SHiten Pandya.Sh NAME 6724503465SHiten Pandya.Nm bus_dma , 6824503465SHiten Pandya.Nm bus_dma_tag_create , 6924503465SHiten Pandya.Nm bus_dma_tag_destroy , 7024503465SHiten Pandya.Nm bus_dmamap_create , 7124503465SHiten Pandya.Nm bus_dmamap_destroy , 7224503465SHiten Pandya.Nm bus_dmamap_load , 7324503465SHiten Pandya.Nm bus_dmamap_load_mbuf , 74824f4edfSScott Long.Nm bus_dmamap_load_mbuf_sg , 7524503465SHiten Pandya.Nm bus_dmamap_load_uio , 7624503465SHiten Pandya.Nm bus_dmamap_unload , 7724503465SHiten Pandya.Nm bus_dmamap_sync , 7824503465SHiten Pandya.Nm bus_dmamem_alloc , 79a1bd700aSHiten Pandya.Nm bus_dmamem_free 8024503465SHiten Pandya.Nd Bus and Machine Independent DMA Mapping Interface 8124503465SHiten Pandya.Sh SYNOPSIS 8224503465SHiten Pandya.In machine/bus.h 8324503465SHiten Pandya.Ft int 8424503465SHiten Pandya.Fn bus_dma_tag_create "bus_dma_tag_t parent" "bus_size_t alignment" \ 8524503465SHiten Pandya"bus_size_t boundary" "bus_addr_t lowaddr" "bus_addr_t highaddr" \ 8624503465SHiten Pandya"bus_dma_filter_t *filtfunc" "void *filtfuncarg" "bus_size_t maxsize" \ 870e5f9b7dSScott Long"int nsegments" "bus_size_t maxsegsz" "int flags" "bus_dma_lock_t *lockfunc" \ 880e5f9b7dSScott Long"void *lockfuncarg" "bus_dma_tag_t *dmat" 8924503465SHiten Pandya.Ft int 9024503465SHiten Pandya.Fn bus_dma_tag_destroy "bus_dma_tag_t dmat" 9124503465SHiten Pandya.Ft int 9224503465SHiten Pandya.Fn bus_dmamap_create "bus_dma_tag_t dmat" "int flags" "bus_dmamap_t *mapp" 9324503465SHiten Pandya.Ft int 9424503465SHiten Pandya.Fn bus_dmamap_destroy "bus_dma_tag_t dmat" "bus_dmamap_t map" 9524503465SHiten Pandya.Ft int 9624503465SHiten Pandya.Fn bus_dmamap_load "bus_dma_tag_t dmat" "bus_dmamap_t map" "void *buf" \ 9724503465SHiten Pandya"bus_size_t buflen" "bus_dmamap_callback_t *callback" "void *callback_arg" \ 9824503465SHiten Pandya"int flags" 9924503465SHiten Pandya.Ft int 10024503465SHiten Pandya.Fn bus_dmamap_load_mbuf "bus_dma_tag_t dmat" "bus_dmamap_t map" \ 10124503465SHiten Pandya"struct mbuf *mbuf" "bus_dmamap_callback2_t *callback" "void *callback_arg" \ 10224503465SHiten Pandya"int flags" 10324503465SHiten Pandya.Ft int 104824f4edfSScott Long.Fn bus_dmamap_load_mbuf_sg "bus_dma_tag_t dmat" "bus_dmamap_t map" \ 105824f4edfSScott Long"struct mbuf *mbuf" "bus_dma_segment_t *segs" "int *nsegs" "int flags" 106824f4edfSScott Long.Ft int 10724503465SHiten Pandya.Fn bus_dmamap_load_uio "bus_dma_tag_t dmat" "bus_dmamap_t map" \ 10824503465SHiten Pandya"struct uio *uio" "bus_dmamap_callback2_t *callback" "void *callback_arg" \ 10924503465SHiten Pandya"int flags" 11024503465SHiten Pandya.Ft void 11124503465SHiten Pandya.Fn bus_dmamap_unload "bus_dma_tag_t dmat" "bus_dmamap_t map" 11224503465SHiten Pandya.Ft void 11324503465SHiten Pandya.Fn bus_dmamap_sync "bus_dma_tag_t dmat" "bus_dmamap_t map" \ 11424503465SHiten Pandya"op" 115cbfef69cSWarner Losh.Ft int 116cbfef69cSWarner Losh.Fn bus_dmamem_alloc "bus_dma_tag_t dmat" "void **vaddr" \ 117cbfef69cSWarner Losh"int flags" "bus_dmamap_t *mapp" 11824503465SHiten Pandya.Ft void 11924503465SHiten Pandya.Fn bus_dmamem_free "bus_dma_tag_t dmat" "void *vaddr" \ 12024503465SHiten Pandya"bus_dmamap_t map" 12124503465SHiten Pandya.Sh DESCRIPTION 12224503465SHiten PandyaDirect Memory Access (DMA) is a method of transferring data 12324503465SHiten Pandyawithout involving the CPU, thus providing higher performance. 12424503465SHiten PandyaA DMA transaction can be achieved between device to memory, 12524503465SHiten Pandyadevice to device, or memory to memory. 12624503465SHiten Pandya.Pp 12724503465SHiten PandyaThe 12824503465SHiten Pandya.Nm 12924503465SHiten PandyaAPI is a bus, device, and machine-independent (MI) interface to 13024503465SHiten PandyaDMA mechanisms. 13124503465SHiten PandyaIt provides the client with flexibility and simplicity by 13224503465SHiten Pandyaabstracting machine dependent issues like setting up 13324503465SHiten PandyaDMA mappings, handling cache issues, bus specific features 13424503465SHiten Pandyaand limitations. 13524503465SHiten Pandya.Sh STRUCTURES AND TYPES 13624503465SHiten Pandya.Bl -tag -width compact 13724503465SHiten Pandya.It Vt bus_dma_tag_t 13824503465SHiten PandyaA machine-dependent (MD) opaque type that describes the 13924503465SHiten Pandyacharacteristics of DMA transactions. 14024503465SHiten PandyaDMA tags are organized into a hierarchy, with each child 14124503465SHiten Pandyatag inheriting the restrictions of its parent. 14224503465SHiten PandyaThis allows all devices along the path of DMA transactions 14324503465SHiten Pandyato contribute to the constraints of those transactions. 14424503465SHiten Pandya.It Vt bus_dma_filter_t 14524503465SHiten PandyaClient specified address filter having the format: 14624503465SHiten Pandya.Bl -tag -width compact 14724503465SHiten Pandya.It Ft int 14824503465SHiten Pandya.Fn "client_filter" "void *filtarg" "bus_addr_t testaddr" 14924503465SHiten Pandya.El 15024503465SHiten Pandya.sp 15124503465SHiten PandyaAddress filters can be specified during tag creation to allow 15259892d33SRuslan Ermilovfor devices whose DMA address restrictions cannot be specified 15324503465SHiten Pandyaby a single window. 15424503465SHiten PandyaThe 15524503465SHiten Pandya.Fa filtarg 15624503465SHiten Pandyais client specified during tag creation to be passed to all 15724503465SHiten Pandyainvocations of the callback. 15824503465SHiten PandyaThe 15924503465SHiten Pandya.Fa testaddr 16024503465SHiten Pandyaargument contains a potential starting address of a DMA mapping. 16124503465SHiten PandyaThe filter function operates on the set of addresses from 16224503465SHiten Pandya.Fa testaddr 16324503465SHiten Pandyato 16424503465SHiten Pandya.Ql trunc_page(testaddr) + PAGE_SIZE - 1 , 16524503465SHiten Pandyainclusive. 16624503465SHiten PandyaThe filter function should return zero for any mapping in this range 16724503465SHiten Pandyathat can be accommodated by the device and non-zero otherwise. 16824503465SHiten Pandya.It Vt bus_dma_segment_t 16924503465SHiten PandyaA machine-dependent type that describes individual 17024503465SHiten PandyaDMA segments. 17124503465SHiten Pandya.Bd -literal 17224503465SHiten Pandya bus_addr_t ds_addr; 17324503465SHiten Pandya bus_size_t ds_len; 17424503465SHiten Pandya.Ed 17524503465SHiten Pandya.sp 17624503465SHiten PandyaThe 17724503465SHiten Pandya.Fa ds_addr 17824503465SHiten Pandyafield contains the device visible address of the DMA segment, and 17924503465SHiten Pandya.Fa ds_len 18024503465SHiten Pandyacontains the length of the DMA segment. 18124503465SHiten PandyaAlthough the DMA segments returned by a mapping call will adhere to 18224503465SHiten Pandyaall restrictions necessary for a successful DMA operation, some conversion 1835203edcdSRuslan Ermilov(e.g.\& a conversion from host byte order to the device's byte order) is 18424503465SHiten Pandyaalmost always required when presenting segment information to the device. 18524503465SHiten Pandya.It Vt bus_dmamap_t 18624503465SHiten PandyaA machine-dependent opaque type describing an individual mapping. 18724503465SHiten PandyaMultiple DMA maps can be associated with one DMA tag. 18824503465SHiten Pandya.It Vt bus_dmamap_callback_t 18924503465SHiten PandyaClient specified callback for receiving mapping information resulting from 19024503465SHiten Pandyathe load of a 19124503465SHiten Pandya.Vt bus_dmamap_t 19224503465SHiten Pandyavia 19324503465SHiten Pandya.Fn bus_dmamap_load . 19424503465SHiten PandyaCallbacks are of the format: 19524503465SHiten Pandya.Bl -tag -width compact 19624503465SHiten Pandya.It Ft void 19724503465SHiten Pandya.Fn "client_callback" "void *callback_arg" "bus_dma_segment_t *segs" \ 19824503465SHiten Pandya"int nseg" "int error" 19924503465SHiten Pandya.El 20024503465SHiten Pandya.sp 20124503465SHiten PandyaThe 20224503465SHiten Pandya.Fa callback_arg 20324503465SHiten Pandyais the callback argument passed to dmamap load functions. 20424503465SHiten PandyaThe 20524503465SHiten Pandya.Fa segs 20624503465SHiten Pandyaand 20724503465SHiten Pandya.Fa nseg 20824503465SHiten Pandyaparameters describe an array of 20924503465SHiten Pandya.Vt bus_dma_segment_t 21024503465SHiten Pandyastructures that represent the mapping. 21124503465SHiten PandyaThis array is only valid within the scope of the callback function. 21224503465SHiten PandyaThe success or failure of the mapping is indicated by the 21324503465SHiten Pandya.Fa error 21424503465SHiten Pandyaparameter. 21524503465SHiten PandyaMore information on the use of callbacks can be found in the 21624503465SHiten Pandyadescription of the individual dmamap load functions. 21724503465SHiten Pandya.It Vt bus_dmamap_callback2_t 21824503465SHiten PandyaClient specified callback for receiving mapping information resulting from 21924503465SHiten Pandyathe load of a 22024503465SHiten Pandya.Vt bus_dmamap_t 22124503465SHiten Pandyavia 22224503465SHiten Pandya.Fn bus_dmamap_load_uio 22324503465SHiten Pandyaor 22424503465SHiten Pandya.Fn bus_dmamap_load_mbuf . 22524503465SHiten Pandya.sp 22624503465SHiten PandyaCallback2s are of the format: 22724503465SHiten Pandya.Bl -tag -width compact 22824503465SHiten Pandya.It Ft void 22924503465SHiten Pandya.Fn "client_callback2" "void *callback_arg" "bus_dma_segment_t *segs" \ 23024503465SHiten Pandya"int nseg" "bus_size_t mapsize" "int error" 23124503465SHiten Pandya.El 23224503465SHiten Pandya.sp 23324503465SHiten PandyaCallback2's behavior is the same as 23424503465SHiten Pandya.Vt bus_dmamap_callback_t 23524503465SHiten Pandyawith the addition that the length of the data mapped is provided via 23624503465SHiten Pandya.Fa mapsize . 23724503465SHiten Pandya.It Vt bus_dmasync_op_t 23824503465SHiten PandyaMemory synchronization operation specifier. 23936a142c4SRuslan ErmilovBus DMA requires explicit synchronization of memory with its device 24024503465SHiten Pandyavisible mapping in order to guarantee memory coherency. 24124503465SHiten PandyaThe 24224503465SHiten Pandya.Vt bus_dmasync_op_t 24324503465SHiten Pandyaallows the type of DMA operation that will be or has been performed 24424503465SHiten Pandyato be communicated to the system so that the correct coherency measures 24524503465SHiten Pandyaare taken. 246e8c9966dSJohn-Mark GurneyAll operations specified below are performed from the CPU's 247e8c9966dSJohn-Mark Gurneypoint of view (for a complete description, see the 248e8c9966dSJohn-Mark Gurney.Fn bus_dmamap_sync 249e8c9966dSJohn-Mark Gurneydescription below): 25024503465SHiten Pandya.Bl -tag -width BUS_DMASYNC_POSTWRITE 25124503465SHiten Pandya.It Dv BUS_DMASYNC_PREREAD 25224503465SHiten PandyaPerform any synchronization required after an update of memory by the CPU 25324503465SHiten Pandyabut prior to DMA read operations. 25424503465SHiten Pandya.It Dv BUS_DMASYNC_PREWRITE 25524503465SHiten PandyaPerform any synchronization required after an update of memory by the CPU 25624503465SHiten Pandyabut prior to DMA write operations. 257095ee947SMaxime Henrion.It Dv BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE 258095ee947SMaxime HenrionPerform any synchronization required prior to a combination of DMA read 259095ee947SMaxime Henrionand write operations. 26024503465SHiten Pandya.It Dv BUS_DMASYNC_POSTREAD 26124503465SHiten PandyaPerform any synchronization required after DMA read operations, but prior 26224503465SHiten Pandyato CPU access of the memory. 26324503465SHiten Pandya.It Dv BUS_DMASYNC_POSTWRITE 26424503465SHiten PandyaPerform any synchronization required after DMA write operations, but prior 26524503465SHiten Pandyato CPU access of the memory. 266095ee947SMaxime Henrion.It Dv BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE 267095ee947SMaxime HenrionPerform any synchronization required after a combination of DMA read 268095ee947SMaxime Henrionand write operations. 26924503465SHiten Pandya.El 2700e5f9b7dSScott Long.It Vt bus_dma_lock_t 271c7d3a65dSHiten PandyaClient specified lock/mutex manipulation method. 272c7d3a65dSHiten PandyaThis will be called from 2730e5f9b7dSScott Longwithin busdma whenever a client lock needs to be manipulated. 2744d855643SWarner LoshIn its current form, the function will be called immediately before 2754d855643SWarner Loshthe callback for a dma load operation that has been deferred with 2764d855643SWarner Losh.Dv BUS_DMA_LOCK 2774d855643SWarner Loshand immediately after with 2784d855643SWarner Losh.Dv BUS_DMA_UNLOCK . 2794d855643SWarner LoshIf the load operation does not need to be deferred, then it 2804d855643SWarner Loshwill not be called since the function loading the map should 2814d855643SWarner Loshbe holding the appropriate locks. 2820e5f9b7dSScott LongThis method is of the format: 2830e5f9b7dSScott Long.Bl -tag -width compact 2840e5f9b7dSScott Long.It Ft void 2850e5f9b7dSScott Long.Fn "lockfunc" "void *lockfunc_arg" "bus_dma_lock_op_t op" 28624503465SHiten Pandya.El 2870e5f9b7dSScott Long.sp 2880e5f9b7dSScott LongTwo 2890e5f9b7dSScott Long.Vt lockfunc 2900e5f9b7dSScott Longimplementations are provided for convenience. 2910e5f9b7dSScott Long.Fn busdma_lock_mutex 2920e5f9b7dSScott Longperforms standard mutex operations on the sleep mutex provided via the 2930e5f9b7dSScott Long.Fa lockfuncarg . 2940e5f9b7dSScott Longpassed into 2950e5f9b7dSScott Long.Fn bus_dma_tag_create . 2960e5f9b7dSScott Long.Fn dflt_lock 297c7d3a65dSHiten Pandyawill generate a system panic if it is called. 298c7d3a65dSHiten PandyaIt is substituted into the tag when 2990e5f9b7dSScott Long.Fa lockfunc 3000e5f9b7dSScott Longis passed as NULL to 3010e5f9b7dSScott Long.Fn bus_dma_tag_create . 3020e5f9b7dSScott Long.It Vt bus_dma_lock_op_t 3030e5f9b7dSScott LongOperations to be performed by the client-specified 3040e5f9b7dSScott Long.Fn lockfunc . 3050e5f9b7dSScott Long.Bl -tag -width BUS_DMA_UNLOCK 3060e5f9b7dSScott Long.It Dv BUS_DMA_LOCK 3072988974bSMike PritchardAcquires and/or locks the client locking primitive. 3080e5f9b7dSScott Long.It Dv BUS_DMA_UNLOCK 3090e5f9b7dSScott LongReleases and/or unlocks the client locking primitive. 3100e5f9b7dSScott Long.El 3110e5f9b7dSScott Long.El 3120e5f9b7dSScott Long.sp 31324503465SHiten Pandya.Sh FUNCTIONS 31424503465SHiten Pandya.Bl -tag -width compact 31524503465SHiten Pandya.It Fn bus_dma_tag_create "parent" "alignment" "boundary" "lowaddr" \ 31624503465SHiten Pandya"highaddr" "*filtfunc" "*filtfuncarg" "maxsize" "nsegments" "maxsegsz" \ 3179b5c4b66SScott Long"flags" "lockfunc" "lockfuncarg" "*dmat" 31824503465SHiten PandyaAllocates a device specific DMA tag, and initializes it according to 31924503465SHiten Pandyathe arguments provided: 32024503465SHiten Pandya.Bl -tag -width *filtfuncarg -compact 32124503465SHiten Pandya.It Fa parent 32224503465SHiten PandyaIndicates restrictions between the parent bridge, CPU memory, and the 32324503465SHiten Pandyadevice. 32424503465SHiten PandyaMay be NULL, if no DMA restrictions are to be inherited. 32524503465SHiten Pandya.It Fa alignment 32624503465SHiten PandyaAlignment constraint, in bytes, of any mappings created using this tag. 32724503465SHiten PandyaThe alignment must be a power of 2. 32824503465SHiten PandyaHardware that can DMA starting at any address would specify 32924503465SHiten Pandya.Em 1 33024503465SHiten Pandyafor byte alignment. 33124503465SHiten PandyaHardware requiring DMA transfers to start on a multiple of 4K 33224503465SHiten Pandyawould specify 33324503465SHiten Pandya.Em 4096. 33424503465SHiten Pandya.It Fa boundary 33524503465SHiten PandyaBoundary constraint, in bytes, of the target DMA memory region. 33624503465SHiten PandyaThe boundary indicates the set of addresses, all multiples of the 33724503465SHiten Pandyaboundary argument, that cannot be crossed by a single 33824503465SHiten Pandya.Vt bus_dma_segment_t . 3392d4071acSChristian BruefferThe boundary must be a power of 2 and must be no smaller than the 340ab0b83b5SScott Longmaximum segment size. 34124503465SHiten Pandya.Ql 0 34224503465SHiten Pandyaindicates that there are no boundary restrictions. 34324503465SHiten Pandya.It Fa lowaddr 34424503465SHiten Pandya.It Fa highaddr 34524503465SHiten PandyaBounds of the window of bus address space that 34624503465SHiten Pandya.Em cannot 34724503465SHiten Pandyabe directly accessed by the device. 3482d4071acSChristian BruefferThe window contains all addresses greater than lowaddr and 34924503465SHiten Pandyaless than or equal to highaddr. 35024503465SHiten PandyaFor example, a device incapable of DMA above 4GB, would specify 35124503465SHiten Pandyaa highaddr of 35224503465SHiten Pandya.Dv BUS_SPACE_MAXADDR 35324503465SHiten Pandyaand a lowaddr of 35424503465SHiten Pandya.Dv BUS_SPACE_MAXADDR_32BIT . 35524503465SHiten PandyaSimilarly a device that can only dma to addresses bellow 16MB would 35624503465SHiten Pandyaspecify a highaddr of 35724503465SHiten Pandya.Dv BUS_SPACE_MAXADDR 35824503465SHiten Pandyaand a lowaddr of 35924503465SHiten Pandya.Dv BUS_SPACE_MAXADDR_24BIT . 36024503465SHiten PandyaSome implementations requires that some region of device visible 36124503465SHiten Pandyaaddress space, overlapping available host memory, be outside the 36224503465SHiten Pandyawindow. 36324503465SHiten PandyaThis area of 36424503465SHiten Pandya.Ql safe memory 36524503465SHiten Pandyais used to bounce requests that would otherwise conflict with 36624503465SHiten Pandyathe exclusion window. 36724503465SHiten Pandya.It Fa filtfunc 36824503465SHiten PandyaOptional filter function (may be NULL) to be called for any attempt to 36924503465SHiten Pandyamap memory into the window described by 37024503465SHiten Pandya.Fa lowaddr 37124503465SHiten Pandyaand 37224503465SHiten Pandya.Fa highaddr. 37324503465SHiten PandyaA filter function is only required when the single window described 37424503465SHiten Pandyaby 37524503465SHiten Pandya.Fa lowaddr 37624503465SHiten Pandyaand 37724503465SHiten Pandya.Fa highaddr 37824503465SHiten Pandyacannot adequately describe the constraints of the device. 37924503465SHiten PandyaThe filter function will be called for every machine page 38024503465SHiten Pandyathat overlaps the exclusion window. 38124503465SHiten Pandya.It Fa filtfuncarg 38224503465SHiten PandyaArgument passed to all calls to the filter function for this tag. 38324503465SHiten PandyaMay be NULL. 38424503465SHiten Pandya.It Fa maxsize 38524503465SHiten PandyaMaximum size, in bytes, of the sum of all segment lengths in a given 38624503465SHiten PandyaDMA mapping associated with this tag. 38724503465SHiten Pandya.It Fa nsegments 38824503465SHiten PandyaNumber of discontinuities (scatter/gather segments) allowed 38924503465SHiten Pandyain a DMA mapped region. 39024503465SHiten PandyaIf there is no restriction, 39124503465SHiten Pandya.Dv BUS_SPACE_UNRESTRICTED 39224503465SHiten Pandyamay be specified. 393094dc7e3SJohn-Mark Gurney.It Fa maxsegsz 394094dc7e3SJohn-Mark GurneyMaximum size, in bytes, of a segment in any DMA mapped region associated 395094dc7e3SJohn-Mark Gurneywith 396094dc7e3SJohn-Mark Gurney.Fa dmat . 39724503465SHiten Pandya.It Fa flags 39824503465SHiten PandyaAre as follows: 39924503465SHiten Pandya.Bl -tag -width "BUS_DMA_ALLOCNOW" -compact 40024503465SHiten Pandya.It Dv BUS_DMA_ALLOCNOW 4010f3a0078SScott LongPre-allocate enough resources to handle at least one map load operation on 4020f3a0078SScott Longthis tag without blocking. 40324503465SHiten PandyaIf sufficient resources are not available, 40424503465SHiten Pandya.Er ENOMEM 40524503465SHiten Pandyais returned. 4060f3a0078SScott LongThis should not be used for tags that will not be directly associated with 4070f3a0078SScott Longa map. 40824503465SHiten Pandya.El 4099b5c4b66SScott Long.It Fa lockfunc 4109b5c4b66SScott LongOptional lock manipulation function (may be NULL) to be called when busdma 411c7d3a65dSHiten Pandyaneeds to manipulate a lock on behalf of the client. 412c7d3a65dSHiten PandyaIf NULL is specified, 4139b5c4b66SScott Long.Fn dflt_lock 4149b5c4b66SScott Longis used. 4159b5c4b66SScott Long.It Fa lockfuncarg 4169b5c4b66SScott LongOptional argument to be passed to the function specified by 4179b5c4b66SScott Long.Fa lockfunc . 41824503465SHiten Pandya.It Fa dmat 41924503465SHiten PandyaPointer to a bus_dma_tag_t where the resulting DMA tag will 42024503465SHiten Pandyabe stored. 42124503465SHiten Pandya.El 42224503465SHiten Pandya.Pp 42324503465SHiten PandyaReturns 42424503465SHiten Pandya.Er ENOMEM 42524503465SHiten Pandyaif sufficient memory is not available for tag creation 42624503465SHiten Pandyaor allocating mapping resources. 42724503465SHiten Pandya.It Fn bus_dma_tag_destroy "dmat" 42824503465SHiten PandyaDeallocate the DMA tag 42924503465SHiten Pandya.Fa dmat 43024503465SHiten Pandyathat was created by 43124503465SHiten Pandya.Fn bus_dma_tag_create . 43224503465SHiten Pandya.Pp 43324503465SHiten PandyaReturns 43424503465SHiten Pandya.Er EBUSY 43524503465SHiten Pandyaif any DMA maps remain associated with 43624503465SHiten Pandya.Fa dmat 43724503465SHiten Pandyaor 43824503465SHiten Pandya.Ql 0 43924503465SHiten Pandyaon success. 44024503465SHiten Pandya.It Fn bus_dmamap_create "dmat" "flags" "*mapp" 44124503465SHiten PandyaAllocates and initializes a DMA map. 44224503465SHiten PandyaArguments are as follows: 44324503465SHiten Pandya.Bl -tag -width nsegments -compact 44424503465SHiten Pandya.It Fa dmat 44524503465SHiten PandyaDMA tag. 44624503465SHiten Pandya.It Fa flags 44724503465SHiten PandyaThe value of this argument is currently undefined and should be 44824503465SHiten Pandyaspecified as 44924503465SHiten Pandya.Ql 0 . 45024503465SHiten Pandya.It Fa mapp 45124503465SHiten PandyaPointer to a 45224503465SHiten Pandya.Vt bus_dmamap_t 45324503465SHiten Pandyawhere the resulting DMA map will be stored. 45424503465SHiten Pandya.El 45524503465SHiten Pandya.Pp 45624503465SHiten PandyaReturns 45724503465SHiten Pandya.Er ENOMEM 45824503465SHiten Pandyaif sufficient memory is not available for creating the 45924503465SHiten Pandyamap or allocating mapping resources. 46024503465SHiten Pandya.It Fn bus_dmamap_destroy "dmat" "map" 46124503465SHiten PandyaFrees all resources associated with a given DMA map. 46224503465SHiten PandyaArguments are as follows: 46324503465SHiten Pandya.Bl -tag -width dmat -compact 46424503465SHiten Pandya.It Fa dmat 46524503465SHiten PandyaDMA tag used to allocate 46624503465SHiten Pandya.Fa map . 46724503465SHiten Pandya.It Fa map 46824503465SHiten PandyaThe DMA map to destroy. 46924503465SHiten Pandya.El 47024503465SHiten Pandya.Pp 47124503465SHiten PandyaReturns 47224503465SHiten Pandya.Er EBUSY 47324503465SHiten Pandyaif a mapping is still active for 47424503465SHiten Pandya.Fa map . 47595929b66SWarner Losh.It Fn bus_dmamap_load "dmat" "map" "buf" "buflen" "*callback" \ 47695929b66SWarner Losh"callback_arg" "flags" 47724503465SHiten PandyaCreates a mapping in device visible address space of 47824503465SHiten Pandya.Fa buflen 47924503465SHiten Pandyabytes of 48024503465SHiten Pandya.Fa buf , 48124503465SHiten Pandyaassociated with the DMA map 48224503465SHiten Pandya.Fa map. 48324503465SHiten PandyaArguments are as follows: 48424503465SHiten Pandya.Bl -tag -width buflen -compact 48524503465SHiten Pandya.It Fa dmat 48624503465SHiten PandyaDMA tag used to allocate 48724503465SHiten Pandya.Fa map. 48824503465SHiten Pandya.It Fa map 48924503465SHiten PandyaA DMA map without a currently active mapping. 49024503465SHiten Pandya.It Fa buf 49124503465SHiten PandyaA kernel virtual address pointer to a contiguous (in KVA) buffer, to be 49224503465SHiten Pandyamapped into device visible address space. 49324503465SHiten Pandya.It Fa buflen 49424503465SHiten PandyaThe size of the buffer. 49524503465SHiten Pandya.It Fa callback Fa callback_arg 49624503465SHiten PandyaThe callback function, and its argument. 49724503465SHiten Pandya.It Fa flags 49824503465SHiten PandyaThe value of this argument is currently undefined, and should be 49924503465SHiten Pandyaspecified as 50024503465SHiten Pandya.Ql 0 . 50124503465SHiten Pandya.El 50224503465SHiten Pandya.Pp 50324503465SHiten PandyaReturn values to the caller are as follows: 50424503465SHiten Pandya.Bl -tag -width EINPROGRESS -compact 50524503465SHiten Pandya.It 0 50624503465SHiten PandyaThe callback has been called and completed. 50724503465SHiten PandyaThe status of the mapping has been delivered to the callback. 50824503465SHiten Pandya.It Er EINPROGRESS 50924503465SHiten PandyaThe mapping has been deferred for lack of resources. 51024503465SHiten PandyaThe callback will be called as soon as resources are available. 51124503465SHiten PandyaCallbacks are serviced in FIFO order. 5120f3a0078SScott LongTo ensure that ordering is guaranteed, all subsequent load requests will also 5130f3a0078SScott Longbe deferred until all callbacks have been processed. 51424503465SHiten Pandya.It Er EINVAL 51524503465SHiten PandyaThe load request was invalid. 51624503465SHiten PandyaThe callback has not, and will not be called. 51724503465SHiten PandyaThis error value may indicate that 51824503465SHiten Pandya.Fa dmat , 51924503465SHiten Pandya.Fa map , 52024503465SHiten Pandya.Fa buf , 52124503465SHiten Pandyaor 52224503465SHiten Pandya.Fa callback 52324503465SHiten Pandyawere invalid, or 52424503465SHiten Pandya.Fa buslen 52524503465SHiten Pandyawas larger than the 52624503465SHiten Pandya.Fa maxsize 52724503465SHiten Pandyaargument used to create the dma tag 52824503465SHiten Pandya.Fa dmat . 52924503465SHiten Pandya.El 53024503465SHiten Pandya.Pp 53124503465SHiten PandyaWhen the callback is called, it is presented with an error value 53224503465SHiten Pandyaindicating the disposition of the mapping. 53324503465SHiten PandyaError may be one of the following: 53424503465SHiten Pandya.Bl -tag -width EINPROGRESS -compact 53524503465SHiten Pandya.It 0 53624503465SHiten PandyaThe mapping was successful and the 53724503465SHiten Pandya.Fa dm_segs 53824503465SHiten Pandyacallback argument contains an array of 53924503465SHiten Pandya.Vt bus_dma_segment_t 54024503465SHiten Pandyaelements describing the mapping. 54124503465SHiten PandyaThis array is only valid during the scope of the callback function. 54224503465SHiten Pandya.It Er EFBIG 54324503465SHiten PandyaA mapping could not be achieved within the segment constraints provided 54424503465SHiten Pandyain the tag even though the requested allocation size was less than maxsize. 54524503465SHiten Pandya.El 54624503465SHiten Pandya.It Fn bus_dmamap_load_mbuf "dmat" "map" "mbuf" "callback2" "callback_arg" \ 54724503465SHiten Pandya"flags" 54824503465SHiten PandyaThis is a variation of 54924503465SHiten Pandya.Fn bus_dmamap_load 55024503465SHiten Pandyawhich maps mbuf chains 55124503465SHiten Pandyafor DMA transfers. 55224503465SHiten PandyaA 55324503465SHiten Pandya.Vt bus_size_t 55424503465SHiten Pandyaargument is also passed to the callback routine, which 55524503465SHiten Pandyacontains the mbuf chain's packet header length. 55624503465SHiten Pandya.Pp 55724503465SHiten PandyaMbuf chains are assumed to be in kernel virtual address space. 55824503465SHiten Pandya.Pp 55924503465SHiten PandyaReturns 56024503465SHiten Pandya.Er EINVAL 56124503465SHiten Pandyaif the size of the mbuf chain exceeds the maximum limit of the 56224503465SHiten PandyaDMA tag. 563824f4edfSScott Long.It Fn bus_dmamap_load_mbuf_sg "dmat" "map" "mbuf" "segs" "nsegs" "flags" 564824f4edfSScott LongThis is just like 565824f4edfSScott Long.Fn bus_dmamap_load_mbuf 566824f4edfSScott Longexcept that it returns immediately without calling a callback function. It is 567824f4edfSScott Longprovided for efficiency. 568824f4edfSScott LongThe scatter/gather segment array 569824f4edfSScott Long.Va segs 570824f4edfSScott Longis provided by the caller and filled in directly by the function. 571824f4edfSScott LongThe 572824f4edfSScott Long.Va nsegs 573824f4edfSScott Longargument is returned with the number of segments filled in. 574824f4edfSScott LongReturns the same errors as 575824f4edfSScott Long.Fn bus_dmamap_load_mbuf . 57624503465SHiten Pandya.It Fn bus_dmamap_load_uio "dmat" "map" "uio" "callback2" "callback_arg" "flags" 57724503465SHiten PandyaThis is a variation of 57824503465SHiten Pandya.Fn bus_dmamap_load 57924503465SHiten Pandyawhich maps buffers pointed to by 58024503465SHiten Pandya.Fa uio 58124503465SHiten Pandyafor DMA transfers. 58224503465SHiten PandyaA 58324503465SHiten Pandya.Vt bus_size_t 58424503465SHiten Pandyaargument is also passed to the callback routine, which contains the size of 58524503465SHiten Pandya.Fa uio , 58624503465SHiten Pandyai.e. 58724503465SHiten Pandya.Fa uio->uio_resid . 58824503465SHiten Pandya.Pp 58924503465SHiten PandyaIf 59024503465SHiten Pandya.Fa uio->uio_segflg 59124503465SHiten Pandyais 59224503465SHiten Pandya.Dv UIO_USERSPACE , 59324503465SHiten Pandyathen it is assumed that the buffer, 59424503465SHiten Pandya.Fa uio 59524503465SHiten Pandyais in 59624503465SHiten Pandya.Fa "uio->uio_td->td_proc" Ns 's 59724503465SHiten Pandyaaddress space. 59824503465SHiten PandyaUser space memory must be in-core and wired prior to attempting a map 59924503465SHiten Pandyaload operation. 600490ec740SWarner LoshPages may be locked using 601490ec740SWarner Losh.Xr vslock 9 . 60224503465SHiten Pandya.It Fn bus_dmamap_unload "dmat" "map" 60324503465SHiten PandyaUnloads a DMA map. 60424503465SHiten PandyaArguments are as follows: 60524503465SHiten Pandya.Bl -tag -width dmam -compact 60624503465SHiten Pandya.It Fa dmat 60724503465SHiten PandyaDMA tag used to allocate 60824503465SHiten Pandya.Fa map . 60924503465SHiten Pandya.It Fa map 61024503465SHiten PandyaThe DMA map that is to be unloaded. 61124503465SHiten Pandya.El 61224503465SHiten Pandya.Pp 61324503465SHiten Pandya.Fn bus_dmamap_unload 61424503465SHiten Pandyawill not perform any implicit synchronization of DMA buffers. 61524503465SHiten PandyaThis must be done explicitly by a call to 61624503465SHiten Pandya.Fn bus_dmamap_sync 61724503465SHiten Pandyaprior to unloading the map. 61824503465SHiten Pandya.It Fn bus_dmamap_sync "dmat" "map" "op" 61924503465SHiten PandyaPerforms synchronization of a device visible mapping with the CPU visible 62024503465SHiten Pandyamemory referenced by that mapping. 62124503465SHiten PandyaArguments are as follows: 62224503465SHiten Pandya.Bl -tag -width dmat -compact 62324503465SHiten Pandya.It Fa dmat 62424503465SHiten PandyaDMA tag used to allocate 62524503465SHiten Pandya.Fa map . 62624503465SHiten Pandya.It Fa map 62724503465SHiten PandyaThe DMA mapping to be synchronized. 62824503465SHiten Pandya.It Fa op 62924503465SHiten PandyaType of synchronization operation to perform. 63024503465SHiten PandyaSee the definition of 63124503465SHiten Pandya.Vt bus_dmasync_op_t 63224503465SHiten Pandyafor a description of the acceptable values for 63324503465SHiten Pandya.Fa op . 63424503465SHiten Pandya.El 63524503465SHiten Pandya.Pp 63624503465SHiten Pandya.Fn bus_dmamap_sync 63724503465SHiten Pandyais the method used to ensure that CPU and device DMA access to shared 63824503465SHiten Pandyamemory is coherent. 63924503465SHiten PandyaFor example, the CPU might be used to setup the contents of a buffer 64024503465SHiten Pandyathat is to be DMA'ed into a device. 64124503465SHiten PandyaTo ensure that the data are visible via the device's mapping of that 64224503465SHiten Pandyamemory, the buffer must be loaded and a dma sync operation of 64324503465SHiten Pandya.Dv BUS_DMASYNC_PREREAD 64424503465SHiten Pandyamust be performed. 64524503465SHiten PandyaAdditional sync operations must be performed after every CPU write 64624503465SHiten Pandyato this memory if additional DMA reads are to be performed. 64724503465SHiten PandyaConversely, for the DMA write case, the buffer must be loaded, 64824503465SHiten Pandyaand a dma sync operation of 64924503465SHiten Pandya.Dv BUS_DMASYNC_PREWRITE 65024503465SHiten Pandyamust be performed. 65124503465SHiten PandyaThe CPU will only be able to see the results of this DMA write 65224503465SHiten Pandyaonce the DMA has completed and a 65324503465SHiten Pandya.Dv BUS_DMASYNC_POSTWRITE 65424503465SHiten Pandyaoperation has been performed. 65524503465SHiten Pandya.Pp 65624503465SHiten PandyaIf DMA read and write operations are not preceded and followed by the 65724503465SHiten Pandyaappropriate synchronization operations, behavior is undefined. 65824503465SHiten Pandya.It Fn bus_dmamem_alloc "dmat" "**vaddr" "flags" "mapp" 65924503465SHiten PandyaAllocates memory that is mapped into KVA at the address returned 66024503465SHiten Pandyain 66124503465SHiten Pandya.Fa vaddr 66224503465SHiten Pandyathat is permanently loaded into the newly created 66324503465SHiten Pandya.Vt bus_dmamap_t 66424503465SHiten Pandyareturned via 66524503465SHiten Pandya.Fa mapp . 66624503465SHiten PandyaArguments are as follows: 66724503465SHiten Pandya.Bl -tag -width alignment -compact 66824503465SHiten Pandya.It Fa dmat 66924503465SHiten PandyaDMA tag describing the constraints of the DMA mapping. 67024503465SHiten Pandya.It Fa vaddr 67124503465SHiten PandyaPointer to a pointer that will hold the returned KVA mapping of 67224503465SHiten Pandyathe allocated region. 67324503465SHiten Pandya.It Fa flags 67424503465SHiten PandyaFlags are defined as follows: 67524503465SHiten Pandya.Bl -tag -width BUS_DMA_NOWAIT -compact 67624503465SHiten Pandya.It Dv BUS_DMA_WAITOK 67724503465SHiten PandyaThe routine can safely wait (sleep) for resources. 67824503465SHiten Pandya.It Dv BUS_DMA_NOWAIT 67924503465SHiten PandyaThe routine is not allowed to wait for resources. 68024503465SHiten PandyaIf resources are not available, 68124503465SHiten Pandya.Dv ENOMEM 68224503465SHiten Pandyais returned. 68324503465SHiten Pandya.It Dv BUS_DMA_COHERENT 68424503465SHiten PandyaAttempt to map this memory such that cache sync operations are 68524503465SHiten Pandyaas cheap as possible. 68624503465SHiten PandyaThis flag is typically set on memory that will be accessed by both 68724503465SHiten Pandyaa CPU and a DMA engine, frequently. 68824503465SHiten PandyaUse of this flag does not remove the requirement of using 68924503465SHiten Pandyabus_dmamap_sync, but it may reduce the cost of performing 69024503465SHiten Pandyathese operations. 69182d227dcSMaxime Henrion.It Dv BUS_DMA_ZERO 69282d227dcSMaxime HenrionCauses the allocated memory to be set to all zeros. 69324503465SHiten Pandya.El 69424503465SHiten Pandya.It Fa mapp 69524503465SHiten PandyaPointer to storage for the returned DMA map. 69624503465SHiten Pandya.El 69724503465SHiten Pandya.Pp 69824503465SHiten PandyaThe size of memory to be allocated is 69924503465SHiten Pandya.Fa maxsize 70024503465SHiten Pandyaas specified in 70124503465SHiten Pandya.Fa dmat . 70224503465SHiten Pandya.Pp 70324503465SHiten PandyaThe current implementation of 70424503465SHiten Pandya.Fn bus_dmamem_alloc 70524503465SHiten Pandyawill allocate all requests as a single segment. 70624503465SHiten Pandya.Pp 70724503465SHiten PandyaAlthough no explicit loading is required to access the memory 70824503465SHiten Pandyareferenced by the returned map, the synchronization requirements 70924503465SHiten Pandyaas described in the 71024503465SHiten Pandya.Fn bus_dmamap_sync 71124503465SHiten Pandyasection still apply. 71224503465SHiten Pandya.Pp 71324503465SHiten PandyaReturns 71424503465SHiten Pandya.Er ENOMEM 71524503465SHiten Pandyaif sufficient memory is not available for completing 71624503465SHiten Pandyathe operation. 71724503465SHiten Pandya.It Fn bus_dmamem_free "dmat" "*vaddr" "map" 71824503465SHiten PandyaFrees memory previously allocated by 71924503465SHiten Pandya.Fn bus_dmamem_alloc . 72024503465SHiten PandyaAny mappings 72124503465SHiten Pandyawill be invalidated. 72224503465SHiten PandyaArguments are as follows: 72324503465SHiten Pandya.Bl -tag -width vaddr -compact 72424503465SHiten Pandya.It Fa dmat 72524503465SHiten PandyaDMA tag. 72624503465SHiten Pandya.It Fa vaddr 72724503465SHiten PandyaKernel virtual address of the memory. 72824503465SHiten Pandya.It Fa map 72924503465SHiten PandyaDMA map to be invalidated. 73024503465SHiten Pandya.El 73124503465SHiten Pandya.El 73224503465SHiten Pandya.Sh RETURN VALUES 73324503465SHiten PandyaBehavior is undefined if invalid arguments are passed to 73424503465SHiten Pandyaany of the above functions. 73524503465SHiten PandyaIf sufficient resources cannot be allocated for a given 73624503465SHiten Pandyatransaction, 73724503465SHiten Pandya.Er ENOMEM 73824503465SHiten Pandyais returned. 73924503465SHiten PandyaAll 74024503465SHiten Pandyaroutines that are not of type, 74124503465SHiten Pandya.Vt void , 74224503465SHiten Pandyawill return 0 on success or an error 74324503465SHiten Pandyacode, as discussed above. 74424503465SHiten Pandya.Pp 74524503465SHiten PandyaAll 74624503465SHiten Pandya.Vt void 74724503465SHiten Pandyaroutines will succeed if provided with valid arguments. 74824503465SHiten Pandya.Sh SEE ALSO 74924503465SHiten Pandya.Xr devclass 9 , 75024503465SHiten Pandya.Xr device 9 , 75124503465SHiten Pandya.Xr driver 9 , 752490ec740SWarner Losh.Xr rman 9 , 753490ec740SWarner Losh.Xr vslock 9 75424503465SHiten Pandya.Pp 75524503465SHiten Pandya.Rs 75624503465SHiten Pandya.%A "Jason R. Thorpe" 75724503465SHiten Pandya.%T "A Machine-Independent DMA Framework for NetBSD" 75824503465SHiten Pandya.%J "Proceedings of the Summer 1998 USENIX Technical Conference" 75924503465SHiten Pandya.%Q "USENIX Association" 76024503465SHiten Pandya.%D "June 1998" 76124503465SHiten Pandya.Re 76224503465SHiten Pandya.Sh HISTORY 76324503465SHiten PandyaThe 76424503465SHiten Pandya.Nm 76524503465SHiten Pandyainterface first appeared in 76624503465SHiten Pandya.Nx 1.3 . 76724503465SHiten Pandya.Pp 76824503465SHiten PandyaThe 76924503465SHiten Pandya.Nm 77024503465SHiten PandyaAPI was adopted from 77124503465SHiten Pandya.Nx 77224503465SHiten Pandyafor use in the CAM SCSI subsystem. 77324503465SHiten PandyaThe alterations to the original API were aimed to remove the need for 77424503465SHiten Pandyaa 77524503465SHiten Pandya.Vt bus_dma_segment_t 77624503465SHiten Pandyaarray stored in each 77724503465SHiten Pandya.Vt bus_dmamap_t 77824503465SHiten Pandyawhile allowing callers to queue up on scarce resources. 77924503465SHiten Pandya.Sh AUTHORS 78024503465SHiten PandyaThe 78124503465SHiten Pandya.Nm 782b9b855ddSMaxime Henrioninterface was designed and implemented by 783b9b855ddSMaxime Henrion.An Jason R. Thorpe 784b9b855ddSMaxime Henrionof the Numerical Aerospace Simulation Facility, NASA Ames Research Center. 78524503465SHiten PandyaAdditional input on the 78624503465SHiten Pandya.Nm 787b9b855ddSMaxime Henriondesign was provided by 788b9b855ddSMaxime Henrion.An -nosplit 789b9b855ddSMaxime Henrion.An Chris Demetriou , 790b9b855ddSMaxime Henrion.An Charles Hannum , 791b9b855ddSMaxime Henrion.An Ross Harvey , 792b9b855ddSMaxime Henrion.An Matthew Jacob , 793b9b855ddSMaxime Henrion.An Jonathan Stone , 794b9b855ddSMaxime Henrionand 795b9b855ddSMaxime Henrion.An Matt Thomas . 79624503465SHiten Pandya.Pp 79724503465SHiten PandyaThe 79824503465SHiten Pandya.Nm 79924503465SHiten Pandyainterface in 80024503465SHiten Pandya.Fx 801b9b855ddSMaxime Henrionbenefits from the contributions of 802b9b855ddSMaxime Henrion.An Justin T. Gibbs , 803b9b855ddSMaxime Henrion.An Peter Wemm , 804b9b855ddSMaxime Henrion.An Doug Rabson , 805b9b855ddSMaxime Henrion.An Matthew N. Dodd , 806b9b855ddSMaxime Henrion.An Sam Leffler , 807b9b855ddSMaxime Henrion.An Maxime Henrion , 808b9b855ddSMaxime Henrion.An Jake Burkholder , 809b9b855ddSMaxime Henrion.An Takahashi Yoshihiro , 810b9b855ddSMaxime Henrion.An Scott Long 811b9b855ddSMaxime Henrionand many others. 81224503465SHiten Pandya.Pp 813b9b855ddSMaxime HenrionThis manual page was written by 814b9b855ddSMaxime Henrion.An Hiten M. Pandya 815b9b855ddSMaxime Henrionand 816b9b855ddSMaxime Henrion.An Justin T. Gibbs . 817