[Contents] [Index] [Help] [Retrace] [Browse <] [Browse >]


   NAME
	CacheClearE - Cache clearing with extended control (V37)

   SYNOPSIS
	CacheClearE(address,length,caches)
	            a0      d0     d1

	void CacheClearE(APTR,ULONG,ULONG);

   FUNCTION
	Flush out the contents of the CPU instruction and/or data caches.
	If dirty data cache lines are present, push them to memory first.

	Motorola CPUs have separate instruction and data caches.  A data
	write does not update the instruction cache.  If an instruction is
	written to memory or modified, the old instruction may still exist
	in the cache.  Before attempting to execute the code, a flush of
	the instruction cache is required.

	For most systems, the data cache is not updated by Direct Memory
	Access (DMA), or if some external factor changes shared memory.

	Caches must be cleared after *any* operation that could cause
	invalid or stale data.  The most common cases are DMA and modifying
	instructions using the processor.

	Some examples:
			Self modifying code
			Building Jump tables
			Run-time code patches
			Relocating code for use at different addresses.
			Loading code from disk

   INPUTS
	address - Address to start the operation.  This may be rounded
		  due to hardware granularity.
	length	- Length of area to be cleared, or $FFFFFFFF to indicate all
		  addresses should be cleared.
	caches  - Bit flags to indicate what caches to affect.  The current
		  supported flags are:
			CACRF_ClearI	;Clear instruction cache
			CACRF_ClearD	;Clear data cache
		  All other bits are reserved for future definition.

   NOTES
	On systems with a copyback mode cache, any dirty data is pushed
	to memory as a part of this operation.

	Regardless of the length given, the function will determine the most
	efficient way to implement the operation.  For some cache systems,
	including the 68030, the overhead partially clearing a cache is often
	too great.  The entire cache may be cleared.

	For all current Amiga models, Chip memory is set with Instruction
	caching enabled, data caching disabled.  This prevents coherency
	conflicts with the blitter or other custom chip DMA.  Custom chip
	registers are marked as non-cacheable by the hardware.

	The system takes care of appropriately flushing the caches for normal
	operations.  The instruction cache is cleared by all calls that
	modify instructions, including LoadSeg(), MakeLibrary() and
	SetFunction().

   SEE ALSO
	exec/execbase.i, CacheControl(), CacheClearU()