aboutsummaryrefslogtreecommitdiff
path: root/kernel/include/api/syscall.h
blob: ea924c356ec58f7913226bbab0d72d921080fe98 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
#pragma once

/* Kernel and user header (via symlink) */

#ifdef __KERNEL__
#include "types.h"
#else

#include "sys/types.h"

#endif

/* Trap number for syscalls */
#define INTR_SYSCALL 0x2e

/* Keep all lists IN ORDER! */

#define SYS_syscall 0
#define SYS_exit 1
#define SYS_fork 2
#define SYS_read 3
#define SYS_write 4
#define SYS_open 5
#define SYS_close 6
#define SYS_waitpid 7
#define SYS_link 8
#define SYS_unlink 9
#define SYS_execve 10
#define SYS_chdir 11
#define SYS_sleep 12 /* NYI */
#define SYS_lseek 14
#define SYS_sync 15
#define SYS_nuke 16 /* NYI */
#define SYS_dup 17
#define SYS_pipe 18
#define SYS_ioctl 19 /* NYI */
#define SYS_rmdir 21
#define SYS_mkdir 22
#define SYS_getdents 23
#define SYS_mmap 24
#define SYS_mprotect 25 /* NYI */
#define SYS_munmap 26
#define SYS_rename 27 /* NYI */
#define SYS_uname 28
#define SYS_thr_create 29 /* NYI */
#define SYS_thr_cancel 30
#define SYS_thr_exit 31
#define SYS_sched_yield 32
#define SYS_thr_join 33 /* NYI */
#define SYS_gettid 34   /* NYI */
#define SYS_getpid 35
#define SYS_errno 39
#define SYS_halt 40
#define SYS_get_free_mem 41 /* NYI */
#define SYS_set_errno 42
#define SYS_dup2 43
#define SYS_brk 44
#define SYS_mount 45
#define SYS_umount 46
#define SYS_stat 47
#define SYS_time 48
#define SYS_usleep 49

/*
 * ... what does the scouter say about his syscall?
 * IT'S OVER 9000!
 * WHAT?! 9000?!
 */
#define SYS_debug 9001
#define SYS_kshell 9002

struct regs;
struct stat;

typedef struct argstr
{
    const char *as_str;
    size_t as_len; /* Not including null character */
} argstr_t;

typedef struct argvec
{
    argstr_t *av_vec;
    size_t av_len; /* Not including null entry */
} argvec_t;

typedef struct waitpid_args
{
    pid_t wpa_pid;
    int *wpa_status;
    int wpa_options;
} waitpid_args_t;

typedef struct mmap_args
{
    void *mma_addr;
    size_t mma_len;
    int mma_prot;
    int mma_flags;
    int mma_fd;
    off_t mma_off;
} mmap_args_t;

typedef struct munmap_args
{
    void *addr;
    size_t len;
} munmap_args_t;

typedef struct open_args
{
    argstr_t filename;
    int flags;
    int mode;
} open_args_t;

typedef struct read_args
{
    int fd;
    void *buf;
    size_t nbytes;
} read_args_t;

typedef struct write_args
{
    int fd;
    void *buf;
    size_t nbytes;
} write_args_t;

typedef struct mkdir_args
{
    argstr_t path;
    int mode;
} mkdir_args_t;

typedef struct link_args
{
    argstr_t to;
    argstr_t from;
} link_args_t;

typedef struct execve_args
{
    argstr_t filename;
    argvec_t argv;
    argvec_t envp;
} execve_args_t;

typedef struct rename_args
{
    argstr_t oldpath;
    argstr_t newpath;
} rename_args_t;

typedef struct getdents_args
{
    int fd;
    struct dirent *dirp;
    size_t count;
} getdents_args_t;

typedef struct lseek_args
{
    int fd;
    off_t offset;
    int whence;
} lseek_args_t;

typedef struct dup2_args
{
    int ofd;
    int nfd;
} dup2_args_t;

#ifdef __MOUNTING__
typedef struct mount_args
{
    argstr_t spec;
    argstr_t dir;
    argstr_t fstype;
} mount_args_t;
#endif

typedef struct stat_args
{
    argstr_t path;
    struct stat *buf;
} stat_args_t;

typedef struct usleep_args
{
    useconds_t usec;
} usleep_args_t;

struct utsname;