2.15. WD_DMASyncCpu()

Purpose

Synchronizes the cache of all CPUs with the DMA buffer, by flushing the data from the CPU caches.

[Note]
This function should be called before performing a DMA transfer (see Remarks below).
Prototype
DWORD WD_DMASyncCpu(
    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
  • An asynchronous DMA read or write operation accesses data in memory, not in the processor (CPU) cache, which resides between the CPU and the host's physical memory. Unless the CPU cache has been flushed, by calling WD_DMASyncCpu(), just before a read transfer, the data transferred into system memory by the DMA operation could be overwritten with stale data if the CPU cache is flushed later. Unless the CPU cache has been flushed by calling WD_DMASyncCpu() just before a write transfer, the data in the CPU cache might be more up-to-date than the copy in memory.

Example
WD_DMASyncCpu(hWD, &dma);