BUS DMA sync
Maxime Henrion
mux at freebsd.org
Wed Sep 24 14:54:48 PDT 2003
Vincent Jardin wrote:
> Hi,
>
> I try to understand the purpose of the PRE sync (BUS_DMASYNC_PREREAD,
> BUS_DMASYNC_PREWRITE).
>
> I understand POST synchronization (BUS_DMASYNC_POSTREAD,
> BUS_DMASYNC_POSTWRITE) when a device to memory or a memory to device
> transfert needs to be synchronized. However, what does a synchronization
> before a transfert mean ?
With common architectures where FreeBSD runs on, only BUS_DMASYNC_PREWRITE
and BUS_DMASYNC_POSTREAD are actually meaningful and needed. It's good
style to use the two others where appriopriate though, because some more
exotic architecture might require it some day.
BUS_DMASYNC_PREWRITE is used to synchronize before there's a DMA tranfer
from host memory to a device. It's needed to ensure the device will
read up-to-date memory, because recent changes to memory might still sit
in a cache, so it actually flushes the memory cache.
BUS_DMASYNC_POSTREAD is used to synchronize after a DMA transfer from
the device to host memory. It's needed to ensure the software will get
up-to-date memory as written by the device, and not outdated memory sitting
in a cache, so it actually invalidates the memory cache.
Cheers,
Maxime
More information about the freebsd-hackers
mailing list