Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/driver-2.6
[linux-2.6] / include / asm-v850 / simsyscall.h
1 /*
2  * include/asm-v850/simsyscall.h -- `System calls' under the v850e emulator
3  *
4  *  Copyright (C) 2001  NEC Corporation
5  *  Copyright (C) 2001  Miles Bader <miles@gnu.org>
6  *
7  * This file is subject to the terms and conditions of the GNU General
8  * Public License.  See the file COPYING in the main directory of this
9  * archive for more details.
10  *
11  * Written by Miles Bader <miles@gnu.org>
12  */
13
14 #ifndef __V850_SIMSYSCALL_H__
15 #define __V850_SIMSYSCALL_H__
16
17 #define V850_SIM_SYS_exit(a...)         V850_SIM_SYSCALL_1 (1   , ##a)
18 #define V850_SIM_SYS_fork(a...)         V850_SIM_SYSCALL_0 (2   , ##a)
19 #define V850_SIM_SYS_read(a...)         V850_SIM_SYSCALL_3 (3   , ##a)
20 #define V850_SIM_SYS_write(a...)        V850_SIM_SYSCALL_3 (4   , ##a)
21 #define V850_SIM_SYS_open(a...)         V850_SIM_SYSCALL_2 (5   , ##a)
22 #define V850_SIM_SYS_close(a...)        V850_SIM_SYSCALL_1 (6   , ##a)
23 #define V850_SIM_SYS_wait4(a...)        V850_SIM_SYSCALL_4 (7   , ##a)
24 /* #define V850_SIM_SYS_creat(a...)     V850_SIM_SYSCALL_1 (8   , ##a) */
25 /* #define V850_SIM_SYS_link(a...)      V850_SIM_SYSCALL_1 (9   , ##a) */
26 /* #define V850_SIM_SYS_unlink(a...)    V850_SIM_SYSCALL_1 (10  , ##a) */
27 #define V850_SIM_SYS_execv(a...)        V850_SIM_SYSCALL_2 (11  , ##a)
28 /* #define V850_SIM_SYS_chdir(a...)     V850_SIM_SYSCALL_1 (12  , ##a) */
29 /* #define V850_SIM_SYS_mknod(a...)     V850_SIM_SYSCALL_1 (14  , ##a) */
30 #define V850_SIM_SYS_chmod(a...)        V850_SIM_SYSCALL_2 (15  , ##a)
31 #define V850_SIM_SYS_chown(a...)        V850_SIM_SYSCALL_2 (16  , ##a)
32 #define V850_SIM_SYS_lseek(a...)        V850_SIM_SYSCALL_3 (19  , ##a)
33 /* #define V850_SIM_SYS_getpid(a...)    V850_SIM_SYSCALL_1 (20  , ##a) */
34 /* #define V850_SIM_SYS_isatty(a...)    V850_SIM_SYSCALL_1 (21  , ##a) */
35 /* #define V850_SIM_SYS_fstat(a...)     V850_SIM_SYSCALL_1 (22  , ##a) */
36 #define V850_SIM_SYS_time(a...)         V850_SIM_SYSCALL_1 (23  , ##a)
37 #define V850_SIM_SYS_poll(a...)         V850_SIM_SYSCALL_3 (24  , ##a)
38 #define V850_SIM_SYS_stat(a...)         V850_SIM_SYSCALL_2 (38  , ##a)
39 #define V850_SIM_SYS_pipe(a...)         V850_SIM_SYSCALL_1 (42  , ##a)
40 #define V850_SIM_SYS_times(a...)        V850_SIM_SYSCALL_1 (43  , ##a)
41 #define V850_SIM_SYS_execve(a...)       V850_SIM_SYSCALL_3 (59  , ##a)
42 #define V850_SIM_SYS_gettimeofday(a...) V850_SIM_SYSCALL_2 (116 , ##a)
43 /* #define V850_SIM_SYS_utime(a...)     V850_SIM_SYSCALL_2 (201 , ##a) */
44 /* #define V850_SIM_SYS_wait(a...)      V850_SIM_SYSCALL_1 (202 , ##a) */
45
46 #define V850_SIM_SYS_make_raw(a...)     V850_SIM_SYSCALL_1 (1024 , ##a)
47
48
49 #define V850_SIM_SYSCALL_0(_call)                                             \
50 ({                                                                            \
51         register int call __asm__ ("r6") = _call;                             \
52         register int rval __asm__ ("r10");                                    \
53         __asm__ __volatile__ ("trap 31"                                       \
54                               : "=r" (rval)                                   \
55                               : "r" (call)                                    \
56                               : "r11", "memory");                             \
57         rval;                                                                 \
58 })
59 #define V850_SIM_SYSCALL_1(_call, _arg0)                                      \
60 ({                                                                            \
61         register int call __asm__ ("r6") = _call;                             \
62         register long arg0 __asm__ ("r7") = (long)_arg0;                      \
63         register int rval __asm__ ("r10");                                    \
64         __asm__ __volatile__ ("trap 31"                                       \
65                               : "=r" (rval)                                   \
66                               : "r" (call), "r" (arg0)                        \
67                               : "r11", "memory");                             \
68         rval;                                                                 \
69 })
70 #define V850_SIM_SYSCALL_2(_call, _arg0, _arg1)                               \
71 ({                                                                            \
72         register int call __asm__ ("r6") = _call;                             \
73         register long arg0 __asm__ ("r7") = (long)_arg0;                      \
74         register long arg1 __asm__ ("r8") = (long)_arg1;                      \
75         register int rval __asm__ ("r10");                                    \
76         __asm__ __volatile__ ("trap 31"                                       \
77                               : "=r" (rval)                                   \
78                               : "r" (call), "r" (arg0), "r" (arg1)            \
79                               : "r11", "memory");                             \
80         rval;                                                                 \
81 })
82 #define V850_SIM_SYSCALL_3(_call, _arg0, _arg1, _arg2)                        \
83 ({                                                                            \
84         register int call __asm__ ("r6") = _call;                             \
85         register long arg0 __asm__ ("r7") = (long)_arg0;                      \
86         register long arg1 __asm__ ("r8") = (long)_arg1;                      \
87         register long arg2 __asm__ ("r9") = (long)_arg2;                      \
88         register int rval __asm__ ("r10");                                    \
89         __asm__ __volatile__ ("trap 31"                                       \
90                               : "=r" (rval)                                   \
91                               : "r" (call), "r" (arg0), "r" (arg1), "r" (arg2)\
92                               : "r11", "memory");                             \
93         rval;                                                                 \
94 })
95
96 #define V850_SIM_SYSCALL(call, args...) \
97    V850_SIM_SYS_##call (args)
98
99 #endif /* __V850_SIMSYSCALL_H__ */