Changeset 444 for trunk/kernel/syscalls
- Timestamp:
- May 16, 2018, 8:31:35 PM (7 years ago)
- Location:
- trunk/kernel/syscalls
- Files:
-
- 14 added
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kernel/syscalls/shared_syscalls.h
r437 r444 1 /*2 * syscalls.h - Shared Kernel/User informations for syscalls.3 *4 * Author Alain Greiner (2016,2017)5 *6 * Copyright (c) UPMC Sorbonne Universites7 *8 * This file is part of ALMOS-MKH.9 *10 * ALMOS-MKH is free software; you can redistribute it and/or modify it11 * under the terms of the GNU General Public License as published by12 * the Free Software Foundation; version 2.0 of the License.13 *14 * ALMOS-MKH is distributed in the hope that it will be useful, but15 * WITHOUT ANY WARRANTY; without even the implied warranty of16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU17 * General Public License for more details.18 *19 * You should have received a copy of the GNU General Public License20 * along with ALMOS-MKH; if not, write to the Free Software Foundation,21 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA22 */23 24 1 #ifndef _SHARED_SYSCALLS_H_ 25 2 #define _SHARED_SYSCALLS_H_ 26 3 27 /******************************************************************************************28 * This enum defines the mnemonics for the syscall indexes.29 * It must be kept consistent with the array defined in do_syscalls.c30 *****************************************************************************************/31 4 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_ISATTY = 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, 76 SYS_WAIT = 39, 77 78 SYS_GET_CONFIG = 40, 79 SYS_GET_CORE = 41, 80 SYS_GET_CYCLE = 42, 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, /// 88 89 SYSCALLS_NR = 50, 90 }; 91 92 /******************************************************************************************* 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 /******************************************************************************************* 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 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_CLUSTER_PROCESSES = 3, 327 DISPLAY_VFS = 4, 328 DISPLAY_CHDEV = 5, 329 DISPLAY_TXT_PROCESSES = 6, 330 } 331 display_type_t; 332 333 /****************************************************************************************** 334 * This structure define the informations associated to a file descriptor, 335 * returned to user space by the stat() system call. 336 *****************************************************************************************/ 337 338 typedef struct stat 339 { 340 unsigned int dev; /*! ID of device containing file */ 341 unsigned int inum; /*! inode number */ 342 unsigned int mode; /*! protection */ 343 unsigned int nlink; /*! number of hard links */ 344 unsigned int uid; /*! user ID of owner */ 345 unsigned int gid; /*! group ID of owner */ 346 unsigned int rdev; /*! device ID (if special file) */ 347 unsigned int size; /*! total size, in bytes */ 348 unsigned int blksize; /*! blocksize for file system I/O */ 349 unsigned int blocks; /*! number of 512B blocks allocated */ 350 } 351 stat_t; 352 353 /******************************************************************************************* 354 * These two structure defines the informations returned to user by the opendir() 355 * function, used by the readdir() function, and released by the closedir() function. 356 * - "DIR" describes the complete directory. 357 * - "dirent" describes one directory entry. 358 ******************************************************************************************/ 359 360 #define DIRENT_NAME_MAX_LENGTH 56 361 #define DIRENT_MAX_NUMBER 63 362 363 struct dirent 364 { 365 unsigned int inum; /*! inode identifier */ 366 unsigned int type; /*! inode type */ 367 char name[DIRENT_NAME_MAX_LENGTH]; /*! directory entry name */ 368 }; 369 370 typedef struct user_directory 371 { 372 struct dirent entry[DIRENT_MAX_NUMBER]; 373 unsigned int current; 374 } 375 DIR; 376 377 /******************************************************************************************* 378 * These two structure are used by the gettimeofday() function. 379 ******************************************************************************************/ 380 381 struct timeval 382 { 383 unsigned int tv_sec; /*! seconds since Jan. 1, 1970 */ 384 unsigned int tv_usec; /*! and microseconds */ 385 }; 386 387 struct timezone 388 { 389 int tz_minuteswest; /*! of Greenwich */ 390 int tz_dsttime; /*! type of dst correction to apply */ 391 }; 5 #include <syscalls_numbers.h> 392 6 393 7 394 /********************************************************************************************* 395 * These macros can be used by the parent process to analyze a child process 396 * termination status, as returned by the wait() syscall. 397 * The termination state is a 32 bits word: 398 * - the 8 LSB bits contain the user defined exit status 399 * - the 24 other bits contain the flags defined below 400 ********************************************************************************************/ 401 402 #define PROCESS_TERM_STOP 0x100 /*! process received a SIGSTOP signal */ 403 #define PROCESS_TERM_KILL 0x200 /*! process killed by a SIGKILL signal */ 404 #define PROCESS_TERM_EXIT 0x400 /*! process terminated by a sys_exit() */ 405 #define PROCESS_TERM_WAIT 0x800 /*! parent process executed a sys_wait() */ 406 407 #define WIFEXITED( status ) (status & PROCESS_TERM_EXIT) 408 #define WIFSIGNALED( status ) (status & PROCESS_TERM_KILL) 409 #define WIFSTOPPED( status ) (status & PROCESS_TERM_STOP) 410 #define WEXITSTATUS( status ) (status & 0xFF) 8 #include <almos-mkh/almos-mkh.h> 9 #include <almos-mkh/dirent.h> 10 #include <almos-mkh/fcntl.h> 11 #include <almos-mkh/mman.h> 12 #include <almos-mkh/pthread.h> 13 #include <almos-mkh/signal.h> 14 #include <almos-mkh/stat.h> 15 #include <almos-mkh/stdio.h> 16 #include <almos-mkh/stdlib.h> 17 #include <almos-mkh/time.h> 18 #include <almos-mkh/wait.h> 411 19 412 20 413 #endif // _SHARED_SYSCALLS_H_ 21 #endif 22
Note: See TracChangeset
for help on using the changeset viewer.