OEMCacheRangeFlush

This function is used by the kernel to flush or invalidate a certain range of the cache or translation look-aside buffer (TLB). OEMs need to implement this function in the OAL.

void OEMCacheRangeFlush(
  LPVOID pAddr,
  DWORD dwLength,
  DWORD dwFlags 
);

Parameters

  • pAddr
    [in] Starting virtual address where the cache operation is to be performed. The cache operation is specified by the value in the dwFlags parameter.
  • dwLength
    [in] Specifies the length, in bytes.
  • dwFlags
    [in] Specifies the operations to be performed. The following table shows the values you can specify for the dwFlags parameter.
    Value Description
    CACHE_SYNC_WRITEBACK Write back cached data.
    CACHE_SYNC_DISCARD Write back and discard cached data.
    CACHE_SYNC_INSTRUCTIONS Discard all cached instructions.
    CACHE_SYNC_FLUSH_I_TLB Flush the instruction TLB.
    CACHE_SYNC_FLUSH_D_TLB Flush the data TLB.
    CACHE_SYNC_FLUSH_TLB Flush both the instruction and data TLBs.
    CACHE_SYNC_L2_WRITEBACK Write back the L2 cache.
    CACHE_SYNC_L2_DISCARD Write back and discard the L2 cache.
    CACHE_SYNC_ALL Perform all of the above operations.

Return Values

None.

Remarks

This function replaces calls to FlushDCache, FlushICache, and TLBClear in Windows CE .NET 4.2 and later.

pAddr=NULL and dwLength=0 is a special case, which means all addresses. For example, the call OEMCacheRangeFlush(NULL, 0, CACHE_SYNC_FLUSH_TLB) will flush the data in the TLB. OEMCacheRangeFlush(NULL, 0, CACHE_SYNC_DISCARD) will write back and discard everything in the data cache. Operations can also be combined. For example, the call OEMCacheRangeFlush(NULL, 0, CACHE_SYNC_FLUSH_TLB | CACHE_SYNC_DISCARD | CACHE_SYNC_INSTRUCTIONS) writes back and discards the entire data cache, invalidates the entire instruction cache, and flushes the instruction and data TLBs.

If the memory management unit (MMU) supports probing, the special case where dwLength==PAGE_SIZE might be useful because it is commonly used when paging code.

In general, if you are implementing this function you should perform TLB flushes at the end of the function. For example, if dwFlags==(CACHE_SYNC_DISCARD|CACHE_SYNC_FLUSH_TLB), the cache discard operation is usually performed before the TLB flush.

Requirements

OS Versions: Windows CE .NET 4.2 and later.
Header: Kernel.h.
Link Library: Not applicable.

See Also

CacheRangeFlush | FlushDCache | FlushICache | TLBClear | Cache Flush Routines | OEMCacheRangeFlush Function Implementation

Last updated on Wednesday, April 13, 2005

© 2005 Microsoft Corporation. All rights reserved.