2.16. WD_DMASyncIo()

Purpose

Synchronizes the I/O caches with the DMA buffer, by flushing the data from the I/O caches and updating the CPU caches.

[Note]
This function should be called after performing a DMA transfer (see Remarks below).
Prototype
DWORD WD_DMASyncIo(
    HANDLE hWD,
    WD_DMA *pDMA);
Parameters
NameTypeInput/Output
hWDHANDLEInput
pDMAWD_DMA*Input
Description
NameDescription
hWDHandle to WinDriver's kernel-mode driver as received from WD_Open() [5.2]
pDMA Pointer to a DMA information structure, received from a previous call to WD_DMALock() [2.13]
Return Value

Returns WD_STATUS_SUCCESS (0) on success, or an appropriate error code otherwise [A].

Remarks
  • After a DMA transfer has been completed, the data can still be in the I/O cache, which resides between the host's physical memory and the bus-master DMA device, but not yet in the host's main memory. If the CPU accesses the memory, it might read the wrong data from the CPU cache. To ensure a consistent view of the memory for the CPU, you should call WD_DMASyncIo() after a DMA transfer in order to flush the data from the I/O cache and update the CPU cache with the new data. The function also flushes additional caches and buffers between the device and memory, such as caches associated with bus extenders or bridges.

Example
WD_DMASyncIo(hWD, &dma);