Add a set_rtc_mmss() handler for faster timekeeping.
[linux-2.6/linux-mips.git] / arch / mips64 / kernel / scall_n32.S
blob4a51128e98b5c3c64b2caccca6f68cbbc8d5dc27
1 /*
2  * This file is subject to the terms and conditions of the GNU General Public
3  * License.  See the file "COPYING" in the main directory of this archive
4  * for more details.
5  *
6  * Copyright (C) 1995, 96, 97, 98, 99, 2000, 01 by Ralf Baechle
7  * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
8  * Copyright (C) 2001 MIPS Technologies, Inc.
9  */
10 #include <linux/config.h>
11 #include <linux/errno.h>
12 #include <asm/asm.h>
13 #include <asm/asmmacro.h>
14 #include <asm/mipsregs.h>
15 #include <asm/regdef.h>
16 #include <asm/stackframe.h>
17 #include <asm/unistd.h>
19 /* This duplicates the definition from <linux/sched.h> */
20 #define PT_TRACESYS     0x00000002      /* tracing system calls */
22 /* This duplicates the definition from <asm/signal.h> */
23 #define SIGILL          4               /* Illegal instruction (ANSI).  */
25 #ifndef CONFIG_MIPS32_O32
26 /* No O32, so define handle_sys here */
27 #define handle_sysn32 handle_sys
28 #endif
30         .align  5
31 NESTED(handle_sysn32, PT_SIZE, sp)
32 #ifndef CONFIG_MIPS32_O32
33         .set    noat
34         SAVE_SOME
35         STI
36         .set    at
37 #endif
38         ld      t1, PT_EPC(sp)          # skip syscall on return
40         subu    t0, v0, __NR_N32_Linux  # check syscall number
41         sltiu   t0, t0, __NR_N32_Linux_syscalls + 1
42         daddiu  t1, 4                   # skip to next instruction
43         beqz    t0, not_n32_scall
44         sd      t1, PT_EPC(sp)
46         dsll    t0, v0, 3               # offset into table
47         ld      t2, (sysn32_call_table - (__NR_N32_Linux * 8))(t0)
49         sd      a3, PT_R26(sp)          # save a3 for syscall restarting
51         LONG_L  t0, TI_FLAGS($28)       # syscall tracing enabled?
52         bltz    t0, n32_syscall_trace_entry
54         jalr    t2                      # Do The Real Thing (TM)
56         li      t0, -EMAXERRNO - 1      # error?
57         sltu    t0, t0, v0
58         sd      t0, PT_R7(sp)           # set error flag
59         beqz    t0, 1f
61         negu    v0                      # error
62         sd      v0, PT_R0(sp)           # set flag for syscall restarting
63 1:      sd      v0, PT_R2(sp)           # result
65 FEXPORT(n32_syscall_exit)
66         local_irq_disable               # make sure need_resched and
67                                         # signals dont change between
68                                         # sampling and return
69         LONG_L  a2, TI_FLAGS($28)       # current->work
70         bnez    a2, n32_syscall_exit_work
72         RESTORE_SOME
73         RESTORE_SP_AND_RET
75 n32_syscall_exit_work:
76         SAVE_STATIC
77         j       syscall_exit_work
79 /* ------------------------------------------------------------------------ */
81 n32_syscall_trace_entry:
82         SAVE_STATIC
83         sd      t2,PT_R1(sp)
84         jal     do_syscall_trace
85         ld      t2,PT_R1(sp)
87         ld      a0, PT_R4(sp)           # Restore argument registers
88         ld      a1, PT_R5(sp)
89         ld      a2, PT_R6(sp)
90         ld      a3, PT_R7(sp)
91         jalr    t2
93         li      t0, -EMAXERRNO - 1      # error?
94         sltu    t0, t0, v0
95         sd      t0, PT_R7(sp)           # set error flag
96         beqz    t0, 1f
98         negu    v0                      # error
99         sd      v0, PT_R0(sp)           # set flag for syscall restarting
100 1:      sd      v0, PT_R2(sp)           # result
102         j       n32_syscall_exit
104 not_n32_scall:
105         /* This is not an n32 compatibility syscall, pass it on to
106            the n64 syscall handlers.  */
107         j       handle_sys64
109         END(handle_sysn32)
111 EXPORT(sysn32_call_table)
112         PTR     sys_read                        /* 6000 */
113         PTR     sys_write
114         PTR     sys_open
115         PTR     sys_close
116         PTR     sys_newstat
117         PTR     sys_newfstat                    /* 6005 */
118         PTR     sys_newlstat
119         PTR     sys_poll
120         PTR     sys_lseek
121         PTR     sys_mmap
122         PTR     sys_mprotect                    /* 6010 */
123         PTR     sys_munmap
124         PTR     sys_brk
125         PTR     sys32_rt_sigaction
126         PTR     sys32_rt_sigprocmask
127         PTR     compat_sys_ioctl                /* 6015 */
128         PTR     sys_pread64
129         PTR     sys_pwrite64
130         PTR     sys32_readv
131         PTR     sys32_writev
132         PTR     sys_access                      /* 6020 */
133         PTR     sys_pipe
134         PTR     sys32_select
135         PTR     sys_sched_yield
136         PTR     sys_mremap
137         PTR     sys_msync                       /* 6025 */
138         PTR     sys_mincore
139         PTR     sys_madvise
140         PTR     sys_shmget
141         PTR     sys_shmat
142         PTR     sys_shmctl                      /* 6030 */
143         PTR     sys_dup
144         PTR     sys_dup2
145         PTR     sys_pause
146         PTR     compat_sys_nanosleep
147         PTR     compat_sys_getitimer            /* 6035 */
148         PTR     compat_sys_setitimer
149         PTR     sys_alarm
150         PTR     sys_getpid
151         PTR     sys32_sendfile
152         PTR     sys_socket                      /* 6040 */
153         PTR     sys_connect
154         PTR     sys_accept
155         PTR     sys_sendto
156         PTR     sys_recvfrom
157         PTR     compat_sys_sendmsg              /* 6045 */
158         PTR     compat_sys_recvmsg
159         PTR     sys_shutdown
160         PTR     sys_bind
161         PTR     sys_listen
162         PTR     sys_getsockname                 /* 6050 */
163         PTR     sys_getpeername
164         PTR     sys_socketpair
165         PTR     compat_sys_setsockopt
166         PTR     sys_getsockopt
167         PTR     sys_clone                       /* 6055 */
168         PTR     sys_fork
169         PTR     sys32_execve
170         PTR     sys_exit
171         PTR     sys32_wait4
172         PTR     sys_kill                        /* 6060 */
173         PTR     sys32_newuname
174         PTR     sys_semget
175         PTR     sys_semop
176         PTR     sys_semctl
177         PTR     sys_shmdt                       /* 6065 */
178         PTR     sys_msgget
179         PTR     sys_msgsnd
180         PTR     sys_msgrcv
181         PTR     sys_msgctl
182         PTR     compat_sys_fcntl                /* 6070 */
183         PTR     sys_flock
184         PTR     sys_fsync
185         PTR     sys_fdatasync
186         PTR     sys_truncate
187         PTR     sys_ftruncate                   /* 6075 */
188         PTR     sys32_getdents
189         PTR     sys_getcwd
190         PTR     sys_chdir
191         PTR     sys_fchdir
192         PTR     sys_rename                      /* 6080 */
193         PTR     sys_mkdir
194         PTR     sys_rmdir
195         PTR     sys_creat
196         PTR     sys_link
197         PTR     sys_unlink                      /* 6085 */
198         PTR     sys_symlink
199         PTR     sys_readlink
200         PTR     sys_chmod
201         PTR     sys_fchmod
202         PTR     sys_chown                       /* 6090 */
203         PTR     sys_fchown
204         PTR     sys_lchown
205         PTR     sys_umask
206         PTR     sys32_gettimeofday
207         PTR     compat_sys_getrlimit            /* 6095 */
208         PTR     compat_sys_getrusage
209         PTR     sys32_sysinfo
210         PTR     compat_sys_times
211         PTR     sys_ptrace
212         PTR     sys_getuid                      /* 6100 */
213         PTR     sys_syslog
214         PTR     sys_getgid
215         PTR     sys_setuid
216         PTR     sys_setgid
217         PTR     sys_geteuid                     /* 6105 */
218         PTR     sys_getegid
219         PTR     sys_setpgid
220         PTR     sys_getppid
221         PTR     sys_getpgrp
222         PTR     sys_setsid                      /* 6110 */
223         PTR     sys_setreuid
224         PTR     sys_setregid
225         PTR     sys_getgroups
226         PTR     sys_setgroups
227         PTR     sys_setresuid                   /* 6115 */
228         PTR     sys_getresuid
229         PTR     sys_setresgid
230         PTR     sys_getresgid
231         PTR     sys_getpgid
232         PTR     sys_setfsuid                    /* 6120 */
233         PTR     sys_setfsgid
234         PTR     sys_getsid
235         PTR     sys_capget
236         PTR     sys_capset
237         PTR     sys32_rt_sigpending             /* 6125 */
238         PTR     sys32_rt_sigtimedwait
239         PTR     sys32_rt_sigqueueinfo
240         PTR     sys32_rt_sigsuspend
241         PTR     sys32_sigaltstack
242         PTR     compat_sys_utime                /* 6130 */
243         PTR     sys_mknod
244         PTR     sys32_personality
245         PTR     sys_ustat
246         PTR     compat_sys_statfs
247         PTR     compat_sys_fstatfs              /* 6135 */
248         PTR     sys_sysfs
249         PTR     sys_getpriority
250         PTR     sys_setpriority
251         PTR     sys_sched_setparam
252         PTR     sys_sched_getparam              /* 6140 */
253         PTR     sys_sched_setscheduler
254         PTR     sys_sched_getscheduler
255         PTR     sys_sched_get_priority_max
256         PTR     sys_sched_get_priority_min
257         PTR     sys32_sched_rr_get_interval     /* 6145 */
258         PTR     sys_mlock
259         PTR     sys_munlock
260         PTR     sys_mlockall
261         PTR     sys_munlockall
262         PTR     sys_vhangup                     /* 6150 */
263         PTR     sys_pivot_root
264         PTR     sys32_sysctl
265         PTR     sys_prctl
266         PTR     sys32_adjtimex
267         PTR     compat_sys_setrlimit            /* 6155 */
268         PTR     sys_chroot
269         PTR     sys_sync
270         PTR     sys_acct
271         PTR     sys32_settimeofday
272         PTR     sys_mount                       /* 6160 */
273         PTR     sys_umount
274         PTR     sys_swapon
275         PTR     sys_swapoff
276         PTR     sys_reboot
277         PTR     sys_sethostname                 /* 6165 */
278         PTR     sys_setdomainname
279         PTR     sys_ni_syscall                  /* was create_module */
280         PTR     sys_init_module
281         PTR     sys_delete_module
282         PTR     sys_ni_syscall                  /* 6170, was get_kernel_syms */
283         PTR     sys_ni_syscall                  /* was query_module */
284         PTR     sys_quotactl
285         PTR     sys_nfsservctl
286         PTR     sys_ni_syscall                  /* res. for getpmsg */
287         PTR     sys_ni_syscall                  /* 6175  for putpmsg */
288         PTR     sys_ni_syscall                  /* res. for afs_syscall */
289         PTR     sys_ni_syscall                  /* res. for security */
290         PTR     sys_gettid
291         PTR     sys32_readahead
292         PTR     sys_setxattr                    /* 6180 */
293         PTR     sys_lsetxattr
294         PTR     sys_fsetxattr
295         PTR     sys_getxattr
296         PTR     sys_lgetxattr
297         PTR     sys_fgetxattr                   /* 6185 */
298         PTR     sys_listxattr
299         PTR     sys_llistxattr
300         PTR     sys_flistxattr
301         PTR     sys_removexattr
302         PTR     sys_lremovexattr                /* 6190 */
303         PTR     sys_fremovexattr
304         PTR     sys_tkill
305         PTR     sys_time
306         PTR     compat_sys_futex
307         PTR     sys32_sched_setaffinity         /* 6195 */
308         PTR     sys32_sched_getaffinity
309         PTR     sys_cacheflush
310         PTR     sys_cachectl
311         PTR     sys_sysmips
312         PTR     sys_io_setup                    /* 6200 */
313         PTR     sys_io_destroy
314         PTR     sys_io_getevents
315         PTR     sys_io_submit
316         PTR     sys_io_cancel
317         PTR     sys_exit_group                  /* 6205 */
318         PTR     sys_lookup_dcookie
319         PTR     sys_epoll_create
320         PTR     sys_epoll_ctl
321         PTR     sys_epoll_wait
322         PTR     sys_remap_file_pages            /* 6210 */
323         PTR     sysn32_rt_sigreturn
324         PTR     sys_fcntl
325         PTR     sys_set_tid_address
326         PTR     sys_restart_syscall
327         PTR     sys_semtimedop                  /* 6215 */
328         PTR     sys_fadvise64
329         PTR     sys_statfs64
330         PTR     sys_fstatfs64
331         PTR     sys_sendfile64
332         PTR     sys_timer_create                /* 6220 */
333         PTR     sys_timer_settime
334         PTR     sys_timer_gettime
335         PTR     sys_timer_getoverrun
336         PTR     sys_timer_delete
337         PTR     sys_clock_settime               /* 6225 */
338         PTR     sys_clock_gettime
339         PTR     sys_clock_getres
340         PTR     sys_clock_nanosleep
341         PTR     sys_tgkill
342         PTR     compat_sys_utimes               /* 6230 */