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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [uclinux/] [uClinux-2.0.x/] [include/] [asm-i386/] [unistd.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 199 simons
#ifndef _ASM_I386_UNISTD_H_
2
#define _ASM_I386_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
119
#define __NR_vhangup            111
120
#define __NR_idle               112
121
#define __NR_vm86               113
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_modify_ldt         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
#define __NR_poll               168
173
#define __NR_getpmsg            188
174
#define __NR_putpmsg            189
175
 
176
/* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
177
#define _syscall0(type,name) \
178
type name(void) \
179
{ \
180
long __res; \
181
__asm__ volatile ("int $0x80" \
182
        : "=a" (__res) \
183
        : "0" (__NR_##name)); \
184
if (__res >= 0) \
185
        return (type) __res; \
186
errno = -__res; \
187
return -1; \
188
}
189
 
190
#define _syscall1(type,name,type1,arg1) \
191
type name(type1 arg1) \
192
{ \
193
long __res; \
194
__asm__ volatile ("int $0x80" \
195
        : "=a" (__res) \
196
        : "0" (__NR_##name),"b" ((long)(arg1))); \
197
if (__res >= 0) \
198
        return (type) __res; \
199
errno = -__res; \
200
return -1; \
201
}
202
 
203
#define _syscall2(type,name,type1,arg1,type2,arg2) \
204
type name(type1 arg1,type2 arg2) \
205
{ \
206
long __res; \
207
__asm__ volatile ("int $0x80" \
208
        : "=a" (__res) \
209
        : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2))); \
210
if (__res >= 0) \
211
        return (type) __res; \
212
errno = -__res; \
213
return -1; \
214
}
215
 
216
#define _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) \
217
type name(type1 arg1,type2 arg2,type3 arg3) \
218
{ \
219
long __res; \
220
__asm__ volatile ("int $0x80" \
221
        : "=a" (__res) \
222
        : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
223
                  "d" ((long)(arg3))); \
224
if (__res>=0) \
225
        return (type) __res; \
226
errno=-__res; \
227
return -1; \
228
}
229
 
230
#define _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) \
231
type name (type1 arg1, type2 arg2, type3 arg3, type4 arg4) \
232
{ \
233
long __res; \
234
__asm__ volatile ("int $0x80" \
235
        : "=a" (__res) \
236
        : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
237
          "d" ((long)(arg3)),"S" ((long)(arg4))); \
238
if (__res>=0) \
239
        return (type) __res; \
240
errno=-__res; \
241
return -1; \
242
}
243
 
244
#define _syscall5(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4, \
245
          type5,arg5) \
246
type name (type1 arg1,type2 arg2,type3 arg3,type4 arg4,type5 arg5) \
247
{ \
248
long __res; \
249
__asm__ volatile ("int $0x80" \
250
        : "=a" (__res) \
251
        : "0" (__NR_##name),"b" ((long)(arg1)),"c" ((long)(arg2)), \
252
          "d" ((long)(arg3)),"S" ((long)(arg4)),"D" ((long)(arg5))); \
253
if (__res>=0) \
254
        return (type) __res; \
255
errno=-__res; \
256
return -1; \
257
}
258
 
259
#ifdef __KERNEL_SYSCALLS__
260
 
261
/*
262
 * we need this inline - forking from kernel space will result
263
 * in NO COPY ON WRITE (!!!), until an execve is executed. This
264
 * is no problem, but for the stack. This is handled by not letting
265
 * main() use the stack at all after fork(). Thus, no function
266
 * calls - which means inline code for fork too, as otherwise we
267
 * would use the stack upon exit from 'fork()'.
268
 *
269
 * Actually only pause and fork are needed inline, so that there
270
 * won't be any messing with the stack from main(), but we define
271
 * some others too.
272
 */
273
#define __NR__exit __NR_exit
274
static inline _syscall0(int,idle)
275
static inline _syscall0(int,fork)
276
static inline _syscall2(int,clone,unsigned long,flags,char *,esp)
277
static inline _syscall0(int,pause)
278
static inline _syscall0(int,setup)
279
static inline _syscall0(int,sync)
280
static inline _syscall0(pid_t,setsid)
281
static inline _syscall3(int,read,int,fd,char *,buf,off_t,count)
282
static inline _syscall3(off_t,lseek,int,fd,off_t,offset,int,count)
283
static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
284
static inline _syscall1(int,dup,int,fd)
285
static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
286
static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
287
static inline _syscall1(int,close,int,fd)
288
static inline _syscall1(int,_exit,int,exitcode)
289
static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
290
 
291
static inline pid_t wait(int * wait_stat)
292
{
293
        return waitpid(-1,wait_stat,0);
294
}
295
 
296
/*
297
 * This is the mechanism for creating a new kernel thread.
298
 *
299
 * NOTE! Only a kernel-only process(ie the swapper or direct descendants
300
 * who haven't done an "execve()") should use this: it will work within
301
 * a system call from a "real" process, but the process memory space will
302
 * not be free'd until both the parent and the child have exited.
303
 */
304
static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
305
{
306
        long retval;
307
 
308
        __asm__ __volatile__(
309
                "movl %%esp,%%esi\n\t"
310
                "int $0x80\n\t"         /* Linux/i386 system call */
311
                "cmpl %%esp,%%esi\n\t"  /* child or parent? */
312
                "je 1f\n\t"             /* parent - jump */
313
                "pushl %3\n\t"          /* push argument */
314
                "call *%4\n\t"          /* call fn */
315
                "movl %2,%0\n\t"        /* exit */
316
                "int $0x80\n"
317
                "1:\t"
318
                :"=a" (retval)
319
                :"0" (__NR_clone), "i" (__NR_exit),
320
                 "r" (arg), "r" (fn),
321
                 "b" (flags | CLONE_VM)
322
                :"si");
323
        return retval;
324
}
325
 
326
#endif
327
 
328
#endif /* _ASM_I386_UNISTD_H_ */

powered by: WebSVN 2.1.0

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