2 Copyright © 1995-2013, The AROS Development Team. All rights reserved.
5 Desc: CachePostDMA() - Do what is necessary for DMA.
9 #include <aros/debug.h>
10 #include <exec/types.h>
11 #include <exec/execbase.h>
12 #include <aros/libcall.h>
14 extern void AROS_SLIB_ENTRY(CachePostDMA_00
,Exec
,128)(void);
15 extern void AROS_SLIB_ENTRY(CachePostDMA_30
,Exec
,128)(void);
16 extern void AROS_SLIB_ENTRY(CachePostDMA_40
,Exec
,128)(void);
18 #include <proto/exec.h>
20 /* See rom/exec/cachepostdma.c for documentation */
22 AROS_LH3(void, CachePostDMA
,
23 AROS_LHA(APTR
, address
, A0
),
24 AROS_LHA(ULONG
*, length
, A1
),
25 AROS_LHA(ULONG
, flags
, D0
),
26 struct ExecBase
*, SysBase
, 128, Exec
)
31 /* When called the first time, this patches up the
32 * Exec syscall table to directly point to the right routine.
35 if (SysBase
->AttnFlags
& AFF_68040
) {
37 func
= AROS_SLIB_ENTRY(CachePostDMA_40
, Exec
, 128);
38 } else if (SysBase
->AttnFlags
& AFF_68030
) {
40 func
= AROS_SLIB_ENTRY(CachePostDMA_30
, Exec
, 128);
42 /* Everybody else (68000, 68010) */
43 func
= AROS_SLIB_ENTRY(CachePostDMA_00
, Exec
, 128);
46 SetFunction((struct Library
*)SysBase
, -LIB_VECTSIZE
* 128, func
);
49 /* Call 'myself', which is now pointing to the correct routine */
50 return CachePostDMA(address
, length
, flags
);