Prevent overflow of the KernelBase->kb_Interrupts array when initialising IRQs. This...
[AROS.git] / compiler / include / defines / execlock.h
blob70f5dafcff0e515dfc14569d15c2b36e557d9f28
1 #ifndef DEFINES_EXECLOCK_H
2 #define DEFINES_EXECLOCK_H
4 /*
5 Copyright © 2017, The AROS Development Team. All rights reserved.
6 */
8 /*
9 Desc: Defines for execlock
12 #include <aros/libcall.h>
13 #include <exec/types.h>
14 #include <aros/symbolsets.h>
15 #include <aros/preprocessor/variadic/cast2iptr.hpp>
17 __BEGIN_DECLS
20 #if !defined(__EXECLOCK_LIBAPI__) || (36 <= __EXECLOCK_LIBAPI__)
22 #define __ObtainSystemLock_WB(__ExecLockBase, __arg1, __arg2, __arg3) ({\
23 AROS_LIBREQ(ExecLockBase,36)\
24 AROS_LC3(int, ObtainSystemLock, \
25 AROS_LCA(struct List *,(__arg1),A0), \
26 AROS_LCA(ULONG,(__arg2),D0), \
27 AROS_LCA(ULONG,(__arg3),D1), \
28 struct Library *, (__ExecLockBase), 1, ExecLock);\
31 #define ObtainSystemLock(arg1, arg2, arg3) \
32 __ObtainSystemLock_WB(__aros_getbase_ExecLockBase(), (arg1), (arg2), (arg3))
34 #endif /* !defined(__EXECLOCK_LIBAPI__) || (36 <= __EXECLOCK_LIBAPI__) */
36 #if !defined(__EXECLOCK_LIBAPI__) || (36 <= __EXECLOCK_LIBAPI__)
38 #define __ReleaseSystemLock_WB(__ExecLockBase, __arg1, __arg2) ({\
39 AROS_LIBREQ(ExecLockBase,36)\
40 AROS_LC2NR(void, ReleaseSystemLock, \
41 AROS_LCA(struct List *,(__arg1),A0), \
42 AROS_LCA(ULONG,(__arg2),D1), \
43 struct Library *, (__ExecLockBase), 2, ExecLock);\
46 #define ReleaseSystemLock(arg1, arg2) \
47 __ReleaseSystemLock_WB(__aros_getbase_ExecLockBase(), (arg1), (arg2))
49 #endif /* !defined(__EXECLOCK_LIBAPI__) || (36 <= __EXECLOCK_LIBAPI__) */
51 #if !defined(__EXECLOCK_LIBAPI__) || (36 <= __EXECLOCK_LIBAPI__)
53 #define __AllocLock_WB(__ExecLockBase) ({\
54 AROS_LIBREQ(ExecLockBase,36)\
55 AROS_LC0(APTR, AllocLock, \
56 struct Library *, (__ExecLockBase), 3, ExecLock);\
59 #define AllocLock() \
60 __AllocLock_WB(__aros_getbase_ExecLockBase())
62 #endif /* !defined(__EXECLOCK_LIBAPI__) || (36 <= __EXECLOCK_LIBAPI__) */
64 #if !defined(__EXECLOCK_LIBAPI__) || (36 <= __EXECLOCK_LIBAPI__)
66 #define __FreeLock_WB(__ExecLockBase, __arg1) ({\
67 AROS_LIBREQ(ExecLockBase,36)\
68 AROS_LC1NR(void, FreeLock, \
69 AROS_LCA(APTR,(__arg1),A0), \
70 struct Library *, (__ExecLockBase), 4, ExecLock);\
73 #define FreeLock(arg1) \
74 __FreeLock_WB(__aros_getbase_ExecLockBase(), (arg1))
76 #endif /* !defined(__EXECLOCK_LIBAPI__) || (36 <= __EXECLOCK_LIBAPI__) */
78 #if !defined(__EXECLOCK_LIBAPI__) || (36 <= __EXECLOCK_LIBAPI__)
80 #define __ObtainLock_WB(__ExecLockBase, __arg1, __arg2, __arg3) ({\
81 AROS_LIBREQ(ExecLockBase,36)\
82 AROS_LC3(int, ObtainLock, \
83 AROS_LCA(APTR,(__arg1),A0), \
84 AROS_LCA(ULONG,(__arg2),D0), \
85 AROS_LCA(ULONG,(__arg3),D1), \
86 struct Library *, (__ExecLockBase), 5, ExecLock);\
89 #define ObtainLock(arg1, arg2, arg3) \
90 __ObtainLock_WB(__aros_getbase_ExecLockBase(), (arg1), (arg2), (arg3))
92 #endif /* !defined(__EXECLOCK_LIBAPI__) || (36 <= __EXECLOCK_LIBAPI__) */
94 #if !defined(__EXECLOCK_LIBAPI__) || (36 <= __EXECLOCK_LIBAPI__)
96 #define __ReleaseLock_WB(__ExecLockBase, __arg1, __arg2) ({\
97 AROS_LIBREQ(ExecLockBase,36)\
98 AROS_LC2NR(void, ReleaseLock, \
99 AROS_LCA(APTR,(__arg1),A0), \
100 AROS_LCA(ULONG,(__arg2),D1), \
101 struct Library *, (__ExecLockBase), 6, ExecLock);\
104 #define ReleaseLock(arg1, arg2) \
105 __ReleaseLock_WB(__aros_getbase_ExecLockBase(), (arg1), (arg2))
107 #endif /* !defined(__EXECLOCK_LIBAPI__) || (36 <= __EXECLOCK_LIBAPI__) */
109 __END_DECLS
111 #endif /* DEFINES_EXECLOCK_H*/