refactor: decouple i386 specific instruction invocation
[lunaix-os.git] / lunaix-os / includes / lunaix / syscall.h
1 #ifndef __LUNAIX_SYSCALL_H
2 #define __LUNAIX_SYSCALL_H
3
4 #include <arch/i386/vectors.h>
5 #include <usr/lunaix/syscallid.h>
6
7 #ifndef __ASM__
8
9 #define SYSCALL_ESTATUS(errno) -((errno) != 0)
10
11 void
12 syscall_install();
13
14 #define asmlinkage __attribute__((regparm(0)))
15
16 #define __PARAM_MAP1(t1, p1) t1 p1
17 #define __PARAM_MAP2(t1, p1, ...) t1 p1, __PARAM_MAP1(__VA_ARGS__)
18 #define __PARAM_MAP3(t1, p1, ...) t1 p1, __PARAM_MAP2(__VA_ARGS__)
19 #define __PARAM_MAP4(t1, p1, ...) t1 p1, __PARAM_MAP3(__VA_ARGS__)
20 #define __PARAM_MAP5(t1, p1, ...) t1 p1, __PARAM_MAP4(__VA_ARGS__)
21 #define __PARAM_MAP6(t1, p1, ...) t1 p1, __PARAM_MAP5(__VA_ARGS__)
22
23 #define __DEFINE_LXSYSCALL(rettype, name) asmlinkage rettype __lxsys_##name()
24
25 #define __DEFINE_LXSYSCALL1(rettype, name, t1, p1)                             \
26     asmlinkage rettype __lxsys_##name(__PARAM_MAP1(t1, p1))
27
28 #define __DEFINE_LXSYSCALL2(rettype, name, t1, p1, t2, p2)                     \
29     asmlinkage rettype __lxsys_##name(__PARAM_MAP2(t1, p1, t2, p2))
30
31 #define __DEFINE_LXSYSCALL3(rettype, name, t1, p1, t2, p2, t3, p3)             \
32     asmlinkage rettype __lxsys_##name(__PARAM_MAP3(t1, p1, t2, p2, t3, p3))
33
34 #define __DEFINE_LXSYSCALL4(rettype, name, t1, p1, t2, p2, t3, p3, t4, p4)     \
35     asmlinkage rettype __lxsys_##name(                                         \
36       __PARAM_MAP4(t1, p1, t2, p2, t3, p3, t4, p4))
37
38 #define __DEFINE_LXSYSCALL5(                                                   \
39   rettype, name, t1, p1, t2, p2, t3, p3, t4, p4, t5, p5)                       \
40     asmlinkage rettype __lxsys_##name(                                         \
41       __PARAM_MAP5(t1, p1, t2, p2, t3, p3, t4, p4, t5, p5))
42
43 #define __SYSCALL_INTERRUPTIBLE(code)                                          \
44     asm("sti");                                                                \
45     { code };                                                                  \
46     asm("cli");
47 #endif
48 #endif /* __LUNAIX_SYSCALL_H */