OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [uclinux/] [uC-libc/] [include/] [asm/] [unistd.h] - Blame information for rev 199

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 199 simons
#ifndef _ASM_OR1K_UNISTD_H_
2
#define _ASM_OR1K_UNISTD_H_
3
 
4
/*
5
 * This file contains the system call numbers.
6
 */
7
 
8
#define __NR_setup                0     /* used only by init, to get system going */
9
#define __NR_exit                 1
10
#define __NR_fork                 2
11
#define __NR_read                 3
12
#define __NR_write                4
13
#define __NR_open                 5
14
#define __NR_close                6
15
#define __NR_waitpid              7
16
#define __NR_creat                8
17
#define __NR_link                 9
18
#define __NR_unlink              10
19
#define __NR_execve              11
20
#define __NR_chdir               12
21
#define __NR_time                13
22
#define __NR_mknod               14
23
#define __NR_chmod               15
24
#define __NR_chown               16
25
#define __NR_break               17
26
#define __NR_oldstat             18
27
#define __NR_lseek               19
28
#define __NR_getpid              20
29
#define __NR_mount               21
30
#define __NR_umount              22
31
#define __NR_setuid              23
32
#define __NR_getuid              24
33
#define __NR_stime               25
34
#define __NR_ptrace              26
35
#define __NR_alarm               27
36
#define __NR_oldfstat            28
37
#define __NR_pause               29
38
#define __NR_utime               30
39
#define __NR_stty                31
40
#define __NR_gtty                32
41
#define __NR_access              33
42
#define __NR_nice                34
43
#define __NR_ftime               35
44
#define __NR_sync                36
45
#define __NR_kill                37
46
#define __NR_rename              38
47
#define __NR_mkdir               39
48
#define __NR_rmdir               40
49
#define __NR_dup                 41
50
#define __NR_pipe                42
51
#define __NR_times               43
52
#define __NR_prof                44
53
#define __NR_brk                 45
54
#define __NR_setgid              46
55
#define __NR_getgid              47
56
#define __NR_signal              48
57
#define __NR_geteuid             49
58
#define __NR_getegid             50
59
#define __NR_acct                51
60
#define __NR_phys                52
61
#define __NR_lock                53
62
#define __NR_ioctl               54
63
#define __NR_fcntl               55
64
#define __NR_mpx                 56
65
#define __NR_setpgid             57
66
#define __NR_ulimit              58
67
#define __NR_oldolduname         59
68
#define __NR_umask               60
69
#define __NR_chroot              61
70
#define __NR_ustat               62
71
#define __NR_dup2                63
72
#define __NR_getppid             64
73
#define __NR_getpgrp             65
74
#define __NR_setsid              66
75
#define __NR_sigaction           67
76
#define __NR_sgetmask            68
77
#define __NR_ssetmask            69
78
#define __NR_setreuid            70
79
#define __NR_setregid            71
80
#define __NR_sigsuspend          72
81
#define __NR_sigpending          73
82
#define __NR_sethostname         74
83
#define __NR_setrlimit           75
84
#define __NR_getrlimit           76
85
#define __NR_getrusage           77
86
#define __NR_gettimeofday        78
87
#define __NR_settimeofday        79
88
#define __NR_getgroups           80
89
#define __NR_setgroups           81
90
#define __NR_select              82
91
#define __NR_symlink             83
92
#define __NR_oldlstat            84
93
#define __NR_readlink            85
94
#define __NR_uselib              86
95
#define __NR_swapon              87
96
#define __NR_reboot              88
97
#define __NR_readdir             89
98
#define __NR_mmap                90
99
#define __NR_munmap              91
100
#define __NR_truncate            92
101
#define __NR_ftruncate           93
102
#define __NR_fchmod              94
103
#define __NR_fchown              95
104
#define __NR_getpriority         96
105
#define __NR_setpriority         97
106
#define __NR_profil              98
107
#define __NR_statfs              99
108
#define __NR_fstatfs            100
109
#define __NR_ioperm             101
110
#define __NR_socketcall         102
111
#define __NR_syslog             103
112
#define __NR_setitimer          104
113
#define __NR_getitimer          105
114
#define __NR_stat               106
115
#define __NR_lstat              107
116
#define __NR_fstat              108
117
#define __NR_olduname           109
118
#define __NR_iopl               /* 110 */ not supported
119
#define __NR_vhangup            111
120
#define __NR_idle               112
121
#define __NR_vm86               /* 113 */ not supported
122
#define __NR_wait4              114
123
#define __NR_swapoff            115
124
#define __NR_sysinfo            116
125
#define __NR_ipc                117
126
#define __NR_fsync              118
127
#define __NR_sigreturn          119
128
#define __NR_clone              120
129
#define __NR_setdomainname      121
130
#define __NR_uname              122
131
#define __NR_cacheflush         123
132
#define __NR_adjtimex           124
133
#define __NR_mprotect           125
134
#define __NR_sigprocmask        126
135
#define __NR_create_module      127
136
#define __NR_init_module        128
137
#define __NR_delete_module      129
138
#define __NR_get_kernel_syms    130
139
#define __NR_quotactl           131
140
#define __NR_getpgid            132
141
#define __NR_fchdir             133
142
#define __NR_bdflush            134
143
#define __NR_sysfs              135
144
#define __NR_personality        136
145
#define __NR_afs_syscall        137 /* Syscall for Andrew File System */
146
#define __NR_setfsuid           138
147
#define __NR_setfsgid           139
148
#define __NR__llseek            140
149
#define __NR_getdents           141
150
#define __NR__newselect         142
151
#define __NR_flock              143
152
#define __NR_msync              144
153
#define __NR_readv              145
154
#define __NR_writev             146
155
#define __NR_getsid             147
156
#define __NR_fdatasync          148
157
#define __NR__sysctl            149
158
#define __NR_mlock              150
159
#define __NR_munlock            151
160
#define __NR_mlockall           152
161
#define __NR_munlockall         153
162
#define __NR_sched_setparam             154
163
#define __NR_sched_getparam             155
164
#define __NR_sched_setscheduler         156
165
#define __NR_sched_getscheduler         157
166
#define __NR_sched_yield                158
167
#define __NR_sched_get_priority_max     159
168
#define __NR_sched_get_priority_min     160
169
#define __NR_sched_rr_get_interval      161
170
#define __NR_nanosleep          162
171
#define __NR_mremap             163
172
 
173
 
174
#define _syscall0(type,name) \
175
type name(void) \
176
{ \
177
register long __res __asm__ ("r11") = __NR_##name; \
178
__asm__ __volatile__ ("l.sys    1" : "=r" (__res): "r" (__res)); \
179
__asm__ __volatile__ ("l.nop"); \
180
return(__res); \
181
}
182
 
183
#define _syscall1(type,name,atype,a) \
184
type name(atype a) \
185
{ \
186
register long __res __asm__ ("r11") = __NR_##name; \
187
register long __a __asm__ ("r3") = (long)(a); \
188
__asm__ __volatile__ ("l.sys     1" \
189
                        : "=r" (__res) \
190
                        : "r" (__res), "r" (__a)); \
191
__asm__ __volatile__ ("l.nop"); \
192
return(__res); \
193
}
194
 
195
#define _syscall2(type,name,atype,a,btype,b) \
196
type name(atype a,btype b) \
197
{ \
198
register long __res __asm__ ("r11") = __NR_##name; \
199
register long __a __asm__ ("r3") = (long)(a); \
200
register long __b __asm__ ("r4") = (long)(b); \
201
__asm__ __volatile__ ("l.sys     1" \
202
                        : "=r" (__res) \
203
                        : "r" (__res), "r" (__a), "r" (__b)); \
204
__asm__ __volatile__ ("l.nop"); \
205
return(__res); \
206
}
207
 
208
#define _syscall3(type,name,atype,a,btype,b,ctype,c) \
209
type name(atype a,btype b,ctype c) \
210
{ \
211
register long __res __asm__ ("r11") = __NR_##name; \
212
register long __a __asm__ ("r3") = (long)(a); \
213
register long __b __asm__ ("r4") = (long)(b); \
214
register long __c __asm__ ("r5") = (long)(c); \
215
__asm__ __volatile__ ("l.sys     1" \
216
                        : "=r" (__res) \
217
                        : "r" (__res), "r" (__a), "r" (__b), "r" (__c)); \
218
__asm__ __volatile__ ("l.nop"); \
219
return(__res); \
220
}
221
 
222
#define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \
223
type name (atype a, btype b, ctype c, dtype d) \
224
{ \
225
register long __res __asm__ ("r11") = __NR_##name; \
226
register long __a __asm__ ("r3") = (long)(a); \
227
register long __b __asm__ ("r4") = (long)(b); \
228
register long __c __asm__ ("r5") = (long)(c); \
229
register long __d __asm__ ("r6") = (long)(d); \
230
__asm__ __volatile__ ("l.sys     1" \
231
                        : "=r" (__res) \
232
                        : "r" (__res), "r" (__a), "r" (__b), "r" (__c), "r" (__d)); \
233
__asm__ __volatile__ ("l.nop"); \
234
return(__res); \
235
}
236
 
237
#define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \
238
type name (atype a,btype b,ctype c,dtype d,etype e) \
239
{ \
240
register long __res __asm__ ("r11") = __NR_##name; \
241
register long __a __asm__ ("r3") = (long)(a); \
242
register long __b __asm__ ("r4") = (long)(b); \
243
register long __c __asm__ ("r5") = (long)(c); \
244
register long __d __asm__ ("r6") = (long)(d); \
245
register long __e __asm__ ("r7") = (long)(e); \
246
__asm__ __volatile__ ("l.sys     1" \
247
                        : "=r" (__res) \
248
                        : "r" (__res), "r" (__a), "r" (__b), "r" (__c), "r" (__d), "r" (__e)); \
249
__asm__ __volatile__ ("l.nop"); \
250
return(__res); \
251
}
252
 
253
#ifdef __KERNEL_SYSCALLS__
254
 
255
/*
256
 * we need this inline - forking from kernel space will result
257
 * in NO COPY ON WRITE (!!!), until an execve is executed. This
258
 * is no problem, but for the stack. This is handled by not letting
259
 * main() use the stack at all after fork(). Thus, no function
260
 * calls - which means inline code for fork too, as otherwise we
261
 * would use the stack upon exit from 'fork()'.
262
 *
263
 * Actually only pause and fork are needed inline, so that there
264
 * won't be any messing with the stack from main(), but we define
265
 * some others too.
266
 */
267
#define __NR__exit __NR_exit
268
static inline _syscall0(int,idle)
269
static inline _syscall0(int,fork)
270
static inline _syscall2(int,clone,unsigned long,flags,char *,usp)
271
static inline _syscall0(int,pause)
272
static inline _syscall0(int,setup)
273
static inline _syscall0(int,sync)
274
static inline _syscall0(pid_t,setsid)
275
static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
276
static inline _syscall1(int,dup,int,fd)
277
static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
278
static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
279
static inline _syscall1(int,close,int,fd)
280
static inline _syscall1(int,_exit,int,exitcode)
281
static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
282
 
283
/*
284
 * This is the mechanism for creating a new kernel thread.
285
 *
286
 * NOTE! Only a kernel-only process(ie the swapper or direct descendants
287
 * who haven't done an "execve()") should use this: it will work within
288
 * a system call from a "real" process, but the process memory space will
289
 * not be free'd until both the parent and the child have exited.
290
 */
291
static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
292
{
293
        long retval;
294
        __asm__  __volatile__ (
295
                "l.addi r11,r0,%1 \n\t" /* __NR_clone */
296
                "l.addi r3,%5,0 \n\t"  /* load flags as arg to clone */
297
                "l.sys 1 \n\t"          /* syscall */
298
                "l.nop\n"
299
                "l.sfeqi r11,0 \n\t"
300
                "l.bnf 1f \n\t"         /* return if parent */
301
                /* this is in child */
302
                "l.addi r3,%3,0 \n\t"   /* child -- load args and call fn */
303
                "l.addi r9,%4,0 \n\t"
304
                "l.jalr r9 \n\t"
305
                "l.nop \n\t"
306
                "l.addi r3,r11,0 \n\t"
307
                "l.addi r11,r0,%2 \n\t"         /* exit after child exits */
308
                "l.addi r11,r0,0 \n\t"
309
                "l.sys 1\n"
310
                "l.nop\n"
311
                /* parent */
312
                "1: \n\t"
313
                :"=r" (retval)
314
                :"i" (__NR_clone), "i" (__NR_exit),
315
                 "r" (arg), "r" (fn), "r" (CLONE_VM|flags)
316
                :"r1", "r3", "r4", "r9", "r11", "memory" );
317
        return retval;
318
}
319
 
320
static inline pid_t wait(int * wait_stat)
321
{
322
        return waitpid(-1,wait_stat,0);
323
}
324
 
325
#endif
326
 
327
#endif /* _ASM_OR1K_UNISTD_H_ */

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.