correct use of bus_dmamap_sync

John Baldwin jhb at freebsd.org
Tue Oct 25 13:09:20 PDT 2005


On Tuesday 25 October 2005 02:46 pm, Dinesh Nair wrote:
> On 10/26/05 01:27 John Baldwin said the following:
> > On Tuesday 25 October 2005 09:15 am, Dinesh Nair wrote:
> >>(must i malloc space for them before passing them into those functions,
> >> or will the call to bus_dmamem_alloc do it for me ?)
> >
> > bus_dmamem_alloc() will do it for you.
>
> thanx.
>
> > Probably not as the sync()'s don't really do anything with memory
> > allocated via bus_dmamem_alloc().  The operations are named from the
> > CPU's perspective,
>
> however, the man page at
> http://www.freebsd.org/cgi/man.cgi?query=bus_dmamap_sync&apropos=0&sektion=
>0&manpath=FreeBSD+5.4-stable&format=html says,
>
> "Although no explicit loading is required to access the memory referenced
> by the returned map, the synchronization requirements as described in the
> bus_dmamap_sync() section still apply."

Yes, and on some archs the sync() operations do have memory barriers in place, 
but there isn't any bounce buffering with bus_dmamem_alloc() memory.

> also, is bus_dmamap_load() required, since the same man page section above
> says it isnt ?

Well, you need it to get the physical address to pass to your device for it to 
do DMA against.

> have things changed between freebsd 4.x (which i'm using) and freebsd 5.x ?

I don't think so as far as the interface.

> > thus when you send data to your device, that is a WRITE operation (even
> > though your device is doing a DMA to read data), and when you get data
> > back from your device, that is a READ operation (even though your device
> > is doing a DMA to write the data into the buffer).
>
> thanx, the verbiage on the man page is slightly confusing with it's use of
> CPU, giving the opposite impression.

Yes, I know. :)

-- 
John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org


More information about the freebsd-hackers mailing list