[410] | 1 | /* |
---|
| 2 | * syscalls.h - Shared Kernel/User informations for syscalls. |
---|
| 3 | * |
---|
| 4 | * Author Alain Greiner (2016,2017) |
---|
| 5 | * |
---|
| 6 | * Copyright (c) UPMC Sorbonne Universites |
---|
| 7 | * |
---|
| 8 | * This file is part of ALMOS-MKH. |
---|
| 9 | * |
---|
| 10 | * ALMOS-MKH is free software; you can redistribute it and/or modify it |
---|
| 11 | * under the terms of the GNU General Public License as published by |
---|
| 12 | * the Free Software Foundation; version 2.0 of the License. |
---|
| 13 | * |
---|
| 14 | * ALMOS-MKH is distributed in the hope that it will be useful, but |
---|
| 15 | * WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
| 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
---|
| 17 | * General Public License for more details. |
---|
| 18 | * |
---|
| 19 | * You should have received a copy of the GNU General Public License |
---|
| 20 | * along with ALMOS-MKH; if not, write to the Free Software Foundation, |
---|
| 21 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
---|
| 22 | */ |
---|
| 23 | |
---|
| 24 | #ifndef _SHARED_SYSCALLS_H_ |
---|
| 25 | #define _SHARED_SYSCALLS_H_ |
---|
| 26 | |
---|
| 27 | /****************************************************************************************** |
---|
| 28 | * This enum defines the mnemonics for the syscall indexes. |
---|
| 29 | * It must be kept consistent with the array defined in do_syscalls.c |
---|
| 30 | *****************************************************************************************/ |
---|
| 31 | |
---|
| 32 | enum |
---|
| 33 | { |
---|
| 34 | SYS_THREAD_EXIT = 0, |
---|
| 35 | SYS_THREAD_YIELD = 1, |
---|
| 36 | SYS_THREAD_CREATE = 2, |
---|
| 37 | SYS_THREAD_JOIN = 3, |
---|
| 38 | SYS_THREAD_DETACH = 4, |
---|
| 39 | SYS_THREAD_CANCEL = 5, |
---|
| 40 | SYS_SEM = 6, |
---|
| 41 | SYS_CONDVAR = 7, |
---|
| 42 | SYS_BARRIER = 8, |
---|
| 43 | SYS_MUTEX = 9, |
---|
| 44 | |
---|
| 45 | SYS_EXIT = 10, |
---|
| 46 | SYS_MUNMAP = 11, |
---|
| 47 | SYS_OPEN = 12, |
---|
| 48 | SYS_MMAP = 13, |
---|
| 49 | SYS_READ = 14, |
---|
| 50 | SYS_WRITE = 15, |
---|
| 51 | SYS_LSEEK = 16, |
---|
| 52 | SYS_CLOSE = 17, |
---|
| 53 | SYS_UNLINK = 18, |
---|
| 54 | SYS_PIPE = 19, |
---|
| 55 | |
---|
| 56 | SYS_CHDIR = 20, |
---|
| 57 | SYS_MKDIR = 21, |
---|
| 58 | SYS_MKFIFO = 22, |
---|
| 59 | SYS_OPENDIR = 23, |
---|
| 60 | SYS_READDIR = 24, |
---|
| 61 | SYS_CLOSEDIR = 25, |
---|
| 62 | SYS_GETCWD = 26, |
---|
| 63 | SYS_UNDEFINED_27 = 27, /// |
---|
| 64 | SYS_ALARM = 28, |
---|
| 65 | SYS_RMDIR = 29, |
---|
| 66 | |
---|
| 67 | SYS_UTLS = 30, |
---|
| 68 | SYS_CHMOD = 31, |
---|
| 69 | SYS_SIGNAL = 32, |
---|
| 70 | SYS_TIMEOFDAY = 33, |
---|
| 71 | SYS_KILL = 34, |
---|
| 72 | SYS_GETPID = 35, |
---|
| 73 | SYS_FORK = 36, |
---|
| 74 | SYS_EXEC = 37, |
---|
| 75 | SYS_STAT = 38, |
---|
[421] | 76 | SYS_WAIT = 39, |
---|
[410] | 77 | |
---|
| 78 | SYS_GET_CONFIG = 40, |
---|
| 79 | SYS_GET_CORE = 41, |
---|
| 80 | SYS_GET_CYCLE = 42, |
---|
[421] | 81 | SYS_DISPLAY = 43, |
---|
| 82 | SYS_UNDEFINED_44 = 44, /// |
---|
| 83 | SYS_THREAD_SLEEP = 45, |
---|
| 84 | SYS_THREAD_WAKEUP = 46, |
---|
| 85 | SYS_TRACE = 47, |
---|
| 86 | SYS_FG = 48, |
---|
| 87 | SYS_UNDEFINED_49 = 49, /// |
---|
[410] | 88 | |
---|
[421] | 89 | SYSCALLS_NR = 50, |
---|
[410] | 90 | }; |
---|
| 91 | |
---|
| 92 | /******************************************************************************************* |
---|
[416] | 93 | * This defines the signal type mnemonics for the kill() syscall. |
---|
| 94 | * WARNING : Only the three SIGKILL / SIGSTOP / SIGCONT are supported (december 2017) |
---|
| 95 | ******************************************************************************************/ |
---|
| 96 | |
---|
| 97 | #define SIGHUP 1 /*! hangup */ |
---|
| 98 | #define SIGINT 2 /*! interrupt */ |
---|
| 99 | #define SIGQUIT 3 /*! quit */ |
---|
| 100 | #define SIGILL 4 /*! illegal instruction (not reset when caught) */ |
---|
| 101 | #define SIGTRAP 5 /*! trace trap (not reset when caught) */ |
---|
| 102 | #define SIGABRT 6 /*! used by abort, replace SIGIOT in the future */ |
---|
| 103 | #define SIGEMT 7 /*! EMT instruction */ |
---|
| 104 | #define SIGFPE 8 /*! floating point exception */ |
---|
| 105 | #define SIGKILL 9 /*! kill (cannot be caught or ignored) */ |
---|
| 106 | #define SIGBUS 10 /*! bus error */ |
---|
| 107 | #define SIGSEGV 11 /*! segmentation violation */ |
---|
| 108 | #define SIGSYS 12 /*! bad argument to system call */ |
---|
| 109 | #define SIGPIPE 13 /*! write on a pipe with no one to read it */ |
---|
| 110 | #define SIGALRM 14 /*! alarm clock */ |
---|
| 111 | #define SIGTERM 15 /*! software termination signal from kill */ |
---|
| 112 | #define SIGURG 16 /*! urgent condition on IO channel */ |
---|
| 113 | #define SIGSTOP 17 /*! sendable stop signal not from tty */ |
---|
| 114 | #define SIGTSTP 18 /*! stop signal from tty */ |
---|
| 115 | #define SIGCONT 19 /*! continue a stopped process */ |
---|
| 116 | #define SIGCHLD 20 /*! to parent on child stop or exit */ |
---|
| 117 | #define SIGTTIN 21 /*! to readers pgrp upon background tty read */ |
---|
| 118 | #define SIGTTOU 22 /*! like TTIN for output if (tp->t_local<OSTOP) */ |
---|
| 119 | #define SIGIO 23 /*! input/output possible signal */ |
---|
| 120 | #define SIGXCPU 24 /*! exceeded CPU time limit */ |
---|
| 121 | #define SIGXFSZ 25 /*! exceeded file size limit */ |
---|
| 122 | #define SIGVTALRM 26 /*! virtual time alarm */ |
---|
| 123 | #define SIGPROF 27 /*! profiling time alarm */ |
---|
| 124 | #define SIGWINCH 28 /*! window changed */ |
---|
| 125 | #define SIGLOST 29 /*! resource lost (eg, record-lock lost) */ |
---|
| 126 | #define SIGUSR1 30 /*! user defined signal 1 */ |
---|
| 127 | #define SIGUSR2 31 /*! user defined signal 2 */ |
---|
| 128 | |
---|
| 129 | /******************************************************************************************* |
---|
[410] | 130 | * This enum defines the supported terminaison status values for the exit() syscall. |
---|
| 131 | ******************************************************************************************/ |
---|
| 132 | |
---|
| 133 | typedef enum |
---|
| 134 | { |
---|
| 135 | EXIT_SUCCESS, |
---|
| 136 | EXIT_FAILURE, |
---|
| 137 | } |
---|
| 138 | exit_statut_t; |
---|
| 139 | |
---|
| 140 | /******************************************************************************************* |
---|
| 141 | * These typedef define the POSIX thread related types. |
---|
| 142 | ******************************************************************************************/ |
---|
| 143 | |
---|
| 144 | typedef unsigned int sem_t; |
---|
| 145 | typedef unsigned int pthread_cond_t; |
---|
| 146 | typedef unsigned int pthread_condattr_t; |
---|
| 147 | typedef unsigned int pthread_rwlock_t; |
---|
| 148 | typedef unsigned int pthread_rwlockattr_t; |
---|
| 149 | typedef unsigned int pthread_key_t; |
---|
| 150 | |
---|
| 151 | /******************************************************************************************* |
---|
| 152 | * This structure and enum define the attributes for the "pthread_create" syscall. |
---|
| 153 | ******************************************************************************************/ |
---|
| 154 | |
---|
| 155 | typedef unsigned int pthread_t; |
---|
| 156 | |
---|
| 157 | typedef struct pthread_attr_s |
---|
| 158 | { |
---|
| 159 | unsigned int attributes; /*! user defined attributes bit vector */ |
---|
| 160 | unsigned int cxy; /*! target cluster identifier */ |
---|
| 161 | unsigned int lid; /*! target core local index */ |
---|
| 162 | } |
---|
| 163 | pthread_attr_t; |
---|
| 164 | |
---|
| 165 | enum |
---|
| 166 | { |
---|
| 167 | PT_ATTR_DETACH = 0x0001, /*! user defined not joinable */ |
---|
| 168 | PT_ATTR_CLUSTER_DEFINED = 0x0002, /*! user defined target cluster */ |
---|
| 169 | PT_ATTR_CORE_DEFINED = 0x0004, /*! user defined core index in cluster */ |
---|
| 170 | }; |
---|
| 171 | |
---|
| 172 | /******************************************************************************************* |
---|
| 173 | * This enum defines the operation mnemonics for operations on POSIX unnamed semaphores. |
---|
| 174 | ******************************************************************************************/ |
---|
| 175 | |
---|
| 176 | typedef enum |
---|
| 177 | { |
---|
| 178 | SEM_INIT, |
---|
| 179 | SEM_DESTROY, |
---|
| 180 | SEM_GETVALUE, |
---|
| 181 | SEM_WAIT, |
---|
| 182 | SEM_POST, |
---|
| 183 | } |
---|
| 184 | sem_operation_t; |
---|
| 185 | |
---|
| 186 | /******************************************************************************************* |
---|
| 187 | * This enum defines the operation mnemonics for operations on POSIX condition variables. |
---|
| 188 | ******************************************************************************************/ |
---|
| 189 | |
---|
| 190 | typedef enum |
---|
| 191 | { |
---|
| 192 | CONDVAR_INIT, |
---|
| 193 | CONDVAR_DESTROY, |
---|
| 194 | CONDVAR_WAIT, |
---|
| 195 | CONDVAR_SIGNAL, |
---|
| 196 | CONDVAR_BROADCAST, |
---|
| 197 | } |
---|
| 198 | condvar_operation_t; |
---|
| 199 | |
---|
| 200 | /******************************************************************************************* |
---|
| 201 | * This enum defines the operation mnemonics for operations on POSIX barriers. |
---|
| 202 | ******************************************************************************************/ |
---|
| 203 | |
---|
| 204 | typedef enum |
---|
| 205 | { |
---|
| 206 | BARRIER_INIT, |
---|
| 207 | BARRIER_DESTROY, |
---|
| 208 | BARRIER_WAIT, |
---|
| 209 | } |
---|
| 210 | barrier_operation_t; |
---|
| 211 | |
---|
| 212 | /******************************************************************************************* |
---|
| 213 | * This enum defines the operation mnemonics for operations on POSIX mutex. |
---|
| 214 | ******************************************************************************************/ |
---|
| 215 | |
---|
| 216 | typedef enum |
---|
| 217 | { |
---|
| 218 | MUTEX_INIT, |
---|
| 219 | MUTEX_DESTROY, |
---|
| 220 | MUTEX_LOCK, |
---|
| 221 | MUTEX_UNLOCK, |
---|
| 222 | } |
---|
| 223 | mutex_operation_t; |
---|
| 224 | |
---|
| 225 | /******************************************************************************************* |
---|
| 226 | * This enum defines the attributes bit-vector for an "open" syscall. |
---|
| 227 | ******************************************************************************************/ |
---|
| 228 | |
---|
| 229 | typedef enum |
---|
| 230 | { |
---|
| 231 | O_RDONLY = 0x0010000, /*! open file in read-only mode */ |
---|
| 232 | O_WRONLY = 0x0020000, /*! open file in write-only mode */ |
---|
| 233 | O_RDWR = 0x0030000, /*! open file in read/write mode */ |
---|
| 234 | O_NONBLOCK = 0x0040000, /*! do not block if data non available */ |
---|
| 235 | O_APPEND = 0x0080000, /*! append on each write */ |
---|
| 236 | O_CREAT = 0x0100000, /*! create file if it does not exist */ |
---|
| 237 | O_TRUNC = 0x0200000, /*! file length is forced to 0 */ |
---|
| 238 | O_EXCL = 0x0400000, /*! error if VFS_O_CREAT and file exist */ |
---|
| 239 | O_SYNC = 0x0800000, /*! synchronize File System on each write */ |
---|
| 240 | O_CLOEXEC = 0x1000000, /*! set the close-on-exec flag in file descriptor */ |
---|
| 241 | O_DIR = 0x2000000, /*! new file descriptor is for a directory */ |
---|
| 242 | } |
---|
| 243 | open_attr_t; |
---|
| 244 | |
---|
| 245 | /******************************************************************************************* |
---|
| 246 | * This structure contains the arguments passed to the "mmap" syscall. |
---|
| 247 | ******************************************************************************************/ |
---|
| 248 | |
---|
| 249 | #define MAP_FAILED 0 |
---|
| 250 | |
---|
| 251 | typedef enum |
---|
| 252 | { |
---|
| 253 | PROT_NONE = 0x0, /*! no access */ |
---|
| 254 | PROT_EXEC = 0x1, /*! executable */ |
---|
| 255 | PROT_WRITE = 0x2, /*! writable */ |
---|
| 256 | PROT_READ = 0x4, /*! readable */ |
---|
| 257 | } |
---|
| 258 | mmap_prot_t; |
---|
| 259 | |
---|
| 260 | typedef enum |
---|
| 261 | { |
---|
| 262 | MAP_FILE = 0x00000000, /*! map an open file defined by its fdid */ |
---|
| 263 | MAP_ANON = 0x00000001, /*! map an anonymous vseg in local cluster */ |
---|
| 264 | MAP_REMOTE = 0x00000002, /*! map an anonymous vseg in remote cluster (cxy == fdid) */ |
---|
| 265 | MAP_PRIVATE = 0x00000010, /*! */ |
---|
| 266 | MAP_SHARED = 0x00000020, /*! */ |
---|
| 267 | MAP_FIXED = 0x00000100, /*! non supported */ |
---|
| 268 | } |
---|
| 269 | mmap_flags_t; |
---|
| 270 | |
---|
| 271 | typedef struct mmap_attr_s |
---|
| 272 | { |
---|
| 273 | void * addr; /*! requested virtual address (unused : should be NULL) */ |
---|
| 274 | unsigned int length; /*! requested vseg size (bytes) */ |
---|
| 275 | unsigned int prot; /*! access modes */ |
---|
| 276 | unsigned int flags; /*! MAP_FILE / MAP_ANON / MAP_PRIVATE / MAP_SHARED */ |
---|
| 277 | unsigned int fdid; /*! file descriptor index (if MAP_FILE) */ |
---|
| 278 | unsigned int offset; /*! file offset (if MAP_FILE) */ |
---|
| 279 | } |
---|
| 280 | mmap_attr_t; |
---|
| 281 | |
---|
| 282 | /******************************************************************************************* |
---|
| 283 | * This enum defines the operation mnemonics for the "lseek" syscall. |
---|
| 284 | ******************************************************************************************/ |
---|
| 285 | |
---|
| 286 | typedef enum |
---|
| 287 | { |
---|
| 288 | SEEK_SET = 0, /*! new_offset <= offset */ |
---|
| 289 | SEEK_CUR = 1, /*! new_offset <= current_offset + offset */ |
---|
| 290 | SEEK_END = 2, /*! new_offset <= current_size + offset */ |
---|
| 291 | } |
---|
| 292 | lseek_operation_t; |
---|
| 293 | |
---|
| 294 | /******************************************************************************************* |
---|
| 295 | * This enum defines the operation mnemonics for the "utls" syscall (Thread Local Storage). |
---|
| 296 | ******************************************************************************************/ |
---|
| 297 | |
---|
| 298 | typedef enum |
---|
| 299 | { |
---|
| 300 | UTLS_SET = 1, |
---|
| 301 | UTLS_GET = 2, |
---|
| 302 | UTLS_GET_ERRNO = 3, |
---|
| 303 | } |
---|
| 304 | utls_operation_t; |
---|
| 305 | |
---|
| 306 | /******************************************************************************************* |
---|
| 307 | * This enum defines the operation mnemonics for the "trace" syscall. |
---|
| 308 | ******************************************************************************************/ |
---|
| 309 | |
---|
| 310 | typedef enum |
---|
| 311 | { |
---|
| 312 | TRACE_ON = 0, |
---|
| 313 | TRACE_OFF = 1, |
---|
| 314 | } |
---|
| 315 | trace_operation_t; |
---|
| 316 | |
---|
[421] | 317 | /******************************************************************************************* |
---|
| 318 | * This enum defines the type of structure for the "display" syscall. |
---|
| 319 | ******************************************************************************************/ |
---|
| 320 | |
---|
| 321 | typedef enum |
---|
| 322 | { |
---|
| 323 | DISPLAY_STRING = 0, |
---|
| 324 | DISPLAY_VMM = 1, |
---|
| 325 | DISPLAY_SCHED = 2, |
---|
| 326 | DISPLAY_PROCESS = 3, |
---|
| 327 | DISPLAY_VFS = 4, |
---|
| 328 | DISPLAY_CHDEV = 5, |
---|
| 329 | } |
---|
| 330 | display_type_t; |
---|
| 331 | |
---|
[410] | 332 | /****************************************************************************************** |
---|
| 333 | * This structure define the informations associated to a file descriptor, |
---|
| 334 | * returned to user space by the stat() system call. |
---|
| 335 | *****************************************************************************************/ |
---|
| 336 | |
---|
| 337 | typedef struct stat |
---|
| 338 | { |
---|
| 339 | unsigned int dev; /*! ID of device containing file */ |
---|
| 340 | unsigned int inum; /*! inode number */ |
---|
| 341 | unsigned int mode; /*! protection */ |
---|
| 342 | unsigned int nlink; /*! number of hard links */ |
---|
| 343 | unsigned int uid; /*! user ID of owner */ |
---|
| 344 | unsigned int gid; /*! group ID of owner */ |
---|
| 345 | unsigned int rdev; /*! device ID (if special file) */ |
---|
| 346 | unsigned int size; /*! total size, in bytes */ |
---|
| 347 | unsigned int blksize; /*! blocksize for file system I/O */ |
---|
| 348 | unsigned int blocks; /*! number of 512B blocks allocated */ |
---|
| 349 | } |
---|
| 350 | stat_t; |
---|
| 351 | |
---|
| 352 | /******************************************************************************************* |
---|
| 353 | * These two structure defines the informations returned to user by the opendir() |
---|
| 354 | * function, used by the readdir() function, and released by the closedir() function. |
---|
| 355 | * - "DIR" describes the complete directory. |
---|
| 356 | * - "dirent" describes one directory entry. |
---|
| 357 | ******************************************************************************************/ |
---|
| 358 | |
---|
| 359 | #define DIRENT_NAME_MAX_LENGTH 56 |
---|
| 360 | #define DIRENT_MAX_NUMBER 63 |
---|
| 361 | |
---|
| 362 | struct dirent |
---|
| 363 | { |
---|
| 364 | unsigned int inum; /*! inode identifier */ |
---|
| 365 | unsigned int type; /*! inode type */ |
---|
| 366 | char name[DIRENT_NAME_MAX_LENGTH]; /*! directory entry name */ |
---|
| 367 | }; |
---|
| 368 | |
---|
| 369 | typedef struct user_directory |
---|
| 370 | { |
---|
| 371 | struct dirent entry[DIRENT_MAX_NUMBER]; |
---|
| 372 | unsigned int current; |
---|
| 373 | } |
---|
| 374 | DIR; |
---|
| 375 | |
---|
| 376 | /******************************************************************************************* |
---|
| 377 | * These two structure are used by the gettimeofday() function. |
---|
| 378 | ******************************************************************************************/ |
---|
| 379 | |
---|
| 380 | struct timeval |
---|
| 381 | { |
---|
| 382 | unsigned int tv_sec; /*! seconds since Jan. 1, 1970 */ |
---|
| 383 | unsigned int tv_usec; /*! and microseconds */ |
---|
| 384 | }; |
---|
| 385 | |
---|
| 386 | struct timezone |
---|
| 387 | { |
---|
[421] | 388 | int tz_minuteswest; /*! of Greenwich */ |
---|
[410] | 389 | int tz_dsttime; /*! type of dst correction to apply */ |
---|
| 390 | }; |
---|
| 391 | |
---|
| 392 | |
---|
| 393 | |
---|
| 394 | #endif // _SHARED_SYSCALLS_H_ |
---|