NdisFlushBuffer

Windows CE .NET

This function flushes the memory region described by a specified buffer descriptor from all processor caches.

VOID NdisFlushBuffer(
  PNDIS_BUFFER Buffer,
  BOOLEAN WriteToDevice
);

Parameters

Buffer
[in] Pointer to a buffer description mapping a buffer from which or into which data is transferred as a bus master DMA operation.
WriteToDevice
[in] Specifies TRUE if the NIC driver calls this function to flush a buffer before making a transfer from host memory to the NIC.

If the NIC driver specifies FALSE, it must ensure that the buffer begins and ends on a cache-line boundary.

Return Values

None.

Remarks

Drivers of busmaster DMA NICs call this function to maintain data integrity in shared memory. Flushing the buffer ensures coherency between the host memory cache and processor physical memory before a DMA transfer to or from the network interface card.

The driver flushes such a buffer when data that it shares with its NIC might be cached. For any transfer between host memory and a bus master DMA NIC, the miniport must flush the buffer before the transfer starts. Such a driver also must ensure that host memory is not accessed until the transfer completes.

NdisFlushBuffer is an expensive operation on Windows CE, because it flushes all data caches, not just the one for the affected page. For better performance and resource utilization, use non-cached memory instead. The following list shows two alternative techniques.

  • Use VirtualAlloc and VirtualCopy with PAGE_NOCACHE
  • Use NdisMAllocateSharedMemory with Cached=FALSE

Requirements

OS Versions: Windows CE .NET 4.0 and later.
Header: Ndis.h.

See Also

MiniportHandleInterrupt | NdisMAllocateSharedMemory | NdisMUpdateSharedMemory | VirtualAlloc | VirtualCopy


 Last updated on Tuesday, May 18, 2004

© 1992-2003 Microsoft Corporation. All rights reserved.

Show: