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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [rc203soc/] [sw/] [uClinux/] [include/] [asm-m68k/] [unistd.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1633 jcastillo
#ifndef _ASM_M68K_UNISTD_H_
2
#define _ASM_M68K_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
#ifdef __ELF__
174
 
175
#define _syscall0(type,name) \
176
type name(void) \
177
{ \
178
register long __res __asm__ ("%d0") = __NR_##name; \
179
__asm__ __volatile__ ("trap  #0" \
180
                      : "=g" (__res) \
181
                      : "0" (__NR_##name) \
182
                      : "%d0"); \
183
if (__res >= 0) \
184
        return (type) __res; \
185
errno = -__res; \
186
return -1; \
187
}
188
 
189
#define _syscall1(type,name,atype,a) \
190
type name(atype a) \
191
{ \
192
register long __res __asm__ ("%d0") = __NR_##name; \
193
__asm__ __volatile__ ("movel %2,%/d1\n\t" \
194
                      "trap  #0" \
195
                      : "=g" (__res) \
196
                      : "0" (__NR_##name), "g" ((long)(a)) \
197
                      : "%d0", "%d1"); \
198
if (__res >= 0) \
199
        return (type) __res; \
200
errno = -__res; \
201
return -1; \
202
}
203
 
204
#define _syscall2(type,name,atype,a,btype,b) \
205
type name(atype a,btype b) \
206
{ \
207
register long __res __asm__ ("%d0") = __NR_##name; \
208
__asm__ __volatile__ ("movel %2,%/d1\n\t" \
209
                      "movel %3,%/d2\n\t" \
210
                      "trap  #0" \
211
                      : "=g" (__res) \
212
                      : "0" (__NR_##name), "g" ((long)(a)), \
213
                                          "g" ((long)(b)) \
214
                      : "%d0", "%d1", "%d2"); \
215
if (__res >= 0) \
216
        return (type) __res; \
217
errno = -__res; \
218
return -1; \
219
}
220
 
221
#define _syscall3(type,name,atype,a,btype,b,ctype,c) \
222
type name(atype a,btype b,ctype c) \
223
{ \
224
register long __res __asm__ ("%d0") = __NR_##name; \
225
__asm__ __volatile__ ("movel %2,%/d1\n\t" \
226
                      "movel %3,%/d2\n\t" \
227
                      "movel %4,%/d3\n\t" \
228
                      "trap  #0" \
229
                      : "=g" (__res) \
230
                      : "0" (__NR_##name), "g" ((long)(a)), \
231
                                          "g" ((long)(b)), \
232
                                          "g" ((long)(c)) \
233
                      : "%d0", "%d1", "%d2", "%d3"); \
234
if (__res >= 0) \
235
        return (type) __res; \
236
errno = -__res; \
237
return -1; \
238
}
239
 
240
#define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \
241
type name (atype a, btype b, ctype c, dtype d) \
242
{ \
243
register long __res __asm__ ("%d0") = __NR_##name; \
244
__asm__ __volatile__ ("movel %2,%/d1\n\t" \
245
                      "movel %3,%/d2\n\t" \
246
                      "movel %4,%/d3\n\t" \
247
                      "movel %5,%/d4\n\t" \
248
                      "trap  #0" \
249
                      : "=g" (__res) \
250
                      : "0" (__NR_##name), "g" ((long)(a)), \
251
                                          "g" ((long)(b)), \
252
                                          "g" ((long)(c)), \
253
                                          "g" ((long)(d))  \
254
                      : "%d0", "%d1", "%d2", "%d3", "%d4"); \
255
if (__res >= 0) \
256
        return (type) __res; \
257
errno = -__res; \
258
return -1; \
259
}
260
 
261
#define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \
262
type name (atype a,btype b,ctype c,dtype d,etype e) \
263
{ \
264
register long __res __asm__ ("%d0") = __NR_##name; \
265
__asm__ __volatile__ ("movel %2,%/d1\n\t" \
266
                      "movel %3,%/d2\n\t" \
267
                      "movel %4,%/d3\n\t" \
268
                      "movel %5,%/d4\n\t" \
269
                      "movel %6,%/d5\n\t" \
270
                      "trap  #0" \
271
                      : "=g" (__res) \
272
                      : "0" (__NR_##name), "g" ((long)(a)), \
273
                                          "g" ((long)(b)), \
274
                                          "g" ((long)(c)), \
275
                                          "g" ((long)(d)), \
276
                                          "g" ((long)(e))  \
277
                      : "%d0", "%d1", "%d2", "%d3", "%d4", "%d5"); \
278
if (__res >= 0) \
279
        return (type) __res; \
280
errno = -__res; \
281
return -1; \
282
}
283
 
284
#else /* not ELF; a.out */
285
 
286
/* XXX - _foo needs to be __foo, while __NR_bar could be _NR_bar. */
287
#define _syscall0(type,name) \
288
type name(void) \
289
{ \
290
register long __res __asm__ ("d0") = __NR_##name; \
291
__asm__ __volatile__ ("trap  #0" \
292
                      : "=g" (__res) \
293
                      : "0" (__NR_##name) \
294
                      : "d0"); \
295
if (__res >= 0) \
296
        return (type) __res; \
297
errno = -__res; \
298
return -1; \
299
}
300
 
301
#define _syscall1(type,name,atype,a) \
302
type name(atype a) \
303
{ \
304
register long __res __asm__ ("d0") = __NR_##name; \
305
__asm__ __volatile__ ("movel %2,d1\n\t" \
306
                      "trap  #0" \
307
                      : "=g" (__res) \
308
                      : "0" (__NR_##name), "g" ((long)(a)) \
309
                      : "d0", "d1"); \
310
if (__res >= 0) \
311
        return (type) __res; \
312
errno = -__res; \
313
return -1; \
314
}
315
 
316
#define _syscall2(type,name,atype,a,btype,b) \
317
type name(atype a,btype b) \
318
{ \
319
register long __res __asm__ ("d0") = __NR_##name; \
320
__asm__ __volatile__ ("movel %2,d1\n\t" \
321
                      "movel %3,d2\n\t" \
322
                      "trap  #0" \
323
                      : "=g" (__res) \
324
                      : "0" (__NR_##name), "g" ((long)(a)), \
325
                                          "g" ((long)(b)) \
326
                      : "d0", "d1", "d2"); \
327
if (__res >= 0) \
328
        return (type) __res; \
329
errno = -__res; \
330
return -1; \
331
}
332
 
333
#define _syscall3(type,name,atype,a,btype,b,ctype,c) \
334
type name(atype a,btype b,ctype c) \
335
{ \
336
register long __res __asm__ ("d0") = __NR_##name; \
337
__asm__ __volatile__ ("movel %2,d1\n\t" \
338
                      "movel %3,d2\n\t" \
339
                      "movel %4,d3\n\t" \
340
                      "trap  #0" \
341
                      : "=g" (__res) \
342
                      : "0" (__NR_##name), "g" ((long)(a)), \
343
                                          "g" ((long)(b)), \
344
                                          "g" ((long)(c)) \
345
                      : "d0", "d1", "d2", "d3"); \
346
if (__res >= 0) \
347
        return (type) __res; \
348
errno = -__res; \
349
return -1; \
350
}
351
 
352
#define _syscall4(type,name,atype,a,btype,b,ctype,c,dtype,d) \
353
type name (atype a, btype b, ctype c, dtype d) \
354
{ \
355
register long __res __asm__ ("d0") = __NR_##name; \
356
__asm__ __volatile__ ("movel %2,d1\n\t" \
357
                      "movel %3,d2\n\t" \
358
                      "movel %4,d3\n\t" \
359
                      "movel %5,d4\n\t" \
360
                      "trap  #0" \
361
                      : "=g" (__res) \
362
                      : "0" (__NR_##name), "g" ((long)(a)), \
363
                                          "g" ((long)(b)), \
364
                                          "g" ((long)(c)), \
365
                                          "g" ((long)(d))  \
366
                      : "d0", "d1", "d2", "d3", "d4"); \
367
if (__res >= 0) \
368
        return (type) __res; \
369
errno = -__res; \
370
return -1; \
371
}
372
 
373
#define _syscall5(type,name,atype,a,btype,b,ctype,c,dtype,d,etype,e) \
374
type name (atype a,btype b,ctype c,dtype d,etype e) \
375
{ \
376
register long __res __asm__ ("d0") = __NR_##name; \
377
__asm__ __volatile__ ("movel %2,d1\n\t" \
378
                      "movel %3,d2\n\t" \
379
                      "movel %4,d3\n\t" \
380
                      "movel %5,d4\n\t" \
381
                      "movel %6,d5\n\t" \
382
                      "trap  #0" \
383
                      : "=g" (__res) \
384
                      : "0" (__NR_##name), "g" ((long)(a)), \
385
                                          "g" ((long)(b)), \
386
                                          "g" ((long)(c)), \
387
                                          "g" ((long)(d)), \
388
                                          "g" ((long)(e))  \
389
                      : "d0", "d1", "d2", "d3", "d4", "d5"); \
390
if (__res >= 0) \
391
        return (type) __res; \
392
errno = -__res; \
393
return -1; \
394
}
395
 
396
#endif /* ELF or otherwise */
397
 
398
#ifdef __KERNEL_SYSCALLS__
399
 
400
/*
401
 * we need this inline - forking from kernel space will result
402
 * in NO COPY ON WRITE (!!!), until an execve is executed. This
403
 * is no problem, but for the stack. This is handled by not letting
404
 * main() use the stack at all after fork(). Thus, no function
405
 * calls - which means inline code for fork too, as otherwise we
406
 * would use the stack upon exit from 'fork()'.
407
 *
408
 * Actually only pause and fork are needed inline, so that there
409
 * won't be any messing with the stack from main(), but we define
410
 * some others too.
411
 */
412
#define __NR__exit __NR_exit
413
static inline _syscall0(int,idle)
414
static inline _syscall0(int,fork)
415
static inline _syscall2(int,clone,unsigned long,flags,char *,usp)
416
static inline _syscall0(int,pause)
417
static inline _syscall0(int,setup)
418
static inline _syscall0(int,sync)
419
static inline _syscall0(pid_t,setsid)
420
static inline _syscall3(int,write,int,fd,const char *,buf,off_t,count)
421
static inline _syscall1(int,dup,int,fd)
422
static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp)
423
static inline _syscall3(int,open,const char *,file,int,flag,int,mode)
424
static inline _syscall1(int,close,int,fd)
425
static inline _syscall1(int,_exit,int,exitcode)
426
static inline _syscall3(pid_t,waitpid,pid_t,pid,int *,wait_stat,int,options)
427
 
428
/*
429
 * This is the mechanism for creating a new kernel thread.
430
 *
431
 * NOTE! Only a kernel-only process(ie the swapper or direct descendants
432
 * who haven't done an "execve()") should use this: it will work within
433
 * a system call from a "real" process, but the process memory space will
434
 * not be free'd until both the parent and the child have exited.
435
 */
436
static inline pid_t kernel_thread(int (*fn)(void *), void * arg, unsigned long flags)
437
{
438
        register long retval __asm__ ("d0") = __NR_clone;
439
        register long clone_arg __asm__ ("d1") = flags | CLONE_VM;
440
 
441
        __asm__ __volatile__
442
          ("movel %%sp,%%d2\n\t"
443
           "trap #0\n\t"                /* Linux/m68k system call */
444
           "cmpl %%sp,%%d2\n\t"         /* child or parent */
445
           "jeq 1f\n\t"                 /* parent - jump */
446
           "movel %3,%%sp@-\n\t"        /* push argument */
447
           "jsr %4@\n\t"                /* call fn */
448
           "movel %2,%0\n\t"            /* exit */
449
           "trap #0\n"
450
           "1:"
451
           : "=d" (retval)
452
           : "0" (__NR_clone), "i" (__NR_exit),
453
             "r" (arg), "a" (fn), "d" (clone_arg)
454
           : "d0", "d2");
455
 
456
        return retval;
457
}
458
 
459
static inline pid_t wait(int * wait_stat)
460
{
461
        return waitpid(-1,wait_stat,0);
462
}
463
 
464
#endif
465
 
466
#endif /* _ASM_M68K_UNISTD_H_ */

powered by: WebSVN 2.1.0

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