2 Copyright © 1995-2008, The AROS Development Team. All rights reserved.
5 Desc: CacheClearE() - Clear the caches with extended control.
9 #include <exec/types.h>
10 #include <exec/execbase.h>
11 #include <aros/libcall.h>
13 /*****************************************************************************
16 #include <proto/exec.h>
18 AROS_LH3(void, CacheClearE
,
21 AROS_LHA(APTR
, address
, A0
),
22 AROS_LHA(ULONG
, length
, D0
),
23 AROS_LHA(ULONG
, caches
, D1
),
26 struct ExecBase
*, SysBase
, 107, Exec
)
29 Flush the contents of the CPU instruction or data caches. If some
30 of the cache contains dirty data, push it to memory first.
32 For most systems DMA will not effect processor caches. If *any*
33 external (non-processor) event changes system memory, you MUST
34 clear the cache. For example:
37 Code relocation to run at a different address
39 Loading code from disk
42 address - Address to start the operation. This address may be
43 rounded DOWN due to hardware granularity.
44 length - Length of the memory to flush. This will be rounded
45 up, of $FFFFFFFF to indicate that all addresses
47 caches - Bit flags to indicate which caches should be cleared
49 CACRF_ClearI - Clear the instruction cache
50 CACRF_ClearD - Clear the data cache
52 All other bits are reserved.
55 The caches will be flushed.
58 It is possible that on some systems the entire cache will be
59 even if this was not the specific request.
66 CacheClearU(), CacheControl()
69 Due to the strong cache coherency of x86 systems this function
70 is actually not needed. CPU snoops the address lines and
71 invalidate all cache which is out-of-date. It is valid for both
72 D and I caches). Even a BM-DMA transfer are perfectly safe here.
74 ******************************************************************************/